[Rt-commit] rt branch, master, updated. rt-4.1.8-144-gb807ad4

Alex Vandiver alexmv at bestpractical.com
Tue Apr 9 18:41:05 EDT 2013


The branch, master has been updated
       via  b807ad43d1ec0baac2d5ccb3df84eb07567e1553 (commit)
       via  4a6309a72bf9ac2febbb64a396dab73fa68d98d2 (commit)
       via  027f4e71c673c7b3dc611691fa5ca8b2c0bf081c (commit)
       via  fc10251e31f68f1472f7dc4b11ffe8e559bd31e0 (commit)
       via  b0a88b4f116c5c432d8ef6f6ddecbe4e6bfa3af7 (commit)
       via  fccf32a72ad826381936d7b2287e29e171c8ef06 (commit)
       via  6a4aa17cedc3237cd46ecaf9cfc4444437a1ff7d (commit)
       via  3bae54878b55f934add7106fb1fe8ab8bac217f5 (commit)
       via  9488f9fa325f8a4efbdcd3fd5725c06744c555c0 (commit)
       via  b68ef820efd7095a2728cf2520c68d5eea5cc02e (commit)
       via  d5c44844b269e2e35b0f20d796f5ce876e3b4662 (commit)
       via  f6885efc1261fa0acaffe4af2f59985ce02801f0 (commit)
       via  691c5065623a526aa8af664e10f5aae6778eb019 (commit)
       via  3d0fdb333400662f7020afda8025423ea685f88a (commit)
       via  867fb5f4fd92ebe9ba49a16b26496c90aaa1c76c (commit)
       via  49974ec60b73b99e1f48f9737f58194d2a8c51a0 (commit)
       via  e4bf8c1dcac178d38c7c85e83e2234a9044fb8c8 (commit)
       via  e8bb11feff222a23ebc1af1b0860b2c75fd0d16c (commit)
       via  e26176e622748eada12e32592630723abe425a15 (commit)
       via  418c7f4b9a2b4c927a05291b1a948e405dcaf39f (commit)
       via  36d49987e2302f5af523a3fddea46bb173681f3b (commit)
       via  f1df5b606a5de0cd267b3a77fc0f101c9075e408 (commit)
       via  b9c46a4e23082df558cadfc3c0f469919039a8a0 (commit)
       via  1cc214bb34c94b3ededff670e5510cb1630b7e49 (commit)
       via  5f2670871d64a78ee2a33596cccf6ae9d7557ecc (commit)
       via  ca919c1d58ce5ee6d0e3d8f55d07fff72fc59413 (commit)
       via  27428ec8e1b3caa12a547895e04ceb249e7221f4 (commit)
       via  f4069e5637a92de949d02c982117c2f58acfed85 (commit)
       via  0e3c5bb3b975046a4332c7d9ece4f7f2bf1aa2b7 (commit)
       via  47c9dd1a8c435159dc3fba044982a0b333dfe0fb (commit)
       via  34254bb3670459bff30d86ba2bf5a7e8d0e8e662 (commit)
       via  75cb3c2e598c4a5fa329913c91294ebf8423b511 (commit)
       via  d6c77df1bf7732457dcbc838a24f516b9956bb6e (commit)
       via  76338412300f42e5d7830b59af2df79c3925a3f4 (commit)
       via  4ff29385a4feaa50af9773ab8cd33d8eded4b84e (commit)
       via  0f4023d69025a58bb0c02b1f07f6c8e6e91ce1e7 (commit)
       via  67cca0664f0c38356e6438fc7aa89a5fa78dbf35 (commit)
       via  81c3880f937110d3c4a7d2473758e3bd870f9ffe (commit)
       via  a35a117b9cb6ee458776d4756d1f3c89ac011574 (commit)
       via  2b12fb23b3988df8a0ab10894945cc6f095b5c2c (commit)
       via  42a245b93a7b54d611c8c90a6db6371a209b28af (commit)
       via  af2facd35a13199e3b9db4e50c6db06828223f89 (commit)
       via  15692ecf3cb5c4c850b1692ab34746ba8fbfcddb (commit)
       via  518d7891b9dda243dcc7ea6a36b915c290bf5fd5 (commit)
       via  409a7b20fcd9f7cc8cb4dc9bb719a549ae97beb6 (commit)
       via  eaad687bb42853756c4fbc0143f97c9f8de15ea1 (commit)
       via  dfc6123c59921472339b521dda72568c1bc67198 (commit)
       via  986b1f235d3509227a883e414f0a71a11a82e0de (commit)
       via  40cb640ef8b7cdc544cd50a029f68c39ee037a39 (commit)
       via  8c90b68ea5e5bff591a84b5f810622b814aee241 (commit)
       via  85c2d24774292e06b51e491b7fa07597ae59f1bb (commit)
       via  e4f336255c70d1ab48e42bdca9bc5fad2bf2f177 (commit)
       via  033dd9655ca319d44cc19e4b9cdaedc93fdb5119 (commit)
       via  7115dc41a582ef07c81e3be999e8a3150f34b6d2 (commit)
       via  9c51da51ba88b9ce9c586b4f9c11230754c1ca56 (commit)
       via  81fc7cb6b5618f60409843a4cf51887bb2b53757 (commit)
       via  cd76f2bb673e1675f8a94697bc34b617bdad8ae8 (commit)
       via  69b8a01c7527e602abb4d5e9bb2e084756956a34 (commit)
       via  ac11ea55a6ef39627f38ecb58487960b57414190 (commit)
       via  313eb19e3cb6a6d96fc2dce6f2f5bd1fa767110e (commit)
       via  ae3c499aff4985ab1c40c273e8caf879a2c867ae (commit)
       via  5a792b98f740434bc422b6f683d36566d0a74bd4 (commit)
       via  08aa38d08a87e63f0e67afbc720ef187b8b5123b (commit)
       via  c5e5ea3958f5313c289c17766109d77ecde90895 (commit)
       via  baf212e3f802530e448664da573778c5680f931e (commit)
       via  85eef0824686bdbdc209d8769162245d87a016c6 (commit)
       via  d0193ef37c635891a319440460b50a5bd2fe59ff (commit)
       via  7c0471747e466c1e745ba4dafd52d1e66d93e32e (commit)
       via  8cf12883b9a94c93c08d7e7d938c684bb358a2ca (commit)
       via  556f81d7ec161695f53e1773ffa09c99fe64ed3d (commit)
       via  e53f59716c94540df4fc73dd636cd8a9fb43b44d (commit)
       via  af4711aa0f814e91392e72942ce44303f8d4c2e6 (commit)
       via  856fad17c3b08be0aace12c69247be5371f61102 (commit)
       via  8fa4cc9f724ca1c65383cda2f89cbcdd818b5d59 (commit)
       via  04387ee2c6b2232df41d8ea0986e26edee74fa0c (commit)
       via  2123fcb6936ea4ada5f76aab1a8d60207b3615c7 (commit)
       via  6ee684bdb51713895af136c6262a86d3279f8a94 (commit)
       via  7e11127f257aa8bbbc6cc43c38d807346c5edf69 (commit)
       via  12d29194219ea8dce815a9acdaefb9a98331ed3c (commit)
       via  91c6c74f4d0f79703272e75ae79682f39ca5bd4e (commit)
       via  99d6b3fd52dd9aee0a37bcc99a03c5c427aeebec (commit)
       via  74675e0c3d40eb4a40350aefa226217760f521b1 (commit)
       via  86f7b03372df6f30fb8e9aad043b9b4721dc4eb8 (commit)
       via  2bfc84570fe4deeea64df704cb59f110fa8fda01 (commit)
       via  d81619c7d39b10a699528307eb7dca16e8a2a229 (commit)
       via  c8c468f87da1c365aeb02bc5d6514f4360bc09e6 (commit)
       via  f06d2b291ce6c7f80eae3d2e0ed14cbfdff8e971 (commit)
       via  6fbfcb7fb0a69d474f94d942c581df0239215256 (commit)
       via  777fbe9082cfb6e13b6234e60e03ed7b68d8b0a7 (commit)
       via  97ee6ca5811e9b68c5c7a3a52b24677a301bf78b (commit)
       via  5c0efc3773eaba35d9853fa45691d8c7b506d8b2 (commit)
       via  292dd3bf6fb7371593a8a978868308a1f1cc75d1 (commit)
       via  1f77b832803c6c55199c468c3e100e3c5ae5e161 (commit)
       via  7950ee05566b0ca57312f4f4a3d6f42dc5905f22 (commit)
       via  a514051c94943245c6dceec10de9c17896869e0b (commit)
       via  c209e59536f5b26af8d58b51ba835f58cbf16ed9 (commit)
       via  cea84427f7ef61ccd57bec2d428319a9565c617b (commit)
       via  4db0f487033002e5ea6ce2e47af9bae7051ae8da (commit)
       via  e938bd13697a6f7f473160d393fe622aad8ea067 (commit)
       via  1f5e2a240a52ebc56a7686501523603566f4c8a0 (commit)
       via  77ba7543ed0f91d20fbc01d0d727273266342158 (commit)
       via  282b7eeb15366fb29807ab242262003c33a18742 (commit)
       via  365b6ce782fa86828e8e984744a57aaabb7d2eeb (commit)
       via  4fbd500cfc7f4ed3bcb54518fa8c2c1d3c9fac49 (commit)
       via  0c86c71e84ec6d8e6e9bfe4693634e4ac8914a70 (commit)
       via  ed77c638e85a2eb2f057208bcfb8e04e8492d6e1 (commit)
       via  75da47f1a434ccd6d3d023c39156d0cccf93cc35 (commit)
       via  99e4df46ef7ea535f5f4bdd3d424eb61394479f2 (commit)
       via  8d38730cd7f399850666569108926acfe73b29bf (commit)
       via  f0e57eadaac50ebab96cc38bda704f26454c3e34 (commit)
       via  b68179cd8515cd9485afe7114e75ae0b41929145 (commit)
       via  d04c6154892429aa47679c6ce40c259baadb5249 (commit)
       via  d4c8682d31dec03e0d1a542323a50956f17f8cb5 (commit)
       via  0758c145aa35796a8d595afeff32da21deca75cf (commit)
       via  afe1b9fa86f59bda9aded442dbc7ea0cb948b099 (commit)
       via  6f2e68c5766e9cab576f68ddb759e10d9c188557 (commit)
       via  1c82e3e55e48c38adff2dce58cfe1d76cc0d88c6 (commit)
       via  6d954a45e3fd0197028a6824db6b271f9b9c3d0a (commit)
       via  4f107820e8d85490d5e140a72fe3cef5f3711469 (commit)
       via  d9f90ffa9d756112fea5fbbea78a7f40299ff009 (commit)
       via  983cafa82186758eb0a3ba56431a9961db019048 (commit)
       via  99f47db89d27573d827a6301b8c7e896e502f75a (commit)
       via  e6cfc69c40da44fa367e1e7dad0deeae909819ac (commit)
       via  d6aa0e83a1fad0bbb0b47ff6d70e8e1a8941ff27 (commit)
       via  1a489946312aefb1c2f116140e7d08d6f5490ea0 (commit)
       via  7f832319a46ba7abec96de2722eefa031d16a100 (commit)
       via  f10490e1eb64c9a2afb0cb40fe74a32f7b06eb2e (commit)
       via  644407a8078d9b20bd1ae82d9a37c5412fe28807 (commit)
       via  da08f6fec529c76b12a6cae9c62cb857cafb6b99 (commit)
      from  6c9ba96903cc60b4058b52c4ba46daea04858a89 (commit)

Summary of changes:
 README                                             |    2 +-
 bin/rt-crontool.in                                 |    2 +-
 devel/tools/license_tag                            |    2 +-
 docs/UPGRADING-4.0                                 |   10 +-
 docs/extending/external_custom_fields.pod          |    2 +-
 docs/web_deployment.pod                            |    5 +-
 etc/RT_Config.pm.in                                |   14 +-
 etc/initialdata                                    |   60 +-
 etc/upgrade/time-worked-history.pl                 |   47 +
 lib/RT/Action/ExtractSubjectTag.pm                 |   38 +
 lib/RT/Action/RecordCorrespondence.pm              |    2 +-
 lib/RT/CustomField.pm                              |    7 +-
 lib/RT/CustomFieldValues/External.pm               |    2 +-
 lib/RT/Group.pm                                    |    5 +-
 lib/RT/Handle.pm                                   |   21 +-
 .../{Interface/Web/QueryBuilder.pm => I18N/de.pm}  |    9 +-
 lib/RT/{Condition/AnyTransaction.pm => I18N/fr.pm} |   23 +-
 lib/RT/Interface/Web.pm                            |   59 +-
 lib/RT/Interface/Web/Handler.pm                    |   40 +
 lib/RT/Link.pm                                     |   43 +-
 lib/RT/Pod/HTML.pm                                 |   56 +-
 lib/RT/Record.pm                                   |    6 +-
 lib/RT/SearchBuilder.pm                            |    2 +-
 lib/RT/Shredder.pm                                 |    2 +-
 lib/RT/Template.pm                                 |    2 +-
 lib/RT/Test.pm                                     |    2 +
 lib/RT/Test/GnuPG.pm                               |    2 +
 lib/RT/Tickets.pm                                  |   43 +-
 lib/RT/Transaction.pm                              |   15 +-
 sbin/rt-fulltext-indexer.in                        |    4 +-
 sbin/rt-test-dependencies.in                       |    2 +-
 sbin/rt-validator.in                               |    2 +-
 share/html/Admin/CustomFields/Modify.html          |   10 +-
 share/html/Admin/Global/MyRT.html                  |   14 +-
 share/html/Admin/Users/MyRT.html                   |    8 +-
 share/html/Articles/Elements/GotoArticle           |    3 +-
 share/html/Dashboards/Queries.html                 |   15 +-
 share/html/Elements/CollectionList                 |    2 +-
 share/html/Elements/EditCustomFieldDate            |    4 +-
 share/html/Elements/ListActions                    |    3 +
 share/html/Elements/QueueSummaryByLifecycle        |   33 +-
 share/html/Elements/QueueSummaryByStatus           |   34 +-
 share/html/Elements/ShowCustomFieldDate            |    4 +-
 share/html/Elements/ShowMessageStanza              |   32 +-
 share/html/Elements/Tabs                           |   20 +-
 share/html/Helpers/Autocomplete/Groups             |    2 +-
 share/html/NoAuth/css/aileron/msie.css             |    8 -
 share/html/NoAuth/css/ballard/msie.css             |    8 -
 share/html/NoAuth/css/base/login.css               |    4 +
 share/html/NoAuth/css/base/ticket.css              |    1 -
 share/html/NoAuth/css/print.css                    |    8 +-
 share/html/NoAuth/css/web2/msie.css                |    8 -
 share/html/Prefs/MyRT.html                         |    9 +-
 share/html/Prefs/Quicksearch.html                  |   11 +-
 share/html/Search/Bulk.html                        |   26 +-
 share/html/Search/Elements/SearchesForObject       |    6 +-
 share/html/SelfService/Create.html                 |   15 +-
 share/html/SelfService/Display.html                |   31 +-
 share/html/SelfService/Update.html                 |   28 +-
 share/html/Ticket/Create.html                      |   26 +-
 share/html/Ticket/Elements/PreviewScrips           |    6 +-
 .../html/Ticket/Elements/ShowSimplifiedRecipients  |    3 +-
 share/html/Ticket/ModifyAll.html                   |   27 +-
 share/html/Ticket/Update.html                      |   34 +-
 share/html/Widgets/SavedSearch                     |    2 +-
 share/html/m/_elements/login                       |    9 +
 share/html/m/ticket/create                         |   30 +-
 share/html/m/ticket/reply                          |   30 +-
 share/po/ar.po                                     |  820 +--
 share/po/bg.po                                     |  634 +--
 share/po/{lv.po => ca.po}                          | 5465 +++++++++-----------
 share/po/cs.po                                     |  688 ++-
 share/po/da.po                                     |  634 +--
 share/po/de.po                                     |  634 +--
 share/po/el.po                                     |  634 +--
 share/po/en.po                                     |    2 +-
 share/po/en_GB.po                                  |  510 +-
 share/po/es.po                                     |  634 +--
 share/po/et.po                                     |  634 +--
 share/po/fi.po                                     |  634 +--
 share/po/fr.po                                     |  634 +--
 share/po/he.po                                     |  636 +--
 share/po/hr.po                                     |  634 +--
 share/po/hu.po                                     |  636 +--
 share/po/id.po                                     |  636 +--
 share/po/is.po                                     |  638 +--
 share/po/it.po                                     |  634 +--
 share/po/ja.po                                     |  638 +--
 share/po/lt.po                                     |  634 +--
 share/po/lv.po                                     |  634 +--
 share/po/mk.po                                     |  638 +--
 share/po/nb.po                                     |  634 +--
 share/po/nl.po                                     |  636 +--
 share/po/nn.po                                     |  634 +--
 share/po/oc.po                                     |  644 +--
 share/po/pl.po                                     |  634 +--
 share/po/pt.po                                     |  636 +--
 share/po/pt_BR.po                                  |  634 +--
 share/po/pt_PT.po                                  |  638 +--
 share/po/rt.pot                                    |  638 +--
 share/po/ru.po                                     |  634 +--
 share/po/sk.po                                     |  672 ++-
 share/po/sl.po                                     |  634 +--
 share/po/sv.po                                     |  636 +--
 share/po/tr.po                                     |  634 +--
 share/po/zh_CN.po                                  |  634 +--
 share/po/zh_TW.po                                  |  634 +--
 t/99-policy.t                                      |    2 +-
 t/api/group.t                                      |   17 +-
 t/articles/interface.t                             |    4 +-
 t/articles/queue-specific-class.t                  |    2 +-
 t/articles/search-interface.t                      |    2 +-
 t/customfields/access_via_queue.t                  |   29 +-
 t/customfields/date.t                              |   86 +
 t/customfields/date_search.t                       |   76 +-
 t/customfields/datetime.t                          |   76 +
 t/customfields/datetime_search.t                   |  107 +-
 t/customfields/external.t                          |    8 +-
 t/mail/extractsubjecttag.t                         |   23 +-
 t/web/action-results.t                             |   48 +
 t/web/admin_user.t                                 |   62 +-
 t/web/cf_values_class.t                            |   54 +
 122 files changed, 15770 insertions(+), 14992 deletions(-)
 copy lib/RT/{Interface/Web/QueryBuilder.pm => I18N/de.pm} (95%)
 copy lib/RT/{Condition/AnyTransaction.pm => I18N/fr.pm} (87%)
 copy share/po/{lv.po => ca.po} (67%)
 create mode 100644 t/customfields/date.t
 create mode 100644 t/customfields/datetime.t
 create mode 100644 t/web/action-results.t
 create mode 100644 t/web/cf_values_class.t

- Log -----------------------------------------------------------------
commit b807ad43d1ec0baac2d5ccb3df84eb07567e1553
Merge: 6c9ba96 4a6309a
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Tue Apr 9 18:40:17 2013 -0400

    Merge branch '4.0-trunk'
    
    Conflicts:
    	devel/third-party/README
    	devel/third-party/ckeditor/LICENSE.md
    	devel/third-party/ckeditor/adapters/jquery.js
    	devel/third-party/ckeditor/ckeditor_basic_source.js
    	devel/third-party/ckeditor/ckeditor_source.js
    	devel/third-party/ckeditor/core/_bootstrap.js
    	devel/third-party/ckeditor/core/ckeditor.js
    	devel/third-party/ckeditor/core/ckeditor_base.js
    	devel/third-party/ckeditor/core/ckeditor_basic.js
    	devel/third-party/ckeditor/core/command.js
    	devel/third-party/ckeditor/core/commanddefinition.js
    	devel/third-party/ckeditor/core/config.js
    	devel/third-party/ckeditor/core/dataprocessor.js
    	devel/third-party/ckeditor/core/dom.js
    	devel/third-party/ckeditor/core/dom/comment.js
    	devel/third-party/ckeditor/core/dom/document.js
    	devel/third-party/ckeditor/core/dom/documentfragment.js
    	devel/third-party/ckeditor/core/dom/domobject.js
    	devel/third-party/ckeditor/core/dom/element.js
    	devel/third-party/ckeditor/core/dom/elementpath.js
    	devel/third-party/ckeditor/core/dom/event.js
    	devel/third-party/ckeditor/core/dom/iterator.js
    	devel/third-party/ckeditor/core/dom/node.js
    	devel/third-party/ckeditor/core/dom/nodelist.js
    	devel/third-party/ckeditor/core/dom/range.js
    	devel/third-party/ckeditor/core/dom/rangelist.js
    	devel/third-party/ckeditor/core/dom/text.js
    	devel/third-party/ckeditor/core/dom/walker.js
    	devel/third-party/ckeditor/core/dom/window.js
    	devel/third-party/ckeditor/core/dtd.js
    	devel/third-party/ckeditor/core/editor.js
    	devel/third-party/ckeditor/core/editor_basic.js
    	devel/third-party/ckeditor/core/env.js
    	devel/third-party/ckeditor/core/event.js
    	devel/third-party/ckeditor/core/eventInfo.js
    	devel/third-party/ckeditor/core/focusmanager.js
    	devel/third-party/ckeditor/core/htmlparser.js
    	devel/third-party/ckeditor/core/htmlparser/basicwriter.js
    	devel/third-party/ckeditor/core/htmlparser/cdata.js
    	devel/third-party/ckeditor/core/htmlparser/comment.js
    	devel/third-party/ckeditor/core/htmlparser/element.js
    	devel/third-party/ckeditor/core/htmlparser/filter.js
    	devel/third-party/ckeditor/core/htmlparser/fragment.js
    	devel/third-party/ckeditor/core/htmlparser/text.js
    	devel/third-party/ckeditor/core/lang.js
    	devel/third-party/ckeditor/core/loader.js
    	devel/third-party/ckeditor/core/plugindefinition.js
    	devel/third-party/ckeditor/core/plugins.js
    	devel/third-party/ckeditor/core/resourcemanager.js
    	devel/third-party/ckeditor/core/scriptloader.js
    	devel/third-party/ckeditor/core/skins.js
    	devel/third-party/ckeditor/core/themes.js
    	devel/third-party/ckeditor/core/tools.js
    	devel/third-party/ckeditor/core/ui.js
    	devel/third-party/ckeditor/lang/_languages.js
    	devel/third-party/ckeditor/lang/_translationstatus.txt
    	devel/third-party/ckeditor/lang/af.js
    	devel/third-party/ckeditor/lang/ar.js
    	devel/third-party/ckeditor/lang/bg.js
    	devel/third-party/ckeditor/lang/bn.js
    	devel/third-party/ckeditor/lang/bs.js
    	devel/third-party/ckeditor/lang/ca.js
    	devel/third-party/ckeditor/lang/cs.js
    	devel/third-party/ckeditor/lang/cy.js
    	devel/third-party/ckeditor/lang/da.js
    	devel/third-party/ckeditor/lang/de.js
    	devel/third-party/ckeditor/lang/el.js
    	devel/third-party/ckeditor/lang/en-au.js
    	devel/third-party/ckeditor/lang/en-ca.js
    	devel/third-party/ckeditor/lang/en-gb.js
    	devel/third-party/ckeditor/lang/en.js
    	devel/third-party/ckeditor/lang/eo.js
    	devel/third-party/ckeditor/lang/es.js
    	devel/third-party/ckeditor/lang/et.js
    	devel/third-party/ckeditor/lang/eu.js
    	devel/third-party/ckeditor/lang/fa.js
    	devel/third-party/ckeditor/lang/fi.js
    	devel/third-party/ckeditor/lang/fo.js
    	devel/third-party/ckeditor/lang/fr-ca.js
    	devel/third-party/ckeditor/lang/fr.js
    	devel/third-party/ckeditor/lang/gl.js
    	devel/third-party/ckeditor/lang/gu.js
    	devel/third-party/ckeditor/lang/he.js
    	devel/third-party/ckeditor/lang/hi.js
    	devel/third-party/ckeditor/lang/hr.js
    	devel/third-party/ckeditor/lang/hu.js
    	devel/third-party/ckeditor/lang/is.js
    	devel/third-party/ckeditor/lang/it.js
    	devel/third-party/ckeditor/lang/ja.js
    	devel/third-party/ckeditor/lang/ka.js
    	devel/third-party/ckeditor/lang/km.js
    	devel/third-party/ckeditor/lang/ko.js
    	devel/third-party/ckeditor/lang/ku.js
    	devel/third-party/ckeditor/lang/lt.js
    	devel/third-party/ckeditor/lang/lv.js
    	devel/third-party/ckeditor/lang/mk.js
    	devel/third-party/ckeditor/lang/mn.js
    	devel/third-party/ckeditor/lang/ms.js
    	devel/third-party/ckeditor/lang/nb.js
    	devel/third-party/ckeditor/lang/nl.js
    	devel/third-party/ckeditor/lang/no.js
    	devel/third-party/ckeditor/lang/pl.js
    	devel/third-party/ckeditor/lang/pt-br.js
    	devel/third-party/ckeditor/lang/pt.js
    	devel/third-party/ckeditor/lang/ro.js
    	devel/third-party/ckeditor/lang/ru.js
    	devel/third-party/ckeditor/lang/sk.js
    	devel/third-party/ckeditor/lang/sl.js
    	devel/third-party/ckeditor/lang/sr-latn.js
    	devel/third-party/ckeditor/lang/sr.js
    	devel/third-party/ckeditor/lang/sv.js
    	devel/third-party/ckeditor/lang/th.js
    	devel/third-party/ckeditor/lang/tr.js
    	devel/third-party/ckeditor/lang/ug.js
    	devel/third-party/ckeditor/lang/uk.js
    	devel/third-party/ckeditor/lang/vi.js
    	devel/third-party/ckeditor/lang/zh-cn.js
    	devel/third-party/ckeditor/lang/zh.js
    	devel/third-party/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
    	devel/third-party/ckeditor/plugins/a11yhelp/lang/en.js
    	devel/third-party/ckeditor/plugins/a11yhelp/lang/he.js
    	devel/third-party/ckeditor/plugins/a11yhelp/plugin.js
    	devel/third-party/ckeditor/plugins/about/dialogs/about.js
    	devel/third-party/ckeditor/plugins/about/plugin.js
    	devel/third-party/ckeditor/plugins/autogrow/plugin.js
    	devel/third-party/ckeditor/plugins/basicstyles/plugin.js
    	devel/third-party/ckeditor/plugins/bidi/plugin.js
    	devel/third-party/ckeditor/plugins/blockquote/plugin.js
    	devel/third-party/ckeditor/plugins/button/plugin.js
    	devel/third-party/ckeditor/plugins/clipboard/dialogs/paste.js
    	devel/third-party/ckeditor/plugins/clipboard/plugin.js
    	devel/third-party/ckeditor/plugins/colorbutton/plugin.js
    	devel/third-party/ckeditor/plugins/colordialog/dialogs/colordialog.js
    	devel/third-party/ckeditor/plugins/colordialog/plugin.js
    	devel/third-party/ckeditor/plugins/contextmenu/plugin.js
    	devel/third-party/ckeditor/plugins/dialog/dialogDefinition.js
    	devel/third-party/ckeditor/plugins/dialog/plugin.js
    	devel/third-party/ckeditor/plugins/dialogadvtab/plugin.js
    	devel/third-party/ckeditor/plugins/dialogui/plugin.js
    	devel/third-party/ckeditor/plugins/div/dialogs/div.js
    	devel/third-party/ckeditor/plugins/div/plugin.js
    	devel/third-party/ckeditor/plugins/editingblock/plugin.js
    	devel/third-party/ckeditor/plugins/elementspath/plugin.js
    	devel/third-party/ckeditor/plugins/enterkey/plugin.js
    	devel/third-party/ckeditor/plugins/entities/plugin.js
    	devel/third-party/ckeditor/plugins/fakeobjects/plugin.js
    	devel/third-party/ckeditor/plugins/filebrowser/plugin.js
    	devel/third-party/ckeditor/plugins/find/dialogs/find.js
    	devel/third-party/ckeditor/plugins/find/plugin.js
    	devel/third-party/ckeditor/plugins/flash/dialogs/flash.js
    	devel/third-party/ckeditor/plugins/flash/plugin.js
    	devel/third-party/ckeditor/plugins/floatpanel/plugin.js
    	devel/third-party/ckeditor/plugins/font/plugin.js
    	devel/third-party/ckeditor/plugins/format/plugin.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/button.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/checkbox.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/form.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/hiddenfield.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/radio.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/select.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/textarea.js
    	devel/third-party/ckeditor/plugins/forms/dialogs/textfield.js
    	devel/third-party/ckeditor/plugins/forms/plugin.js
    	devel/third-party/ckeditor/plugins/horizontalrule/plugin.js
    	devel/third-party/ckeditor/plugins/htmldataprocessor/plugin.js
    	devel/third-party/ckeditor/plugins/htmlwriter/plugin.js
    	devel/third-party/ckeditor/plugins/iframe/dialogs/iframe.js
    	devel/third-party/ckeditor/plugins/iframedialog/plugin.js
    	devel/third-party/ckeditor/plugins/image/dialogs/image.js
    	devel/third-party/ckeditor/plugins/image/plugin.js
    	devel/third-party/ckeditor/plugins/indent/plugin.js
    	devel/third-party/ckeditor/plugins/justify/plugin.js
    	devel/third-party/ckeditor/plugins/keystrokes/plugin.js
    	devel/third-party/ckeditor/plugins/link/dialogs/anchor.js
    	devel/third-party/ckeditor/plugins/link/dialogs/link.js
    	devel/third-party/ckeditor/plugins/link/plugin.js
    	devel/third-party/ckeditor/plugins/list/plugin.js
    	devel/third-party/ckeditor/plugins/listblock/plugin.js
    	devel/third-party/ckeditor/plugins/liststyle/dialogs/liststyle.js
    	devel/third-party/ckeditor/plugins/liststyle/plugin.js
    	devel/third-party/ckeditor/plugins/maximize/plugin.js
    	devel/third-party/ckeditor/plugins/menu/plugin.js
    	devel/third-party/ckeditor/plugins/menubutton/plugin.js
    	devel/third-party/ckeditor/plugins/newpage/plugin.js
    	devel/third-party/ckeditor/plugins/pagebreak/plugin.js
    	devel/third-party/ckeditor/plugins/panel/plugin.js
    	devel/third-party/ckeditor/plugins/panelbutton/plugin.js
    	devel/third-party/ckeditor/plugins/pastefromword/filter/default.js
    	devel/third-party/ckeditor/plugins/pastefromword/plugin.js
    	devel/third-party/ckeditor/plugins/pastetext/dialogs/pastetext.js
    	devel/third-party/ckeditor/plugins/pastetext/plugin.js
    	devel/third-party/ckeditor/plugins/popup/plugin.js
    	devel/third-party/ckeditor/plugins/preview/plugin.js
    	devel/third-party/ckeditor/plugins/print/plugin.js
    	devel/third-party/ckeditor/plugins/removeformat/plugin.js
    	devel/third-party/ckeditor/plugins/resize/plugin.js
    	devel/third-party/ckeditor/plugins/richcombo/plugin.js
    	devel/third-party/ckeditor/plugins/save/plugin.js
    	devel/third-party/ckeditor/plugins/scayt/dialogs/options.js
    	devel/third-party/ckeditor/plugins/scayt/plugin.js
    	devel/third-party/ckeditor/plugins/selection/plugin.js
    	devel/third-party/ckeditor/plugins/showblocks/plugin.js
    	devel/third-party/ckeditor/plugins/showborders/plugin.js
    	devel/third-party/ckeditor/plugins/smiley/dialogs/smiley.js
    	devel/third-party/ckeditor/plugins/smiley/plugin.js
    	devel/third-party/ckeditor/plugins/sourcearea/plugin.js
    	devel/third-party/ckeditor/plugins/specialchar/dialogs/specialchar.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/_translationstatus.txt
    	devel/third-party/ckeditor/plugins/specialchar/lang/cs.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/cy.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/de.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/el.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/en.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/eo.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/et.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/fa.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/fi.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/fr.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/he.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/hr.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/it.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/ku.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/lv.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/nb.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/nl.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/no.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/pt-br.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/sk.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/tr.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/ug.js
    	devel/third-party/ckeditor/plugins/specialchar/lang/zh-cn.js
    	devel/third-party/ckeditor/plugins/specialchar/plugin.js
    	devel/third-party/ckeditor/plugins/styles/plugin.js
    	devel/third-party/ckeditor/plugins/styles/styles/default.js
    	devel/third-party/ckeditor/plugins/stylescombo/plugin.js
    	devel/third-party/ckeditor/plugins/tab/plugin.js
    	devel/third-party/ckeditor/plugins/table/dialogs/table.js
    	devel/third-party/ckeditor/plugins/table/plugin.js
    	devel/third-party/ckeditor/plugins/tableresize/plugin.js
    	devel/third-party/ckeditor/plugins/tabletools/dialogs/tableCell.js
    	devel/third-party/ckeditor/plugins/tabletools/plugin.js
    	devel/third-party/ckeditor/plugins/templates/dialogs/templates.js
    	devel/third-party/ckeditor/plugins/templates/plugin.js
    	devel/third-party/ckeditor/plugins/templates/templates/default.js
    	devel/third-party/ckeditor/plugins/toolbar/plugin.js
    	devel/third-party/ckeditor/plugins/uicolor/dialogs/uicolor.js
    	devel/third-party/ckeditor/plugins/uicolor/lang/en.js
    	devel/third-party/ckeditor/plugins/uicolor/plugin.js
    	devel/third-party/ckeditor/plugins/undo/plugin.js
    	devel/third-party/ckeditor/plugins/wsc/dialogs/ciframe.html
    	devel/third-party/ckeditor/plugins/wsc/dialogs/tmpFrameset.html
    	devel/third-party/ckeditor/plugins/wsc/dialogs/wsc.css
    	devel/third-party/ckeditor/plugins/wsc/dialogs/wsc.js
    	devel/third-party/ckeditor/plugins/wsc/plugin.js
    	devel/third-party/ckeditor/plugins/wysiwygarea/plugin.js
    	devel/third-party/ckeditor/skins/kama/dialog.css
    	devel/third-party/ckeditor/skins/kama/elementspath.css
    	devel/third-party/ckeditor/skins/kama/icons.css
    	devel/third-party/ckeditor/skins/kama/mainui.css
    	devel/third-party/ckeditor/skins/kama/menu.css
    	devel/third-party/ckeditor/skins/kama/panel.css
    	devel/third-party/ckeditor/skins/kama/presets.css
    	devel/third-party/ckeditor/skins/kama/reset.css
    	devel/third-party/ckeditor/skins/kama/richcombo.css
    	devel/third-party/ckeditor/skins/kama/skin.js
    	devel/third-party/ckeditor/skins/kama/templates.css
    	devel/third-party/ckeditor/skins/kama/toolbar.css
    	devel/third-party/ckeditor/skins/office2003/dialog.css
    	devel/third-party/ckeditor/skins/office2003/editor.css
    	devel/third-party/ckeditor/skins/office2003/elementspath.css
    	devel/third-party/ckeditor/skins/office2003/icons.css
    	devel/third-party/ckeditor/skins/office2003/mainui.css
    	devel/third-party/ckeditor/skins/office2003/menu.css
    	devel/third-party/ckeditor/skins/office2003/panel.css
    	devel/third-party/ckeditor/skins/office2003/presets.css
    	devel/third-party/ckeditor/skins/office2003/reset.css
    	devel/third-party/ckeditor/skins/office2003/richcombo.css
    	devel/third-party/ckeditor/skins/office2003/skin.js
    	devel/third-party/ckeditor/skins/office2003/templates.css
    	devel/third-party/ckeditor/skins/office2003/toolbar.css
    	devel/third-party/ckeditor/skins/v2/dialog.css
    	devel/third-party/ckeditor/skins/v2/editor.css
    	devel/third-party/ckeditor/skins/v2/elementspath.css
    	devel/third-party/ckeditor/skins/v2/icons.css
    	devel/third-party/ckeditor/skins/v2/mainui.css
    	devel/third-party/ckeditor/skins/v2/menu.css
    	devel/third-party/ckeditor/skins/v2/panel.css
    	devel/third-party/ckeditor/skins/v2/presets.css
    	devel/third-party/ckeditor/skins/v2/reset.css
    	devel/third-party/ckeditor/skins/v2/richcombo.css
    	devel/third-party/ckeditor/skins/v2/skin.js
    	devel/third-party/ckeditor/skins/v2/templates.css
    	devel/third-party/ckeditor/skins/v2/toolbar.css
    	devel/third-party/ckeditor/themes/default/theme.js
    	etc/initialdata
    	lib/RT/Article.pm
    	lib/RT/Config.pm
    	lib/RT/Interface/Web.pm
    	lib/RT/Link.pm
    	lib/RT/Record.pm
    	lib/RT/Ticket.pm
    	lib/RT/Tickets.pm
    	sbin/rt-test-dependencies.in
    	share/html/Elements/CollectionList
    	share/html/Elements/Menu
    	share/html/Helpers/Autocomplete/Users
    	share/html/NoAuth/RichText/ckeditor/adapters/jquery.js
    	share/html/NoAuth/RichText/ckeditor/ckeditor.js
    	share/html/NoAuth/RichText/ckeditor/contents.css
    	share/html/NoAuth/RichText/ckeditor/lang/_languages.js
    	share/html/NoAuth/RichText/ckeditor/lang/_translationstatus.txt
    	share/html/NoAuth/RichText/ckeditor/lang/af.js
    	share/html/NoAuth/RichText/ckeditor/lang/ar.js
    	share/html/NoAuth/RichText/ckeditor/lang/bg.js
    	share/html/NoAuth/RichText/ckeditor/lang/bn.js
    	share/html/NoAuth/RichText/ckeditor/lang/bs.js
    	share/html/NoAuth/RichText/ckeditor/lang/ca.js
    	share/html/NoAuth/RichText/ckeditor/lang/cs.js
    	share/html/NoAuth/RichText/ckeditor/lang/cy.js
    	share/html/NoAuth/RichText/ckeditor/lang/da.js
    	share/html/NoAuth/RichText/ckeditor/lang/de.js
    	share/html/NoAuth/RichText/ckeditor/lang/el.js
    	share/html/NoAuth/RichText/ckeditor/lang/en-au.js
    	share/html/NoAuth/RichText/ckeditor/lang/en-ca.js
    	share/html/NoAuth/RichText/ckeditor/lang/en-gb.js
    	share/html/NoAuth/RichText/ckeditor/lang/en.js
    	share/html/NoAuth/RichText/ckeditor/lang/eo.js
    	share/html/NoAuth/RichText/ckeditor/lang/es.js
    	share/html/NoAuth/RichText/ckeditor/lang/et.js
    	share/html/NoAuth/RichText/ckeditor/lang/eu.js
    	share/html/NoAuth/RichText/ckeditor/lang/fa.js
    	share/html/NoAuth/RichText/ckeditor/lang/fi.js
    	share/html/NoAuth/RichText/ckeditor/lang/fo.js
    	share/html/NoAuth/RichText/ckeditor/lang/fr-ca.js
    	share/html/NoAuth/RichText/ckeditor/lang/fr.js
    	share/html/NoAuth/RichText/ckeditor/lang/gl.js
    	share/html/NoAuth/RichText/ckeditor/lang/gu.js
    	share/html/NoAuth/RichText/ckeditor/lang/he.js
    	share/html/NoAuth/RichText/ckeditor/lang/hi.js
    	share/html/NoAuth/RichText/ckeditor/lang/hr.js
    	share/html/NoAuth/RichText/ckeditor/lang/hu.js
    	share/html/NoAuth/RichText/ckeditor/lang/is.js
    	share/html/NoAuth/RichText/ckeditor/lang/it.js
    	share/html/NoAuth/RichText/ckeditor/lang/ja.js
    	share/html/NoAuth/RichText/ckeditor/lang/km.js
    	share/html/NoAuth/RichText/ckeditor/lang/ko.js
    	share/html/NoAuth/RichText/ckeditor/lang/lt.js
    	share/html/NoAuth/RichText/ckeditor/lang/lv.js
    	share/html/NoAuth/RichText/ckeditor/lang/mn.js
    	share/html/NoAuth/RichText/ckeditor/lang/ms.js
    	share/html/NoAuth/RichText/ckeditor/lang/nb.js
    	share/html/NoAuth/RichText/ckeditor/lang/nl.js
    	share/html/NoAuth/RichText/ckeditor/lang/no.js
    	share/html/NoAuth/RichText/ckeditor/lang/pl.js
    	share/html/NoAuth/RichText/ckeditor/lang/pt-br.js
    	share/html/NoAuth/RichText/ckeditor/lang/pt.js
    	share/html/NoAuth/RichText/ckeditor/lang/ro.js
    	share/html/NoAuth/RichText/ckeditor/lang/ru.js
    	share/html/NoAuth/RichText/ckeditor/lang/sk.js
    	share/html/NoAuth/RichText/ckeditor/lang/sl.js
    	share/html/NoAuth/RichText/ckeditor/lang/sr-latn.js
    	share/html/NoAuth/RichText/ckeditor/lang/sr.js
    	share/html/NoAuth/RichText/ckeditor/lang/sv.js
    	share/html/NoAuth/RichText/ckeditor/lang/th.js
    	share/html/NoAuth/RichText/ckeditor/lang/tr.js
    	share/html/NoAuth/RichText/ckeditor/lang/uk.js
    	share/html/NoAuth/RichText/ckeditor/lang/vi.js
    	share/html/NoAuth/RichText/ckeditor/lang/zh-cn.js
    	share/html/NoAuth/RichText/ckeditor/lang/zh.js
    	share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
    	share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/en.js
    	share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/he.js
    	share/html/NoAuth/RichText/ckeditor/plugins/about/dialogs/about.js
    	share/html/NoAuth/RichText/ckeditor/plugins/autogrow/plugin.js
    	share/html/NoAuth/RichText/ckeditor/plugins/clipboard/dialogs/paste.js
    	share/html/NoAuth/RichText/ckeditor/plugins/colordialog/dialogs/colordialog.js
    	share/html/NoAuth/RichText/ckeditor/plugins/dialog/dialogDefinition.js
    	share/html/NoAuth/RichText/ckeditor/plugins/div/dialogs/div.js
    	share/html/NoAuth/RichText/ckeditor/plugins/find/dialogs/find.js
    	share/html/NoAuth/RichText/ckeditor/plugins/flash/dialogs/flash.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/button.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/checkbox.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/form.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/hiddenfield.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/radio.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/select.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textarea.js
    	share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textfield.js
    	share/html/NoAuth/RichText/ckeditor/plugins/iframedialog/plugin.js
    	share/html/NoAuth/RichText/ckeditor/plugins/image/dialogs/image.js
    	share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/anchor.js
    	share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/link.js
    	share/html/NoAuth/RichText/ckeditor/plugins/liststyle/dialogs/liststyle.js
    	share/html/NoAuth/RichText/ckeditor/plugins/pastefromword/filter/default.js
    	share/html/NoAuth/RichText/ckeditor/plugins/pastetext/dialogs/pastetext.js
    	share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/options.js
    	share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/toolbar.css
    	share/html/NoAuth/RichText/ckeditor/plugins/smiley/dialogs/smiley.js
    	share/html/NoAuth/RichText/ckeditor/plugins/specialchar/dialogs/specialchar.js
    	share/html/NoAuth/RichText/ckeditor/plugins/styles/styles/default.js
    	share/html/NoAuth/RichText/ckeditor/plugins/table/dialogs/table.js
    	share/html/NoAuth/RichText/ckeditor/plugins/tableresize/plugin.js
    	share/html/NoAuth/RichText/ckeditor/plugins/tabletools/dialogs/tableCell.js
    	share/html/NoAuth/RichText/ckeditor/plugins/templates/dialogs/templates.js
    	share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/default.js
    	share/html/NoAuth/RichText/ckeditor/plugins/uicolor/dialogs/uicolor.js
    	share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/en.js
    	share/html/NoAuth/RichText/ckeditor/plugins/uicolor/plugin.js
    	share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/yui.css
    	share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/yui.js
    	share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.css
    	share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.js
    	share/html/NoAuth/RichText/ckeditor/skins/kama/dialog.css
    	share/html/NoAuth/RichText/ckeditor/skins/kama/editor.css
    	share/html/NoAuth/RichText/ckeditor/skins/kama/icons.png
    	share/html/NoAuth/RichText/ckeditor/skins/kama/icons_rtl.png
    	share/html/NoAuth/RichText/ckeditor/skins/kama/skin.js
    	share/html/NoAuth/RichText/ckeditor/skins/kama/templates.css
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/dialog.css
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/editor.css
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/icons.png
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/icons_rtl.png
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/skin.js
    	share/html/NoAuth/RichText/ckeditor/skins/office2003/templates.css
    	share/html/NoAuth/RichText/ckeditor/skins/v2/dialog.css
    	share/html/NoAuth/RichText/ckeditor/skins/v2/editor.css
    	share/html/NoAuth/RichText/ckeditor/skins/v2/icons.png
    	share/html/NoAuth/RichText/ckeditor/skins/v2/icons_rtl.png
    	share/html/NoAuth/RichText/ckeditor/skins/v2/skin.js
    	share/html/NoAuth/RichText/ckeditor/skins/v2/templates.css
    	share/html/NoAuth/RichText/ckeditor/themes/default/theme.js
    	share/html/NoAuth/css/print.css
    	share/html/Search/Elements/SearchesForObject
    	share/html/SelfService/Create.html
    	share/html/Ticket/Create.html
    	share/html/User/Elements/TicketList
    	share/html/m/ticket/create
    	share/static/RichText/config.js
    	share/static/RichText/plugins/wsc/dialogs/ciframe.html
    	share/static/RichText/plugins/wsc/dialogs/tmpFrameset.html
    	t/99-policy.t

diff --cc etc/initialdata
index 72c14b9,e688c19..76dc108
--- a/etc/initialdata
+++ b/etc/initialdata
@@@ -604,22 -604,48 +604,48 @@@ Hour:         { $SubscriptionObj->SubVa
          OrderBy => 'LastUpdated',
          Order   => 'DESC' },
      },
-     { Name => 'HomepageSettings',
-       Description => 'HomepageSettings',
-       Content =>
-       { 'body' => # loc
-         [ { type => 'system', name => 'My Tickets' },
-           { type => 'system', name => 'Unowned Tickets' },
-           { type => 'system', name => 'Bookmarked Tickets' },
-           { type => 'component', name => 'QuickCreate' },
-         ],
-         'sidebar' => # loc
-         [
-           { type => 'component', name => 'MyReminders' },
-           { type => 'component', name => 'Quicksearch' },
-           { type => 'component', name => 'Dashboards' },
-           { type => 'component', name => 'RefreshHomepage' },
-         ],
-       },
+     {
+         Name        => 'HomepageSettings',
+         Description => 'HomepageSettings',
+         Content     => {
+             'body' =>    # loc
+               [
+                 {
+                     type => 'system',
+                     name => 'My Tickets',           # loc
+                 },
+                 {
+                     type => 'system',
+                     name => 'Unowned Tickets'       # loc
+                 },
+                 {
+                     type => 'system',
+                     name => 'Bookmarked Tickets'    # loc
+                 },
+                 {
+                     type => 'component',
+                     name => 'QuickCreate'           # loc
+                 },
+               ],
 -            'summary' =>                            # loc
++            'sidebar' =>                            # loc
+               [
+                 {
+                     type => 'component',
+                     name => 'MyReminders'           # loc
+                 },
+                 {
+                     type => 'component',
+                     name => 'Quicksearch'           # loc
+                 },
+                 {
+                     type => 'component',
+                     name => 'Dashboards'            # loc
+                 },
+                 {
+                     type => 'component',
+                     name => 'RefreshHomepage'       # loc
+                 },
+               ],
+         },
      },
  );
diff --cc etc/upgrade/time-worked-history.pl
index 7ed5535,0000000..77b954d
mode 100644,000000..100644
--- a/etc/upgrade/time-worked-history.pl
+++ b/etc/upgrade/time-worked-history.pl
@@@ -1,63 -1,0 +1,110 @@@
 +#!/usr/bin/env perl
++# BEGIN BPS TAGGED BLOCK {{{
++#
++# COPYRIGHT:
++#
++# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
++#                                          <sales at bestpractical.com>
++#
++# (Except where explicitly superseded by other copyright notices)
++#
++#
++# LICENSE:
++#
++# This work is made available to you under the terms of Version 2 of
++# the GNU General Public License. A copy of that license should have
++# been provided with this software, but in any event can be snarfed
++# from www.gnu.org.
++#
++# This work is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++# 02110-1301 or visit their web page on the internet at
++# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
++#
++#
++# CONTRIBUTION SUBMISSION POLICY:
++#
++# (The following paragraph is not intended to limit the rights granted
++# to you to modify and distribute this software under the terms of
++# the GNU General Public License and is only of importance to you if
++# you choose to contribute your changes and enhancements to the
++# community by submitting them to Best Practical Solutions, LLC.)
++#
++# By intentionally submitting any modifications, corrections or
++# derivatives to this work, or any other work intended for use with
++# Request Tracker, to Best Practical Solutions, LLC, you confirm that
++# you are the copyright holder for those contributions and you grant
++# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
++# royalty-free, perpetual, license to use, copy, create derivative
++# works based on those contributions, and sublicense and distribute
++# those contributions and any derivatives thereof.
++#
++# END BPS TAGGED BLOCK }}}
 +use 5.8.3;
 +use strict;
 +use warnings;
 +
 +use RT;
 +RT::LoadConfig();
 +RT->Config->Set('LogToScreen' => 'info');
 +RT::Init();
 +
 +my $dbh = $RT::Handle->dbh;
 +my $ids = $dbh->selectcol_arrayref(
 +    "SELECT t1.id FROM Tickets t1, Tickets t2 WHERE t1.id = t2.EffectiveId"
 +    ." AND t2.id != t2.EffectiveId AND t2.EffectiveId = t1.id"
 +);
 +foreach my $id ( @$ids ) {
 +    my $t = RT::Ticket->new( RT->SystemUser );
 +    $t->Load( $id );
 +    unless ( $t->id ) {
 +        $RT::Logger->error("Couldn't load ticket #$id");
 +        next;
 +    }
 +
 +    fix_time_worked_history($t);
 +}
 +
 +sub fix_time_worked_history {
 +    my ($t) = (@_);
 +
 +    my $history = 0;
 +    my $candidate = undef;
 +    my @delete = ();
 +    my $delete_time = 0;
 +
 +    my $txns = $t->Transactions;
 +    while ( my $txn = $txns->Next ) {
 +        if ( $txn->Type =~ /^(Create|Correspond|Comment)$/ ) {
 +            $history += $txn->TimeTaken || 0;
 +        } elsif ( $txn->Type eq 'Set' && $txn->Field eq 'TimeWorked' ) {
 +            $history += $txn->NewValue - $txn->OldValue;
 +            $candidate = $txn;
 +        } elsif ( $candidate && $txn->Field eq 'MergedInto' ) {
 +            if ($candidate->Creator eq $txn->Creator ) {
 +                push @delete, $candidate;
 +                $delete_time += $candidate->NewValue - $candidate->OldValue;
 +            }
 +
 +            $candidate = undef;
 +        }
 +    }
 +
 +    if ( $history == $t->TimeWorked ) {
 +        $RT::Logger->info("Ticket #". $t->id . " has TimeWorked matching history. Skipping");
 +    } elsif ( $history - $delete_time == $t->TimeWorked ) {
 +        $RT::Logger->warn( "Ticket #". $t->id ." has TimeWorked mismatch. Deleting transactions" );
 +        foreach my $dtxn ( @delete ) {
 +            my ($status, $msg) = $dtxn->Delete;
 +            $RT::Logger->error("Couldn't delete transaction: $msg") unless $status;
 +        }
 +    } else {
 +        $RT::Logger->error( "Ticket #". $t->id ." has TimeWorked mismatch, but we couldn't find correct transactions to delete. Skipping" );
 +    }
 +}
diff --cc lib/RT/I18N/fr.pm
index 72147b4,4839a99..3e5b2d2
--- a/lib/RT/I18N/fr.pm
+++ b/lib/RT/I18N/fr.pm
@@@ -46,51 -46,22 +46,22 @@@
  #
  # END BPS TAGGED BLOCK }}}
  
- package RT::Action::ExtractSubjectTag;
- use base 'RT::Action';
  use strict;
  use warnings;
+ use utf8;
  
- sub Describe {
-     my $self = shift;
-     return ( ref $self );
- }
- 
- sub Prepare {
-     return (1);
- }
- 
- sub Commit {
-     my $self            = shift;
-     my $Transaction     = $self->TransactionObj;
-     my $FirstAttachment = $Transaction->Attachments->First;
-     return 1 unless $FirstAttachment;
- 
-     my $TransactionSubject = $FirstAttachment->Subject;
-     return 1 unless $TransactionSubject;
+ package RT::I18N::fr;
+ use base 'RT::I18N';
  
-     my $Ticket = $self->TicketObj;
- 
-     my $TicketSubject      = $self->TicketObj->Subject;
-     my $origTicketSubject  = $TicketSubject;
- 
-     my $match   = RT->Config->Get('ExtractSubjectTagMatch');
-     my $nomatch = RT->Config->Get('ExtractSubjectTagNoMatch');
-     TAGLIST: while ( $TransactionSubject =~ /($match)/g ) {
-         my $tag = $1;
-         next if $tag =~ /$nomatch/;
-         foreach my $subject_tag ( RT->System->SubjectTag ) {
-             if ($tag =~ /\[\Q$subject_tag\E\s+\#(\d+)\s*\]/) {
-                 next TAGLIST;
-             }
-         }
-         $TicketSubject .= " $tag" unless ( $TicketSubject =~ /\Q$tag\E/ );
-     }
- 
-     $self->TicketObj->SetSubject($TicketSubject)
-         if ( $TicketSubject ne $origTicketSubject );
+ use strict;
+ use warnings;
  
-     return (1);
+ sub numf {
 -	my ($handle, $num) = @_[0,1];
 -	my $fr_num = $handle->SUPER::numf($num);
 -	# French prefer to print 1000 as 1 000 rather than 1,000
 -	$fr_num =~ tr<.,><, >;
 -	return $fr_num;
++        my ($handle, $num) = @_[0,1];
++        my $fr_num = $handle->SUPER::numf($num);
++        # French prefer to print 1000 as 1 000 rather than 1,000
++        $fr_num =~ tr<.,><, >;
++        return $fr_num;
  }
  
  RT::Base->_ImportOverlays();
diff --cc lib/RT/Interface/Web.pm
index 7056d24,2b8b4c7..c3d228b
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@@ -3256,41 -3060,24 +3285,59 @@@ sub ProcessRecordLinks 
      return (@results);
  }
  
 +=head2 ProcessLinksForCreate
 +
 +Takes a hash with a single key, C<ARGSRef>, the value of which is a hashref to
 +C<%ARGS>.
 +
 +Converts and returns submitted args in the form of C<new-LINKTYPE> and
 +C<LINKTYPE-new> into their appropriate directional link types.  For example,
 +C<new-DependsOn> becomes C<DependsOn> and C<DependsOn-new> becomes
 +C<DependedOnBy>.  The incoming arg values are split on whitespace and
 +normalized into arrayrefs before being returned.
 +
 +Primarily used by object creation pages for transforming incoming form inputs
 +from F</Elements/EditLinks> into arguments appropriate for individual record
 +Create methods.
 +
 +Returns a hashref in scalar context and a hash in list context.
 +
 +=cut
 +
 +sub ProcessLinksForCreate {
 +    my %args = @_;
 +    my %links;
 +
 +    foreach my $type ( keys %RT::Link::DIRMAP ) {
 +        for ([Base => "new-$type"], [Target => "$type-new"]) {
 +            my ($direction, $key) = @$_;
 +            next unless $args{ARGSRef}->{$key};
 +            $links{ $RT::Link::DIRMAP{$type}->{$direction} } = [
 +                grep $_, split ' ', $args{ARGSRef}->{$key}
 +            ];
 +        }
 +    }
 +    return wantarray ? %links : \%links;
 +}
 +
+ =head2 ProcessTransactionSquelching
+ 
+ Takes a hashref of the submitted form arguments, C<%ARGS>.
+ 
+ Returns a hash of squelched addresses.
+ 
+ =cut
+ 
+ sub ProcessTransactionSquelching {
+     my $args    = shift;
+     my %checked = map { $_ => 1 } grep { defined }
+         (    ref $args->{'TxnSendMailTo'} eq "ARRAY"  ? @{$args->{'TxnSendMailTo'}} :
+          defined $args->{'TxnSendMailTo'}             ?  ($args->{'TxnSendMailTo'}) :
+                                                                              () );
+     my %squelched = map { $_ => 1 } grep { not $checked{$_} } split /,/, ($args->{'TxnRecipients'}||'');
+     return %squelched;
+ }
+ 
  =head2 _UploadedFile ( $arg );
  
  Takes a CGI parameter name; if a file is uploaded under that name,
@@@ -3522,9 -3303,9 +3569,9 @@@ our @SCRUBBER_ALLOWED_TAGS = qw
  );
  
  our %SCRUBBER_ALLOWED_ATTRIBUTES = (
-     # Match http, ftp and relative urls
+     # Match http, https, ftp, mailto and relative urls
      # XXX: we also scrub format strings with this module then allow simple config options
-     href   => qr{^(?:http:|ftp:|https:|/|__Web(?:Path|HomePath|BaseURL|URL)__)}i,
 -    href   => qr{^(?:https?:|ftp:|mailto:|/|__Web(?:Path|BaseURL|URL)__)}i,
++    href   => qr{^(?:https?:|ftp:|mailto:|/|__Web(?:Path|HomePath|BaseURL|URL)__)}i,
      face   => 1,
      size   => 1,
      target => 1,
diff --cc lib/RT/Interface/Web/Handler.pm
index b5ffc06,a1784c2..c5aa992
--- a/lib/RT/Interface/Web/Handler.pm
+++ b/lib/RT/Interface/Web/Handler.pm
@@@ -231,8 -263,14 +265,14 @@@ sub PSGIApp 
  
      $self->InitSessionDir;
  
 -    return sub {
 +    my $mason = sub {
          my $env = shift;
+ 
+         {
+             my $res = $self->CheckModPerlHandler($env);
+             return $self->_psgi_response_cb( $res->finalize ) if $res;
+         }
+ 
          RT::ConnectToDatabase() unless RT->InstallMode;
  
          my $req = Plack::Request->new($env);
diff --cc lib/RT/Record.pm
index 4109d7d,6f28120..df89a38
--- a/lib/RT/Record.pm
+++ b/lib/RT/Record.pm
@@@ -895,16 -903,17 +897,16 @@@ sub Update 
          do {
              no warnings "uninitialized";
              local $@;
 -            eval {
 +            my $name = eval {
                  my $object = $attribute . "Obj";
 -                my $name = $self->$object->Name;
 -                next if $name eq $value || $name eq ($value || 0);
 +                $self->$object->Name;
              };
 +            unless ($@) {
 +                next if $name eq $value || $name eq ($value || 0);
 +            }
  
-             next if $value eq $self->$attribute();
-             next if ($value || 0) eq $self->$attribute();
 -            my $current = $self->$attribute();
 -            # RT::Queue->Lifecycle returns a Lifecycle object instead of name
 -            $current = eval { $current->Name } if ref $current;
 -            next if $truncated_value eq $current;
 -            next if ( $truncated_value || 0 ) eq $current;
++            next if $truncated_value eq $self->$attribute();
++            next if ( $truncated_value || 0 ) eq $self->$attribute();
          };
  
          $new_values{$attribute} = $value;
diff --cc lib/RT/Tickets.pm
index 3fb1299,3b834e0..6437d78
--- a/lib/RT/Tickets.pm
+++ b/lib/RT/Tickets.pm
@@@ -1404,10 -1677,10 +1412,10 @@@ sub _CustomFieldLimit 
                          %rest,
                      );
  
 -                    $self->_SQLLimit(
 +                    $self->Limit(
                          ALIAS    => $TicketCFs,
                          FIELD    => 'Content',
-                         OPERATOR => "<=",
+                         OPERATOR => "<",
                          VALUE    => $dayend,
                          %rest,
                          ENTRYAGGREGATOR => 'AND',
diff --cc sbin/rt-test-dependencies.in
index a2319dc,26593d9..e703355
--- a/sbin/rt-test-dependencies.in
+++ b/sbin/rt-test-dependencies.in
@@@ -346,8 -363,8 +346,8 @@@ Convert::Colo
  .
  
  $deps{'HTML-DOC'} = [ text_to_hash( <<'.') ];
 -Pod::Simple 3.24
  HTML::Entities
- Pod::Simple 3.17
++Pod::Simple 3.24
  .
  
  my %AVOID = (
diff --cc share/html/Elements/CollectionList
index 1f6db3e,7e4ba15..822171c
--- a/share/html/Elements/CollectionList
+++ b/share/html/Elements/CollectionList
@@@ -111,25 -111,24 +111,25 @@@ if ($Class =~ /::/) { # older passed i
      $Class =~ s/:/_/g;
  }
  
- $m->out('<table class="' .
+ $m->out('<table cellspacing="0" class="' .
 -	($Collection->isa('RT::Tickets') ? 'ticket-list' : 'collection') . ' collection-as-table">');
 +            ($Collection->isa('RT::Tickets') ? 'ticket-list' : 'collection') . ' collection-as-table">');
  
  if ( $ShowHeader ) {
 -  $m->comp('/Elements/CollectionAsTable/Header',
 -	   %ARGS,
 -	   Class        => $Class,
 -	   Format       => \@Format,
 -	   FormatString => $Format,
 -	   Order        => \@Order,
 -	   OrderBy      => \@OrderBy,
 -	   Rows         => $Rows,
 -	   Page         => $Page,
 -	   AllowSorting => $AllowSorting, 
 -	   BaseURL      => $BaseURL,
 -	   GenericQueryArgs => $GenericQueryArgs,
 -	   maxitems     => $maxitems,
 -	   );
 +    $m->comp('/Elements/CollectionAsTable/Header',
 +        %ARGS,
 +        Class        => $Class,
 +        Format       => \@Format,
 +        FormatString => $Format,
 +        Order        => \@Order,
 +        OrderBy      => \@OrderBy,
 +        Rows         => $Rows,
 +        Page         => $Page,
 +        AllowSorting => $AllowSorting,
 +        BaseURL      => $BaseURL,
 +        GenericQueryArgs => $GenericQueryArgs,
 +        maxitems     => $maxitems,
 +        PassArguments => \@PassArguments,
 +    );
  }
  
  my ($i, $column_map) = (0, {});
diff --cc share/html/Elements/ShowMessageStanza
index 189b62b,0000000..65ee738
mode 100644,000000..100644
--- a/share/html/Elements/ShowMessageStanza
+++ b/share/html/Elements/ShowMessageStanza
@@@ -1,188 -1,0 +1,188 @@@
 +%# BEGIN BPS TAGGED BLOCK {{{
 +%#
 +%# COPYRIGHT:
 +%#
 +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
 +%#                                          <sales at bestpractical.com>
 +%#
 +%# (Except where explicitly superseded by other copyright notices)
 +%#
 +%#
 +%# LICENSE:
 +%#
 +%# This work is made available to you under the terms of Version 2 of
 +%# the GNU General Public License. A copy of that license should have
 +%# been provided with this software, but in any event can be snarfed
 +%# from www.gnu.org.
 +%#
 +%# This work is distributed in the hope that it will be useful, but
 +%# WITHOUT ANY WARRANTY; without even the implied warranty of
 +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 +%# General Public License for more details.
 +%#
 +%# You should have received a copy of the GNU General Public License
 +%# along with this program; if not, write to the Free Software
 +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 +%# 02110-1301 or visit their web page on the internet at
 +%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
 +%#
 +%#
 +%# CONTRIBUTION SUBMISSION POLICY:
 +%#
 +%# (The following paragraph is not intended to limit the rights granted
 +%# to you to modify and distribute this software under the terms of
 +%# the GNU General Public License and is only of importance to you if
 +%# you choose to contribute your changes and enhancements to the
 +%# community by submitting them to Best Practical Solutions, LLC.)
 +%#
 +%# By intentionally submitting any modifications, corrections or
 +%# derivatives to this work, or any other work intended for use with
 +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
 +%# you are the copyright holder for those contributions and you grant
 +%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
 +%# royalty-free, perpetual, license to use, copy, create derivative
 +%# works based on those contributions, and sublicense and distribute
 +%# those contributions and any derivatives thereof.
 +%#
 +%# END BPS TAGGED BLOCK }}}
 +<%INIT>
 +my $plain_text_pre
 +    = RT->Config->Get( 'PlainTextPre', $session{'CurrentUser'} );
 +my $plain_text_mono
 +    = RT->Config->Get( 'PlainTextMono', $session{'CurrentUser'} );
 +my $Depth = 0;
 +
 +my $object = $Transaction ? $Transaction->Object : undef;
 +
 +my $print_content = sub {
 +    my $ref = shift;
 +    return unless defined $$ref && length $$ref;
 +
 +    $m->callback( content => $ref, %ARGS );
 +    if ( $ContentType eq 'text/plain' ) {
 +        $m->comp( '/Elements/MakeClicky',
 +                  content => $ref,
 +                  object  => $object,
 +                  %ARGS
 +                );
 +
 +        if ( defined $$ref && !$plain_text_pre && !$plain_text_mono ) {
 +            $$ref =~ s{(\r?\n)}{<br />}g;
 +        }
 +    } else {
 +        if ( defined $$ref ) {
 +            $$ref =~ s/^[\r\n]+//g;
 +        }
 +    }
 +    $m->out($$ref);
 +};
 +
- if ( ref $Message ) {
-     $m->out('<pre>')
-         if (    $ContentType eq 'text/plain'
-              && $plain_text_pre
-              && !$Depth
-              && !$plain_text_mono );
-     $m->out(   '<div class="message-stanza'
-              . ( ($ContentType eq 'text/plain' &&  $plain_text_mono) ? ' plain-text-white-space' : '' ) . '"'
-              . '>' );
++$m->out('<pre>')
++    if (    $ContentType eq 'text/plain'
++         && $plain_text_pre
++         && !$Depth
++         && !$plain_text_mono );
++$m->out(   '<div class="message-stanza'
++         . ( ($ContentType eq 'text/plain' &&  $plain_text_mono) ? ' plain-text-white-space' : '' ) . '"'
++         . '>' );
 +
++if ( ref $Message ) {
 +    my @stack;
 +    my $para = '';
 +    my $i    = 0;
 +
 +AGAIN: foreach ( ; $i < @$Message; $i++ ) {
 +        my $stanza = $Message->[$i];
 +        if ( ref $stanza eq "HASH" ) {
 +            # Fix message stanza nesting for Outlook's quoting styles
 +            if (     $stanza->{raw}
 +                 and not $stanza->{_outlooked}
 +                 and $stanza->{raw} =~ /^               # start of an internal line
 +                                        \s*             # optional whitespace
 +                                        (?:
 +                                            -{3,}       # at least three hyphens
 +                                            \s*         # whitespace varies between Outlook versions
 +                                                        # don't trigger on PGP signed message or signature blocks
 +                                            (?!(?:BEGIN|END)\s+PGP)
 +                                            \w          # at least one word character
 +                                            [\w\s]{3,}? # the rest of the word(s), totalling at least 5 characters,
 +                                                        #    loose to get different languages
 +                                            \w          # at least one ending word character
 +                                            \s*         # whitespace varies between Outlook versions
 +                                            -{3,}       # at least three hyphens again
 +                                          |
 +                                            _{6,}       # OR: six or more underscores
 +                                        )
 +                                        \s*$            # optional whitespace until the end of the line
 +                                       /xm )
 +            {
 +                # There's content before the quoted message, but in the
 +                # same stanza.  Break it out!
 +                if ( my $start = $-[0] ) {
 +                    my %preceding = %$stanza;
 +
 +                    # We don't process $stanza->{text} because we don't use it
 +                    # and it isn't given to us by HTML::Quoted.  If we ever
 +                    # need to, we can process it the same way as 'raw'.
 +                    $preceding{raw} = substr($stanza->{raw}, 0, $start, '');
 +
 +                    # Replace the current stanza with the two we just created
 +                    splice @$Message, $i, 1, \%preceding, $stanza;
 +
 +                    # Try it again from the top now that we've rejiggered our
 +                    # stanzas.  We'll process the Outlook stanza again, and hit
 +                    # the else below this time.
 +                    redo;
 +                } else {
 +                    # Nest the current stanza and everything that follows
 +                    $stanza->{_outlooked}++;
 +                    $stanza = $Message->[ $i ] = [ splice @$Message, $i ];
 +                }
 +            }
 +            else {
 +                $para .= ( defined $stanza->{raw} ? $stanza->{raw} : '' )."\n";
 +            }
 +        }
 +        next unless ref $stanza eq "ARRAY";
 +
 +        $print_content->( \$para );
 +        $para = '';
 +
 +        $Depth++;
 +        push @stack, [ $Message, $i + 1 ];
 +        ( $Message, $i ) = ( $stanza, -1 );
 +
 +        if ( $Depth == 1 ) {
 +            $m->comp('FoldStanzaJS');
 +        }
 +        my @classes = ('message-stanza');
 +        push @classes, $Depth == 1 ? 'closed' : 'open';
 +        $m->out(   '<div class="' . join(" ", @classes) . '">' );
 +    }
 +    if ( length $para ) {
 +        $print_content->( \$para );
 +        $para = '';
 +    }
 +
 +    if (@stack) {
 +        ( $Message, $i ) = @{ pop @stack };
 +        $Depth--;
 +        $m->out('</div>');
 +        goto AGAIN;
 +    }
- 
-     $m->out('</div>');
-     $m->out('</pre>')
-         if (    $ContentType eq 'text/plain'
-              && $plain_text_pre
-              && !$Depth
-              && !$plain_text_mono );
 +} else {
 +    $print_content->( \$Message );
 +}
++
++$m->out('</div>');
++$m->out('</pre>')
++    if (    $ContentType eq 'text/plain'
++         && $plain_text_pre
++         && !$Depth
++         && !$plain_text_mono );
 +</%INIT>
 +<%ARGS>
 +$Message => undef
 +$Transaction => undef
 +$ContentType => 'text/plain'
 +</%ARGS>
diff --cc share/html/Elements/Tabs
index a2f7743,addaeee..713b125
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@@ -434,37 -385,24 +434,40 @@@ my $build_admin_menu = sub 
      }
  };
  
 -
  my $build_main_nav = sub {
  
+     PageWidgets()->child( simple_search => raw_html => $m->scomp('SimpleSearch') );
+     PageWidgets()->child( create_ticket => raw_html => $m->scomp('CreateTicket') );
+ 
      my $home = Menu->child( home => title => loc('Homepage'), path => '/' );
 -    # We explicitly exclude superusers; otherwise the dashboards for
 -    # groups you're not in (but can see the dashboards of by dint of
 -    # being a superuser) would push the useful ones from the groups
 -    # you're actually in off of the stack.
 -    my @dashboards = $m->comp("/Dashboards/Elements/ListOfDashboards", IncludeSuperuserGroups => 0);
 -    my $limit      = 7;
 -
 -    my $more = 0;
 -    if ( @dashboards > $limit ) {
 -        $more = 1;
 -        splice @dashboards, $limit;
 +    unless ($session{'dashboards_in_menu'}) {
 +        my $dashboards_in_menu = $session{CurrentUser}->UserObj->Preferences(
 +            'DashboardsInMenu',
 +            {},
 +        );
 +
 +        unless ($dashboards_in_menu->{dashboards}) {
 +            my ($default_dashboards) =
 +                RT::System->new( $session{'CurrentUser'} )
 +                    ->Attributes
 +                    ->Named('DashboardsInMenu');
 +            if ($default_dashboards) {
 +                $dashboards_in_menu = $default_dashboards->Content;
 +            }
 +        }
 +
 +        $session{'dashboards_in_menu'} = $dashboards_in_menu->{dashboards} || [];
 +    }
 +
 +    my @dashboards;
 +    for my $id ( @{$session{'dashboards_in_menu'}} ) {
 +        my $dash = RT::Dashboard->new( $session{CurrentUser} );
 +        my ( $status, $msg ) = $dash->LoadById($id);
 +        if ( $status ) {
 +            push @dashboards, $dash;
 +        } else {
 +            $RT::Logger->warning( "Failed to load dashboard $id: $msg" );
 +        }
      }
  
      my $dashes = Menu()->child('home');
diff --cc share/html/NoAuth/css/base/ticket.css
index 55049c0,6e15a9d..5d3c232
--- a/share/html/NoAuth/css/base/ticket.css
+++ b/share/html/NoAuth/css/base/ticket.css
@@@ -45,9 -45,43 +45,8 @@@
  %# those contributions and any derivatives thereof.
  %#
  %# END BPS TAGGED BLOCK }}}
- 
 -#requestor-accordion .ui-accordion-content {
 -    padding: 0 0 0 20px;
 -    margin: -0.5em 0 0.5em 0;
 -    border: none;
 -    background: none;
 -    color: black !important;
 -}
 -
 -#requestor-accordion {
 -    margin: 0.5em 0 0 0;
 -}
 -
 -#requestor-accordion h3 .ui-icon {
 -    background-image: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/jquery_ui/ui-icons_4488cc_256x240.png);
 -    left: 0;
 -}
 -
 -#requestor-accordion h3 {
 -    padding: 0;
 -    background: none !important;
 -}
 -
 -#requestor-accordion h3, #requestor-accordion h3 a {
 -    color: black !important;
 -    border: none !important;
 -    margin: 0;
 -}
 -
 -#requestor-accordion h3 a {
 -    font-size: 90%;
 -    padding: 0 0 0.25em 20px;
 -}
 -
 -#requestor-accordion h3 a:hover,
 -#requestor-accordion h3.ui-state-active a {
 -    text-decoration: underline;
 -}
 +#requestor-accordion h3 { clear: right }
 +#requestor-accordion a.user-summary { float: right; }
  
  #requestor-accordion a.modify-user {
      font-size: 80%;
diff --cc share/html/NoAuth/css/print.css
index e82e828,ecd7021..a5330cb
--- a/share/html/NoAuth/css/print.css
+++ b/share/html/NoAuth/css/print.css
@@@ -86,15 -86,13 +86,13 @@@ div#header h1 
  #main-navigation,
  #page-navigation,
  .titlebox-title .widget,
- .ticket-info-links .titlebox-title .right,
+ .titlebox-title .right,
  .ticket-info-links .titlebox-content .create,
- .history .titlebox .titlebox-title .right,
 -.ticket-transaction .metadata .actions,
 -.ticket-transaction .content .downloadattachment,
 +.transaction .metadata .actions,
 +.transaction .content .downloadattachment,
  #comp-Search-Results #body .refresh,
  .search-result-actions,
- #comp-Search-Chart #body div,
- #comp-Search-Chart #body form,
+ #comp-Search-Chart .chart-meta,
  #footer,
  #topactions,
  #logo,
diff --cc share/html/Search/Elements/SearchesForObject
index b357522,db5fc8f..fb490c9
--- a/share/html/Search/Elements/SearchesForObject
+++ b/share/html/Search/Elements/SearchesForObject
@@@ -55,10 -55,10 +55,10 @@@ my @result
  while (my $search = $Object->Attributes->Next) {
      my $desc;
      if ($search->Name eq 'SavedSearch') {
-         push @result, [$search->Description, $search];
 -	push @result, [$search->Description, $search->Description, $search];
++        push @result, [$search->Description, $search->Description, $search];
      }
      elsif ($search->Name =~ m/^Search - (.*)/) {
-         push @result, [$1, $search];
 -	push @result, [$1, loc($1), $search];
++        push @result, [$1, loc($1), $search];
      }
  }
  return @result;
diff --cc share/html/SelfService/Create.html
index df2c45d,76126ae..7aceec4
--- a/share/html/SelfService/Create.html
+++ b/share/html/SelfService/Create.html
@@@ -88,24 -88,10 +88,15 @@@
  </tr>
  <tr>
      <td colspan="2">
 -        <& /Ticket/Elements/EditCustomFields, %ARGS, QueueObj => $queue_obj &>
 +        <& /Elements/EditCustomFields,
 +            %ARGS,
 +            Object          => RT::Ticket->new($session{CurrentUser}),
 +            CustomFields    => $queue_obj->TicketCustomFields,
 +            AsTable         => 0,
 +            &>
      </td>
  </tr>
- <tr>
- <td class="label">
- %# FIXME: if failed customfields validation, attachement needs to be choosen
- %# again by user.
- <&|/l&>Attach file</&>:
- </td>
- <td class="value">
- <input name="Attach" type="file" />
- </td>
- </tr>
+ <& /Ticket/Elements/AddAttachments, %ARGS, QueueObj => $queue_obj &>
  </table>
  <table width="100%">
  <tr>
@@@ -126,25 -112,20 +117,27 @@@ $Queue => unde
  my @results;
  my $queue_obj = RT::Queue->new($session{'CurrentUser'});
  $queue_obj->Load($Queue);
 -my $CFs = $queue_obj->TicketCustomFields();
 -my $ValidCFs = $m->comp(
 -    '/Elements/ValidateCustomFields',
 -    CustomFields => $CFs,
 -    ARGSRef => \%ARGS
 -);
  
+ ProcessAttachments(ARGSRef => \%ARGS);
+ 
  my $skip_create = 0;
 +
 +{
 +    my ($status, @msg) = $m->comp(
 +        '/Elements/ValidateCustomFields',
 +        CustomFields => $queue_obj->TicketCustomFields,
 +        ARGSRef => \%ARGS
 +    );
 +    unless ($status) {
 +        push @results, @msg;
 +        $skip_create = 1;
 +    }
 +}
 +
  $m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, results => \@results );
  
- if ( defined($ARGS{'id'}) and $ARGS{'id'} eq 'new' ) { # new ticket?
+ if ( !exists $ARGS{'AddMoreAttach'} and defined($ARGS{'id'}) and $ARGS{'id'} eq 'new' ) { # new ticket?
 -    if ( $ValidCFs && !$skip_create ) {
 +    if ( !$skip_create ) {
          $m->comp('Display.html', %ARGS);
          $RT::Logger->crit("After display call; error is $@");
          $m->abort();
diff --cc share/html/SelfService/Update.html
index 4391114,cc5e496..b7dac5b
--- a/share/html/SelfService/Update.html
+++ b/share/html/SelfService/Update.html
@@@ -76,12 -74,18 +77,18 @@@
  
      </tr>
      <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $Ticket &>
 -    <tr><td colspan="2"><& /Ticket/Elements/EditCustomFields,  TicketObj => $Ticket &></td></tr>
 +    <tr><td colspan="2"><& /Elements/EditCustomFields, Object => $Ticket, AsTable => 0 &></td></tr>
  </table>
- <& /Elements/MessageBox, 
-     Name => "UpdateContent", 
-     QuoteTransaction => $ARGS{QuoteTransaction} 
-     &>
+ % if (exists $ARGS{UpdateContent}) {
+ % # preserve QuoteTransaction so we can use it to set up sane references/in/reply to
+ % my $temp = $ARGS{'QuoteTransaction'};
+ % delete $ARGS{'QuoteTransaction'};
+ <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&>
+ % $ARGS{'QuoteTransaction'} = $temp;
+ % } else {
+ % my $IncludeSignature = 1;
+ <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &>
+ % }
      <br />
  
  
diff --cc share/html/Ticket/Create.html
index e4711c4,9e708a4..9b123bc
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@@ -368,37 -351,17 +368,13 @@@ $QueueObj->Load($Queue) || Abort(loc("Q
  
  $m->callback( QueueObj => $QueueObj, title => \$title, results => \@results, ARGSRef => \%ARGS );
  
 -$QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
 +$m->scomp( '/Articles/Elements/SubjectOverride', ARGSRef => \%ARGS, QueueObj => $QueueObj, results => \@results );
  
 -my $CFs = $QueueObj->TicketCustomFields();
 +$QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
  
 -my $ValidCFs = $m->comp(
 -    '/Elements/ValidateCustomFields',
 -    CustomFields => $CFs,
 -    ARGSRef => \%ARGS
 -);
 +my $ticket = RT::Ticket->new($session{'CurrentUser'}); # empty ticket object
  
- # deal with deleting uploaded attachments
- foreach my $key (keys %ARGS) {
-     if ($key =~ m/^DeleteAttach-(.+)$/) {
-         delete $session{'Attachments'}{$1};
-     }
-     $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
- }
- 
- # store the uploaded attachment in session
- if ( defined $ARGS{'Attach'} && length $ARGS{'Attach'} ) { # attachment?
-     my $attachment = MakeMIMEEntity(
-         AttachmentFieldName => 'Attach'
-     );
- 
-     my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
-     $session{'Attachments'} = {
-         %{$session{'Attachments'} || {}},
-         $file_path => $attachment,
-     };
- }
- 
- # delete temporary storage entry to make WebUI clean
- unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
-     delete $session{'Attachments'};
- }
+ ProcessAttachments(ARGSRef => \%ARGS);
  
  my $checks_failure = 0;
  
diff --cc share/html/Ticket/ModifyAll.html
index cb2c063,c5bb6bb..76e030c
--- a/share/html/Ticket/ModifyAll.html
+++ b/share/html/Ticket/ModifyAll.html
@@@ -146,65 -152,27 +146,40 @@@ $CanRespond = 1 if ( $Ticket->CurrentUs
  $CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or
                       $Ticket->CurrentUserHasRight('ModifyTicket') );
  
- # deal with deleting uploaded attachments
- foreach my $key (keys %ARGS) {
-     if ($key =~ m/^DeleteAttach-(.+)$/) {
-         delete $session{'Attachments'}{$1};
-     }
-     $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
- }
- 
- # store the uploaded attachment in session
- if ( defined $ARGS{'Attach'} && length $ARGS{'Attach'} ) { # attachment?
-     my $attachment = MakeMIMEEntity(
-         AttachmentFieldName => 'Attach'
-     );
- 
-     my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
-     $session{'Attachments'} = {
-         %{$session{'Attachments'} || {}},
-         $file_path => $attachment,
-     };
- }
- 
- # delete temporary storage entry to make WebUI clean
- unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
-     delete $session{'Attachments'};
- }
- 
+ ProcessAttachments(ARGSRef => \%ARGS);
  
 -$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS );
  my @results;
 +my $skip_update = 0;
 +$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS, skip_update => \$skip_update );
 +
 +{
 +    my ($status, @msg) = $m->comp(
 +        '/Elements/ValidateCustomFields',
 +        Object       => $Ticket,
 +        CustomFields => $CustomFields,
 +        ARGSRef      => \%ARGS,
 +    );
 +    unless ($status) {
 +        push @results, @msg;
 +        $skip_update = 1;
 +    }
 +}
  
 -unless ($OnlySearchForPeople or $OnlySearchForGroup or $ARGS{'AddMoreAttach'} ) {
 -    # There might be two owners. 
 -    if ( ref ($ARGS{'Owner'} )) {
 -        my @owners =@{$ARGS{'Owner'}};
 -        delete $ARGS{'Owner'};
 -        foreach my $owner(@owners){
 -            if (defined($owner) && $owner =~ /\D/) {
 -                $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->Name eq $owner);
 -            }
 -            elsif (length $owner) {
 -                $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->id == $owner);
 -            }
 +# There might be two owners.
 +if ( ref ($ARGS{'Owner'} )) {
 +    my @owners =@{$ARGS{'Owner'}};
 +    delete $ARGS{'Owner'};
 +    foreach my $owner(@owners){
 +        if (defined($owner) && $owner =~ /\D/) {
 +            $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->Name eq $owner);
 +        }
 +        elsif (length $owner) {
 +            $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->id == $owner);
          }
 -
      }
 +}
  
 +unless ($skip_update or $OnlySearchForPeople or $OnlySearchForGroup or $ARGS{'AddMoreAttach'} ) {
      push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
      push @results, ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS);
      push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS);
diff --cc share/html/Ticket/Update.html
index 706a62a,36f325a..3f1274e
--- a/share/html/Ticket/Update.html
+++ b/share/html/Ticket/Update.html
@@@ -275,24 -252,24 +251,20 @@@ $m->comp( '/Elements/GnuPG/SignEncryptW
  
  if ( $ARGS{'SubmitTicket'} ) {
  
-     my %checked = map {$_ => 1} grep {defined}
-         (ref $ARGS{'TxnSendMailTo'} eq "ARRAY" ? @{$ARGS{'TxnSendMailTo'}}
-              : defined $ARGS{'TxnSendMailTo'} ? ($ARGS{'TxnSendMailTo'}) : ());
- 
-     my @squelchlist = grep {not $checked{$_}} split /,/, ($ARGS{'TxnRecipients'}||'');
-     $ARGS{'SquelchMailTo'} = \@squelchlist if @squelchlist;
+     my %squelched = ProcessTransactionSquelching( \%ARGS );
+     $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched;
  
 -    my $CFs = $TicketObj->TransactionCustomFields;
 -    my $ValidCFs = $m->comp(
 +    my ($status, @msg) = $m->comp(
          '/Elements/ValidateCustomFields',
 -        CustomFields => $CFs,
 -        NamePrefix => "Object-RT::Transaction--CustomField-",
 +        CustomFields => $TicketObj->TransactionCustomFields,
 +        Object => RT::Transaction->new( $session{'CurrentUser'} ),
          ARGSRef => \%ARGS
      );
 -    unless ( $ValidCFs ) {
 +    unless ( $status ) {
 +        push @results, @msg;
          $checks_failure = 1;
 -        while (my $CF = $CFs->Next) {
 -            my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
 -            push @results, loc($CF->Name) . ': ' . $msg;
 -        }
      }
 -    my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check',
 +    $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check',
          self      => $gnupg_widget,
          TicketObj => $TicketObj,
      );
diff --cc share/html/m/ticket/create
index 4c0fa9e,9fd04e4..dee114e
--- a/share/html/m/ticket/create
+++ b/share/html/m/ticket/create
@@@ -146,31 -147,15 +146,7 @@@ $m->callback( QueueObj => $QueueObj, ti
  
  $QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
  
- # deal with deleting uploaded attachments
- foreach my $key (keys %ARGS) {
-     if ($key =~ m/^DeleteAttach-(.+)$/) {
-         delete $session{'Attachments'}{$1};
-     }
-     $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
- }
- 
- # store the uploaded attachment in session
- if ( defined $ARGS{'Attach'} && length $ARGS{'Attach'} ) { # attachment?
-     my $attachment = MakeMIMEEntity(
-         AttachmentFieldName => 'Attach'
-     );
- 
-     my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
-     $session{'Attachments'} = {
-         %{$session{'Attachments'} || {}},
-         $file_path => $attachment,
-     };
- }
- 
- # delete temporary storage entry to make WebUI clean
- unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
-     delete $session{'Attachments'};
- }
 -my $CFs = $QueueObj->TicketCustomFields();
 -
 -my $ValidCFs = $m->comp(
 -    '/Elements/ValidateCustomFields',
 -    CustomFields => $CFs,
 -    ARGSRef => \%ARGS
 -);
 -
+ ProcessAttachments(ARGSRef => \%ARGS);
  
  my $checks_failure = 0;
  
diff --cc t/99-policy.t
index 34c1558,5b6170b..717af8c
--- a/t/99-policy.t
+++ b/t/99-policy.t
@@@ -53,15 -50,13 +53,15 @@@ sub check 
              unlike( $content, qr/^#!/, "$file has no shebang" );
          }
  
 -        $check{bps_tag} = -1 if $check{bps_tag} == 1
 +        my $other_copyright = 0;
 +        $other_copyright = 1 if $file =~ /\.(css|js)$/
              and not $content =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i
-                 and $file =~ /(?:FCKEditor|scriptaculous|superfish|tablesorter|farbtastic)/i;
+                 and $file =~ /(?:ckeditor|scriptaculous|superfish|tablesorter|farbtastic)/i;
 -        $check{bps_tag} = -1 if $check{bps_tag} == 1
 +        $other_copyright = 1 if $file =~ /\.(css|js)$/
              and not $content =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i
                  and ($content =~ /\b(copyright|GPL|Public Domain)\b/i
 -                  or /\(c\)\s+\d\d\d\d(?:-\d\d\d\d)?/i);
 +                  or $content =~ /\(c\)\s+\d\d\d\d(?:-\d\d\d\d)?/i);
 +        $check{bps_tag} = -1 if $check{bps_tag} and $other_copyright;
          if ($check{bps_tag} == 1) {
              like( $content, qr/[B]EGIN BPS TAGGED BLOCK {{{/, "$file has BPS license tag");
          } elsif ($check{bps_tag} == -1) {
diff --cc t/customfields/date_search.t
index 6d7bfd0,2a8e6ce..724c1c1
--- a/t/customfields/date_search.t
+++ b/t/customfields/date_search.t
@@@ -2,10 -3,22 +3,24 @@@ use Test::MockTime qw(set_fixed_time re
  use warnings;
  use strict;
  
- use RT::Test nodata => 1, tests => 13;
+ use RT::Test nodata => 1, tests => 21;
  
- my $q = RT::Queue->new(RT->SystemUser);
- ok( $q->Create( Name => 'DateCFTest' . $$ ), 'create queue' );
+ RT::Test->set_rights(
+     { Principal => 'Everyone', Right => [qw(
+         SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField
+     )] },
+ );
+ 
+ my $q = RT::Test->load_or_create_queue( Name => 'General' );
+ ok $q && $q->id, 'loaded or created a queue';
+ 
+ my $user_m = RT::Test->load_or_create_user( Name => 'moscow', Timezone => 'Europe/Moscow' );
+ ok $user_m && $user_m->id;
++$user_m = RT::CurrentUser->new( $user_m );
+ 
+ my $user_b = RT::Test->load_or_create_user( Name => 'boston', Timezone => 'America/New_York' );
+ ok $user_b && $user_b->id;
++$user_b = RT::CurrentUser->new( $user_b );
  
  my $cf = RT::CustomField->new(RT->SystemUser);
  ok(
diff --cc t/customfields/datetime_search.t
index 707610b,6b37cf1..ff3028f
--- a/t/customfields/datetime_search.t
+++ b/t/customfields/datetime_search.t
@@@ -2,11 -3,23 +3,25 @@@ use Test::MockTime qw(set_fixed_time re
  use warnings;
  use strict;
  
- use RT::Test nodata => 1, tests => 14;
+ use RT::Test nodata => 1, tests => 30;
  RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00
  
- my $q = RT::Queue->new(RT->SystemUser);
- ok( $q->Create( Name => 'DateTimeCFTest' . $$ ), 'create queue' );
+ RT::Test->set_rights(
+     { Principal => 'Everyone', Right => [qw(
+         SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField
+     )] },
+ );
+ 
+ my $q = RT::Test->load_or_create_queue( Name => 'General' );
+ ok $q && $q->id, 'loaded or created a queue';
+ 
+ my $user_m = RT::Test->load_or_create_user( Name => 'moscow', Timezone => 'Europe/Moscow' );
+ ok $user_m && $user_m->id;
++$user_m = RT::CurrentUser->new( $user_m );
+ 
+ my $user_b = RT::Test->load_or_create_user( Name => 'boston', Timezone => 'America/New_York' );
+ ok $user_b && $user_b->id;
++$user_b = RT::CurrentUser->new( $user_b );
  
  my $cf = RT::CustomField->new(RT->SystemUser);
  ok(

-----------------------------------------------------------------------


More information about the Rt-commit mailing list