[Rt-commit] [svn] r848 - in rt/branches/rt-3.3: . HOWTO bin docs docs/design_docs etc html html/Admin/Elements html/Admin/Global html/Admin/Groups html/Admin/Queues html/Approvals html/Approvals/Elements html/Elements html/NoAuth/images html/REST/1.0 html/REST/1.0/Forms/queue html/REST/1.0/Forms/ticket html/REST/1.0/Forms/user html/REST/1.0/NoAuth html/REST/1.0/search html/REST/1.0/ticket html/Search/Elements html/SelfService html/SelfService/Attachment html/SelfService/Elements html/Ticket html/Ticket/Elements html/Tools html/User html/User/Elements html/User/Groups lib lib/RT lib/RT/Action lib/RT/Condition lib/RT/I18N lib/RT/Interface lib/RT/Interface/Email/Filter lib/RT/Search lib/RT/URI lib/t lib/t/data lib/t/data/8859-15-message-series lib/t/regression m4 sbin

jesse at pallas.eruditorum.org jesse at pallas.eruditorum.org
Thu May 6 20:33:03 EDT 2004


Author: jesse
Date: Thu May  6 20:33:00 2004
New Revision: 848

Modified:
   rt/branches/rt-3.3/   (props changed)
   rt/branches/rt-3.3/HOWTO/README   (props changed)
   rt/branches/rt-3.3/HOWTO/change.txt   (props changed)
   rt/branches/rt-3.3/HOWTO/release.txt   (props changed)
   rt/branches/rt-3.3/HOWTO/version-control.txt   (props changed)
   rt/branches/rt-3.3/Makefile.in
   rt/branches/rt-3.3/UPGRADING
   rt/branches/rt-3.3/aclocal.m4   (props changed)
   rt/branches/rt-3.3/bin/mason_handler.fcgi.in
   rt/branches/rt-3.3/bin/mason_handler.scgi.in
   rt/branches/rt-3.3/bin/mason_handler.svc.in   (props changed)
   rt/branches/rt-3.3/bin/rt-commit-handler.in   (props changed)
   rt/branches/rt-3.3/bin/rt.in
   rt/branches/rt-3.3/bin/webmux.pl.in
   rt/branches/rt-3.3/configure.ac
   rt/branches/rt-3.3/docs/Security   (props changed)
   rt/branches/rt-3.3/docs/design_docs/acls   (props changed)
   rt/branches/rt-3.3/docs/design_docs/approval_notices   (props changed)
   rt/branches/rt-3.3/docs/design_docs/approval_template   (props changed)
   rt/branches/rt-3.3/docs/design_docs/cf_search   (props changed)
   rt/branches/rt-3.3/docs/design_docs/cli_spec   (props changed)
   rt/branches/rt-3.3/docs/design_docs/cvs_integration   (props changed)
   rt/branches/rt-3.3/docs/design_docs/delegation   (props changed)
   rt/branches/rt-3.3/docs/design_docs/evil_plans   (props changed)
   rt/branches/rt-3.3/docs/design_docs/groups_notes   (props changed)
   rt/branches/rt-3.3/docs/design_docs/link-definitions.txt   (props changed)
   rt/branches/rt-3.3/docs/design_docs/recursive_group_membership_algorithm   (props changed)
   rt/branches/rt-3.3/docs/design_docs/rql_parser_machine.graphviz   (props changed)
   rt/branches/rt-3.3/docs/design_docs/string-extraction-guide.txt   (props changed)
   rt/branches/rt-3.3/docs/design_docs/ticket_templates   (props changed)
   rt/branches/rt-3.3/docs/design_docs/users   (props changed)
   rt/branches/rt-3.3/docs/rt3-schema-relationships.dot   (props changed)
   rt/branches/rt-3.3/etc/RT_Config.pm.in   (contents, props changed)
   rt/branches/rt-3.3/etc/RT_SiteConfig.pm   (props changed)
   rt/branches/rt-3.3/etc/acl.Informix   (props changed)
   rt/branches/rt-3.3/etc/acl.Oracle   (props changed)
   rt/branches/rt-3.3/etc/constraints.mysql   (contents, props changed)
   rt/branches/rt-3.3/etc/drop.Informix   (props changed)
   rt/branches/rt-3.3/etc/drop.Oracle   (props changed)
   rt/branches/rt-3.3/etc/initialdata   (props changed)
   rt/branches/rt-3.3/etc/rt.spec   (props changed)
   rt/branches/rt-3.3/etc/schema.SQLite
   rt/branches/rt-3.3/html/Admin/Elements/AddCustomFieldValue   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditCustomField   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditCustomFieldValues   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditCustomFields   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditQueueWatchers   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditScrips   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/EditTemplates   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/ListGlobalCustomFields   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/QueueRightsForUser   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectCustomFieldType   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectGroups   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectModifyGroup   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers   (contents, props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectRights   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectScripAction   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectScripCondition   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectSingleOrMultiple   (props changed)
   rt/branches/rt-3.3/html/Admin/Elements/SelectUsers   (props changed)
   rt/branches/rt-3.3/html/Admin/Global/Scrip.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Groups/GroupRights.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Groups/Members.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Groups/Modify.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Groups/UserRights.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Groups/index.html   (contents, props changed)
   rt/branches/rt-3.3/html/Admin/Queues/CustomField.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Queues/CustomFields.html   (props changed)
   rt/branches/rt-3.3/html/Admin/Queues/Scrip.html   (props changed)
   rt/branches/rt-3.3/html/Approvals/Display.html   (props changed)
   rt/branches/rt-3.3/html/Approvals/Elements/Approve   (props changed)
   rt/branches/rt-3.3/html/Approvals/Elements/PendingMyApproval   (props changed)
   rt/branches/rt-3.3/html/Approvals/Elements/ShowDependency   (props changed)
   rt/branches/rt-3.3/html/Approvals/Elements/Tabs   (props changed)
   rt/branches/rt-3.3/html/Approvals/index.html   (props changed)
   rt/branches/rt-3.3/html/Elements/BevelBoxRaisedEnd   (props changed)
   rt/branches/rt-3.3/html/Elements/BevelBoxRaisedStart   (props changed)
   rt/branches/rt-3.3/html/Elements/CreateTicket   (props changed)
   rt/branches/rt-3.3/html/Elements/GotoTicket   (props changed)
   rt/branches/rt-3.3/html/Elements/Menu   (props changed)
   rt/branches/rt-3.3/html/Elements/MyRequests   (contents, props changed)
   rt/branches/rt-3.3/html/Elements/MyTickets   (props changed)
   rt/branches/rt-3.3/html/Elements/PageLayout   (props changed)
   rt/branches/rt-3.3/html/Elements/Quicksearch   (props changed)
   rt/branches/rt-3.3/html/Elements/Refresh   (contents, props changed)
   rt/branches/rt-3.3/html/Elements/SelectAttachmentField   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectCustomFieldOperator   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectCustomFieldValue   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectGroups   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectLinkType   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectMatch
   rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue
   rt/branches/rt-3.3/html/Elements/SelectQueue
   rt/branches/rt-3.3/html/Elements/SelectResultsPerPage   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectSortOrder   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectTicketSortBy   (props changed)
   rt/branches/rt-3.3/html/Elements/SelectTicketTypes   (props changed)
   rt/branches/rt-3.3/html/Elements/ViewUser   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/back_home.gif   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/bplogo.gif   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/favicon.png   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/head_requestracker.gif   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/rt.jpg   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/space.gif   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/spacer.gif   (props changed)
   rt/branches/rt-3.3/html/NoAuth/images/squares_blue.gif   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/queue/default   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/queue/ns   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/attachments   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/links   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/user/default   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/Forms/user/ns   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/NoAuth/mail-gateway   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/logout   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/search/dhandler   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/ticket/comment   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/ticket/link   (props changed)
   rt/branches/rt-3.3/html/REST/1.0/ticket/merge   (props changed)
   rt/branches/rt-3.3/html/Search/Elements/PickCFs
   rt/branches/rt-3.3/html/Search/Elements/TicketRow   (props changed)
   rt/branches/rt-3.3/html/SelfService/Attachment/dhandler   (props changed)
   rt/branches/rt-3.3/html/SelfService/Closed.html   (props changed)
   rt/branches/rt-3.3/html/SelfService/Elements/Tabs   (props changed)
   rt/branches/rt-3.3/html/SelfService/index.html   (props changed)
   rt/branches/rt-3.3/html/Ticket/Create.html
   rt/branches/rt-3.3/html/Ticket/Display.html
   rt/branches/rt-3.3/html/Ticket/Elements/BulkLinks   (props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/EditCustomField   (props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/EditCustomFields   (props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/ShowCustomFields   (props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory
   rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders   (contents, props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor   (contents, props changed)
   rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction
   rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html
   rt/branches/rt-3.3/html/Tools/Offline.html
   rt/branches/rt-3.3/html/User/Delegation.html   (props changed)
   rt/branches/rt-3.3/html/User/Elements/DelegateRights   (props changed)
   rt/branches/rt-3.3/html/User/Elements/GroupTabs   (props changed)
   rt/branches/rt-3.3/html/User/Elements/Tabs   (props changed)
   rt/branches/rt-3.3/html/User/Groups/Members.html   (props changed)
   rt/branches/rt-3.3/html/User/Groups/Modify.html   (props changed)
   rt/branches/rt-3.3/html/User/Groups/index.html   (props changed)
   rt/branches/rt-3.3/html/index.html
   rt/branches/rt-3.3/html/l   (props changed)
   rt/branches/rt-3.3/install-sh   (props changed)
   rt/branches/rt-3.3/lib/RT.pm.in   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/ACE_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm
   rt/branches/rt-3.3/lib/RT/Action/EscalatePriority.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Action/ResolveMembers.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm
   rt/branches/rt-3.3/lib/RT/Action/SetPriority.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Action/UserDefined.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Attachments_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CachedGroupMember.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CachedGroupMember_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CachedGroupMembers.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/Condition/AnyTransaction.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/BeforeDue.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/Overdue.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/OwnerChange.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/PriorityExceeds.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/QueueChange.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/StatusChange.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Condition/UserDefined.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CurrentUser.pm
   rt/branches/rt-3.3/lib/RT/CustomField.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CustomFieldValue.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CustomFieldValues.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CustomFieldValues_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CustomFields.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/CustomFields_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Date.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/EmailParser.pm
   rt/branches/rt-3.3/lib/RT/GroupMember_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/Group_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/Handle.pm
   rt/branches/rt-3.3/lib/RT/I18N/cs.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/I18N/cs.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/de.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/en.po   (props changed)
   rt/branches/rt-3.3/lib/RT/I18N/es.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/fr.po
   rt/branches/rt-3.3/lib/RT/I18N/he.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/i_default.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/I18N/it.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/ja.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/nl.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/no.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/pt_br.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/I18N/ru.po   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/Interface/CLI.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Interface/Email.pm
   rt/branches/rt-3.3/lib/RT/Interface/Email/Filter/SpamAssassin.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Interface/REST.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Interface/Web.pm
   rt/branches/rt-3.3/lib/RT/Link.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Link_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Links.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Links_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Principal.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Principals.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Principals_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Queues_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/ScripAction_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/ScripActions_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/ScripCondition_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/ScripConditions_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Scrip_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Search/ActiveTicketsInQueue.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Search/Generic.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/System.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Template_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Templates_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues_Overlay.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm
   rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm
   rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm   (contents, props changed)
   rt/branches/rt-3.3/lib/RT/URI/base.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/URI/fsck_com_rt.pm   (props changed)
   rt/branches/rt-3.3/lib/RT/User_Overlay.pm
   rt/branches/rt-3.3/lib/t/00smoke.t.in   (props changed)
   rt/branches/rt-3.3/lib/t/01harness.t.in   (props changed)
   rt/branches/rt-3.3/lib/t/02regression.t.in   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/dir   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg1   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg2   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg3   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg4   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg5   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg6   (props changed)
   rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg7   (props changed)
   rt/branches/rt-3.3/lib/t/data/multipart-alternative-with-umlaut   (props changed)
   rt/branches/rt-3.3/lib/t/data/multipart-report   (props changed)
   rt/branches/rt-3.3/lib/t/data/nested-mime-sample   (props changed)
   rt/branches/rt-3.3/lib/t/data/nested-rfc-822   (props changed)
   rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1   (props changed)
   rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1-full   (props changed)
   rt/branches/rt-3.3/lib/t/data/russian-subject-no-content-type   (props changed)
   rt/branches/rt-3.3/lib/t/data/text-html-in-russian   (props changed)
   rt/branches/rt-3.3/lib/t/data/text-html-with-umlaut   (props changed)
   rt/branches/rt-3.3/lib/t/regression/00placeholder   (props changed)
   rt/branches/rt-3.3/lib/t/regression/mime_tests   (props changed)
   rt/branches/rt-3.3/m4/rt_enable_layout.m4   (props changed)
   rt/branches/rt-3.3/m4/rt_expand_var.m4   (props changed)
   rt/branches/rt-3.3/m4/rt_layout.m4   (props changed)
   rt/branches/rt-3.3/m4/rt_subst_expanded_arg.m4   (props changed)
   rt/branches/rt-3.3/sbin/extract-message-catalog   (props changed)
   rt/branches/rt-3.3/sbin/extract_pod_tests   (props changed)
   rt/branches/rt-3.3/sbin/factory   (props changed)
   rt/branches/rt-3.3/sbin/regression_harness   (props changed)
   rt/branches/rt-3.3/sbin/rt-setup-database.in
   rt/branches/rt-3.3/sbin/rt-test-dependencies.in
Log:
 r1484 at tinbook:  jesse | 2004-05-07T00:31:24.624807Z
 
 Merging forward from 3.1
 ----------------------------------------------------------------------


Modified: rt/branches/rt-3.3/Makefile.in
==============================================================================
--- rt/branches/rt-3.3/Makefile.in	(original)
+++ rt/branches/rt-3.3/Makefile.in	Thu May  6 20:33:00 2004
@@ -330,6 +330,8 @@
 regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db  testify-pods fixperms apachectl
 	$(PERL) lib/t/02regression.t
 
+regression-noapache: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db  testify-pods fixperms start-httpd 
+	$(PERL) lib/t/02regression.t
 regression-quiet:
 	$(PERL) sbin/regression_harness
 
@@ -429,8 +431,10 @@
 
 testify-pods:
 	[ -d lib/t/autogen ] || mkdir lib/t/autogen
-	find lib -name \*pm |grep -v .svn |grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
-	find bin -type f |grep -v \~ |grep -v .svn | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
+	find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
+	find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
+	find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE)
+	find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE)
 
 
 
@@ -490,6 +494,9 @@
 	rpm -ba etc/rt.spec
 
 
+start-httpd:
+	$(PERL) bin/standalone_httpd 80 &
+
 apachectl:
 	$(APACHECTL) stop
 	sleep 10

Modified: rt/branches/rt-3.3/UPGRADING
==============================================================================
--- rt/branches/rt-3.3/UPGRADING	(original)
+++ rt/branches/rt-3.3/UPGRADING	Thu May  6 20:33:00 2004
@@ -17,6 +17,3 @@
 submission, you MUST grant 'Everyone' the right to create tickets.
 Granting this right only to "Unprivileged Users" is now insufficient.
 
-
-
-

Modified: rt/branches/rt-3.3/bin/mason_handler.fcgi.in
==============================================================================
--- rt/branches/rt-3.3/bin/mason_handler.fcgi.in	(original)
+++ rt/branches/rt-3.3/bin/mason_handler.fcgi.in	Thu May  6 20:33:00 2004
@@ -33,8 +33,9 @@
 require CGI::Fast;
 
 RT::Init();
+RT::DropSetGIDPermissions();
+
 
-# Response loop
 while ( my $cgi = CGI::Fast->new ) {
     # the whole point of fastcgi requires the env to get reset here..
     # So we must squash it again

Modified: rt/branches/rt-3.3/bin/mason_handler.scgi.in
==============================================================================
--- rt/branches/rt-3.3/bin/mason_handler.scgi.in	(original)
+++ rt/branches/rt-3.3/bin/mason_handler.scgi.in	Thu May  6 20:33:00 2004
@@ -31,6 +31,7 @@
 require CGI;
 
 RT::Init();
+RT::DropSetGIDPermissions();
 
 my $cgi = CGI->new;
 if ( ( !$h->interp->comp_exists( $cgi->path_info ) )

Modified: rt/branches/rt-3.3/bin/rt.in
==============================================================================
--- rt/branches/rt-3.3/bin/rt.in	(original)
+++ rt/branches/rt-3.3/bin/rt.in	Thu May  6 20:33:00 2004
@@ -47,6 +47,8 @@
         user    => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
         passwd  => undef,
         server  => 'http://localhost/rt/',
+        query   => undef,
+        orderby => undef,
     ),
     config_from_file($ENV{RTCONFIG} || ".rtrc"),
     config_from_env()
@@ -192,6 +194,8 @@
 
 sub list {
     my ($q, $type, %data);
+    $orderby = $config{orderby};
+    
     my $bad = 0;
 
     while (@ARGV) {
@@ -225,7 +229,12 @@
             $bad = 1; last;
         }
     }
-
+    
+    if (!defined $q)
+    {
+        $q = $config{query} ; 
+    }
+    
     $type ||= "ticket";
     unless ($type && defined $q) {
         my $item = $type ? "query string" : "object type";
@@ -539,7 +548,14 @@
                 my $a = $_ eq "-b" ? \@bcc : \@cc;
                 @$a = split /\s*,\s*/, shift @ARGV;
             }
-            elsif (/-m/) { $msg = shift @ARGV }
+            elsif (/-m/) {
+                $msg = shift @ARGV;
+                if ( $msg =~ /^-$/ ) {
+                    undef $msg;
+                    while (<STDIN>) { $msg .= $_ }
+                }
+            }
+
             elsif (/-w/) { $wtime = shift @ARGV }
         }
         elsif (!$id && m|^(?:ticket/)?($idlist)$|) {
@@ -1087,7 +1103,7 @@
 sub config_from_env {
     my %env;
 
-    foreach my $k ("DEBUG", "USER", "PASSWD", "SERVER") {
+    foreach my $k ("DEBUG", "USER", "PASSWD", "SERVER", "QUERY", "ORDERBY") {
         if (exists $ENV{"RT$k"}) {
             $env{lc $k} = $ENV{"RT$k"};
         }
@@ -1138,7 +1154,7 @@
             chomp;
             next if (/^#/ || /^\s*$/);
 
-            if (/^(user|passwd|server)\s+([^ ]+)$/) {
+            if (/^(user|passwd|server|query|orderby)\s+(.*)\s?$/) {
                 $cfg{$1} = $2;
             }
             else {
@@ -1369,6 +1385,8 @@
         - server <URL>          URL to RT server.
         - user <username>       RT username.
         - passwd <passwd>       RT user's password.
+        - query <RT Query>      Default RT Query for list action
+        - orderby <order>       Default RT order for list action
 
         Blank and #-commented lines are ignored.
 
@@ -1383,6 +1401,8 @@
         - RTDEBUG       Numeric debug level. (Set to 3 for full logs.)
         - RTCONFIG      Specifies a name other than ".rtrc" for the
                         configuration file.
+        - RTQUERY       Default RT Query for rt list
+        - RTORDERBY     Default order for rt list
 
 --
 
@@ -1406,7 +1426,7 @@
     be used to specify more than one object of the same type. Note that
     the list must be a single argument (i.e., no spaces). For example,
     "user/root,1-3,5,7-10,ams" is a list of ten users; the same list
-    can also be written as "user/ams,root,1,2,3,5,7,8-20".
+    can also be written as "user/ams,root,1,2,3,5,7,8-10".
     
     Examples:
 

Modified: rt/branches/rt-3.3/bin/webmux.pl.in
==============================================================================
--- rt/branches/rt-3.3/bin/webmux.pl.in	(original)
+++ rt/branches/rt-3.3/bin/webmux.pl.in	Thu May  6 20:33:00 2004
@@ -46,7 +46,7 @@
                                    #set private_tempfiles
 
 BEGIN {
-    if ($mod_perl::VERSION >= 1.9908) {
+    if ($mod_perl::VERSION && ($mod_perl::VERSION >= 1.9908)) {
 	require Apache::RequestUtil;
 	no warnings 'redefine';
 	my $sub = *Apache::request{CODE};

Modified: rt/branches/rt-3.3/configure.ac
==============================================================================
--- rt/branches/rt-3.3/configure.ac	(original)
+++ rt/branches/rt-3.3/configure.ac	Thu May  6 20:33:00 2004
@@ -6,7 +6,7 @@
 
 dnl Setup autoconf
 AC_PREREQ(2.53)
-AC_INIT(RT, [3.1@$Rev: 2039 $], [rt-3.1-bugs at fsck.com])
+AC_INIT(RT, [3.3.HEAD], [rt-3.1-bugs at fsck.com])
 AC_CONFIG_SRCDIR([lib/RT.pm.in])
 
 dnl Extract RT version number components

Modified: rt/branches/rt-3.3/etc/RT_Config.pm.in
==============================================================================
--- rt/branches/rt-3.3/etc/RT_Config.pm.in	(original)
+++ rt/branches/rt-3.3/etc/RT_Config.pm.in	Thu May  6 20:33:00 2004
@@ -251,6 +251,14 @@
 Set($LogDir, '@RT_LOG_PATH@');
 Set($LogToFileNamed , "rt.log");    #log to rt.log
 
+# On Solaris, set to ( socket => 'inet' ).  Options here override any
+# other options RT passes to Log::Dispatch::Syslog.  Other interesting
+# flags include facility and logopt.  (See the Log::Dispatch::Syslog
+# documentation for more information.)  (Maybe ident too, if you have
+# multiple RT installations.)
+
+ at LogToSyslogConf = () unless (@LogToSyslogConf);
+
 # }}}
 
 # {{{ Web interface configuration
@@ -339,12 +347,18 @@
 
 Set($MaxInlineBody, 13456);
 
-# $MyTicketsLength is the length of the table on the front page.
-# For some people, the default of 10 isn't big enough to get a feel for
-# how much work needs to be done before you get some time off.
+# $MyTicketsLength is the length of the owned tickets table on the
+# front page. For some people, the default of 10 isn't big enough
+# to get a feel for how much work needs to be done before you get
+# some time off.
 
 Set($MyTicketsLength, 10);
 
+# $MyRequestsLength is the length of the requested tickets table
+# on the front page.
+
+Set($MyRequestsLength, 10);
+
 # @MasonParameters is the list of parameters for the constructor of
 # HTML::Mason's Apache or CGI Handler.  This is normally only useful
 # for debugging, eg. profiling individual components with:

Modified: rt/branches/rt-3.3/etc/constraints.mysql
==============================================================================
--- rt/branches/rt-3.3/etc/constraints.mysql	(original)
+++ rt/branches/rt-3.3/etc/constraints.mysql	Thu May  6 20:33:00 2004
@@ -1,42 +1,85 @@
-  ALTER TABLE Links ADD FOREIGN KEY (LocalBase) REFERENCES Tickets(id) ;
+
+  ALTER TABLE Links ADD INDEX(LocalBase);
+  ALTER TABLE Links ADD FOREIGN KEY (LocalBase) REFERENCES Tickets(id);
+  ALTER TABLE Links ADD INDEX(LocalTarget);
   ALTER TABLE Links ADD FOREIGN KEY (LocalTarget) REFERENCES Tickets(id);
+  ALTER TABLE Tickets ADD INDEX(Queue);
   ALTER TABLE Tickets ADD FOREIGN KEY (Queue) REFERENCES Queues(id);
+  ALTER TABLE Tickets ADD INDEX(EffectiveId);
   ALTER TABLE Tickets ADD FOREIGN KEY (EffectiveId) REFERENCES Tickets(id);
+  ALTER TABLE Tickets ADD INDEX(Owner);
   ALTER TABLE Tickets ADD FOREIGN KEY (Owner) REFERENCES Principals(id);
+  ALTER TABLE Tickets ADD INDEX(Creator);
+  ALTER TABLE Tickets ADD INDEX(LastUpdatedBy);
   ALTER TABLE Tickets ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE Tickets ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE Transactions ADD INDEX(Creator);
+  ALTER TABLE Transactions ADD INDEX (Ticket) ;
+  ALTER TABLE Transactions ADD INDEX (EffectiveTicket) ;
   ALTER TABLE Transactions ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE Transactions ADD FOREIGN KEY (Ticket) REFERENCES Tickets(id);
   ALTER TABLE Transactions ADD FOREIGN KEY (EffectiveTicket) REFERENCES Tickets(id);
+  ALTER TABLE Attachments ADD INDEX (TransactionId) ;
+  ALTER TABLE Attachments ADD INDEX (Parent) ;
   ALTER TABLE Attachments ADD FOREIGN KEY (TransactionId) REFERENCES Transactions(id);
   ALTER TABLE Attachments ADD FOREIGN KEY (Parent) REFERENCES Attachments(id);
+  ALTER TABLE Scrips ADD INDEX (ScripCondition) ;
+  ALTER TABLE Scrips ADD INDEX (ScripAction) ;
+  ALTER TABLE Scrips ADD INDEX (Template) ;
+  ALTER TABLE Scrips ADD INDEX (Queue) ;
+  ALTER TABLE Scrips ADD INDEX (Creator) ;
+  ALTER TABLE Scrips ADD INDEX (LastUpdatedBy) ;
   ALTER TABLE Scrips ADD FOREIGN KEY (ScripCondition) REFERENCES ScripConditions(id);
   ALTER TABLE Scrips ADD FOREIGN KEY (ScripAction) REFERENCES ScripActions(id);
   ALTER TABLE Scrips ADD FOREIGN KEY (Template) REFERENCES Templates(id);
   ALTER TABLE Scrips ADD FOREIGN KEY (Queue) REFERENCES Queues(id);
   ALTER TABLE Scrips ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE Scrips ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE ACL ADD INDEX (PrincipalId) ;
+  ALTER TABLE ACL ADD INDEX (DelegatedBy) ;
+  ALTER TABLE ACL ADD INDEX (DelegatedFrom) ;
   ALTER TABLE ACL ADD FOREIGN KEY (PrincipalId) REFERENCES Principals(id);
   ALTER TABLE ACL ADD FOREIGN KEY (DelegatedBy) REFERENCES Principals(id);
   ALTER TABLE ACL ADD FOREIGN KEY (DelegatedFrom) REFERENCES ACL(id);
+  ALTER TABLE GroupMembers ADD INDEX (MemberId); 
+  ALTER TABLE GroupMembers ADD INDEX (GroupId); 
   ALTER TABLE GroupMembers ADD FOREIGN KEY (GroupId) REFERENCES Groups(id);
   ALTER TABLE GroupMembers ADD FOREIGN KEY (MemberId) REFERENCES Principals(id);
+  ALTER TABLE CachedGroupMembers ADD INDEX (ImmediateParentId) ;
+  ALTER TABLE CachedGroupMembers ADD INDEX (GroupId) ;
+  ALTER TABLE CachedGroupMembers ADD INDEX (MemberId) ;
+  ALTER TABLE CachedGroupMembers ADD INDEX (Via) ;
   ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (ImmediateParentId) REFERENCES Principals(id);
   ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (GroupId) REFERENCES Principals(id);
   ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (MemberId) REFERENCES Principals(id);
   ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (Via) REFERENCES CachedGroupMembers(id);
+  ALTER TABLE ScripActions ADD INDEX(Creator);
+  ALTER TABLE ScripActions ADD INDEX(LastUpdatedBy);
   ALTER TABLE ScripActions ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE ScripActions ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE Templates ADD INDEX(Queue);
+  ALTER TABLE Templates ADD INDEX(Creator);
+  ALTER TABLE Templates ADD INDEX(LastUpdatedBy);
   ALTER TABLE Templates ADD FOREIGN KEY (Queue) REFERENCES Queues(id);
   ALTER TABLE Templates ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE Templates ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE CustomFields ADD INDEX(Queue);
+  ALTER TABLE CustomFields ADD INDEX(Creator);
+  ALTER TABLE CustomFields ADD INDEX(LastUpdatedBy);
   ALTER TABLE CustomFields ADD FOREIGN KEY (Queue) REFERENCES Queues(id);
   ALTER TABLE CustomFields ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE CustomFields ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE TicketCustomFieldValues ADD INDEX(Ticket);
+  ALTER TABLE TicketCustomFieldValues ADD INDEX(CustomField);
+  ALTER TABLE TicketCustomFieldValues ADD INDEX(Creator);
+  ALTER TABLE TicketCustomFieldValues ADD INDEX(LastUpdatedBy);
   ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (Ticket) REFERENCES Tickets(id);
   ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (CustomField) REFERENCES CustomFields(id);
   ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);
+  ALTER TABLE CustomFieldValues ADD INDEX(CustomField);
+  ALTER TABLE CustomFieldValues ADD INDEX(Creator);
+  ALTER TABLE CustomFieldValues ADD INDEX(LastUpdatedBy);
   ALTER TABLE CustomFieldValues ADD FOREIGN KEY (CustomField) REFERENCES CustomFields(id);
   ALTER TABLE CustomFieldValues ADD FOREIGN KEY (Creator) REFERENCES Users(id);
   ALTER TABLE CustomFieldValues ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id);

Modified: rt/branches/rt-3.3/etc/schema.SQLite
==============================================================================
--- rt/branches/rt-3.3/etc/schema.SQLite	(original)
+++ rt/branches/rt-3.3/etc/schema.SQLite	Thu May  6 20:33:00 2004
@@ -408,7 +408,7 @@
   LastUpdated DATETIME NULL  
  
 ) ;
-CREATE INDEX Attributes1 on Attributes(Name)
+CREATE INDEX Attributes1 on Attributes(Name);
 CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
 
 --- }}}

Modified: rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers
==============================================================================
--- rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers	(original)
+++ rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers	Thu May  6 20:33:00 2004
@@ -42,8 +42,18 @@
 <%INIT>
 my $users = new RT::Users($session{'CurrentUser'});
 
-$users->Limit(FIELD => 'id', VALUE => $RT::SystemUser->id, OPERATOR => '!=', ENTRYAGGREGATOR => 'AND');
-$users->Limit(FIELD => 'id', VALUE => $RT::Nobody->id, OPERATOR => '!=', ENTRYAGGREGATOR => 'AND' );
+$users->Limit(
+    FIELD           => 'id',
+    VALUE           => $RT::SystemUser->id,
+    OPERATOR        => '!=',
+    ENTRYAGGREGATOR => 'AND'
+);
+$users->Limit(
+    FIELD           => 'id',
+    VALUE           => $RT::Nobody->id,
+    OPERATOR        => '!=',
+    ENTRYAGGREGATOR => 'AND'
+);
 $users->LimitToPrivileged();
 
 my $groups = new RT::Groups($session{'CurrentUser'});

Modified: rt/branches/rt-3.3/html/Admin/Groups/index.html
==============================================================================
--- rt/branches/rt-3.3/html/Admin/Groups/index.html	(original)
+++ rt/branches/rt-3.3/html/Admin/Groups/index.html	Thu May  6 20:33:00 2004
@@ -25,11 +25,7 @@
 <& /Admin/Elements/GroupTabs, current_tab => 'Admin/Groups/',
     current_subtab => 'Admin/Groups/', 
     Title => $title &>
-
-
-<%$caption%>:<BR>
-<UL>
-%if ($Groups->Count == 0) {
+<%$caption%>:<BR> <UL> %if ($Groups->Count == 0) {
 <LI> <i><&|/l&>No groups matching search criteria found.</&></i>
 % }
 %my @ids;
@@ -41,6 +37,12 @@
 %if (my $ids = join(',', @ids)) {
 <em>(<a href="/Download/Tabular/Group/<% $ids %>/Groups.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br>
 %}
+<br><br>
+<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Groups/index.html">
+<input type="checkbox" name="FindDisabledGroups"> <&|/l&>Include disabled groups in listing.</&>
+<BR>
+<div align=right><input type=submit value="<&|/l&>Go!</&>"></div> 
+</FORM>
 
 <br><br>
 <FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Groups/index.html">
@@ -49,6 +51,11 @@
 </FORM>
 <%INIT>
 my $Groups = RT::Groups->new($session{'CurrentUser'});
+
+if ($FindDisabledGroups) {
+  $Groups->{'find_disabled_rows'} = 1;
+}
+
 $Groups->LimitToUserDefinedGroups();
 my $title = loc('Select a group');
 my $caption;
@@ -78,4 +85,5 @@
 $GroupString => undef
 $GroupOp => '='
 $GroupField => 'Name'
+$FindDisabledGroups => 0
 </%ARGS>

Modified: rt/branches/rt-3.3/html/Elements/MyRequests
==============================================================================
--- rt/branches/rt-3.3/html/Elements/MyRequests	(original)
+++ rt/branches/rt-3.3/html/Elements/MyRequests	Thu May  6 20:33:00 2004
@@ -34,5 +34,5 @@
         &>
 </&>
 <%init>
-my $rows = 10;
+my $rows = $RT::MyRequestsLength;
 </%init>

Modified: rt/branches/rt-3.3/html/Elements/Refresh
==============================================================================
--- rt/branches/rt-3.3/html/Elements/Refresh	(original)
+++ rt/branches/rt-3.3/html/Elements/Refresh	Thu May  6 20:33:00 2004
@@ -29,7 +29,7 @@
 ><&|/l&>Don't refresh this page.</&></OPTION>
 %foreach my $value (@refreshevery) {
 <OPTION VALUE="<%$value%>"
-% if ($value == $Default) {
+% if  ( $Default && ($value == $Default)) {
 SELECTED 
 % }
 ><&|/l, $value/60 &>Refresh this page every [_1] minutes.</&></OPTION>

Modified: rt/branches/rt-3.3/html/Elements/SelectMatch
==============================================================================
--- rt/branches/rt-3.3/html/Elements/SelectMatch	(original)
+++ rt/branches/rt-3.3/html/Elements/SelectMatch	Thu May  6 20:33:00 2004
@@ -37,7 +37,12 @@
 $Default => undef
 </%ARGS>
 <%INIT>
-my ($TrueDefault, $FalseDefault, $LikeDefault, $NotLikeDefault);
+
+my $TrueDefault = '';
+my $FalseDefault='';
+my $LikeDefault=''; 
+my $NotLikeDefault ='';
+
 if ($Default && $Default =~ /false/i) {
 	$FalseDefault = "SELECTED";
 }

Modified: rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue
==============================================================================
--- rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue	(original)
+++ rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue	Thu May  6 20:33:00 2004
@@ -24,7 +24,10 @@
 <LABEL ACCESSKEY="9">
 <SELECT NAME ="<%$Name%>">
 % foreach my $queue (@{$session{'create_in_queues'}}) {
-<OPTION VALUE="<%$queue->{'id'}%>" <%($Default && ($queue->{'id'} == $Default)) && 'SELECTED'%>><%$queue->{'Name'}%>
+<OPTION 
+    VALUE="<%$queue->{'id'}%>" 
+    <%$Default && ($queue->{'id'} == $Default) && 'SELECTED'%>>
+<%$queue->{'Name'}%>
 %   if (($Verbose) and ($queue->{'Description'}) ){
 (<%$queue->{'Description'}%>)
 %  }

Modified: rt/branches/rt-3.3/html/Elements/SelectQueue
==============================================================================
--- rt/branches/rt-3.3/html/Elements/SelectQueue	(original)
+++ rt/branches/rt-3.3/html/Elements/SelectQueue	Thu May  6 20:33:00 2004
@@ -32,7 +32,7 @@
 % }
 % while (my $queue=$q->Next) {
 % if ($ShowAllQueues || $queue->CurrentUserHasRight('CreateTicket')) {
-<OPTION VALUE="<%($NamedValues ? $queue->Name : $queue->Id) %>" <%( $queue->Id == $Default ? 'SELECTED' : '')%>><%$queue->Name%>
+<OPTION VALUE="<%($NamedValues ? $queue->Name : $queue->Id) %>" <%( $queue->Id eq $Default ? 'SELECTED' : '')%>><%$queue->Name%>
 %   if (($Verbose) and ($queue->Description) ){
 (<%$queue->Description%>)
 %  }

Modified: rt/branches/rt-3.3/html/Search/Elements/PickCFs
==============================================================================
--- rt/branches/rt-3.3/html/Search/Elements/PickCFs	(original)
+++ rt/branches/rt-3.3/html/Search/Elements/PickCFs	Thu May  6 20:33:00 2004
@@ -23,16 +23,22 @@
 %# END LICENSE BLOCK
 <table cellspacing=0 border=0>
 % while ( my $CustomField = $CustomFields->Next ) {
-
 <tr><td>
 
+% my $name;
+% if ($CustomField->QueueObj->Name) {
+%   $name = "CF." . $CustomField->QueueObj->Name . 
+%	".{" . $CustomField->Name . "}";
+% } else {
+%   $name = "CF." . $CustomField->Name;
+% }
 <% $CustomField->Name %> 
-        <& /Elements/SelectCustomFieldOperator, Name => "CustomFieldOp". $CustomField->id, 
+        <& /Elements/SelectCustomFieldOperator, Name => $name . "Op", 
                                     True => loc("is"), 
                                     False => loc("isn't"), 
                                     TrueVal=> '=', FalseVal => '!=' &>
 
-<& /Elements/SelectCustomFieldValue, Name => "CustomField".$CustomField->id,
+<& /Elements/SelectCustomFieldValue, Name => "ValueOf" . $name,
                             CustomField => $CustomField,
                             &>
 </td></tr>

Modified: rt/branches/rt-3.3/html/Ticket/Create.html
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Create.html	(original)
+++ rt/branches/rt-3.3/html/Ticket/Create.html	Thu May  6 20:33:00 2004
@@ -27,6 +27,7 @@
     Title => loc("Create a new ticket") &>
 <FORM ACTION="<%$RT::WebPath%>/Ticket/Create.html" METHOD="POST" ENCTYPE="multipart/form-data">
 <INPUT TYPE=HIDDEN Name="id" VALUE="new">
+<INPUT TYPE=HIDDEN Name="Debug" VALUE="2">
 <A NAME="top">
 	
 	
@@ -183,7 +184,7 @@
 	title_class=> 'inverse',  
 	titleright => '', color=> "#336633" &>
 
-<i><&|/l&>(Enter ticket ids or URLs, seperated with spaces)</&></i>
+<i><&|/l&>(Enter ticket ids or URLs, separated with spaces)</&></i>
 <TABLE BORDER=0>
 <TR><TD ALIGN=RIGHT><&|/l&>Depends on</&></TD><TD><input size=10 name="new-DependsOn" value="<% $ARGS{'new-DependsOn'} %>"></TD></TR>
 <TR><TD ALIGN=RIGHT><&|/l&>Depended on by</&></TD><TD><input size=10 name="DependsOn-new" value="<% $ARGS{'DependsOn-new'} %>"></TD></TR>
@@ -262,7 +263,7 @@
 
 if ((!exists $ARGS{'AddMoreAttach'}) && ($ARGS{'id'} eq 'new')) { # new ticket?
     $m->comp('Display.html', %ARGS);
-    $m->abort();
+    return();
 }
 </%INIT>
 

Modified: rt/branches/rt-3.3/html/Ticket/Display.html
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Display.html	(original)
+++ rt/branches/rt-3.3/html/Ticket/Display.html	Thu May  6 20:33:00 2004
@@ -119,6 +119,8 @@
     push (@Actions, @BasicActions, @results);
 }
 
+
+
 $m->comp('/Elements/Callback', _CallbackName => 'BeforeDisplay',
 	 TicketObj => \$TicketObj, Tickets => \$Tickets, ARGSRef => \%ARGS);
 

Modified: rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory	(original)
+++ rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory	Thu May  6 20:33:00 2004
@@ -118,16 +118,14 @@
 $Attachments ||=  $m->comp('/Ticket/Elements/FindAttachments', Ticket => $Ticket, Tickets => $Tickets || undef);
 $AttachmentContent ||= $m->comp('/Ticket/Elements/LoadTextAttachments', Ticket => $Ticket);
 
-
-
 </%INIT>
 <%ARGS>
 $URIFile => 'Display.html'
 $Ticket => undef
 $Tickets => undef
 $Attachments => undef
-$ShowHeaders => 0
 $AttachmentContent => undef
+$ShowHeaders => undef
 $Collapsed => undef
 $ShowTitle => 1
 $ShowDisplayModes => 1

Modified: rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders	(original)
+++ rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders	Thu May  6 20:33:00 2004
@@ -27,14 +27,13 @@
 % next unless ($display_headers{'_all'} || $display_headers{lc($header->{'Tag'})});
 <tr>
 <td align="right" class="message-header-key"><pre><%$header->{'Tag'}%>:</pre></td>
-<td class="message-header-value"><%$header->{'Value'}|n%></td>
+<td class="message-header-value"><%$header->{'Value'}%></td>
 </td>
 </tr>
 % }
 </table>
 <%INIT>
 my $content = $Headers;
-RT::Interface::Web::EscapeUTF8(\$content);
 $m->comp('/Elements/Callback', content => \$content, %ARGS);
 
 

Modified: rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor	(original)
+++ rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor	Thu May  6 20:33:00 2004
@@ -23,9 +23,8 @@
 %# END LICENSE BLOCK
 <%PERL>
 my $rows = 10;
-my $people = $Ticket->Requestors->MembersObj;
-while (my $member=$people->Next) {
-my $requestor = $member->MemberObj->Object;
+my $people = $Ticket->Requestors->UserMembersObj;
+while (my $requestor=$people->Next) {
 my $name=$requestor->RealName || $requestor->EmailAddress;	
 my $tickets = RT::Tickets->new($session{'CurrentUser'});
 $tickets->LimitWatcher(TYPE => 'Requestor', VALUE => $requestor->EmailAddress );

Modified: rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction	(original)
+++ rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction	Thu May  6 20:33:00 2004
@@ -97,6 +97,8 @@
 
 if ( $Transaction->TimeTaken != 0 ) {
     $TimeTaken = $Transaction->TimeTaken . " min";
+} else {
+    $TimeTaken = '';
 }
 
 unless ($Attachments) { 

Modified: rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html
==============================================================================
--- rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html	(original)
+++ rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html	Thu May  6 20:33:00 2004
@@ -1,6 +1,3 @@
-<%attr>
-AutoFlush => 0
-</%attr>
 <%args>
 $Attachment => undef
 $Transaction => undef
@@ -16,11 +13,14 @@
      unless ($AttachmentObj->TransactionId() == $Transaction ) {
         Abort(loc("Attachment '[_1]' could not be loaded", $Attachment));
      }
-$r->content_type('text/plain');
+
 </%init>
+<& /Elements/Header, ShowBar => 0 &>
 <pre>
 <%$AttachmentObj->Headers%>
 
 <%$AttachmentObj->Content%>
 </pre>
-%$m->abort();
+</body>
+</html>
+%$m->abort;

Modified: rt/branches/rt-3.3/html/Tools/Offline.html
==============================================================================
--- rt/branches/rt-3.3/html/Tools/Offline.html	(original)
+++ rt/branches/rt-3.3/html/Tools/Offline.html	Thu May  6 20:33:00 2004
@@ -28,11 +28,37 @@
 
 <& /Elements/ListActions, actions => \@results &>
 
-<FORM>
-<textarea name=string cols=90 rows=30>
+<FORM ACTION="Offline.html" NAME="TicketUpdate" 
+	METHOD=POST enctype="multipart/form-data">
+<table>
+<tr>
+<td>
+<&|/l&>Default Queue</&>:
+</td>
+<td>
+<& /Elements/SelectQueue, Name => "qname", NamedValues => 1 &>
+<i><&|/l&>If no queue is specified, create tickets in this queue.</&></i>
+</td>
+</tr>
+<tr><td class=labeltop>
+<&|/l&>Template</&>:
+</td>
+<td colspan=2>
+<textarea name=string cols=80 rows=30>
 <%$string%>
 </textarea>
-<& /Elements/Submit, Label => loc('Upload'), Caption => loc("Upload your changes"), color => "#993333" &>
+</td>
+</tr>
+<tr><td class=label>
+<&|/l&>Get template from file</&>:
+</td>
+<td>
+<input name="Template" type="file" value="foo">
+<INPUT TYPE=SUBMIT NAME="Parse" VALUE="<&|/l&>Go</&>">
+</td>
+</tr>
+</table>
+<& /Elements/Submit, Name => 'UpdateTickets', Label => loc('Upload'), Caption => loc("Upload your changes"), color => "#993333" &>
 
 </FORM>
 
@@ -43,7 +69,26 @@
 my $action = new RT::Action::CreateTickets;
 my $string;
 
-if ($ARGS{'string'}) {
+if ($ARGS{'Parse'} && $ARGS{'Template'}) {
+    $ARGS{'string'} = "";
+    my $cgi_object = $m->cgi_object;
+    my $fh = $cgi_object->upload('Template');
+    my $filename = "$fh";
+
+    my ($buffer, $template);
+    while ( my $bytesread = read( $fh, $buffer, 4096 ) ) {
+	$template .= $buffer;
+    }
+    $action->Parse($template, $ARGS{'qname'});
+    foreach (@{ $action->{'create_tickets'} }) {
+	my $id = $_;
+	$id =~ s/^create\-//;
+	$string .= "===Create-Ticket: $id\n";
+	$string .= $action->{'templates'}->{$_} . "\n";
+    }
+
+    $ARGS{'string'} = $string;
+} elsif ($ARGS{'UpdateTickets'}) {
     $action->Parse($ARGS{string});
     push @results, $action->CreateByTemplate();
     push @results, $action->UpdateByTemplate();

Modified: rt/branches/rt-3.3/html/index.html
==============================================================================
--- rt/branches/rt-3.3/html/index.html	(original)
+++ rt/branches/rt-3.3/html/index.html	Thu May  6 20:33:00 2004
@@ -1,3 +1,29 @@
+<!--
+% $m->out('--'.'>');
+% if (0) {
+%# -->
+<html><head>
+<META HTTP-EQUIV=Refresh CONTENT="3; URL=http://bestpractical.com/rt/rt-broken-install.html">
+<title>Almost there!</title></head>
+<body>
+
+<img src="http://www.bestpractical.com/images/unconfigured-rtlogo.jpg">
+<br><br>
+<h1>You're almost there!</h1>
+You haven't yet configured your webserver to run RT.
+
+You appear to have installed RT's web interface correctly, but haven't yet configured your web
+server to "run" the RT server which powers the web interface.
+
+The next step is to edit your webserver's configuration file to instruct it to use
+RT's <b>mod_perl</b>, <b>fastcgi</b> or <b>speedycgi</b> handler.
+
+If you need commercial support, please contact us at sales at bestpractical.com.
+
+
+<!--
+% }
+
 %# BEGIN LICENSE BLOCK
 %# 
 %# Copyright (c) 1996-2003 Jesse Vincent <jesse at bestpractical.com>
@@ -64,7 +90,7 @@
     my $query = $ARGS{'q'};
 
    if ( $query =~ m/^\s*(\d+)\s*$/ ) {
-        $m->comp("/Ticket/Display.html", id=> $1);
+        $m->comp("/Ticket/Display.html" , id=> $1);
         return();
     }
 
@@ -104,3 +130,5 @@
 }
 
 </%init>
+
+%# --></body></html>

Modified: rt/branches/rt-3.3/lib/RT.pm.in
==============================================================================
--- rt/branches/rt-3.3/lib/RT.pm.in	(original)
+++ rt/branches/rt-3.3/lib/RT.pm.in	Thu May  6 20:33:00 2004
@@ -232,7 +232,8 @@
                                 return "$p{message} ($filename:$line)\n"}
 				},
              
-		       stderr => 1
+		       stderr => 1,
+               @RT::LogToSyslogConf
 		     ));
     }
 

Modified: rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm	Thu May  6 20:33:00 2004
@@ -119,11 +119,11 @@
     # lead me to start to suspect that we really want users and groups
     # to just be the same table. or _maybe_ that we want an object db.
     my $princ = RT::Principal->new($RT::SystemUser);
-    $princ->Load($args{'PrincipalId'});
+    $princ->Load($args{'Id'});
     if ($princ->PrincipalType eq 'User') {
     my $group = RT::Group->new($RT::SystemUser);
         $group->LoadACLEquivalenceGroup($princ);
-        $args{'PrincipalId'} = $group->PrincipalId;
+        $args{'Id'} = $group->PrincipalId;
     }
         $self->Limit( FIELD           => 'PrincipalId',
                       OPERATOR        => '=',

Modified: rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm	Thu May  6 20:33:00 2004
@@ -223,9 +223,9 @@
 '===Create-Ticket: approval
 Queue: Approvals
 Type: Approval
-AdminCc: root at localhost
+AdminCc: {join ("\nAdminCc: ", at admins) }
 Depended-On-By: TOP
-Refers-To: TOP
+Refers-To:  TOP 
 Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject}
 Due: {time + 86400}
 Content-Type: text/plain
@@ -271,6 +271,82 @@
            Queue => $q->Id);
 
 
+use RT::Action::CreateTickets;
+my $action = new RT::Action::CreateTickets;
+
+# comma-delimited templates
+my $commas = <<"EOF";
+id,Queue,Subject,Owner,Content
+ticket1,General,"foo, bar",root,blah
+ticket2,General,foo bar,root,blah
+ticket3,General,foo' bar,root,blah'boo
+EOF
+
+# tab-delimited templates
+my $tabs = <<"EOF";
+id\tQueue\tSubject\tOwner\tContent
+ticket10\tGeneral\t"foo' bar"\troot\tblah'
+ticket11\tGeneral\tfoo, bar\troot\tblah
+ticket12\tGeneral\tfoo' bar\troot\tblah'boo
+EOF
+
+my %expected;
+
+$expected{ticket1} = <<EOF;
+Queue: General
+Subject: foo, bar
+Owner: root
+Content: blah
+EOF
+
+$expected{ticket2} = <<EOF;
+Queue: General
+Subject: foo bar
+Owner: root
+Content: blah
+EOF
+
+$expected{ticket3} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'boo
+EOF
+
+$expected{ticket10} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'
+EOF
+
+$expected{ticket11} = <<EOF;
+Queue: General
+Subject: foo, bar
+Owner: root
+Content: blah
+EOF
+
+$expected{ticket12} = <<EOF;
+Queue: General
+Subject: foo' bar
+Owner: root
+Content: blah'boo
+EOF
+
+$action->Parse($commas);
+$action->Parse($tabs);
+
+my %got;
+foreach (@{ $action->{'create_tickets'} }) {
+  $got{$_} = $action->{'templates'}->{$_};
+}
+
+foreach my $id ( keys %expected ) {
+    ok(exists($got{"create-$id"}), "template exists for $id");
+    is($got{"create-$id"}, $expected{$id}, "template is correct for $id");
+}
+
 =end testing
 
 
@@ -354,6 +430,8 @@
     my $self = shift;
     my $top = shift;
 
+    $RT::Logger->debug("In CreateByTemplate");
+
     my @results;
 
     # XXX: cargo cult programming that works. i'll be back.
@@ -516,29 +594,103 @@
 sub Parse {
     my $self = shift;
     my $content = shift;
+    my $qname = shift;
 
     my @template_order;
     my $template_id;
-    foreach my $line (split(/\n/, $content)) {
-	$line =~ s/\r$//;
-	$RT::Logger->debug("Line: $line");
-	if ($line =~ /^===Create-Ticket: (.*)$/) {
-	    $template_id = "create-$1";
-	    $RT::Logger->debug("****  Create ticket: $template_id");
-	    push @{$self->{'create_tickets'}},$template_id;
-        } elsif ($line =~ /^===Update-Ticket: (.*)$/) {
-	    $template_id = "update-$1";
-	    $RT::Logger->debug("****  Update ticket: $template_id");
-	    push @{$self->{'update_tickets'}},$template_id;
-        } elsif ($line =~ /^===Base-Ticket: (.*)$/) {
-	    $template_id = "base-$1";
-	    $RT::Logger->debug("****  Base ticket: $template_id");
-	    push @{$self->{'base_tickets'}},$template_id;
-	} elsif ($line =~ /^===#.*$/) { # a comment
-	    next;
-        } else {
-	    $self->{'templates'}->{$template_id} .= $line."\n";
-        }
+    if (substr($content, 0, 3) eq '===') {
+	$RT::Logger->debug("Line: ===");
+	foreach my $line (split(/\n/, $content)) {
+	    $line =~ s/\r$//;
+	    $RT::Logger->debug("Line: $line");
+	    if ($line =~ /^===Create-Ticket: (.*)$/) {
+		$template_id = "create-$1";
+		$RT::Logger->debug("****  Create ticket: $template_id");
+		push @{$self->{'create_tickets'}},$template_id;
+	    } elsif ($line =~ /^===Update-Ticket: (.*)$/) {
+		$template_id = "update-$1";
+		$RT::Logger->debug("****  Update ticket: $template_id");
+		push @{$self->{'update_tickets'}},$template_id;
+	    } elsif ($line =~ /^===Base-Ticket: (.*)$/) {
+		$template_id = "base-$1";
+		$RT::Logger->debug("****  Base ticket: $template_id");
+		push @{$self->{'base_tickets'}},$template_id;
+	    } elsif ($line =~ /^===#.*$/) { # a comment
+		     next;
+		 } else {
+		     $self->{'templates'}->{$template_id} .= $line."\n";
+		 }
+	}
+    } elsif (substr($content, 0, 2) =~ /^id$/i) {
+	$RT::Logger->debug("Line: id");
+	use Regexp::Common qw(delimited);
+	my $first = substr($content, 0, index($content, "\n"));
+	$first =~ s/\r$//;
+
+	my $delimiter;
+	if ($first =~ /\t/)  {
+	    $delimiter = "\t";
+	} else {
+	    $delimiter = ',';
+	}
+	my $delimited = qr[[^$delimiter]+];
+	my @fields = split(/$delimiter/, $first);
+
+	my $justquoted = qr[$RE{quoted}];
+
+	$content = substr($content, index($content, "\n") + 1);
+	$RT::Logger->debug("First: $first");
+	
+	my $queue;
+	foreach my $line (split(/\n/, $content)) {
+	    next unless $line;
+	    $RT::Logger->debug("Line: $line");
+	    # first item is $template_id
+	    my $i = 0;
+	    my $template_id;
+	    while ($line =~ /($justquoted|$delimited)/igx) {
+		if ($i == 0) {
+		    $queue = 0;
+		    $template_id = 'create-' . $1;
+		    $RT::Logger->debug("template_id: $1");
+		    push @{$self->{'create_tickets'}},$template_id;
+		} else {
+		    my $value = $1;
+		    if ($value =~ /$justquoted/) {
+			$value =~ s/^\"|\'//;
+			$value =~ s/\"|\'$//;
+		    }
+		    my $field = $fields[$i];
+		    next unless $field;
+		    $field =~ s/^\s//;
+		    $field =~ s/\s$//;
+		    if ( $field =~ /Body/i || $field =~ /Data/i ||
+			 $field =~ /Message/i) {
+			$field = 'Content';
+		    }
+		    if ( $field =~ /Summary/i) {
+			$field = 'Subject';
+		    }
+		    if ( $field =~ /Queue/i) {
+			$queue = 1;
+			$RT::Logger->debug("queue!!: |$field|\n");
+			if (!$value) {
+			    $value = $qname;
+			}
+		    }
+		    $RT::Logger->debug("field: |$field|\n");
+		    $self->{'templates'}->{$template_id} .= $field . ": ";
+		    $self->{'templates'}->{$template_id} .= $value || "";
+		    $self->{'templates'}->{$template_id} .= "\n";
+		    $self->{'templates'}->{$template_id} .= "ENDOFCONTENT\n" if $field =~ /content/i;
+		    $RT::Logger->debug($field . ": $1");
+		}
+		$i++;
+	    }
+	    if (!$queue) {
+		$self->{'templates'}->{$template_id} .= "Queue: $qname\n";
+	    }
+	}
     }
 }
 
@@ -674,8 +826,8 @@
 		      DependedOnBy => $args->{'dependedonby'},
 		      RefersTo	=> $args->{'refersto'},
 		      ReferredToBy => $args->{'referredtoby'},
-		      Members => $args->{'members'},
-		      MemberOf => $args->{'memberof'},
+		      Children => $args->{'children'},
+		      Parents => $args->{'parents'},
 		  }
 		  );
 
@@ -721,14 +873,15 @@
 	$string .= "$type: ";
 
 	my $mode = $LINKTYPEMAP{$type}->{Mode};
+	my $method = $LINKTYPEMAP{$type}->{Type};
 
 	my $links;
-	while (my $link = $t->$type->Next) {
+	while (my $link = $t->$method->Next) {
 	    $links .= ", " if $links;
 
-	    my $method = $mode . "Obj";
-	    my $member = $link->$method;
-	    $links .= $member->Id;
+	    my $object = $mode . "Obj";
+	    my $member = $link->$object;
+	    $links .= $member->Id if $member;
 	}
 	$string .= $links;
 	$string .= "\n";

Modified: rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm	Thu May  6 20:33:00 2004
@@ -194,7 +194,7 @@
 =head2 SendMessage MIMEObj
 
 sends the message using RT's preferred API.
-TODO: Break this out to a seperate module
+TODO: Break this out to a separate module
 
 =cut
 
@@ -661,15 +661,41 @@
 sub MIMEEncodeString {
     my  $self = shift;
     my $value = shift;
-    my $enc = shift;
+    # using RFC2047 notation, sec 2.
+    # encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
+    my $charset = shift;
+    my $encoding = 'B';
+    # An 'encoded-word' may not be more than 75 characters long
+    #
+    # MIME encoding increases 4/3*(number of bytes), and always in multiples
+    # of 4. Thus we have to find the best available value of bytes available
+    # for each chunk.
+    #
+    # First we get the integer max which max*4/3 would fit on space.
+    # Then we find the greater multiple of 3 lower or equal than $max.
+    my $max = int(((75-length('=?'.$charset.'?'.$encoding.'?'.'?='))*3)/4);
+    $max = int($max/3)*3;
 
     chomp $value;
     return ($value) unless $value =~ /[^\x20-\x7e]/;
 
     $value =~ s/\s*$//;
     Encode::_utf8_off($value);
-    my $res = Encode::from_to( $value, "utf-8", $enc );
-    $value = encode_mimeword( $value,  'B', $enc );
+    my $res = Encode::from_to( $value, "utf-8", $charset );
+   
+    if ($max > 0) {
+      # copy value and split in chuncks
+      my $str=$value;
+      my @chunks = unpack("a$max" x int(length($str)/$max 
+                                  + ((length($str) % $max) ? 1:0)), $str);
+      # encode an join chuncks
+      $value = join " ", 
+                     map encode_mimeword( $_, $encoding, $charset ), @chunks ;
+      return($value); 
+    } else {
+      # gives an error...
+      $RT::Logger->crit("Can't encode! Charset or encoding too big.\n");
+    }
 }
 
 # }}}

Modified: rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm	Thu May  6 20:33:00 2004
@@ -384,7 +384,7 @@
 Returns this object's headers as a string.  This method specifically
 removes the RT-Send-Bcc: header, so as to never reveal to whom RT sent a Bcc.
 We need to record the RT-Send-Cc and RT-Send-Bcc values so that we can actually send
-out mail. (The mailing rules are seperated from the ticket update code by
+out mail. (The mailing rules are separated from the ticket update code by
 an abstraction barrier that makes it impossible to pass this data directly
 
 =cut
@@ -392,8 +392,8 @@
 sub Headers {
     my $self = shift;
     my $hdrs="";
-    for (split(/\n/,$self->SUPER::Headers)) {
-	    $hdrs.="$_\n" unless /^(RT-Send-Bcc): /i
+    for ($self->_SplitHeaders) {
+	    $hdrs.="$_\n" unless /^(RT-Send-Bcc):/i
     }
     return $hdrs;
 }
@@ -413,8 +413,8 @@
 sub GetHeader {
     my $self = shift;
     my $tag = shift;
-    foreach my $line (split(/\n/,$self->SUPER::Headers)) {
-        if ($line =~ /^\Q$tag\E:\s+(.*)$/i) { #if we find the header, return its value
+    foreach my $line ($self->_SplitHeaders) {
+        if ($line =~ /^\Q$tag\E:\s+(.*)$/si) { #if we find the header, return its value
             return ($1);
         }
     }
@@ -437,7 +437,7 @@
     my $tag = shift;
     my $newheader = '';
 
-    foreach my $line (split(/\n/,$self->SUPER::Headers)) {
+    foreach my $line ($self->_SplitHeaders) {
         if (defined $tag and $line =~ /^\Q$tag\E:\s+(.*)$/i) {
 	    $newheader .= "$tag: $_[0]\n";
 	    undef $tag;
@@ -491,6 +491,54 @@
 
 # }}}
 
+=head2 _SplitHeaders
+
+Returns an array of this attachment object's headers, with one header 
+per array entry. multiple lines are folded
+
+=begin testing
+
+my $test1 = "From: jesse";
+my @headers = RT::Attachment->_SplitHeaders($test1);
+is ($#headers, 0, $test1 );
+
+my $test2 = qq{From: jesse
+To: bobby
+Subject: foo
+};
+
+ at headers = RT::Attachment->_SplitHeaders($test2);
+is ($#headers, 2, "testing a bunch of singline multiple headers" );
+
+
+my $test3 = qq{From: jesse
+To: bobby,
+ Suzie,
+    Sally,
+    Joey: bizzy,
+Subject: foo
+};
+
+ at headers = RT::Attachment->_SplitHeaders($test3);
+is ($#headers, 2, "testing a bunch of singline multiple headers" );
+
+
+=end testing
+
+=cut
+
+sub _SplitHeaders {
+    my $self = shift;
+    my $headers = (shift || $self->SUPER::Headers());
+    my @headers;
+    for (split(/\n(?=\w|\z)/,$headers)) {
+        push @headers, $_;
+
+    }
+    return(@headers);
+}
+
+
 sub ContentLength {
     my $self = shift;
 

Modified: rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm	Thu May  6 20:33:00 2004
@@ -51,7 +51,7 @@
 =head2 LimitToUsers
 
 Limits this search object to users who are members of this group
-This is really useful when you want to haave your UI seperate out
+This is really useful when you want to have your UI separate out
 groups from users for display purposes
 
 =cut
@@ -78,7 +78,7 @@
 =head2 LimitToGroups
 
 Limits this search object to Groups who are members of this group
-This is really useful when you want to haave your UI seperate out
+This is really useful when you want to have your UI separate out
 groups from users for display purposes
 
 =cut

Modified: rt/branches/rt-3.3/lib/RT/CurrentUser.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/CurrentUser.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/CurrentUser.pm	Thu May  6 20:33:00 2004
@@ -340,27 +340,25 @@
 =cut 
 
 sub LanguageHandle {
-     my $self = shift;
-     if (   ( !defined $self->{'LangHandle'} )
-         || ( !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' ) )
-         || (@_) ) {
-
-         if ( $RT::SystemUser and $self->id == $RT::SystemUser->id() ) {
-             @_ = qw(en-US);
-         }
-
-         elsif ( $self->Lang ) {
-             push @_, $self->Lang;
-         }
-         $self->{'LangHandle'} = RT::I18N->get_handle(@_);
-     }
-
-     # Fall back to english.
-     unless ( $self->{'LangHandle'} ) {
-         die "We couldn't get a dictionary. Nye mogu naidti slovar. No 
-puedo encontrar dictionario.";
-     }
-     return ( $self->{'LangHandle'} );
+    my $self = shift;
+    if (   ( !defined $self->{'LangHandle'} )
+        || ( !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' ) )
+        || (@_) ) {
+        if ( (!$RT::SystemUser || $self->id == $RT::SystemUser->id() )) {
+            @_ = qw(en-US);
+        }
+
+        elsif ( $self->Lang ) {
+            push @_, $self->Lang;
+        }
+        $self->{'LangHandle'} = RT::I18N->get_handle(@_);
+    }
+
+    # Fall back to english.
+    unless ( $self->{'LangHandle'} ) {
+        die "We couldn't get a dictionary. Nye mogu naidti slovar. No puedo encontrar dictionario.";
+    }
+    return ( $self->{'LangHandle'} );
 }
 
 sub loc {

Modified: rt/branches/rt-3.3/lib/RT/EmailParser.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/EmailParser.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/EmailParser.pm	Thu May  6 20:33:00 2004
@@ -183,7 +183,7 @@
         close($fh);
         if ( -f $temp_file ) {
             $self->ParseMIMEEntityFromFile($temp_file, $args{'Decode'});
-            File::Temp::unlink0( $fh, $temp_file );
+            unlink($temp_file );
         }
     } #If for some reason we weren't able to parse the message using a temp file      # try it with a scalar
     if ( !$self->Entity ) {
@@ -626,19 +626,21 @@
     ## Over max size and return them
 
 sub _SetupMIMEParser {
-    my $self = shift;
+    my $self   = shift;
     my $parser = shift;
-    my $AttachmentDir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 );
 
+    #$RT::Logger->crit(  $self->{'AttachmentDir'} );
     # Set up output directory for files:
-    $parser->output_dir("$AttachmentDir");
-    $parser->filer->ignore_filename(1);
 
+    my $tmpdir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 );
+    push ( @{ $self->{'AttachmentDirs'} }, $tmpdir );
+    $parser->output_dir($tmpdir);
+    $parser->filer->ignore_filename(1);
 
     #If someone includes a message, extract it
     $parser->extract_nested_messages(1);
 
-    $parser->extract_uuencode(1);           ### default is false
+    $parser->extract_uuencode(1);    ### default is false
 
     # Set up the prefix for files with auto-generated names:
     $parser->output_prefix("part");
@@ -647,8 +649,16 @@
 
     $parser->output_to_core(0);
 }
+
 # }}}
 
+sub DESTROY {
+    my $self = shift;
+    File::Path::rmtree([@{$self->{'AttachmentDirs'}}],0,1);
+}
+
+
+
 eval "require RT::EmailParser_Vendor";
 die $@ if ($@ && $@ !~ qr{^Can't locate RT/EmailParser_Vendor.pm});
 eval "require RT::EmailParser_Local";

Modified: rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm	Thu May  6 20:33:00 2004
@@ -51,7 +51,7 @@
 =head2 LimitToUsers
 
 Limits this search object to users who are members of this group.
-This is really useful when you want to haave your UI seperate out
+This is really useful when you want to have your UI separate out
 groups from users for display purposes
 
 =cut
@@ -78,7 +78,7 @@
 =head2 LimitToGroups
 
 Limits this search object to Groups who are members of this group.
-This is really useful when you want to haave your UI seperate out
+This is really useful when you want to have your UI separate out
 groups from users for display purposes
 
 =cut

Modified: rt/branches/rt-3.3/lib/RT/Group_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Group_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Group_Overlay.pm	Thu May  6 20:33:00 2004
@@ -1,3 +1,4 @@
+
 # BEGIN LICENSE BLOCK
 # 
 # Copyright (c) 1996-2003 Jesse Vincent <jesse at bestpractical.com>

Modified: rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm	Thu May  6 20:33:00 2004
@@ -236,7 +236,6 @@
                  IncludeSuperusers      => undef,
                  @_ );
 
-    my $groupprinc = $self->NewAlias('Principals');
     my $acl        = $self->NewAlias('ACL');
 
     # {{{ Find only rows where the right granted is the one we're looking up or _possibly_ superuser 
@@ -273,7 +272,7 @@
             $or_check_roles =
                 " OR ( ( (main.Domain = 'RT::Queue-Role' AND main.Instance = " .
                 $args{'Object'}->Id . ") $or_check_ticket_roles ) " .
-                " AND main.Type = $acl.PrincipalType AND main.id = $groupprinc.id) ";
+                " AND main.Type = $acl.PrincipalType AND main.id = $acl.PrincipalId) ";
         }
 
 	if ( $args{'IncludeSystemRights'} ) {
@@ -291,12 +290,11 @@
 
     $self->_AddSubClause( "WhichGroup",
         qq{
-          ( (    $acl.PrincipalId = $groupprinc.id
+          ( (    $acl.PrincipalId = main.id
              AND $acl.PrincipalType = 'Group'
              AND (   main.Domain = 'SystemInternal'
                   OR main.Domain = 'UserDefined'
-                  OR main.Domain = 'ACLEquivalence')
-             AND main.id = $groupprinc.id)
+                  OR main.Domain = 'ACLEquivalence'))
            $or_check_roles)
         }
     );
@@ -355,5 +353,18 @@
 		);
 }
 # }}}
+
+sub _DoSearch {
+    my $self = shift;
+    
+    #unless we really want to find disabled rows, make sure we\'re only finding enabled ones.
+    unless($self->{'find_disabled_rows'}) {
+	$self->LimitToEnabled();
+    }
+    
+    return($self->SUPER::_DoSearch(@_));
+    
+}
+
 1;
 

Modified: rt/branches/rt-3.3/lib/RT/Handle.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Handle.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Handle.pm	Thu May  6 20:33:00 2004
@@ -60,7 +60,6 @@
 sub Connect {
     my $self = shift;
 
-
     if ($RT::DatabaseType eq 'Oracle') {
         $ENV{'NLS_LANG'} = ".UTF8";
     }

Modified: rt/branches/rt-3.3/lib/RT/I18N/cs.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/cs.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/cs.po	Thu May  6 20:33:00 2004
@@ -259,7 +259,7 @@
 msgstr "(Zatrhněte pro smazání)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Zadejte identifikátory či URL požadavku, oddělené mezerami)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/de.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/de.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/de.po	Thu May  6 20:33:00 2004
@@ -275,7 +275,7 @@
 msgstr "(Markieren um zu löschen)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Gib Anfragenummern oder URLs getrennt durch Leerzeichen ein)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/es.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/es.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/es.po	Thu May  6 20:33:00 2004
@@ -275,7 +275,7 @@
 msgstr "(Marque las cajas para borrar)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Introduzca los identificadores de ticket o URLs, separados por espacios)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/fr.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/fr.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/fr.po	Thu May  6 20:33:00 2004
@@ -281,7 +281,7 @@
 msgstr "(Cocher la case pour supprimer)"
 
 #: html/Ticket/Create.html:177
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Entrer les numéros de tickets ou les URLs, séparés par des espaces)"
 
 #: html/Admin/Queues/Modify.html:53 html/Admin/Queues/Modify.html:59

Modified: rt/branches/rt-3.3/lib/RT/I18N/he.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/he.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/he.po	Thu May  6 20:33:00 2004
@@ -279,7 +279,7 @@
 msgstr "(סמן תיבות כדי למחוק)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr ""
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/it.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/it.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/it.po	Thu May  6 20:33:00 2004
@@ -366,7 +366,7 @@
 msgstr "(Spunta la casella per cancellare)"
 
 #: html/Ticket/Create.html:177
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Inserire il numero di tickets o gli URL, separati da spazi)"
 
 #. ($RT::CorrespondAddress)

Modified: rt/branches/rt-3.3/lib/RT/I18N/ja.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/ja.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/ja.po	Thu May  6 20:33:00 2004
@@ -280,7 +280,7 @@
 msgstr ""
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(チケットIDまたはURLsを空欄で区切って入力してください)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/nl.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/nl.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/nl.po	Thu May  6 20:33:00 2004
@@ -273,7 +273,7 @@
 msgstr ""
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Vul ticket ids of URLs in, gescheiden door spaties)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/no.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/no.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/no.po	Thu May  6 20:33:00 2004
@@ -282,7 +282,7 @@
 msgstr "(Merk boksene for å slette)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Skriv inn referansenummer eller URler, separert med mellomrom)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/pt_br.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/pt_br.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/pt_br.po	Thu May  6 20:33:00 2004
@@ -279,7 +279,7 @@
 msgstr "(Assinale para remover)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Entre com identificadores de tíquetes ou URLs, separados por espaços)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/I18N/ru.po
==============================================================================
--- rt/branches/rt-3.3/lib/RT/I18N/ru.po	(original)
+++ rt/branches/rt-3.3/lib/RT/I18N/ru.po	Thu May  6 20:33:00 2004
@@ -249,7 +249,7 @@
 msgstr "(Пометьте то, что хотите удалить)"
 
 #: html/Ticket/Create.html:178
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
+msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Введите номера или ссылки на тикеты. Несколько тикетов разделяются пробелами.)"
 
 #: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60

Modified: rt/branches/rt-3.3/lib/RT/Interface/Email.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Interface/Email.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Interface/Email.pm	Thu May  6 20:33:00 2004
@@ -182,14 +182,13 @@
 
     }
 
- 
     if ($RT::MailCommand eq 'sendmailpipe') {
         open (MAIL, "|$RT::SendmailPath $RT::SendmailArguments") || return(0);
         print MAIL $entity->as_string;
         close(MAIL);
     }
     else {
-	$entity->send($RT::MailCommand, $RT::MailParams);
+    	$entity->send($RT::MailCommand, $RT::MailParams);
     }
 }
 
@@ -416,7 +415,6 @@
 
     $parser->SmartParseMIMEEntityFromScalar( Message => $args{'message'});
 
-
     if (!$parser->Entity()) {
         MailError(
             To          => $RT::OwnerEmail,

Modified: rt/branches/rt-3.3/lib/RT/Interface/Web.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Interface/Web.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Interface/Web.pm	Thu May  6 20:33:00 2004
@@ -101,6 +101,7 @@
         default_escape_flags => 'h',
         allow_globals        => [qw(%session)],
         autoflush => 1,
+        @_
     );
   
 
@@ -123,7 +124,7 @@
 
 sub EscapeUTF8  {
         my  $ref = shift;
-        my $val = (Encode::is_utf8($$ref) ? Encode::encode_utf8($$ref) : $$ref);
+        my $val = (Encode::is_utf8($$ref) ? Encode::encode_utf8($$ref) : $$ref);                                                                                                                                
         $val =~ s/&/&#38;/g;
         $val =~ s/</&lt;/g; 
         $val =~ s/>/&gt;/g;
@@ -920,7 +921,7 @@
     my $Object = $args{'Object'};
     my @results = $Object->Update(AttributesRef => $args{'AttributesRef'},
 				  ARGSRef       => $args{'ARGSRef'},
-				  AttributePrefix => undef,
+                  AttributePrefix => $args{'AttributePrefix'}
 				  );
 
     return (@results);

Modified: rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm	Thu May  6 20:33:00 2004
@@ -557,7 +557,7 @@
 Returns a list uniquely representing an object or normal scalar.
 
 For scalars, its string value is returned; for objects that has an
-id() method, its class name and Id are returned as a string seperated by a "-".
+id() method, its class name and Id are returned as a string separated by a "-".
 
 =cut
 

Modified: rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm	Thu May  6 20:33:00 2004
@@ -49,6 +49,7 @@
 use vars qw(@STATUS @ACTIVE_STATUS @INACTIVE_STATUS $RIGHTS);
 use RT::Groups;
 use RT::ACL;
+use RT::EmailParser;
 
 
 @ACTIVE_STATUS = qw(new open stalled);
@@ -657,10 +658,13 @@
         # if the user doesn't exist, we need to create a new user
              my $new_user = RT::User->new($RT::SystemUser);
 
+            my ( $Address, $Name ) =  
+               RT::EmailParser::ParseAddressFromHeader('', $args{'Email'});
+
             my ( $Val, $Message ) = $new_user->Create(
-                Name => $args{'Email'},
-                EmailAddress => $args{'Email'},
-                RealName     => $args{'Email'},
+                Name => $Address,
+                EmailAddress => $Address,
+                RealName     => $Name,
                 Privileged   => 0,
                 Comments     => 'Autocreated when added as a watcher');
             unless ($Val) {

Modified: rt/branches/rt-3.3/lib/RT/Template_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Template_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Template_Overlay.pm	Thu May  6 20:33:00 2004
@@ -318,20 +318,9 @@
 
     my $parser = MIME::Parser->new();
 
-    # Setup output directory for files. from RT::EmailParser::_SetupMIMEParser
-    if ( my $AttachmentDir =
-        eval { File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 ) } )
-    {
-
-        # Set up output directory for files:
-        $parser->output_dir("$AttachmentDir");
-    }
-    else {
-        $RT::Logger->error("Couldn't write attachments to temp dir on disk. using more memory and processor.");
         # On some situations TMPDIR is non-writable. sad but true.
         $parser->output_to_core(1);
         $parser->tmp_to_core(1);
-    }
 
     #If someone includes a message, don't extract it
     $parser->extract_nested_messages(1);
@@ -423,4 +412,5 @@
 }
 
 # }}}
+
 1;

Modified: rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm	Thu May  6 20:33:00 2004
@@ -338,7 +338,6 @@
                  Resolved        => undef,
                  MIMEObj         => undef,
                  _RecordTransaction => 1,
-
         @_
     );
 
@@ -2715,7 +2714,7 @@
 
     # We use EffectiveId here even though it duplicates information from
     # the links table becasue of the massive performance hit we'd take
-    # by trying to do a seperate database query for merge info everytime 
+    # by trying to do a separate database query for merge info everytime 
     # loaded a ticket. 
 
     #update this ticket's effective id to the new ticket's id.

Modified: rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm	Thu May  6 20:33:00 2004
@@ -542,14 +542,6 @@
 
   $sb->_OpenParen;
 
-  # Join Transactions To Attachments
-  $sb->_SQLJoin( ALIAS1 => $sb->{_sql_trattachalias}, FIELD1 => 'TransactionId',
-	     ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'id');
-
-  # Join Transactions to Tickets
-  $sb->_SQLJoin( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, # UGH!
-	     ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'Ticket');
-
   #Search for the right field
   $sb->_SQLLimit(ALIAS => $sb->{_sql_trattachalias},
 		 FIELD =>    $field,
@@ -559,6 +551,14 @@
 		 @rest
 		);
 
+  # Join Transactions To Attachments
+  $sb->_SQLJoin( ALIAS1 => $sb->{_sql_trattachalias}, FIELD1 => 'TransactionId',
+	     ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'id');
+
+  # Join Transactions to Tickets
+  $sb->_SQLJoin( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, # UGH!
+	     ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'Ticket');
+
   $sb->_CloseParen;
 
 }

Modified: rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm	Thu May  6 20:33:00 2004
@@ -457,8 +457,53 @@
 ok ($cols[0] == undef, "We haven't explicitly asked to display anything");
 
 
+my (@ids, @expectedids);
 
+my $t = RT::Ticket->new($RT::SystemUser);
 
+my $string = 'subject/content SQL test';
+ok( $t->Create(Queue => 'General', Subject => $string), "Ticket Created");
+
+push @ids, $t->Id;
+
+my $Message = MIME::Entity->build(
+			     Subject     => 'this is my subject',
+			     From        => 'jesse at example.com',
+			     Data        => [ $string ],
+        );
+
+ok( $t->Create(Queue => 'General', Subject => 'another ticket', MIMEObj => $Message, MemberOf => $ids[0]), "Ticket Created");
+
+push @ids, $t->Id;
+
+$query = ("Subject LIKE '$string' OR Content LIKE '$string'");
+
+my ($id, $msg) = $tix->FromSQL($query);
+
+ok ($id, $msg);
+
+is ($tix->Count, scalar @ids, "number of returned tickets same as entered");
+
+while (my $tick = $tix->Next) {
+    push @expectedids, $tick->Id;
+}
+
+ok (eq_array(\@ids, \@expectedids), "returned expected tickets");
+
+$query = ("id = $ids[0] OR MemberOf = $ids[0]");
+
+my ($id, $msg) = $tix->FromSQL($query);
+
+ok ($id, $msg);
+
+is ($tix->Count, scalar @ids, "number of returned tickets same as entered");
+
+ at expectedids = ();
+while (my $tick = $tix->Next) {
+    push @expectedids, $tick->Id;
+}
+
+ok (eq_array(\@ids, \@expectedids), "returned expected tickets");
 
 =end testing
 
@@ -505,8 +550,8 @@
     $self->SUPER::Limit( FIELD => 'Type', OPERATOR => '=', VALUE => 'ticket');
   }
 
-  # We should never find deleted 
-  $self->SUPER::Limit( FIELD => 'Status', OPERATOR => '!=', VALUE => 'deleted');
+  # We never ever want to show deleted tickets
+  $self->SUPER::Limit(FIELD => 'Status' , OPERATOR => '!=', VALUE => 'deleted');
 
 
   # set SB's dirty flag

Modified: rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm	Thu May  6 20:33:00 2004
@@ -92,11 +92,9 @@
  	
     my $Transaction = $self->SUPER::Next();
     if ((defined($Transaction)) and (ref($Transaction))) {
-	if ($Transaction->__Value('Type') =~ /^Comment/ && 
-	    $Transaction->TicketObj->CurrentUserHasRight('ShowTicketComments')) {
-	    return($Transaction);
-	} elsif ($Transaction->__Value('Type') !~ /^Comment/ && 
-		 $Transaction->TicketObj->CurrentUserHasRight('ShowTicket')) {
+    	# If the user can see the transaction's type, then they can 
+	#  see the transaction and we should hand it back.
+	if ($Transaction->Type) {
 	    return($Transaction);
 	}
 
@@ -113,24 +111,6 @@
 }
 # }}}
 
-=head2 example methods
-
-  Queue RT::Queue or Queue Id
-  Ticket RT::Ticket or Ticket Id
-
-
-LimitDate 
-  
-Type TRANSTYPE
-Field STRING
-OldValue OLDVAL
-NewValue NEWVAL
-Data DATA
-TimeTaken
-Actor USEROBJ/USERID
-ContentMatches STRING
-
-=cut
 
 
 1;

Modified: rt/branches/rt-3.3/lib/RT/User_Overlay.pm
==============================================================================
--- rt/branches/rt-3.3/lib/RT/User_Overlay.pm	(original)
+++ rt/branches/rt-3.3/lib/RT/User_Overlay.pm	Thu May  6 20:33:00 2004
@@ -53,6 +53,7 @@
 use Digest::MD5;
 use RT::Principals;
 use RT::ACE;
+use RT::EmailParser;
 
 
 # {{{ sub _Accessible 
@@ -221,14 +222,15 @@
     my $principal_id = $principal->Create(PrincipalType => 'User',
                                 Disabled => $args{'Disabled'},
                                 ObjectId => '0');
-    $principal->__Set(Field => 'ObjectId', Value => $principal_id);
     # If we couldn't create a principal Id, get the fuck out.
     unless ($principal_id) {
         $RT::Handle->Rollback();
-        $RT::Logger->crit("Couldn't create a Principal on new user create. Strange things are afoot at the circle K");
+        $RT::Logger->crit("Couldn't create a Principal on new user create.");
+        $RT::Logger->crit("Strange things are afoot at the circle K");
         return ( 0, $self->loc('Could not create user') );
     }
 
+    $principal->__Set(Field => 'ObjectId', Value => $principal_id);
     delete $args{'Disabled'};
 
     $self->SUPER::Create(id => $principal_id , %args);
@@ -242,15 +244,6 @@
         return ( 0, $self->loc('Could not create user') );
     }
 
-
-    #TODO post 2.0
-    #if ($args{'SendWelcomeMessage'}) {
-    #	#TODO: Check if the email exists and looks valid
-    #	#TODO: Send the user a "welcome message" 
-    #}
-
-
-
     my $aclstash = RT::Group->new($self->CurrentUser);
     my $stash_id = $aclstash->_CreateACLEquivalenceGroup($principal);
 
@@ -260,31 +253,55 @@
         return ( 0, $self->loc('Could not create user') );
     }
 
-    $RT::Handle->Commit;
 
-    #$RT::Logger->debug("Adding the user as a member of everyone"); 
     my $everyone = RT::Group->new($self->CurrentUser);
     $everyone->LoadSystemInternalGroup('Everyone');
-    $everyone->AddMember($self->PrincipalId);
+    unless ($everyone->id) {
+        $RT::Logger->crit("Could not load Everyone group on user creation.");
+        $RT::Handle->Rollback();
+        return ( 0, $self->loc('Could not create user') );
+    }
+
+
+    my ($everyone_id, $everyone_msg) = $everyone->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);
+    unless ($everyone_id) {
+        $RT::Logger->crit("Could not add user to Everyone group on user creation.");
+        $RT::Logger->crit($everyone_msg);
+        $RT::Handle->Rollback();
+        return ( 0, $self->loc('Could not create user') );
+    }
+
 
+    my $access_class = RT::Group->new($self->CurrentUser);
     if ($privileged)  {
-        my $priv = RT::Group->new($self->CurrentUser);
-        #$RT::Logger->debug("Making ".$self->Id." a privileged user");
-        $priv->LoadSystemInternalGroup('Privileged');
-        $priv->AddMember($self->PrincipalId);  
+        $access_class->LoadSystemInternalGroup('Privileged');
     } else {
-        my $unpriv = RT::Group->new($self->CurrentUser);
-        #$RT::Logger->debug("Making ".$self->Id." an unprivileged user");
-        $unpriv->LoadSystemInternalGroup('Unprivileged');
-        $unpriv->AddMember($self->PrincipalId);  
+        $access_class->LoadSystemInternalGroup('Unprivileged');
     }
 
+    unless ($access_class->id) {
+        $RT::Logger->crit("Could not load Privileged or Unprivileged group on user creation");
+        $RT::Handle->Rollback();
+        return ( 0, $self->loc('Could not create user') );
+    }
+
+
+    my ($ac_id, $ac_msg) = $access_class->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);  
+
+    unless ($ac_id) {
+        $RT::Logger->crit("Could not add user to Privileged or Unprivileged group on user creation. Aborted");
+        $RT::Logger->crit($ac_msg);
+        $RT::Handle->Rollback();
+        return ( 0, $self->loc('Could not create user') );
+    }
+
+
     if ( $record_transaction ) {
 	$self->_NewTransaction( Type => "Create" );
     }
 
+    $RT::Handle->Commit;
 
-   #  $RT::Logger->debug("Finished creating the user");
     return ( $id, $self->loc('User created') );
 }
 
@@ -322,6 +339,10 @@
     my $self = shift;
     my $val = shift;
 
+    #Check the ACL
+    unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) {
+        return ( 0, $self->loc('Permission Denied') );
+    }
     my $priv = RT::Group->new($self->CurrentUser);
     $priv->LoadSystemInternalGroup('Privileged');
    
@@ -343,7 +364,7 @@
             return (0,$self->loc("That user is already privileged"));
         }
         if ($unpriv->HasMember($self->PrincipalObj)) {
-            $unpriv->DeleteMember($self->PrincipalId);
+            $unpriv->_DeleteMember($self->PrincipalId);
         } else {
         # if we had layered transactions, life would be good
         # sadly, we have to just go ahead, even if something
@@ -351,7 +372,7 @@
             $RT::Logger->crit("User ".$self->Id." is neither privileged nor ".
                 "unprivileged. something is drastically wrong.");
         }
-        my ($status, $msg) = $priv->AddMember($self->PrincipalId);  
+        my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);  
         if ($status) {
             return (1, $self->loc("That user is now privileged"));
         } else {
@@ -364,7 +385,7 @@
             return (0,$self->loc("That user is already unprivileged"));
         }
         if ($priv->HasMember($self->PrincipalObj)) {
-            $priv->DeleteMember($self->PrincipalId);
+            $priv->_DeleteMember( $self->PrincipalId);
         } else {
         # if we had layered transactions, life would be good
         # sadly, we have to just go ahead, even if something
@@ -372,7 +393,7 @@
             $RT::Logger->crit("User ".$self->Id." is neither privileged nor ".
                 "unprivileged. something is drastically wrong.");
         }
-        my ($status, $msg) = $unpriv->AddMember($self->PrincipalId);  
+        my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId);  
         if ($status) {
             return (1, $self->loc("That user is now unprivileged"));
         } else {
@@ -538,13 +559,17 @@
 
         my ($val, $message);
 
+	my ( $Address, $Name ) =
+		RT::EmailParser::ParseAddressFromHeader('', $email);
+	$email = $Address;
+
         $self->LoadByEmail($email);
         $message = $self->loc('User loaded');
         unless ($self->Id) {
             ( $val, $message ) = $self->Create(
                 Name => $email,
                 EmailAddress => $email,
-                RealName     => $email,
+                RealName     => $Name,
                 Privileged   => 0,
                 Comments     => 'Autocreated when added as a watcher');
             unless ($val) {

Modified: rt/branches/rt-3.3/sbin/rt-setup-database.in
==============================================================================
--- rt/branches/rt-3.3/sbin/rt-setup-database.in	(original)
+++ rt/branches/rt-3.3/sbin/rt-setup-database.in	Thu May  6 20:33:00 2004
@@ -453,6 +453,8 @@
                   $princ->LoadUserDefinedGroup( $item->{'GroupId'} );
 	        } elsif ($item->{'GroupDomain'} eq 'SystemInternal') {
                   $princ->LoadSystemInternalGroup( $item->{'GroupType'} );
+	        } elsif ($item->{'GroupDomain'} eq 'RT::System-Role') {
+                  $princ->LoadSystemRoleGroup( $item->{'GroupType'} );
 	        } elsif ($item->{'GroupDomain'} eq 'RT::Queue-Role' &&
 			 $item->{'Queue'}) {
                   $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'},

Modified: rt/branches/rt-3.3/sbin/rt-test-dependencies.in
==============================================================================
--- rt/branches/rt-3.3/sbin/rt-test-dependencies.in	(original)
+++ rt/branches/rt-3.3/sbin/rt-test-dependencies.in	Thu May  6 20:33:00 2004
@@ -188,6 +188,10 @@
 DBD::Pg
 .
 
+$deps{'SQLITE'} = [ _( << '.') ];
+DBD::SQLite
+.
+
 if ($args{'download'}) {
 
     my %modules;
@@ -231,16 +235,19 @@
 
 
 print "perl:\n";
-print "\t5.8.0";
-eval {require 5.008};
+print "\t5.8.3";
+eval {require 5.008003};
 if ($@) {
-print "...missing.\n";
-        eval {require 5.006001};
+print "...MISSING.\n";
+        eval {require 5.008000};
         if ($@) {
-            print " RT is known to be non-functional on versions of perl older than 5.6.1. Please upgrade to 5.8.0 or newer";
+            print "\nRT is known to be non-functional on versions of perl older than 5.8.3.\nPlease upgrade to 5.8.3 or newer\n\n";
             die;
-        } else {
-            print " RT is not supported on perl 5.6.1\n";
+        } 
+
+        eval {require 5.008003};
+        if ($@) {
+            print "\nRT is known to be non-functional on versions of perl older than 5.8.3.\nPlease upgrade to 5.8.3 or newer\n\n";
         }
 } else {
         print "...found\n";


More information about the Rt-commit mailing list