From bdc63b4ee68fb08d3ef281212bdffac2bc038717 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 15 Sep 2014 20:54:03 -0700 Subject: [PATCH] RT 4.0.22 - remove inadvertantly commited files --- rt/Makefile | 572 --- rt/bin/rt-crontool | 468 --- rt/bin/rt-mailgate | 526 --- rt/bin/webmux.pl | 205 - rt/config.layout | 255 -- rt/config.log | 299 -- rt/config.pld | 23 - rt/config.status | 1102 ----- rt/etc/RT_Config.pm | 2814 ------------- rt/lib/.RT.pm.swp | Bin 20480 -> 0 bytes rt/lib/RT.pm.orig | 887 ---- rt/lib/RT/.Handle.pm.swp | Bin 61440 -> 0 bytes rt/lib/RT/.Ticket.pm.swp | Bin 16384 -> 0 bytes rt/lib/RT/Config.pm.orig | 1382 ------ rt/lib/RT/CustomField.pm.orig | 2170 ---------- rt/lib/RT/EmailParser.pm.orig | 692 ---- rt/lib/RT/Record.pm.orig | 2102 ---------- rt/lib/RT/Ticket.pm.orig | 4379 -------------------- rt/lib/RT/Tickets.pm.orig | 3892 ----------------- rt/lib/RTx/.Calendar.pm.swp | Bin 20480 -> 0 bytes rt/lib/RTx/.Schedule.pm.swp | Bin 16384 -> 0 bytes rt/sbin/rt-attributes-viewer | 122 - rt/sbin/rt-clean-sessions | 190 - rt/sbin/rt-dump-metadata | 357 -- rt/sbin/rt-email-dashboards | 173 - rt/sbin/rt-email-digest | 380 -- rt/sbin/rt-email-group-admin | 527 --- rt/sbin/rt-fulltext-indexer | 479 --- rt/sbin/rt-preferences-viewer | 149 - rt/sbin/rt-server | 285 -- rt/sbin/rt-server.fcgi | 285 -- rt/sbin/rt-session-viewer | 121 - rt/sbin/rt-setup-database | 609 --- rt/sbin/rt-setup-fulltext-index | 720 ---- rt/sbin/rt-shredder | 325 -- rt/sbin/rt-test-dependencies | 694 ---- rt/sbin/rt-validate-aliases | 343 -- rt/sbin/rt-validator | 1182 ------ rt/sbin/standalone_httpd | 285 -- rt/share/html/Admin/Users/Modify.html.orig | 421 -- rt/share/html/Elements/.CalendarDaySchedule.swp | Bin 12288 -> 0 bytes rt/share/html/Elements/.CalendarEventWeekly.swp | Bin 12288 -> 0 bytes rt/share/html/Elements/.CalendarSlotSchedule.swp | Bin 16384 -> 0 bytes rt/share/html/NoAuth/css/.calendar.css.swp | Bin 12288 -> 0 bytes rt/share/html/Schedule/.UserBar.swp | Bin 12288 -> 0 bytes rt/share/html/Search/.Calendar.html.swp | Bin 53248 -> 0 bytes rt/share/html/Search/.Schedule.html.swp | Bin 12288 -> 0 bytes rt/share/html/Search/Bulk.html.orig | 460 -- rt/share/html/Search/Results.tsv.orig | 137 - rt/share/html/Ticket/Create.html.orig | 463 --- .../Elements/EditTransactionCustomFields.orig | 112 - rt/share/html/Ticket/Update.html.orig | 353 -- 52 files changed, 30940 deletions(-) delete mode 100644 rt/Makefile delete mode 100755 rt/bin/rt-crontool delete mode 100755 rt/bin/rt-mailgate delete mode 100644 rt/bin/webmux.pl delete mode 100644 rt/config.layout delete mode 100644 rt/config.log delete mode 100644 rt/config.pld delete mode 100755 rt/config.status delete mode 100644 rt/etc/RT_Config.pm delete mode 100644 rt/lib/.RT.pm.swp delete mode 100644 rt/lib/RT.pm.orig delete mode 100644 rt/lib/RT/.Handle.pm.swp delete mode 100644 rt/lib/RT/.Ticket.pm.swp delete mode 100644 rt/lib/RT/Config.pm.orig delete mode 100644 rt/lib/RT/CustomField.pm.orig delete mode 100644 rt/lib/RT/EmailParser.pm.orig delete mode 100755 rt/lib/RT/Record.pm.orig delete mode 100755 rt/lib/RT/Ticket.pm.orig delete mode 100755 rt/lib/RT/Tickets.pm.orig delete mode 100644 rt/lib/RTx/.Calendar.pm.swp delete mode 100644 rt/lib/RTx/.Schedule.pm.swp delete mode 100755 rt/sbin/rt-attributes-viewer delete mode 100755 rt/sbin/rt-clean-sessions delete mode 100755 rt/sbin/rt-dump-metadata delete mode 100755 rt/sbin/rt-email-dashboards delete mode 100755 rt/sbin/rt-email-digest delete mode 100755 rt/sbin/rt-email-group-admin delete mode 100755 rt/sbin/rt-fulltext-indexer delete mode 100755 rt/sbin/rt-preferences-viewer delete mode 100755 rt/sbin/rt-server delete mode 100755 rt/sbin/rt-server.fcgi delete mode 100755 rt/sbin/rt-session-viewer delete mode 100755 rt/sbin/rt-setup-database delete mode 100755 rt/sbin/rt-setup-fulltext-index delete mode 100755 rt/sbin/rt-shredder delete mode 100755 rt/sbin/rt-test-dependencies delete mode 100755 rt/sbin/rt-validate-aliases delete mode 100755 rt/sbin/rt-validator delete mode 100755 rt/sbin/standalone_httpd delete mode 100755 rt/share/html/Admin/Users/Modify.html.orig delete mode 100644 rt/share/html/Elements/.CalendarDaySchedule.swp delete mode 100644 rt/share/html/Elements/.CalendarEventWeekly.swp delete mode 100644 rt/share/html/Elements/.CalendarSlotSchedule.swp delete mode 100644 rt/share/html/NoAuth/css/.calendar.css.swp delete mode 100644 rt/share/html/Schedule/.UserBar.swp delete mode 100644 rt/share/html/Search/.Calendar.html.swp delete mode 100644 rt/share/html/Search/.Schedule.html.swp delete mode 100755 rt/share/html/Search/Bulk.html.orig delete mode 100644 rt/share/html/Search/Results.tsv.orig delete mode 100755 rt/share/html/Ticket/Create.html.orig delete mode 100644 rt/share/html/Ticket/Elements/EditTransactionCustomFields.orig delete mode 100755 rt/share/html/Ticket/Update.html.orig diff --git a/rt/Makefile b/rt/Makefile deleted file mode 100644 index 1ad55304f..000000000 --- a/rt/Makefile +++ /dev/null @@ -1,572 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-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 -# - - -PERL = /usr/bin/perl -INSTALL = /usr/bin/install -c -CC = @CC@ - -RT_LAYOUT = Freeside - -CONFIG_FILE_PATH = /opt/rt3/etc -CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm -SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm - - -RT_VERSION_MAJOR = 4 -RT_VERSION_MINOR = 0 -RT_VERSION_PATCH = 22 - -RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) -TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) - - -# This is the group that all of the installed files will be chgrp'ed to. -RTGROUP = freeside - - -# User which should own rt binaries. -BIN_OWNER = root - -# User that should own all of RT's libraries, generally root. -LIBS_OWNER = root - -# Group that should own all of RT's libraries, generally root. -LIBS_GROUP = bin - -WEB_USER = freeside -WEB_GROUP = freeside - - -APACHECTL = /usr/sbin/apachectl - - -# DESTDIR allows you to specify that RT be installed somewhere other than -# where it will eventually reside. DESTDIR _must_ have a trailing slash -# if it's defined. - -DESTDIR = - - - -RT_PATH = /opt/rt3 -RT_ETC_PATH = /opt/rt3/etc -RT_BIN_PATH = /opt/rt3/bin -RT_SBIN_PATH = /opt/rt3/sbin -RT_LIB_PATH = /opt/rt3/lib -RT_MAN_PATH = /opt/rt3/man -RT_VAR_PATH = /opt/rt3/var -RT_DOC_PATH = /opt/rt3/docs -RT_FONT_PATH = /opt/rt3/share/fonts -RT_LEXICON_PATH = /opt/rt3/share/po -RT_LOCAL_PATH = /opt/rt3/local -LOCAL_PLUGIN_PATH = /opt/rt3/local/plugins -LOCAL_ETC_PATH = /opt/rt3/local/etc -LOCAL_LIB_PATH = /opt/rt3/local/lib -LOCAL_LEXICON_PATH = /opt/rt3/local/po -MASON_HTML_PATH = /var/www/freeside/rt -MASON_LOCAL_HTML_PATH = /opt/rt3/local/html -MASON_DATA_PATH = /usr/local/etc/freeside/masondata -MASON_SESSION_PATH = /opt/rt3/var/session_data -RT_LOG_PATH = /opt/rt3/var/log - -# RT_READABLE_DIR_MODE is the mode of directories that are generally meant -# to be accessable -RT_READABLE_DIR_MODE = 0755 - - - - - -# RT's CLI -RT_CLI_BIN = rt -# RT's mail gateway -RT_MAILGATE_BIN = rt-mailgate -# RT's cron tool -RT_CRON_BIN = rt-crontool - - - -BINARIES = $(RT_MAILGATE_BIN) \ - $(RT_CLI_BIN) \ - $(RT_CRON_BIN) - -SYSTEM_BINARIES = rt-attributes-viewer \ - rt-clean-sessions \ - rt-dump-metadata \ - rt-email-dashboards \ - rt-email-digest \ - rt-email-group-admin \ - rt-fulltext-indexer \ - rt-preferences-viewer \ - rt-server \ - rt-session-viewer \ - rt-server.fcgi \ - rt-session-viewer \ - rt-setup-database \ - rt-setup-fulltext-index \ - rt-shredder \ - rt-test-dependencies \ - rt-validator \ - rt-validate-aliases \ - standalone_httpd - - -ETC_FILES = acl.Pg \ - acl.Oracle \ - acl.mysql \ - schema.Pg \ - schema.Oracle \ - schema.mysql \ - schema.SQLite \ - initialdata - - - -WEB_HANDLER = modperl2 - - - -# -# DB_TYPE defines what sort of database RT trys to talk to -# "mysql", "Oracle", "Pg", and "SQLite" are known to work. - -DB_TYPE = Pg - -# Set DBA to the name of a unix account with the proper permissions and -# environment to run your commandline SQL sbin - -# Set DB_DBA to the name of a DB user with permission to create new databases - -# For mysql, you probably want 'root' -# For Pg, you probably want 'postgres' -# For Oracle, you want 'system' - -DB_DBA = freeside - -DB_HOST = localhost - -# If you're not running your database server on its default port, -# specifiy the port the database server is running on below. -# It's generally safe to leave this blank - -DB_PORT = - - - - -# -# Set this to the canonical name of the interface RT will be talking to the -# database on. If you said that the RT_DB_HOST above was "localhost," this -# should be too. This value will be used to grant rt access to the database. -# If you want to access the RT database from multiple hosts, you'll need -# to grant those database rights by hand. -# - -DB_RT_HOST = localhost - -# set this to the name you want to give to the RT database in -# your database server. For Oracle, this should be the name of your sid - -DB_DATABASE = freeside -DB_RT_USER = freeside -DB_RT_PASS = - - - -TEST_FILES = t/*.t t/*/*.t -TEST_VERBOSE = 0 - -RT_TEST_PARALLEL_NUM ?= 5 - - -#################################################################### - -all: default - -default: - @echo "Please read RT's README before beginning your installation." - - - -instruct: - @echo "Congratulations. RT is now installed." - @echo "" - @echo "" - @echo "You must now configure RT by editing $(SITE_CONFIG_FILE)." - @echo "" - @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'" - - -upgrade-instruct: - @echo "Congratulations. RT has been upgraded. You should now check over" - @echo "$(CONFIG_FILE) for any necessary site customization. Additionally," - @echo "you should update RT's system database objects by running " - @echo " make upgrade-database" - - -upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct - -my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"') -testdeps: - $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers) - -depends: fixdeps - -fixdeps: - $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers) - -#}}} - -fixperms: - # Make the libraries readable - chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH) - chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH) - chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH) - chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH) - - - chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH) - - chmod 0755 $(DESTDIR)$(RT_ETC_PATH) - cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) || true - - #TODO: the config file should probably be able to have its - # owner set separately from the binaries. - chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH) - chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH) - - chmod 0440 $(DESTDIR)$(CONFIG_FILE) - chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE) - # Make this externally readable - chmod 0440 $(DESTDIR)$(RT_ETC_PATH)/initialdata - - # Make the system binaries - cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES)) - - # Make the system binaries executable also - cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES); chgrp $(RTGROUP) $(SYSTEM_BINARIES)) - - # Make upgrade scripts executable if they are in the source. - # - # Note that we use the deprecated (by GNU/POSIX find) -perm +0NNN syntax - # instead of -perm /0NNN since BSD find doesn't support the latter. - ( cd etc/upgrade && find . -type f -not -name '*.in' -perm +0111 -print ) | while read file ; do \ - chmod a+x "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ - done - - # Make the web ui readable by all. - chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ - $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ - $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) - chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \ - $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ - $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) - chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \ - $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ - $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) - - # Make the web ui's data dir writable - chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \ - $(DESTDIR)$(MASON_SESSION_PATH) - chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \ - $(DESTDIR)$(MASON_SESSION_PATH) - chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \ - $(DESTDIR)$(MASON_SESSION_PATH) - -dirs: - $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) - $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH) - $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache - $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc - $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj - $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH) - $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH) - -install: testdeps config-install dirs files-install fixperms instruct - -files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install - -config-install: - $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH) - -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE) - [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE) - @echo "Installed configuration. About to install RT in $(RT_PATH)" - -test: - $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES) - -parallel-test: test-parallel - -test-parallel: - RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj$(RT_TEST_PARALLEL_NUM)","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )' - -regression-reset-db: force-dropdb - $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba-password '' - -initdb :: initialize-database - -initialize-database: - $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --prompt-for-dba-password - -upgrade-database: - $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action upgrade --prompt-for-dba-password - -dropdb: - $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --prompt-for-dba-password - -force-dropdb: - $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba-password '' --force - -critic: - perlcritic --quiet sbin bin lib - -libs-install: - [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH) - -( cd lib && find . -type d -print ) | while read dir ; do \ - $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \ - done - -( cd lib && find . -type f -print ) | while read file ; do \ - $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \ - done - -html-install: - [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) - -( cd share/html && find . -type d -print ) | while read dir ; do \ - $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \ - done - -( cd share/html && find . -type f -print ) | while read file ; do \ - $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \ - done - -font-install: - [ -d $(DESTDIR)$(RT_FONT_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) - -( cd share/fonts && find . -type f -print ) | while read file ; do \ - $(INSTALL) -m 0644 "share/fonts/$$file" "$(DESTDIR)$(RT_FONT_PATH)/$$file" ; \ - done - - -po-install: - [ -d $(DESTDIR)$(RT_LEXICON_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) - -( cd share/po && find . -type f -print ) | while read file ; do \ - $(INSTALL) -m 0644 "share/po/$$file" "$(DESTDIR)$(RT_LEXICON_PATH)/$$file" ; \ - done - - - -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) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH) - -( cd docs && find . -type d -print ) | while read dir ; do \ - $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_DOC_PATH)/$$dir" ; \ - done - -( cd docs && find . -type f -print ) | while read file ; do \ - $(INSTALL) -m 0644 "docs/$$file" "$(DESTDIR)$(RT_DOC_PATH)/$$file" ; \ - done - -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/ - - -etc-install: - [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH) - for file in $(ETC_FILES) ; do \ - $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \ - done - [ -d $(DESTDIR)$(RT_ETC_PATH)/upgrade ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)/upgrade - -( cd etc/upgrade && find . -type d -print ) | while read dir ; do \ - $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$dir" ; \ - done - -( cd etc/upgrade && find . -type f -not -name '*.in' -print ) | while read file ; do \ - $(INSTALL) -m 0644 "etc/upgrade/$$file" "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ - done - - -sbin-install: - $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH) - for file in $(SYSTEM_BINARIES) ; do \ - $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \ - done - - - -bin-install: - $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH) - for file in $(BINARIES) ; do \ - $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \ - done - - - -regenerate-catalogs: - $(PERL) devel/tools/extract-message-catalog - -license-tag: - $(PERL) devel/tools/license_tag - -factory: initialize-database - cd lib; $(PERL) ../devel/tools/factory $(DB_DATABASE) RT - -start-httpd: - $(PERL) sbin/standalone_httpd & - -start-server: - $(PERL) sbin/rt-server & - -apachectl: - $(APACHECTL) stop - sleep 10 - $(APACHECTL) start - sleep 5 - -SNAPSHOT=$(shell git describe --tags) -THIRD_PARTY=devel/third-party/ -snapshot: build-snapshot build-third-party clearsign-snapshot clearsign-third-party snapshot-shasums - -build-snapshot: - git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf - - ( cd $(SNAPSHOT) && \ - echo "$(SNAPSHOT)" > .tag && \ - autoconf && \ - INSTALL=./install-sh PERL=/usr/bin/perl ./configure \ - --with-db-type=SQLite \ - --enable-layout=relative \ - --with-web-handler=standalone && \ - rm -rf autom4te.cache \ - config.status config.log config.pld \ - ) - tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/" - rm -fr "$(SNAPSHOT)/" - -clearsign-snapshot: - gpg --no-armor --detach-sign "$(SNAPSHOT).tar.gz" - -build-third-party: - git archive --prefix "$(SNAPSHOT)/$(THIRD_PARTY)" HEAD:$(THIRD_PARTY) \ - | gzip > "$(SNAPSHOT)-third-party-source.tar.gz" - rm -rf "$(SNAPSHOT)/$(THIRD_PARTY)" - -clearsign-third-party: - gpg --no-armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz" - -snapshot-shasums: - sha1sum $(SNAPSHOT)*.tar.gz* - -vessel-import: build-snapshot - [ -d $(VESSEL) ] || (echo "VESSEL isn't a path to your shipwright vessel" && exit -1) - cp $(VESSEL)/scripts/RT/build.pl /tmp/build.pl - ./sbin/rt-test-dependencies --with-standalone --with-fastcgi --with-sqlite --list > /tmp/rt.yml - shipwright import file:$(SNAPSHOT).tar.gz \ - --require-yml /tmp/rt.yml \ - --build-script /tmp/build.pl \ - --name RT \ - --repository fs:$(VESSEL) \ - --log-level=info \ - --skip cpan-capitalization,cpan-mod_perl,cpan-Encode,cpan-PPI,cpan-Test-Exception-LessClever,cpan-Test-Manifest,cpan-Test-Object,cpan-Test-Pod,cpan-Test-Requires,cpan-Test-SubCalls,cpan-Test-cpan-Tester,cpan-Test-Warn --skip-all-recommends - mv $(VESSEL)/scripts/RT/build $(VESSEL)/scripts/RT/build.pl - -JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2011-01-22.c -JSMIN_SHA = 8a6b3b980a52c028eb73aee4a82ebe060c1ee854 - -jsmin: jsmin-checkcc jsmin-fetch jsmin-verify jsmin-confirm jsmin-build jsmin-install - @echo "" - @echo "To configure RT to use jsmin, add the following line to $(DESTDIR)$(RT_ETC_PATH)/RT_SiteConfig.pm:" - @echo "" - @echo " Set(\$$JSMinPath, '$(DESTDIR)$(RT_BIN_PATH)/jsmin');" - @echo "" - -jsmin-checkcc: - @[ -n "$(CC)" ] || (echo "You don't appear to have a C compiler, please set CC and re-run configure" && exit 1) - -jsmin-confirm: - @echo "jsmin is distributed under a slightly unusual license and can't be shipped" - @echo "with RT. Before configuring RT to use jsmin, please read jsmin's license" - @echo "below:" - @echo "" - @$(PERL) -pe 'print && exit if /^\*\// or /^#include/' jsmin.c - @echo "" - @echo "Press Enter to accept the license, or Ctrl-C to stop now." - @$(PERL) -e '' - -jsmin-fetch: - @echo "" - @echo "Downloading jsmin.c from $(JSMIN_URL)" - @echo "" - @$(PERL) -MLWP::Simple -e 'exit not is_success(getstore("$(JSMIN_URL)", "jsmin.c"))' \ - || (echo "Failed to download $(JSMIN_URL)" && exit 1) - -jsmin-verify: - @$(PERL) -MDigest::SHA -e \ - 'exit not Digest::SHA->new(1)->addfile("jsmin.c")->hexdigest eq "$(JSMIN_SHA)"' \ - || (echo "Verification of jsmin.c failed! Possible man in the middle?" && exit 1) - -jsmin-build: - $(CC) -o jsmin jsmin.c - -jsmin-install: - $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "jsmin" "$(DESTDIR)$(RT_BIN_PATH)/" diff --git a/rt/bin/rt-crontool b/rt/bin/rt-crontool deleted file mode 100755 index be189b5ce..000000000 --- a/rt/bin/rt-crontool +++ /dev/null @@ -1,468 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-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 warnings; -use Carp; - -# fix lib paths, some may be relative -BEGIN { - require File::Spec; - my @libs = ("/opt/rt3/lib", "/opt/rt3/local/lib"); - my $bin_path; - - for my $lib (@libs) { - unless ( File::Spec->file_name_is_absolute($lib) ) { - unless ($bin_path) { - if ( File::Spec->file_name_is_absolute(__FILE__) ) { - $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; - } - else { - require FindBin; - no warnings "once"; - $bin_path = $FindBin::Bin; - } - } - $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); - } - unshift @INC, $lib; - } - -} - -use RT; - -use Getopt::Long; - -use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc); - -#Clean out all the nasties from the environment -CleanEnv(); - -my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg, - $template, $template_id, $transaction, $transaction_type, $help, $log, $verbose ); -GetOptions( - "search=s" => \$search, - "search-arg=s" => \$search_arg, - "condition=s" => \$condition, - "condition-arg=s" => \$condition_arg, - "action-arg=s" => \$action_arg, - "action=s" => \$action, - "template=s" => \$template, - "template-id=s" => \$template_id, - "transaction=s" => \$transaction, - "transaction-type=s" => \$transaction_type, - "log=s" => \$log, - "verbose|v" => \$verbose, - "help" => \$help, -); - -# Load the config file -RT::LoadConfig(); - -# adjust logging to the screen according to options -RT->Config->Set( LogToScreen => $log ) if $log; - -#Connect to the database and get RT::SystemUser and RT::Nobody loaded -RT::Init(); - -require RT::Tickets; -require RT::Template; - -#Get the current user all loaded -my $CurrentUser = GetCurrentUser(); - -# show help even if there is no current user -help() if $help; - -unless ( $CurrentUser->Id ) { - print loc("No RT user found. Please consult your RT administrator."); - exit(1); -} - -help() unless $search && $action; - -$transaction = lc( $transaction||'' ); -if ( $transaction && $transaction !~ /^(first|all|last)$/i ) { - print STDERR loc("--transaction argument could be only 'first', 'last' or 'all'"); - exit 1; -} - -if ( $template && $template_id ) { - print STDERR loc("--template-id is deprecated argument and can not be used with --template"); - exit 1; -} -elsif ( $template_id ) { -# don't warn - $template = $template_id; -} - -# We _must_ have a search object -load_module($search); -load_module($action) if ($action); -load_module($condition) if ($condition); - -my $void_scrip = RT::Scrip->new( $CurrentUser ); -my $void_scrip_action = RT::ScripAction->new( $CurrentUser ); - -#At the appointed time: - -#find a bunch of tickets -my $tickets = RT::Tickets->new($CurrentUser); -$search = $search->new( - TicketsObj => $tickets, - Argument => $search_arg, - CurrentUser => $CurrentUser -); -$search->Prepare(); - -#for each ticket we've found -while ( my $ticket = $tickets->Next() ) { - print $ticket->Id() . ":\n" if ($verbose); - - my $template_obj = get_template( $ticket ); - - if ( $transaction ) { - my $txns = get_transactions($ticket); - my $found = 0; - while ( my $txn = $txns->Next ) { - print "\t".loc("Using transaction #[_1]...", $txn->id)."\n" - if $verbose; - process($ticket, $txn, $template_obj); - $found = 1; - } - print "\t".loc("Couldn't find suitable transaction, skipping")."\n" - if $verbose && !$found; - } else { - print "\t".loc("Processing without transaction, some conditions and actions may fail. Consider using --transaction argument")."\n" - if $verbose; - - process($ticket, undef, $template_obj); - } -} - -sub process { - my $ticket = shift; - my $transaction = shift; - my $template_obj = shift; - - # perform some more advanced check - if ($condition) { - my $condition_obj = $condition->new( - TransactionObj => $transaction, - TicketObj => $ticket, - ScripObj => $void_scrip, - TemplateObj => $template_obj, - Argument => $condition_arg, - CurrentUser => $CurrentUser, - ); - - # if the condition doesn't apply, get out of here - - return unless $condition_obj->IsApplicable; - print "\t".loc("Condition matches...")."\n" if $verbose; - } - - #prepare our action - my $action_obj = $action->new( - TicketObj => $ticket, - TransactionObj => $transaction, - TemplateObj => $template_obj, - Argument => $action_arg, - ScripObj => $void_scrip, - ScripActionObj => $void_scrip_action, - CurrentUser => $CurrentUser, - ); - - #if our preparation, move onto the next ticket - return unless $action_obj->Prepare; - print "\t".loc("Action prepared...")."\n" if $verbose; - - #commit our action. - return unless $action_obj->Commit; - print "\t".loc("Action committed.")."\n" if $verbose; -} - -# =head2 get_transactions -# -# Takes ticket and returns L object with transactions -# of the ticket according to command line arguments C<--transaction> -# and <--transaction-type>. -# -# =cut - -sub get_transactions { - my $ticket = shift; - my $txns = $ticket->Transactions; - my $order = $transaction eq 'last'? 'DESC': 'ASC'; - $txns->OrderByCols( - { FIELD => 'Created', ORDER => $order }, - { FIELD => 'id', ORDER => $order }, - ); - if ( $transaction_type ) { - $transaction_type =~ s/^\s+//; - $transaction_type =~ s/\s+$//; - foreach my $type ( split /\s*,\s*/, $transaction_type ) { - $txns->Limit( FIELD => 'Type', VALUE => $type, ENTRYAGGREGATOR => 'OR' ); - } - } - $txns->RowsPerPage(1) unless $transaction eq 'all'; - return $txns; -} - -# =head2 get_template -# -# Takes a ticket and returns a template according to command line options. -# -# =cut - -{ my $cache = undef; -sub get_template { - my $ticket = shift; - return undef unless $template; - - unless ( $template =~ /\D/ ) { - # by id - return $cache if $cache; - - my $cache = RT::Template->new( RT->SystemUser ); - $cache->Load( $template ); - die "Failed to load template '$template'" - unless $cache->id; - return $cache; - } - - my $queue = $ticket->Queue; - return $cache->{ $queue } if $cache->{ $queue }; - - my $res = RT::Template->new( RT->SystemUser ); - $res->LoadQueueTemplate( Queue => $queue, Name => $template ); - unless ( $res->id ) { - $res->LoadGlobalTemplate( $template ); - die "Failed to load template '$template', either for queue #$queue or global" - unless $res->id; - } - return $cache->{ $queue } = $res; -} } - - -# =head2 load_module -# -# Loads a perl module, dying nicely if it can't find it. -# -# =cut - -sub load_module { - my $modname = shift; - eval "require $modname"; - if ($@) { - die loc( "Failed to load module [_1]. ([_2])", $modname, $@ ); - } - -} - - -sub help { - - print loc( "[_1] is a tool to act on tickets from an external scheduling tool, such as cron.", $0 ) - . "\n"; - print loc("It takes several arguments:") . "\n\n"; - - print " " - . loc( "[_1] - Specify the search module you want to use", "--search" ) - . "\n"; - print " " - . loc( "[_1] - An argument to pass to [_2]", "--search-arg", "--search" ) - . "\n"; - - print " " - . loc( "[_1] - Specify the condition module you want to use", "--condition" ) - . "\n"; - print " " - . loc( "[_1] - An argument to pass to [_2]", "--condition-arg", "--condition" ) - . "\n"; - print " " - . loc( "[_1] - Specify the action module you want to use", "--action" ) - . "\n"; - print " " - . loc( "[_1] - An argument to pass to [_2]", "--action-arg", "--action" ) - . "\n"; - print " " - . loc( "[_1] - Specify name or id of template(s) you want to use", "--template" ) - . "\n"; - print " " - . loc( "[_1] - Specify if you want to use either 'first', 'last' or 'all' transactions", "--transaction" ) - . "\n"; - print " " - . loc( "[_1] - Specify the comma separated list of transactions' types you want to use", "--transaction-type" ) - . "\n"; - print " " - . loc( "[_1] - Adjust LogToScreen config option", "--log" ) . "\n"; - print " " - . loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n"; - print "\n"; - print "\n"; - print loc("Security:")."\n"; - print loc("This tool allows the user to run arbitrary perl modules from within RT.")." ". - loc("If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT.")." ". - loc("It is incredibly important that nonprivileged users not be allowed to run this tool."). " " . - loc("It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool.")."\n"; - print "\n"; - print loc("Example:"); - print "\n"; - print " " - . loc( "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they are overdue:" - ) - . "\n\n"; - - print " bin/rt-crontool \\\n"; - print " --search RT::Search::ActiveTicketsInQueue --search-arg general \\\n"; - print " --condition RT::Condition::Overdue \\\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); -} - -__END__ - -=head1 NAME - -rt-crontool - a tool to act on tickets from an external scheduling tool - -=head1 SYNOPSIS - - # find all active tickets in the queue 'general' and set their priority to 99 if they are overdue: - rt-crontool \ - --search RT::Search::ActiveTicketsInQueue --search-arg general \ - --condition RT::Condition::Overdue \ - --action RT::Action::SetPriority --action-arg 99 \ - --verbose - - # Escalate tickets - rt-crontool \ - --search RT::Search::ActiveTicketsInQueue --search-arg general \ - --action RT::Action::EscalatePriority - -=head1 DESCRIPTION - -This script is a tool to act on tickets from an external scheduling tool, such -as cron. - -Security: - -This tool allows the user to run arbitrary perl modules from within RT. If -this tool were setgid, a hostile local user could use this tool to gain -administrative access to RT. It is incredibly important that nonprivileged -users not be allowed to run this tool. It is suggested that you create a -non-privileged unix user with the correct group membership and RT access to -run this tool. - - -=head1 OPTIONS - -=over - -=item search - -Specify the search module you want to use - -=item search-arg - -An argument to pass to --search - -=item condition - -Specify the condition module you want to use - -=item condition-arg - -An argument to pass to --condition - -=item action - -Specify the action module you want to use - -=item action-arg - -An argument to pass to --action - -=item template - -Specify name or id of template(s) you want to use - -=item transaction - -Specify if you want to use either 'first', 'last' or 'all' transactions - - -=item transaction-type - -Specify the comma separated list of transactions' types you want to use - -=item log - -Adjust LogToScreen config option - -=item verbose - -Output status updates to STDOUT - -=back - diff --git a/rt/bin/rt-mailgate b/rt/bin/rt-mailgate deleted file mode 100755 index 5148aa541..000000000 --- a/rt/bin/rt-mailgate +++ /dev/null @@ -1,526 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-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 RT. - -=cut - -use strict; -use warnings; - -use Getopt::Long; - -my $opts = { }; -GetOptions( $opts, "queue=s", "action=s", "url=s", - "jar=s", "help", "debug", "extension=s", - "timeout=i", "verify-ssl!", "ca-file=s", - ); - -my $gateway = RT::Client::MailGateway->new(); - -$gateway->run($opts); - -package RT::Client::MailGateway; - -use LWP::UserAgent; -use HTTP::Request::Common qw($DYNAMIC_FILE_UPLOAD); -use File::Temp qw(tempfile tempdir); -$DYNAMIC_FILE_UPLOAD = 1; - -use constant EX_TEMPFAIL => 75; -use constant BUFFER_SIZE => 8192; - -sub new { - my $class = shift; - my $self = bless {}, $class; - return $self; -} - -sub run { - my $self = shift; - my $opts = shift; - - if ( $opts->{running_in_test_harness} ) { - $self->{running_in_test_harness} = 1; - } - - $self->validate_cli_flags($opts); - - my $ua = $self->get_useragent($opts); - my $post_params = $self->setup_session($opts); - $self->upload_message( $ua => $post_params ); - $self->exit_with_success(); -} - -sub exit_with_success { - my $self = shift; - if ( $self->{running_in_test_harness} ) { - return 1; - } else { - exit 0; - } -} - -sub tempfail { - my $self = shift; - if ( $self->{running_in_test_harness} ) { - die "tempfail"; - } else { - - exit EX_TEMPFAIL; - } -} - -sub permfail { - my $self = shift; - if ( $self->{running_in_test_harness} ) { - die "permfail"; - } else { - - exit 1; - } -} - -sub validate_cli_flags { - my $self = shift; - my $opts = shift; - if ( $opts->{'help'} ) { - require Pod::Usage; - Pod::Usage::pod2usage( { verbose => 2 } ); - return $self->permfail() - ; # Don't want to succeed if this is really an email! - } - - unless ( $opts->{'url'} ) { - print STDERR - "$0 invoked improperly\n\nNo 'url' provided to mail gateway!\n"; - return $self->permfail(); - } - - if (($opts->{'ca-file'} or $opts->{"verify-ssl"}) - and not LWP::UserAgent->can("ssl_opts")) { - print STDERR "Verifying SSL certificates requires LWP::UserAgent 6.0 or higher.\n"; - return $self->tempfail(); - } - - $opts->{"verify-ssl"} = 1 unless defined $opts->{"verify-ssl"}; -} - -sub get_useragent { - my $self = shift; - my $opts = shift; - my $ua = LWP::UserAgent->new(); - $ua->cookie_jar( { file => $opts->{'jar'} } ) if $opts->{'jar'}; - - if ( $ua->can("ssl_opts") ) { - $ua->ssl_opts( verify_hostname => $opts->{'verify-ssl'} ); - $ua->ssl_opts( SSL_ca_file => $opts->{'ca-file'} ) - if $opts->{'ca-file'}; - } - - return $ua; -} - -sub setup_session { - my $self = shift; - my $opts = shift; - my %post_params; - foreach (qw(queue action)) { - $post_params{$_} = $opts->{$_} if defined $opts->{$_}; - } - - if ( ( $opts->{'extension'} || '' ) =~ /^(?:action|queue|ticket)$/i ) { - $post_params{ lc $opts->{'extension'} } = $ENV{'EXTENSION'} - || $opts->{ $opts->{'extension'} }; - } elsif ( $opts->{'extension'} && $ENV{'EXTENSION'} ) { - print STDERR - "Value of the --extension argument is not action, queue or ticket" - . ", but environment variable EXTENSION is also defined. The former is ignored.\n"; - } - - # add ENV{'EXTENSION'} as X-RT-MailExtension to the message header - if ( my $value = ( $ENV{'EXTENSION'} || $opts->{'extension'} ) ) { - - # prepare value to avoid MIME format breakage - # strip trailing newline symbols - $value =~ s/(\r*\n)+$//; - - # make a correct multiline header field, - # with tabs in the beginning of each line - $value =~ s/(\r*\n)/$1\t/g; - $opts->{'headers'} .= "X-RT-Mail-Extension: $value\n"; - } - - # Read the message in from STDIN - # _raw_message is used for testing - my $message = $opts->{'_raw_message'} || $self->slurp_message(); - unless ( $message->{'filename'} ) { - $post_params{'message'} = [ - undef, '', - 'Content-Type' => 'application/octet-stream', - Content => ${ $message->{'content'} }, - ]; - } else { - $post_params{'message'} = [ - $message->{'filename'}, '', - 'Content-Type' => 'application/octet-stream', - ]; - } - - return \%post_params; -} - -sub upload_message { - my $self = shift; - my $ua = shift; - my $post_params = shift; - my $full_url = $opts->{'url'} . "/REST/1.0/NoAuth/mail-gateway"; - print STDERR "$0: connecting to $full_url\n" if $opts->{'debug'}; - - $ua->timeout( exists( $opts->{'timeout'} ) ? $opts->{'timeout'} : 180 ); - my $r = $ua->post( $full_url, $post_params, Content_Type => 'form-data' ); - $self->check_failure($r); - - my $content = $r->content; - print STDERR $content . "\n" if $opts->{'debug'}; - - return 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. - print STDERR <tempfail(); -} - -sub check_failure { - my $self = shift; - my $r = shift; - return if $r->is_success; - - # XXX TODO 4.2: Remove the multi-line error strings in favor of something more concise - print STDERR <<" ERROR"; -An Error Occurred -================= - -@{[ $r->status_line ]} - ERROR - print STDERR "\n$0: undefined server error\n" if $opts->{'debug'}; - return $self->tempfail(); -} - -sub slurp_message { - my $self = shift; - - local $@; - - my %message; - my ( $fh, $filename ) - = eval { tempfile( DIR => tempdir( CLEANUP => 1 ) ) }; - if ( !$fh || $@ ) { - print STDERR "$0: Couldn't create temp file, using memory\n"; - print STDERR "error: $@\n" if $@; - - my $message = \do { local ( @ARGV, $/ ); }; - unless ( $$message =~ /\S/ ) { - print STDERR "$0: no message passed on STDIN\n"; - $self->exit_with_success; - } - $$message = $opts->{'headers'} . $$message if $opts->{'headers'}; - return ( { content => $message } ); - } - - binmode $fh; - binmode \*STDIN; - - print $fh $opts->{'headers'} if $opts->{'headers'}; - - my $buf; - my $empty = 1; - while (1) { - my $status = read \*STDIN, $buf, BUFFER_SIZE; - unless ( defined $status ) { - print STDERR "$0: couldn't read message: $!\n"; - return $self->tempfail(); - } elsif ( !$status ) { - last; - } - $empty = 0 if $buf =~ /\S/; - print $fh $buf; - } - close $fh; - - if ($empty) { - print STDERR "$0: no message passed on STDIN\n"; - $self->exit_with_success; - } - print STDERR "$0: temp file is '$filename'\n" if $opts->{'debug'}; - return ( { filename => $filename } ); -} - -=head1 SYNOPSIS - - rt-mailgate --help : this text - -Usual invocation (from MTA): - - rt-mailgate --action (correspond|comment|...) --queue queuename - --url http://your.rt.server/ - [ --debug ] - [ --extension (queue|action|ticket) ] - [ --timeout seconds ] - - - -=head1 OPTIONS - -=over 3 - -=item C<--action> - -Specifies what happens to email sent to this alias. The avaliable -basic actions are: C, C. - - -If you've set the RT configuration variable B<< C >>, -C and C 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, -C or C as actions. - -Note that C and C actions ignore message text if used -alone. Include a C or C action if you want RT -to record the incoming message. - -The default action is C. - -=item C<--queue> - -This flag determines which queue this alias should create a ticket in if no ticket identifier -is found. - -=item C<--url> - -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. - -If your RT server uses SSL, you will need to install additional Perl -libraries. RT will detect and install these dependencies if you pass the -C<--enable-ssl-mailgate> flag to configure as documented in RT's README. - -If you have a self-signed SSL certificate, you may also need to pass -C<--ca-file> or C<--no-verify-ssl>, below. - -=item C<--ca-file> I - -Specifies the path to the public SSL certificate for the certificate -authority that should be used to verify the website's SSL certificate. -If your webserver uses a self-signed certificate, you should -preferentially use this option over C<--no-verify-ssl>, as it will -ensure that the self-signed certificate that the mailgate is seeing the -I self-signed certificate. - -=item C<--no-verify-ssl> - -This flag tells the mail gateway to trust all SSL certificates, -regardless of if their hostname matches the certificate, and regardless -of CA. This is required if you have a self-signed certificate, or some -other certificate which is not traceable back to an certificate your -system ultimitely trusts. - -Verifying SSL certificates requires L version 6.0 or -higher; explicitly passing C<--verify-ssl> on prior versions will error. - -=item C<--extension> OPTIONAL - -Some MTAs will route mail sent to user-foo@host or user+foo@host to user@host -and present "foo" in the environment variable $EXTENSION. By specifying -the value "queue" for this parameter, the queue this message should be -submitted to will be set to the value of $EXTENSION. By specifying -"ticket", $EXTENSION will be interpreted as the id of the ticket this message -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). - -=back - - -=head1 DESCRIPTION - -The RT mail gateway is the primary mechanism for communicating with RT -via email. This program simply directs the email to the RT web server, -which handles filing correspondence and sending out any required mail. -It is designed to be run as part of the mail delivery process, either -called directly by the MTA or C, or in a F<.forward> or -equivalent. - -=head1 SETUP - -Much of the set up of the mail gateway depends on your MTA and mail -routing configuration. However, you will need first of all to create an -RT user for the mail gateway and assign it a password; this helps to -ensure that mail coming into the web server did originate from the -gateway. - -Next, you need to route mail to C for the queues you're -monitoring. For instance, if you're using F and you have a -"bugs" queue, you will want something like this: - - bugs: "|/opt/rt4/bin/rt-mailgate --queue bugs --action correspond - --url http://rt.mycorp.com/" - - bugs-comment: "|/opt/rt4/bin/rt-mailgate --queue bugs --action comment - --url http://rt.mycorp.com/" - -Note that you don't have to run your RT server on your mail server, as -the mail gateway will happily relay to a different machine. - -=head1 CUSTOMIZATION - -By default, the mail gateway will accept mail from anyone. However, -there are situations in which you will want to authenticate users -before allowing them to communicate with the system. You can do this -via a plug-in mechanism in the RT configuration. - -You can set the array C<@MailPlugins> to be a list of plugins. The -default plugin, if this is not given, is C - that is, -authentication of the person is done based on the C header of the -email. If you have additional filters or authentication mechanisms, you -can list them here and they will be called in order: - - Set( @MailPlugins => - "Filter::SpamAssassin", - "Auth::LDAP", - # ... - ); - -See the documentation for any additional plugins you have. - -You may also put Perl subroutines into the C<@MailPlugins> array, if -they behave as described below. - -=head1 WRITING PLUGINS - -What's actually going on in the above is that C<@MailPlugins> is a -list of Perl modules; RT prepends C to the name, -to form a package name, and then C's this module. The module is -expected to provide a C subroutine, which takes a hash of -several parameters: - -=over 4 - -=item Message - -A C object representing the email - -=item CurrentUser - -An C object - -=item AuthStat - -The authentication level returned from the previous plugin. - -=item Ticket [OPTIONAL] - -The ticket under discussion - -=item Queue [OPTIONAL] - -If we don't already have a ticket id, we need to know which queue we're talking about - -=item Action - -The action being performed. At the moment, it's one of "comment" or "correspond" - -=back - -It returns two values, the new C object, and the new -authentication level. The authentication level can be zero, not allowed -to communicate with RT at all, (a "permission denied" error is mailed to -the correspondent) or one, which is the normal mode of operation. -Additionally, if C<-1> is returned, then the processing of the plug-ins -stops immediately and the message is ignored. - -=head1 ENVIRONMENT - -=over 4 - -=item EXTENSION - -Some MTAs will route mail sent to user-foo@host or user+foo@host to user@host -and present "foo" in the environment variable C. Mailgate adds value -of this variable to message in the C field of the message -header. - -See also C<--extension> option. Note that value of the environment variable is -always added to the message header when it's not empty even if C<--extension> -option is not provided. - -=back - -=cut - diff --git a/rt/bin/webmux.pl b/rt/bin/webmux.pl deleted file mode 100644 index 8ce68ca14..000000000 --- a/rt/bin/webmux.pl +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-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; -local $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need -local $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; -local $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; -local $ENV{'ENV'} = '' if defined $ENV{'ENV'}; -local $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - -package HTML::Mason::Commands; -our %session; - -package RT::Mason; - -our ($Nobody, $SystemUser, $Handler, $r); - -my $protect_fd; - -sub handler { - ($r) = @_; - - if ( !$protect_fd && $ENV{'MOD_PERL'} && exists $ENV{'MOD_PERL_API_VERSION'} - && $ENV{'MOD_PERL_API_VERSION'} >= 2 && fileno(STDOUT) != 1 - ) { - # under mod_perl2, STDOUT gets closed and re-opened, however new STDOUT - # is not on FD #1. In this case next IO operation will occupy this FD - # and make all system() and open "|-" dangerouse, for example DBI - # can get this FD for DB connection and system() call will close - # by putting grabage into the socket - open( $protect_fd, '>', '/dev/null' ) - or die "Couldn't open /dev/null: $!"; - unless ( fileno($protect_fd) == 1 ) { - warn "We opened /dev/null to protect FD #1, but descriptor #1 is already occupied"; - } - } - - local $SIG{__WARN__}; - local $SIG{__DIE__}; - RT::InitSignalHandlers(); - - 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' ) ); - } - - Module::Refresh->refresh if RT->Config->Get('DevelMode'); - - RT::ConnectToDatabase(); - - # none of the methods in $r gives us the information we want (most - # canonicalize /foo/../bar to /bar which is exactly what we want to avoid) - my (undef, $requested) = split ' ', $r->the_request, 3; - my $uri = URI->new("http://".$r->hostname.$requested); - my $path = URI::Escape::uri_unescape($uri->path); - - ## Each environment has its own way of handling .. and so on in paths, - ## so RT consistently forbids such paths. - if ( $path =~ m{/\.} ) { - $RT::Logger->crit("Invalid request for ".$path." aborting"); - RT::Interface::Web::Handler->CleanupRequest(); - return 400; - } - - my (%session, $status); - { - local $@; - $status = eval { $Handler->handle_request($r) }; - $RT::Logger->crit( $@ ) if $@; - } - undef %session; - - RT::Interface::Web::Handler->CleanupRequest(); - - return $status; -} - -package main; - -# check mod_perl version if it's mod_perl -BEGIN { - 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)}; -} - -require CGI; -CGI->import(qw(-private_tempfiles)); - -# fix lib paths, some may be relative -BEGIN { - require File::Spec; - my @libs = ("/opt/rt3/lib", "/opt/rt3/local/lib"); - my $bin_path; - - for my $lib (@libs) { - unless ( File::Spec->file_name_is_absolute($lib) ) { - unless ($bin_path) { - if ( File::Spec->file_name_is_absolute(__FILE__) ) { - $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; - } - else { - require FindBin; - no warnings "once"; - $bin_path = $FindBin::Bin; - } - } - $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); - } - unshift @INC, $lib; - } - -} - -require RT; -die "Wrong version of RT $RT::Version found; need 3.8.*" - unless $RT::VERSION =~ /^3\.8\./; -RT::LoadConfig(); -if ( RT->Config->Get('DevelMode') ) { - require Module::Refresh; -} -RT::Init(); - -# check compatibility of the DB -{ - my $dbh = $RT::Handle->dbh; - if ( $dbh ) { - my ($status, $msg) = $RT::Handle->CheckCompatibility( $dbh, 'post' ); - die $msg unless $status; - } -} - -require RT::Interface::Web::Handler; -$RT::Mason::Handler = RT::Interface::Web::Handler->new( - RT->Config->Get('MasonParameters') -); - -# load more for mod_perl before forking -RT::InitClasses( Heavy => 1 ) if $ENV{'MOD_PERL'} || $ENV{RT_WEBMUX_HEAVY_LOAD}; - -# we must disconnect DB before fork -$RT::Handle->dbh(undef); -undef $RT::Handle; - -if ( $ENV{'MOD_PERL'} && !RT->Config->Get('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. - - require File::Path; - require File::Glob; - my @files = File::Glob::bsd_glob("$RT::MasonDataDir/obj/*"); - File::Path::rmtree([ @files ], 0, 1) if @files; -} - -1; diff --git a/rt/config.layout b/rt/config.layout deleted file mode 100644 index 044dfcff8..000000000 --- a/rt/config.layout +++ /dev/null @@ -1,255 +0,0 @@ -## -## config.layout -- Pre-defined Installation Path Layouts -## -## Hints: -## - layouts can be loaded with configure's --enable-layout=ID option -## - when no --enable-layout option is given, the default layout is `RT' -## - a trailing plus character (`+') on paths is replaced with a -## `/' suffix where is currently hardcoded to 'rt3'. -## (This may become a configurable parameter at some point.) -## -## The following variables must _all_ be set: -## prefix exec_prefix bindir sbindir sysconfdir mandir libdir -## datadir htmldir localstatedir logfiledir masonstatedir fontdir -## sessionstatedir customdir customhtmldir customlexdir -## (This can be seen in m4/rt_layout.m4.) -## - -# Default RT3 path layout. - - prefix: /opt/rt4 - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: ${prefix}/etc - mandir: ${prefix}/man - plugindir: ${prefix}/plugins - libdir: ${prefix}/lib - datadir: ${prefix}/share - htmldir: ${datadir}/html - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - manualdir: ${prefix}/docs - 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 - customplugindir: ${customdir}/plugins - - - prefix: . - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: ${prefix}/etc - mandir: ${prefix}/man - plugindir: ${prefix}/plugins - libdir: ${prefix}/lib - datadir: ${prefix}/share - htmldir: ${datadir}/html - lexdir: ${datadir}/po - fontdir: ${datadir}/fonts - manualdir: ${prefix}/docs - 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 - customplugindir: ${customdir}/plugins - - - - prefix: /usr/local - exec_prefix: ${prefix} - bindir: ${prefix}/bin - sbindir: ${prefix}/sbin - sysconfdir: /etc+ - datadir: ${prefix}/share -# FIXME: missing support for lib64 - libdir: ${prefix}/lib - mandir: ${datadir}/man -# FIXME: no such directory in FHS; shouldn't go to somewhere in "${datadir}/rt/"? - plugindir: ${datadir}/plugins - htmldir: ${datadir}/html - lexdir: ${datadir}/po - fontdir: ${datadir}/fonts - manualdir: ${datadir}/doc - localstatedir: /var - logfiledir: ${localstatedir}/log -# XXX: "/var/cache/mason/*"? - masonstatedir: ${localstatedir}/cache/mason_data - sessionstatedir: ${localstatedir}/cache/session_data - customdir: ${prefix}/local - custometcdir: ${customdir}/etc - customhtmldir: ${customdir}/html - customlexdir: ${customdir}/po - customlibdir: ${customdir}/lib - customplugindir: ${customdir}/plugins - - - - prefix: /usr/local - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: ${prefix}/etc+ - mandir: ${prefix}/man - plugindir: ${prefix}/plugins - libdir: ${prefix}/lib+ - datadir: ${prefix}/share+ - htmldir: ${datadir}/html - lexdir: ${datadir}/po - fontdir: ${datadir}/fonts - manualdir: ${prefix}/share/doc+ - logfiledir: /var/log - localstatedir: /var/run+ - masonstatedir: ${localstatedir}/mason_data - sessionstatedir: ${localstatedir}/session_data - customdir: ${prefix}/share+ - custometcdir: ${customdir}/local/etc - customhtmldir: ${customdir}/local/html - customlexdir: ${customdir}/local/po - customlibdir: ${customdir}/local/lib - customplugindir: ${customdir}/local/plugins - - - - prefix: C:/Program Files/Request Tracker - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: ${prefix}/etc - mandir: ${prefix}/man - plugindir: ${prefix}/plugins - libdir: ${prefix}/lib - datadir: ${prefix} - htmldir: ${datadir}/html - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - 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 - customplugindir: ${customdir}/plugins - - -# RH path layout. - - prefix: /usr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: /etc/rt3 - mandir: ${prefix}/man - libdir: ${prefix}/lib/rt3 - datadir: /var/rt3 - htmldir: ${datadir}/html - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - manualdir: ${datadir}/doc - plugindir: ${datadir}/plugins - localstatedir: /var - logfiledir: ${localstatedir}/log/rt3 - masonstatedir: ${localstatedir}/rt3/mason_data - sessionstatedir: ${localstatedir}/rt3/session_data - customdir: ${prefix}/local/rt3 - custometcdir: ${customdir}/etc - customhtmldir: ${customdir}/html - customlexdir: ${customdir}/po - customlibdir: ${customdir}/lib - customplugindir: ${customdir}/plugins - - - - - prefix: /opt/rt4 - exec_prefix: ${prefix} - bindir: bin - sbindir: sbin - sysconfdir: etc - mandir: man - plugindir: plugins - libdir: lib - datadir: share - htmldir: ${datadir}/html - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - manualdir: docs - localstatedir: var - logfiledir: ${localstatedir}/log - masonstatedir: ${localstatedir}/mason_data - sessionstatedir: ${localstatedir}/session_data - customdir: local - custometcdir: ${customdir}/etc - customhtmldir: ${customdir}/html - customlexdir: ${customdir}/po - customlibdir: ${customdir}/lib - customplugindir: ${customdir}/plugins - - - prefix: /opt/rt4 - exec_prefix: ${prefix} - bindir: bin - sbindir: sbin - sysconfdir: etc/rt/ - mandir: man - libdir: lib/rt - datadir: share/rt - plugindir: ${datadir}/plugins - htmldir: ${datadir}/html - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - manualdir: docs/rt - localstatedir: var/rt/ - logfiledir: ${localstatedir}/log - masonstatedir: ${localstatedir}/mason_data - sessionstatedir: ${localstatedir}/session_data - customdir: local/rt/ - custometcdir: ${customdir}/etc - customhtmldir: ${customdir}/html - customlexdir: ${customdir}/po - customlibdir: ${customdir}/lib - customplugindir: ${customdir}/plugins - - - - prefix: /opt/rt3 - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - sysconfdir: ${prefix}/etc - mandir: ${prefix}/man - plugindir: ${prefix}/plugins - libdir: ${prefix}/lib - datadir: ${prefix}/share - htmldir: /var/www/freeside/rt - fontdir: ${datadir}/fonts - lexdir: ${datadir}/po - manualdir: ${prefix}/docs - localstatedir: ${prefix}/var - logfiledir: ${localstatedir}/log - masonstatedir: /usr/local/etc/freeside/masondata - sessionstatedir: ${localstatedir}/session_data - customdir: ${prefix}/local - custometcdir: ${customdir}/etc - customhtmldir: ${customdir}/html - customlexdir: ${customdir}/po - customlibdir: ${customdir}/lib - customplugindir: ${customdir}/plugins - - diff --git a/rt/config.log b/rt/config.log deleted file mode 100644 index 1ae6b429a..000000000 --- a/rt/config.log +++ /dev/null @@ -1,299 +0,0 @@ -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 rt-4.0.21, which was -generated by GNU Autoconf 2.68. Invocation command line was - - $ ./configure --enable-layout=Freeside --with-db-type=Pg --with-db-dba=freeside --with-db-database=freeside --with-db-rt-user=freeside --with-db-rt-pass= --with-web-user=freeside --with-web-group=freeside --with-rt-group=freeside --with-web-handler=modperl2 - -## --------- ## -## Platform. ## -## --------- ## - -hostname = fleetpaw -uname -m = x86_64 -uname -r = 3.14-2-amd64 -uname -s = Linux -uname -v = #1 SMP Debian 3.14.15-2 (2014-08-09) - -/usr/bin/uname -p = unknown -/bin/uname -X = unknown - -/bin/arch = unknown -/usr/bin/arch -k = unknown -/usr/convex/getsysinfo = unknown -/usr/bin/hostinfo = unknown -/bin/machine = unknown -/usr/bin/oslevel = unknown -/bin/universe = unknown - -PATH: /usr/local/sbin -PATH: /usr/local/bin -PATH: /usr/sbin -PATH: /usr/bin -PATH: /sbin -PATH: /bin - - -## ----------- ## -## Core tests. ## -## ----------- ## - -configure:1903: checking for a BSD-compatible install -configure:1971: result: /usr/bin/install -c -configure:1985: checking for perl -configure:2003: found /usr/bin/perl -configure:2016: result: /usr/bin/perl -configure:2394: checking for chosen layout -configure:2407: result: Freeside -configure:2641: checking if database name is set -configure:2644: result: yes -configure:2700: checking for dot -configure:2716: found /usr/bin/dot -configure:2728: result: yes -configure:2756: checking for gdlib-config -configure:2784: result: no -configure:2812: checking for gpg -configure:2828: found /usr/bin/gpg -configure:2840: result: yes -configure:3185: creating ./config.status - -## ---------------------- ## -## Running config.status. ## -## ---------------------- ## - -This file was extended by RT config.status rt-4.0.21, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = - CONFIG_HEADERS = - CONFIG_LINKS = - CONFIG_COMMANDS = - $ ./config.status - -on fleetpaw - -config.status:872: creating etc/upgrade/3.8-ical-extension -config.status:872: creating etc/upgrade/4.0-customfield-checkbox-extension -config.status:872: creating etc/upgrade/split-out-cf-categories -config.status:872: creating etc/upgrade/generate-rtaddressregexp -config.status:872: creating etc/upgrade/upgrade-articles -config.status:872: creating etc/upgrade/vulnerable-passwords -config.status:872: creating sbin/rt-attributes-viewer -config.status:872: creating sbin/rt-preferences-viewer -config.status:872: creating sbin/rt-session-viewer -config.status:872: creating sbin/rt-dump-metadata -config.status:872: creating sbin/rt-setup-database -config.status:872: creating sbin/rt-test-dependencies -config.status:872: creating sbin/rt-email-digest -config.status:872: creating sbin/rt-email-dashboards -config.status:872: creating sbin/rt-clean-sessions -config.status:872: creating sbin/rt-shredder -config.status:872: creating sbin/rt-validator -config.status:872: creating sbin/rt-validate-aliases -config.status:872: creating sbin/rt-email-group-admin -config.status:872: creating sbin/rt-server -config.status:872: creating sbin/rt-server.fcgi -config.status:872: creating sbin/standalone_httpd -config.status:872: creating sbin/rt-setup-fulltext-index -config.status:872: creating sbin/rt-fulltext-indexer -config.status:872: creating bin/rt-crontool -config.status:872: creating bin/rt-mailgate -config.status:872: creating bin/rt -config.status:872: creating Makefile -config.status:872: creating etc/RT_Config.pm -config.status:872: creating lib/RT/Generated.pm -config.status:872: creating t/data/configs/apache2.2+mod_perl.conf -config.status:872: creating t/data/configs/apache2.2+fastcgi.conf - -## ---------------- ## -## Cache variables. ## -## ---------------- ## - -ac_cv_env_PERL_set= -ac_cv_env_PERL_value= -ac_cv_env_build_alias_set= -ac_cv_env_build_alias_value= -ac_cv_env_host_alias_set= -ac_cv_env_host_alias_value= -ac_cv_env_target_alias_set= -ac_cv_env_target_alias_value= -ac_cv_path_PERL=/usr/bin/perl -ac_cv_path_install='/usr/bin/install -c' -ac_cv_prog_RT_GD=no -ac_cv_prog_RT_GPG=yes -ac_cv_prog_RT_GRAPHVIZ=yes - -## ----------------- ## -## Output variables. ## -## ----------------- ## - -APACHECTL='/usr/sbin/apachectl' -BIN_OWNER='root' -COMMENT_INPLACE_LAYOUT='' -CONFIGURE_INCANT='./configure --enable-layout=Freeside --with-db-type=Pg --with-db-dba=freeside --with-db-database=freeside --with-db-rt-user=freeside --with-db-rt-pass= --with-web-user=freeside --with-web-group=freeside --with-rt-group=freeside --with-web-handler=modperl2' -CONFIG_FILE_PATH='/opt/rt3/etc' -CONFIG_FILE_PATH_R='/opt/rt3/etc' -DATABASE_ENV_PREF='' -DB_DATABASE='freeside' -DB_DBA='freeside' -DB_HOST='localhost' -DB_PORT='' -DB_RT_HOST='localhost' -DB_RT_PASS='' -DB_RT_USER='freeside' -DB_TYPE='Pg' -DEFS='-DPACKAGE_NAME=\"RT\" -DPACKAGE_TARNAME=\"rt\" -DPACKAGE_VERSION=\"rt-4.0.21\" -DPACKAGE_STRING=\"RT\ rt-4.0.21\" -DPACKAGE_BUGREPORT=\"rt-bugs@bestpractical.com\" -DPACKAGE_URL=\"\"' -ECHO_C='' -ECHO_N='-n' -ECHO_T='' -INSTALL_DATA='${INSTALL} -m 644' -INSTALL_PROGRAM='${INSTALL}' -INSTALL_SCRIPT='${INSTALL}' -LIBOBJS='' -LIBS='' -LIBS_GROUP='bin' -LIBS_OWNER='root' -LOCAL_ETC_PATH='/opt/rt3/local/etc' -LOCAL_ETC_PATH_R='/opt/rt3/local/etc' -LOCAL_LEXICON_PATH='/opt/rt3/local/po' -LOCAL_LEXICON_PATH_R='/opt/rt3/local/po' -LOCAL_LIB_PATH='/opt/rt3/local/lib' -LOCAL_LIB_PATH_R='/opt/rt3/local/lib' -LOCAL_PLUGIN_PATH='/opt/rt3/local/plugins' -LOCAL_PLUGIN_PATH_R='/opt/rt3/local/plugins' -LTLIBOBJS='' -MASON_DATA_PATH='/usr/local/etc/freeside/masondata' -MASON_DATA_PATH_R='/usr/local/etc/freeside/masondata' -MASON_HTML_PATH='/var/www/freeside/rt' -MASON_HTML_PATH_R='/var/www/freeside/rt' -MASON_LOCAL_HTML_PATH='/opt/rt3/local/html' -MASON_LOCAL_HTML_PATH_R='/opt/rt3/local/html' -MASON_SESSION_PATH='/opt/rt3/var/session_data' -MASON_SESSION_PATH_R='/opt/rt3/var/session_data' -PACKAGE_BUGREPORT='rt-bugs@bestpractical.com' -PACKAGE_NAME='RT' -PACKAGE_STRING='RT rt-4.0.21' -PACKAGE_TARNAME='rt' -PACKAGE_URL='' -PACKAGE_VERSION='rt-4.0.21' -PATH_SEPARATOR=':' -PERL='/usr/bin/perl' -RTGROUP='freeside' -RT_BIN_PATH='/opt/rt3/bin' -RT_BIN_PATH_R='/opt/rt3/bin' -RT_DEVEL_MODE='0' -RT_DOC_PATH='/opt/rt3/docs' -RT_DOC_PATH_R='/opt/rt3/docs' -RT_ETC_PATH='/opt/rt3/etc' -RT_ETC_PATH_R='/opt/rt3/etc' -RT_FONT_PATH='/opt/rt3/share/fonts' -RT_FONT_PATH_R='/opt/rt3/share/fonts' -RT_GD='0' -RT_GPG='1' -RT_GRAPHVIZ='1' -RT_LEXICON_PATH='/opt/rt3/share/po' -RT_LEXICON_PATH_R='/opt/rt3/share/po' -RT_LIB_PATH='/opt/rt3/lib' -RT_LIB_PATH_R='/opt/rt3/lib' -RT_LOCAL_PATH='/opt/rt3/local' -RT_LOCAL_PATH_R='/opt/rt3/local' -RT_LOG_PATH='/opt/rt3/var/log' -RT_LOG_PATH_R='/opt/rt3/var/log' -RT_MAN_PATH='/opt/rt3/man' -RT_MAN_PATH_R='/opt/rt3/man' -RT_PATH='/opt/rt3' -RT_PATH_R='/opt/rt3' -RT_PLUGIN_PATH='/opt/rt3/plugins' -RT_PLUGIN_PATH_R='/opt/rt3/plugins' -RT_SBIN_PATH='/opt/rt3/sbin' -RT_SBIN_PATH_R='/opt/rt3/sbin' -RT_SSL_MAILGATE='0' -RT_VAR_PATH='/opt/rt3/var' -RT_VAR_PATH_R='/opt/rt3/var' -RT_VERSION_MAJOR='4' -RT_VERSION_MINOR='0' -RT_VERSION_PATCH='21' -SHELL='/bin/bash' -WEB_GROUP='freeside' -WEB_HANDLER='modperl2' -WEB_USER='freeside' -bindir='/opt/rt3/bin' -build_alias='' -customdir='/opt/rt3/local' -custometcdir='/opt/rt3/local/etc' -customhtmldir='/opt/rt3/local/html' -customlexdir='/opt/rt3/local/po' -customlibdir='/opt/rt3/local/lib' -customplugindir='/opt/rt3/local/plugins' -datadir='/opt/rt3/share' -datarootdir='${prefix}/share' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -dvidir='${docdir}' -exec_prefix='/opt/rt3' -exp_bindir='/opt/rt3/bin' -exp_customdir='/opt/rt3/local' -exp_custometcdir='/opt/rt3/local/etc' -exp_customhtmldir='/opt/rt3/local/html' -exp_customlexdir='/opt/rt3/local/po' -exp_customlibdir='/opt/rt3/local/lib' -exp_customplugindir='/opt/rt3/local/plugins' -exp_datadir='/opt/rt3/share' -exp_exec_prefix='/opt/rt3' -exp_fontdir='/opt/rt3/share/fonts' -exp_htmldir='/var/www/freeside/rt' -exp_lexdir='/opt/rt3/share/po' -exp_libdir='/opt/rt3/lib' -exp_localstatedir='/opt/rt3/var' -exp_logfiledir='/opt/rt3/var/log' -exp_mandir='/opt/rt3/man' -exp_manualdir='/opt/rt3/docs' -exp_masonstatedir='/usr/local/etc/freeside/masondata' -exp_plugindir='/opt/rt3/plugins' -exp_prefix='/opt/rt3' -exp_sbindir='/opt/rt3/sbin' -exp_sessionstatedir='/opt/rt3/var/session_data' -exp_sysconfdir='/opt/rt3/etc' -fontdir='/opt/rt3/share/fonts' -host_alias='' -htmldir='/var/www/freeside/rt' -includedir='${prefix}/include' -infodir='${datarootdir}/info' -lexdir='/opt/rt3/share/po' -libdir='/opt/rt3/lib' -libexecdir='${exec_prefix}/libexec' -localedir='${datarootdir}/locale' -localstatedir='/opt/rt3/var' -logfiledir='/opt/rt3/var/log' -mandir='/opt/rt3/man' -manualdir='/opt/rt3/docs' -masonstatedir='/usr/local/etc/freeside/masondata' -oldincludedir='/usr/include' -pdfdir='${docdir}' -plugindir='/opt/rt3/plugins' -prefix='/opt/rt3' -program_transform_name='s,x,x,' -psdir='${docdir}' -rt_layout_name='Freeside' -rt_version_major='4' -rt_version_minor='0' -rt_version_patch='21' -sbindir='/opt/rt3/sbin' -sessionstatedir='/opt/rt3/var/session_data' -sharedstatedir='${prefix}/com' -sysconfdir='/opt/rt3/etc' -target_alias='' - -## ----------- ## -## confdefs.h. ## -## ----------- ## - -/* confdefs.h */ -#define PACKAGE_NAME "RT" -#define PACKAGE_TARNAME "rt" -#define PACKAGE_VERSION "rt-4.0.21" -#define PACKAGE_STRING "RT rt-4.0.21" -#define PACKAGE_BUGREPORT "rt-bugs@bestpractical.com" -#define PACKAGE_URL "" - -configure: exit 0 diff --git a/rt/config.pld b/rt/config.pld deleted file mode 100644 index 787b7ec59..000000000 --- a/rt/config.pld +++ /dev/null @@ -1,23 +0,0 @@ -(test "x$prefix" = "xNONE" || test "x$prefix" = "x") && prefix=/opt/rt3 -(test "x$exec_prefix" = "xNONE" || test "x$exec_prefix" = "x") && exec_prefix=${prefix} -bindir=${exec_prefix}/bin -sbindir=${exec_prefix}/sbin -sysconfdir=${prefix}/etc -mandir=${prefix}/man -(test "x$plugindir" = "xNONE" || test "x$plugindir" = "x") && plugindir=${prefix}/plugins -libdir=${prefix}/lib -datadir=${prefix}/share -htmldir=/var/www/freeside/rt -(test "x$fontdir" = "xNONE" || test "x$fontdir" = "x") && fontdir=${datadir}/fonts -(test "x$lexdir" = "xNONE" || test "x$lexdir" = "x") && lexdir=${datadir}/po -(test "x$manualdir" = "xNONE" || test "x$manualdir" = "x") && manualdir=${prefix}/docs -localstatedir=${prefix}/var -(test "x$logfiledir" = "xNONE" || test "x$logfiledir" = "x") && logfiledir=${localstatedir}/log -(test "x$masonstatedir" = "xNONE" || test "x$masonstatedir" = "x") && masonstatedir=/usr/local/etc/freeside/masondata -(test "x$sessionstatedir" = "xNONE" || test "x$sessionstatedir" = "x") && sessionstatedir=${localstatedir}/session_data -(test "x$customdir" = "xNONE" || test "x$customdir" = "x") && customdir=${prefix}/local -(test "x$custometcdir" = "xNONE" || test "x$custometcdir" = "x") && custometcdir=${customdir}/etc -(test "x$customhtmldir" = "xNONE" || test "x$customhtmldir" = "x") && customhtmldir=${customdir}/html -(test "x$customlexdir" = "xNONE" || test "x$customlexdir" = "x") && customlexdir=${customdir}/po -(test "x$customlibdir" = "xNONE" || test "x$customlibdir" = "x") && customlibdir=${customdir}/lib -(test "x$customplugindir" = "xNONE" || test "x$customplugindir" = "x") && customplugindir=${customdir}/plugins diff --git a/rt/config.status b/rt/config.status deleted file mode 100755 index 24c5f4d6a..000000000 --- a/rt/config.status +++ /dev/null @@ -1,1102 +0,0 @@ -#! /bin/bash -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/bash} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; 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 - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -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="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by RT $as_me rt-4.0.21, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" etc/upgrade/3.8-ical-extension etc/upgrade/4.0-customfield-checkbox-extension etc/upgrade/split-out-cf-categories etc/upgrade/generate-rtaddressregexp etc/upgrade/upgrade-articles etc/upgrade/vulnerable-passwords sbin/rt-attributes-viewer sbin/rt-preferences-viewer sbin/rt-session-viewer sbin/rt-dump-metadata sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-validate-aliases sbin/rt-email-group-admin sbin/rt-server sbin/rt-server.fcgi sbin/standalone_httpd sbin/rt-setup-fulltext-index sbin/rt-fulltext-indexer bin/rt-crontool bin/rt-mailgate bin/rt Makefile etc/RT_Config.pm lib/RT/Generated.pm t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - 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 - -Configuration files: -$config_files - -Report bugs to ." - -ac_cs_config="'--enable-layout=Freeside' '--with-db-type=Pg' '--with-db-dba=freeside' '--with-db-database=freeside' '--with-db-rt-user=freeside' '--with-db-rt-pass=' '--with-web-user=freeside' '--with-web-group=freeside' '--with-rt-group=freeside' '--with-web-handler=modperl2'" -ac_cs_version="\ -RT config.status rt-4.0.21 -configured by ./configure, generated by GNU Autoconf 2.68, - with options \"$ac_cs_config\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/home/ivan/freeside/rt' -srcdir='.' -INSTALL='/usr/bin/install -c' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - 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 - -if $ac_cs_recheck; then - set X '/bin/bash' './configure' '--enable-layout=Freeside' '--with-db-type=Pg' '--with-db-dba=freeside' '--with-db-database=freeside' '--with-db-rt-user=freeside' '--with-db-rt-pass=' '--with-web-user=freeside' '--with-web-group=freeside' '--with-rt-group=freeside' '--with-web-handler=modperl2' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 - CONFIG_SHELL='/bin/bash' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "etc/upgrade/3.8-ical-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-ical-extension" ;; - "etc/upgrade/4.0-customfield-checkbox-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/4.0-customfield-checkbox-extension" ;; - "etc/upgrade/split-out-cf-categories") CONFIG_FILES="$CONFIG_FILES etc/upgrade/split-out-cf-categories" ;; - "etc/upgrade/generate-rtaddressregexp") CONFIG_FILES="$CONFIG_FILES etc/upgrade/generate-rtaddressregexp" ;; - "etc/upgrade/upgrade-articles") CONFIG_FILES="$CONFIG_FILES etc/upgrade/upgrade-articles" ;; - "etc/upgrade/vulnerable-passwords") CONFIG_FILES="$CONFIG_FILES etc/upgrade/vulnerable-passwords" ;; - "sbin/rt-attributes-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-attributes-viewer" ;; - "sbin/rt-preferences-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-preferences-viewer" ;; - "sbin/rt-session-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-session-viewer" ;; - "sbin/rt-dump-metadata") CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-metadata" ;; - "sbin/rt-setup-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;; - "sbin/rt-test-dependencies") CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;; - "sbin/rt-email-digest") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-digest" ;; - "sbin/rt-email-dashboards") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-dashboards" ;; - "sbin/rt-clean-sessions") CONFIG_FILES="$CONFIG_FILES sbin/rt-clean-sessions" ;; - "sbin/rt-shredder") CONFIG_FILES="$CONFIG_FILES sbin/rt-shredder" ;; - "sbin/rt-validator") CONFIG_FILES="$CONFIG_FILES sbin/rt-validator" ;; - "sbin/rt-validate-aliases") CONFIG_FILES="$CONFIG_FILES sbin/rt-validate-aliases" ;; - "sbin/rt-email-group-admin") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-group-admin" ;; - "sbin/rt-server") CONFIG_FILES="$CONFIG_FILES sbin/rt-server" ;; - "sbin/rt-server.fcgi") CONFIG_FILES="$CONFIG_FILES sbin/rt-server.fcgi" ;; - "sbin/standalone_httpd") CONFIG_FILES="$CONFIG_FILES sbin/standalone_httpd" ;; - "sbin/rt-setup-fulltext-index") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-fulltext-index" ;; - "sbin/rt-fulltext-indexer") CONFIG_FILES="$CONFIG_FILES sbin/rt-fulltext-indexer" ;; - "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/Generated.pm") CONFIG_FILES="$CONFIG_FILES lib/RT/Generated.pm" ;; - "t/data/configs/apache2.2+mod_perl.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+mod_perl.conf" ;; - "t/data/configs/apache2.2+fastcgi.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+fastcgi.conf" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -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 against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["RT_LOG_PATH_R"]="/opt/rt3/var/log" -S["LOCAL_PLUGIN_PATH_R"]="/opt/rt3/local/plugins" -S["LOCAL_LIB_PATH_R"]="/opt/rt3/local/lib" -S["LOCAL_LEXICON_PATH_R"]="/opt/rt3/local/po" -S["MASON_LOCAL_HTML_PATH_R"]="/opt/rt3/local/html" -S["LOCAL_ETC_PATH_R"]="/opt/rt3/local/etc" -S["MASON_HTML_PATH_R"]="/var/www/freeside/rt" -S["MASON_SESSION_PATH_R"]="/opt/rt3/var/session_data" -S["MASON_DATA_PATH_R"]="/usr/local/etc/freeside/masondata" -S["RT_PLUGIN_PATH_R"]="/opt/rt3/plugins" -S["RT_LEXICON_PATH_R"]="/opt/rt3/share/po" -S["RT_FONT_PATH_R"]="/opt/rt3/share/fonts" -S["RT_MAN_PATH_R"]="/opt/rt3/man" -S["RT_VAR_PATH_R"]="/opt/rt3/var" -S["RT_SBIN_PATH_R"]="/opt/rt3/sbin" -S["RT_BIN_PATH_R"]="/opt/rt3/bin" -S["CONFIG_FILE_PATH_R"]="/opt/rt3/etc" -S["RT_ETC_PATH_R"]="/opt/rt3/etc" -S["RT_LIB_PATH_R"]="/opt/rt3/lib" -S["RT_LOCAL_PATH_R"]="/opt/rt3/local" -S["RT_DOC_PATH_R"]="/opt/rt3/docs" -S["RT_PATH_R"]="/opt/rt3" -S["RT_LOG_PATH"]="/opt/rt3/var/log" -S["LOCAL_PLUGIN_PATH"]="/opt/rt3/local/plugins" -S["LOCAL_LIB_PATH"]="/opt/rt3/local/lib" -S["LOCAL_LEXICON_PATH"]="/opt/rt3/local/po" -S["MASON_LOCAL_HTML_PATH"]="/opt/rt3/local/html" -S["LOCAL_ETC_PATH"]="/opt/rt3/local/etc" -S["MASON_HTML_PATH"]="/var/www/freeside/rt" -S["MASON_SESSION_PATH"]="/opt/rt3/var/session_data" -S["MASON_DATA_PATH"]="/usr/local/etc/freeside/masondata" -S["RT_PLUGIN_PATH"]="/opt/rt3/plugins" -S["RT_FONT_PATH"]="/opt/rt3/share/fonts" -S["RT_MAN_PATH"]="/opt/rt3/man" -S["RT_VAR_PATH"]="/opt/rt3/var" -S["RT_SBIN_PATH"]="/opt/rt3/sbin" -S["RT_BIN_PATH"]="/opt/rt3/bin" -S["CONFIG_FILE_PATH"]="/opt/rt3/etc" -S["RT_ETC_PATH"]="/opt/rt3/etc" -S["RT_LEXICON_PATH"]="/opt/rt3/share/po" -S["RT_LIB_PATH"]="/opt/rt3/lib" -S["RT_LOCAL_PATH"]="/opt/rt3/local" -S["RT_DOC_PATH"]="/opt/rt3/docs" -S["RT_PATH"]="/opt/rt3" -S["RT_VERSION_PATCH"]="21" -S["RT_VERSION_MINOR"]="0" -S["RT_VERSION_MAJOR"]="4" -S["RT_SSL_MAILGATE"]="0" -S["RT_GPG"]="1" -S["RT_GD"]="0" -S["RT_GRAPHVIZ"]="1" -S["RT_DEVEL_MODE"]="0" -S["APACHECTL"]="/usr/sbin/apachectl" -S["RTGROUP"]="freeside" -S["WEB_GROUP"]="freeside" -S["WEB_USER"]="freeside" -S["DB_RT_PASS"]="" -S["DB_RT_USER"]="freeside" -S["DB_DATABASE"]="freeside" -S["DB_DBA"]="freeside" -S["DB_RT_HOST"]="localhost" -S["DB_PORT"]="" -S["DB_HOST"]="localhost" -S["DATABASE_ENV_PREF"]="" -S["DB_TYPE"]="Pg" -S["LIBS_GROUP"]="bin" -S["LIBS_OWNER"]="root" -S["BIN_OWNER"]="root" -S["COMMENT_INPLACE_LAYOUT"]="" -S["rt_layout_name"]="Freeside" -S["exp_customlibdir"]="/opt/rt3/local/lib" -S["customlibdir"]="/opt/rt3/local/lib" -S["exp_customlexdir"]="/opt/rt3/local/po" -S["customlexdir"]="/opt/rt3/local/po" -S["exp_customhtmldir"]="/opt/rt3/local/html" -S["customhtmldir"]="/opt/rt3/local/html" -S["exp_customplugindir"]="/opt/rt3/local/plugins" -S["customplugindir"]="/opt/rt3/local/plugins" -S["exp_custometcdir"]="/opt/rt3/local/etc" -S["custometcdir"]="/opt/rt3/local/etc" -S["exp_customdir"]="/opt/rt3/local" -S["customdir"]="/opt/rt3/local" -S["exp_sessionstatedir"]="/opt/rt3/var/session_data" -S["sessionstatedir"]="/opt/rt3/var/session_data" -S["exp_masonstatedir"]="/usr/local/etc/freeside/masondata" -S["masonstatedir"]="/usr/local/etc/freeside/masondata" -S["exp_logfiledir"]="/opt/rt3/var/log" -S["logfiledir"]="/opt/rt3/var/log" -S["exp_localstatedir"]="/opt/rt3/var" -S["exp_plugindir"]="/opt/rt3/plugins" -S["plugindir"]="/opt/rt3/plugins" -S["exp_manualdir"]="/opt/rt3/docs" -S["manualdir"]="/opt/rt3/docs" -S["exp_fontdir"]="/opt/rt3/share/fonts" -S["fontdir"]="/opt/rt3/share/fonts" -S["exp_htmldir"]="/var/www/freeside/rt" -S["exp_datadir"]="/opt/rt3/share" -S["exp_lexdir"]="/opt/rt3/share/po" -S["lexdir"]="/opt/rt3/share/po" -S["exp_libdir"]="/opt/rt3/lib" -S["exp_mandir"]="/opt/rt3/man" -S["exp_sysconfdir"]="/opt/rt3/etc" -S["exp_sbindir"]="/opt/rt3/sbin" -S["exp_bindir"]="/opt/rt3/bin" -S["exp_exec_prefix"]="/opt/rt3" -S["exp_prefix"]="/opt/rt3" -S["WEB_HANDLER"]="modperl2" -S["PERL"]="/usr/bin/perl" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["rt_version_patch"]="21" -S["rt_version_minor"]="0" -S["rt_version_major"]="4" -S["CONFIGURE_INCANT"]="./configure --enable-layout=Freeside --with-db-type=Pg --with-db-dba=freeside --with-db-database=freeside --with-db-rt-user=freeside --with-db-rt-pa"\ -"ss= --with-web-user=freeside --with-web-group=freeside --with-rt-group=freeside --with-web-handler=modperl2" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="" -S["ECHO_T"]="" -S["ECHO_N"]="-n" -S["ECHO_C"]="" -S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"rt-4.0.21\\\" -DPACKAGE_STRING=\\\"RT\\ rt-4.0.21\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@best"\ -"practical.com\\\" -DPACKAGE_URL=\\\"\\\"" -S["mandir"]="/opt/rt3/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="/opt/rt3/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="/var/www/freeside/rt" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="/opt/rt3/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="/opt/rt3/etc" -S["datadir"]="/opt/rt3/share" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="/opt/rt3/sbin" -S["bindir"]="/opt/rt3/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/opt/rt3" -S["exec_prefix"]="/opt/rt3" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="rt-bugs@bestpractical.com" -S["PACKAGE_STRING"]="RT rt-4.0.21" -S["PACKAGE_VERSION"]="rt-4.0.21" -S["PACKAGE_TARNAME"]="rt" -S["PACKAGE_NAME"]="RT" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/bash" -_ACAWK -cat >>"$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # 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. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&/opt/rt3/share&g - s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&/opt/rt3/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - - - case $ac_file$ac_mode in - "etc/upgrade/3.8-ical-extension":F) chmod ug+x $ac_file - ;; - "etc/upgrade/4.0-customfield-checkbox-extension":F) chmod ug+x $ac_file - ;; - "etc/upgrade/split-out-cf-categories":F) chmod ug+x $ac_file - ;; - "etc/upgrade/generate-rtaddressregexp":F) chmod ug+x $ac_file - ;; - "etc/upgrade/upgrade-articles":F) chmod ug+x $ac_file - ;; - "etc/upgrade/vulnerable-passwords":F) chmod ug+x $ac_file - ;; - "sbin/rt-attributes-viewer":F) chmod ug+x $ac_file - ;; - "sbin/rt-preferences-viewer":F) chmod ug+x $ac_file - ;; - "sbin/rt-session-viewer":F) chmod ug+x $ac_file - ;; - "sbin/rt-dump-metadata":F) chmod ug+x $ac_file - ;; - "sbin/rt-setup-database":F) chmod ug+x $ac_file - ;; - "sbin/rt-test-dependencies":F) chmod ug+x $ac_file - ;; - "sbin/rt-email-digest":F) chmod ug+x $ac_file - ;; - "sbin/rt-email-dashboards":F) chmod ug+x $ac_file - ;; - "sbin/rt-clean-sessions":F) chmod ug+x $ac_file - ;; - "sbin/rt-shredder":F) chmod ug+x $ac_file - ;; - "sbin/rt-validator":F) chmod ug+x $ac_file - ;; - "sbin/rt-validate-aliases":F) chmod ug+x $ac_file - ;; - "sbin/rt-email-group-admin":F) chmod ug+x $ac_file - ;; - "sbin/rt-server":F) chmod ug+x $ac_file - ;; - "sbin/rt-server.fcgi":F) chmod ug+x $ac_file - ;; - "sbin/standalone_httpd":F) chmod ug+x $ac_file - ;; - "sbin/rt-setup-fulltext-index":F) chmod ug+x $ac_file - ;; - "sbin/rt-fulltext-indexer":F) chmod ug+x $ac_file - ;; - "bin/rt-crontool":F) chmod ug+x $ac_file - ;; - "bin/rt-mailgate":F) chmod ug+x $ac_file - ;; - "bin/rt":F) chmod ug+x $ac_file - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/rt/etc/RT_Config.pm b/rt/etc/RT_Config.pm deleted file mode 100644 index a7fab946b..000000000 --- a/rt/etc/RT_Config.pm +++ /dev/null @@ -1,2814 +0,0 @@ -# -# RT was configured with: -# -# $ ./configure --enable-layout=Freeside --with-db-type=Pg --with-db-dba=freeside --with-db-database=freeside --with-db-rt-user=freeside --with-db-rt-pass= --with-web-user=freeside --with-web-group=freeside --with-rt-group=freeside --with-web-handler=modperl2 -# - -package RT; - -############################# WARNING ############################# -# # -# NEVER EDIT RT_Config.pm ! # -# # -# Instead, copy any sections you want to change to # -# RT_SiteConfig.pm and edit them there. Otherwise, # -# your changes will be lost when you upgrade RT. # -# # -############################# WARNING ############################# - -=head1 NAME - -RT::Config - -=head1 Base configuration - -=over 4 - -=item C<$rtname> - -C<$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. -Once you start using a given tag, you should probably never change it; -otherwise, mail for existing tickets won't get put in the right place. - -=cut - -Set($rtname, "example.com"); - -=item C<$Organization> - -You should set this to your organization's DNS domain. For example, -I or I. It is used by the linking -interface to guarantee that ticket URIs are unique and easy to -construct. Changing it after you have created tickets in the system -will B all existing ticket links! - -=cut - -Set($Organization, "example.com"); - -=item C<$CorrespondAddress>, C<$CommentAddress> - -RT is designed such that any mail which already has a ticket-id -associated with it will get to the right place automatically. - -C<$CorrespondAddress> and C<$CommentAddress> are the default addresses -that will be listed in From: and Reply-To: headers of correspondence -and comment mail tracked by RT, unless overridden by a queue-specific -address. They should be set to email addresses which have been -configured as aliases for F. - -=cut - -Set($CorrespondAddress, ''); - -Set($CommentAddress, ''); - -=item C<$WebDomain> - -Domain name of the RT server, e.g. 'www.example.com'. It should not -contain anything except the server name. - -=cut - -Set($WebDomain, "localhost"); - -=item C<$WebPort> - -If we're running as a superuser, run on port 80. Otherwise, pick a -high port for this user. - -443 is default port for https protocol. - -=cut - -Set($WebPort, 80); - -=item C<$WebPath> - -If you're putting the web UI somewhere other than at the root of your -server, you should set C<$WebPath> to the path you'll be serving RT -at. - -C<$WebPath> requires a leading / but no trailing /, or it can be -blank. - -In most cases, you should leave C<$WebPath> set to "" (an empty -value). - -=cut - -Set($WebPath, ""); - -=item C<$Timezone> - -C<$Timezone> is the default timezone, used to convert times entered by -users into GMT, as they are stored in the database, and back again; -users can override this. It should be set to a timezone recognized by -your server. - -=cut - -Set($Timezone, "US/Eastern"); - -=item C<@Plugins> - -Set C<@Plugins> to a list of external RT plugins that should be -enabled (those plugins have to be previously downloaded and -installed). - -Example: - -C - -=cut - -Set(@Plugins, (qw(RTx::Calendar - RT::Extension::MobileUI))); #RTx::Checklist )); - -=back - - - - -=head1 Database connection - -=over 4 - -=item C<$DatabaseType> - -Database driver being used; case matters. Valid types are "mysql", -"Oracle" and "Pg". - -=cut - -Set($DatabaseType, "Pg"); - -=item C<$DatabaseHost>, C<$DatabaseRTHost> - -The domain name of your database server. If you're running MySQL and -on localhost, leave it blank for enhanced performance. - -C is the fully-qualified hostname of your RT server, -for use in granting ACL rights on MySQL. - -=cut - -Set($DatabaseHost, "localhost"); -Set($DatabaseRTHost, "localhost"); - -=item C<$DatabasePort> - -The port that your database server is running on. Ignored unless it's -a positive integer. It's usually safe to leave this blank; RT will -choose the correct default. - -=cut - -Set($DatabasePort, ""); - -=item C<$DatabaseUser> - -The name of the user to connect to the database as. - -=cut - -Set($DatabaseUser, "freeside"); - -=item C<$DatabasePassword> - -The password the C<$DatabaseUser> should use to access the database. - -=cut - -Set($DatabasePassword, q{}); - -=item C<$DatabaseName> - -The name of the RT database on your database server. For Oracle, the -SID and database objects are created in C<$DatabaseUser>'s schema. - -=cut - -Set($DatabaseName, q{freeside}); - -=item C<$DatabaseRequireSSL> - -If you're using PostgreSQL and have compiled in SSL support, set -C<$DatabaseRequireSSL> to 1 to turn on SSL communication with the -database. - -=cut - -Set($DatabaseRequireSSL, undef); - -=back - - - - -=head1 Logging - -The default is to log anything except debugging information to syslog. -Check the L POD for information about how to get things -by syslog, mail or anything else, get debugging info in the log, etc. - -It might generally make sense to send error and higher by email to -some administrator. If you do this, be careful that this email isn't -sent to this RT instance. Mail loops will generate a critical log -message. - -=over 4 - -=item C<$LogToSyslog>, C<$LogToScreen> - -The minimum level error that will be logged to the specific device. -From lowest to highest priority, the levels are: - - debug info notice warning error critical alert emergency - -Many syslogds are configured to discard or file debug messages away, so -if you're attempting to debug RT you may need to reconfigure your -syslogd or use one of the other logging options. - -Logging to your screen affects scripts run from the command line as well -as the STDERR sent to your webserver (so these logs will usually show up -in your web server's error logs). - -=cut - -Set($LogToSyslog, "info"); -Set($LogToScreen, "info"); - -=item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed> - -Logging to a standalone file is also possible. The file needs to both -exist and be writable by all direct users of the RT API. This generally -includes the web server and whoever rt-crontool runs as. Note that -rt-mailgate and the RT CLI go through the webserver, so their users do -not need to have write permissions to this file. If you expect to have -multiple users of the direct API, Best Practical recommends using syslog -instead of direct file logging. - -You should set C<$LogToFile> to one of the levels documented above. - -=cut - -Set($LogToFile, undef); -Set($LogDir, q{/opt/rt3/var/log}); -Set($LogToFileNamed, "rt.log"); #log to rt.log - -=item C<$LogStackTraces> - -If set to a log level then logging will include stack traces for -messages with level equal to or greater than specified. - -NOTICE: Stack traces include parameters supplied to functions or -methods. It is possible for stack trace logging to reveal sensitive -information such as passwords or ticket content in your logs. - -=cut - -Set($LogStackTraces, ""); - -=item C<@LogToSyslogConf> - -On Solaris or UnixWare, set to ( socket => 'inet' ). Options here -override any other options RT passes to L. -Other interesting flags include facility and logopt. (See the -L documentation for more information.) (Maybe -ident too, if you have multiple RT installations.) - -=cut - -Set(@LogToSyslogConf, ()); - -=back - - - -=head1 Incoming mail gateway - -=over 4 - -=item C<$EmailSubjectTagRegex> - -This regexp controls what subject tags RT recognizes as its own. If -you're not dealing with historical C<$rtname> values, or historical -queue-specific subject tags, you'll likely never have to change this -configuration. - -Be B with it. Note that it overrides C<$rtname> for -subject token matching and that you should use only "non-capturing" -parenthesis grouping. For example: - -C - -and NOT - -C - -The setting below would make RT behave exactly as it does without the -setting enabled. - -=cut - -# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i ); - -=item C<$OwnerEmail> - -C<$OwnerEmail> is the address of a human who manages RT. RT will send -errors generated by the mail gateway to this address. This address -should I be an address that's managed by your RT instance. - -=cut - -Set($OwnerEmail, 'root'); - -=item C<$LoopsToRTOwner> - -If C<$LoopsToRTOwner> is defined, RT will send mail that it believes -might be a loop to C<$OwnerEmail>. - -=cut - -Set($LoopsToRTOwner, 1); - -=item C<$StoreLoops> - -If C<$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. - -=cut - -Set($StoreLoops, undef); - -=item C<$MaxAttachmentSize> - -C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments -stored in the database. This setting is irrelevant unless one of -$TruncateLongAttachments or $DropLongAttachments (below) are set. - -=cut - -Set($MaxAttachmentSize, 10_000_000); - -=item C<$TruncateLongAttachments> - -If this is set to a non-undef value, RT will truncate attachments -longer than C<$MaxAttachmentSize>. - -=cut - -Set($TruncateLongAttachments, undef); - -=item C<$DropLongAttachments> - -If this is set to a non-undef value, RT will silently drop attachments -longer than C. C<$TruncateLongAttachments>, above, -takes priority over this. - -=cut - -Set($DropLongAttachments, undef); - -=item C<$RTAddressRegexp> - -C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a -ticket CC if C<$ParseNewMessageForTicketCcs>, above, is enabled. It -is important that you set this to a regular expression that matches -all addresses used by your RT. This lets RT avoid sending mail to -itself. It will also hide RT addresses from the list of "One-time Cc" -and Bcc lists on ticket reply. - -If you have a number of addresses configured in your RT database -already, you can generate a naive first pass regexp by using: - - perl etc/upgrade/generate-rtaddressregexp - -If left blank, RT will compare each address to your configured -C<$CorrespondAddress> and C<$CommentAddress> before searching for a -Queue configured with a matching "Reply Address" or "Comment Address" -on the Queue Admin page. - -=cut - -Set($RTAddressRegexp, undef); - -=item C<$IgnoreCcRegexp> - -C<$IgnoreCcRegexp> is a regexp to exclude addresses from automatic addition -to the Cc list. Use this for addresses that are I received by RT but -are sometimes added to Cc lists by mistake. Unlike C<$RTAddressRegexp>, -these addresses can still receive email from RT otherwise. - -=cut - -Set($IgnoreCcRegexp, undef); - -=item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace> - -RT provides functionality which allows the system to rewrite incoming -email addresses. In its simplest form, you can substitute the value -in C for the value in -C (These values are passed to the -C subroutine in F) - -By default, that routine performs a C on any -address passed to it. - -=cut - -# Set($CanonicalizeEmailAddressMatch, '@subdomain\.example\.com$'); -# Set($CanonicalizeEmailAddressReplace, '@example.com'); - -=item C<$CanonicalizeOnCreate> - -Set this to 1 and the create new user page will use the values that -you enter in the form but use the function CanonicalizeUserInfo in -F - -=cut - -Set($CanonicalizeOnCreate, 0); - -=item C<$ValidateUserEmailAddresses> - -If C<$ValidateUserEmailAddresses> is 1, RT will refuse to create -users with an invalid email address (as specified in RFC 2822) or with -an email address made of multiple email addresses. - -=cut - -Set($ValidateUserEmailAddresses, undef); - -=item C<$NonCustomerEmailRegexp> - -Normally, when a ticket is linked to a customer, any requestors on that -ticket that didn't previously have customer memberships are linked to -the customer also. C<$NonCustomerEmailRegexp> is a regexp for email -addresses that should I automatically be linked to a customer in -this way. - -=cut - -Set($NonCustomerEmailRegexp, undef); - -=item C<@MailPlugins> - -C<@MailPlugins> is a list of authentication plugins for -L to use; see L - -=cut - -=item C<$UnsafeEmailCommands> - -C<$UnsafeEmailCommands>, if set to 1, enables 'take' and 'resolve' -as possible actions via the mail gateway. As its name implies, this -is very unsafe, as it allows email with a forged sender to possibly -resolve arbitrary tickets! - -=cut - -=item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch> - -The default "extract remote tracking tags" scrip settings; these -detect when your RT is talking to another RT, and adjust the subject -accordingly. - -=cut - -Set($ExtractSubjectTagMatch, qr/\[[^\]]+? #\d+\]/); -Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex} - ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/ - : qr/\[\Q$RT::rtname\E #\d+\]/)); - -=item C<$CheckMoreMSMailHeaders> - -Some email clients create a plain text version of HTML-formatted -email to help other clients that read only plain text. -Unfortunately, the plain text parts sometimes end up with -doubled newlines and these can then end up in RT. This -is most often seen in MS Outlook. - -Enable this option to have RT check for additional mail headers -and attempt to identify email from MS Outlook. When detected, -RT will then clean up double newlines. Note that it may -clean up intentional double newlines as well. - -=cut - -Set( $CheckMoreMSMailHeaders, 0); - -=back - - - -=head1 Outgoing mail - -=over 4 - -=item C<$MailCommand> - -C<$MailCommand> defines which method RT will use to try to send mail. -We know that 'sendmailpipe' works fairly well. If 'sendmailpipe' -doesn't work well for you, try 'sendmail'. Other options are 'smtp' -or 'qmail'. - -Note that you should remove the '-t' from C<$SendmailArguments> if you -use 'sendmail' rather than 'sendmailpipe' - -For testing purposes, or to simply disable sending mail out into the -world, you can set C<$MailCommand> to 'testfile' which writes all mail -to a temporary file. RT will log the location of the temporary file -so you can extract mail from it afterward. - -On shutdown, RT will clean up the temporary file created when using -the 'testfile' option. If testing while the RT server is still running, -you can find the files in the location noted in the log file. If you run -a tool like C however, or if you look after stopping the server, -the files will have been deleted when the process completed. If you need to -keep the files for development or debugging, you can manually set -C<< UNLINK => 0 >> where the testfile config is processed in -F. - -=cut - -#Set($MailCommand, "sendmailpipe"); -Set($MailCommand, "sendmail"); - -=item C<$SetOutgoingMailFrom> - -C<$SetOutgoingMailFrom> tells RT to set the sender envelope to the -Correspond mail address of the ticket's queue. - -Warning: If you use this setting, bounced mails will appear to be -incoming mail to the system, thus creating new tickets. - -If the value contains an C<@>, it is assumed to be an email address and used as -a global envelope sender. Expected usage in this case is to simply set the -same envelope sender on all mail from RT, without defining -C<$OverrideOutgoingMailFrom>. If you do define C<$OverrideOutgoingMailFrom>, -anything specified there overrides the global value (including Default). - -This option only works if C<$MailCommand> is set to 'sendmailpipe'. - -=cut - -Set($SetOutgoingMailFrom, 0); - -=item C<$OverrideOutgoingMailFrom> - -C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond -address of the queue as it is handed to sendmail -f. This helps force -the From_ header away from www-data or other email addresses that show -up in the "Sent by" line in Outlook. - -The option is a hash reference of queue name to email address. If -there is no ticket involved, then the value of the C key will -be used. - -This option only works if C<$SetOutgoingMailFrom> is enabled and -C<$MailCommand> is set to 'sendmailpipe'. - -=cut - -Set($OverrideOutgoingMailFrom, { -# 'Default' => 'admin@rt.example.com', -# 'General' => 'general@rt.example.com', -}); - -=item C<$DefaultMailPrecedence> - -C<$DefaultMailPrecedence> is used to control the default Precedence -level of outgoing mail where none is specified. By default it is -C, but if you only send mail to your staff, you may wish to -change it. - -Note that you can set the precedence of individual templates by -including an explicit Precedence header. - -If you set this value to C then we do not set a default -Precedence header to outgoing mail. However, if there already is a -Precedence header, it will be preserved. - -=cut - -Set($DefaultMailPrecedence, "bulk"); - -=item C<$DefaultErrorMailPrecedence> - -C<$DefaultErrorMailPrecedence> is used to control the default -Precedence level of outgoing mail that indicates some kind of error -condition. By default it is C, but if you only send mail to your -staff, you may wish to change it. - -If you set this value to C then we do not add a Precedence -header to error mail. - -=cut - -Set($DefaultErrorMailPrecedence, "bulk"); - -=item C<$UseOriginatorHeader> - -C<$UseOriginatorHeader> is used to control the insertion of an -RT-Originator Header in every outgoing mail, containing the mail -address of the transaction creator. - -=cut - -Set($UseOriginatorHeader, 1); - -=item C<$UseFriendlyFromLine> - -By default, RT sets the outgoing mail's "From:" header to "SenderName -via RT". Setting C<$UseFriendlyFromLine> to 0 disables it. - -=cut - -Set($UseFriendlyFromLine, 1); - -=item C<$FriendlyFromLineFormat> - -C format of the friendly 'From:' header; its arguments are -SenderName and SenderEmailAddress. - -=cut - -Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>"); - -=item C<$UseFriendlyToLine> - -RT can optionally set a "Friendly" 'To:' header when sending messages -to Ccs or AdminCcs (rather than having a blank 'To:' header. - -This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL. If you -are using sendmail, rather than postfix, qmail, exim or some other -MTA, you _must_ disable this option. - -=cut - -Set($UseFriendlyToLine, 0); - -=item C<$FriendlyToLineFormat> - -C format of the friendly 'To:' header; its arguments are -WatcherType and TicketId. - -=cut - -Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;"); - -=item C<$NotifyActor> - -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 -behavior, Set C<$NotifyActor> to 1 - -=cut - -Set($NotifyActor, 0); - -=item C<$RecordOutgoingEmail> - -By default, RT records each message it sends out to its own internal -database. To change this behavior, set C<$RecordOutgoingEmail> to 0 - -If this is disabled, users' digest mail delivery preferences -(i.e. EmailFrequency) will also be ignored. - -=cut - -Set($RecordOutgoingEmail, 1); - -=item C<$VERPPrefix>, C<$VERPDomain> - -Setting these options enables VERP support -L. - -Uncomment the following two directives to generate envelope senders -of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}> -(i.e. rt-jesse=fsck.com@rt.example.com ). - -This currently only works with sendmail and sendmailpipe. - -=cut - -# Set($VERPPrefix, "rt-"); -# Set($VERPDomain, $RT::Organization); - - -=item C<$ForwardFromUser> - -By default, RT forwards a message using queue's address and adds RT's -tag into subject of the outgoing message, so recipients' replies go -into RT as correspondents. - -To change this behavior, set C<$ForwardFromUser> to 1 and RT -will use the address of the current user and remove RT's subject tag. - -=cut - -Set($ForwardFromUser, 0); - -=back - -=head2 Email dashboards - -=over 4 - -=item C<$DashboardAddress> - -The email address from which RT will send dashboards. If none is set, -then C<$OwnerEmail> will be used. - -=cut - -Set($DashboardAddress, ''); - -=item C<$DashboardSubject> - -Lets you set the subject of dashboards. Arguments are the frequency (Daily, -Weekly, Monthly) of the dashboard and the dashboard's name. - -=cut - -Set($DashboardSubject, "%s Dashboard: %s"); - -=item C<@EmailDashboardRemove> - -A list of regular expressions that will be used to remove content from -mailed dashboards. - -=cut - -Set(@EmailDashboardRemove, ()); - -=back - - - -=head2 Sendmail configuration - -These options only take effect if C<$MailCommand> is 'sendmail' or -'sendmailpipe' - -=over 4 - -=item C<$SendmailArguments> - -C<$SendmailArguments> defines what flags to pass to C<$SendmailPath> -If you picked 'sendmailpipe', you MUST add a -t flag to -C<$SendmailArguments> These options are good for most sendmail -wrappers and work-a-likes. - -These arguments are good for sendmail brand sendmail 8 and newer: -C - -=cut - -#Set($SendmailArguments, "-oi -t"); -Set($SendmailArguments, "-oi"); - - -=item C<$SendmailBounceArguments> - -C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail> -assuming RT needs to send an error (i.e. bounce). - -=cut - -Set($SendmailBounceArguments, '-f "<>"'); - -=item C<$SendmailPath> - -If you selected 'sendmailpipe' above, you MUST specify the path to -your sendmail binary in C<$SendmailPath>. - -=cut - -Set($SendmailPath, "/usr/sbin/sendmail"); - - -=back - -=head2 SMTP configuration - -These options only take effect if C<$MailCommand> is 'smtp' - -=over 4 - -=item C<$SMTPServer> - -C<$SMTPServer> should be set to the hostname of the SMTP server to use - -=cut - -Set($SMTPServer, undef); - -=item C<$SMTPFrom> - -C<$SMTPFrom> should be set to the 'From' address to use, if not the -email's 'From' - -=cut - -Set($SMTPFrom, undef); - -=item C<$SMTPDebug> - -C<$SMTPDebug> should be set to 1 to debug SMTP mail sending - -=cut - -Set($SMTPDebug, 0); - -=back - -=head2 Other mailers - -=over 4 - -=item C<@MailParams> - -C<@MailParams> defines a list of options passed to $MailCommand if it -is not 'sendmailpipe', 'sendmail', or 'smtp' - -=cut - -Set(@MailParams, ()); - -=back - - -=head1 Web interface - -=over 4 - -=item C<$WebDefaultStylesheet> - -This determines the default stylesheet the RT web interface will use. -RT ships with several themes by default: - - web2 The default layout for RT 3.8 - aileron The default layout for RT 4.0 - ballard Theme which doesn't rely on JavaScript for menuing - -This bundled distibution of RT also includes: - freeside3 Integration with Freeside (enabled by default) - freeside2.1 Previous Freeside theme - -This value actually specifies a directory in F -from which RT will try to load the file main.css (which should @import -any other files the stylesheet needs). This allows you to easily and -cleanly create your own stylesheets to apply to RT. This option can -be overridden by users in their preferences. - -=cut - -Set($WebDefaultStylesheet, "freeside3"); - -=item C<$DefaultQueue> - -Use this to select the default queue name that will be used for -creating new tickets. You may use either the queue's name or its -ID. This only affects the queue selection boxes on the web interface. - -=cut - -# Set($DefaultQueue, "General"); - -=item C<$RememberDefaultQueue> - -When a queue is selected in the new ticket dropdown, make it the new -default for the new ticket dropdown. - -=cut - -# Set($RememberDefaultQueue, 1); - -=item C<$EnableReminders> - -Hide all links and portlets related to Reminders by setting this to 0 - -=cut - -Set($EnableReminders, 1); - -=item C<@CustomFieldValuesSources> - -Set C<@CustomFieldValuesSources> to a list of class names which extend -L. This can be used to pull lists of -custom field values from external sources at runtime. - -=cut - -Set(@CustomFieldValuesSources, ('RT::CustomFieldValues::Queues')); - -=item C<$CanonicalizeRedirectURLs> - -Set C<$CanonicalizeRedirectURLs> to 1 to use C<$WebURL> when -redirecting rather than the one we get from C<%ENV>. - -Apache's UseCanonicalName directive changes the hostname that RT -finds in C<%ENV>. You can read more about what turning it On or Off -means in the documentation for your version of Apache. - -If you use RT behind a reverse proxy, you almost certainly want to -enable this option. - -=cut - -Set($CanonicalizeRedirectURLs, 0); - -=item C<@JSFiles> - -A list of JavaScript files to be included in head. Removing any of -the default entries is not suggested. - -If you're a plugin author, refer to RT->AddJavaScript. - -=cut - -Set(@JSFiles, qw/ - jquery-1.4.2.min.js - jquery_noconflict.js - jquery-ui-1.8.4.custom.min.js - jquery-ui-timepicker-addon.js - jquery-ui-patch-datepicker.js - jquery.cookie.js - titlebox-state.js - util.js - userautocomplete.js - jquery.event.hover-1.0.js - superfish.js - supersubs.js - jquery.supposition.js - history-folding.js - late.js -/); - -=item C<$JSMinPath> - -Path to the jsmin binary; if specified, it will be used to minify -C. The default, and the fallback if the binary cannot be -found, is to simply concatenate the files. - -jsmin can be installed by running 'make jsmin' from the RT install -directory, or from http://www.crockford.com/javascript/jsmin.html - -=cut - -# Set($JSMinPath, "/path/to/jsmin"); - -=item C<@CSSFiles> - -A list of additional CSS files to be included in head. - -If you're a plugin author, refer to RT->AddStyleSheets. - -=cut - -Set(@CSSFiles, qw//); - -=item C<$UsernameFormat> - -This determines how user info is displayed. 'concise' will show one of -either NickName, RealName, Name or EmailAddress, depending on what -exists and whether the user is privileged or not. 'verbose' will show -RealName and EmailAddress. - -=cut - -Set($UsernameFormat, "verbose"); - -=item C<$WebBaseURL>, C<$WebURL> - -Usually you don't want to set these options. The only obvious reason -is if RT is accessible via https protocol on a non standard port, e.g. -'https://rt.example.com:9999'. In all other cases these options are -computed using C<$WebDomain>, C<$WebPort> and C<$WebPath>. - -C<$WebBaseURL> is the scheme, server and port -(e.g. 'http://rt.example.com') for constructing URLs to the web -UI. C<$WebBaseURL> doesn't need a trailing /. - -C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for -example: 'http://www.example.com/rt/'. - -=cut - -my $port = RT->Config->Get('WebPort'); -Set($WebBaseURL, - ($port == 443? 'https': 'http') .'://' - . RT->Config->Get('WebDomain') - . ($port != 80 && $port != 443? ":$port" : '') -); - -Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/"); - -=item C<$WebImagesURL> - -C<$WebImagesURL> points to the base URL where RT can find its images. -Define the directory name to be used for images in RT web documents. - -=cut - -Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/"); - -=item C<$LogoURL> - -C<$LogoURL> points to the URL of the RT logo displayed in the web UI. -This can also be configured via the web UI. - -=cut - -Set($LogoURL, RT->Config->Get('WebImagesURL') . "bpslogo.png"); - -=item C<$LogoLinkURL> - -C<$LogoLinkURL> is the URL that the RT logo hyperlinks to. - -=cut - -Set($LogoLinkURL, "http://bestpractical.com"); - -=item C<$LogoAltText> - -C<$LogoAltText> is a string of text for the alt-text of the logo. It -will be passed through C for localization. - -=cut - -Set($LogoAltText, "Best Practical Solutions, LLC corporate logo"); - -=item C<$LogoImageHeight> - -C<$LogoImageHeight> is the value of the C attribute of the logo -C tag. - -=cut - -Set($LogoImageHeight, 38); - -=item C<$LogoImageWidth> - -C<$LogoImageWidth> is the value of the C attribute of the logo -C tag. - -=cut - -Set($LogoImageWidth, 181); - -=item C<$WebNoAuthRegex> - -What portion of RT's URL space should not require authentication. The -default is almost certainly correct, and should only be changed if you -are extending RT. - -=cut - -Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x ); - -=item C<$SelfServiceRegex> - -What portion of RT's URLspace should be accessible to Unprivileged -users This does not override the redirect from F -to F when Unprivileged users attempt to -access ticked displays. - -=cut - -Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x ); - -=item C<$WebFlushDbCacheEveryRequest> - -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 -C<$WebFlushDbCacheEveryRequest> to 0 will turn this off, which will -speed RT up a bit, at the expense of a tiny bit of data accuracy. - -=cut - -Set($WebFlushDbCacheEveryRequest, 1); - -=item C<%ChartFont> - -The L module (which RT uses for graphs) ships with a built-in font -that doesn't have full Unicode support. You can use a given TrueType -font for a specific language by setting %ChartFont to (language =E -the absolute path of a font) pairs. Your GD library must have support -for TrueType fonts to use this option. If there is no entry for a -language in the hash then font with 'others' key is used. - -RT comes with two TrueType fonts covering most available languages. - -=cut - -Set( - %ChartFont, - 'zh-cn' => "$RT::BasePath/share/fonts/DroidSansFallback.ttf", - 'zh-tw' => "$RT::BasePath/share/fonts/DroidSansFallback.ttf", - 'ja' => "$RT::BasePath/share/fonts/DroidSansFallback.ttf", - 'others' => "$RT::BasePath/share/fonts/DroidSans.ttf", -); - -=item C<$ChartsTimezonesInDB> - -RT stores dates using the UTC timezone in the DB, so charts grouped by -dates and time are not representative. Set C<$ChartsTimezonesInDB> to 1 -to enable timezone conversions using your DB's capabilities. You may -need to do some work on the DB side to use this feature, read more in -F. - -At this time, this feature only applies to MySQL and PostgreSQL. - -=cut - -Set($ChartsTimezonesInDB, 0); - -=back - - - -=head2 Home page - -=over 4 - -=item C<$DefaultSummaryRows> - -C<$DefaultSummaryRows> is default number of rows displayed in for -search results on the front page. - -=cut - -Set($DefaultSummaryRows, 10); - -=item C<$HomePageRefreshInterval> - -C<$HomePageRefreshInterval> is default number of seconds to refresh -the RT home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200]. - -=cut - -Set($HomePageRefreshInterval, 0); - -=item C<$HomepageComponents> - -C<$HomepageComponents> is an arrayref of allowed components on a -user's customized homepage ("RT at a glance"). - -=cut - -Set( - $HomepageComponents, - [ - qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards SavedSearches ) # loc_qw - ] -); - -=back - - - - -=head2 Ticket search - -=over 4 - -=item C<$UseSQLForACLChecks> - -Historically, ACLs were checked on display, which could lead to empty -search pages and wrong ticket counts. Set C<$UseSQLForACLChecks> to 1 -to limit search results in SQL instead, which eliminates these -problems. - -This option is still relatively new; it may result in performance -problems in some cases, or significant speedups in others. - -=cut - -Set($UseSQLForACLChecks, undef); - -=item C<$TicketsItemMapSize> - -On the display page of a ticket from search results, RT provides links -to the first, next, previous and last ticket from the results. In -order to build these links, RT needs to fetch the full result set from -the database, which can be resource-intensive. - -Set C<$TicketsItemMapSize> to number of tickets you want RT to examine -to build these links. If the full result set is larger than this -number, RT will omit the "last" link in the menu. Set this to zero to -always examine all results. - -=cut - -Set($TicketsItemMapSize, 1000); - -=item C<$SearchResultsRefreshInterval> - -C<$SearchResultsRefreshInterval> is default number of seconds to -refresh search results in RT. Choose from [0, 120, 300, 600, 1200, -3600, 7200]. - -=cut - -Set($SearchResultsRefreshInterval, 0); - -=item C<$DefaultSearchResultFormat> - -C<$DefaultSearchResultFormat> is the default format for RT search -results - -=cut - -Set ($DefaultSearchResultFormat, qq{ - '__id__/TITLE:#', - '__Subject__/TITLE:Subject', - Customer, - Status, - QueueName, - OwnerName, - Priority, - '__NEWLINE__', - '__NBSP__', - '__Requestors__', - '__CustomerTags__', - '__CreatedRelative__', - '__ToldRelative__', - '__LastUpdatedRelative__', - '__TimeLeft__'}); - -=item C<$DefaultSelfServiceSearchResultFormat> - -C<$DefaultSelfServiceSearchResultFormat> is the default format of -searches displayed in the SelfService interface. - -=cut - -Set($DefaultSelfServiceSearchResultFormat, qq{ - '__id__/TITLE:#', - '__Subject__/TITLE:Subject', - Status, - Requestors, - OwnerName}); - -=item C<%FullTextSearch> - -Full text search (FTS) without database indexing is a very slow -operation, and is thus disabled by default. - -Before setting C to 1, read F for -the full details of FTS on your particular database. - -It is possible to enable FTS without database indexing support, simply -by setting the C key to 1, while leaving C set to 0. -This is not generally suggested, as unindexed full-text searching can -cause severe performance problems. - -=cut - -Set(%FullTextSearch, - Enable => 0, - Indexed => 0, -); - -=item C<$DontSearchFileAttachments> - -If C<$DontSearchFileAttachments> is set to 1, then uploaded files -(attachments with file names) are not searched during content -search. - -Note that if you use indexed FTS then named attachments are still -indexed by default regardless of this option. - -=cut - -Set($DontSearchFileAttachments, undef); - -=item C<$OnlySearchActiveTicketsInSimpleSearch> - -When query in simple search doesn't have status info, use this to only -search active ones. - -=cut - -Set($OnlySearchActiveTicketsInSimpleSearch, 1); - -=item C<$SearchResultsAutoRedirect> - -When only one ticket is found in search, use this to redirect to the -ticket display page automatically. - -=cut - -Set($SearchResultsAutoRedirect, 0); - -=back - - - -=head2 Ticket display - -=over 4 - -=item C<$ShowMoreAboutPrivilegedUsers> - -This determines if the 'More about requestor' box on -Ticket/Display.html is shown for Privileged Users. - -=cut - -Set($ShowMoreAboutPrivilegedUsers, 0); - -=item C<$MoreAboutRequestorTicketList> - -This can be set to Active, Inactive, All or None. It controls what -ticket list will be displayed in the 'More about requestor' box on -Ticket/Display.html. This option can be controlled by users also. - -=cut - -Set($MoreAboutRequestorTicketList, "Active"); - -=item C<$MoreAboutRequestorExtraInfo> - -By default, the 'More about requestor' box on Ticket/Display.html -shows the Requestor's name and ticket list. If you would like to see -extra information about the user, this expects a Format string of user -attributes. Please note that not all the attributes are supported in -this display because we're not building a table. - -Example: -C - -=cut - -Set($MoreAboutRequestorExtraInfo, ""); - -=item C<$MoreAboutRequestorGroupsLimit> - -By default, the 'More about requestor' box on Ticket/Display.html -shows all the groups of the Requestor. Use this to limit the number -of groups; a value of undef removes the group display entirely. - -=cut - -Set($MoreAboutRequestorGroupsLimit, 0); - -=item C<$UseSideBySideLayout> - -Should the ticket create and update forms use a more space efficient -two column layout. This layout may not work in narrow browsers if you -set a MessageBoxWidth (below). - -=cut - -Set($UseSideBySideLayout, 1); - -=item C<$EditCustomFieldsSingleColumn> - -When displaying a list of Ticket Custom Fields for editing, RT -defaults to a 2 column list. If you set this to 1, it will instead -display the Custom Fields in a single column. - -=cut - -Set($EditCustomFieldsSingleColumn, 0); - -=item C<$ShowUnreadMessageNotifications> - -If set to 1, RT will prompt users when there are new, -unread messages on tickets they are viewing. - -=cut - -Set($ShowUnreadMessageNotifications, 0); - -=item C<$AutocompleteOwners> - -If set to 1, the owner drop-downs for ticket update/modify and the query -builder are replaced by text fields that autocomplete. This can -alleviate the sometimes huge owner list for installations where many -users have the OwnTicket right. - -=cut - -Set($AutocompleteOwners, 0); - -=item C<$AutocompleteOwnersForSearch> - -If set to 1, the owner drop-downs for the query builder are always -replaced by text field that autocomplete and C<$AutocompleteOwners> -is ignored. Helpful when owners list is huge in the query builder. - -=cut - -Set($AutocompleteOwnersForSearch, 0); - -=item C<$UserAutocompleteFields> - -Specifies which fields of L to match against and how to -match each field when autocompleting users. Valid match methods are -LIKE, STARTSWITH, ENDSWITH, =, and !=. - -=cut - -Set($UserAutocompleteFields, { - EmailAddress => 'STARTSWITH', - Name => 'STARTSWITH', - RealName => 'LIKE', -}); - -=item C<$AllowUserAutocompleteForUnprivileged> - -Should unprivileged users be allowed to autocomplete users. Setting -this option to 1 means unprivileged users will be able to search all -your users. - -=cut - -Set($AllowUserAutocompleteForUnprivileged, 0); - -=item C<$DisplayTicketAfterQuickCreate> - -Enable this to redirect to the created ticket display page -automatically when using QuickCreate. - -=cut - -Set($DisplayTicketAfterQuickCreate, 0); - -=item C<$WikiImplicitLinks> - -Support implicit links in WikiText custom fields? Setting this to 1 -causes InterCapped or ALLCAPS words in WikiText fields to automatically -become links to searches for those words. If used on Articles, it links -to the Article with that name. - -=cut - -Set($WikiImplicitLinks, 0); - -=item C<$PreviewScripMessages> - -Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket -reply page should include the content of the messages to be sent. - -=cut - -Set($PreviewScripMessages, 0); - -=item C<$SimplifiedRecipients> - -If C<$SimplifiedRecipients> is set, a simple list of who will receive -B kind of mail will be shown on the ticket reply page, instead of a -detailed breakdown by scrip. - -=cut - -Set($SimplifiedRecipients, 0); - -=item C<$HideResolveActionsWithDependencies> - -If set to 1, this option will skip ticket menu actions which can't be -completed successfully because of outstanding active Depends On tickets. - -By default, all ticket actions are displayed in the menu even if some of -them can't be successful until all Depends On links are resolved or -transitioned to another inactive status. - -=cut - -Set($HideResolveActionsWithDependencies, 0); - -=back - - - -=head2 Articles - -=over 4 - -=item C<$ArticleOnTicketCreate> - -Set this to 1 to display the Articles interface on the Ticket Create -page in addition to the Reply/Comment page. - -=cut - -Set($ArticleOnTicketCreate, 0); - -=item C<$HideArticleSearchOnReplyCreate> - -Set this to 1 to hide the search and include boxes from the Article -UI. This assumes you have enabled Article Hotlist feature, otherwise -you will have no access to Articles. - -=cut - -Set($HideArticleSearchOnReplyCreate, 0); - -=back - - - -=head2 Message box properties - -=over 4 - -=item C<$MessageBoxWidth>, C<$MessageBoxHeight> - -For message boxes, set the entry box width, height and what type of -wrapping to use. These options can be overridden by users in their -preferences. - -When the width is set to undef, no column count is specified and the -message box will take up 100% of the available width. Combining this -with HARD messagebox wrapping (below) is not recommended, as it will -lead to inconsistent width in transactions between browsers. - -These settings only apply to the non-RichText message box. See below -for Rich Text settings. - -=cut - -Set($MessageBoxWidth, undef); -Set($MessageBoxHeight, 15); - -=item C<$MessageBoxWrap> - -Wrapping is disabled when using MessageBoxRichText because of a bad -interaction between IE and wrapping with the Rich Text Editor. - -=cut - -Set($MessageBoxWrap, "SOFT"); - -=item C<$MessageBoxRichText> - -Should "rich text" editing be enabled? This option lets your users -send HTML email messages from the web interface. - -=cut - -Set($MessageBoxRichText, 1); - -=item C<$MessageBoxRichTextHeight> - -Height of rich text JavaScript enabled editing boxes (in pixels) - -=cut - -Set($MessageBoxRichTextHeight, 200); - -=item C<$MessageBoxIncludeSignature> - -Should your users' signatures (from their Preferences page) be -included in Comments and Replies. - -=cut - -Set($MessageBoxIncludeSignature, 1); - -=item C<$MessageBoxIncludeSignatureOnComment> - -Should your users' signatures (from their Preferences page) be -included in Comments. Setting this to false overrides -C<$MessageBoxIncludeSignature>. - -=cut - -Set($MessageBoxIncludeSignatureOnComment, 1); - -=back - - -=head2 Transaction display - -=over 4 - -=item C<$OldestTransactionsFirst> - -By default, RT shows newest transactions at the bottom of the ticket -history page, if you want see them at the top set this to 0. This -option can be overridden by users in their preferences. - -=cut - -Set($OldestTransactionsFirst, 1); - -=item C<$DeferTransactionLoading> - -When set, defers loading ticket history until the user clicks a link. -This should end up serving pages to users quicker, since generating -all the HTML for transaction history can be slow for long tickets. - -=cut - -# Set($DeferTransactionLoading, 1); - -=item C<$ShowBccHeader> - -By default, RT hides from the web UI information about blind copies -user sent on reply or comment. - -=cut - -Set($ShowBccHeader, 0); - -=item C<$TrustHTMLAttachments> - -If C 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) - -=cut - -Set($TrustHTMLAttachments, undef); - -=item C<$AlwaysDownloadAttachments> - -Always download attachments, regardless of content type. If set, this -overrides C. - -=cut - -Set($AlwaysDownloadAttachments, undef); - -=item C<$AttachmentUnits> - -Controls the units (kilobytes or bytes) that attachment sizes use for -display. The default is to display kilobytes if the attachment is -larger than 1024 bytes, bytes otherwise. If you set -C<$AttachmentUnits> to C<'k'> then attachment sizes will always be -displayed in kilobytes. If set to C<'b'>, then sizes will be bytes. - -=cut - -Set($AttachmentUnits, undef); - -=item C<$PreferRichText> - -If C<$PreferRichText> is set to 1, RT will show HTML/Rich text messages -in preference to their plain-text alternatives. RT "scrubs" the HTML to -show only a minimal subset of HTML to avoid possible contamination by -cross-site-scripting attacks. - -=cut - -Set($PreferRichText, undef); - -=item C<$MaxInlineBody> - -C<$MaxInlineBody> is the maximum attachment size that we want to see -inline when viewing a transaction. RT will inline any text if the -value is undefined or 0. This option can be overridden by users in -their preferences. - -=cut - -Set($MaxInlineBody, 12000); - -=item C<$ShowTransactionImages> - -By default, RT shows images attached to incoming (and outgoing) ticket -updates inline. Set this variable to 0 if you'd like to disable that -behavior. - -=cut - -Set($ShowTransactionImages, 1); - -=item C<$PlainTextPre> - -Normally plaintext attachments are displayed as HTML with line breaks -preserved. This causes space- and tab-based formatting not to be -displayed correctly. By setting $PlainTextPre messages will be -displayed using
.
-
-=cut
-
-Set($PlainTextPre, 0);
-
-
-=item C<$PlainTextMono>
-
-Set C<$PlainTextMono> to 1 to use monospaced font and preserve
-formatting; unlike C<$PlainTextPre>, the text will wrap to fit width
-of the browser window; this option overrides C<$PlainTextPre>.
-
-=cut
-
-Set($PlainTextMono, 0);
-
-=item C<$SuppressInlineTextFiles>
-
-If C<$SuppressInlineTextFiles> is set to 1, then uploaded text files
-(text-type attachments with file names) are prevented from being
-displayed in-line when viewing a ticket's history.
-
-=cut
-
-Set($SuppressInlineTextFiles, undef);
-
-
-=item C<@Active_MakeClicky>
-
-MakeClicky detects various formats of data in headers and email
-messages, and extends them with supporting links.  By default, RT
-provides two formats:
-
-* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
-  link after the URL.
-
-* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
-  replaces the URL with a link.
-
-See F for documentation on how to add
-your own styles of link detection.
-
-=cut
-
-Set(@Active_MakeClicky, qw());
-
-=back
-
-
-
-=head1 Application logic
-
-=over 4
-
-=item C<$ParseNewMessageForTicketCcs>
-
-If C<$ParseNewMessageForTicketCcs> is set to 1, RT will attempt to
-divine Ticket 'Cc' watchers from the To and Cc lines of incoming
-messages that create new Tickets. This option does not apply to replies
-or comments on existing Tickets. Be forewarned that if you have I
-addresses which forward mail to RT automatically and you enable this
-option without modifying C<$RTAddressRegexp> below, you will get
-yourself into a heap of trouble.
-
-=cut
-
-Set($ParseNewMessageForTicketCcs, undef);
-
-=item C<$UseTransactionBatch>
-
-Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
-such that a resolve and comment (for example) would happen
-simultaneously, instead of as two transactions, unaware of each
-others' existence.
-
-=cut
-
-Set($UseTransactionBatch, 1);
-
-=item C<$StrictLinkACL>
-
-When this feature is enabled a user needs I rights on
-both tickets to link them together; otherwise, I rights
-on either of them is sufficient.
-
-=cut
-
-Set($StrictLinkACL, 1);
-
-=item C<$RedistributeAutoGeneratedMessages>
-
-Should RT redistribute correspondence that it identifies as machine
-generated?  A 1 will do so; setting this to 0 will cause no
-such messages to be redistributed.  You can also use 'privileged' (the
-default), which will redistribute only to privileged users. This helps
-to protect against malformed bounces and loops caused by auto-created
-requestors with bogus addresses.
-
-=cut
-
-Set($RedistributeAutoGeneratedMessages, "privileged");
-
-=item C<$ApprovalRejectionNotes>
-
-Should rejection notes from approvals be sent to the requestors?
-
-=cut
-
-Set($ApprovalRejectionNotes, 1);
-
-=item C<$ForceApprovalsView>
-
-Should approval tickets only be viewed and modified through the standard
-approval interface?  Changing this setting to 1 will redirect any attempt to
-use the normal ticket display and modify page for approval tickets.
-
-For example, with this option set to 1 and an approval ticket #123:
-
-    /Ticket/Display.html?id=123
-
-is redirected to
-
-    /Approval/Display.html?id=123
-
-=back
-
-=cut
-
-Set($ForceApprovalsView, 0);
-
-=head1 Extra security
-
-This is a list of extra security measures to enable that help keep your RT
-safe.  If you don't know what these mean, you should almost certainly leave the
-defaults alone.
-
-=over 4
-
-=item C<$DisallowExecuteCode>
-
-If set to a true value, the C right will be removed from
-all users, B the superuser.  This is intended for when RT is
-installed into a shared environment where even the superuser should not
-be allowed to run arbitrary Perl code on the server via scrips.
-
-=cut
-
-Set($DisallowExecuteCode, 0);
-
-=item C<$Framebusting>
-
-If set to a false value, framekiller javascript will be disabled and the
-X-Frame-Options: DENY header will be suppressed from all responses.
-This disables RT's clickjacking protection.
-
-=cut
-
-Set($Framebusting, 1);
-
-=item C<$RestrictReferrer>
-
-If set to a false value, the HTTP C (sic) header will not be
-checked to ensure that requests come from RT's own domain.  As RT allows
-for GET requests to alter state, disabling this opens RT up to
-cross-site request forgery (CSRF) attacks.
-
-=cut
-
-Set($RestrictReferrer, 1);
-
-=item C<$RestrictLoginReferrer>
-
-If set to a false value, RT will allow the user to log in from any link
-or request, merely by passing in C and C parameters; setting
-it to a true value forces all logins to come from the login box, so the
-user is aware that they are being logged in.  The default is off, for
-backwards compatability.
-
-=cut
-
-Set($RestrictLoginReferrer, 0);
-
-=item C<@ReferrerWhitelist>
-
-This is a list of hostname:port combinations that RT will treat as being
-part of RT's domain. This is particularly useful if you access RT as
-multiple hostnames or have an external auth system that needs to
-redirect back to RT once authentication is complete.
-
- Set(@ReferrerWhitelist, qw(www.example.com:443  www3.example.com:80));
-
-If the "RT has detected a possible cross-site request forgery" error is triggered
-by a host:port sent by your browser that you believe should be valid, you can copy
-the host:port from the error message into this list.
-
-Simple wildcards, similar to SSL certificates, are allowed.  For example:
-
-    *.example.com:80    # matches foo.example.com
-                        # but not example.com
-                        #      or foo.bar.example.com
-
-    www*.example.com:80 # matches www3.example.com
-                        #     and www-test.example.com
-                        #     and www.example.com
-
-=cut
-
-Set(@ReferrerWhitelist, qw());
-
-=back
-
-
-
-=head1 Authorization and user configuration
-
-=over 4
-
-=item C<$WebExternalAuth>
-
-If C<$WebExternalAuth> is defined, RT will defer to the environment's
-REMOTE_USER variable.
-
-=cut
-
-Set($WebExternalAuth, undef);
-
-=item C<$WebExternalAuthContinuous>
-
-If C<$WebExternalAuthContinuous> is defined, RT will check for the
-REMOTE_USER on each access.  If you would prefer this to only happen
-once (at initial login) set this to a false value.  The default
-setting will help ensure that if your external authentication system
-deauthenticates a user, RT notices as soon as possible.
-
-=cut
-
-Set($WebExternalAuthContinuous, 1);
-
-=item C<$WebFallbackToInternalAuth>
-
-If C<$WebFallbackToInternalAuth> is defined, the user is allowed a
-chance of fallback to the login screen, even if REMOTE_USER failed.
-
-=cut
-
-Set($WebFallbackToInternalAuth, undef);
-
-=item C<$WebExternalGecos>
-
-C<$WebExternalGecos> means to match 'gecos' field as the user
-identity); useful with mod_auth_pwcheck and IIS Integrated Windows
-logon.
-
-=cut
-
-Set($WebExternalGecos, undef);
-
-=item C<$WebExternalAuto>
-
-C<$WebExternalAuto> will create users under the same name as
-REMOTE_USER upon login, if it's missing in the Users table.
-
-=cut
-
-Set($WebExternalAuto, undef);
-
-=item C<$AutoCreate>
-
-If C<$WebExternalAuto> is set to 1, C<$AutoCreate> will be passed to
-User's Create method.  Use it to set defaults, such as creating
-Unprivileged users with C<{ Privileged => 0 }> This must be a hashref.
-
-=cut
-
-Set($AutoCreate, undef);
-
-=item C<$WebSessionClass>
-
-C<$WebSessionClass> is the class you wish to use for managing sessions.
-It defaults to use your SQL database, except on Oracle, where it
-defaults to files on disk.
-
-=cut
-
-# Set($WebSessionClass, "Apache::Session::File");
-
-=item C<$AutoLogoff>
-
-By default, RT's user sessions persist until a user closes his or her
-browser. With the C<$AutoLogoff> option you can setup session lifetime
-in minutes. A user will be logged out if he or she doesn't send any
-requests to RT for the defined time.
-
-=cut
-
-Set($AutoLogoff, 0);
-
-=item C<$LogoutRefresh>
-
-The number of seconds to wait after logout before sending the user to
-the login page. By default, 1 second, though you may want to increase
-this if you display additional information on the logout page.
-
-=cut
-
-Set($LogoutRefresh, 1);
-
-=item C<$WebSecureCookies>
-
-By default, RT's session cookie isn't marked as "secure". Some web
-browsers will treat secure cookies more carefully than non-secure
-ones, being careful not to write them to disk, only sending them over
-an SSL secured connection, and so on. To enable this behavior, set
-C<$WebSecureCookies> to 1.  NOTE: You probably don't want to turn this
-on I users are only connecting via SSL encrypted HTTPS
-connections.
-
-=cut
-
-Set($WebSecureCookies, 0);
-
-=item C<$WebHttpOnlyCookies>
-
-Default RT's session cookie to not being directly accessible to
-javascript.  The content is still sent during regular and AJAX requests,
-and other cookies are unaffected, but the session-id is less
-programmatically accessible to javascript.  Turning this off should only
-be necessary in situations with odd client-side authentication
-requirements.
-
-=cut
-
-Set($WebHttpOnlyCookies, 1);
-
-=item C<$MinimumPasswordLength>
-
-C<$MinimumPasswordLength> defines the minimum length for user
-passwords. Setting it to 0 disables this check.
-
-=cut
-
-Set($MinimumPasswordLength, 5);
-
-=back
-
-
-=head1 Internationalization
-
-=over 4
-
-=item C<@LexiconLanguages>
-
-An array that contains languages supported by RT's
-internationalization interface.  Defaults to all *.po lexicons;
-setting it to C will make RT bilingual instead of
-multilingual, but will save some memory.
-
-=cut
-
-Set(@LexiconLanguages, qw(*));
-
-=item C<@EmailInputEncodings>
-
-An array that contains default encodings used to guess which charset
-an attachment uses, if it does not specify one explicitly.  All
-options must be recognized by L.  The first element may
-also be '*', which enables encoding detection using
-L, if installed.
-
-=cut
-
-Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
-
-=item C<$EmailOutputEncoding>
-
-The charset for localized email.  Must be recognized by Encode.
-
-=cut
-
-Set($EmailOutputEncoding, "utf-8");
-
-=back
-
-
-
-
-
-
-
-=head1 Date and time handling
-
-=over 4
-
-=item C<$DateTimeFormat>
-
-You can choose date and time format.  See the "Output formatters"
-section in perldoc F for more options.  This option
-can be overridden by users in their preferences.
-
-Some examples:
-
-C
-C "ISO", Seconds => 0 });>
-C
-C "RFC2822", Seconds => 0, DayOfWeek => 0 });>
-
-=cut
-
-Set($DateTimeFormat, "DefaultFormat");
-
-# Next two options are for Time::ParseDate
-
-=item C<$DateDayBeforeMonth>
-
-Set this to 1 if your local date convention looks like "dd/mm/yy"
-instead of "mm/dd/yy". Used only for parsing, not for displaying
-dates.
-
-=cut
-
-Set($DateDayBeforeMonth, 1);
-
-=item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
-
-Should an unspecified day or year in a date refer to a future or a
-past value? For example, should a date of "Tuesday" default to mean
-the date for next Tuesday or last Tuesday? Should the date "March 1"
-default to the date for next March or last March?
-
-Set C<$AmbiguousDayInPast> for the last date, or
-C<$AmbiguousDayInFuture> for the next date; the default is usually
-correct.  If both are set, C<$AmbiguousDayInPast> takes precedence.
-
-=cut
-
-Set($AmbiguousDayInPast, 0);
-Set($AmbiguousDayInFuture, 0);
-
-=item C<$DefaultTimeUnitsToHours>
-
-Use this to set the default units for time entry to hours instead of
-minutes.  Note that this only effects entry, not display.
-
-=cut
-
-Set($DefaultTimeUnitsToHours, 0);
-
-=item C<$SimpleSearchIncludeResolved>
-
-By default, the simple ticket search in the top bar excludes "resolved" tickets
-unless a status argument is specified.  Set this to a true value to include 
-them.
-
-=cut
-
-Set($SimpleSearchIncludeResolved, 0);
-
-=back
-
-
-
-
-=head1 GnuPG integration
-
-A full description of the (somewhat extensive) GnuPG integration can
-be found by running the command `perldoc L` (or
-`perldoc lib/RT/Crypt/GnuPG.pm` from your RT install directory).
-
-=over 4
-
-=item C<%GnuPG>
-
-Set C to 'inline' to use inline encryption and
-signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
-
-If you want to allow people to encrypt attachments inside the DB then
-set C to 1.
-
-Set C to false if you don't want to reject
-emails encrypted for key RT doesn't have and can not decrypt.
-
-Set C to false if you don't want to reject letters
-with incorrect GnuPG data.
-
-=cut
-
-Set(%GnuPG,
-    Enable => 1,
-    OutgoingMessagesFormat => "RFC", # Inline
-    AllowEncryptDataInDB   => 0,
-
-    RejectOnMissingPrivateKey => 1,
-    RejectOnBadData           => 1,
-);
-
-=item C<%GnuPGOptions>
-
-Options to pass to the GnuPG program.
-
-If you override this in your RT_SiteConfig, you should be sure to
-include a homedir setting.
-
-Note that options with '-' character MUST be quoted.
-
-=cut
-
-Set(%GnuPGOptions,
-    homedir => q{/opt/rt3/var/data/gpg},
-
-# URL of a keyserver
-#    keyserver => 'hkp://subkeys.pgp.net',
-
-# enables the automatic retrieving of keys when encrypting
-#    'auto-key-locate' => 'keyserver',
-
-# enables the automatic retrieving of keys when verifying signatures
-#    'keyserver-options' => 'auto-key-retrieve',
-);
-
-=back
-
-
-
-=head1 Lifecycles
-
-=head2 Lifecycle definitions
-
-Each lifecycle is a list of possible statuses split into three logic
-sets: B, B and B. Each status in a
-lifecycle must be unique. (Statuses may not be repeated across sets.)
-Each set may have any number of statuses.
-
-For example:
-
-    default => {
-        initial  => ['new'],
-        active   => ['open', 'stalled'],
-        inactive => ['resolved', 'rejected', 'deleted'],
-        ...
-    },
-
-Status names can be from 1 to 64 ASCII characters.  Statuses are
-localized using RT's standard internationalization and localization
-system.
-
-=over 4
-
-=item initial
-
-You can define multiple B statuses for tickets in a given
-lifecycle.
-
-RT will automatically set its B date when you change a
-ticket's status from an B state to an B or
-B status.
-
-=item active
-
-B tickets are "currently in play" - they're things that are
-being worked on and not yet complete.
-
-=item inactive
-
-B tickets are typically in their "final resting state".
-
-While you're free to implement a workflow that ignores that
-description, typically once a ticket enters an inactive state, it will
-never again enter an active state.
-
-RT will automatically set the B date when a ticket's status
-is changed from an B or B status to an B
-status.
-
-B is still a special status and protected by the
-B right, unless you re-defined rights (read below). If
-you don't want to allow ticket deletion at any time simply don't
-include it in your lifecycle.
-
-=back
-
-Statuses in each set are ordered and listed in the UI in the defined
-order.
-
-Changes between statuses are constrained by transition rules, as
-described below.
-
-=head2 Default values
-
-In some cases a default value is used to display in UI or in API when
-value is not provided. You can configure defaults using the following
-syntax:
-
-    default => {
-        ...
-        defaults => {
-            on_create => 'new',
-            on_resolve => 'resolved',
-            ...
-        },
-    },
-
-The following defaults are used.
-
-=over 4
-
-=item on_create
-
-If you (or your code) doesn't specify a status when creating a ticket,
-RT will use the this status. See also L.
-
-=item on_merge
-
-When tickets are merged, the status of the ticket that was merged
-away is forced to this value.  It should be one of inactive statuses;
-'resolved' or its equivalent is most probably the best candidate.
-
-=item approved
-
-When an approval is accepted, the status of depending tickets will
-be changed to this value.
-
-=item denied
-
-When an approval is denied, the status of depending tickets will
-be changed to this value.
-
-=item reminder_on_open
-
-When a reminder is opened, the status will be changed to this value.
-
-=item reminder_on_resolve
-
-When a reminder is resolved, the status will be changed to this value.
-
-=back
-
-=head2 Transitions between statuses and UI actions
-
-A B is a change of status from A to B. You should define
-all possible transitions in each lifecycle using the following format:
-
-    default => {
-        ...
-        transitions => {
-            ''       => [qw(new open resolved)],
-            new      => [qw(open resolved rejected deleted)],
-            open     => [qw(stalled resolved rejected deleted)],
-            stalled  => [qw(open)],
-            resolved => [qw(open)],
-            rejected => [qw(open)],
-            deleted  => [qw(open)],
-        },
-        ...
-    },
-
-=head3 Statuses available during ticket creation
-
-By default users can create tickets with a status of new,
-open, or resolved, but cannot create tickets with a status of
-rejected, stalled, or deleted. If you want to change the statuses
-available during creation, update the transition from '' (empty
-string), like in the example above.
-
-=head3 Protecting status changes with rights
-
-A transition or group of transitions can be protected by a specific
-right.  Additionally, you can name new right names, which will be added
-to the system to control that transition.  For example, if you wished to
-create a lesser right than ModifyTicket for rejecting tickets, you could
-write:
-
-    default => {
-        ...
-        rights => {
-            '* -> deleted'  => 'DeleteTicket',
-            '* -> rejected' => 'RejectTicket',
-            '* -> *'        => 'ModifyTicket',
-        },
-        ...
-    },
-
-This would create a new C right in the system which you
-could assign to whatever groups you choose.
-
-On the left hand side you can have the following variants:
-
-    ' -> '
-    '* -> '
-    ' -> *'
-    '* -> *'
-
-Valid transitions are listed in order of priority. If a user attempts
-to change a ticket's status from B to B then the lifecycle
-is checked for presence of an exact match, then for 'any to B',
-'B to any' and finally 'any to any'.
-
-If you don't define any rights, or there is no match for a transition,
-RT will use the B or B as appropriate.
-
-=head3 Labeling and defining actions
-
-For each transition you can define an action that will be shown in the
-UI; each action annotated with a label and an update type.
-
-Each action may provide a default update type, which can be
-B, B, or absent. For example, you may want your
-staff to write a reply to the end user when they change status from
-B to B, and thus set the update to B.  Neither
-B nor B are mandatory, and user may leave the
-message empty, regardless of the update type.
-
-This configuration can be used to accomplish what
-$ResolveDefaultUpdateType was used for in RT 3.8.
-
-Use the following format to define labels and actions of transitions:
-
-    default => {
-        ...
-        actions => [
-            'new -> open'     => { label => 'Open it', update => 'Respond' },
-            'new -> resolved' => { label => 'Resolve', update => 'Comment' },
-            'new -> rejected' => { label => 'Reject',  update => 'Respond' },
-            'new -> deleted'  => { label => 'Delete' },
-
-            'open -> stalled'  => { label => 'Stall',   update => 'Comment' },
-            'open -> resolved' => { label => 'Resolve', update => 'Comment' },
-            'open -> rejected' => { label => 'Reject',  update => 'Respond' },
-
-            'stalled -> open'  => { label => 'Open it' },
-            'resolved -> open' => { label => 'Re-open', update => 'Comment' },
-            'rejected -> open' => { label => 'Re-open', update => 'Comment' },
-            'deleted -> open'  => { label => 'Undelete' },
-        ],
-        ...
-    },
-
-In addition, you may define multiple actions for the same transition.
-Alternately, you may use '* -> x' to match more than one transition.
-For example:
-
-    default => {
-        ...
-        actions => [
-            ...
-            'new -> rejected' => { label => 'Reject', update => 'Respond' },
-            'new -> rejected' => { label => 'Quick Reject' },
-            ...
-            '* -> deleted' => { label => 'Delete' },
-            ...
-        ],
-        ...
-    },
-
-=head2 Moving tickets between queues with different lifecycles
-
-Unless there is an explicit mapping between statuses in two different
-lifecycles, you can not move tickets between queues with these
-lifecycles.  This is true even if the different lifecycles use the exact
-same set of statuses.  Such a mapping is defined as follows:
-
-    __maps__ => {
-        'from lifecycle -> to lifecycle' => {
-            'status in left lifecycle' => 'status in right lifecycle',
-            ...
-        },
-        ...
-    },
-
-=cut
-
-Set(%Lifecycles,
-    default => {
-        initial         => [ 'new' ],
-        active          => [ 'open', 'stalled' ],
-        inactive        => [ 'resolved', 'rejected', 'deleted' ],
-
-        defaults => {
-            on_create => 'new',
-            on_merge  => 'resolved',
-            approved  => 'open',
-            denied    => 'rejected',
-            reminder_on_open     => 'open',
-            reminder_on_resolve  => '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',
-            '* -> *'        => '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
-            },
-        ],
-    },
-# 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',
-            reminder_on_open     => 'open',
-            reminder_on_resolve  => '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
-            },
-        ],
-    },
-);
-
-
-
-
-
-=head1 Administrative interface
-
-=over 4
-
-=item C<$ShowRTPortal>
-
-RT can show administrators a feed of recent RT releases and other
-related announcements and information from Best Practical on the top
-level Configuration page.  This feature helps you stay up to date on
-RT security announcements and version updates.
-
-RT provides this feature using an "iframe" on C
-which asks the administrator's browser to show an inline page from
-Best Practical's website.
-
-If you'd rather not make this feature available to your
-administrators, set C<$ShowRTPortal> to a false value.
-
-=cut
-
-Set($ShowRTPortal, 1);
-
-=item C<%AdminSearchResultFormat>
-
-In the admin interface, format strings similar to tickets result
-formats are used. Use C<%AdminSearchResultFormat> to define the format
-strings used in the admin interface on a per-RT-class basis.
-
-=cut
-
-Set(%AdminSearchResultFormat,
-    Queues =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,__Description__,__Address__,__Priority__,__DefaultDueIn__,__Disabled__,__Lifecycle__},
-
-    Groups =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,'__Description__'},
-
-    Users =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,__RealName__, __EmailAddress__},
-
-    CustomFields =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,__AppliedTo__, __FriendlyType__, __FriendlyPattern__},
-
-    Scrips =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Description__/TITLE:Description'}
-        .q{,__Stage__, __Condition__, __Action__, __Template__},
-
-    GlobalScrips =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Description__/TITLE:Description'}
-        .q{,__Stage__, __Condition__, __Action__, __Template__},
-
-    Templates =>
-        q{'__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,'__Description__'},
-    Classes =>
-        q{ '__id__/TITLE:#'}
-        .q{,'__Name__/TITLE:Name'}
-        .q{,__Description__},
-);
-
-=back
-
-
-
-
-=head1 Development options
-
-=over 4
-
-=item C<$DevelMode>
-
-RT comes with a "Development mode" setting.  This setting, as a
-convenience for developers, turns on several of development options
-that you most likely don't want in production:
-
-=over 4
-
-=item *
-
-Disables CSS and JS minification and concatenation.  Both CSS and JS
-will be instead be served as a number of individual smaller files,
-unchanged from how they are stored on disk.
-
-=item *
-
-Uses L to reload changed Perl modules on each
-request.
-
-=item *
-
-Turns off Mason's C directive; this causes Mason to
-reload template files which have been modified on disk.
-
-=item *
-
-Turns on Mason's HTML C; this renders compilation errors
-to the browser, along with a full stack trace.  It is possible for
-stack traces to reveal sensitive information such as passwords or
-ticket content.
-
-=item *
-
-Turns off caching of callbacks; this enables additional callbacks to
-be added while the server is running.
-
-=back
-
-=cut
-
-Set($DevelMode, "0");
-
-
-=item C<$RecordBaseClass>
-
-What abstract base class should RT use for its records. You should
-probably never change this.
-
-Valid values are C or
-C
-
-=cut
-
-Set($RecordBaseClass, "DBIx::SearchBuilder::Record::Cachable");
-
-
-=item C<@MasonParameters>
-
-C<@MasonParameters> is the list of parameters for the constructor of
-HTML::Mason's Apache or CGI Handler.  This is normally only useful for
-debugging, e.g. profiling individual components with:
-
-    use MasonX::Profiler; # available on CPAN
-    Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
-
-=cut
-
-Set(@MasonParameters, ());
-
-=item C<$StatementLog>
-
-RT has rudimentary SQL statement logging support; simply set
-C<$StatementLog> to be the level that you wish SQL statements to be
-logged at.
-
-Enabling this option will also expose the SQL Queries page in the
-Configuration -> Tools menu for SuperUsers.
-
-=cut
-
-Set($StatementLog, undef);
-
-=back
-
-
-
-
-=head1 Deprecated options
-
-=over 4
-
-=item C<$LinkTransactionsRun1Scrip>
-
-RT-3.4 backward compatibility setting. Add/Delete Link used to record
-one transaction and run one scrip. Set this value to 1 if you want
-only one of the link transactions to have scrips run.
-
-=cut
-
-Set($LinkTransactionsRun1Scrip, 0);
-
-=item C<$ResolveDefaultUpdateType>
-
-This option has been deprecated.  You can configure this site-wide
-with L (see L).
-
-=back
-
-=cut
-
-1;
diff --git a/rt/lib/.RT.pm.swp b/rt/lib/.RT.pm.swp
deleted file mode 100644
index 55a25798e54ef268d7feddf103dcda630a842542..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20480
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
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-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 warnings;
-
-package RT;
-
-
-use File::Spec ();
-use Cwd ();
-
-use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_Privileged $_Unprivileged $_INSTALL_MODE);
-
-use vars qw($BasePath
- $EtcPath
- $BinPath
- $SbinPath
- $VarPath
- $LexiconPath
- $PluginPath
- $LocalPath
- $LocalEtcPath
- $LocalLibPath
- $LocalLexiconPath
- $LocalPluginPath
- $MasonComponentRoot
- $MasonLocalComponentRoot
- $MasonDataDir
- $MasonSessionDir);
-
-
-RT->LoadGeneratedData();
-
-=head1 NAME
-
-RT - Request Tracker
-
-=head1 SYNOPSIS
-
-A fully featured request tracker package.
-
-This documentation describes the point-of-entry for RT's Perl API.  To learn
-more about what RT is and what it can do for you, visit
-L.
-
-=head1 DESCRIPTION
-
-=head2 INITIALIZATION
-
-If you're using RT's Perl libraries, you need to initialize RT before using any
-of the modules.
-
-You have the option of handling the timing of config loading and the actual
-init sequence yourself with:
-
-    use RT;
-    BEGIN {
-        RT->LoadConfig;
-        RT->Init;
-    }
-
-or you can let RT do it all:
-
-    use RT -init;
-
-This second method is particular useful when writing one-liners to interact with RT:
-
-    perl -MRT=-init -e '...'
-
-The first method is necessary if you need to delay or conditionalize
-initialization or if you want to fiddle with C<< RT->Config >> between loading
-the config files and initializing the RT environment.
-
-=cut
-
-{
-    my $DID_IMPORT_INIT;
-    sub import {
-        my $class  = shift;
-        my $action = shift || '';
-
-        if ($action eq "-init" and not $DID_IMPORT_INIT) {
-            $class->LoadConfig;
-            $class->Init;
-            $DID_IMPORT_INIT = 1;
-        }
-    }
-}
-
-=head2 LoadConfig
-
-Load RT's config file.  First, the site configuration file
-(F) is loaded, in order to establish overall site
-settings like hostname and name of RT instance.  Then, the core
-configuration file (F) is loaded to set fallback values
-for all settings; it bases some values on settings from the site
-configuration file.
-
-In order for the core configuration to not override the site's
-settings, the function C is used; it only sets values if they
-have not been set already.
-
-=cut
-
-sub LoadConfig {
-    require RT::Config;
-    $Config = RT::Config->new;
-    $Config->LoadConfigs;
-    require RT::I18N;
-
-    # RT::Essentials mistakenly recommends that WebPath be set to '/'.
-    # If the user does that, do what they mean.
-    $RT::WebPath = '' if ($RT::WebPath eq '/');
-
-    # fix relative LogDir and GnuPG homedir
-    unless ( File::Spec->file_name_is_absolute( $Config->Get('LogDir') ) ) {
-        $Config->Set( LogDir =>
-              File::Spec->catfile( $BasePath, $Config->Get('LogDir') ) );
-    }
-
-    my $gpgopts = $Config->Get('GnuPGOptions');
-    unless ( File::Spec->file_name_is_absolute( $gpgopts->{homedir} ) ) {
-        $gpgopts->{homedir} = File::Spec->catfile( $BasePath, $gpgopts->{homedir} );
-    }
-
-    return $Config;
-}
-
-=head2 Init
-
-L, L, L, L, and L.
-
-=cut
-
-sub Init {
-    shift if @_%2; # code is inconsistent about calling as method
-    my %args = (@_);
-
-    CheckPerlRequirements();
-
-    InitPluginPaths();
-
-    #Get a database connection
-    ConnectToDatabase();
-    InitSystemObjects();
-    InitClasses(%args);
-    InitLogging(%args);
-    InitPlugins();
-    RT::I18N->Init;
-    RT->Config->PostLoadCheck;
-
-}
-
-=head2 ConnectToDatabase
-
-Get a database connection. See also L.
-
-=cut
-
-sub ConnectToDatabase {
-    require RT::Handle;
-    $Handle = RT::Handle->new unless $Handle;
-    $Handle->Connect;
-    return $Handle;
-}
-
-=head2 InitLogging
-
-Create the Logger object and set up signal handlers.
-
-=cut
-
-sub InitLogging {
-
-    my %arg = @_;
-
-    # We have to set the record separator ($, man perlvar)
-    # or Log::Dispatch starts getting
-    # really pissy, as some other module we use unsets it.
-    $, = '';
-    use Log::Dispatch 1.6;
-
-    my %level_to_num = (
-        map( { $_ => } 0..7 ),
-        debug     => 0,
-        info      => 1,
-        notice    => 2,
-        warning   => 3,
-        error     => 4, 'err' => 4,
-        critical  => 5, crit  => 5,
-        alert     => 6,
-        emergency => 7, emerg => 7,
-    );
-
-    unless ( $RT::Logger ) {
-
-        $RT::Logger = Log::Dispatch->new;
-
-        my $stack_from_level;
-        if ( $stack_from_level = RT->Config->Get('LogStackTraces') ) {
-            # if option has old style '\d'(true) value
-            $stack_from_level = 0 if $stack_from_level =~ /^\d+$/;
-            $stack_from_level = $level_to_num{ $stack_from_level } || 0;
-        } else {
-            $stack_from_level = 99; # don't log
-        }
-
-        my $simple_cb = sub {
-            # if this code throw any warning we can get segfault
-            no warnings;
-            my %p = @_;
-
-            # skip Log::* stack frames
-            my $frame = 0;
-            $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
-            my ($package, $filename, $line) = caller($frame);
-
-            $p{'message'} =~ s/(?:\r*\n)+$//;
-            return "[$$] [". gmtime(time) ."] [". $p{'level'} ."]: "
-                . $p{'message'} ." ($filename:$line)\n";
-        };
-
-        my $syslog_cb = sub {
-            # if this code throw any warning we can get segfault
-            no warnings;
-            my %p = @_;
-
-            my $frame = 0; # stack frame index
-            # skip Log::* stack frames
-            $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
-            my ($package, $filename, $line) = caller($frame);
-
-            # syswrite() cannot take utf8; turn it off here.
-            Encode::_utf8_off($p{message});
-
-            $p{message} =~ s/(?:\r*\n)+$//;
-            if ($p{level} eq 'debug') {
-                return "[$$] $p{message} ($filename:$line)\n";
-            } else {
-                return "[$$] $p{message}\n";
-            }
-        };
-
-        my $stack_cb = sub {
-            no warnings;
-            my %p = @_;
-            return $p{'message'} unless $level_to_num{ $p{'level'} } >= $stack_from_level;
-
-            require Devel::StackTrace;
-            my $trace = Devel::StackTrace->new( ignore_class => [ 'Log::Dispatch', 'Log::Dispatch::Base' ] );
-            return $p{'message'} . $trace->as_string;
-
-            # skip calling of the Log::* subroutins
-            my $frame = 0;
-            $frame++ while caller($frame) && caller($frame) =~ /^Log::/;
-            $frame++ while caller($frame) && (caller($frame))[3] =~ /^Log::/;
-
-            $p{'message'} .= "\nStack trace:\n";
-            while( my ($package, $filename, $line, $sub) = caller($frame++) ) {
-                $p{'message'} .= "\t$sub(...) called at $filename:$line\n";
-            }
-            return $p{'message'};
-        };
-
-        if ( $Config->Get('LogToFile') ) {
-            my ($filename, $logdir) = (
-                $Config->Get('LogToFileNamed') || 'rt.log',
-                $Config->Get('LogDir') || File::Spec->catdir( $VarPath, 'log' ),
-            );
-            if ( $filename =~ m![/\\]! ) { # looks like an absolute path.
-                ($logdir) = $filename =~ m{^(.*[/\\])};
-            }
-            else {
-                $filename = File::Spec->catfile( $logdir, $filename );
-            }
-
-            unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
-                # localizing here would be hard when we don't have a current user yet
-                die "Log file '$filename' couldn't be written or created.\n RT can't run.";
-            }
-
-            require Log::Dispatch::File;
-            $RT::Logger->add( Log::Dispatch::File->new
-                           ( name=>'file',
-                             min_level=> $Config->Get('LogToFile'),
-                             filename=> $filename,
-                             mode=>'append',
-                             callbacks => [ $simple_cb, $stack_cb ],
-                           ));
-        }
-        if ( $Config->Get('LogToScreen') ) {
-            require Log::Dispatch::Screen;
-            $RT::Logger->add( Log::Dispatch::Screen->new
-                         ( name => 'screen',
-                           min_level => $Config->Get('LogToScreen'),
-                           callbacks => [ $simple_cb, $stack_cb ],
-                           stderr => 1,
-                         ));
-        }
-        if ( $Config->Get('LogToSyslog') ) {
-            require Log::Dispatch::Syslog;
-            $RT::Logger->add(Log::Dispatch::Syslog->new
-                         ( name => 'syslog',
-                           ident => 'RT',
-                           min_level => $Config->Get('LogToSyslog'),
-                           callbacks => [ $syslog_cb, $stack_cb ],
-                           stderr => 1,
-                           $Config->Get('LogToSyslogConf'),
-                         ));
-        }
-    }
-    InitSignalHandlers(%arg);
-}
-
-{   # Work around bug in Log::Dispatch < 2.30, wherein the short forms
-    # of ->warn, ->err, and ->crit do not usefully propagate out, unlike
-    # ->warning, ->error, and ->critical
-    package Log::Dispatch;
-    no warnings 'redefine';
-    sub warn { shift->warning(@_) }
-    sub err  { shift->error(@_) }
-    sub crit { shift->critical(@_) }
-}
-
-sub InitSignalHandlers {
-
-    my %arg = @_;
-    return if $arg{'NoSignalHandlers'};
-
-# Signal handlers
-## This is the default handling of warnings and die'ings in the code
-## (including other used modules - maybe except for errors catched by
-## Mason).  It will log all problems through the standard logging
-## mechanism (see above).
-
-    $SIG{__WARN__} = sub {
-        # 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.
-        # use 'goto &foo' syntax to hide ANON sub from stack
-        if( index($_[0], 'Wide character in ') != 0 ) {
-            unshift @_, $RT::Logger, qw(level warning message);
-            goto &Log::Dispatch::log;
-        }
-        # Return value is used only by RT::Test to filter warnings from
-        # reaching the Test::NoWarnings catcher.  If Log::Dispatch::log() ever
-        # starts returning 'IGNORE', we'll need to switch to something more
-        # clever.  I don't expect that to happen.
-        return 'IGNORE';
-    };
-
-#When we call die, trap it and log->crit with the value of the die.
-
-    $SIG{__DIE__}  = sub {
-        # if we are not in eval and perl is not parsing code
-        # then rollback transactions and log RT error
-        unless ($^S || !defined $^S ) {
-            $RT::Handle->Rollback(1) if $RT::Handle;
-            $RT::Logger->crit("$_[0]") if $RT::Logger;
-        }
-        die $_[0];
-    };
-}
-
-
-sub CheckPerlRequirements {
-    if ($^V < 5.008003) {
-        die sprintf "RT requires Perl v5.8.3 or newer.  Your current Perl is v%vd\n", $^V;
-    }
-
-    # use $error here so the following "die" can still affect the global $@
-    my $error;
-    {
-        local $@;
-        eval {
-            my $x = '';
-            my $y = \$x;
-            require Scalar::Util;
-            Scalar::Util::weaken($y);
-        };
-        $error = $@;
-    }
-
-    if ($error) {
-        die <<"EOF";
-
-RT requires the Scalar::Util module be built with support for  the 'weaken'
-function.
-
-It is sometimes the case that operating system upgrades will replace
-a working Scalar::Util with a non-working one. If your system was working
-correctly up until now, this is likely the cause of the problem.
-
-Please reinstall Scalar::Util, being careful to let it build with your C
-compiler. Usually this is as simple as running the following command as
-root.
-
-    perl -MCPAN -e'install Scalar::Util'
-
-EOF
-
-    }
-}
-
-=head2 InitClasses
-
-Load all modules that define base classes.
-
-=cut
-
-sub InitClasses {
-    shift if @_%2; # so we can call it as a function or method
-    my %args = (@_);
-    require RT::Tickets;
-    require RT::Transactions;
-    require RT::Attachments;
-    require RT::Users;
-    require RT::Principals;
-    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;
-    require RT::Attributes;
-    require RT::Dashboard;
-    require RT::Approval;
-    require RT::Lifecycle;
-    require RT::Link;
-    require RT::Links;
-    require RT::Article;
-    require RT::Articles;
-    require RT::Class;
-    require RT::Classes;
-    require RT::ObjectClass;
-    require RT::ObjectClasses;
-    require RT::ObjectTopic;
-    require RT::ObjectTopics;
-    require RT::Topic;
-    require RT::Topics;
-
-    # on a cold server (just after restart) people could have an object
-    # in the session, as we deserialize it so we never call constructor
-    # of the class, so the list of accessible fields is empty and we die
-    # with "Method xxx is not implemented in RT::SomeClass"
-
-    # without this, we also can never call _ClassAccessible, because we
-    # won't have filled RT::Record::_TABLE_ATTR
-    $_->_BuildTableAttributes foreach qw(
-        RT::Ticket
-        RT::Transaction
-        RT::Attachment
-        RT::User
-        RT::Principal
-        RT::Template
-        RT::Queue
-        RT::ScripAction
-        RT::ScripCondition
-        RT::Scrip
-        RT::Group
-        RT::GroupMember
-        RT::CustomField
-        RT::CustomFieldValue
-        RT::ObjectCustomField
-        RT::ObjectCustomFieldValue
-        RT::Attribute
-        RT::ACE
-        RT::Link
-        RT::Article
-        RT::Class
-        RT::ObjectClass
-        RT::ObjectTopic
-        RT::Topic
-    );
-
-    if ( $args{'Heavy'} ) {
-        # load scrips' modules
-        my $scrips = RT::Scrips->new(RT->SystemUser);
-        $scrips->Limit( FIELD => 'Stage', OPERATOR => '!=', VALUE => 'Disabled' );
-        while ( my $scrip = $scrips->Next ) {
-            local $@;
-            eval { $scrip->LoadModules } or
-                $RT::Logger->error("Invalid Scrip ".$scrip->Id.".  Unable to load the Action or Condition.  ".
-                                   "You should delete or repair this Scrip in the admin UI.\n$@\n");
-        }
-
-	foreach my $class ( grep $_, RT->Config->Get('CustomFieldValuesSources') ) {
-            local $@;
-            eval "require $class; 1" or $RT::Logger->error(
-                "Class '$class' is listed in CustomFieldValuesSources option"
-                ." in the config, but we failed to load it:\n$@\n"
-            );
-        }
-
-    }
-}
-
-=head2 InitSystemObjects
-
-Initializes system objects: C<$RT::System>, C<< RT->SystemUser >>
-and C<< RT->Nobody >>.
-
-=cut
-
-sub InitSystemObjects {
-
-    #RT's system user is a genuine database user. its id lives here
-    require RT::CurrentUser;
-    $SystemUser = RT::CurrentUser->new;
-    $SystemUser->LoadByName('RT_System');
-
-    #RT's "nobody user" is a genuine database user. its ID lives here.
-    $Nobody = RT::CurrentUser->new;
-    $Nobody->LoadByName('Nobody');
-
-    require RT::System;
-    $System = RT::System->new( $SystemUser );
-}
-
-=head1 CLASS METHODS
-
-=head2 Config
-
-Returns the current L, but note that
-you must L first otherwise this method
-returns undef.
-
-Method can be called as class method.
-
-=cut
-
-sub Config { return $Config || shift->LoadConfig(); }
-
-=head2 DatabaseHandle
-
-Returns the current L.
-
-See also L.
-
-=cut
-
-sub DatabaseHandle { return $Handle }
-
-=head2 Logger
-
-Returns the logger. See also L.
-
-=cut
-
-sub Logger { return $Logger }
-
-=head2 System
-
-Returns the current L. See also
-L.
-
-=cut
-
-sub System { return $System }
-
-=head2 SystemUser
-
-Returns the system user's object, it's object of
-L class that represents the system. See also
-L.
-
-=cut
-
-sub SystemUser { return $SystemUser }
-
-=head2 Nobody
-
-Returns object of Nobody. It's object of L class
-that represents a user who can own ticket and nothing else. See
-also L.
-
-=cut
-
-sub Nobody { return $Nobody }
-
-sub PrivilegedUsers {
-    if (!$_Privileged) {
-    $_Privileged = RT::Group->new(RT->SystemUser);
-    $_Privileged->LoadSystemInternalGroup('Privileged');
-    }
-    return $_Privileged;
-}
-
-sub UnprivilegedUsers {
-    if (!$_Unprivileged) {
-    $_Unprivileged = RT::Group->new(RT->SystemUser);
-    $_Unprivileged->LoadSystemInternalGroup('Unprivileged');
-    }
-    return $_Unprivileged;
-}
-
-
-=head2 Plugins
-
-Returns a listref of all Plugins currently configured for this RT instance.
-You can define plugins by adding them to the @Plugins list in your RT_SiteConfig
-
-=cut
-
-our @PLUGINS = ();
-sub Plugins {
-    my $self = shift;
-    unless (@PLUGINS) {
-        $self->InitPluginPaths;
-        @PLUGINS = $self->InitPlugins;
-    }
-    return \@PLUGINS;
-}
-
-=head2 PluginDirs
-
-Takes an optional subdir (e.g. po, lib, etc.) and returns a list of
-directories from plugins where that subdirectory exists.
-
-This code does not check plugin names, plugin validitity, or load
-plugins (see L) in any way, and requires that RT's
-configuration have been already loaded.
-
-=cut
-
-sub PluginDirs {
-    my $self = shift;
-    my $subdir = shift;
-
-    require RT::Plugin;
-
-    my @res;
-    foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
-        my $path = RT::Plugin->new( name => $plugin )->Path( $subdir );
-        next unless -d $path;
-        push @res, $path;
-    }
-    return @res;
-}
-
-=head2 InitPluginPaths
-
-Push plugins' lib paths into @INC right after F.
-In case F isn't in @INC, append them to @INC
-
-=cut
-
-sub InitPluginPaths {
-    my $self = shift || __PACKAGE__;
-
-    my @lib_dirs = $self->PluginDirs('lib');
-
-    my @tmp_inc;
-    my $added;
-    for (@INC) {
-        my $realpath = Cwd::realpath($_);
-        next unless defined $realpath;
-        if ( $realpath eq $RT::LocalLibPath) {
-            push @tmp_inc, $_, @lib_dirs;
-            $added = 1;
-        } else {
-            push @tmp_inc, $_;
-        }
-    }
-
-    # append @lib_dirs in case $RT::LocalLibPath isn't in @INC
-    push @tmp_inc, @lib_dirs unless $added;
-
-    my %seen;
-    @INC = grep !$seen{$_}++, @tmp_inc;
-}
-
-=head2 InitPlugins
-
-Initialize all Plugins found in the RT configuration file, setting up
-their lib and L component roots.
-
-=cut
-
-sub InitPlugins {
-    my $self    = shift;
-    my @plugins;
-    require RT::Plugin;
-    foreach my $plugin (grep $_, RT->Config->Get('Plugins')) {
-        $plugin->require;
-        die $UNIVERSAL::require::ERROR if ($UNIVERSAL::require::ERROR);
-        push @plugins, RT::Plugin->new(name =>$plugin);
-    }
-    return @plugins;
-}
-
-
-sub InstallMode {
-    my $self = shift;
-    if (@_) {
-        my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity;
-        if ($_[0] and $integrity) {
-            # Trying to turn install mode on but we have a good DB!
-            require Carp;
-            $RT::Logger->error(
-                Carp::longmess("Something tried to turn on InstallMode but we have DB integrity!")
-            );
-        }
-        else {
-            $_INSTALL_MODE = shift;
-            if($_INSTALL_MODE) {
-                require RT::CurrentUser;
-               $SystemUser = RT::CurrentUser->new();
-            }
-        }
-    }
-    return $_INSTALL_MODE;
-}
-
-sub LoadGeneratedData {
-    my $class = shift;
-    my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1];
-
-    require "$pm_path/RT/Generated.pm" || die "Couldn't load RT::Generated: $@";
-    $class->CanonicalizeGeneratedPaths();
-}
-
-sub CanonicalizeGeneratedPaths {
-    my $class = shift;
-    unless ( File::Spec->file_name_is_absolute($EtcPath) ) {
-
-   # if BasePath exists and is absolute, we won't infer it from $INC{'RT.pm'}.
-   # otherwise RT.pm will make the source dir(where we configure RT) be the
-   # BasePath instead of the one specified by --prefix
-        unless ( -d $BasePath
-                 && File::Spec->file_name_is_absolute($BasePath) )
-        {
-            my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1];
-
-     # need rel2abs here is to make sure path is absolute, since $INC{'RT.pm'}
-     # is not always absolute
-            $BasePath = File::Spec->rel2abs(
-                          File::Spec->catdir( $pm_path, File::Spec->updir ) );
-        }
-
-        $BasePath = Cwd::realpath($BasePath);
-
-        for my $path (
-                    qw/EtcPath BinPath SbinPath VarPath LocalPath LocalEtcPath
-                    LocalLibPath LexiconPath LocalLexiconPath PluginPath
-                    LocalPluginPath MasonComponentRoot MasonLocalComponentRoot
-                    MasonDataDir MasonSessionDir/
-                     )
-        {
-            no strict 'refs';
-
-            # just change relative ones
-            $$path = File::Spec->catfile( $BasePath, $$path )
-                unless File::Spec->file_name_is_absolute($$path);
-        }
-    }
-
-}
-
-=head2 AddJavaScript
-
-helper method to add js files to C config.
-to add extra js files, you can add the following line
-in the plugin's main file:
-
-    RT->AddJavaScript( 'foo.js', 'bar.js' ); 
-
-=cut
-
-sub AddJavaScript {
-    my $self = shift;
-
-    my @old = RT->Config->Get('JSFiles');
-    RT->Config->Set( 'JSFiles', @old, @_ );
-    return RT->Config->Get('JSFiles');
-}
-
-=head2 AddStyleSheets
-
-helper method to add css files to C config
-
-to add extra css files, you can add the following line
-in the plugin's main file:
-
-    RT->AddStyleSheets( 'foo.css', 'bar.css' ); 
-
-=cut
-
-sub AddStyleSheets {
-    my $self = shift;
-    my @old = RT->Config->Get('CSSFiles');
-    RT->Config->Set( 'CSSFiles', @old, @_ );
-    return RT->Config->Get('CSSFiles');
-}
-
-=head2 JavaScript
-
-helper method of RT->Config->Get('JSFiles')
-
-=cut
-
-sub JavaScript {
-    return RT->Config->Get('JSFiles');
-}
-
-=head2 StyleSheets
-
-helper method of RT->Config->Get('CSSFiles')
-
-=cut
-
-sub StyleSheets {
-    return RT->Config->Get('CSSFiles');
-}
-
-=head1 BUGS
-
-Please report them to rt-bugs@bestpractical.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.bestpractical.com.
-
-=head1 SEE ALSO
-
-L
-L
-
-=cut
-
-require RT::Base;
-RT::Base->_ImportOverlays();
-
-1;
diff --git a/rt/lib/RT/.Handle.pm.swp b/rt/lib/RT/.Handle.pm.swp
deleted file mode 100644
index 5ae85734dd7a869523f026be8891ae535a882ea5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 61440
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
TVji!XL!sLE+h%ifdHeqXhrWCG

diff --git a/rt/lib/RT/.Ticket.pm.swp b/rt/lib/RT/.Ticket.pm.swp
deleted file mode 100644
index 7088d1bcf49c441d0415d208db37a4a4374e8903..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16384
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

diff --git a/rt/lib/RT/Config.pm.orig b/rt/lib/RT/Config.pm.orig
deleted file mode 100644
index 62aae1c35..000000000
--- a/rt/lib/RT/Config.pm.orig
+++ /dev/null
@@ -1,1382 +0,0 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-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::Config;
-
-use strict;
-use warnings;
-
-
-use File::Spec ();
-
-=head1 NAME
-
-    RT::Config - RT's config
-
-=head1 SYNOPSYS
-
-    # get config object
-    use RT::Config;
-    my $config = RT::Config->new;
-    $config->LoadConfigs;
-
-    # get or set option
-    my $rt_web_path = $config->Get('WebPath');
-    $config->Set(EmailOutputEncoding => 'latin1');
-
-    # get config object from RT package
-    use RT;
-    RT->LoadConfig;
-    my $config = RT->Config;
-
-=head1 DESCRIPTION
-
-C class provide access to RT's and RT extensions' config files.
-
-RT uses two files for site configuring:
-
-First file is F - core config file. This file is shipped
-with RT distribution and contains default values for all available options.
-B
-
-Second file is F - site config file. You can use it
-to customize your RT instance. In this file you can override any option
-listed in core config file.
-
-RT extensions could also provide thier config files. Extensions should
-use F<< _Config.pm >> and F<< _SiteConfig.pm >> names for
-config files, where  is extension name.
-
-B: All options from RT's config and extensions' configs are saved
-in one place and thus extension could override RT's options, but it is not
-recommended.
-
-=cut
-
-=head2 %META
-
-Hash of Config options that may be user overridable
-or may require more logic than should live in RT_*Config.pm
-
-Keyed by config name, there are several properties that
-can be set for each config optin:
-
- Section     - What header this option should be grouped
-               under on the user Settings page
- Overridable - Can users change this option
- SortOrder   - Within a Section, how should the options be sorted
-               for display to the user
- Widget      - Mason component path to widget that should be used 
-               to display this config option
- WidgetArguments - An argument hash passed to the WIdget
-    Description - Friendly description to show the user
-    Values      - Arrayref of options (for select Widget)
-    ValuesLabel - Hashref, key is the Value from the Values
-                  list, value is a user friendly description
-                  of the value
-    Callback    - subref that receives no arguments.  It returns
-                  a hashref of items that are added to the rest
-                  of the WidgetArguments
- PostLoadCheck - subref passed the RT::Config object and the current
-                 setting of the config option.  Can make further checks
-                 (such as seeing if a library is installed) and then change
-                 the setting of this or other options in the Config using 
-                 the RT::Config option.
-   Obfuscate   - subref passed the RT::Config object, current setting of the config option
-                 and a user object, can return obfuscated value. it's called in
-                 RT->Config->GetObfuscated() 
-
-=cut
-
-our %META = (
-    # General user overridable options
-    DefaultQueue => {
-        Section         => 'General',
-        Overridable     => 1,
-        SortOrder       => 1,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Default queue',    #loc
-            Callback    => sub {
-                my $ret = { Values => [], ValuesLabel => {}};
-                my $q = RT::Queues->new($HTML::Mason::Commands::session{'CurrentUser'});
-                $q->UnLimit;
-                while (my $queue = $q->Next) {
-                    next unless $queue->CurrentUserHasRight("CreateTicket");
-                    push @{$ret->{Values}}, $queue->Id;
-                    $ret->{ValuesLabel}{$queue->Id} = $queue->Name;
-                }
-                return $ret;
-            },
-        }
-    },
-    RememberDefaultQueue => {
-        Section     => 'General',
-        Overridable => 1,
-        SortOrder   => 2,
-        Widget      => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Remember default queue' # loc
-        }
-    },
-    UsernameFormat => {
-        Section         => 'General',
-        Overridable     => 1,
-        SortOrder       => 3,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Username format', # loc
-            Values      => [qw(concise verbose)],
-            ValuesLabel => {
-                concise => 'Short usernames', # loc
-                verbose => 'Name and email address', # loc
-            },
-        },
-    },
-    AutocompleteOwners => {
-        Section     => 'General',
-        Overridable => 1,
-        SortOrder   => 3.1,
-        Widget      => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Use autocomplete to find owners?', # loc
-            Hints       => 'Replaces the owner dropdowns with textboxes' #loc
-        }
-    },
-    WebDefaultStylesheet => {
-        Section         => 'General',                #loc
-        Overridable     => 1,
-        SortOrder       => 4,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Theme',                  #loc
-            # XXX: we need support for 'get values callback'
-            Values => [qw(web2 freeside2.1 freeside3 aileron ballard)],
-        },
-        PostLoadCheck => sub {
-            my $self = shift;
-            my $value = $self->Get('WebDefaultStylesheet');
-
-            my @comp_roots = RT::Interface::Web->ComponentRoots;
-            for my $comp_root (@comp_roots) {
-                return if -d $comp_root.'/NoAuth/css/'.$value;
-            }
-
-            $RT::Logger->warning(
-                "The default stylesheet ($value) does not exist in this instance of RT. "
-              . "Defaulting to freeside3."
-            );
-
-            #$self->Set('WebDefaultStylesheet', 'aileron');
-            $self->Set('WebDefaultStylesheet', 'freeside3');
-        },
-    },
-    UseSideBySideLayout => {
-        Section => 'Ticket composition',
-        Overridable => 1,
-        SortOrder => 5,
-        Widget => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Use a two column layout for create and update forms?' # loc
-        }
-    },
-    MessageBoxRichText => {
-        Section => 'Ticket composition',
-        Overridable => 1,
-        SortOrder => 5.1,
-        Widget => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'WYSIWYG message composer' # loc
-        }
-    },
-    MessageBoxRichTextHeight => {
-        Section => 'Ticket composition',
-        Overridable => 1,
-        SortOrder => 6,
-        Widget => '/Widgets/Form/Integer',
-        WidgetArguments => {
-            Description => 'WYSIWYG composer height', # loc
-        }
-    },
-    MessageBoxWidth => {
-        Section         => 'Ticket composition',
-        Overridable     => 1,
-        SortOrder       => 7,
-        Widget          => '/Widgets/Form/Integer',
-        WidgetArguments => {
-            Description => 'Message box width',           #loc
-        },
-    },
-    MessageBoxHeight => {
-        Section         => 'Ticket composition',
-        Overridable     => 1,
-        SortOrder       => 8,
-        Widget          => '/Widgets/Form/Integer',
-        WidgetArguments => {
-            Description => 'Message box height',          #loc
-        },
-    },
-    MessageBoxWrap => {
-        Section         => 'Ticket composition',                #loc
-        Overridable     => 1,
-        SortOrder       => 8.1,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Message box wrapping',   #loc
-            Values => [qw(SOFT HARD)],
-            Hints => "When the WYSIWYG editor is not enabled, this setting determines whether automatic line wraps in the ticket message box are sent to RT or not.",              # loc
-        },
-    },
-    DefaultTimeUnitsToHours => {
-        Section         => 'Ticket composition', #loc
-        Overridable     => 1,
-        SortOrder       => 9,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Enter time in hours by default', #loc
-            Hints       => 'Only for entry, not display', #loc
-        },
-    },
-    SearchResultsRefreshInterval => {
-        Section         => 'General',                       #loc
-        Overridable     => 1,
-        SortOrder       => 9,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Search results refresh interval',                            #loc
-            Values      => [qw(0 120 300 600 1200 3600 7200)],
-            ValuesLabel => {
-                0 => "Don't refresh search results.",                      #loc
-                120 => "Refresh search results every 2 minutes.",          #loc
-                300 => "Refresh search results every 5 minutes.",          #loc
-                600 => "Refresh search results every 10 minutes.",         #loc
-                1200 => "Refresh search results every 20 minutes.",        #loc
-                3600 => "Refresh search results every 60 minutes.",        #loc
-                7200 => "Refresh search results every 120 minutes.",       #loc
-            },  
-        },  
-    },
-
-    # User overridable options for RT at a glance
-    HomePageRefreshInterval => {
-        Section         => 'RT at a glance',                       #loc
-        Overridable     => 1,
-        SortOrder       => 2,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Home page refresh interval',                #loc
-            Values      => [qw(0 120 300 600 1200 3600 7200)],
-            ValuesLabel => {
-                0 => "Don't refresh home page.",                  #loc
-                120 => "Refresh home page every 2 minutes.",      #loc
-                300 => "Refresh home page every 5 minutes.",      #loc
-                600 => "Refresh home page every 10 minutes.",     #loc
-                1200 => "Refresh home page every 20 minutes.",    #loc
-                3600 => "Refresh home page every 60 minutes.",    #loc
-                7200 => "Refresh home page every 120 minutes.",   #loc
-            },  
-        },  
-    },
-
-    # User overridable options for Ticket displays
-    MaxInlineBody => {
-        Section         => 'Ticket display',              #loc
-        Overridable     => 1,
-        SortOrder       => 1,
-        Widget          => '/Widgets/Form/Integer',
-        WidgetArguments => {
-            Description => 'Maximum inline message length',    #loc
-            Hints =>
-            "Length in characters; Use '0' to show all messages inline, regardless of length" #loc
-        },
-    },
-    OldestTransactionsFirst => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 2,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Show oldest history first',    #loc
-        },
-    },
-    DeferTransactionLoading => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 3,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Hide ticket history by default',    #loc
-        },
-    },
-    ShowUnreadMessageNotifications => { 
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 4,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Notify me of unread messages',    #loc
-        },
-
-    },
-    PlainTextPre => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 5,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'add 
 tag around plain text attachments', #loc
-            Hints       => "Use this to protect the format of plain text" #loc
-        },
-    },
-    PlainTextMono => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 5,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'display wrapped and formatted plain text attachments', #loc
-            Hints => 'Use css rules to display text monospaced and with formatting preserved, but wrap as needed.  This does not work well with IE6 and you should use the previous option', #loc
-        },
-    },
-    DisplayAfterQuickCreate => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 6,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'On Quick Create, redirect to ticket display', #loc
-            #Hints => '', #loc
-        },
-    },
-    MoreAboutRequestorTicketList => {
-        Section         => 'Ticket display',                       #loc
-        Overridable     => 1,
-        SortOrder       => 6,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => q|What tickets to display in the 'More about requestor' box|,                #loc
-            Values      => [qw(Active Inactive All None)],
-            ValuesLabel => {
-                Active   => "Show the Requestor's 10 highest priority active tickets",                  #loc
-                Inactive => "Show the Requestor's 10 highest priority inactive tickets",      #loc
-                All      => "Show the Requestor's 10 highest priority tickets",      #loc
-                None     => "Show no tickets for the Requestor", #loc
-            },
-        },
-    },
-    SimplifiedRecipients => {
-        Section         => 'Ticket display',                       #loc
-        Overridable     => 1,
-        SortOrder       => 7,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => q|Show simplified recipient list on ticket update|,                #loc
-        },
-    },
-    DisplayTicketAfterQuickCreate => {
-        Section         => 'Ticket display',
-        Overridable     => 1,
-        SortOrder       => 8,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => q{Display ticket after "Quick Create"}, #loc
-        },
-    },
-
-    # User overridable locale options
-    DateTimeFormat => {
-        Section         => 'Locale',                       #loc
-        Overridable     => 1,
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Date format',                            #loc
-            Callback => sub { my $ret = { Values => [], ValuesLabel => {}};
-                              my $date = RT::Date->new($HTML::Mason::Commands::session{'CurrentUser'});
-                              $date->SetToNow;
-                              foreach my $value ($date->Formatters) {
-                                 push @{$ret->{Values}}, $value;
-                                 $ret->{ValuesLabel}{$value} = $date->Get(
-                                     Format     => $value,
-                                     Timezone   => 'user',
-                                 );
-                              }
-                              return $ret;
-            },
-        },
-    },
-
-    RTAddressRegexp => {
-        Type    => 'SCALAR',
-        PostLoadCheck => sub {
-            my $self = shift;
-            my $value = $self->Get('RTAddressRegexp');
-            if (not $value) {
-                $RT::Logger->debug(
-                    'The RTAddressRegexp option is not set in the config.'
-                    .' Not setting this option results in additional SQL queries to'
-                    .' check whether each address belongs to RT or not.'
-                    .' It is especially important to set this option if RT recieves'
-                    .' emails on addresses that are not in the database or config.'
-                );
-            } elsif (ref $value and ref $value eq "Regexp") {
-                # Ensure that the regex is case-insensitive; while the
-                # local part of email addresses is _technically_
-                # case-sensitive, most MTAs don't treat it as such.
-                $RT::Logger->warning(
-                    'RTAddressRegexp is set to a case-sensitive regular expression.'
-                    .' This may lead to mail loops with MTAs which treat the'
-                    .' local part as case-insensitive -- which is most of them.'
-                ) if "$value" =~ /^\(\?[a-z]*-([a-z]*):/ and "$1" =~ /i/;
-            }
-        },
-    },
-    # User overridable mail options
-    EmailFrequency => {
-        Section         => 'Mail',                                     #loc
-        Overridable     => 1,
-        Default     => 'Individual messages',
-        Widget          => '/Widgets/Form/Select',
-        WidgetArguments => {
-            Description => 'Email delivery',    #loc
-            Values      => [
-            'Individual messages',    #loc
-            'Daily digest',           #loc
-            'Weekly digest',          #loc
-            'Suspended'               #loc
-            ]
-        }
-    },
-    NotifyActor => {
-        Section         => 'Mail',                                     #loc
-        Overridable     => 1,
-        SortOrder       => 2,
-        Widget          => '/Widgets/Form/Boolean',
-        WidgetArguments => {
-            Description => 'Outgoing mail', #loc
-            Hints => 'Should RT send you mail for ticket updates you make?', #loc
-        }
-    },
-
-    # this tends to break extensions that stash links in ticket update pages
-    Organization => {
-        Type            => 'SCALAR',
-        PostLoadCheck   => sub {
-            my ($self,$value) = @_;
-            $RT::Logger->error("your \$Organization setting ($value) appears to contain whitespace.  Please fix this.")
-                if $value =~ /\s/;;
-        },
-    },
-
-    # Internal config options
-    FullTextSearch => {
-        Type => 'HASH',
-        PostLoadCheck => sub {
-            my $self = shift;
-            my $v = $self->Get('FullTextSearch');
-            return unless $v->{Enable} and $v->{Indexed};
-            my $dbtype = $self->Get('DatabaseType');
-            if ($dbtype eq 'Oracle') {
-                if (not $v->{IndexName}) {
-                    $RT::Logger->error("No IndexName set for full-text index; disabling");
-                    $v->{Enable} = $v->{Indexed} = 0;
-                }
-            } elsif ($dbtype eq 'Pg') {
-                my $bad = 0;
-                if (not $v->{'Column'}) {
-                    $RT::Logger->error("No Column set for full-text index; disabling");
-                    $v->{Enable} = $v->{Indexed} = 0;
-                } elsif ($v->{'Column'} eq "Content"
-                             and (not $v->{'Table'} or $v->{'Table'} eq "Attachments")) {
-                    $RT::Logger->error("Column for full-text index is set to Content, not tsvector column; disabling");
-                    $v->{Enable} = $v->{Indexed} = 0;
-                }
-            } elsif ($dbtype eq 'mysql') {
-                if (not $v->{'Table'}) {
-                    $RT::Logger->error("No Table set for full-text index; disabling");
-                    $v->{Enable} = $v->{Indexed} = 0;
-                } elsif ($v->{'Table'} eq "Attachments") {
-                    $RT::Logger->error("Table for full-text index is set to Attachments, not SphinxSE table; disabling");
-                    $v->{Enable} = $v->{Indexed} = 0;
-                } elsif (not $v->{'MaxMatches'}) {
-                    $RT::Logger->warn("No MaxMatches set for full-text index; defaulting to 10000");
-                    $v->{MaxMatches} = 10_000;
-                }
-            } else {
-                $RT::Logger->error("Indexed full-text-search not supported for $dbtype");
-                $v->{Indexed} = 0;
-            }
-        },
-    },
-    DisableGraphViz => {
-        Type            => 'SCALAR',
-        PostLoadCheck   => sub {
-            my $self  = shift;
-            my $value = shift;
-            return if $value;
-            return if $INC{'GraphViz.pm'};
-            local $@;
-            return if eval {require GraphViz; 1};
-            $RT::Logger->debug("You've enabled GraphViz, but we couldn't load the module: $@");
-            $self->Set( DisableGraphViz => 1 );
-        },
-    },
-    DisableGD => {
-        Type            => 'SCALAR',
-        PostLoadCheck   => sub {
-            my $self  = shift;
-            my $value = shift;
-            return if $value;
-            return if $INC{'GD.pm'};
-            local $@;
-            return if eval {require GD; 1};
-            $RT::Logger->debug("You've enabled GD, but we couldn't load the module: $@");
-            $self->Set( DisableGD => 1 );
-        },
-    },
-    MailPlugins  => { Type => 'ARRAY' },
-    Plugins      => {
-        Type => 'ARRAY',
-        PostLoadCheck => sub {
-            my $self = shift;
-            my $value = $self->Get('Plugins');
-            # XXX Remove in RT 4.2
-            return unless $value and grep {$_ eq "RT::FM"} @{$value};
-            warn 'RTFM has been integrated into core RT, and must be removed from your @Plugins';
-        },
-    },
-    GnuPG        => { Type => 'HASH' },
-    GnuPGOptions => { Type => 'HASH',
-        PostLoadCheck => sub {
-            my $self = shift;
-            my $gpg = $self->Get('GnuPG');
-            return unless $gpg->{'Enable'};
-            my $gpgopts = $self->Get('GnuPGOptions');
-            unless (-d $gpgopts->{homedir}  && -r _ ) { # no homedir, no gpg
-                $RT::Logger->debug(
-                    "RT's GnuPG libraries couldn't successfully read your".
-                    " configured GnuPG home directory (".$gpgopts->{homedir}
-                    ."). PGP support has been disabled");
-                $gpg->{'Enable'} = 0;
-                return;
-            }
-
-
-            require RT::Crypt::GnuPG;
-            unless (RT::Crypt::GnuPG->Probe()) {
-                $RT::Logger->debug(
-                    "RT's GnuPG libraries couldn't successfully execute gpg.".
-                    " PGP support has been disabled");
-                $gpg->{'Enable'} = 0;
-            }
-        }
-    },
-    ReferrerWhitelist => { Type => 'ARRAY' },
-    ResolveDefaultUpdateType => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-            return unless $value;
-            $RT::Logger->info('The ResolveDefaultUpdateType config option has been deprecated.  '.
-                              'You can change the site default in your %Lifecycles config.');
-        }
-    },
-    WebPath => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-
-            # "In most cases, you should leave $WebPath set to '' (an empty value)."
-            return unless $value;
-
-            # try to catch someone who assumes that you shouldn't leave this empty
-            if ($value eq '/') {
-                $RT::Logger->error("For the WebPath config option, use the empty string instead of /");
-                return;
-            }
-
-            # $WebPath requires a leading / but no trailing /, or it can be blank.
-            return if $value =~ m{^/.+[^/]$};
-
-            if ($value =~ m{/$}) {
-                $RT::Logger->error("The WebPath config option requires no trailing slash");
-            }
-
-            if ($value !~ m{^/}) {
-                $RT::Logger->error("The WebPath config option requires a leading slash");
-            }
-        },
-    },
-    WebDomain => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-
-            if (!$value) {
-                $RT::Logger->error("You must set the WebDomain config option");
-                return;
-            }
-
-            if ($value =~ m{^(\w+://)}) {
-                $RT::Logger->error("The WebDomain config option must not contain a scheme ($1)");
-                return;
-            }
-
-            if ($value =~ m{(/.*)}) {
-                $RT::Logger->error("The WebDomain config option must not contain a path ($1)");
-                return;
-            }
-
-            if ($value =~ m{:(\d*)}) {
-                $RT::Logger->error("The WebDomain config option must not contain a port ($1)");
-                return;
-            }
-        },
-    },
-    WebPort => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-
-            if (!$value) {
-                $RT::Logger->error("You must set the WebPort config option");
-                return;
-            }
-
-            if ($value !~ m{^\d+$}) {
-                $RT::Logger->error("The WebPort config option must be an integer");
-            }
-        },
-    },
-    WebBaseURL => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-
-            if (!$value) {
-                $RT::Logger->error("You must set the WebBaseURL config option");
-                return;
-            }
-
-            if ($value !~ m{^https?://}i) {
-                $RT::Logger->error("The WebBaseURL config option must contain a scheme (http or https)");
-            }
-
-            if ($value =~ m{/$}) {
-                $RT::Logger->error("The WebBaseURL config option requires no trailing slash");
-            }
-
-            if ($value =~ m{^https?://.+?(/[^/].*)}i) {
-                $RT::Logger->error("The WebBaseURL config option must not contain a path ($1)");
-            }
-        },
-    },
-    WebURL => {
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = shift;
-
-            if (!$value) {
-                $RT::Logger->error("You must set the WebURL config option");
-                return;
-            }
-
-            if ($value !~ m{^https?://}i) {
-                $RT::Logger->error("The WebURL config option must contain a scheme (http or https)");
-            }
-
-            if ($value !~ m{/$}) {
-                $RT::Logger->error("The WebURL config option requires a trailing slash");
-            }
-        },
-    },
-    EmailInputEncodings => {
-        Type => 'ARRAY',
-        PostLoadCheck => sub {
-            my $self  = shift;
-            my $value = $self->Get('EmailInputEncodings');
-            return unless $value && @$value;
-
-            my %seen;
-            foreach my $encoding ( grep defined && length, splice @$value ) {
-                next if $seen{ $encoding };
-                if ( $encoding eq '*' ) {
-                    unshift @$value, '*';
-                    next;
-                }
-
-                my $canonic = Encode::resolve_alias( $encoding );
-                unless ( $canonic ) {
-                    warn "Unknown encoding '$encoding' in \@EmailInputEncodings option";
-                }
-                elsif ( $seen{ $canonic }++ ) {
-                    next;
-                }
-                else {
-                    push @$value, $canonic;
-                }
-            }
-        },
-    },
-
-    ActiveStatus => {
-        Type => 'ARRAY',
-        PostLoadCheck => sub {
-            my $self  = shift;
-            return unless shift;
-            # XXX Remove in RT 4.2
-            warn < {
-        Type => 'ARRAY',
-        PostLoadCheck => sub {
-            my $self  = shift;
-            return unless shift;
-            # XXX Remove in RT 4.2
-            warn <_Init(@_);
-    return $self;
-}
-
-sub _Init {
-    return;
-}
-
-=head2 InitConfig
-
-Do nothin right now.
-
-=cut
-
-sub InitConfig {
-    my $self = shift;
-    my %args = ( File => '', @_ );
-    $args{'File'} =~ s/(?<=Config)(?=\.pm$)/Meta/;
-    return 1;
-}
-
-=head2 LoadConfigs
-
-Load all configs. First of all load RT's config then load
-extensions' config files in alphabetical order.
-Takes no arguments.
-
-=cut
-
-sub LoadConfigs {
-    my $self    = shift;
-
-    $self->InitConfig( File => 'RT_Config.pm' );
-    $self->LoadConfig( File => 'RT_Config.pm' );
-
-    my @configs = $self->Configs;
-    $self->InitConfig( File => $_ ) foreach @configs;
-    $self->LoadConfig( File => $_ ) foreach @configs;
-    return;
-}
-
-=head1 LoadConfig
-
-Takes param hash with C field.
-First, the site configuration file is loaded, in order to establish
-overall site settings like hostname and name of RT instance.
-Then, the core configuration file is loaded to set fallback values
-for all settings; it bases some values on settings from the site
-configuration file.
-
-B that core config file don't change options if site config
-has set them so to add value to some option instead of
-overriding you have to copy original value from core config file.
-
-=cut
-
-sub LoadConfig {
-    my $self = shift;
-    my %args = ( File => '', @_ );
-    $args{'File'} =~ s/(?_LoadConfig( %args, File => $site_config );
-    } else {
-        $self->_LoadConfig(%args);
-    }
-    $args{'File'} =~ s/Site(?=Config\.pm$)//;
-    $self->_LoadConfig(%args);
-    return 1;
-}
-
-sub _LoadConfig {
-    my $self = shift;
-    my %args = ( File => '', @_ );
-
-    my ($is_ext, $is_site);
-    if ( $args{'File'} eq ($ENV{RT_SITE_CONFIG}||'') ) {
-        ($is_ext, $is_site) = ('', 1);
-    } else {
-        $is_ext = $args{'File'} =~ /^(?!RT_)(?:(.*)_)(?:Site)?Config/ ? $1 : '';
-        $is_site = $args{'File'} =~ /SiteConfig/ ? 1 : 0;
-    }
-
-    eval {
-        package RT;
-        local *Set = sub(\[$@%]@) {
-            my ( $opt_ref, @args ) = @_;
-            my ( $pack, $file, $line ) = caller;
-            return $self->SetFromConfig(
-                Option     => $opt_ref,
-                Value      => [@args],
-                Package    => $pack,
-                File       => $file,
-                Line       => $line,
-                SiteConfig => $is_site,
-                Extension  => $is_ext,
-            );
-        };
-        my @etc_dirs = ($RT::LocalEtcPath);
-        push @etc_dirs, RT->PluginDirs('etc') if $is_ext;
-        push @etc_dirs, $RT::EtcPath, @INC;
-        local @INC = @etc_dirs;
-        require $args{'File'};
-    };
-    if ($@) {
-        return 1 if $is_site && $@ =~ /^Can't locate \Q$args{File}/;
-        if ( $is_site || $@ !~ /^Can't locate \Q$args{File}/ ) {
-            die qq{Couldn't load RT config file $args{'File'}:\n\n$@};
-        }
-
-        my $username = getpwuid($>);
-        my $group    = getgrgid($();
-
-        my ( $file_path, $fileuid, $filegid );
-        foreach ( $RT::LocalEtcPath, $RT::EtcPath, @INC ) {
-            my $tmp = File::Spec->catfile( $_, $args{File} );
-            ( $fileuid, $filegid ) = ( stat($tmp) )[ 4, 5 ];
-            if ( defined $fileuid ) {
-                $file_path = $tmp;
-                last;
-            }
-        }
-        unless ($file_path) {
-            die
-                qq{Couldn't load RT config file $args{'File'} as user $username / group $group.\n}
-                . qq{The file couldn't be found in $RT::LocalEtcPath and $RT::EtcPath.\n$@};
-        }
-
-        my $message = <Options( Overridable => undef ) ) {
-        $META{$o}->{'PostLoadCheck'}->( $self, $self->Get($o) );
-    }
-}
-
-=head2 Configs
-
-Returns list of config files found in local etc, plugins' etc
-and main etc directories.
-
-=cut
-
-sub Configs {
-    my $self    = shift;
-
-    my @configs = ();
-    foreach my $path ( $RT::LocalEtcPath, RT->PluginDirs('etc'), $RT::EtcPath ) {
-        my $mask = File::Spec->catfile( $path, "*_Config.pm" );
-        my @files = glob $mask;
-        @files = grep !/^RT_Config\.pm$/,
-            grep $_ && /^\w+_Config\.pm$/,
-            map { s/^.*[\\\/]//; $_ } @files;
-        push @configs, sort @files;
-    }
-
-    my %seen;
-    @configs = grep !$seen{$_}++, @configs;
-    return @configs;
-}
-
-=head2 Get
-
-Takes name of the option as argument and returns its current value.
-
-In the case of a user-overridable option, first checks the user's
-preferences before looking for site-wide configuration.
-
-Returns values from RT_SiteConfig, RT_Config and then the %META hash
-of configuration variables's "Default" for this config variable,
-in that order.
-
-Returns different things in scalar and array contexts. For scalar
-options it's not that important, however for arrays and hash it's.
-In scalar context returns references to arrays and hashes.
-
-Use C perl's op to force context, especially when you use
-C<(..., Argument => RT->Config->Get('ArrayOpt'), ...)>
-as perl's '=>' op doesn't change context of the right hand argument to
-scalar. Instead use C<(..., Argument => scalar RT->Config->Get('ArrayOpt'), ...)>.
-
-It's also important for options that have no default value(no default
-in F). If you don't force scalar context then you'll
-get empty list and all your named args will be messed up. For example
-C<(arg1 => 1, arg2 => RT->Config->Get('OptionDoesNotExist'), arg3 => 3)>
-will result in C<(arg1 => 1, arg2 => 'arg3', 3)> what is most probably
-unexpected, or C<(arg1 => 1, arg2 => RT->Config->Get('ArrayOption'), arg3 => 3)>
-will result in C<(arg1 => 1, arg2 => 'element of option', 'another_one' => ..., 'arg3', 3)>.
-
-=cut
-
-sub Get {
-    my ( $self, $name, $user ) = @_;
-
-    my $res;
-    if ( $user && $user->id && $META{$name}->{'Overridable'} ) {
-        $user = $user->UserObj if $user->isa('RT::CurrentUser');
-        my $prefs = $user->Preferences($RT::System);
-        $res = $prefs->{$name} if $prefs;
-    }
-    $res = $OPTIONS{$name}           unless defined $res;
-    $res = $META{$name}->{'Default'} unless defined $res;
-    return $self->_ReturnValue( $res, $META{$name}->{'Type'} || 'SCALAR' );
-}
-
-=head2 GetObfuscated
-
-the same as Get, except it returns Obfuscated value via Obfuscate sub
-
-=cut
-
-sub GetObfuscated {
-    my $self = shift;
-    my ( $name, $user ) = @_;
-    my $obfuscate = $META{$name}->{Obfuscate};
-
-    # we use two Get here is to simplify the logic of the return value
-    # configs need obfuscation are supposed to be less, so won't be too heavy
-
-    return $self->Get(@_) unless $obfuscate;
-
-    my $res = $self->Get(@_);
-    $res = $obfuscate->( $self, $res, $user );
-    return $self->_ReturnValue( $res, $META{$name}->{'Type'} || 'SCALAR' );
-}
-
-=head2 Set
-
-Set option's value to new value. Takes name of the option and new value.
-Returns old value.
-
-The new value should be scalar, array or hash depending on type of the option.
-If the option is not defined in meta or the default RT config then it is of
-scalar type.
-
-=cut
-
-sub Set {
-    my ( $self, $name ) = ( shift, shift );
-
-    my $old = $OPTIONS{$name};
-    my $type = $META{$name}->{'Type'} || 'SCALAR';
-    if ( $type eq 'ARRAY' ) {
-        $OPTIONS{$name} = [@_];
-        { no warnings 'once'; no strict 'refs'; @{"RT::$name"} = (@_); }
-    } elsif ( $type eq 'HASH' ) {
-        $OPTIONS{$name} = {@_};
-        { no warnings 'once'; no strict 'refs'; %{"RT::$name"} = (@_); }
-    } else {
-        $OPTIONS{$name} = shift;
-        {no warnings 'once'; no strict 'refs'; ${"RT::$name"} = $OPTIONS{$name}; }
-    }
-    $META{$name}->{'Type'} = $type;
-    return $self->_ReturnValue( $old, $type );
-}
-
-sub _ReturnValue {
-    my ( $self, $res, $type ) = @_;
-    return $res unless wantarray;
-
-    if ( $type eq 'ARRAY' ) {
-        return @{ $res || [] };
-    } elsif ( $type eq 'HASH' ) {
-        return %{ $res || {} };
-    }
-    return $res;
-}
-
-sub SetFromConfig {
-    my $self = shift;
-    my %args = (
-        Option     => undef,
-        Value      => [],
-        Package    => 'RT',
-        File       => '',
-        Line       => 0,
-        SiteConfig => 1,
-        Extension  => 0,
-        @_
-    );
-
-    unless ( $args{'File'} ) {
-        ( $args{'Package'}, $args{'File'}, $args{'Line'} ) = caller(1);
-    }
-
-    my $opt = $args{'Option'};
-
-    my $type;
-    my $name = $self->__GetNameByRef($opt);
-    if ($name) {
-        $type = ref $opt;
-        $name =~ s/.*:://;
-    } else {
-        $name = $$opt;
-        $type = $META{$name}->{'Type'} || 'SCALAR';
-    }
-
-    # if option is already set we have to check where
-    # it comes from and may be ignore it
-    if ( exists $OPTIONS{$name} ) {
-        if ( $type eq 'HASH' ) {
-            $args{'Value'} = [
-                @{ $args{'Value'} },
-                @{ $args{'Value'} }%2? (undef) : (),
-                $self->Get( $name ),
-            ];
-        } elsif ( $args{'SiteConfig'} && $args{'Extension'} ) {
-            # if it's site config of an extension then it can only
-            # override options that came from its main config
-            if ( $args{'Extension'} ne $META{$name}->{'Source'}{'Extension'} ) {
-                my %source = %{ $META{$name}->{'Source'} };
-                warn
-                    "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored."
-                    ." This option earlier has been set in $source{'File'} line $source{'Line'}."
-                    ." To overide this option use ". ($source{'Extension'}||'RT')
-                    ." site config."
-                ;
-                return 1;
-            }
-        } elsif ( !$args{'SiteConfig'} && $META{$name}->{'Source'}{'SiteConfig'} ) {
-            # if it's core config then we can override any option that came from another
-            # core config, but not site config
-
-            my %source = %{ $META{$name}->{'Source'} };
-            if ( $source{'Extension'} ne $args{'Extension'} ) {
-                # as a site config is loaded earlier then its base config
-                # then we warn only on different extensions, for example
-                # RTIR's options is set in main site config
-                warn
-                    "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored."
-                    ." It may be ok, but we want you to be aware."
-                    ." This option has been set earlier in $source{'File'} line $source{'Line'}."
-                ;
-            }
-
-            return 1;
-        }
-    }
-
-    $META{$name}->{'Type'} = $type;
-    foreach (qw(Package File Line SiteConfig Extension)) {
-        $META{$name}->{'Source'}->{$_} = $args{$_};
-    }
-    $self->Set( $name, @{ $args{'Value'} } );
-
-    return 1;
-}
-
-    our %REF_SYMBOLS = (
-            SCALAR => '$',
-            ARRAY  => '@',
-            HASH   => '%',
-            CODE   => '&',
-        );
-
-{
-    my $last_pack = '';
-
-    sub __GetNameByRef {
-        my $self = shift;
-        my $ref  = shift;
-        my $pack = shift;
-        if ( !$pack && $last_pack ) {
-            my $tmp = $self->__GetNameByRef( $ref, $last_pack );
-            return $tmp if $tmp;
-        }
-        $pack ||= 'main::';
-        $pack .= '::' unless substr( $pack, -2 ) eq '::';
-
-        no strict 'refs';
-        my $name = undef;
-
-        # scan $pack's nametable(hash)
-        foreach my $k ( keys %{$pack} ) {
-
-            # The hash for main:: has a reference to itself
-            next if $k eq 'main::';
-
-            # if the entry has a trailing '::' then
-            # it is a link to another name space
-            if ( substr( $k, -2 ) eq '::') {
-                $name = $self->__GetNameByRef( $ref, $pack eq 'main::'? $k : $pack.$k );
-                return $name if $name;
-            }
-
-            # entry of the table with references to
-            # SCALAR, ARRAY... and other types with
-            # the same name
-            my $entry = ${$pack}{$k};
-            next unless $entry;
-
-            # Inlined constants are simplified in the symbol table --
-            # namely, when possible, you only get a reference back in
-            # $entry, rather than a full GLOB.  In 5.10, scalar
-            # constants began being inlined this way; starting in 5.20,
-            # list constants are also inlined.  Notably, ref(GLOB) is
-            # undef, but inlined constants are currently either REF,
-            # SCALAR, or ARRAY.
-            next if ref($entry);
-
-            my $ref_type = ref($ref);
-
-            # regex/arrayref/hashref/coderef are stored in SCALAR glob
-            $ref_type = 'SCALAR' if $ref_type eq 'REF';
-
-            my $entry_ref = *{$entry}{ $ref_type };
-            next if ref $entry_ref && ref $entry_ref ne ref $ref;
-            next unless $entry_ref;
-
-            # if references are equal then we've found
-            if ( $entry_ref == $ref ) {
-                $last_pack = $pack;
-                return ( $REF_SYMBOLS{ $ref_type } || '*' ) . $pack . $k;
-            }
-        }
-        return '';
-    }
-}
-
-=head2 Metadata
-
-
-=head2 Meta
-
-=cut
-
-sub Meta {
-    return $META{ $_[1] };
-}
-
-sub Sections {
-    my $self = shift;
-    my %seen;
-    my @sections = sort
-        grep !$seen{$_}++,
-        map $_->{'Section'} || 'General',
-        values %META;
-    return @sections;
-}
-
-sub Options {
-    my $self = shift;
-    my %args = ( Section => undef, Overridable => 1, Sorted => 1, @_ );
-    my @res  = keys %META;
-    
-    @res = grep( ( $META{$_}->{'Section'} || 'General' ) eq $args{'Section'},
-        @res 
-    ) if defined $args{'Section'};
-
-    if ( defined $args{'Overridable'} ) {
-        @res
-            = grep( ( $META{$_}->{'Overridable'} || 0 ) == $args{'Overridable'},
-            @res );
-    }
-
-    if ( $args{'Sorted'} ) {
-        @res = sort {
-            ($META{$a}->{SortOrder}||9999) <=> ($META{$b}->{SortOrder}||9999)
-            || $a cmp $b 
-        } @res;
-    } else {
-        @res = sort { $a cmp $b } @res;
-    }
-    return @res;
-}
-
-=head2 AddOption( Name => '', Section => '', ... )
-
-=cut
-
-sub AddOption {
-    my $self = shift;
-    my %args = (
-        Name            => undef,
-        Section         => undef,
-        Overridable     => 0,
-        SortOrder       => undef,
-        Widget          => '/Widgets/Form/String',
-        WidgetArguments => {},
-        @_
-    );
-
-    unless ( $args{Name} ) {
-        $RT::Logger->error("Need Name to add a new config");
-        return;
-    }
-
-    unless ( $args{Section} ) {
-        $RT::Logger->error("Need Section to add a new config option");
-        return;
-    }
-
-    $META{ delete $args{Name} } = \%args;
-}
-
-=head2 DeleteOption( Name => '' )
-
-=cut
-
-sub DeleteOption {
-    my $self = shift;
-    my %args = (
-        Name            => undef,
-        @_
-        );
-    if ( $args{Name} ) {
-        delete $META{$args{Name}};
-    }
-    else {
-        $RT::Logger->error("Need Name to remove a config option");
-        return;
-    }
-}
-
-=head2 UpdateOption( Name => '' ), Section => '', ... )
-
-=cut
-
-sub UpdateOption {
-    my $self = shift;
-    my %args = (
-        Name            => undef,
-        Section         => undef,
-        Overridable     => undef,
-        SortOrder       => undef,
-        Widget          => undef,
-        WidgetArguments => undef,
-        @_
-    );
-
-    my $name = delete $args{Name};
-
-    unless ( $name ) {
-        $RT::Logger->error("Need Name to update a new config");
-        return;
-    }
-
-    unless ( exists $META{$name} ) {
-        $RT::Logger->error("Config $name doesn't exist");
-        return;
-    }
-
-    for my $type ( keys %args ) {
-        next unless defined $args{$type};
-        $META{$name}{$type} = $args{$type};
-    }
-    return 1;
-}
-
-RT::Base->_ImportOverlays();
-
-1;
diff --git a/rt/lib/RT/CustomField.pm.orig b/rt/lib/RT/CustomField.pm.orig
deleted file mode 100644
index e71bbf78a..000000000
--- a/rt/lib/RT/CustomField.pm.orig
+++ /dev/null
@@ -1,2170 +0,0 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-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::CustomField;
-
-use strict;
-use warnings;
-
-use Scalar::Util 'blessed';
-
-use base 'RT::Record';
-
-sub Table {'CustomFields'}
-
-
-use RT::CustomFieldValues;
-use RT::ObjectCustomFields;
-use RT::ObjectCustomFieldValues;
-
-our %FieldTypes = (
-    Select => {
-        sort_order => 10,
-        selection_type => 1,
-
-        labels => [ 'Select multiple values',      # loc
-                    'Select one value',            # loc
-                    'Select up to [_1] values',    # loc
-                  ],
-
-        render_types => {
-            multiple => [
-
-                # Default is the first one
-                'Select box',              # loc
-                'List',                    # loc
-            ],
-            single => [ 'Select box',              # loc
-                        'Dropdown',                # loc
-                        'List',                    # loc
-                      ]
-        },
-
-    },
-    Freeform => {
-        sort_order => 20,
-        selection_type => 0,
-
-        labels => [ 'Enter multiple values',       # loc
-                    'Enter one value',             # loc
-                    'Enter up to [_1] values',     # loc
-                  ]
-                },
-    Text => {
-        sort_order => 30,
-        selection_type => 0,
-        labels         => [
-                    'Fill in multiple text areas',      # loc
-                    'Fill in one text area',            # loc
-                    'Fill in up to [_1] text areas',    # loc
-                  ]
-            },
-    Wikitext => {
-        sort_order => 40,
-        selection_type => 0,
-        labels         => [
-                    'Fill in multiple wikitext areas',      # loc
-                    'Fill in one wikitext area',            # loc
-                    'Fill in up to [_1] wikitext areas',    # loc
-                  ]
-                },
-
-    Image => {
-        sort_order => 50,
-        selection_type => 0,
-        labels         => [
-                    'Upload multiple images',               # loc
-                    'Upload one image',                     # loc
-                    'Upload up to [_1] images',             # loc
-                  ]
-             },
-    Binary => {
-        sort_order => 60,
-        selection_type => 0,
-        labels         => [
-                    'Upload multiple files',                # loc
-                    'Upload one file',                      # loc
-                    'Upload up to [_1] files',              # loc
-                  ]
-              },
-
-    Combobox => {
-        sort_order => 70,
-        selection_type => 1,
-        labels         => [
-                    'Combobox: Select or enter multiple values',      # loc
-                    'Combobox: Select or enter one value',            # loc
-                    'Combobox: Select or enter up to [_1] values',    # loc
-                  ]
-                },
-    Autocomplete => {
-        sort_order => 80,
-        selection_type => 1,
-        labels         => [
-                    'Enter multiple values with autocompletion',      # loc
-                    'Enter one value with autocompletion',            # loc
-                    'Enter up to [_1] values with autocompletion',    # loc
-                  ]
-    },
-
-    Date => {
-        sort_order => 90,
-        selection_type => 0,
-        labels         => [
-                    'Select multiple dates',                          # loc
-                    'Select date',                                    # loc
-                    'Select up to [_1] dates',                        # loc
-                  ]
-            },
-    DateTime => {
-        sort_order => 100,
-        selection_type => 0,
-        labels         => [
-                    'Select multiple datetimes',                      # loc
-                    'Select datetime',                                # loc
-                    'Select up to [_1] datetimes',                    # loc
-                  ]
-                },
-    TimeValue => {
-        sort_order => 105,
-        selection_type => 0,
-        labels         => [
-                     'Enter multiple time values (UNSUPPORTED)',
-                     'Enter a time value',
-                     'Enter [_1] time values (UNSUPPORTED)',
-                   ]
-                 },
-
-    IPAddress => {
-        sort_order => 110,
-        selection_type => 0,
-
-        labels => [ 'Enter multiple IP addresses',       # loc
-                    'Enter one IP address',             # loc
-                    'Enter up to [_1] IP addresses',     # loc
-                  ]
-                },
-    IPAddressRange => {
-        sort_order => 120,
-        selection_type => 0,
-
-        labels => [ 'Enter multiple IP address ranges',       # loc
-                    'Enter one IP address range',             # loc
-                    'Enter up to [_1] IP address ranges',     # loc
-                  ]
-                },
-);
-
-
-our %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::Queue'  => "Queues", );                         #loc
-RT::CustomField->_ForObjectType( 'RT::Group' => "Groups", );                          #loc
-
-our $RIGHTS = {
-    SeeCustomField            => 'View custom fields',                                    # loc_pair
-    AdminCustomField          => 'Create, modify and delete custom fields',               # loc_pair
-    AdminCustomFieldValues    => 'Create, modify and delete custom fields values',        # loc_pair
-    ModifyCustomField         => 'Add, modify and delete custom field values for objects' # loc_pair
-};
-
-our $RIGHT_CATEGORIES = {
-    SeeCustomField          => 'General',
-    AdminCustomField        => 'Admin',
-    AdminCustomFieldValues  => 'Admin',
-    ModifyCustomField       => 'Staff',
-};
-
-# Tell RT::ACE that this sort of object can get acls granted
-$RT::ACE::OBJECT_TYPES{'RT::CustomField'} = 1;
-
-__PACKAGE__->AddRights(%$RIGHTS);
-__PACKAGE__->AddRightCategories(%$RIGHT_CATEGORIES);
-
-=head2 AddRights C, C [, ...]
-
-Adds the given rights to the list of possible rights.  This method
-should be called during server startup, not at runtime.
-
-=cut
-
-sub AddRights {
-    my $self = shift;
-    my %new = @_;
-    $RIGHTS = { %$RIGHTS, %new };
-    %RT::ACE::LOWERCASERIGHTNAMES = ( %RT::ACE::LOWERCASERIGHTNAMES,
-                                      map { lc($_) => $_ } keys %new);
-}
-
-sub AvailableRights {
-    my $self = shift;
-    return $RIGHTS;
-}
-
-=head2 RightCategories
-
-Returns a hashref where the keys are rights for this type of object and the
-values are the category (General, Staff, Admin) the right falls into.
-
-=cut
-
-sub RightCategories {
-    return $RIGHT_CATEGORIES;
-}
-
-=head2 AddRightCategories C, C [, ...]
-
-Adds the given right and category pairs to the list of right categories.  This
-method should be called during server startup, not at runtime.
-
-=cut
-
-sub AddRightCategories {
-    my $self = shift if ref $_[0] or $_[0] eq __PACKAGE__;
-    my %new = @_;
-    $RIGHT_CATEGORIES = { %$RIGHT_CATEGORIES, %new };
-}
-
-=head1 NAME
-
-  RT::CustomField_Overlay - overlay for RT::CustomField
-
-=head1 DESCRIPTION
-
-=head1 'CORE' METHODS
-
-=head2 Create PARAMHASH
-
-Create takes a hash of values and creates a row in the database:
-
-  varchar(200) 'Name'.
-  varchar(200) 'Type'.
-  int(11) 'MaxValues'.
-  varchar(255) 'Pattern'.
-  smallint(6) 'Repeated'.
-  varchar(255) 'Description'.
-  int(11) 'SortOrder'.
-  varchar(255) 'LookupType'.
-  smallint(6) 'Disabled'.
-
-C is generally the result of either
-CCustomFieldLookupType> or CCustomFieldLookupType>.
-
-=cut
-
-sub Create {
-    my $self = shift;
-    my %args = (
-        Name        => '',
-        Type        => '',
-        MaxValues   => 0,
-        Pattern     => '',
-        Description => '',
-        Disabled    => 0,
-        LookupType  => '',
-        Repeated    => 0,
-        LinkValueTo => '',
-        IncludeContentForValue => '',
-        @_,
-    );
-
-    unless ( $self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField') ) {
-        return (0, $self->loc('Permission Denied'));
-    }
-
-    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;
-    }
-    $args{'MaxValues'} = int $args{'MaxValues'};
-
-    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);
-        $queue->Load($args{'Queue'});
-        unless ($queue->Id) {
-            return (0, $self->loc("Queue not found"));
-        }
-        unless ( $queue->CurrentUserHasRight('AssignCustomFields') ) {
-            return ( 0, $self->loc('Permission Denied') );
-        }
-        $args{'LookupType'} = 'RT::Queue-RT::Ticket';
-        $args{'Queue'} = $queue->Id;
-    }
-
-    my ($ok, $msg) = $self->_IsValidRegex( $args{'Pattern'} );
-    return (0, $self->loc("Invalid pattern: [_1]", $msg)) unless $ok;
-
-    if ( $args{'MaxValues'} != 1 && $args{'Type'} =~ /(text|combobox)$/i ) {
-        $RT::Logger->debug("Support for 'multiple' Texts or Comboboxes is not implemented");
-        $args{'MaxValues'} = 1;
-    }
-
-    if ( $args{'RenderType'} ||= undef ) {
-        my $composite = join '-', @args{'Type', 'MaxValues'};
-        return (0, $self->loc("This custom field has no Render Types"))
-            unless $self->HasRenderTypes( $composite );
-
-        if ( $args{'RenderType'} eq $self->DefaultRenderType( $composite ) ) {
-            $args{'RenderType'} = undef;
-        } else {
-            return (0, $self->loc("Invalid Render Type") )
-                unless grep $_ eq  $args{'RenderType'}, $self->RenderTypes( $composite );
-        }
-    }
-
-    $args{'ValuesClass'} = undef if ($args{'ValuesClass'} || '') eq 'RT::CustomFieldValues';
-    if ( $args{'ValuesClass'} ||= undef ) {
-        return (0, $self->loc("This Custom Field can not have list of values"))
-            unless $self->IsSelectionType( $args{'Type'} );
-
-        unless ( $self->ValidateValuesClass( $args{'ValuesClass'} ) ) {
-            return (0, $self->loc("Invalid Custom Field values source"));
-        }
-    }
-
-    (my $rv, $msg) = $self->SUPER::Create(
-        Name        => $args{'Name'},
-        Type        => $args{'Type'},
-        RenderType  => $args{'RenderType'},
-        MaxValues   => $args{'MaxValues'},
-        Pattern     => $args{'Pattern'},
-        BasedOn     => $args{'BasedOn'},
-        ValuesClass => $args{'ValuesClass'},
-        Description => $args{'Description'},
-        Disabled    => $args{'Disabled'},
-        LookupType  => $args{'LookupType'},
-        Repeated    => $args{'Repeated'},
-    );
-
-    if ($rv) {
-        if ( exists $args{'LinkValueTo'}) {
-            $self->SetLinkValueTo($args{'LinkValueTo'});
-        }
-
-        if ( exists $args{'IncludeContentForValue'}) {
-            $self->SetIncludeContentForValue($args{'IncludeContentForValue'});
-        }
-
-        if ( exists $args{'UILocation'} ) {
-            $self->SetUILocation( $args{'UILocation'} );
-        }
-
-        if ( exists $args{'NoClone'} ) {
-            $self->SetNoClone( $args{'NoClone'} );
-        }
-
-        return ($rv, $msg) 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, $msg);
-}
-
-=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 );
-    }
-}
-
-
-
-=head2 LoadByName (Queue => QUEUEID, Name => NAME)
-
-Loads the Custom field named NAME.
-
-Will load a Disabled Custom Field even if there is a non-disabled Custom Field
-with the same 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 = \&LoadByName;
-# Change after 3.4 beta.
-*LoadByNameAndQueue = \&LoadByName;
-
-sub LoadByName {
-    my $self = shift;
-    my %args = (
-        Queue => undef,
-        Name  => undef,
-        @_,
-    );
-
-    unless ( defined $args{'Name'} && length $args{'Name'} ) {
-        $RT::Logger->error("Couldn't load Custom Field without Name");
-        return wantarray ? (0, $self->loc("No name provided")) : 0;
-    }
-
-    # if we're looking for a queue by name, make it a number
-    if ( defined $args{'Queue'} && ($args{'Queue'} =~ /\D/ || !$self->ContextObject) ) {
-        my $QueueObj = RT::Queue->new( $self->CurrentUser );
-        $QueueObj->Load( $args{'Queue'} );
-        $args{'Queue'} = $QueueObj->Id;
-        $self->SetContextObject( $QueueObj )
-            unless $self->ContextObject;
-    }
-
-    # XXX - really naive implementation.  Slow. - not really. still just one query
-
-    my $CFs = RT::CustomFields->new( $self->CurrentUser );
-    $CFs->SetContextObject( $self->ContextObject );
-    my $field = $args{'Name'} =~ /\D/? 'Name' : 'id';
-    $CFs->Limit( FIELD => $field, VALUE => $args{'Name'}, CASESENSITIVE => 0);
-    # 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, we _can_ load disabled fields, but prefer
-    # non-disabled fields.
-    $CFs->FindAllRows;
-    $CFs->OrderByCols(
-        { FIELD => "Disabled", ORDER => 'ASC' },
-    );
-
-    # We only want one entry.
-    $CFs->RowsPerPage(1);
-
-    # version before 3.8 just returns 0, so we need to test if wantarray to be
-    # backward compatible.
-    return wantarray ? (0, $self->loc("Not found")) : 0 unless my $first = $CFs->First;
-
-    return $self->LoadById( $first->id );
-}
-
-
-
-
-=head2 Custom field values
-
-=head3 Values FIELD
-
-Return a object (collection) of all acceptable values for this Custom Field.
-Class of the object can vary and depends on the return value
-of the C method.
-
-=cut
-
-*ValuesObj = \&Values;
-
-sub Values {
-    my $self = shift;
-
-    my $class = $self->ValuesClass;
-    if ( $class ne 'RT::CustomFieldValues') {
-        eval "require $class" or die "$@";
-    }
-    my $cf_values = $class->new( $self->CurrentUser );
-    # if the user has no rights, return an empty object
-    if ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) {
-        $cf_values->LimitToCustomField( $self->Id );
-    } else {
-        $cf_values->Limit( FIELD => 'id', VALUE => 0, SUBCLAUSE => 'acl' );
-    }
-    return ($cf_values);
-}
-
-
-=head3 AddValue HASH
-
-Create a new value for this CustomField.  Takes a paramhash containing the elements Name, Description and SortOrder
-
-=cut
-
-sub AddValue {
-    my $self = shift;
-    my %args = @_;
-
-    unless ($self->CurrentUserHasRight('AdminCustomField') || $self->CurrentUserHasRight('AdminCustomFieldValues')) {
-        return (0, $self->loc('Permission Denied'));
-    }
-
-    # allow zero value
-    if ( !defined $args{'Name'} || $args{'Name'} eq '' ) {
-        return (0, $self->loc("Can't add a custom field value without a name"));
-    }
-
-    my $newval = RT::CustomFieldValue->new( $self->CurrentUser );
-    return $newval->Create( %args, CustomField => $self->Id );
-}
-
-
-
-
-=head3 DeleteValue ID
-
-Deletes a value from this custom field by id.
-
-Does not remove this value for any article which has had it selected
-
-=cut
-
-sub DeleteValue {
-    my $self = shift;
-    my $id = shift;
-    unless ( $self->CurrentUserHasRight('AdminCustomField') || $self->CurrentUserHasRight('AdminCustomFieldValues') ) {
-        return (0, $self->loc('Permission Denied'));
-    }
-
-    my $val_to_del = RT::CustomFieldValue->new( $self->CurrentUser );
-    $val_to_del->Load( $id );
-    unless ( $val_to_del->Id ) {
-        return (0, $self->loc("Couldn't find that value"));
-    }
-    unless ( $val_to_del->CustomField == $self->Id ) {
-        return (0, $self->loc("That is not a value for this custom field"));
-    }
-
-    my $retval = $val_to_del->Delete;
-    unless ( $retval ) {
-        return (0, $self->loc("Custom field value could not be deleted"));
-    }
-    return ($retval, $self->loc("Custom field value deleted"));
-}
-
-
-=head2 ValidateQueue Queue
-
-Make sure that the name specified is valid
-
-=cut
-
-sub ValidateName {
-    my $self = shift;
-    my $value = shift;
-
-    return 0 unless length $value;
-
-    return $self->SUPER::ValidateName($value);
-}
-
-=head2 ValidateQueue Queue
-
-Make sure that the queue specified is a valid queue name
-
-=cut
-
-sub ValidateQueue {
-    my $self = shift;
-    my $id = shift;
-
-    return undef unless defined $id;
-    # 0 means "Global" null would _not_ be ok.
-    return 1 if $id eq '0';
-
-    my $q = RT::Queue->new( RT->SystemUser );
-    $q->Load( $id );
-    return undef unless $q->id;
-    return 1;
-}
-
-
-
-=head2 Types 
-
-Retuns an array of the types of CustomField that are supported
-
-=cut
-
-sub Types {
-    return (sort {(($FieldTypes{$a}{sort_order}||999) <=> ($FieldTypes{$b}{sort_order}||999)) or ($a cmp $b)} keys %FieldTypes);
-}
-
-
-=head2 IsSelectionType 
-
-Retuns a boolean value indicating whether the C method makes sense
-to this Custom Field.
-
-=cut
-
-sub IsSelectionType {
-    my $self = shift;
-    my $type = @_? shift : $self->Type;
-    return undef unless $type;
-    return $FieldTypes{$type}->{selection_type};
-}
-
-
-
-=head2 IsExternalValues
-
-=cut
-
-sub IsExternalValues {
-    my $self = shift;
-    return 0 unless $self->IsSelectionType( @_ );
-    return $self->ValuesClass eq 'RT::CustomFieldValues'? 0 : 1;
-}
-
-sub ValuesClass {
-    my $self = shift;
-    return $self->_Value( ValuesClass => @_ ) || 'RT::CustomFieldValues';
-}
-
-sub SetValuesClass {
-    my $self = shift;
-    my $class = shift || 'RT::CustomFieldValues';
-    
-    if ( $class eq 'RT::CustomFieldValues' ) {
-        return $self->_Set( Field => 'ValuesClass', Value => undef, @_ );
-    }
-
-    return (0, $self->loc("This Custom Field can not have list of values"))
-        unless $self->IsSelectionType;
-
-    unless ( $self->ValidateValuesClass( $class ) ) {
-        return (0, $self->loc("Invalid Custom Field values source"));
-    }
-    return $self->_Set( Field => 'ValuesClass', Value => $class, @_ );
-}
-
-sub ValidateValuesClass {
-    my $self = shift;
-    my $class = shift;
-
-    return 1 if !$class || $class eq 'RT::CustomFieldValues';
-    return 1 if grep $class eq $_, RT->Config->Get('CustomFieldValuesSources');
-    return undef;
-}
-
-
-=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
-
-=cut
-
-sub FriendlyType {
-    my $self = shift;
-
-    my $type = @_ ? shift : $self->Type;
-    my $max  = @_ ? shift : $self->MaxValues;
-    $max = 0 unless $max;
-
-    if (my $friendly_type = $FieldTypes{$type}->{labels}->[$max>2 ? 2 : $max]) {
-        return ( $self->loc( $friendly_type, $max ) );
-    }
-    else {
-        return ( $self->loc( $type ) );
-    }
-}
-
-sub FriendlyTypeComposite {
-    my $self = shift;
-    my $composite = shift || $self->TypeComposite;
-    return $self->FriendlyType(split(/-/, $composite, 2));
-}
-
-
-=head2 ValidateType TYPE
-
-Takes a single string. returns true if that string is a value
-type of custom field
-
-
-=cut
-
-sub ValidateType {
-    my $self = shift;
-    my $type = shift;
-
-    if ( $type =~ s/(?:Single|Multiple)$// ) {
-        $RT::Logger->warning( "Prefix 'Single' and 'Multiple' to Type deprecated, use MaxValues instead at (". join(":",caller).")");
-    }
-
-    if ( $FieldTypes{$type} ) {
-        return 1;
-    }
-    else {
-        return undef;
-    }
-}
-
-
-sub SetType {
-    my $self = shift;
-    my $type = shift;
-    if ($type =~ s/(?:(Single)|Multiple)$//) {
-        $RT::Logger->warning("'Single' and 'Multiple' on SetType deprecated, use SetMaxValues instead at (". join(":",caller).")");
-        $self->SetMaxValues($1 ? 1 : 0);
-    }
-    $self->_Set(Field => 'Type', Value =>$type);
-}
-
-=head2 SetPattern STRING
-
-Takes a single string representing a regular expression.  Performs basic
-validation on that regex, and sets the C field for the CF if it
-is valid.
-
-=cut
-
-sub SetPattern {
-    my $self = shift;
-    my $regex = shift;
-
-    my ($ok, $msg) = $self->_IsValidRegex($regex);
-    if ($ok) {
-        return $self->_Set(Field => 'Pattern', Value => $regex);
-    }
-    else {
-        return (0, $self->loc("Invalid pattern: [_1]", $msg));
-    }
-}
-
-=head2 _IsValidRegex(Str $regex) returns (Bool $success, Str $msg)
-
-Tests if the string contains an invalid regex.
-
-=cut
-
-sub _IsValidRegex {
-    my $self  = shift;
-    my $regex = shift or return (1, 'valid');
-
-    local $^W; local $@;
-    local $SIG{__DIE__} = sub { 1 };
-    local $SIG{__WARN__} = sub { 1 };
-
-    if (eval { qr/$regex/; 1 }) {
-        return (1, 'valid');
-    }
-
-    my $err = $@;
-    $err =~ s{[,;].*}{};    # strip debug info from error
-    chomp $err;
-    return (0, $err);
-}
-
-
-=head2 SingleValue
-
-Returns true if this CustomField only accepts a single value. 
-Returns false if it accepts multiple values
-
-=cut
-
-sub SingleValue {
-    my $self = shift;
-    if (($self->MaxValues||0) == 1) {
-        return 1;
-    } 
-    else {
-        return undef;
-    }
-}
-
-sub UnlimitedValues {
-    my $self = shift;
-    if (($self->MaxValues||0) == 0) {
-        return 1;
-    } 
-    else {
-        return undef;
-    }
-}
-
-
-=head2 CurrentUserHasRight RIGHT
-
-Helper function to call the custom field's queue's CurrentUserHasRight with the passed in args.
-
-=cut
-
-sub CurrentUserHasRight {
-    my $self  = shift;
-    my $right = shift;
-
-    return $self->CurrentUser->HasRight(
-        Object => $self,
-        Right  => $right,
-    );
-}
-
-=head2 ACLEquivalenceObjects
-
-Returns list of objects via which users can get rights on this custom field. For custom fields
-these objects can be set using L.
-
-=cut
-
-sub ACLEquivalenceObjects {
-    my $self = shift;
-
-    my $ctx = $self->ContextObject
-        or return;
-    return ($ctx, $ctx->ACLEquivalenceObjects);
-}
-
-=head2 ContextObject and SetContextObject
-
-Set or get a context for this object. It can be ticket, queue or another object
-this CF applies to. Used for ACL control, for example SeeCustomField can be granted on
-queue level to allow people to see all fields applied to the queue.
-
-=cut
-
-sub SetContextObject {
-    my $self = shift;
-    return $self->{'context_object'} = shift;
-}
-  
-sub ContextObject {
-    my $self = shift;
-    return $self->{'context_object'};
-}
-
-sub ValidContextType {
-    my $self = shift;
-    my $class = shift;
-
-    my %valid;
-    $valid{$_}++ for split '-', $self->LookupType;
-    delete $valid{'RT::Transaction'};
-
-    return $valid{$class};
-}
-
-=head2 LoadContextObject
-
-Takes an Id for a Context Object and loads the right kind of RT::Object
-for this particular Custom Field (based on the LookupType) and returns it.
-This is a good way to ensure you don't try to use a Queue as a Context
-Object on a User Custom Field.
-
-=cut
-
-sub LoadContextObject {
-    my $self = shift;
-    my $type = shift;
-    my $contextid = shift;
-
-    unless ( $self->ValidContextType($type) ) {
-        RT->Logger->debug("Invalid ContextType $type for Custom Field ".$self->Id);
-        return;
-    }
-
-    my $context_object = $type->new( $self->CurrentUser );
-    my ($id, $msg) = $context_object->LoadById( $contextid );
-    unless ( $id ) {
-        RT->Logger->debug("Invalid ContextObject id: $msg");
-        return;
-    }
-    return $context_object;
-}
-
-=head2 ValidateContextObject
-
-Ensure that a given ContextObject applies to this Custom Field.
-For custom fields that are assigned to Queues or to Classes, this checks that the Custom
-Field is actually applied to that objects.  For Global Custom Fields, it returns true
-as long as the Object is of the right type, because you may be using
-your permissions on a given Queue of Class to see a Global CF.
-For CFs that are only applied Globally, you don't need a ContextObject.
-
-=cut
-
-sub ValidateContextObject {
-    my $self = shift;
-    my $object = shift;
-
-    return 1 if $self->IsApplied(0);
-
-    # global only custom fields don't have objects
-    # that should be used as context objects.
-    return if $self->ApplyGlobally;
-
-    # Otherwise, make sure we weren't passed a user object that we're
-    # supposed to treat as a queue.
-    return unless $self->ValidContextType(ref $object);
-
-    # Check that it is applied correctly
-    my ($applied_to) = grep {ref($_) eq $self->RecordClassFromLookupType} ($object, $object->ACLEquivalenceObjects);
-    return unless $applied_to;
-    return $self->IsApplied($applied_to->id);
-}
-
-
-sub _Set {
-    my $self = shift;
-
-    unless ( $self->CurrentUserHasRight('AdminCustomField') ) {
-        return ( 0, $self->loc('Permission Denied') );
-    }
-    return $self->SUPER::_Set( @_ );
-
-}
-
-
-
-=head2 _Value
-
-Takes the name of a table column.
-Returns its value as a string, if the user passes an ACL check
-
-=cut
-
-sub _Value {
-    my $self  = shift;
-    return undef unless $self->id;
-
-    # we need to do the rights check
-    unless ( $self->CurrentUserHasRight('SeeCustomField') ) {
-        $RT::Logger->debug(
-            "Permission denied. User #". $self->CurrentUser->id
-            ." has no SeeCustomField right on CF #". $self->id
-        );
-        return (undef);
-    }
-    return $self->__Value( @_ );
-}
-
-
-=head2 SetDisabled
-
-Takes a boolean.
-1 will cause this custom field to no longer be avaialble for objects.
-0 will re-enable this field.
-
-=cut
-
-
-=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 $old = $self->TypeComposite;
-
-    my ($type, $max_values) = split(/-/, $composite, 2);
-    if ( $type ne $self->Type ) {
-        my ($status, $msg) = $self->SetType( $type );
-        return ($status, $msg) unless $status;
-    }
-    if ( ($max_values || 0) != ($self->MaxValues || 0) ) {
-        my ($status, $msg) = $self->SetMaxValues( $max_values );
-        return ($status, $msg) unless $status;
-    }
-    my $render = $self->RenderType;
-    if ( $render and not grep { $_ eq $render } $self->RenderTypes ) {
-        # We switched types and our render type is no longer valid, so unset it
-        # and use the default
-        $self->SetRenderType( undef );
-    }
-    return 1, $self->loc(
-        "Type changed from '[_1]' to '[_2]'",
-        $self->FriendlyTypeComposite( $old ),
-        $self->FriendlyTypeComposite( $composite ),
-    );
-}
-
-=head2 TypeComposite
-
-Returns a composite value composed of this object's type and maximum values
-
-=cut
-
-
-sub TypeComposite {
-    my $self = shift;
-    return join '-', ($self->Type || ''), ($self->MaxValues || 0);
-}
-
-=head2 TypeComposites
-
-Returns an array of all possible composite values for custom fields.
-
-=cut
-
-sub TypeComposites {
-    my $self = shift;
-    return grep !/(?:[Tt]ext|Combobox|Date|DateTime|TimeValue)-0/, map { ("$_-1", "$_-0") } $self->Types;
-}
-
-=head2 RenderType
-
-Returns the type of form widget to render for this custom field.  Currently
-this only affects fields which return true for L. 
-
-=cut
-
-sub RenderType {
-    my $self = shift;
-    return '' unless $self->HasRenderTypes;
-
-    return $self->_Value( 'RenderType', @_ )
-        || $self->DefaultRenderType;
-}
-
-=head2 SetRenderType TYPE
-
-Sets this custom field's render type.
-
-=cut
-
-sub SetRenderType {
-    my $self = shift;
-    my $type = shift;
-    return (0, $self->loc("This custom field has no Render Types"))
-        unless $self->HasRenderTypes;
-
-    if ( !$type || $type eq $self->DefaultRenderType ) {
-        return $self->_Set( Field => 'RenderType', Value => undef, @_ );
-    }
-
-    if ( not grep { $_ eq $type } $self->RenderTypes ) {
-        return (0, $self->loc("Invalid Render Type for custom field of type [_1]",
-                                $self->FriendlyType));
-    }
-
-    return $self->_Set( Field => 'RenderType', Value => $type, @_ );
-}
-
-=head2 DefaultRenderType [TYPE COMPOSITE]
-
-Returns the default render type for this custom field's type or the TYPE
-COMPOSITE specified as an argument.
-
-=cut
-
-sub DefaultRenderType {
-    my $self = shift;
-    my $composite    = @_ ? shift : $self->TypeComposite;
-    my ($type, $max) = split /-/, $composite, 2;
-    return unless $type and $self->HasRenderTypes($composite);
-    return $FieldTypes{$type}->{render_types}->{ $max == 1 ? 'single' : 'multiple' }[0];
-}
-
-=head2 HasRenderTypes [TYPE_COMPOSITE]
-
-Returns a boolean value indicating whether the L and
-L methods make sense for this custom field.
-
-Currently true only for type C
-% } else {
-
-% }
-
-
-
-
-
-
-
-
-
-
-<&| /Widgets/TitleBox, title => loc('Identity') &> - - - - - - - - - -
-<&|/l&>Username: - - <&|/l&>(required) -
-<&|/l&>Email: - - -
-<&|/l&>Real Name: - - -
-<&|/l&>Nickname: - - -
-<&|/l&>Unix login: - - -
-<&|/l&>Language: - -<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang||$Lang &> -
-<&|/l&>Extra info: - - -
- -
- -<&| /Widgets/TitleBox, title => loc('Customers') &> -<& /Elements/EditCustomers, Object => $UserObj, CustomerString=> $CustomerString, ServiceString => $ServiceString &> - -
- -<&| /Widgets/TitleBox, title => loc('Access control') &> - - /> -<&|/l&>Let this user access RT
- - - - /> <&|/l&>Let this user be granted rights (<&|/l&>Privileged)
- -<& /Elements/EditPassword, - User => $UserObj, - Name => [qw(CurrentPass Pass1 Pass2)], -&> - -% $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj ); -
-<&| /Widgets/TitleBox, title => loc('Location') &> - - - - - - - - -
-<&|/l&>Organization: - - -
-<&|/l&>Address1: - - -
-<&|/l&>Address2: - - -
-<&|/l&>City: - - - -
-<&|/l&>State: - - - -
-<&|/l&>Zip: - - -
-<&|/l&>Country: - - -
- -
-<&| /Widgets/TitleBox, title => loc('Phone numbers') &> - - - - - - -
-<&|/l&>Residence: - -
-
-<&|/l&>Work: - -
-
-<&|/l&>Mobile: - -
-
-<&|/l&>Pager: - -
-
- -
-<&| /Widgets/TitleBox, title => loc('Custom Fields') &> - -% my $CFs = $UserObj->CustomFields; -% while (my $CF = $CFs->Next) { - -% } -
-<% loc($CF->Name) %>: - -% if ($UserObj->id) { -<& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &> -% } else { -<& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User--CustomField-', CustomField => $CF &> -% } -
- -% $m->callback( %ARGS, CallbackName => 'RightColumnBottom', UserObj => $UserObj ); -
-<&| /Widgets/TitleBox, title => loc('Comments about this user') &> - - -%if (!$Create && $UserObj->Privileged) { -
-<&| /Widgets/TitleBox, title => loc('Signature') &> - - -% } - -
- -% if ( $Create ) { -<& /Elements/Submit, Label => loc('Create') &> -% } else { -<& /Elements/Submit, Label => loc('Save Changes') &> -% } - - -<%INIT> - -my $UserObj = RT::User->new($session{'CurrentUser'}); -my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results); - -my ($val, $msg); - -if ($Create) { - $title = loc("Create a new user"); -} -else { - - if ( defined $id && $id eq 'new') { - ( $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; - push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); - } else { - push @results, loc('User could not be created: [_1]', $msg); - } - } 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; - } -} - - -$m->callback( %ARGS, CallbackName => 'BeforeUpdate', User => $UserObj, ARGSRef => \%ARGS, Results => \@results ); - - -# If we have a user to modify, lets try. -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 - ); - - my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, - Object => $UserObj, - ARGSRef => \%ARGS ); - push (@results,@fieldresults); - push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); - - #deal with freeside customer links - push @results, ProcessObjectCustomers( ARGSRef => \%ARGS, Object => $UserObj ); - - # {{{ 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. - $Disabled = $Enabled ? 0 : 1; - - if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { - my ($code, $msg) = $UserObj->SetDisabled($Disabled); - push @results, $msg; - } - - -} - - -my %password_cond = $UserObj->CurrentUserRequireToSetPassword; -if ( $UserObj->Id ) { - # Deal with Password field - my ($status, $msg) = $UserObj->SafeSetPassword( - Current => $CurrentPass, - New => $Pass1, - Confirmation => $Pass2, - ); - push @results, $msg; - - if ( $id eq 'new' && !$status ) { - push @results, loc("A password was not set, so user won't be able to login."); - } -} - - -# Do some setup for the ui -unless ( $UserObj->id && $UserObj->Disabled ) { - $EnabledChecked = 'checked="checked"'; -} - -if ((!$Create && $UserObj->Privileged()) or (!$UserObj->Id and $Privileged)) { - $PrivilegedChecked = 'checked="checked"'; -} - -# This code does automatic redirection if any updates happen. -MaybeRedirectForResults( - Actions => \@results, - Arguments => { id => $UserObj->Id }, -) if $UserObj->Id; - - - - -<%ARGS> -$id => undef -$Name => undef -$Comments => undef -$Signature => undef -$EmailAddress => undef -$FreeformContactInfo => undef -$Organization => undef -$RealName => undef -$NickName => undef -$Privileged => undef -$SetPrivileged => undef -$Enabled => undef -$SetEnabled => undef -$Lang => undef -$EmailEncoding => undef -$WebEncoding => undef -$ExternalContactInfoId => undef -$ContactInfoSystem => undef -$Gecos => undef -$ExternalAuthId => undef -$AuthSystem => undef -$HomePhone => undef -$WorkPhone => undef -$MobilePhone => undef -$PagerPhone => undef -$Address1 => undef -$Address2 => undef -$City => undef -$State => undef -$Zip => undef -$Country => undef -$CurrentPass => undef -$Pass1 => undef -$Pass2 => undef -$Create=> undef -$OnlySearchForCustomers => undef -$OnlySearchForServices => undef -$CustomerString => undef -$ServiceString => undef - diff --git a/rt/share/html/Elements/.CalendarDaySchedule.swp b/rt/share/html/Elements/.CalendarDaySchedule.swp deleted file mode 100644 index f79cd09384c0d5046c704cf9a0b2fe6c897440c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 diff --git a/rt/share/html/NoAuth/css/.calendar.css.swp b/rt/share/html/NoAuth/css/.calendar.css.swp deleted file mode 100644 index cbc46cd5ee11554575bf10adad9a62fd68532534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2O^6&t6vt~-5{<3~BPfd4ItV5@Gd;UIn`Qc7B%3vU#Y0dGDpE65J=1JWSJPdy zyR+*mf}ooOKSC~oxd|$gL{K~!JqRXx@F3{HC>Rtkq9?(Rc=F#p-8&!Kvor3=mFnV0 zPfyo-UGHD7Ue~fyHXpt3A!B!Lg5cOr$iC+uIQZ*>d&tQ;A)R(0yqag0PlnM!0TWcQ~?M3!A`IP{Jo8kzrdg1Jop@(182bra1X_=aVsHTfm7fZcm=!+9B@C_5AFp!!FDhLzDHhs2#$keAj*?XnCE)P zS^=%VW>8?67&yw(XWY-0rBbq9G78>;5lG=MBg3P^>g*-Btp@c`((Bu0-eIbSySK+) zX=S$R%ZAHJ?Z+uv7Ch&xh2+<1hGIEE%UlG;65bcB@vK^AD^f@w_Iqch_sz^$B-Oqm zUFAy=lxlL0`)xnCP!1lHrNXJYC8O>zCU{rOzEiCY4EjGVUlM*h@SbURrHiOjrK9tl z&(f+~V;c*zj%kwziu;Tr{TT986ew~W6DdJsAuPaN~?y#i}wJcfFh~}-gI7DT| z?p)5p`s~Ppq-agVRjapVpx~v%V%r;fE^BL6r+(FOS1a?Rx6nTjlc9Cq4$GpTUcgI6 z@~L&Z6-~i35zX559v4_!NQ#;lt?%)q@}z*uQ#0QXSGAcb10@xlfjOy8C2}Z`^g1YiYC8`5w)+6=_wr zOwkORMWW>yIE%;@GdIQS7V#)!j$17m6Jgq|nUYMD-mRBNsbkMjEEbVg*Z~yAU}r@8 zg|X0u(aMbRq8a-0WZ)=Ax+Pl1W}~6FMVJ$Kf;LNKAuF>M>DmA=XD+9t6w2}9G8TB$ z&EXRH+SN1ZW~_Ed{2I}Fsxy+iUl)Gv!BV*YEV8GR5^3p JO3Vwe`3H+cez^bu diff --git a/rt/share/html/Schedule/.UserBar.swp b/rt/share/html/Schedule/.UserBar.swp deleted file mode 100644 index 0dcd4315e9dd49ffd863751b7fd652e2ab59c454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 I$XG7%pQn)HG5`Po diff --git a/rt/share/html/Search/.Schedule.html.swp b/rt/share/html/Search/.Schedule.html.swp deleted file mode 100644 index e88b29135073ad3cfd60d914538678ab80113131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&u<$=6vwA6zXB9cfr{gce{^ld$tG1ai0^pUcAB`YTG2z%uJrN7GxOfO z`OeInwX&7*H%^|Rm&cAWT+cCfR-P&!y*AArD>LS-S)rG))vp6i5_E6i5_E6i5_E6i5_E6nNMbP>nt8G6u0X9>{Wh-?QT$e@$+Q0*L~N z0*L~N0*L~N0*L~N0*L~N0*L~N0*L|-p#t1yY-t~3KRklq@&Ets@Bg2kW$XsH2EGJk zumI-4KCl=3{tRO`!FBL8_yAl5OP~aXz>WQkeF2)_RWJm8e44TE!6)E6mj|%CmH(&2yhU*2!0!4>??2%oB}7naWDlY!7z9UTz`VGE8sXd z0RDQMv7f=W;0h>%7r@QOFedOh_zZjsJ_a9wIdBY2f+OHCNP!{n-J^_cfi~CxIbeW) zpzp8X7ofFn#r2E0kAfla2g;KxQ6N#^{uP)qv##%|5@Q)lc%B>?A-77I)55PQ=Zx!9 zmNLq%3#mk7lGWQ3HKQWAzRGQDXZG9WC$W!7x9z(rQf6lHM0vAUvPF3+ULy0|x9yRP zNkK@qE6DHzf7EZ*Md(`8Yiqz^I=jV)8cpfYbk+5QEKr>{Xp>Tz&6O=H@RjgYy(Lq$ zMHgB*j3VT9L41{O5CR%tnhMrM=(!abWmZxJ%8_9dI<_mZ@roVtT8&pcK`T}mNE!Le zYlmsbl%rwFX!%_3x$g-ZL)z3DMFB#ioR(rLRv1#xpPik9)LNRZsAxrtOQWUPz^}Ts z(b5T_a>gw8gm3fkybx<%yA0o$3L{S!FVd0mNlH(chaK%W_IId+@$J6eDGV%z6l*nT ztPP5#cwVBSt=m~xO{pT2o<&@ATa$DUH1s3|p`h+NY{V;4h1^murr8sG&Gl=yiLp2N zofv!H;sB4ivf=UeOjwh;{w-=s5&C+<`$Os$bt8;z^ssd!qxkNra`i) zpwZQAu=M>AjBg8jyZ!_AR=SGIMz+Eeg&yaByT$ze4x5USG%dZkFjq_|v7yXWzRsl; zx($^=?!I#aDlg6!Q`qfQ*$lmGNqC};WG>Cs3;MJfTa~HOwu1mqb@%B{cY)`?Y-xwf zER+%4ayk#7x&`H;=P{jfvT6Oewh}-2#V^h4BWtc3=4*l@Zx(3DRWRLt;2VVJtbYMX C5{H}s diff --git a/rt/share/html/Search/Bulk.html.orig b/rt/share/html/Search/Bulk.html.orig deleted file mode 100755 index 38ca64248..000000000 --- a/rt/share/html/Search/Bulk.html.orig +++ /dev/null @@ -1,460 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-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 &> -<& /Elements/Tabs &> - -<& /Elements/ListActions, actions => \@results &> -
-% foreach my $var (qw(Query Format OrderBy Order Rows Page SavedChartSearchId)) { - -%} -<& /Elements/CollectionList, - Query => $Query, - DisplayFormat => $Format, - Format => $ARGS{'Format'}, - Verbatim => 1, - AllowSorting => 1, - OrderBy => $OrderBy, - Order => $Order, - Rows => $Rows, - Page => $Page, - BaseURL => RT->Config->Get('WebPath')."/Search/Bulk.html?", - Class => 'RT::Tickets' - &> - -% $m->callback(CallbackName => 'AfterTicketList', ARGSRef => \%ARGS); - -
- -<& /Elements/Submit, Label => loc('Update'), CheckboxNameRegex => '/^UpdateTicket\d+$/', CheckAll => 1, ClearAll => 1 &> -
-<&|/Widgets/TitleBox, title => $title &> - - - - - -
- - - - - - - - - - - - - - - -
<&|/l&>Make Owner: <& /Elements/SelectOwner, Name => "Owner", Default => $ARGS{Owner} || '' &> -( /> <&|/l&>Force change)
<&|/l&>Add Requestor:
<&|/l&>Remove Requestor:
<&|/l&>Add Cc:
<&|/l&>Remove Cc:
<&|/l&>Add AdminCc:
<&|/l&>Remove AdminCc:
-
- - - - -% my $rel = ($ARGS{Priority} =~ s/^R//); - - - - - - - - - - - - - - - -
<&|/l&>Make subject:
<&|/l&>Make priority: <& /Elements/SelectPriority, Name => "Priority", Default => $ARGS{Priority} &> - -
<&|/l&>Make queue: <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &>
<&|/l&>Make Status: <& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &>
<&|/l&>Make date Starts: <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &>
<&|/l&>Make date Started: <& /Elements/SelectDate, Name => "Started_Date", Default => $ARGS{Started_Date} || '' &>
<&|/l&>Make date Told: <& /Elements/SelectDate, Name => "Told_Date", Default => $ARGS{Told_Date} || '' &>
<&|/l&>Make date Due: <& /Elements/SelectDate, Name => "Due_Date", Default => $ARGS{Due_Date} || '' &>
<&|/l&>Make date Resolved: <& /Elements/SelectDate, Name => "Resolved_Date", Default => $ARGS{Resolved_Date} || '' &>
- -
- -<&| /Widgets/TitleBox, title => loc('Add comments or replies to selected tickets') &> - - - - -% while (my $CF = $TxnCFs->Next()) { - - - - -% } # end if while - -<& /Ticket/Elements/AddAttachments, %ARGS &> - - -
<&|/l&>Update Type: -
<&|/l&>Subject: " />
<% $CF->Name %>:<& /Elements/EditCustomField, - CustomField => $CF, - NamePrefix => "Object-RT::Transaction--CustomField-", - Default => $ARGS{"Object-RT::Transaction--CustomField-" . $CF->id . '-Values'} || - $ARGS{"Object-RT::Transaction--CustomField-" . $CF->id . '-Value'}, - &><% $CF->FriendlyType %>
<&|/l&>Message: -%# Currently, bulk update always starts with Comment not Reply selected, so we check this unconditionally -% my $IncludeSignature = RT->Config->Get('MessageBoxIncludeSignatureOnComment'); -<& /Elements/MessageBox, Name => "UpdateContent", - $ARGS{UpdateContent} ? ( Default => $ARGS{UpdateContent}, IncludeSignature => 0 ) : - ( IncludeSignature => $IncludeSignature ), - &> -
- - - -<%perl> -my $cfs = RT::CustomFields->new($session{'CurrentUser'}); -$cfs->LimitToGlobal(); -$cfs->LimitToQueue($_) for keys %$seen_queues; - - -% if ($cfs->Count) { -<&|/Widgets/TitleBox, title => loc('Edit Custom Fields'), color => "#336633"&> - - - - - - -% while (my $cf = $cfs->Next()) { - - -% my $rows = 5; -% my $cf_id = $cf->id; -% my @add = (NamePrefix => 'Bulk-Add-CustomField-', CustomField => $cf, Rows => $rows, -% Multiple => ($cf->MaxValues ==1 ? 0 : 1) , Cols => 25, -% Default => $ARGS{"Bulk-Add-CustomField-$cf_id-Values"} || $ARGS{"Bulk-Add-CustomField-$cf_id-Value"}, ); -% my @del = (NamePrefix => 'Bulk-Delete-CustomField-', CustomField => $cf, -% Rows => $rows, Multiple => 1, Cols => 25, -% Default => $ARGS{"Bulk-Delete-CustomField-$cf_id-Values"} || $ARGS{"Bulk-Delete-CustomField-$cf_id-Value"}, ); -% if ($cf->Type eq 'Select') { - - -% } elsif ($cf->Type eq 'Combobox') { - - -% } elsif ($cf->Type eq 'Freeform') { - - -% } elsif ($cf->Type eq 'Text') { - - -% } elsif ($cf->Type eq 'Date') { - - -% } elsif ($cf->Type eq 'DateTime') { -% # Pass datemanip format to prevent another tz date conversion - - -% } else { -% $RT::Logger->crit("Unknown CustomField type: " . $cf->Type); -% } - -% } -
<&|/l&>Name<&|/l&>Add values<&|/l&>Delete values
<% loc($cf->Name) %>
-(<%$cf->FriendlyType%>)
<& /Elements/EditCustomFieldSelect, @add &><& /Elements/EditCustomFieldSelect, @del &><& /Elements/EditCustomFieldCombobox, @add &><& /Elements/EditCustomFieldCombobox, @del &><& /Elements/EditCustomFieldFreeform, @add &><& /Elements/EditCustomFieldFreeform, @del &><& /Elements/EditCustomFieldText, @add &> <& /Elements/EditCustomFieldDate, @add, Default => undef &><& /Elements/EditCustomFieldDate, @del, Default => undef &><& /Elements/EditCustomFieldDateTime, @add, Default => undef, Format => 'datemanip' &><& /Elements/EditCustomFieldDateTime, @del, Default => undef, Format => 'datemanip' &>
- -% } - -<&|/Widgets/TitleBox, title => loc('Edit Links'), color => "#336633"&> -<&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.
-<& /Ticket/Elements/BulkLinks, Tickets => $Tickets, $ARGS{'AddMoreAttach'} ? %ARGS : () &> - - -<& /Elements/Submit, Label => loc('Update') &> - - -
- - -<%INIT> -unless ( defined $Rows ) { - $Rows = $RowsPerPage; - $ARGS{Rows} = $RowsPerPage; -} -my $title = loc("Update multiple tickets"); - -# Iterate through the ARGS hash and remove anything with a null value. -map ( $ARGS{$_} =~ /^$/ && ( delete $ARGS{$_} ), keys %ARGS ); - -my (@results); - -ProcessAttachments(ARGSRef => \%ARGS); - -$Page ||= 1; - -$Format ||= RT->Config->Get('DefaultSearchResultFormat'); - -# inject _CHECKBOX to the first field. -$Format =~ s/'?([^']+)'?,/'___CHECKBOX__$1',/; #' - -my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); -$Tickets->FromSQL($Query); -if ( $OrderBy =~ /\|/ ) { - - # Multiple Sorts - my @OrderBy = split /\|/, $OrderBy; - my @Order = split /\|/, $Order; - $Tickets->OrderByCols( - map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } - ( 0 .. $#OrderBy ) ); -} -else { - $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); -} - -$Tickets->RowsPerPage($Rows) if ($Rows); -$Tickets->GotoPage( $Page - 1 ); # SB uses page 0 as the first page - -Abort( loc("No search to operate on.") ) unless ($Tickets); - -# build up a list of all custom fields for tickets that we're displaying, so -# we can display sane edit widgets. - -my $fields = {}; -my $seen_queues = {}; -while ( my $ticket = $Tickets->Next ) { - next if $seen_queues->{ $ticket->Queue }++; - - my $custom_fields = $ticket->CustomFields; - while ( my $field = $custom_fields->Next ) { - $fields->{ $field->id } = $field; - } -} - -#Iterate through each ticket we've been handed -my @linkresults; - -$Tickets->RedoSearch(); - -# pull out the labels for any custom fields we want to update - -my $cf_del_keys; -@$cf_del_keys = grep { /^Bulk-Delete-CustomField/ } keys %ARGS; -my $cf_add_keys; -@$cf_add_keys = grep { /^Bulk-Add-CustomField/ } keys %ARGS; - -if ( defined($ARGS{'Priority'}) - and ($ARGS{'Priority-Mode'} || '') eq 'relative' ) { - # magic in Ticket::SetPriority - $ARGS{'Priority'} = 'R'.$ARGS{'Priority'}; -} -delete $ARGS{'Priority-Mode'}; - -unless ( $ARGS{'AddMoreAttach'} ) { - # Add session attachments if any to be processed by ProcessUpdateMessage - $ARGS{'UpdateAttachments'} = $session{'Attachments'} if ( $session{'Attachments'} ); - - while ( my $Ticket = $Tickets->Next ) { - next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } ); - - #Update the links - $ARGS{'id'} = $Ticket->id; - - my @updateresults = ProcessUpdateMessage( - TicketObj => $Ticket, - ARGSRef => \%ARGS, - ); - - #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 ); - - foreach my $type (qw(MergeInto DependsOn MemberOf RefersTo)) { - $ARGS{ $Ticket->id . "-" . $type } = $ARGS{"Ticket-$type"}; - $ARGS{ $type . "-" . $Ticket->id } = $ARGS{"$type-Ticket"}; - } - @linkresults = - ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS ); - foreach my $type (qw(MergeInto DependsOn MemberOf RefersTo)) { - delete $ARGS{ $type . "-" . $Ticket->id }; - delete $ARGS{ $Ticket->id . "-" . $type }; - } - - my @cfresults; - - foreach my $list ( $cf_add_keys, $cf_del_keys ) { - next unless $list->[0]; - - - my $op; - if ( $list->[0] =~ /Add/ ) { - $op = 'add'; - - } - elsif ( $list->[0] =~ /Del/ ) { - $op = 'del'; - } - else { - $RT::Logger->crit( - "Got an op that was neither add nor delete. can never happen" - . $list->[0] ); - last; - } - - foreach my $key (@$list) { - my ( $cfid, $cf ); - next if $key =~ /CustomField-(\d+)-Category$/; - if ( $key =~ /CustomField-(\d+)-/ ) { - $cfid = $1; - $cf = RT::CustomField->new( $session{'CurrentUser'} ); - $cf->Load($cfid); - } - else {next} - my @values = - ref( $ARGS{$key} ) eq 'ARRAY' - ? @{ $ARGS{$key} } - : ( $ARGS{$key} ); - map { s/(\r\n|\r)/\n/g; } @values; # fix the newlines - # now break the multiline values into multivalues - @values = map { split( /\n/, $_ ) } @values - unless ( $cf->SingleValue ); - - my $current_values = $Ticket->CustomFieldValues($cfid); - - if ( $cf->Type eq 'DateTime' || $cf->Type eq 'Date' ){ - # Clear out empty string submissions to avoid - # Not set changed to Not set - @values = grep length, @values; - } - - foreach my $value (@values) { - - # Convert for timezone. Without converstion, - # HasEntry and DeleteCustomFieldValue fail because - # the value in the DB is converted. - if ( $op eq 'del' - && ($cf->Type eq 'DateTime' || $cf->Type eq 'Date') ){ - my $DateObj = RT::Date->new( $session{'CurrentUser'} ); - $DateObj->Set( Format => 'unknown', - Value => $value ); - $value = $cf->Type eq 'DateTime' ? $DateObj->ISO - : $DateObj->ISO(Time => 0, Seconds => 0); - } - - if ( $op eq 'del' && $current_values->HasEntry($value) ) { - my ( $id, $msg ) = $Ticket->DeleteCustomFieldValue( - Field => $cfid, - Value => $value - ); - push @cfresults, $msg; - } - - elsif ( $op eq 'add' && !$current_values->HasEntry($value) ) { - my ( $id, $msg ) = $Ticket->AddCustomFieldValue( - Field => $cfid, - Value => $value - ); - push @cfresults, $msg; - } - } - } - } - my @statusresults = - ProcessTicketStatus( TicketObj => $Ticket, ARGSRef => \%ARGS ); - - my @tempresults = ( - @watchresults, @basicresults, @dateresults, - @updateresults, @linkresults, @cfresults, - @statusresults - ); - - @tempresults = - map { - $_ =~ /^Ticket \d+:/ ? $_ : - loc( "Ticket [_1]: [_2]", $Ticket->Id, $_ ) - } @tempresults; - - @results = ( @results, @tempresults ); - } - - # Cleanup WebUI - delete $session{'Attachments'}; - - $Tickets->RedoSearch(); -} - -my $TxnCFs = RT::CustomFields->new( $session{CurrentUser} ); -$TxnCFs->LimitToLookupType( RT::Transaction->CustomFieldLookupType ); -$TxnCFs->LimitToGlobalOrObjectId( keys %$seen_queues ); - - -<%args> -$Format => undef -$Page => 1 -$Rows => undef -$RowsPerPage => undef -$Order => 'ASC' -$OrderBy => 'id' -$Query => undef -$SavedSearchId => undef -$SavedChartSearchId => undef - diff --git a/rt/share/html/Search/Results.tsv.orig b/rt/share/html/Search/Results.tsv.orig deleted file mode 100644 index 6d8253e78..000000000 --- a/rt/share/html/Search/Results.tsv.orig +++ /dev/null @@ -1,137 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-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 -$Query => '' -$OrderBy => 'id' -$Order => 'ASC' -$PreserveNewLines => 0 - -<%INIT> - -$r->content_type('text/tab-separated-values'); -$r->header_out('Content-Disposition' => 'attachment;filename="Results.tsv"'); - -my $DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $Format); - -my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat); - -my @columns; - -my $should_loc = { map { $_ => 1 } qw(Status) }; - -my $col_entry = sub { - my $col = shift; - # in tsv output, "#" is often a comment character but we use it for "id" - delete $col->{title} - if $col->{title} and $col->{title} =~ /^\s*#\s*$/; - return { - header => Encode::encode_utf8(loc($col->{title} || $col->{attribute})), - map => $m->comp( - "/Elements/ColumnMap", - Name => $col->{attribute}, - Attr => 'value' - ), - should_loc => $should_loc->{$col->{attribute}}, - } -}; - -if ($PreserveNewLines) { - my $col = []; - push @columns, $col; - for (@Format) { - if ($_->{title} eq 'NEWLINE') { - $col = []; - push @columns, $col; - } - else { - push @$col, $col_entry->($_); - } - } -} -else { - push @columns, [map { $_->{attribute} - ? $col_entry->($_) - : () } @Format]; -} - -for (@columns) { - $m->out(join("\t", map { $_->{header} } @$_)."\n"); -} - -my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); -$Tickets->FromSQL( $Query ); -if ( $OrderBy =~ /\|/ ) { - # Multiple Sorts - my @OrderBy = split /\|/, $OrderBy; - my @Order = split /\|/, $Order; - $Tickets->OrderByCols( - map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } - ( 0 .. $#OrderBy ) - ); -} -else { - $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); -} - -my $ii = 0; -while (my $row = $Tickets->Next) { - for my $col (@columns) { - $m->out(join("\t", map { - my $val = ProcessColumnMapValue($_->{map}, Arguments => [$row, $ii++], Escape => 0); - $val = loc($val) if $_->{should_loc}; - # remove tabs from all field values, they screw up the tsv - $val = '' unless defined $val; - $val =~ s/(?:\n|\r)//g; $val =~ s{\t}{ }g; - Encode::encode_utf8($val); - } @$col)."\n"); - } -} -$m->abort(); - - diff --git a/rt/share/html/Ticket/Create.html.orig b/rt/share/html/Ticket/Create.html.orig deleted file mode 100755 index 697db546b..000000000 --- a/rt/share/html/Ticket/Create.html.orig +++ /dev/null @@ -1,463 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-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, - onload => "function () { hide('Ticket-Create-details') }" &> -<& /Elements/Tabs &> - -<& /Elements/ListActions, actions => \@results &> - -
- - -% $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS ); - -% if ($gnupg_widget) { - <& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> -% } - -
- - -
- <&| /Widgets/TitleBox, title => loc("Basics"), class=>'ticket-info-basics' &> - - <& /Ticket/Elements/EditBasics, - InTable => 1, - fields => [ - { name => 'Queue', - comp => '/Elements/SelectQueue', - args => { - Name => 'Queue', - Default => $QueueObj->Name, - QueueObj => $QueueObj, - ShowNullOption => 0, - ShowAllQueues => 0, - OnChange => "document.getElementsByName('id')[0].value = 'refresh'; form.submit()", - }, - }, - { name => 'Status', - comp => '/Elements/SelectStatus', - args => { - Name => "Status", - Default => $ARGS{Status} || $QueueObj->Lifecycle->DefaultOnCreate, - DefaultValue => 0, - SkipDeleted => 1, - QueueObj => $QueueObj, - }, - }, - { name => 'Owner', - comp => '/Elements/SelectOwner', - args => { - Name => "Owner", - Default => $ARGS{Owner} || RT->Nobody->Id, - DefaultValue => 0, - QueueObj => $QueueObj, - }, - } - ] - &> - -% $m->callback( CallbackName => 'AfterOwner', ARGSRef => \%ARGS ); - - <& /Ticket/Elements/EditCustomFields, %ARGS, QueueObj => $QueueObj, InTable => 1 &> - <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, QueueObj => $QueueObj, InTable => 1 &> -
- -% $m->callback( CallbackName => 'AfterBasics', QueueObj => $QueueObj, ARGSRef => \%ARGS ); -
- -
- <&| /Widgets/TitleBox, title => $title, class => 'messagedetails' &> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -% if ( $gnupg_widget ) { - -% } - - - - - - <& /Ticket/Elements/AddAttachments, %ARGS, QueueObj => $QueueObj &> -
-<&|/l&>Requestors: - -<& /Elements/EmailInput, Name => 'Requestors', Size => undef, Default => exists($ARGS{Requestors}) ? $ARGS{Requestors} : $session{CurrentUser}->EmailAddress &> -% $m->callback( CallbackName => 'AfterRequestors', QueueObj => $QueueObj, ARGSRef => \%ARGS ); -
-<&|/l&>Cc: -<& /Elements/EmailInput, Name => 'Cc', Size => undef, Default => $ARGS{Cc} &>
  - - <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will receive future updates.) - -
-<&|/l&>Admin Cc: -<& /Elements/EmailInput, Name => 'AdminCc', Size => undef, Default => $ARGS{AdminCc} &>
  - - <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people will receive future updates.) - -
-<&|/l&>Subject: - - -% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); -
  -<& /Elements/GnuPG/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &> -
-<&|/l&>Describe the issue below:
-% if ( RT->Config->Get('ArticleOnTicketCreate')) { -<& /Articles/Elements/BeforeMessageBox, %ARGS, QueueObj => $QueueObj &> -% } -% $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'BeforeMessageBox' ); -% if (exists $ARGS{Content}) { -<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> -% } else { -<& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &> -%} -% $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'AfterMessageBox' ); - -
-
- - <& /Elements/Submit, Label => loc("Create"), id => 'SubmitTicket' &> -
-
- -
- - - - - - - -
-
- <&| /Widgets/TitleBox, title => loc('The Basics'), - title_class=> 'inverse', - color => "#993333" &> - - - - - - - - - - - - -
<&|/l&>Priority:<& /Elements/SelectPriority, - Name => "InitialPriority", - Default => $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority, -&>
<&|/l&>Final Priority:<& /Elements/SelectPriority, - Name => "FinalPriority", - Default => $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority, -&>
<&|/l&>Time Estimated: -<& /Elements/EditTimeValue, Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '', InUnits => $ARGS{'TimeEstimated-TimeUnits'} &> - -
<&|/l&>Time Worked: -<& /Elements/EditTimeValue, Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '', InUnits => $ARGS{'TimeWorked-TimeUnits'} &> -
<&|/l&>Time Left: -<& /Elements/EditTimeValue, Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '', InUnits => $ARGS{'TimeLeft-TimeUnits'} &> -
- -
-
-<&|/Widgets/TitleBox, title => loc("Dates"), - title_class=> 'inverse', - color => "#663366" &> - - - - -
<&|/l&>Starts:<& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || '' &>
<&|/l&>Due:<& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || '' &>
- -
-
-
-
- -
- -
-<& /Elements/Submit, Label => loc("Create") &> -
-
- -<%INIT> -$m->callback( CallbackName => "Init", ARGSRef => \%ARGS ); -my $Queue = $ARGS{Queue}; -$session{DefaultQueue} = $Queue; - -if ($CloneTicket) { - my $CloneTicketObj = RT::Ticket->new( $session{CurrentUser} ); - $CloneTicketObj->Load($CloneTicket) - or Abort( loc("Ticket could not be loaded") ); - - my $clone = { - Requestors => join( ',', $CloneTicketObj->RequestorAddresses ), - Cc => join( ',', $CloneTicketObj->CcAddresses ), - AdminCc => join( ',', $CloneTicketObj->AdminCcAddresses ), - InitialPriority => $CloneTicketObj->Priority, - }; - - $clone->{$_} = $CloneTicketObj->$_() - for qw/Owner Subject FinalPriority Status/; - # not TimeWorked, TimeEstimated, or TimeLeft - - $clone->{$_} = $CloneTicketObj->$_->AsString - for grep { $CloneTicketObj->$_->Unix } - map { $_ . "Obj" } qw/Starts Started Due Resolved/; - - my $members = $CloneTicketObj->Members; - my ( @members, @members_of, @refers, @refers_by, @depends, @depends_by ); - my $refers = $CloneTicketObj->RefersTo; - my $get_link_value = sub { - my ($link, $type) = @_; - my $uri_method = $type . 'URI'; - my $local_method = 'Local' . $type; - my $uri = $link->$uri_method; - return if $uri->IsLocal and - $uri->Object and - $uri->Object->isa('RT::Ticket') and - $uri->Object->Type eq 'reminder'; - - return $link->$local_method || $uri->URI; - }; - while ( my $refer = $refers->Next ) { - my $refer_value = $get_link_value->($refer, 'Target'); - push @refers, $refer_value if defined $refer_value; - } - $clone->{'new-RefersTo'} = join ' ', @refers; - - my $refers_by = $CloneTicketObj->ReferredToBy; - while ( my $refer_by = $refers_by->Next ) { - my $refer_by_value = $get_link_value->($refer_by, 'Base'); - push @refers_by, $refer_by_value if defined $refer_by_value; - } - $clone->{'RefersTo-new'} = join ' ', @refers_by; - - my $cfs = $CloneTicketObj->QueueObj->TicketCustomFields(); - while ( my $cf = $cfs->Next ) { - next if $cf->FirstAttribute('NoClone'); - my $cf_id = $cf->id; - my $cf_values = $CloneTicketObj->CustomFieldValues( $cf->id ); - my @cf_values; - while ( my $cf_value = $cf_values->Next ) { - push @cf_values, $cf_value->Content; - } - - if ( @cf_values > 1 && $cf->Type eq 'Select' ) { - $clone->{"Object-RT::Ticket--CustomField-$cf_id-Value"} = \@cf_values; - } - else { - $clone->{"Object-RT::Ticket--CustomField-$cf_id-Value"} = join "\n", - @cf_values; - } - } - - # Pass customer links along (even though cloning of parent links - # in general is disabled). - my $customers = $CloneTicketObj->Customers; - my @customers; - while ( my $customer = $customers->Next ) { - my ($custnum) = $customer->Target =~ /cust_main\/(\d+)$/; - push @customers, $custnum if $custnum; - } - $clone->{'new-Customer'} = join(' ', @customers); - - for ( keys %$clone ) { - $ARGS{$_} = $clone->{$_} if not defined $ARGS{$_}; - } - -} - -my @results; - -my $title = loc("Create a new ticket"); - -my $QueueObj = RT::Queue->new($session{'CurrentUser'}); -$QueueObj->Load($Queue) || Abort(loc("Queue could not be loaded.")); - -$m->callback( QueueObj => $QueueObj, title => \$title, results => \@results, ARGSRef => \%ARGS ); - -$QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue.")); - -my $CFs = $QueueObj->TicketCustomFields(); - -my $ValidCFs = $m->comp( - '/Elements/ValidateCustomFields', - CustomFields => $CFs, - ARGSRef => \%ARGS -); - -ProcessAttachments(ARGSRef => \%ARGS); - -my $checks_failure = 0; - -my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS ); -$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process', - self => $gnupg_widget, - QueueObj => $QueueObj, -); - - -if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) { - my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check', - self => $gnupg_widget, - Operation => 'Create', - QueueObj => $QueueObj, - ); - $checks_failure = 1 unless $status; -} - -# check email addresses for RT's -{ - foreach my $field ( qw(Requestors Cc AdminCc) ) { - my $value = $ARGS{ $field }; - next unless defined $value && length $value; - - my @emails = Email::Address->parse( $value ); - foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { - push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc($field =~ /^(.*?)s?$/) ); - $checks_failure = 1; - $email = undef; - } - $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; - } -} - -my $skip_create = 0; -$m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, - checks_failure => $checks_failure, results => \@results ); - -$m->comp( '/Articles/Elements/CheckSkipCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, - checks_failure => $checks_failure, results => \@results ); - -if ((!exists $ARGS{'AddMoreAttach'}) and (defined($ARGS{'id'}) and $ARGS{'id'} eq 'new')) { # new ticket? - if ( $ValidCFs && !$checks_failure && !$skip_create ) { -# CREATE THE TICKET. -# For some reason it's done by a Mason component named "Display.html" -# and the call is buried in obscure error-handling stuff. -# This comment exists to make it more visually obvious. -# ************************************************************ - - $m->comp('Display.html', %ARGS); - -# ************************************************************ -# Execution should not continue here. Display.html calls -# Redirect() which does an $m->abort. We only get here if the -# code dies before then, hence "$@". - $RT::Logger->crit("After display call; error is $@"); - $m->abort(); - } - elsif ( !$ValidCFs ) { - # Invalid CFs - while (my $CF = $CFs->Next) { - my $msg = $m->notes('InvalidField-' . $CF->Id) or next; - push @results, $CF->Name . ': ' . $msg; - } - } -} -PageMenu->child( basics => raw_html => q[] . loc('Basics') . q[]); -PageMenu->child( details => raw_html => q[] . loc('Details') . q[]); - - -<%ARGS> -$DependsOn => undef -$DependedOnBy => undef -$MemberOf => undef -$QuoteTransaction => undef -$CloneTicket => undef - diff --git a/rt/share/html/Ticket/Elements/EditTransactionCustomFields.orig b/rt/share/html/Ticket/Elements/EditTransactionCustomFields.orig deleted file mode 100644 index a52ecc349..000000000 --- a/rt/share/html/Ticket/Elements/EditTransactionCustomFields.orig +++ /dev/null @@ -1,112 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-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 }}} -% $m->callback( CallbackName => 'BeforeTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, NamePrefix => $NamePrefix ); -% if ( $WRAP ) { -<<% $WRAP %> class="edit-transaction-custom-fields"> -% } -% if ($CustomFields->Count) { -% while (my $CF = $CustomFields->Next()) { -% $CF->SetContextObject($TicketObj || $QueueObj); -% next unless $CF->CurrentUserHasRight('ModifyCustomField'); -% next unless $CF->UILocation eq $UILocation; -<<% $FIELD %>> -<<% $CELL %> class="label cflabel"> - <% loc($CF->Name) %>:
-% if ( $CF->Type ne 'TimeValue' ) { - <% $CF->FriendlyType %> -% } -> -<<% $CELL %>> -<& /Elements/EditCustomField, - CustomField => $CF, - NamePrefix => $NamePrefix -&> -% if (my $msg = $m->notes('InvalidField-' . $CF->Id)) { -
- <% $msg %> -% } -> -> -% } -% } -% if ( $WRAP ) { -> -% } -% $m->callback( CallbackName => 'AfterTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, NamePrefix => $NamePrefix ); - -<%INIT> -my $CustomFields; - -if ($TicketObj) { - $CustomFields = $TicketObj->TransactionCustomFields(); -} else { - $CustomFields = $QueueObj->TicketTransactionCustomFields(); -} - -$m->callback( CallbackName => 'MassageTransactionCustomFields', CustomFields => $CustomFields ); - -$AsTable ||= $InTable; -my $FIELD = $AsTable ? 'tr' : 'div'; -my $CELL = $AsTable ? 'td' : 'div'; -my $WRAP = ''; -if ( $AsTable ) { - $WRAP = 'table' unless $InTable; -} else { - $WRAP = 'div'; -} - - -<%ARGS> -$NamePrefix => "Object-RT::Transaction--CustomField-" -$TicketObj => undef -$QueueObj => undef -$AsTable => 0 -$InTable => 0 -$UILocation => '' - - diff --git a/rt/share/html/Ticket/Update.html.orig b/rt/share/html/Ticket/Update.html.orig deleted file mode 100755 index ae6b70095..000000000 --- a/rt/share/html/Ticket/Update.html.orig +++ /dev/null @@ -1,353 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work 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., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-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 &> -<& /Elements/Tabs &> - -% $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $TicketObj); -<& /Elements/ListActions, actions => \@results &> - -
-% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS, Ticket => $TicketObj, CanRespond => $CanRespond, CanComment => $CanComment, ResponseDefault => $ResponseDefault, CommentDefault => $CommentDefault ); - - - - -<& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> - -
- <&|/Widgets/TitleBox, title => loc('Ticket and Transaction') &> - -% $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj); - -<& /Ticket/Elements/EditTransactionCustomFields, - %ARGS, - TicketObj => $TicketObj, - UILocation => 'TimeWorked', -&> - -% my $skip; -% $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip ); -% if (!$skip) { -
-% } - - - - - -<& /Ticket/Elements/EditBasics, - TicketObj => $TicketObj, - InTable => 1, - fields => [ - { name => 'Status', - comp => '/Elements/SelectStatus', - args => { - Name => 'Status', - DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), - Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus), - TicketObj => $TicketObj, - QueueObj => $TicketObj->QueueObj, - onchange => 'changeStatus()' - }, - }, - { name => 'Resolve this Ticket on', - comp => '/Elements/SelectDate', - args => { - menu_prefix => 'WillResolve', - current => 0, - ShowTime => 0, - }, - }, - { name => 'Owner', - comp => '/Elements/SelectOwner', - args => { - Name => "Owner", - TicketObj => $TicketObj, - QueueObj => $TicketObj->QueueObj, - DefaultLabel => loc("[_1] (Unchanged)", $m->scomp('/Elements/ShowUser', User => $TicketObj->OwnerObj)), - Default => $ARGS{'Owner'} - } - }, - { name => 'Worked', - comp => '/Elements/EditTimeValue', - args => { - Name => 'UpdateTimeWorked', - Default => $ARGS{UpdateTimeWorked}||'', - InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes', - } - }, - ] -&> - - - -% $m->callback( %ARGS, CallbackName => 'AfterWorked', Ticket => $TicketObj ); - -<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj, AsTable => 1 &> - - - - - -
- <& /Ticket/Elements/ShowSimplifiedRecipients, TicketObj => $TicketObj, %ARGS &> - - <&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &> -
<&|/l&>Update Type: - - - -% $m->callback( %ARGS, CallbackName => 'AfterUpdateType' ); -
-<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> - -% if ( $gnupg_widget ) { - -% } -% $m->callback( %ARGS, CallbackName => 'AfterGnuPG' ); - - - - - - - <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $TicketObj &> -
  -<& /Elements/GnuPG/SignEncryptWidget, - self => $gnupg_widget, - TicketObj => $TicketObj, -&> -
<&|/l&>Subject: -% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); -
<&|/l&>Message: -<& /Articles/Elements/BeforeMessageBox, %ARGS &> -% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' ); -% 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}, IncludeSignature => 0, %ARGS&> -% $ARGS{'QuoteTransaction'} = $temp; -% } else { -% my $IncludeSignature = 1; -% $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment'); -<& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> -% } -% $m->callback( %ARGS, CallbackName => 'AfterMessageBox' ); -
- - -% $m->callback( %ARGS, CallbackName => 'BeforeSubmit', Ticket => $TicketObj ); - - <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket', id => 'SubmitTicket' &> - -% $m->callback( %ARGS, CallbackName => 'BeforeScrips', Ticket => $TicketObj ); - -% if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) { - <&|/Widgets/TitleBox, title => loc('Scrips and Recipients'), id => 'previewscrips', rolledup => RT->Config->Get('SimplifiedRecipients', $session{'CurrentUser'}) &> - <& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> - -% } -
- -% $m->callback( %ARGS, CallbackName => 'AfterScrips', Ticket => $TicketObj ); - -% if (my $recips = $m->notes("DryRun-Recipients-".$TicketObj->Id)) { -" /> -% } - -
-
- -% $m->callback( %ARGS, CallbackName => 'AfterForm', Ticket => $TicketObj ); - -<%INIT> -my $CanRespond = 0; -my $CanComment = 0; -my $checks_failure = 0; - -my $TicketObj = LoadTicket($id); - -my @results; - -$m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, checks_failure => \$checks_failure, results => \@results, CallbackName => 'Initial' ); - -unless($DefaultStatus){ - $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status()); -} - -my $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 ne 'Respond') { - $CommentDefault = qq[ selected="selected"]; - $ResponseDefault = ""; -} else { - $CommentDefault = ""; - $ResponseDefault = qq[ selected="selected"]; -} - -my $type = $ARGS{'UpdateType'} ? $ARGS{'UpdateType'} : - lc $ARGS{'Action'} eq 'respond' ? 'response' : - lc $ARGS{'Action'} eq 'comment' ? 'private' : - 'none' ; - - -$CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or - $TicketObj->CurrentUserHasRight('ModifyTicket') ); - -$CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or - $TicketObj->CurrentUserHasRight('ModifyTicket') ); - - -ProcessAttachments(ARGSRef => \%ARGS); - -my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS ); -$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process', - self => $gnupg_widget, - TicketObj => $TicketObj, -); - -if ( $ARGS{'SubmitTicket'} ) { - - my %squelched = ProcessTransactionSquelching( \%ARGS ); - $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched; - - my $CFs = $TicketObj->TransactionCustomFields; - my $ValidCFs = $m->comp( - '/Elements/ValidateCustomFields', - CustomFields => $CFs, - NamePrefix => "Object-RT::Transaction--CustomField-", - ARGSRef => \%ARGS - ); - unless ( $ValidCFs ) { - $checks_failure = 1; - while (my $CF = $CFs->Next) { - my $msg = $m->notes('InvalidField-' . $CF->Id) or next; - push @results, loc($CF->Name) . ': ' . $msg; - } - } - my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check', - self => $gnupg_widget, - TicketObj => $TicketObj, - ); - $checks_failure = 1 unless $status; -} - -# check email addresses for RT's -{ - foreach my $field ( qw(UpdateCc UpdateBcc) ) { - my $value = $ARGS{ $field }; - next unless defined $value && length $value; - - my @emails = Email::Address->parse( $value ); - foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { - push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc(substr($field, 6)) ); - $checks_failure = 1; - $email = undef; - } - $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; - } -} -my $skip_update = 0; -$m->callback( CallbackName => 'BeforeUpdate', ARGSRef => \%ARGS, skip_update => \$skip_update, - checks_failure => $checks_failure, results => \@results, TicketObj => $TicketObj ); - -if ( !$checks_failure && !$skip_update && exists $ARGS{SubmitTicket} ) { - $m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'BeforeDisplay' ); - return $m->comp('Display.html', TicketObj => $TicketObj, %ARGS); -} - - -<%ARGS> -$id => undef -$Action => undef -$DefaultStatus => undef - -- 2.11.0