[Rt-commit] rt branch, master, updated. rt-4.4.1-99-gb08c6cd

Shawn Moore shawn at bestpractical.com
Wed Jul 20 13:38:12 EDT 2016


The branch, master has been updated
       via  b08c6cda9b4b544385fb3ee9368016574e55a811 (commit)
       via  00f6d2e0fc383b2b8f0a97cc74b6d3685c4df9a4 (commit)
       via  6bb6e0fb86533c14cebe8f7c5ed6277715299a7b (commit)
       via  0206ec7470b2995f1a909f946ffe4b158a2d3468 (commit)
       via  a457a44a89d7e16878ff9f545bdaac005a8ac730 (commit)
       via  6a2063b812b31bf47476a836abc5e84e4c3e49be (commit)
       via  0bba58cfa361491dc0c43c66bf7a04fe2a7ab2b4 (commit)
       via  16ae0a8d813be3c99440fc5f7f537933fe33c729 (commit)
       via  84cf59304588e4936aaa550681968b08fae6b260 (commit)
       via  03290531c157f9a26a73bc2c915e672c12e2ed80 (commit)
       via  db69a36aeb56bffa1b2be7d607c6f45170291913 (commit)
       via  6c8a717b0fde48897cc1ef704c99b157593d946b (commit)
       via  f9814c41698694bafcfaef40493e89123bdd2ac9 (commit)
       via  3c84dd51bca5707f51631589a11d1cb5ee347c67 (commit)
       via  1a7e5dd52839871ba78f84c573f97868b92629b2 (commit)
       via  c6a69ff30098b98302e18f8171f2e58827248240 (commit)
       via  1c4347bb0522e29d41fd33813e746db200dfc866 (commit)
       via  6bb0795fd82d76c1b8b0d7b98dd8a968e14fc9d5 (commit)
       via  52494181768189dd34b5896dc5a114b2bccda456 (commit)
       via  31fd26d5e87b7786c1713a01a07265542b7027a8 (commit)
       via  124c7d6c56c4de49bb2be40ad7a8c14e1176ed59 (commit)
       via  9f5438355292c51d0905f91d87d9a121f87bc848 (commit)
       via  55162dced8060b9257ab6043c7034b49d43b8f4f (commit)
       via  e903c08649d8207f0a4ecfddff784dddcafa5aa3 (commit)
       via  8fad3ded6b25a01173bbbf5e4fb6b08ba3b9e60d (commit)
       via  17830ec5141c808a1c1249f7de179bcb9a6ee95b (commit)
       via  6c2a54cdc5138aefdd860ecf8427e72568b0d2f6 (commit)
       via  f537fdb8492384e5e3d1fe9fa880ebf4956078a5 (commit)
       via  e588dbcf58ead4345ffb6f95fec8be3b01ccf173 (commit)
       via  a7342b463fd88bf354678edc0c144cee9804fcbe (commit)
       via  7a8660c0edcf224588d06b151803dafc07f6f4c2 (commit)
       via  79c99203f14c973a19327ba30420892e1e9cb205 (commit)
       via  99c8e75417dbb6b25f087b99c9ff58f72d1b7ed4 (commit)
       via  2e2c211a83aaee5da46492330a41a1658bb27aaf (commit)
       via  315261e7d7db1640d34c448b388b48073f237cd1 (commit)
       via  564b9de7f3d9610fcdb3d0a46e63044623bc05d7 (commit)
       via  8e6309999c44313baafc0472e6cc6889976d5412 (commit)
       via  ac152958c6475fdbb067a031e13fe7efeec37bad (commit)
       via  5d01baa9207ac93e02a7078c5da777f3d7805389 (commit)
       via  fce4f0831afd4ea8c7f82bfed105db876407675e (commit)
       via  0a408adb24ada26229bea91f6b08a13258e0d2dc (commit)
       via  7d6f9d6b408efa4c767fecf3418c04e267db0acf (commit)
       via  1e9287ae1dd235b9426524c00cebe7898251db46 (commit)
       via  037839bc7e05a3fcaa9bd9bf9e8efb0d06f9549b (commit)
       via  aea531f3f5383a53b3ef8114b501b75c7fa7e84e (commit)
       via  a8b281e18e04197f2ac7206129d7fba26e44ae8a (commit)
       via  a8bf0f391208c8429feb66fad34dcd71f16d47a5 (commit)
       via  1bf5be6a07cd1c72b7a95e4898da698860c41a87 (commit)
       via  b9f3738179aa7fec8b659ff42f0b32be1e441f01 (commit)
       via  5cb918e1eefe00f76cc3cddc45955e07aad77dfd (commit)
       via  4e7e6522f946518c570956af66eb3e4dc8372a42 (commit)
       via  1a977b7a2e1afbbe149e2e0fcc26de020bfe40f1 (commit)
       via  dbe51a03f3755bf32658f361d5ad5e966e65849e (commit)
       via  c70c631fd15e123a92f90bb47f23f0d6061e6b6f (commit)
       via  d9b414c08fcf8320b5511694e574e73e4115b76e (commit)
       via  6eae31edde1b761147e74c953822d78092a60d87 (commit)
       via  2e458034e91f58ee7aa4bdd8244266284395dec5 (commit)
       via  8af43727056536676d481c56a72320c7399b9987 (commit)
       via  b4d8eb4de5d063ed34a5bd9b769309190f63e401 (commit)
       via  397fb13a3e36f3b297b8f7767eeeb413b7e36f45 (commit)
       via  1c962711e3ec4d165eb835ef9f4a4cb1b1fa8ab3 (commit)
       via  61c7a188ce4c229a3660e09af96552f604eb5f78 (commit)
       via  9bab0d5098fdae5831badcf6fa5650edf6c041b6 (commit)
       via  3376497542adf6e96300d7a6e27461dd6fea9cf4 (commit)
       via  c4a45984885b0ad045edad66be2e6a236be7128d (commit)
       via  fbd25c2be853f77fec52043b481e4786669248ce (commit)
       via  007689c2ad47b1292b79404cd2a7633194c2c8e3 (commit)
       via  a69f40de53317c0e39e6cdc4a002af8c0b59b087 (commit)
       via  fe4242ffcd8514510da06ada6abc00238b20f201 (commit)
       via  ef97ff148ce80aa3002c1d28711a57c172df3b35 (commit)
       via  c050da1e30cefe841a528114429a9656c1c1ac32 (commit)
       via  973e702f46a5ca6e612a9354da6588579df453d2 (commit)
       via  f591697117e5bccc26732e6d82325ab27746cf9e (commit)
       via  bd44290c51ba1a0cc5381e9b71525987ff6878d0 (commit)
       via  41292a38961bb617aca432039ac5ef69c4674497 (commit)
       via  a92e8587388065b4a3874fc7bc6bbf8de73641bc (commit)
       via  a4f66b1a1f9698ca9c735c22bb131689b37c555a (commit)
       via  3e98fa121833ba8bccc5d292f7143b51a205fe5e (commit)
       via  89adaadd22cca0e54a9b348be867a87e5394d627 (commit)
       via  68362a50927e632cfc60ba63460fa43903cd0cb4 (commit)
       via  f2be6f6234be12de5ebe99ccdd56a4b09c46b241 (commit)
       via  ab169c273aa112092ff99bbae69cec406868562a (commit)
       via  e5e5e3d026d9cb90d4a1b2487809dd2e7e1c42c2 (commit)
       via  be78dc8a29ff7bad70a5be2927b0371e1161b2a4 (commit)
       via  1cac7d3a64b1b3513610069f7b3895e359585475 (commit)
       via  3b8ae5b6697ffd26734c9db46b30002af9460193 (commit)
       via  50dea853e373a5c3d3fafe3f201d8b726fda1099 (commit)
      from  c321a9f62a081a849285c4f6e9957f819d430403 (commit)

Summary of changes:
 Makefile.in                                        |   4 +-
 README                                             |   4 +-
 devel/third-party/README                           |  80 +--
 .../{chosen => chosen-1.4.2}/chosen.css            |   0
 .../{chosen => chosen-1.4.2}/chosen.jquery.js      |   0
 .../{ckeditor => ckeditor-4.5.3}/CHANGES.md        |   0
 .../{ckeditor => ckeditor-4.5.3}/LICENSE.md        |   0
 .../{ckeditor => ckeditor-4.5.3}/README.md         |   0
 .../adapters/jquery.js                             |   0
 .../{ckeditor => ckeditor-4.5.3}/build-config.js   |   0
 .../{ckeditor => ckeditor-4.5.3}/ckeditor.js       |   0
 .../{ckeditor => ckeditor-4.5.3}/config.js         |   0
 .../{ckeditor => ckeditor-4.5.3}/contents.css      |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/af.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ar.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/bg.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/bn.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/bs.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ca.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/cs.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/cy.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/da.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/de.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/el.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/en-au.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/en-ca.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/en-gb.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/en.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/eo.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/es.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/et.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/eu.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/fa.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/fi.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/fo.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/fr-ca.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/fr.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/gl.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/gu.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/he.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/hi.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/hr.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/hu.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/id.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/is.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/it.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ja.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ka.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/km.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ko.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ku.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/lt.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/lv.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/mk.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/mn.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ms.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/nb.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/nl.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/no.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/pl.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/pt-br.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/pt.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ro.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ru.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/si.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sk.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sl.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sq.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sr-latn.js   |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sr.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/sv.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/th.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/tr.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/tt.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/ug.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/uk.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/vi.js        |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/zh-cn.js     |   0
 .../{ckeditor => ckeditor-4.5.3}/lang/zh.js        |   0
 .../plugins/a11yhelp/dialogs/a11yhelp.js           |   0
 .../a11yhelp/dialogs/lang/_translationstatus.txt   |   0
 .../plugins/a11yhelp/dialogs/lang/af.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ar.js            |   0
 .../plugins/a11yhelp/dialogs/lang/bg.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ca.js            |   0
 .../plugins/a11yhelp/dialogs/lang/cs.js            |   0
 .../plugins/a11yhelp/dialogs/lang/cy.js            |   0
 .../plugins/a11yhelp/dialogs/lang/da.js            |   0
 .../plugins/a11yhelp/dialogs/lang/de.js            |   0
 .../plugins/a11yhelp/dialogs/lang/el.js            |   0
 .../plugins/a11yhelp/dialogs/lang/en-gb.js         |   0
 .../plugins/a11yhelp/dialogs/lang/en.js            |   0
 .../plugins/a11yhelp/dialogs/lang/eo.js            |   0
 .../plugins/a11yhelp/dialogs/lang/es.js            |   0
 .../plugins/a11yhelp/dialogs/lang/et.js            |   0
 .../plugins/a11yhelp/dialogs/lang/fa.js            |   0
 .../plugins/a11yhelp/dialogs/lang/fi.js            |   0
 .../plugins/a11yhelp/dialogs/lang/fo.js            |   0
 .../plugins/a11yhelp/dialogs/lang/fr-ca.js         |   0
 .../plugins/a11yhelp/dialogs/lang/fr.js            |   0
 .../plugins/a11yhelp/dialogs/lang/gl.js            |   0
 .../plugins/a11yhelp/dialogs/lang/gu.js            |   0
 .../plugins/a11yhelp/dialogs/lang/he.js            |   0
 .../plugins/a11yhelp/dialogs/lang/hi.js            |   0
 .../plugins/a11yhelp/dialogs/lang/hr.js            |   0
 .../plugins/a11yhelp/dialogs/lang/hu.js            |   0
 .../plugins/a11yhelp/dialogs/lang/id.js            |   0
 .../plugins/a11yhelp/dialogs/lang/it.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ja.js            |   0
 .../plugins/a11yhelp/dialogs/lang/km.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ko.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ku.js            |   0
 .../plugins/a11yhelp/dialogs/lang/lt.js            |   0
 .../plugins/a11yhelp/dialogs/lang/lv.js            |   0
 .../plugins/a11yhelp/dialogs/lang/mk.js            |   0
 .../plugins/a11yhelp/dialogs/lang/mn.js            |   0
 .../plugins/a11yhelp/dialogs/lang/nb.js            |   0
 .../plugins/a11yhelp/dialogs/lang/nl.js            |   0
 .../plugins/a11yhelp/dialogs/lang/no.js            |   0
 .../plugins/a11yhelp/dialogs/lang/pl.js            |   0
 .../plugins/a11yhelp/dialogs/lang/pt-br.js         |   0
 .../plugins/a11yhelp/dialogs/lang/pt.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ro.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ru.js            |   0
 .../plugins/a11yhelp/dialogs/lang/si.js            |   0
 .../plugins/a11yhelp/dialogs/lang/sk.js            |   0
 .../plugins/a11yhelp/dialogs/lang/sl.js            |   0
 .../plugins/a11yhelp/dialogs/lang/sq.js            |   0
 .../plugins/a11yhelp/dialogs/lang/sr-latn.js       |   0
 .../plugins/a11yhelp/dialogs/lang/sr.js            |   0
 .../plugins/a11yhelp/dialogs/lang/sv.js            |   0
 .../plugins/a11yhelp/dialogs/lang/th.js            |   0
 .../plugins/a11yhelp/dialogs/lang/tr.js            |   0
 .../plugins/a11yhelp/dialogs/lang/tt.js            |   0
 .../plugins/a11yhelp/dialogs/lang/ug.js            |   0
 .../plugins/a11yhelp/dialogs/lang/uk.js            |   0
 .../plugins/a11yhelp/dialogs/lang/vi.js            |   0
 .../plugins/a11yhelp/dialogs/lang/zh-cn.js         |   0
 .../plugins/a11yhelp/dialogs/lang/zh.js            |   0
 .../plugins/clipboard/dialogs/paste.js             |   0
 .../plugins/dialog/dialogDefinition.js             |   0
 .../plugins/find/dialogs/find.js                   |   0
 .../{ckeditor => ckeditor-4.5.3}/plugins/icons.png | Bin
 .../plugins/icons_hidpi.png                        | Bin
 .../plugins/link/dialogs/anchor.js                 |   0
 .../plugins/link/dialogs/link.js                   |   0
 .../plugins/link/images/anchor.png                 | Bin
 .../plugins/link/images/hidpi/anchor.png           | Bin
 .../plugins/liststyle/dialogs/liststyle.js         |   0
 .../plugins/magicline/images/hidpi/icon-rtl.png    | Bin
 .../plugins/magicline/images/hidpi/icon.png        | Bin
 .../plugins/magicline/images/icon-rtl.png          | Bin
 .../plugins/magicline/images/icon.png              | Bin
 .../plugins/pastefromword/filter/default.js        |   0
 .../plugins/scayt/LICENSE.md                       |   0
 .../plugins/scayt/README.md                        |   0
 .../plugins/scayt/dialogs/options.js               |   0
 .../plugins/scayt/dialogs/toolbar.css              |   0
 .../dialogs/lang/_translationstatus.txt            |   0
 .../plugins/specialchar/dialogs/lang/af.js         |   0
 .../plugins/specialchar/dialogs/lang/ar.js         |   0
 .../plugins/specialchar/dialogs/lang/bg.js         |   0
 .../plugins/specialchar/dialogs/lang/ca.js         |   0
 .../plugins/specialchar/dialogs/lang/cs.js         |   0
 .../plugins/specialchar/dialogs/lang/cy.js         |   0
 .../plugins/specialchar/dialogs/lang/da.js         |   0
 .../plugins/specialchar/dialogs/lang/de.js         |   0
 .../plugins/specialchar/dialogs/lang/el.js         |   0
 .../plugins/specialchar/dialogs/lang/en-gb.js      |   0
 .../plugins/specialchar/dialogs/lang/en.js         |   0
 .../plugins/specialchar/dialogs/lang/eo.js         |   0
 .../plugins/specialchar/dialogs/lang/es.js         |   0
 .../plugins/specialchar/dialogs/lang/et.js         |   0
 .../plugins/specialchar/dialogs/lang/fa.js         |   0
 .../plugins/specialchar/dialogs/lang/fi.js         |   0
 .../plugins/specialchar/dialogs/lang/fr-ca.js      |   0
 .../plugins/specialchar/dialogs/lang/fr.js         |   0
 .../plugins/specialchar/dialogs/lang/gl.js         |   0
 .../plugins/specialchar/dialogs/lang/he.js         |   0
 .../plugins/specialchar/dialogs/lang/hr.js         |   0
 .../plugins/specialchar/dialogs/lang/hu.js         |   0
 .../plugins/specialchar/dialogs/lang/id.js         |   0
 .../plugins/specialchar/dialogs/lang/it.js         |   0
 .../plugins/specialchar/dialogs/lang/ja.js         |   0
 .../plugins/specialchar/dialogs/lang/km.js         |   0
 .../plugins/specialchar/dialogs/lang/ko.js         |   0
 .../plugins/specialchar/dialogs/lang/ku.js         |   0
 .../plugins/specialchar/dialogs/lang/lt.js         |   0
 .../plugins/specialchar/dialogs/lang/lv.js         |   0
 .../plugins/specialchar/dialogs/lang/nb.js         |   0
 .../plugins/specialchar/dialogs/lang/nl.js         |   0
 .../plugins/specialchar/dialogs/lang/no.js         |   0
 .../plugins/specialchar/dialogs/lang/pl.js         |   0
 .../plugins/specialchar/dialogs/lang/pt-br.js      |   0
 .../plugins/specialchar/dialogs/lang/pt.js         |   0
 .../plugins/specialchar/dialogs/lang/ru.js         |   0
 .../plugins/specialchar/dialogs/lang/si.js         |   0
 .../plugins/specialchar/dialogs/lang/sk.js         |   0
 .../plugins/specialchar/dialogs/lang/sl.js         |   0
 .../plugins/specialchar/dialogs/lang/sq.js         |   0
 .../plugins/specialchar/dialogs/lang/sv.js         |   0
 .../plugins/specialchar/dialogs/lang/th.js         |   0
 .../plugins/specialchar/dialogs/lang/tr.js         |   0
 .../plugins/specialchar/dialogs/lang/tt.js         |   0
 .../plugins/specialchar/dialogs/lang/ug.js         |   0
 .../plugins/specialchar/dialogs/lang/uk.js         |   0
 .../plugins/specialchar/dialogs/lang/vi.js         |   0
 .../plugins/specialchar/dialogs/lang/zh-cn.js      |   0
 .../plugins/specialchar/dialogs/lang/zh.js         |   0
 .../plugins/specialchar/dialogs/specialchar.js     |   0
 .../plugins/table/dialogs/table.js                 |   0
 .../plugins/tabletools/dialogs/tableCell.js        |   0
 .../plugins/wsc/LICENSE.md                         |   0
 .../plugins/wsc/README.md                          |   0
 .../plugins/wsc/dialogs/ciframe.html               |   0
 .../plugins/wsc/dialogs/tmpFrameset.html           |   0
 .../plugins/wsc/dialogs/wsc.css                    |   0
 .../plugins/wsc/dialogs/wsc.js                     |   0
 .../plugins/wsc/dialogs/wsc_ie.js                  |   0
 .../samples/css/samples.css                        |   0
 .../samples/img/github-top.png                     | Bin
 .../samples/img/header-bg.png                      | Bin
 .../samples/img/header-separator.png               | Bin
 .../samples/img/logo.png                           | Bin
 .../samples/img/navigation-tip.png                 | Bin
 .../samples/index.html                             |   0
 .../samples/js/sample.js                           |   0
 .../{ckeditor => ckeditor-4.5.3}/samples/js/sf.js  |   0
 .../samples/old/ajax.html                          |   0
 .../samples/old/api.html                           |   0
 .../samples/old/appendto.html                      |   0
 .../samples/old/assets/inlineall/logo.png          | Bin
 .../samples/old/assets/outputxhtml/outputxhtml.css |   0
 .../samples/old/assets/posteddata.php              |   0
 .../samples/old/assets/sample.jpg                  | Bin
 .../samples/old/assets/uilanguages/languages.js    |   0
 .../samples/old/datafiltering.html                 |   0
 .../samples/old/dialog/assets/my_dialog.js         |   0
 .../samples/old/dialog/dialog.html                 |   0
 .../samples/old/divreplace.html                    |   0
 .../samples/old/enterkey/enterkey.html             |   0
 .../assets/outputforflash/outputforflash.fla       | Bin
 .../assets/outputforflash/outputforflash.swf       | Bin
 .../htmlwriter/assets/outputforflash/swfobject.js  |   0
 .../samples/old/htmlwriter/outputforflash.html     |   0
 .../samples/old/htmlwriter/outputhtml.html         |   0
 .../samples/old/index.html                         |   0
 .../samples/old/inlineall.html                     |   0
 .../samples/old/inlinebycode.html                  |   0
 .../samples/old/inlinetextarea.html                |   0
 .../samples/old/jquery.html                        |   0
 .../samples/old/magicline/magicline.html           |   0
 .../samples/old/readonly.html                      |   0
 .../samples/old/replacebyclass.html                |   0
 .../samples/old/replacebycode.html                 |   0
 .../samples/old/sample.css                         |   0
 .../samples/old/sample.js                          |   0
 .../samples/old/sample_posteddata.php              |   0
 .../samples/old/tabindex.html                      |   0
 .../samples/old/toolbar/toolbar.html               |   0
 .../samples/old/uicolor.html                       |   0
 .../samples/old/uilanguages.html                   |   0
 .../samples/old/wysiwygarea/fullpage.html          |   0
 .../samples/old/xhtmlstyle.html                    |   0
 .../samples/toolbarconfigurator/css/fontello.css   |   0
 .../samples/toolbarconfigurator/font/LICENSE.txt   |   0
 .../samples/toolbarconfigurator/font/config.json   |   0
 .../samples/toolbarconfigurator/font/fontello.eot  | Bin
 .../samples/toolbarconfigurator/font/fontello.svg  |   0
 .../samples/toolbarconfigurator/font/fontello.ttf  | Bin
 .../samples/toolbarconfigurator/font/fontello.woff | Bin
 .../samples/toolbarconfigurator/index.html         |   0
 .../js/abstracttoolbarmodifier.js                  |   0
 .../toolbarconfigurator/js/fulltoolbareditor.js    |   0
 .../toolbarconfigurator/js/toolbarmodifier.js      |   0
 .../toolbarconfigurator/js/toolbartextmodifier.js  |   0
 .../toolbarconfigurator/lib/codemirror/LICENSE     |   0
 .../lib/codemirror/codemirror.css                  |   0
 .../lib/codemirror/codemirror.js                   |   0
 .../lib/codemirror/javascript.js                   |   0
 .../toolbarconfigurator/lib/codemirror/neo.css     |   0
 .../lib/codemirror/show-hint.css                   |   0
 .../lib/codemirror/show-hint.js                    |   0
 .../skins/flat/dialog.css                          |   0
 .../skins/flat/dialog_ie.css                       |   0
 .../skins/flat/dialog_ie7.css                      |   0
 .../skins/flat/dialog_ie8.css                      |   0
 .../skins/flat/dialog_iequirks.css                 |   0
 .../skins/flat/editor.css                          |   0
 .../skins/flat/editor_gecko.css                    |   0
 .../skins/flat/editor_ie.css                       |   0
 .../skins/flat/editor_ie7.css                      |   0
 .../skins/flat/editor_ie8.css                      |   0
 .../skins/flat/editor_iequirks.css                 |   0
 .../skins/flat/icons.png                           | Bin
 .../skins/flat/icons_hidpi.png                     | Bin
 .../skins/flat/images/arrow.png                    | Bin
 .../skins/flat/images/close.png                    | Bin
 .../skins/flat/images/hidpi/close.png              | Bin
 .../skins/flat/images/hidpi/lock-open.png          | Bin
 .../skins/flat/images/hidpi/lock.png               | Bin
 .../skins/flat/images/hidpi/refresh.png            | Bin
 .../skins/flat/images/lock-open.png                | Bin
 .../skins/flat/images/lock.png                     | Bin
 .../skins/flat/images/refresh.png                  | Bin
 .../skins/flat/readme.md                           |   0
 .../{ckeditor => ckeditor-4.5.3}/styles.js         |   0
 .../{dropzone => dropzone-4.0.1}/dropzone.css      |   0
 .../{dropzone => dropzone-4.0.1}/dropzone.js       |   0
 ...jquery.modal-0.5.2.js => jquery-modal-0.5.2.js} |   0
 ...tablesorter.js => jquery-tablesorter-2.0.5b.js} |   0
 .../{mousetrap.js => mousetrap-1.5.3.js}           |   0
 docs/UPGRADING-4.2                                 |   6 +
 docs/customizing/assets/tutorial.pod               |   4 +-
 etc/RT_Config.pm.in                                |  44 +-
 lib/RT/Assets.pm                                   |   2 +-
 lib/RT/Attribute.pm                                | 270 +++++++++-
 lib/RT/Config.pm                                   |  70 ++-
 lib/RT/EmailParser.pm                              |   3 +-
 lib/RT/Group.pm                                    |  37 +-
 lib/RT/Interface/Email.pm                          |   3 +-
 lib/RT/Interface/Web/MenuBuilder.pm                |   4 +-
 lib/RT/Migrate/Importer.pm                         |  25 +-
 lib/RT/Migrate/Importer/File.pm                    |   2 +-
 lib/RT/ObjectClass.pm                              |  12 +
 lib/RT/ObjectScrip.pm                              |  13 +
 lib/RT/ObjectTopic.pm                              |  13 +
 lib/RT/Transaction.pm                              |  39 ++
 lib/RT/User.pm                                     |  18 +
 sbin/rt-importer.in                                |  26 +-
 sbin/rt-setup-database.in                          |   1 +
 sbin/rt-test-dependencies.in                       | 552 +++++++++++----------
 share/html/Admin/Elements/EditCustomFieldValues    |   1 +
 share/html/Articles/Elements/QuickSearch           |   2 +-
 share/html/Asset/CreateLinkedTicket.html           |  29 +-
 share/html/Asset/Elements/AssetSearchBasics        |   2 +-
 share/html/Asset/Elements/CreateLinkedTicket       |  39 +-
 share/html/Asset/Elements/SelectCatalog            |   3 +-
 share/html/Asset/Elements/SelectStatus             |  23 +-
 share/html/Asset/Helpers/CreateLinkedTicket        |  14 +-
 share/html/Asset/Search/Bulk.html                  |  13 +-
 share/html/Asset/Search/index.html                 |   1 +
 share/html/Elements/MessageBox                     |   3 +-
 share/html/Elements/Refresh                        |  12 +-
 share/html/Elements/SelectStatus                   |   2 +-
 share/html/Elements/ShowCustomFieldWikitext        |  16 +-
 share/html/Helpers/AddTimeWorked                   |  20 +-
 share/html/Helpers/TicketHistoryPage               |   7 +-
 share/html/Helpers/TicketTimer                     |  14 +-
 share/html/Search/Elements/Chart                   |   2 +
 share/html/Search/Elements/EditFormat              |   3 +
 share/html/Ticket/Update.html                      |   3 +
 .../Elements/Portlets/CreateAsset}                 |  23 +-
 share/html/Widgets/Form/Select                     |   4 +-
 share/static/css/rudder/ticket-timer.css           |   2 +-
 share/static/js/assets.js                          |  19 +
 t/externalauth/ldap.t                              |   5 +-
 t/externalauth/ldap_escaping.t                     |   1 +
 t/externalauth/ldap_group.t                        |   2 +-
 t/externalauth/ldap_privileged.t                   |   1 +
 t/externalauth/sessions.t                          |   1 +
 t/externalauth/sqlite.t                            |   1 +
 t/shredder/02group_member.t                        |  17 +-
 363 files changed, 1103 insertions(+), 414 deletions(-)
 rename devel/third-party/{chosen => chosen-1.4.2}/chosen.css (100%)
 rename devel/third-party/{chosen => chosen-1.4.2}/chosen.jquery.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/CHANGES.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/LICENSE.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/README.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/adapters/jquery.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/build-config.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/ckeditor.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/config.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/contents.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/af.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ar.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/bg.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/bn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/bs.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/cs.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/cy.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/da.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/de.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/el.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/en-au.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/en-ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/en-gb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/en.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/eo.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/es.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/et.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/eu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/fa.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/fi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/fo.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/fr-ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/fr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/gl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/gu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/he.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/hi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/hr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/hu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/id.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/is.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/it.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ja.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ka.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/km.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ko.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ku.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/lt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/lv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/mk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/mn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ms.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/nb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/nl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/no.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/pl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/pt-br.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/pt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ro.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ru.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/si.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sq.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sr-latn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/sv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/th.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/tr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/tt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/ug.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/uk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/vi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/zh-cn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/lang/zh.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/a11yhelp.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/_translationstatus.txt (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/af.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ar.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/bg.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/cs.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/cy.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/da.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/de.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/el.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/en-gb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/en.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/eo.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/es.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/et.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/fa.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/fi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/fo.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/fr-ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/fr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/gl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/gu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/he.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/hi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/hr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/hu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/id.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/it.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ja.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/km.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ko.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ku.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/lt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/lv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/mk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/mn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/nb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/nl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/no.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/pl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/pt-br.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/pt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ro.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ru.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/si.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sq.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sr-latn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/sv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/th.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/tr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/tt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/ug.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/uk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/vi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/zh-cn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/a11yhelp/dialogs/lang/zh.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/clipboard/dialogs/paste.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/dialog/dialogDefinition.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/find/dialogs/find.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/icons.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/icons_hidpi.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/link/dialogs/anchor.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/link/dialogs/link.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/link/images/anchor.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/link/images/hidpi/anchor.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/liststyle/dialogs/liststyle.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/magicline/images/hidpi/icon-rtl.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/magicline/images/hidpi/icon.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/magicline/images/icon-rtl.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/magicline/images/icon.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/pastefromword/filter/default.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/scayt/LICENSE.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/scayt/README.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/scayt/dialogs/options.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/scayt/dialogs/toolbar.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/_translationstatus.txt (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/af.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ar.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/bg.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/cs.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/cy.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/da.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/de.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/el.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/en-gb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/en.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/eo.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/es.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/et.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/fa.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/fi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/fr-ca.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/fr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/gl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/he.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/hr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/hu.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/id.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/it.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ja.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/km.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ko.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ku.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/lt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/lv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/nb.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/nl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/no.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/pl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/pt-br.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/pt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ru.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/si.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/sk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/sl.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/sq.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/sv.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/th.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/tr.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/tt.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/ug.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/uk.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/vi.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/zh-cn.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/lang/zh.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/specialchar/dialogs/specialchar.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/table/dialogs/table.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/tabletools/dialogs/tableCell.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/LICENSE.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/README.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/dialogs/ciframe.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/dialogs/tmpFrameset.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/dialogs/wsc.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/dialogs/wsc.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/plugins/wsc/dialogs/wsc_ie.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/css/samples.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/img/github-top.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/img/header-bg.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/img/header-separator.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/img/logo.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/img/navigation-tip.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/index.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/js/sample.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/js/sf.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/ajax.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/api.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/appendto.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/assets/inlineall/logo.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/assets/outputxhtml/outputxhtml.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/assets/posteddata.php (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/assets/sample.jpg (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/assets/uilanguages/languages.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/datafiltering.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/dialog/assets/my_dialog.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/dialog/dialog.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/divreplace.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/enterkey/enterkey.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/htmlwriter/assets/outputforflash/outputforflash.fla (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/htmlwriter/assets/outputforflash/outputforflash.swf (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/htmlwriter/assets/outputforflash/swfobject.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/htmlwriter/outputforflash.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/htmlwriter/outputhtml.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/index.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/inlineall.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/inlinebycode.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/inlinetextarea.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/jquery.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/magicline/magicline.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/readonly.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/replacebyclass.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/replacebycode.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/sample.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/sample.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/sample_posteddata.php (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/tabindex.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/toolbar/toolbar.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/uicolor.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/uilanguages.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/wysiwygarea/fullpage.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/old/xhtmlstyle.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/css/fontello.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/LICENSE.txt (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/config.json (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/fontello.eot (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/fontello.svg (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/fontello.ttf (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/font/fontello.woff (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/index.html (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/js/fulltoolbareditor.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/js/toolbarmodifier.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/js/toolbartextmodifier.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/LICENSE (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/codemirror.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/codemirror.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/javascript.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/neo.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/show-hint.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/samples/toolbarconfigurator/lib/codemirror/show-hint.js (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/dialog.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/dialog_ie.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/dialog_ie7.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/dialog_ie8.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/dialog_iequirks.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor_gecko.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor_ie.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor_ie7.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor_ie8.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/editor_iequirks.css (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/icons.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/icons_hidpi.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/arrow.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/close.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/hidpi/close.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/hidpi/lock-open.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/hidpi/lock.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/hidpi/refresh.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/lock-open.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/lock.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/images/refresh.png (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/skins/flat/readme.md (100%)
 rename devel/third-party/{ckeditor => ckeditor-4.5.3}/styles.js (100%)
 rename devel/third-party/{dropzone => dropzone-4.0.1}/dropzone.css (100%)
 rename devel/third-party/{dropzone => dropzone-4.0.1}/dropzone.js (100%)
 rename devel/third-party/{jquery.modal-0.5.2.js => jquery-modal-0.5.2.js} (100%)
 rename devel/third-party/{jquery.tablesorter.js => jquery-tablesorter-2.0.5b.js} (100%)
 rename devel/third-party/{mousetrap.js => mousetrap-1.5.3.js} (100%)
 copy share/html/{Asset/Elements/CreateInCatalog => User/Elements/Portlets/CreateAsset} (77%)

- Log -----------------------------------------------------------------
commit b08c6cda9b4b544385fb3ee9368016574e55a811
Merge: c321a9f 00f6d2e
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Wed Jul 20 13:37:47 2016 -0400

    Merge branch '4.4-trunk'

diff --cc lib/RT/Interface/Web/MenuBuilder.pm
index d72e1c6,e672e3b..b4b6e0e
--- a/lib/RT/Interface/Web/MenuBuilder.pm
+++ b/lib/RT/Interface/Web/MenuBuilder.pm
@@@ -389,648 -825,138 +389,648 @@@ sub BuildMainNav 
          }
      }
  
 -    if (
 -        (
 -               $request_path =~ m{^/(?:Ticket|Search)/}
 -            && $request_path !~ m{^/Search/Simple\.html}
 -        )
 -        || (   $request_path =~ m{^/Search/Simple\.html}
 -            && $DECODED_ARGS->{'q'} )
 -      )
 -    {
 -        my $search = Menu()->child('search')->child('tickets');
 -        my $args      = '';
 -        my $has_query = '';
 -        my $current_search = $session{"CurrentSearchHash"} || {};
 -        my $search_id = $DECODED_ARGS->{'SavedSearchLoad'} || $DECODED_ARGS->{'SavedSearchId'} || $current_search->{'SearchId'} || '';
 -        my $chart_id = $DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId};
 -
 -        $has_query = 1 if ( $DECODED_ARGS->{'Query'} or $current_search->{'Query'} );
 +    if (
 +        (
 +               $request_path =~ m{^/(?:Ticket|Search)/}
 +            && $request_path !~ m{^/Search/Simple\.html}
 +        )
 +        || (   $request_path =~ m{^/Search/Simple\.html}
 +            && $HTML::Mason::Commands::DECODED_ARGS->{'q'} )
 +      )
 +    {
 +        my $search = $top->child('search')->child('tickets');
 +        my $args      = '';
 +        my $has_query = '';
 +        my $current_search = $HTML::Mason::Commands::session{"CurrentSearchHash"} || {};
 +        my $search_id = $HTML::Mason::Commands::DECODED_ARGS->{'SavedSearchLoad'} || $HTML::Mason::Commands::DECODED_ARGS->{'SavedSearchId'} || $current_search->{'SearchId'} || '';
 +        my $chart_id = $HTML::Mason::Commands::DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId};
 +
 +        $has_query = 1 if ( $HTML::Mason::Commands::DECODED_ARGS->{'Query'} or $current_search->{'Query'} );
 +
 +        my %query_args;
 +        my %fallback_query_args = (
 +            SavedSearchId => ( $search_id eq 'new' ) ? undef : $search_id,
 +            SavedChartSearchId => $chart_id,
 +            (
 +                map {
 +                    my $p = $_;
 +                    $p => $HTML::Mason::Commands::DECODED_ARGS->{$p} || $current_search->{$p}
 +                } qw(Query Format OrderBy Order Page)
 +            ),
 +            RowsPerPage => (
 +                defined $HTML::Mason::Commands::DECODED_ARGS->{'RowsPerPage'}
 +                ? $HTML::Mason::Commands::DECODED_ARGS->{'RowsPerPage'}
 +                : $current_search->{'RowsPerPage'}
 +            ),
 +        );
 +
 +        if ($query_string) {
 +            $args = '?' . $query_string;
 +        }
 +        else {
 +            my %final_query_args = ();
 +            # key => callback to avoid unnecessary work
 +
 +            for my $param (keys %fallback_query_args) {
 +                $final_query_args{$param} = defined($query_args->{$param})
 +                                          ? $query_args->{$param}
 +                                          : $fallback_query_args{$param};
 +            }
 +
 +            for my $field (qw(Order OrderBy)) {
 +                if ( ref( $final_query_args{$field} ) eq 'ARRAY' ) {
 +                    $final_query_args{$field} = join( "|", @{ $final_query_args{$field} } );
 +                } elsif (not defined $final_query_args{$field}) {
 +                    delete $final_query_args{$field};
 +                }
 +                else {
 +                    $final_query_args{$field} ||= '';
 +                }
 +            }
 +
 +            $args = '?' . QueryString(%final_query_args);
 +        }
 +
 +        my $current_search_menu;
 +        if ( $request_path =~ m{^/Ticket} ) {
 +            $current_search_menu = $search->child( current_search => title => loc('Current Search') );
 +            $current_search_menu->path("/Search/Results.html$args") if $has_query;
 +        } else {
 +            $current_search_menu = $page;
 +        }
 +
 +        $current_search_menu->child( edit_search =>
 +            title => loc('Edit Search'), path => "/Search/Build.html" . ( ($has_query) ? $args : '' ) );
 +        $current_search_menu->child( advanced =>
 +            title => loc('Advanced'),    path => "/Search/Edit.html$args" );
 +        if ($has_query) {
 +            $current_search_menu->child( results => title => loc('Show Results'), path => "/Search/Results.html$args" );
 +        }
 +
 +        if ( $has_query ) {
 +            $current_search_menu->child( bulk  => title => loc('Bulk Update'), path => "/Search/Bulk.html$args" );
 +            $current_search_menu->child( chart => title => loc('Chart'),       path => "/Search/Chart.html$args" );
 +
 +            my $more = $current_search_menu->child( more => title => loc('Feeds') );
 +
 +            $more->child( spreadsheet => title => loc('Spreadsheet'), path => "/Search/Results.tsv$args" );
 +
 +            my %rss_data = map {
 +                $_ => $query_args->{$_} || $fallback_query_args{$_} || '' }
 +                    qw(Query Order OrderBy);
 +            my $RSSQueryString = "?"
 +                . QueryString( Query   => $rss_data{Query},
 +                                   Order   => $rss_data{Order},
 +                                   OrderBy => $rss_data{OrderBy}
 +                                 );
 +            my $RSSPath = join '/', map $HTML::Mason::Commands::m->interp->apply_escapes( $_, 'u' ),
 +                $current_user->UserObj->Name,
 +                $current_user
 +                ->UserObj->GenerateAuthString(   $rss_data{Query}
 +                                               . $rss_data{Order}
 +                                               . $rss_data{OrderBy} );
 +
 +            $more->child( rss => title => loc('RSS'), path => "/NoAuth/rss/$RSSPath/$RSSQueryString");
 +            my $ical_path = join '/', map $HTML::Mason::Commands::m->interp->apply_escapes($_, 'u'),
 +                $current_user->UserObj->Name,
 +                $current_user->UserObj->GenerateAuthString( $rss_data{Query} ),
 +                $rss_data{Query};
 +            $more->child( ical => title => loc('iCal'), path => '/NoAuth/iCal/'.$ical_path);
 +
 +            if ($request_path =~ m{^/Search/Results.html}
 +                &&                        #XXX TODO better abstraction
 +                $current_user->HasRight( Right => 'SuperUser', Object => RT->System )) {
 +                my $shred_args = QueryString(
 +                    Search          => 1,
 +                    Plugin          => 'Tickets',
 +                    'Tickets:query' => $rss_data{'Query'},
 +                    'Tickets:limit' => $query_args->{'Rows'},
 +                );
 +
 +                $more->child( shredder => title => loc('Shredder'), path => '/Admin/Tools/Shredder/?' . $shred_args);
 +            }
 +
 +        }
 +    }
 +
 +    if ( $request_path =~ m{^/Article/} ) {
 +        if ( $HTML::Mason::Commands::DECODED_ARGS->{'id'} && $HTML::Mason::Commands::DECODED_ARGS->{'id'} =~ /^\d+$/ ) {
 +            my $id = $HTML::Mason::Commands::DECODED_ARGS->{'id'};
 +            $page->child( display => title => loc('Display'), path => "/Articles/Article/Display.html?id=".$id );
 +            $page->child( history => title => loc('History'), path => "/Articles/Article/History.html?id=".$id );
 +            $page->child( modify  => title => loc('Modify'),  path => "/Articles/Article/Edit.html?id=".$id );
 +        }
 +    }
 +
 +    if ( $request_path =~ m{^/Articles/} ) {
 +        $widgets->child( article_search => raw_html => $HTML::Mason::Commands::m->scomp('/Articles/Elements/GotoArticle') );
 +        $widgets->delete('create_ticket');
 +        $widgets->delete('simple_search');
 +
 +        $page->child( search => title => loc("Search"),       path => "/Articles/Article/Search.html" );
 +        $page->child( create => title => loc("New Article" ), path => "/Articles/Article/PreCreate.html" );
 +        if ( $request_path =~ m{^/Articles/Article/} and ( $HTML::Mason::Commands::DECODED_ARGS->{'id'} || '' ) =~ /^(\d+)$/ ) {
 +            my $id  = $1;
 +            my $obj = RT::Article->new( $current_user );
 +            $obj->Load($id);
 +
 +            if ( $obj and $obj->id ) {
 +                $page->child( display => title => loc("Display"), path => "/Articles/Article/Display.html?id=" . $id );
 +                $page->child( history => title => loc('History'), path => '/Articles/Article/History.html?id=' . $id );
 +
 +                if ( $obj->CurrentUserHasRight('ModifyArticle') ) {
 +                    $page->child(modify => title => loc('Modify'), path => '/Articles/Article/Edit.html?id=' . $id );
 +                }
 +            }
 +        }
 +
 +    }
 +
 +    if ($request_path =~ m{^/Asset/} and $HTML::Mason::Commands::DECODED_ARGS->{id} and $HTML::Mason::Commands::DECODED_ARGS->{id} !~ /\D/) {
 +        _BuildAssetMenu( $request_path, $top, $widgets, $page, %args );
 +    } elsif ($request_path =~ m{^/Asset/Search/}) {
 +        my %search = map @{$_},
 +            grep defined $_->[1] && length $_->[1],
 +            map {ref $HTML::Mason::Commands::DECODED_ARGS->{$_} ? [$_, $HTML::Mason::Commands::DECODED_ARGS->{$_}[0]] : [$_, $HTML::Mason::Commands::DECODED_ARGS->{$_}] }
 +            grep /^(?:q|SearchAssets|!?(Name|Description|Catalog|Status|Role\..+|CF\..+)|Order(?:By)?|Page)$/,
 +            keys %$HTML::Mason::Commands::DECODED_ARGS;
 +        if ( $request_path =~ /Bulk/) {
 +            $page->child('search',
 +                title => loc('Show Results'),
 +                path => '/Asset/Search/?' . (keys %search ? QueryString(%search) : ''),
 +            );
 +        } else {
 +            $page->child('bulk',
 +                title => loc('Bulk Update'),
 +                path => '/Asset/Search/Bulk.html?' . (keys %search ? QueryString(%search) : ''),
 +            );
 +        }
 +        $page->child('csv',
 +            title => loc('Download Spreadsheet'),
 +            path  => '/Asset/Search/Results.tsv?' . (keys %search ? QueryString(%search) : ''),
 +        );
 +    } elsif ($request_path =~ m{^/Admin/Global/CustomFields/Catalog-Assets\.html$}) {
 +        $page->child("create", title => loc("Create New"), path => "/Admin/CustomFields/Modify.html?Create=1;LookupType=" . RT::Asset->CustomFieldLookupType);
 +    } elsif ($request_path =~ m{^/Admin/CustomFields(/|/index\.html)?$}
 +            and $HTML::Mason::Commands::DECODED_ARGS->{'Type'} and $HTML::Mason::Commands::DECODED_ARGS->{'Type'} eq RT::Asset->CustomFieldLookupType) {
 +        $page->child("create")->path( $page->child("create")->path . "&LookupType=" . RT::Asset->CustomFieldLookupType );
 +    } elsif ($request_path =~ m{^/Admin/Assets/Catalogs/}) {
 +        my $actions = $request_path =~ m{/((index|Create)\.html)?$}
 +            ? $page
 +            : $page->child("catalogs", title => loc("Catalogs"), path => "/Admin/Assets/Catalogs/");
 +
 +        $actions->child("select", title => loc("Select"), path => "/Admin/Assets/Catalogs/");
 +        $actions->child("create", title => loc("Create"), path => "/Admin/Assets/Catalogs/Create.html");
 +
 +        my $catalog = RT::Catalog->new( $current_user );
 +        $catalog->Load($HTML::Mason::Commands::DECODED_ARGS->{id}) if $HTML::Mason::Commands::DECODED_ARGS->{id};
 +
 +        if ($catalog->id and $catalog->CurrentUserCanSee) {
 +            my $query = "id=" . $catalog->id;
 +            $page->child("modify", title => loc("Basics"), path => "/Admin/Assets/Catalogs/Modify.html?$query");
 +            $page->child("people", title => loc("Roles"),  path => "/Admin/Assets/Catalogs/Roles.html?$query");
 +
 +            $page->child("cfs", title => loc("Asset Custom Fields"), path => "/Admin/Assets/Catalogs/CustomFields.html?$query");
 +
 +            $page->child("group-rights", title => loc("Group Rights"), path => "/Admin/Assets/Catalogs/GroupRights.html?$query");
 +            $page->child("user-rights",  title => loc("User Rights"),  path => "/Admin/Assets/Catalogs/UserRights.html?$query");
 +
 +            $page->child("default-values", title => loc('Default Values'), path => "/Admin/Assets/Catalogs/DefaultValues.html?$query");
 +        }
 +    }
 +
 +    if ( $request_path =~ m{^/User/(Summary|History)\.html} ) {
 +        if ($page->child('summary')) {
 +            # Already set up from having AdminUser and ShowConfigTab;
 +            # but rename "Basics" to "Edit" in this context
 +            $page->child( 'basics' )->title( loc('Edit') );
 +        } elsif ( $current_user->HasRight( Object => $RT::System, Right => 'ShowUserHistory' ) ) {
 +            $page->child( display => title => loc('Summary'), path => '/User/Summary.html?id=' . $HTML::Mason::Commands::DECODED_ARGS->{'id'} );
 +            $page->child( history => title => loc('History'), path => '/User/History.html?id=' . $HTML::Mason::Commands::DECODED_ARGS->{'id'} );
 +        }
 +    }
 +
 +    if ( $request_path =~ /^\/(?:index.html|$)/ ) {
 +        $page->child( edit => title => loc('Edit'), path => '/Prefs/MyRT.html' );
 +    }
 +
 +    # due to historical reasons of always having been in /Elements/Tabs
-     $HTML::Mason::Commands::m->callback( CallbackName => 'Privileged', Path => $request_path, CallbackPage => '/Elements/Tabs' );
++    $HTML::Mason::Commands::m->callback( CallbackName => 'Privileged', Path => $request_path, ARGSRef => \%args, CallbackPage => '/Elements/Tabs' );
 +}
 +
 +sub _BuildAssetMenu {
 +    my $request_path = shift;
 +    my $top          = shift;
 +    my $widgets      = shift;
 +    my $page         = shift;
 +
 +    my %args = ( @_ );
 +
 +    my $current_user = $HTML::Mason::Commands::session{CurrentUser};
 +
 +    my $id    = $HTML::Mason::Commands::DECODED_ARGS->{id};
 +    my $asset = RT::Asset->new( $current_user );
 +    $asset->Load($id);
 +
 +    if ($asset->id) {
 +        $page->child("display",     title => HTML::Mason::Commands::loc("Display"),        path => "/Asset/Display.html?id=$id");
 +        $page->child("history",     title => HTML::Mason::Commands::loc("History"),        path => "/Asset/History.html?id=$id");
 +        $page->child("basics",      title => HTML::Mason::Commands::loc("Basics"),         path => "/Asset/Modify.html?id=$id");
 +        $page->child("links",       title => HTML::Mason::Commands::loc("Links"),          path => "/Asset/ModifyLinks.html?id=$id");
 +        $page->child("people",      title => HTML::Mason::Commands::loc("People"),         path => "/Asset/ModifyPeople.html?id=$id");
 +        $page->child("dates",       title => HTML::Mason::Commands::loc("Dates"),          path => "/Asset/ModifyDates.html?id=$id");
 +
 +        for my $grouping (RT::CustomField->CustomGroupings($asset)) {
 +            my $cfs = $asset->CustomFields;
 +            $cfs->LimitToGrouping( $asset => $grouping );
 +            next unless $cfs->Count;
 +            $page->child(
 +                "cf-grouping-$grouping",
 +                title   => HTML::Mason::Commands::loc($grouping),
 +                path    => "/Asset/ModifyCFs.html?id=$id;Grouping=" . $HTML::Mason::Commands::m->interp->apply_escapes($grouping, 'u'),
 +            );
 +        }
 +
 +        _BuildAssetMenuActionSubmenu( $request_path, $top, $widgets, $page, %args, Asset => $asset );
 +    }
 +}
 +
 +sub _BuildAssetMenuActionSubmenu {
 +    my $request_path = shift;
 +    my $top          = shift;
 +    my $widgets      = shift;
 +    my $page         = shift;
 +
 +    my %args = (
 +        Asset => undef,
 +        @_
 +    );
 +
 +    my $asset = $args{Asset};
 +    my $id    = $asset->id;
 +
 +    my $actions = $page->child("actions", title => HTML::Mason::Commands::loc("Actions"));
 +    $actions->child("create-linked-ticket", title => HTML::Mason::Commands::loc("Create linked ticket"), path => "/Asset/CreateLinkedTicket.html?Asset=$id");
 +
 +    my $status    = $asset->Status;
 +    my $lifecycle = $asset->LifecycleObj;
 +    for my $action ( $lifecycle->Actions($status) ) {
 +        my $next = $action->{'to'};
 +        next unless $lifecycle->IsTransition( $status => $next );
 +
 +        my $check = $lifecycle->CheckRight( $status => $next );
 +        next unless $asset->CurrentUserHasRight($check);
 +
 +        my $label = $action->{'label'} || ucfirst($next);
 +        $actions->child(
 +            $label,
 +            title   => HTML::Mason::Commands::loc($label),
 +            path    => "/Asset/Modify.html?id=$id;Update=1;DisplayAfter=1;Status="
 +                        . $HTML::Mason::Commands::m->interp->apply_escapes($next, 'u'),
 +
 +            class       => "asset-lifecycle-action",
 +            attributes  => {
 +                'data-current-status'   => $status,
 +                'data-next-status'      => $next,
 +            },
 +        );
 +    }
 +}
 +
 +sub _BuildAdminMenu {
 +    my $request_path = shift;
 +    my $top          = shift;
 +    my $widgets      = shift;
 +    my $page         = shift;
 +
 +    my %args = ( @_ );
 +
 +    my $current_user = $HTML::Mason::Commands::session{CurrentUser};
 +
 +    my $admin = $top->child( admin => title => loc('Admin'), path => '/Admin/' );
 +    if ( $current_user->HasRight( Object => RT->System, Right => 'AdminUsers' ) ) {
 +        my $users = $admin->child( users =>
 +            title       => loc('Users'),
 +            description => loc('Manage users and passwords'),
 +            path        => '/Admin/Users/',
 +        );
 +        $users->child( select => title => loc('Select'), path => "/Admin/Users/" );
 +        $users->child( create => title => loc('Create'), path => "/Admin/Users/Modify.html?Create=1" );
 +    }
 +    my $groups = $admin->child( groups =>
 +        title       => loc('Groups'),
 +        description => loc('Manage groups and group membership'),
 +        path        => '/Admin/Groups/',
 +    );
 +    $groups->child( select => title => loc('Select'), path => "/Admin/Groups/" );
 +    $groups->child( create => title => loc('Create'), path => "/Admin/Groups/Modify.html?Create=1" );
 +
 +    my $queues = $admin->child( queues =>
 +        title       => loc('Queues'),
 +        description => loc('Manage queues and queue-specific properties'),
 +        path        => '/Admin/Queues/',
 +    );
 +    $queues->child( select => title => loc('Select'), path => "/Admin/Queues/" );
 +    $queues->child( create => title => loc('Create'), path => "/Admin/Queues/Modify.html?Create=1" );
 +
 +    if ( $current_user->HasRight( Object => RT->System, Right => 'AdminCustomField' ) ) {
 +        my $cfs = $admin->child( 'custom-fields' =>
 +            title       => loc('Custom Fields'),
 +            description => loc('Manage custom fields and custom field values'),
 +            path        => '/Admin/CustomFields/',
 +        );
 +        $cfs->child( select => title => loc('Select'), path => "/Admin/CustomFields/" );
 +        $cfs->child( create => title => loc('Create'), path => "/Admin/CustomFields/Modify.html?Create=1" );
 +    }
 +
 +    if ( $current_user->HasRight( Object => RT->System, Right => 'AdminCustomRoles' ) ) {
 +        my $roles = $admin->child( 'custom-roles' =>
 +            title       => loc('Custom Roles'),
 +            description => loc('Manage custom roles'),
 +            path        => '/Admin/CustomRoles/',
 +        );
 +        $roles->child( select => title => loc('Select'), path => "/Admin/CustomRoles/" );
 +        $roles->child( create => title => loc('Create'), path => "/Admin/CustomRoles/Modify.html?Create=1" );
 +    }
 +
 +    if ( $current_user->HasRight( Object => RT->System, Right => 'ModifyScrips' ) ) {
 +        my $scrips = $admin->child( 'scrips' =>
 +            title       => loc('Scrips'),
 +            description => loc('Manage scrips'),
 +            path        => '/Admin/Scrips/',
 +        );
 +        $scrips->child( select => title => loc('Select'), path => "/Admin/Scrips/" );
 +        $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html" );
 +    }
 +
 +    my $admin_global = $admin->child( global =>
 +        title       => loc('Global'),
 +        description => loc('Manage properties and configuration which apply to all queues'),
 +        path        => '/Admin/Global/',
 +    );
 +
 +    my $scrips = $admin_global->child( scrips =>
 +        title       => loc('Scrips'),
 +        description => loc('Modify scrips which apply to all queues'),
 +        path        => '/Admin/Global/Scrips.html',
 +    );
 +    $scrips->child( select => title => loc('Select'), path => "/Admin/Global/Scrips.html" );
 +    $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html?Global=1" );
 +
 +    my $templates = $admin_global->child( templates =>
 +        title       => loc('Templates'),
 +        description => loc('Edit system templates'),
 +        path        => '/Admin/Global/Templates.html',
 +    );
 +    $templates->child( select => title => loc('Select'), path => "/Admin/Global/Templates.html" );
 +    $templates->child( create => title => loc('Create'), path => "/Admin/Global/Template.html?Create=1" );
 +
 +    my $cfadmin = $admin_global->child( 'custom-fields' =>
 +        title       => loc('Custom Fields'),
 +        description => loc('Modify global custom fields'),
 +        path        => '/Admin/Global/CustomFields/index.html',
 +    );
 +    $cfadmin->child( users =>
 +        title       => loc('Users'),
 +        description => loc('Select custom fields for all users'),
 +        path        => '/Admin/Global/CustomFields/Users.html',
 +    );
 +    $cfadmin->child( groups =>
 +        title       => loc('Groups'),
 +        description => loc('Select custom fields for all user groups'),
 +        path        => '/Admin/Global/CustomFields/Groups.html',
 +    );
 +    $cfadmin->child( queues =>
 +        title       => loc('Queues'),
 +        description => loc('Select custom fields for all queues'),
 +        path        => '/Admin/Global/CustomFields/Queues.html',
 +    );
 +    $cfadmin->child( tickets =>
 +        title       => loc('Tickets'),
 +        description => loc('Select custom fields for tickets in all queues'),
 +        path        => '/Admin/Global/CustomFields/Queue-Tickets.html',
 +    );
 +    $cfadmin->child( transactions =>
 +        title       => loc('Ticket Transactions'),
 +        description => loc('Select custom fields for transactions on tickets in all queues'),
 +        path        => '/Admin/Global/CustomFields/Queue-Transactions.html',
 +    );
 +    $cfadmin->child( 'custom-fields' =>
 +        title       => loc('Articles'),
 +        description => loc('Select Custom Fields for Articles in all Classes'),
 +        path        => '/Admin/Global/CustomFields/Class-Article.html',
 +    );
 +    $cfadmin->child( 'assets' =>
 +        title       => loc('Assets'),
 +        description => loc('Select Custom Fields for Assets in all Catalogs'),
 +        path        => '/Admin/Global/CustomFields/Catalog-Assets.html',
 +    );
 +
 +    my $article_admin = $admin->child( articles => title => loc('Articles'), path => "/Admin/Articles/index.html" );
 +    my $class_admin = $article_admin->child(classes => title => loc('Classes'), path => '/Admin/Articles/Classes/' );
 +    $class_admin->child( select =>
 +        title       => loc('Select'),
 +        description => loc('Modify and Create Classes'),
 +        path        => '/Admin/Articles/Classes/',
 +    );
 +    $class_admin->child( create =>
 +        title       => loc('Create'),
 +        description => loc('Modify and Create Custom Fields for Articles'),
 +        path        => '/Admin/Articles/Classes/Modify.html?Create=1',
 +    );
 +
 +
 +    my $cfs = $article_admin->child( 'custom-fields' =>
 +        title => loc('Custom Fields'),
 +        path  => '/Admin/CustomFields/index.html?'.$HTML::Mason::Commands::m->comp('/Elements/QueryString', Type => 'RT::Class-RT::Article'),
 +    );
 +    $cfs->child( select =>
 +        title => loc('Select'),
 +        path => '/Admin/CustomFields/index.html?'.$HTML::Mason::Commands::m->comp('/Elements/QueryString', Type => 'RT::Class-RT::Article'),
 +    );
 +    $cfs->child( create =>
 +        title => loc('Create'),
 +        path => '/Admin/CustomFields/Modify.html?'.$HTML::Mason::Commands::m->comp("/Elements/QueryString", Create=>1, LookupType=> "RT::Class-RT::Article" ),
 +    );
 +
 +    my $assets_admin = $admin->child( assets => title => loc("Assets"), path => '/Admin/Assets/' );
 +    my $catalog_admin = $assets_admin->child( catalogs =>
 +        title       => loc("Catalogs"),
 +        description => loc("Modify asset catalogs"),
 +        path        => "/Admin/Assets/Catalogs/"
 +    );
 +    $catalog_admin->child( "select", title => loc("Select"), path => $catalog_admin->path );
 +    $catalog_admin->child( "create", title => loc("Create"), path => "Create.html" );
 +
 +
 +    my $assets_cfs = $assets_admin->child( "cfs",
 +        title => loc("Custom Fields"),
 +        description => loc("Modify asset custom fields"),
 +        path => "/Admin/CustomFields/?Type=" . RT::Asset->CustomFieldLookupType
 +    );
 +    $assets_cfs->child( "select", title => loc("Select"), path => $assets_cfs->path );
 +    $assets_cfs->child( "create", title => loc("Create"), path => "/Admin/CustomFields/Modify.html?Create=1&LookupType=" . RT::Asset->CustomFieldLookupType);
 +
 +    $admin_global->child( 'group-rights' =>
 +        title       => loc('Group Rights'),
 +        description => loc('Modify global group rights'),
 +        path        => '/Admin/Global/GroupRights.html',
 +    );
 +    $admin_global->child( 'user-rights' =>
 +        title       => loc('User Rights'),
 +        description => loc('Modify global user rights'),
 +        path        => '/Admin/Global/UserRights.html',
 +    );
 +    $admin_global->child( 'my-rt' =>
 +        title       => loc('RT at a glance'),
 +        description => loc('Modify the default "RT at a glance" view'),
 +        path        => '/Admin/Global/MyRT.html',
 +    );
 +    $admin_global->child( 'dashboards-in-menu' =>
 +        title       => loc('Dashboards in menu'),
 +        description => loc('Customize dashboards in menu'),
 +        path        => '/Admin/Global/DashboardsInMenu.html',
 +    );
 +    $admin_global->child( 'topics' =>
 +        title       => loc('Topics'),
 +        description => loc('Modify global article topics'),
 +        path        => '/Admin/Global/Topics.html',
 +    );
 +
 +    my $admin_tools = $admin->child( tools =>
 +        title       => loc('Tools'),
 +        description => loc('Use other RT administrative tools'),
 +        path        => '/Admin/Tools/',
 +    );
 +    $admin_tools->child( configuration =>
 +        title       => loc('System Configuration'),
 +        description => loc('Detailed information about your RT setup'),
 +        path        => '/Admin/Tools/Configuration.html',
 +    );
 +    $admin_tools->child( theme =>
 +        title       => loc('Theme'),
 +        description => loc('Customize the look of your RT'),
 +        path        => '/Admin/Tools/Theme.html',
 +    );
 +    if (RT->Config->Get('StatementLog')
 +        && $current_user->HasRight( Right => 'SuperUser', Object => RT->System )) {
 +       $admin_tools->child( 'sql-queries' =>
 +           title       => loc('SQL Queries'),
 +           description => loc('Browse the SQL queries made in this process'),
 +           path        => '/Admin/Tools/Queries.html',
 +       );
 +    }
 +    $admin_tools->child( shredder =>
 +        title       => loc('Shredder'),
 +        description => loc('Permanently wipeout data from RT'),
 +        path        => '/Admin/Tools/Shredder',
 +    );
 +
 +    if ( $request_path =~ m{^/Admin/(Queues|Users|Groups|CustomFields|CustomRoles)} ) {
 +        my $type = $1;
  
 -        my %query_args;
 -        my %fallback_query_args = (
 -            SavedSearchId => ( $search_id eq 'new' ) ? undef : $search_id,
 -            SavedChartSearchId => $chart_id,
 -            (
 -                map {
 -                    my $p = $_;
 -                    $p => $DECODED_ARGS->{$p} || $current_search->{$p}
 -                } qw(Query Format OrderBy Order Page)
 -            ),
 -            RowsPerPage => (
 -                defined $DECODED_ARGS->{'RowsPerPage'}
 -                ? $DECODED_ARGS->{'RowsPerPage'}
 -                : $current_search->{'RowsPerPage'}
 -            ),
 +        my %labels = (
 +            Queues       => loc("Queues"),
 +            Users        => loc("Users"),
 +            Groups       => loc("Groups"),
 +            CustomFields => loc("Custom Fields"),
 +            CustomRoles  => loc("Custom Roles"),
          );
  
 -        if ($QueryString) {
 -            $args = '?' . $QueryString;
 -        }
 -        else {
 -            my %final_query_args = ();
 -            # key => callback to avoid unnecessary work
 -
 -            for my $param (keys %fallback_query_args) {
 -                $final_query_args{$param} = defined($QueryArgs->{$param})
 -                                          ? $QueryArgs->{$param}
 -                                          : $fallback_query_args{$param};
 -            }
 -
 -            for my $field (qw(Order OrderBy)) {
 -                if ( ref( $final_query_args{$field} ) eq 'ARRAY' ) {
 -                    $final_query_args{$field} = join( "|", @{ $final_query_args{$field} } );
 -                } elsif (not defined $final_query_args{$field}) {
 -                    delete $final_query_args{$field};
 -                }
 -                else {
 -                    $final_query_args{$field} ||= '';
 -                }
 -            }
 -
 -            $args = '?' . $query_string->(%final_query_args);
 -        }
 +        my $section;
 +        if ( $request_path =~ m|^/Admin/$type/?(?:index.html)?$|
 +             || (    $request_path =~ m|^/Admin/$type/(?:Modify.html)$|
 +                  && $HTML::Mason::Commands::DECODED_ARGS->{'Create'} )
 +           )
 +        {
 +            $section = $page;
  
 -        my $current_search_menu;
 -        if ( $request_path =~ m{^/Ticket} ) {
 -            $current_search_menu = $search->child( current_search => title => loc('Current Search') );
 -            $current_search_menu->path("/Search/Results.html$args") if $has_query;
          } else {
 -            $current_search_menu = PageMenu();
 +            $section = $page->child( select => title => $labels{$type},
 +                                     path => "/Admin/$type/" );
          }
  
 -        $current_search_menu->child( edit_search =>
 -            title => loc('Edit Search'), path => "/Search/Build.html" . ( ($has_query) ? $args : '' ) );
 -        $current_search_menu->child( advanced =>
 -            title => loc('Advanced'),    path => "/Search/Edit.html$args" );
 -        if ($has_query) {
 -            $current_search_menu->child( results => title => loc('Show Results'), path => "/Search/Results.html$args" );
 -        }
 +        $section->child( select => title => loc('Select'), path => "/Admin/$type/" );
 +        $section->child( create => title => loc('Create'), path => "/Admin/$type/Modify.html?Create=1" );
 +    }
  
 -        if ( $has_query ) {
 -            $current_search_menu->child( bulk  => title => loc('Bulk Update'), path => "/Search/Bulk.html$args" );
 -            $current_search_menu->child( chart => title => loc('Chart'),       path => "/Search/Chart.html$args" );
 +    if ( $request_path =~ m{^/Admin/Queues} ) {
 +        if ( $HTML::Mason::Commands::DECODED_ARGS->{'id'} && $HTML::Mason::Commands::DECODED_ARGS->{'id'} =~ /^\d+$/
 +                ||
 +              $HTML::Mason::Commands::DECODED_ARGS->{'Queue'} && $HTML::Mason::Commands::DECODED_ARGS->{'Queue'} =~ /^\d+$/
 +                ) {
 +            my $id = $HTML::Mason::Commands::DECODED_ARGS->{'Queue'} || $HTML::Mason::Commands::DECODED_ARGS->{'id'};
 +            my $queue_obj = RT::Queue->new( $current_user );
 +            $queue_obj->Load($id);
  
 -            my $more = $current_search_menu->child( more => title => loc('Feeds') );
 +            if ( $queue_obj and $queue_obj->id ) {
 +                my $queue = $page;
 +                $queue->child( basics => title => loc('Basics'),   path => "/Admin/Queues/Modify.html?id=" . $id );
 +                $queue->child( people => title => loc('Watchers'), path => "/Admin/Queues/People.html?id=" . $id );
  
 -            $more->child( spreadsheet => title => loc('Spreadsheet'), path => "/Search/Results.tsv$args" );
 +                my $templates = $queue->child(templates => title => loc('Templates'), path => "/Admin/Queues/Templates.html?id=" . $id);
 +                $templates->child( select => title => loc('Select'), path => "/Admin/Queues/Templates.html?id=".$id);
 +                $templates->child( create => title => loc('Create'), path => "/Admin/Queues/Template.html?Create=1;Queue=".$id);
  
 -            my %rss_data = map {
 -                $_ => $QueryArgs->{$_} || $fallback_query_args{$_} || '' }
 -                    qw(Query Order OrderBy);
 -            my $RSSQueryString = "?"
 -                . $query_string->( Query   => $rss_data{Query},
 -                                   Order   => $rss_data{Order},
 -                                   OrderBy => $rss_data{OrderBy}
 -                                 );
 -            my $RSSPath = join '/', map $m->interp->apply_escapes( $_, 'u' ),
 -                $session{'CurrentUser'}->UserObj->Name,
 -                $session{'CurrentUser'}
 -                ->UserObj->GenerateAuthString(   $rss_data{Query}
 -                                               . $rss_data{Order}
 -                                               . $rss_data{OrderBy} );
 +                my $scrips = $queue->child( scrips => title => loc('Scrips'), path => "/Admin/Queues/Scrips.html?id=" . $id);
 +                $scrips->child( select => title => loc('Select'), path => "/Admin/Queues/Scrips.html?id=" . $id );
 +                $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html?Queue=" . $id);
  
 -            $more->child( rss => title => loc('RSS'), path => "/NoAuth/rss/$RSSPath/$RSSQueryString");
 -            my $ical_path = join '/', map $m->interp->apply_escapes($_, 'u'),
 -                $session{'CurrentUser'}->UserObj->Name,
 -                $session{'CurrentUser'}->UserObj->GenerateAuthString( $rss_data{Query} ),
 -                $rss_data{Query};
 -            $more->child( ical => title => loc('iCal'), path => '/NoAuth/iCal/'.$ical_path);
 +                my $cfs = $queue->child( 'custom-fields' => title => loc('Custom Fields') );
 +                my $ticket_cfs = $cfs->child( 'tickets' => title => loc('Tickets'),
 +                    path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket&id=' . $id );
  
 -            if ($request_path =~ m{^/Search/Results.html}
 -                &&                        #XXX TODO better abstraction
 -                $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => RT->System )) {
 -                my $shred_args = $query_string->(
 -                    Search          => 1,
 -                    Plugin          => 'Tickets',
 -                    'Tickets:query' => $rss_data{'Query'},
 -                    'Tickets:limit' => $QueryArgs->{'Rows'},
 -                );
 +                my $txn_cfs = $cfs->child( 'transactions' => title => loc('Transactions'),
 +                    path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id );
  
 -                $more->child( shredder => title => loc('Shredder'), path => '/Admin/Tools/Shredder/?' . $shred_args);
 +                $queue->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Queues/GroupRights.html?id=".$id );
 +                $queue->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Queues/UserRights.html?id=" . $id );
 +                $queue->child( 'history' => title => loc('History'), path => "/Admin/Queues/History.html?id=" . $id );
 +                $queue->child( 'default-values' => title => loc('Default Values'), path => "/Admin/Queues/DefaultValues.html?id=" . $id );
 +
 +                # due to historical reasons of always having been in /Elements/Tabs
 +                $HTML::Mason::Commands::m->callback( CallbackName => 'PrivilegedQueue', queue_id => $id, page_menu => $queue, CallbackPage => '/Elements/Tabs' );
              }
 +        }
 +    }
 +    if ( $request_path =~ m{^(/Admin/Users|/User/(Summary|History)\.html)} and $admin->child("users") ) {
 +        if ( $HTML::Mason::Commands::DECODED_ARGS->{'id'} && $HTML::Mason::Commands::DECODED_ARGS->{'id'} =~ /^\d+$/ ) {
 +            my $id = $HTML::Mason::Commands::DECODED_ARGS->{'id'};
 +            my $obj = RT::User->new( $current_user );
 +            $obj->Load($id);
  
 +            if ( $obj and $obj->id ) {
 +                $page->child( basics      => title => loc('Basics'),         path => "/Admin/Users/Modify.html?id=" . $id );
 +                $page->child( memberships => title => loc('Memberships'),    path => "/Admin/Users/Memberships.html?id=" . $id );
 +                $page->child( history     => title => loc('History'),        path => "/Admin/Users/History.html?id=" . $id );
 +                $page->child( 'my-rt'     => title => loc('RT at a glance'), path => "/Admin/Users/MyRT.html?id=" . $id );
 +                $page->child( 'dashboards-in-menu' =>
 +                    title => loc('Dashboards in menu'),
 +                    path  => '/Admin/Users/DashboardsInMenu.html?id=' . $id,
 +                );
 +                if ( RT->Config->Get('Crypt')->{'Enable'} ) {
 +                    $page->child( keys    => title => loc('Private keys'),   path => "/Admin/Users/Keys.html?id=" . $id );
 +                }
 +                $page->child( 'summary'   => title => loc('User Summary'),   path => "/User/Summary.html?id=" . $id );
 +            }
          }
 +
      }
  
 -    if ( $request_path =~ m{^/Article/} ) {
 -        if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ ) {
 -            my $id = $DECODED_ARGS->{'id'};
 -            my $tabs = PageMenu();
 +    if ( $request_path =~ m{^/Admin/Groups} ) {
 +        if ( $HTML::Mason::Commands::DECODED_ARGS->{'id'} && $HTML::Mason::Commands::DECODED_ARGS->{'id'} =~ /^\d+$/ ) {
 +            my $id = $HTML::Mason::Commands::DECODED_ARGS->{'id'};
 +            my $obj = RT::Group->new( $current_user );
 +            $obj->Load($id);
  
 -            $tabs->child( display => title => loc('Display'), path => "/Articles/Article/Display.html?id=".$id );
 -            $tabs->child( history => title => loc('History'), path => "/Articles/Article/History.html?id=".$id );
 -            $tabs->child( modify  => title => loc('Modify'),  path => "/Articles/Article/Edit.html?id=".$id );
 +            if ( $obj and $obj->id ) {
 +                $page->child( basics         => title => loc('Basics'),       path => "/Admin/Groups/Modify.html?id=" . $obj->id );
 +                $page->child( members        => title => loc('Members'),      path => "/Admin/Groups/Members.html?id=" . $obj->id );
 +                $page->child( memberships    => title => loc('Memberships'),  path => "/Admin/Groups/Memberships.html?id=" . $obj->id );
 +                $page->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Groups/GroupRights.html?id=" . $obj->id );
 +                $page->child( 'user-rights'  => title => loc('User Rights'),  path => "/Admin/Groups/UserRights.html?id=" . $obj->id );
 +                $page->child( history        => title => loc('History'),      path => "/Admin/Groups/History.html?id=" . $obj->id );
 +            }
          }
      }
  
@@@ -1220,8 -1174,23 +1220,8 @@@ sub BuildSelfServiceNav 
          }
      }
  
 -    $m->callback( CallbackName => 'SelfService', Path => $request_path, ARGSRef => \%ARGS );
 -};
 -
 -
 -
 -if ( $request_path !~ m{^/SelfService/} ) {
 -    $build_main_nav->();
 -} else {
 -    $build_selfservice_nav->();
 +    # due to historical reasons of always having been in /Elements/Tabs
-     $HTML::Mason::Commands::m->callback( CallbackName => 'SelfService', Path => $request_path, CallbackPage => '/Elements/Tabs' );
++    $HTML::Mason::Commands::m->callback( CallbackName => 'SelfService', Path => $request_path, ARGSRef => \%args, CallbackPage => '/Elements/Tabs' );
  }
  
 -
 -
 -
 -</%INIT>
 -<%ARGS>
 -$show_menu => 1
 -$QueryString => ''
 -$QueryArgs => {}
 -</%ARGS>
 +1;

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


More information about the rt-commit mailing list