From 494134b0cb53996bc9815e438ac7bf14bd3fea50 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Thu, 6 Nov 2008 11:09:21 -0700 Subject: [PATCH] Initial import of IMP 5. IMP 5 is currently Happy Fun Ball-esque. Do not taunt IMP 5. Do not stare directly at IMP 5. If IMP 5 begins to smoke, seek shelter and cover head. --- imp/COPYING | 280 + imp/README | 93 + imp/acl.php | 230 + imp/attachment.php | 139 + imp/cache.php | 90 + imp/compose.php | 1269 ++++ imp/config/.htaccess | 1 + imp/config/conf.xml | 449 ++ imp/config/filter.txt.dist | 7 + imp/config/header.php.dist | 22 + imp/config/hooks.php.dist | 557 ++ imp/config/menu.php.dist | 41 + imp/config/mime_drivers.php.dist | 291 + imp/config/motd.php.dist | 41 + imp/config/prefs.php.dist | 1453 ++++ imp/config/servers.php.dist | 284 + imp/config/spelling.php.dist | 13 + imp/config/trailer.txt.dist | 3 + imp/contacts.php | 127 + imp/docs/CHANGES | 2157 ++++++ imp/docs/CREDITS | 129 + imp/docs/INSTALL | 583 ++ imp/docs/RELEASE_NOTES | 49 + imp/docs/TODO | 25 + imp/docs/UPGRADING | 193 + imp/fetchmail.php | 78 + imp/fetchmailprefs.php | 195 + imp/filterprefs.php | 132 + imp/folders.php | 504 ++ imp/imple.php | 49 + imp/index.php | 26 + imp/js/KeyNavList.js | 1 + imp/js/SpellChecker.js | 1 + imp/js/acl.js | 1 + imp/js/autocomplete.js | 1 + imp/js/compose.js | 1 + imp/js/contacts.js | 1 + imp/js/fetchmailprefs.js | 1 + imp/js/folders.js | 1 + imp/js/login.js | 1 + imp/js/mailbox.js | 1 + imp/js/message.js | 1 + imp/js/popup.js | 1 + imp/js/redbox.js | 1 + imp/js/search.js | 1 + imp/js/src/KeyNavList.js | 209 + imp/js/src/SpellChecker.js | 331 + imp/js/src/acl.js | 21 + imp/js/src/autocomplete.js | 467 ++ imp/js/src/compose.js | 343 + imp/js/src/contacts.js | 123 + imp/js/src/fetchmailprefs.js | 27 + imp/js/src/folders.js | 170 + imp/js/src/login.js | 83 + imp/js/src/mailbox.js | 319 + imp/js/src/message.js | 128 + imp/js/src/popup.js | 57 + imp/js/src/redbox.js | 130 + imp/js/src/search.js | 74 + imp/js/src/unblockImages.js | 42 + imp/js/unblockImages.js | 1 + imp/lib/.htaccess | 1 + imp/lib/Auth/imp.php | 74 + imp/lib/Block/summary.php | 143 + imp/lib/Block/tree_folders.php | 118 + imp/lib/Compose.php | 2813 +++++++ imp/lib/Contents.php | 642 ++ imp/lib/Crypt/PGP.php | 763 ++ imp/lib/Crypt/SMIME.php | 475 ++ imp/lib/Fetchmail.php | 274 + imp/lib/Fetchmail/Account.php | 162 + imp/lib/Fetchmail/imap.php | 230 + imp/lib/Filter.php | 129 + imp/lib/Folder.php | 583 ++ imp/lib/IMAP.php | 320 + imp/lib/IMAP/Thread.php | 155 + imp/lib/IMAP/Tree.php | 1945 +++++ imp/lib/IMP.php | 1827 +++++ imp/lib/Identity/imp.php | 548 ++ imp/lib/Imple.php | 101 + imp/lib/Imple/ContactAutoCompleter.php | 128 + imp/lib/Imple/SpellChecker.php | 109 + imp/lib/MIME/Viewer/alternative.php | 130 + imp/lib/MIME/Viewer/appledouble.php | 75 + imp/lib/MIME/Viewer/enriched.php | 68 + imp/lib/MIME/Viewer/html.php | 269 + imp/lib/MIME/Viewer/images.php | 267 + imp/lib/MIME/Viewer/itip.php | 980 +++ imp/lib/MIME/Viewer/notification.php | 84 + imp/lib/MIME/Viewer/partial.php | 78 + imp/lib/MIME/Viewer/pdf.php | 143 + imp/lib/MIME/Viewer/pgp.php | 486 ++ imp/lib/MIME/Viewer/pkcs7.php | 497 ++ imp/lib/MIME/Viewer/plain.php | 130 + imp/lib/MIME/Viewer/related.php | 108 + imp/lib/MIME/Viewer/rfc822.php | 64 + imp/lib/MIME/Viewer/smil.php | 103 + imp/lib/MIME/Viewer/status.php | 181 + imp/lib/MIME/Viewer/tnef.php | 138 + imp/lib/MIME/Viewer/zip.php | 105 + imp/lib/Mailbox.php | 744 ++ imp/lib/Maillog.php | 185 + .../Task/delete_attachments_monthly.php | 62 + .../Maintenance/Task/delete_sentmail_monthly.php | 75 + imp/lib/Maintenance/Task/fetchmail_login.php | 75 + imp/lib/Maintenance/Task/purge_sentmail.php | 99 + imp/lib/Maintenance/Task/purge_spam.php | 84 + imp/lib/Maintenance/Task/purge_trash.php | 83 + .../Maintenance/Task/rename_sentmail_monthly.php | 100 + imp/lib/Maintenance/Task/tos_agreement.php | 52 + imp/lib/Maintenance/imp.php | 39 + imp/lib/Message.php | 722 ++ imp/lib/Notification/Listener/status.php | 49 + imp/lib/Quota.php | 129 + imp/lib/Quota/command.php | 94 + imp/lib/Quota/hook.php | 48 + imp/lib/Quota/imap.php | 45 + imp/lib/Quota/logfile.php | 88 + imp/lib/Quota/maildir.php | 114 + imp/lib/Quota/mdaemon.php | 113 + imp/lib/Quota/mercury32.php | 71 + imp/lib/Quota/sql.php | 143 + imp/lib/Search.php | 870 +++ imp/lib/Sentmail.php | 143 + imp/lib/Sentmail/sql.php | 228 + imp/lib/Session.php | 353 + imp/lib/Spam.php | 272 + imp/lib/Template.php | 509 ++ imp/lib/UI/Compose.php | 228 + imp/lib/UI/Mailbox.php | 212 + imp/lib/UI/Message.php | 371 + imp/lib/api.php | 372 + imp/lib/base.php | 166 + imp/lib/prefs.php | 224 + imp/lib/tests/fixtures/maildirsize | 35 + imp/lib/tests/mime_viewer_html.phpt | 72 + imp/lib/tests/quota_maildir.phpt | 17 + imp/lib/version.php | 1 + imp/locale/.htaccess | 1 + imp/locale/ar_OM/LC_MESSAGES/imp.mo | Bin 0 -> 37438 bytes imp/locale/ar_SY/LC_MESSAGES/imp.mo | Bin 0 -> 56770 bytes imp/locale/bg_BG/LC_MESSAGES/imp.mo | Bin 0 -> 98585 bytes imp/locale/bs_BA/LC_MESSAGES/imp.mo | Bin 0 -> 68666 bytes imp/locale/ca_ES/LC_MESSAGES/imp.mo | Bin 0 -> 230845 bytes imp/locale/ca_ES/help.xml | 1052 +++ imp/locale/cs_CZ/LC_MESSAGES/imp.mo | Bin 0 -> 225276 bytes imp/locale/cs_CZ/help.xml | 1018 +++ imp/locale/da_DK/LC_MESSAGES/imp.mo | Bin 0 -> 213941 bytes imp/locale/da_DK/help.xml | 813 ++ imp/locale/de_DE/LC_MESSAGES/imp.mo | Bin 0 -> 278466 bytes imp/locale/de_DE/help.xml | 1264 ++++ imp/locale/el_GR/LC_MESSAGES/imp.mo | Bin 0 -> 224062 bytes imp/locale/el_GR/help.xml | 804 ++ imp/locale/en_US/help.xml | 880 +++ imp/locale/es_ES/LC_MESSAGES/imp.mo | Bin 0 -> 265054 bytes imp/locale/es_ES/help.xml | 878 +++ imp/locale/et_EE/LC_MESSAGES/imp.mo | Bin 0 -> 229045 bytes imp/locale/et_EE/help.xml | 805 ++ imp/locale/eu_ES/LC_MESSAGES/imp.mo | Bin 0 -> 236130 bytes imp/locale/eu_ES/help.xml | 279 + imp/locale/fa_IR/LC_MESSAGES/imp.mo | Bin 0 -> 240087 bytes imp/locale/fa_IR/help.xml | 2367 ++++++ imp/locale/fi_FI/LC_MESSAGES/imp.mo | Bin 0 -> 258911 bytes imp/locale/fi_FI/help.xml | 1061 +++ imp/locale/fr_FR/LC_MESSAGES/imp.mo | Bin 0 -> 262440 bytes imp/locale/fr_FR/help.xml | 808 ++ imp/locale/gl_ES/LC_MESSAGES/imp.mo | Bin 0 -> 53794 bytes imp/locale/he_IL/LC_MESSAGES/imp.mo | Bin 0 -> 10002 bytes imp/locale/hu_HU/LC_MESSAGES/imp.mo | Bin 0 -> 263090 bytes imp/locale/hu_HU/help.xml | 969 +++ imp/locale/id_ID/LC_MESSAGES/imp.mo | Bin 0 -> 99360 bytes imp/locale/is_IS/LC_MESSAGES/imp.mo | Bin 0 -> 54775 bytes imp/locale/it_IT/LC_MESSAGES/imp.mo | Bin 0 -> 261936 bytes imp/locale/it_IT/help.xml | 835 ++ imp/locale/ja_JP/LC_MESSAGES/imp.mo | Bin 0 -> 237072 bytes imp/locale/km_KH/LC_MESSAGES/imp.mo | Bin 0 -> 204039 bytes imp/locale/ko_KR/LC_MESSAGES/imp.mo | Bin 0 -> 64388 bytes imp/locale/ko_KR/help.xml | 805 ++ imp/locale/lt_LT/LC_MESSAGES/imp.mo | Bin 0 -> 247032 bytes imp/locale/lv_LV/LC_MESSAGES/imp.mo | Bin 0 -> 48885 bytes imp/locale/mk_MK/LC_MESSAGES/imp.mo | Bin 0 -> 53919 bytes imp/locale/nb_NO/LC_MESSAGES/imp.mo | Bin 0 -> 161564 bytes imp/locale/nb_NO/help.xml | 805 ++ imp/locale/nl_NL/LC_MESSAGES/imp.mo | Bin 0 -> 253002 bytes imp/locale/nl_NL/help.xml | 804 ++ imp/locale/nn_NO/LC_MESSAGES/imp.mo | Bin 0 -> 72241 bytes imp/locale/pl_PL/LC_MESSAGES/imp.mo | Bin 0 -> 174829 bytes imp/locale/pl_PL/help.xml | 805 ++ imp/locale/pt_BR/LC_MESSAGES/imp.mo | Bin 0 -> 264243 bytes imp/locale/pt_BR/help.xml | 2766 +++++++ imp/locale/pt_PT/LC_MESSAGES/imp.mo | Bin 0 -> 235905 bytes imp/locale/pt_PT/help.xml | 805 ++ imp/locale/ro_RO/LC_MESSAGES/imp.mo | Bin 0 -> 40833 bytes imp/locale/ru_RU/LC_MESSAGES/imp.mo | Bin 0 -> 73566 bytes imp/locale/ru_RU/help.xml | 794 ++ imp/locale/sk_SK/LC_MESSAGES/imp.mo | Bin 0 -> 257306 bytes imp/locale/sk_SK/help.xml | 848 +++ imp/locale/sl_SI/LC_MESSAGES/imp.mo | Bin 0 -> 218244 bytes imp/locale/sv_SE/LC_MESSAGES/imp.mo | Bin 0 -> 162328 bytes imp/locale/sv_SE/help.xml | 805 ++ imp/locale/th_TH/LC_MESSAGES/imp.mo | Bin 0 -> 30245 bytes imp/locale/tr_TR/LC_MESSAGES/imp.mo | Bin 0 -> 242837 bytes imp/locale/tr_TR/help.xml | 2574 +++++++ imp/locale/uk_UA/LC_MESSAGES/imp.mo | Bin 0 -> 198313 bytes imp/locale/uk_UA/help.xml | 805 ++ imp/locale/zh_CN/LC_MESSAGES/imp.mo | Bin 0 -> 191586 bytes imp/locale/zh_CN/help.xml | 805 ++ imp/locale/zh_TW/LC_MESSAGES/imp.mo | Bin 0 -> 222065 bytes imp/locale/zh_TW/help.xml | 7998 ++++++++++++++++++++ imp/login.php | 343 + imp/mailbox.php | 881 +++ imp/message.php | 705 ++ imp/pgp.php | 466 ++ imp/po/.htaccess | 1 + imp/po/README | 1 + imp/po/ar_OM.po | 2262 ++++++ imp/po/ar_SY.po | 2261 ++++++ imp/po/bg_BG.po | 2275 ++++++ imp/po/bs_BA.po | 4641 ++++++++++++ imp/po/ca_ES.po | 5142 +++++++++++++ imp/po/cs_CZ.po | 5091 +++++++++++++ imp/po/da_DK.po | 5123 +++++++++++++ imp/po/de_DE.po | 6035 +++++++++++++++ imp/po/el_GR.po | 4985 ++++++++++++ imp/po/es_ES.po | 5853 ++++++++++++++ imp/po/et_EE.po | 5534 ++++++++++++++ imp/po/eu_ES.po | 5167 +++++++++++++ imp/po/fa_IR.po | 5022 ++++++++++++ imp/po/fi_FI.po | 5813 ++++++++++++++ imp/po/fr_FR.po | 5907 +++++++++++++++ imp/po/gl_ES.po | 1653 ++++ imp/po/he_IL.po | 4957 ++++++++++++ imp/po/hu_HU.po | 5684 ++++++++++++++ imp/po/id_ID.po | 1694 +++++ imp/po/imp.pot | 5705 ++++++++++++++ imp/po/is_IS.po | 4634 ++++++++++++ imp/po/it_IT.po | 5857 ++++++++++++++ imp/po/ja_JP.po | 5505 ++++++++++++++ imp/po/km_KH.po | 5029 ++++++++++++ imp/po/ko_KR.po | 4514 +++++++++++ imp/po/lt_LT.po | 5539 ++++++++++++++ imp/po/lv_LV.po | 1589 ++++ imp/po/mk_MK.po | 1559 ++++ imp/po/nb_NO.po | 4614 +++++++++++ imp/po/nl_NL.po | 5628 ++++++++++++++ imp/po/nn_NO.po | 2107 ++++++ imp/po/pl_PL.po | 5564 ++++++++++++++ imp/po/pt_BR.po | 5901 +++++++++++++++ imp/po/pt_PT.po | 5135 +++++++++++++ imp/po/ro_RO.po | 1602 ++++ imp/po/ru_RU.po | 7134 +++++++++++++++++ imp/po/sk_SK.po | 5819 ++++++++++++++ imp/po/sl_SI.po | 5153 +++++++++++++ imp/po/sv_SE.po | 4669 ++++++++++++ imp/po/th_TH.po | 1881 +++++ imp/po/tr_TR.po | 5805 ++++++++++++++ imp/po/uk_UA.po | 5455 +++++++++++++ imp/po/zh_CN.po | 5179 +++++++++++++ imp/po/zh_TW.po | 5657 ++++++++++++++ imp/redirect.php | 190 + imp/rss.php | 97 + imp/saveimage.php | 55 + imp/scripts/.htaccess | 1 + imp/scripts/Imp.reg | 28 + imp/scripts/bounce_spam.php | 60 + imp/scripts/custom_login.php | 41 + imp/scripts/sql/imp.sql | 17 + imp/scripts/sql/imp.xml | 97 + imp/scripts/upgrades/convert_vfolders.php | 81 + imp/search.php | 349 + imp/smime.php | 352 + imp/stationery.php | 143 + imp/templates/.htaccess | 1 + imp/templates/acl/acl.html | 102 + imp/templates/common-header.inc | 53 + imp/templates/compose/compose.html | 361 + imp/templates/compose/redirect.html | 92 + imp/templates/compose/success.html | 1 + imp/templates/contacts/contacts.html | 72 + imp/templates/fetchmail/fetchmail.html | 36 + imp/templates/fetchmail/fetchmailprefs.html | 129 + imp/templates/filters/prefs.html | 37 + imp/templates/folders/actions.html | 60 + imp/templates/folders/folders.html | 5 + imp/templates/folders/folders_confirm.html | 27 + imp/templates/folders/folders_size.html | 32 + imp/templates/folders/head.html | 11 + imp/templates/folders/import.html | 20 + imp/templates/javascript_defs.php | 81 + imp/templates/login/login.html | 117 + imp/templates/login/mobile.inc | 50 + imp/templates/mailbox/actions.html | 28 + imp/templates/mailbox/actions_deleted.html | 6 + imp/templates/mailbox/empty_mailbox.html | 3 + imp/templates/mailbox/header.html | 21 + imp/templates/mailbox/mailbox.html | 15 + imp/templates/mailbox/message_footers.html | 6 + imp/templates/mailbox/message_headers.html | 22 + imp/templates/mailbox/navbar.html | 79 + imp/templates/mailbox/searchfolder.html | 3 + imp/templates/menu.html | 36 + imp/templates/message/message.html | 16 + imp/templates/message/navbar_actions.html | 48 + imp/templates/message/navbar_navigate.html | 48 + imp/templates/message/navbar_top.html | 13 + imp/templates/newmsg/alert.html | 18 + imp/templates/pgp/import_key.html | 56 + imp/templates/pgp/passphrase.html | 29 + imp/templates/pgp/pgp.html | 149 + imp/templates/prefs/encryptselect.inc | 5 + imp/templates/prefs/folderselect.inc | 27 + imp/templates/prefs/initialpageselect.inc | 21 + imp/templates/prefs/sentmailselect.inc | 44 + imp/templates/prefs/soundselect.inc | 16 + imp/templates/prefs/sourceselect.inc | 353 + imp/templates/prefs/spamselect.inc | 23 + imp/templates/prefs/trashselect.inc | 29 + imp/templates/quota/quota.html | 7 + imp/templates/rss/mailbox.rss | 28 + imp/templates/saveimage/saveimage.html | 23 + imp/templates/search/search.html | 185 + imp/templates/smime/import_key.html | 77 + imp/templates/smime/passphrase.html | 31 + imp/templates/smime/smime.html | 97 + imp/templates/stationery/stationery.html | 49 + imp/templates/thread/thread.html | 55 + imp/test.php | 248 + imp/themes/azur/screen.css | 52 + imp/themes/bluemoon/screen.css | 39 + imp/themes/bluewhite/screen.css | 38 + imp/themes/brown/screen.css | 7 + imp/themes/burntorange/screen.css | 35 + imp/themes/cherry/screen.css | 13 + imp/themes/cornflower/screen.css | 11 + imp/themes/fadetogreen/screen.css | 29 + imp/themes/feed-rss.xsl | 79 + imp/themes/gennevilliers/screen.css | 38 + imp/themes/graphics/addressbook_add.png | Bin 0 -> 277 bytes imp/themes/graphics/addressbook_browse.png | Bin 0 -> 263 bytes imp/themes/graphics/apple.png | Bin 0 -> 157 bytes imp/themes/graphics/attachment.png | Bin 0 -> 352 bytes imp/themes/graphics/audio/doorbell.wav | Bin 0 -> 5168 bytes imp/themes/graphics/audio/gnid3.wav | Bin 0 -> 13688 bytes imp/themes/graphics/audio/jetsndb.wav | Bin 0 -> 31256 bytes imp/themes/graphics/audio/reminder.wav | Bin 0 -> 25816 bytes imp/themes/graphics/audio/theetone.wav | Bin 0 -> 24776 bytes imp/themes/graphics/compose.png | Bin 0 -> 479 bytes imp/themes/graphics/empty_spam.png | Bin 0 -> 731 bytes imp/themes/graphics/empty_trash.png | Bin 0 -> 731 bytes imp/themes/graphics/encrypted.png | Bin 0 -> 401 bytes imp/themes/graphics/expand.png | Bin 0 -> 220 bytes imp/themes/graphics/favicon.ico | Bin 0 -> 1406 bytes imp/themes/graphics/fetchmail.png | Bin 0 -> 419 bytes imp/themes/graphics/filters.png | Bin 0 -> 152 bytes imp/themes/graphics/folders/drafts.png | Bin 0 -> 348 bytes imp/themes/graphics/folders/folder.png | Bin 0 -> 368 bytes imp/themes/graphics/folders/folder_create.png | Bin 0 -> 233 bytes imp/themes/graphics/folders/folder_delete.png | Bin 0 -> 234 bytes imp/themes/graphics/folders/folder_edit.png | Bin 0 -> 164 bytes imp/themes/graphics/folders/folder_open.png | Bin 0 -> 333 bytes imp/themes/graphics/folders/inbox.png | Bin 0 -> 334 bytes imp/themes/graphics/folders/sent.png | Bin 0 -> 395 bytes imp/themes/graphics/folders/spam.png | Bin 0 -> 245 bytes imp/themes/graphics/folders/trash.png | Bin 0 -> 461 bytes imp/themes/graphics/imp.png | Bin 0 -> 334 bytes imp/themes/graphics/loading.gif | Bin 0 -> 1737 bytes imp/themes/graphics/mail_answered.png | Bin 0 -> 316 bytes imp/themes/graphics/mail_clearflag.png | Bin 0 -> 474 bytes imp/themes/graphics/mail_deleted.png | Bin 0 -> 788 bytes imp/themes/graphics/mail_draft.png | Bin 0 -> 407 bytes imp/themes/graphics/mail_flagged.png | Bin 0 -> 379 bytes imp/themes/graphics/mail_forwarded.png | Bin 0 -> 358 bytes imp/themes/graphics/mail_personal.png | Bin 0 -> 797 bytes imp/themes/graphics/mail_priority_high.png | Bin 0 -> 246 bytes imp/themes/graphics/mail_priority_low.png | Bin 0 -> 169 bytes imp/themes/graphics/mail_seen.png | Bin 0 -> 340 bytes imp/themes/graphics/mail_unseen.png | Bin 0 -> 347 bytes imp/themes/graphics/manage_attachments.png | Bin 0 -> 351 bytes imp/themes/graphics/mime/binary.png | Bin 0 -> 326 bytes imp/themes/graphics/mime/compressed.png | Bin 0 -> 875 bytes imp/themes/graphics/mime/encryption.png | Bin 0 -> 505 bytes imp/themes/graphics/mime/html.png | Bin 0 -> 603 bytes imp/themes/graphics/mime/image.png | Bin 0 -> 201 bytes imp/themes/graphics/mime/itip.png | Bin 0 -> 310 bytes imp/themes/graphics/mime/mail.png | Bin 0 -> 597 bytes imp/themes/graphics/mime/pdf.png | Bin 0 -> 1191 bytes imp/themes/graphics/mime/text.png | Bin 0 -> 152 bytes imp/themes/graphics/mini-error.png | Bin 0 -> 252 bytes imp/themes/graphics/newmail.png | Bin 0 -> 554 bytes imp/themes/graphics/popdown.png | Bin 0 -> 121 bytes imp/themes/graphics/redbox_spinner.gif | Bin 0 -> 6820 bytes imp/themes/graphics/shared.png | Bin 0 -> 225 bytes imp/themes/graphics/signed.png | Bin 0 -> 401 bytes imp/themes/graphics/spacer_red.png | Bin 0 -> 83 bytes imp/themes/graphics/spellcheck.png | Bin 0 -> 199 bytes imp/themes/green/screen.css | 16 + imp/themes/grey/screen.css | 13 + imp/themes/ideas/screen.css | 7 + imp/themes/ie6_or_less.css | 10 + imp/themes/ie7.css | 10 + imp/themes/lavander/screen.css | 13 + imp/themes/luc/screen.css | 15 + imp/themes/lucblue/screen.css | 11 + imp/themes/mozilla/screen.css | 28 + imp/themes/postnuke/screen.css | 19 + imp/themes/rtl.css | 48 + imp/themes/screen.css | 388 + imp/themes/silver/graphics/addressbook_add.png | Bin 0 -> 661 bytes imp/themes/silver/graphics/addressbook_browse.png | Bin 0 -> 770 bytes imp/themes/silver/graphics/apple.png | Bin 0 -> 157 bytes imp/themes/silver/graphics/attachment.png | Bin 0 -> 391 bytes imp/themes/silver/graphics/audio/doorbell.wav | Bin 0 -> 5168 bytes imp/themes/silver/graphics/audio/gnid3.wav | Bin 0 -> 13688 bytes imp/themes/silver/graphics/audio/jetsndb.wav | Bin 0 -> 31256 bytes imp/themes/silver/graphics/audio/reminder.wav | Bin 0 -> 25816 bytes imp/themes/silver/graphics/audio/theetone.wav | Bin 0 -> 24776 bytes imp/themes/silver/graphics/compose.png | Bin 0 -> 761 bytes imp/themes/silver/graphics/empty_spam.png | Bin 0 -> 476 bytes imp/themes/silver/graphics/empty_trash.png | Bin 0 -> 363 bytes imp/themes/silver/graphics/encrypted.png | Bin 0 -> 792 bytes imp/themes/silver/graphics/expand.png | Bin 0 -> 750 bytes imp/themes/silver/graphics/favicon.ico | Bin 0 -> 1406 bytes imp/themes/silver/graphics/fetchmail.png | Bin 0 -> 634 bytes imp/themes/silver/graphics/filters.png | Bin 0 -> 597 bytes imp/themes/silver/graphics/folders/drafts.png | Bin 0 -> 645 bytes imp/themes/silver/graphics/folders/folder.png | Bin 0 -> 537 bytes .../silver/graphics/folders/folder_create.png | Bin 0 -> 668 bytes .../silver/graphics/folders/folder_delete.png | Bin 0 -> 666 bytes imp/themes/silver/graphics/folders/folder_edit.png | Bin 0 -> 733 bytes imp/themes/silver/graphics/folders/folder_open.png | Bin 0 -> 537 bytes imp/themes/silver/graphics/folders/inbox.png | Bin 0 -> 783 bytes imp/themes/silver/graphics/folders/sent.png | Bin 0 -> 694 bytes imp/themes/silver/graphics/folders/spam.png | Bin 0 -> 647 bytes imp/themes/silver/graphics/folders/trash.png | Bin 0 -> 476 bytes imp/themes/silver/graphics/imp.png | Bin 0 -> 811 bytes imp/themes/silver/graphics/loading.gif | Bin 0 -> 1737 bytes imp/themes/silver/graphics/mail_answered.png | Bin 0 -> 744 bytes imp/themes/silver/graphics/mail_clearflag.png | Bin 0 -> 424 bytes imp/themes/silver/graphics/mail_deleted.png | Bin 0 -> 756 bytes imp/themes/silver/graphics/mail_draft.png | Bin 0 -> 756 bytes imp/themes/silver/graphics/mail_flagged.png | Bin 0 -> 665 bytes imp/themes/silver/graphics/mail_forwarded.png | Bin 0 -> 754 bytes imp/themes/silver/graphics/mail_personal.png | Bin 0 -> 663 bytes imp/themes/silver/graphics/mail_priority_high.png | Bin 0 -> 673 bytes imp/themes/silver/graphics/mail_priority_low.png | Bin 0 -> 725 bytes imp/themes/silver/graphics/mail_seen.png | Bin 0 -> 380 bytes imp/themes/silver/graphics/mail_unseen.png | Bin 0 -> 641 bytes imp/themes/silver/graphics/manage_attachments.png | Bin 0 -> 391 bytes imp/themes/silver/graphics/mime/binary.png | Bin 0 -> 512 bytes imp/themes/silver/graphics/mime/compressed.png | Bin 0 -> 766 bytes imp/themes/silver/graphics/mime/encryption.png | Bin 0 -> 749 bytes imp/themes/silver/graphics/mime/html.png | Bin 0 -> 389 bytes imp/themes/silver/graphics/mime/image.png | Bin 0 -> 589 bytes imp/themes/silver/graphics/mime/itip.png | Bin 0 -> 566 bytes imp/themes/silver/graphics/mime/mail.png | Bin 0 -> 641 bytes imp/themes/silver/graphics/mime/pdf.png | Bin 0 -> 591 bytes imp/themes/silver/graphics/mime/text.png | Bin 0 -> 342 bytes imp/themes/silver/graphics/mini-error.png | Bin 0 -> 252 bytes imp/themes/silver/graphics/newmail.png | Bin 0 -> 378 bytes imp/themes/silver/graphics/popdown.png | Bin 0 -> 201 bytes imp/themes/silver/graphics/redbox_spinner.gif | Bin 0 -> 6820 bytes imp/themes/silver/graphics/shared.png | Bin 0 -> 686 bytes imp/themes/silver/graphics/signed.png | Bin 0 -> 749 bytes imp/themes/silver/graphics/spacer_red.png | Bin 0 -> 128 bytes imp/themes/silver/graphics/spellcheck.png | Bin 0 -> 603 bytes imp/themes/silver/screen.css | 22 + imp/themes/silver/themed_graphics | 0 imp/themes/simplex/screen.css | 13 + imp/themes/sun/screen.css | 10 + imp/themes/tango-blue/graphics/addressbook_add.png | Bin 0 -> 277 bytes .../tango-blue/graphics/addressbook_browse.png | Bin 0 -> 758 bytes imp/themes/tango-blue/graphics/apple.png | Bin 0 -> 220 bytes imp/themes/tango-blue/graphics/attachment.png | Bin 0 -> 649 bytes imp/themes/tango-blue/graphics/audio/doorbell.wav | Bin 0 -> 5168 bytes imp/themes/tango-blue/graphics/audio/gnid3.wav | Bin 0 -> 13688 bytes imp/themes/tango-blue/graphics/audio/jetsndb.wav | Bin 0 -> 31256 bytes imp/themes/tango-blue/graphics/audio/reminder.wav | Bin 0 -> 25816 bytes imp/themes/tango-blue/graphics/audio/theetone.wav | Bin 0 -> 24776 bytes imp/themes/tango-blue/graphics/compose.png | Bin 0 -> 400 bytes imp/themes/tango-blue/graphics/empty_spam.png | Bin 0 -> 731 bytes imp/themes/tango-blue/graphics/empty_trash.png | Bin 0 -> 754 bytes imp/themes/tango-blue/graphics/encrypted.png | Bin 0 -> 809 bytes imp/themes/tango-blue/graphics/expand.png | Bin 0 -> 888 bytes imp/themes/tango-blue/graphics/favicon.ico | Bin 0 -> 2346 bytes imp/themes/tango-blue/graphics/fetchmail.png | Bin 0 -> 569 bytes imp/themes/tango-blue/graphics/filters.png | Bin 0 -> 213 bytes imp/themes/tango-blue/graphics/folders/drafts.png | Bin 0 -> 492 bytes imp/themes/tango-blue/graphics/folders/folder.png | Bin 0 -> 498 bytes .../tango-blue/graphics/folders/folder_create.png | Bin 0 -> 233 bytes .../tango-blue/graphics/folders/folder_delete.png | Bin 0 -> 234 bytes .../tango-blue/graphics/folders/folder_edit.png | Bin 0 -> 164 bytes .../tango-blue/graphics/folders/folder_open.png | Bin 0 -> 523 bytes imp/themes/tango-blue/graphics/folders/inbox.png | Bin 0 -> 652 bytes imp/themes/tango-blue/graphics/folders/sent.png | Bin 0 -> 699 bytes imp/themes/tango-blue/graphics/folders/spam.png | Bin 0 -> 770 bytes imp/themes/tango-blue/graphics/folders/trash.png | Bin 0 -> 691 bytes imp/themes/tango-blue/graphics/imp.png | Bin 0 -> 652 bytes imp/themes/tango-blue/graphics/loading.gif | Bin 0 -> 1737 bytes imp/themes/tango-blue/graphics/mail_answered.png | Bin 0 -> 583 bytes imp/themes/tango-blue/graphics/mail_clearflag.png | Bin 0 -> 474 bytes imp/themes/tango-blue/graphics/mail_deleted.png | Bin 0 -> 643 bytes imp/themes/tango-blue/graphics/mail_draft.png | Bin 0 -> 756 bytes imp/themes/tango-blue/graphics/mail_flagged.png | Bin 0 -> 676 bytes imp/themes/tango-blue/graphics/mail_forwarded.png | Bin 0 -> 358 bytes imp/themes/tango-blue/graphics/mail_personal.png | Bin 0 -> 708 bytes .../tango-blue/graphics/mail_priority_high.png | Bin 0 -> 727 bytes .../tango-blue/graphics/mail_priority_low.png | Bin 0 -> 643 bytes imp/themes/tango-blue/graphics/mail_seen.png | Bin 0 -> 340 bytes imp/themes/tango-blue/graphics/mail_unseen.png | Bin 0 -> 533 bytes .../tango-blue/graphics/manage_attachments.png | Bin 0 -> 649 bytes imp/themes/tango-blue/graphics/mime/binary.png | Bin 0 -> 560 bytes imp/themes/tango-blue/graphics/mime/compressed.png | Bin 0 -> 540 bytes imp/themes/tango-blue/graphics/mime/encryption.png | Bin 0 -> 430 bytes imp/themes/tango-blue/graphics/mime/html.png | Bin 0 -> 709 bytes imp/themes/tango-blue/graphics/mime/image.png | Bin 0 -> 558 bytes imp/themes/tango-blue/graphics/mime/itip.png | Bin 0 -> 363 bytes imp/themes/tango-blue/graphics/mime/mail.png | Bin 0 -> 550 bytes imp/themes/tango-blue/graphics/mime/pdf.png | Bin 0 -> 392 bytes imp/themes/tango-blue/graphics/mime/text.png | Bin 0 -> 333 bytes imp/themes/tango-blue/graphics/mini-error.png | Bin 0 -> 252 bytes imp/themes/tango-blue/graphics/newmail.png | Bin 0 -> 619 bytes imp/themes/tango-blue/graphics/shared.png | Bin 0 -> 616 bytes imp/themes/tango-blue/graphics/signed.png | Bin 0 -> 809 bytes imp/themes/tango-blue/graphics/spacer_red.png | Bin 0 -> 128 bytes imp/themes/tango-blue/graphics/spellcheck.png | Bin 0 -> 450 bytes imp/themes/tango-blue/screen.css | 12 + imp/themes/tango-blue/themed_graphics | 0 imp/thread.php | 180 + imp/view.php | 166 + 529 files changed, 280799 insertions(+) create mode 100644 imp/COPYING create mode 100644 imp/README create mode 100644 imp/acl.php create mode 100644 imp/attachment.php create mode 100644 imp/cache.php create mode 100644 imp/compose.php create mode 100644 imp/config/.htaccess create mode 100644 imp/config/conf.xml create mode 100644 imp/config/filter.txt.dist create mode 100644 imp/config/header.php.dist create mode 100644 imp/config/hooks.php.dist create mode 100644 imp/config/menu.php.dist create mode 100644 imp/config/mime_drivers.php.dist create mode 100644 imp/config/motd.php.dist create mode 100644 imp/config/prefs.php.dist create mode 100644 imp/config/servers.php.dist create mode 100644 imp/config/spelling.php.dist create mode 100644 imp/config/trailer.txt.dist create mode 100644 imp/contacts.php create mode 100644 imp/docs/CHANGES create mode 100644 imp/docs/CREDITS create mode 100644 imp/docs/INSTALL create mode 100644 imp/docs/RELEASE_NOTES create mode 100644 imp/docs/TODO create mode 100644 imp/docs/UPGRADING create mode 100644 imp/fetchmail.php create mode 100644 imp/fetchmailprefs.php create mode 100644 imp/filterprefs.php create mode 100644 imp/folders.php create mode 100644 imp/imple.php create mode 100644 imp/index.php create mode 100644 imp/js/KeyNavList.js create mode 100644 imp/js/SpellChecker.js create mode 100644 imp/js/acl.js create mode 100644 imp/js/autocomplete.js create mode 100644 imp/js/compose.js create mode 100644 imp/js/contacts.js create mode 100644 imp/js/fetchmailprefs.js create mode 100644 imp/js/folders.js create mode 100644 imp/js/login.js create mode 100644 imp/js/mailbox.js create mode 100644 imp/js/message.js create mode 100644 imp/js/popup.js create mode 100644 imp/js/redbox.js create mode 100644 imp/js/search.js create mode 100644 imp/js/src/KeyNavList.js create mode 100644 imp/js/src/SpellChecker.js create mode 100644 imp/js/src/acl.js create mode 100644 imp/js/src/autocomplete.js create mode 100644 imp/js/src/compose.js create mode 100644 imp/js/src/contacts.js create mode 100644 imp/js/src/fetchmailprefs.js create mode 100644 imp/js/src/folders.js create mode 100644 imp/js/src/login.js create mode 100644 imp/js/src/mailbox.js create mode 100644 imp/js/src/message.js create mode 100644 imp/js/src/popup.js create mode 100644 imp/js/src/redbox.js create mode 100644 imp/js/src/search.js create mode 100644 imp/js/src/unblockImages.js create mode 100644 imp/js/unblockImages.js create mode 100644 imp/lib/.htaccess create mode 100644 imp/lib/Auth/imp.php create mode 100644 imp/lib/Block/summary.php create mode 100644 imp/lib/Block/tree_folders.php create mode 100644 imp/lib/Compose.php create mode 100644 imp/lib/Contents.php create mode 100644 imp/lib/Crypt/PGP.php create mode 100644 imp/lib/Crypt/SMIME.php create mode 100644 imp/lib/Fetchmail.php create mode 100644 imp/lib/Fetchmail/Account.php create mode 100644 imp/lib/Fetchmail/imap.php create mode 100644 imp/lib/Filter.php create mode 100644 imp/lib/Folder.php create mode 100644 imp/lib/IMAP.php create mode 100644 imp/lib/IMAP/Thread.php create mode 100644 imp/lib/IMAP/Tree.php create mode 100644 imp/lib/IMP.php create mode 100644 imp/lib/Identity/imp.php create mode 100644 imp/lib/Imple.php create mode 100644 imp/lib/Imple/ContactAutoCompleter.php create mode 100644 imp/lib/Imple/SpellChecker.php create mode 100644 imp/lib/MIME/Viewer/alternative.php create mode 100644 imp/lib/MIME/Viewer/appledouble.php create mode 100644 imp/lib/MIME/Viewer/enriched.php create mode 100644 imp/lib/MIME/Viewer/html.php create mode 100644 imp/lib/MIME/Viewer/images.php create mode 100644 imp/lib/MIME/Viewer/itip.php create mode 100644 imp/lib/MIME/Viewer/notification.php create mode 100644 imp/lib/MIME/Viewer/partial.php create mode 100644 imp/lib/MIME/Viewer/pdf.php create mode 100644 imp/lib/MIME/Viewer/pgp.php create mode 100644 imp/lib/MIME/Viewer/pkcs7.php create mode 100644 imp/lib/MIME/Viewer/plain.php create mode 100644 imp/lib/MIME/Viewer/related.php create mode 100644 imp/lib/MIME/Viewer/rfc822.php create mode 100644 imp/lib/MIME/Viewer/smil.php create mode 100644 imp/lib/MIME/Viewer/status.php create mode 100644 imp/lib/MIME/Viewer/tnef.php create mode 100644 imp/lib/MIME/Viewer/zip.php create mode 100644 imp/lib/Mailbox.php create mode 100644 imp/lib/Maillog.php create mode 100644 imp/lib/Maintenance/Task/delete_attachments_monthly.php create mode 100644 imp/lib/Maintenance/Task/delete_sentmail_monthly.php create mode 100644 imp/lib/Maintenance/Task/fetchmail_login.php create mode 100644 imp/lib/Maintenance/Task/purge_sentmail.php create mode 100644 imp/lib/Maintenance/Task/purge_spam.php create mode 100644 imp/lib/Maintenance/Task/purge_trash.php create mode 100644 imp/lib/Maintenance/Task/rename_sentmail_monthly.php create mode 100644 imp/lib/Maintenance/Task/tos_agreement.php create mode 100644 imp/lib/Maintenance/imp.php create mode 100644 imp/lib/Message.php create mode 100644 imp/lib/Notification/Listener/status.php create mode 100644 imp/lib/Quota.php create mode 100644 imp/lib/Quota/command.php create mode 100644 imp/lib/Quota/hook.php create mode 100644 imp/lib/Quota/imap.php create mode 100644 imp/lib/Quota/logfile.php create mode 100644 imp/lib/Quota/maildir.php create mode 100644 imp/lib/Quota/mdaemon.php create mode 100644 imp/lib/Quota/mercury32.php create mode 100644 imp/lib/Quota/sql.php create mode 100644 imp/lib/Search.php create mode 100644 imp/lib/Sentmail.php create mode 100644 imp/lib/Sentmail/sql.php create mode 100644 imp/lib/Session.php create mode 100644 imp/lib/Spam.php create mode 100644 imp/lib/Template.php create mode 100644 imp/lib/UI/Compose.php create mode 100644 imp/lib/UI/Mailbox.php create mode 100644 imp/lib/UI/Message.php create mode 100644 imp/lib/api.php create mode 100644 imp/lib/base.php create mode 100644 imp/lib/prefs.php create mode 100644 imp/lib/tests/fixtures/maildirsize create mode 100644 imp/lib/tests/mime_viewer_html.phpt create mode 100644 imp/lib/tests/quota_maildir.phpt create mode 100644 imp/lib/version.php create mode 100644 imp/locale/.htaccess create mode 100644 imp/locale/ar_OM/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ar_SY/LC_MESSAGES/imp.mo create mode 100644 imp/locale/bg_BG/LC_MESSAGES/imp.mo create mode 100644 imp/locale/bs_BA/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ca_ES/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ca_ES/help.xml create mode 100644 imp/locale/cs_CZ/LC_MESSAGES/imp.mo create mode 100644 imp/locale/cs_CZ/help.xml create mode 100644 imp/locale/da_DK/LC_MESSAGES/imp.mo create mode 100644 imp/locale/da_DK/help.xml create mode 100644 imp/locale/de_DE/LC_MESSAGES/imp.mo create mode 100644 imp/locale/de_DE/help.xml create mode 100644 imp/locale/el_GR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/el_GR/help.xml create mode 100644 imp/locale/en_US/help.xml create mode 100644 imp/locale/es_ES/LC_MESSAGES/imp.mo create mode 100644 imp/locale/es_ES/help.xml create mode 100644 imp/locale/et_EE/LC_MESSAGES/imp.mo create mode 100644 imp/locale/et_EE/help.xml create mode 100644 imp/locale/eu_ES/LC_MESSAGES/imp.mo create mode 100644 imp/locale/eu_ES/help.xml create mode 100644 imp/locale/fa_IR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/fa_IR/help.xml create mode 100644 imp/locale/fi_FI/LC_MESSAGES/imp.mo create mode 100644 imp/locale/fi_FI/help.xml create mode 100644 imp/locale/fr_FR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/fr_FR/help.xml create mode 100644 imp/locale/gl_ES/LC_MESSAGES/imp.mo create mode 100644 imp/locale/he_IL/LC_MESSAGES/imp.mo create mode 100644 imp/locale/hu_HU/LC_MESSAGES/imp.mo create mode 100644 imp/locale/hu_HU/help.xml create mode 100644 imp/locale/id_ID/LC_MESSAGES/imp.mo create mode 100644 imp/locale/is_IS/LC_MESSAGES/imp.mo create mode 100644 imp/locale/it_IT/LC_MESSAGES/imp.mo create mode 100644 imp/locale/it_IT/help.xml create mode 100644 imp/locale/ja_JP/LC_MESSAGES/imp.mo create mode 100644 imp/locale/km_KH/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ko_KR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ko_KR/help.xml create mode 100644 imp/locale/lt_LT/LC_MESSAGES/imp.mo create mode 100644 imp/locale/lv_LV/LC_MESSAGES/imp.mo create mode 100644 imp/locale/mk_MK/LC_MESSAGES/imp.mo create mode 100644 imp/locale/nb_NO/LC_MESSAGES/imp.mo create mode 100644 imp/locale/nb_NO/help.xml create mode 100644 imp/locale/nl_NL/LC_MESSAGES/imp.mo create mode 100644 imp/locale/nl_NL/help.xml create mode 100644 imp/locale/nn_NO/LC_MESSAGES/imp.mo create mode 100644 imp/locale/pl_PL/LC_MESSAGES/imp.mo create mode 100644 imp/locale/pl_PL/help.xml create mode 100644 imp/locale/pt_BR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/pt_BR/help.xml create mode 100644 imp/locale/pt_PT/LC_MESSAGES/imp.mo create mode 100644 imp/locale/pt_PT/help.xml create mode 100644 imp/locale/ro_RO/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ru_RU/LC_MESSAGES/imp.mo create mode 100644 imp/locale/ru_RU/help.xml create mode 100644 imp/locale/sk_SK/LC_MESSAGES/imp.mo create mode 100644 imp/locale/sk_SK/help.xml create mode 100644 imp/locale/sl_SI/LC_MESSAGES/imp.mo create mode 100644 imp/locale/sv_SE/LC_MESSAGES/imp.mo create mode 100644 imp/locale/sv_SE/help.xml create mode 100644 imp/locale/th_TH/LC_MESSAGES/imp.mo create mode 100644 imp/locale/tr_TR/LC_MESSAGES/imp.mo create mode 100644 imp/locale/tr_TR/help.xml create mode 100644 imp/locale/uk_UA/LC_MESSAGES/imp.mo create mode 100644 imp/locale/uk_UA/help.xml create mode 100644 imp/locale/zh_CN/LC_MESSAGES/imp.mo create mode 100644 imp/locale/zh_CN/help.xml create mode 100644 imp/locale/zh_TW/LC_MESSAGES/imp.mo create mode 100644 imp/locale/zh_TW/help.xml create mode 100644 imp/login.php create mode 100644 imp/mailbox.php create mode 100644 imp/message.php create mode 100644 imp/pgp.php create mode 100644 imp/po/.htaccess create mode 100644 imp/po/README create mode 100644 imp/po/ar_OM.po create mode 100644 imp/po/ar_SY.po create mode 100644 imp/po/bg_BG.po create mode 100644 imp/po/bs_BA.po create mode 100644 imp/po/ca_ES.po create mode 100644 imp/po/cs_CZ.po create mode 100644 imp/po/da_DK.po create mode 100644 imp/po/de_DE.po create mode 100644 imp/po/el_GR.po create mode 100644 imp/po/es_ES.po create mode 100644 imp/po/et_EE.po create mode 100644 imp/po/eu_ES.po create mode 100644 imp/po/fa_IR.po create mode 100644 imp/po/fi_FI.po create mode 100644 imp/po/fr_FR.po create mode 100644 imp/po/gl_ES.po create mode 100644 imp/po/he_IL.po create mode 100644 imp/po/hu_HU.po create mode 100644 imp/po/id_ID.po create mode 100644 imp/po/imp.pot create mode 100644 imp/po/is_IS.po create mode 100644 imp/po/it_IT.po create mode 100644 imp/po/ja_JP.po create mode 100644 imp/po/km_KH.po create mode 100644 imp/po/ko_KR.po create mode 100644 imp/po/lt_LT.po create mode 100644 imp/po/lv_LV.po create mode 100644 imp/po/mk_MK.po create mode 100644 imp/po/nb_NO.po create mode 100644 imp/po/nl_NL.po create mode 100644 imp/po/nn_NO.po create mode 100644 imp/po/pl_PL.po create mode 100644 imp/po/pt_BR.po create mode 100644 imp/po/pt_PT.po create mode 100644 imp/po/ro_RO.po create mode 100644 imp/po/ru_RU.po create mode 100644 imp/po/sk_SK.po create mode 100644 imp/po/sl_SI.po create mode 100644 imp/po/sv_SE.po create mode 100644 imp/po/th_TH.po create mode 100644 imp/po/tr_TR.po create mode 100644 imp/po/uk_UA.po create mode 100644 imp/po/zh_CN.po create mode 100644 imp/po/zh_TW.po create mode 100644 imp/redirect.php create mode 100644 imp/rss.php create mode 100644 imp/saveimage.php create mode 100644 imp/scripts/.htaccess create mode 100644 imp/scripts/Imp.reg create mode 100755 imp/scripts/bounce_spam.php create mode 100644 imp/scripts/custom_login.php create mode 100644 imp/scripts/sql/imp.sql create mode 100644 imp/scripts/sql/imp.xml create mode 100755 imp/scripts/upgrades/convert_vfolders.php create mode 100644 imp/search.php create mode 100644 imp/smime.php create mode 100644 imp/stationery.php create mode 100644 imp/templates/.htaccess create mode 100644 imp/templates/acl/acl.html create mode 100644 imp/templates/common-header.inc create mode 100644 imp/templates/compose/compose.html create mode 100644 imp/templates/compose/redirect.html create mode 100644 imp/templates/compose/success.html create mode 100644 imp/templates/contacts/contacts.html create mode 100644 imp/templates/fetchmail/fetchmail.html create mode 100644 imp/templates/fetchmail/fetchmailprefs.html create mode 100644 imp/templates/filters/prefs.html create mode 100644 imp/templates/folders/actions.html create mode 100644 imp/templates/folders/folders.html create mode 100644 imp/templates/folders/folders_confirm.html create mode 100644 imp/templates/folders/folders_size.html create mode 100644 imp/templates/folders/head.html create mode 100644 imp/templates/folders/import.html create mode 100644 imp/templates/javascript_defs.php create mode 100644 imp/templates/login/login.html create mode 100644 imp/templates/login/mobile.inc create mode 100644 imp/templates/mailbox/actions.html create mode 100644 imp/templates/mailbox/actions_deleted.html create mode 100644 imp/templates/mailbox/empty_mailbox.html create mode 100644 imp/templates/mailbox/header.html create mode 100644 imp/templates/mailbox/mailbox.html create mode 100644 imp/templates/mailbox/message_footers.html create mode 100644 imp/templates/mailbox/message_headers.html create mode 100644 imp/templates/mailbox/navbar.html create mode 100644 imp/templates/mailbox/searchfolder.html create mode 100644 imp/templates/menu.html create mode 100644 imp/templates/message/message.html create mode 100644 imp/templates/message/navbar_actions.html create mode 100644 imp/templates/message/navbar_navigate.html create mode 100644 imp/templates/message/navbar_top.html create mode 100644 imp/templates/newmsg/alert.html create mode 100644 imp/templates/pgp/import_key.html create mode 100644 imp/templates/pgp/passphrase.html create mode 100644 imp/templates/pgp/pgp.html create mode 100644 imp/templates/prefs/encryptselect.inc create mode 100644 imp/templates/prefs/folderselect.inc create mode 100644 imp/templates/prefs/initialpageselect.inc create mode 100644 imp/templates/prefs/sentmailselect.inc create mode 100644 imp/templates/prefs/soundselect.inc create mode 100644 imp/templates/prefs/sourceselect.inc create mode 100644 imp/templates/prefs/spamselect.inc create mode 100644 imp/templates/prefs/trashselect.inc create mode 100644 imp/templates/quota/quota.html create mode 100644 imp/templates/rss/mailbox.rss create mode 100644 imp/templates/saveimage/saveimage.html create mode 100644 imp/templates/search/search.html create mode 100644 imp/templates/smime/import_key.html create mode 100644 imp/templates/smime/passphrase.html create mode 100644 imp/templates/smime/smime.html create mode 100644 imp/templates/stationery/stationery.html create mode 100644 imp/templates/thread/thread.html create mode 100644 imp/test.php create mode 100644 imp/themes/azur/screen.css create mode 100644 imp/themes/bluemoon/screen.css create mode 100644 imp/themes/bluewhite/screen.css create mode 100644 imp/themes/brown/screen.css create mode 100644 imp/themes/burntorange/screen.css create mode 100644 imp/themes/cherry/screen.css create mode 100644 imp/themes/cornflower/screen.css create mode 100644 imp/themes/fadetogreen/screen.css create mode 100644 imp/themes/feed-rss.xsl create mode 100644 imp/themes/gennevilliers/screen.css create mode 100644 imp/themes/graphics/addressbook_add.png create mode 100644 imp/themes/graphics/addressbook_browse.png create mode 100644 imp/themes/graphics/apple.png create mode 100644 imp/themes/graphics/attachment.png create mode 100644 imp/themes/graphics/audio/doorbell.wav create mode 100644 imp/themes/graphics/audio/gnid3.wav create mode 100644 imp/themes/graphics/audio/jetsndb.wav create mode 100644 imp/themes/graphics/audio/reminder.wav create mode 100644 imp/themes/graphics/audio/theetone.wav create mode 100644 imp/themes/graphics/compose.png create mode 100644 imp/themes/graphics/empty_spam.png create mode 100644 imp/themes/graphics/empty_trash.png create mode 100644 imp/themes/graphics/encrypted.png create mode 100644 imp/themes/graphics/expand.png create mode 100644 imp/themes/graphics/favicon.ico create mode 100644 imp/themes/graphics/fetchmail.png create mode 100644 imp/themes/graphics/filters.png create mode 100644 imp/themes/graphics/folders/drafts.png create mode 100644 imp/themes/graphics/folders/folder.png create mode 100644 imp/themes/graphics/folders/folder_create.png create mode 100644 imp/themes/graphics/folders/folder_delete.png create mode 100644 imp/themes/graphics/folders/folder_edit.png create mode 100644 imp/themes/graphics/folders/folder_open.png create mode 100644 imp/themes/graphics/folders/inbox.png create mode 100644 imp/themes/graphics/folders/sent.png create mode 100644 imp/themes/graphics/folders/spam.png create mode 100644 imp/themes/graphics/folders/trash.png create mode 100644 imp/themes/graphics/imp.png create mode 100644 imp/themes/graphics/loading.gif create mode 100644 imp/themes/graphics/mail_answered.png create mode 100644 imp/themes/graphics/mail_clearflag.png create mode 100644 imp/themes/graphics/mail_deleted.png create mode 100644 imp/themes/graphics/mail_draft.png create mode 100644 imp/themes/graphics/mail_flagged.png create mode 100644 imp/themes/graphics/mail_forwarded.png create mode 100644 imp/themes/graphics/mail_personal.png create mode 100644 imp/themes/graphics/mail_priority_high.png create mode 100644 imp/themes/graphics/mail_priority_low.png create mode 100644 imp/themes/graphics/mail_seen.png create mode 100644 imp/themes/graphics/mail_unseen.png create mode 100644 imp/themes/graphics/manage_attachments.png create mode 100644 imp/themes/graphics/mime/binary.png create mode 100644 imp/themes/graphics/mime/compressed.png create mode 100644 imp/themes/graphics/mime/encryption.png create mode 100644 imp/themes/graphics/mime/html.png create mode 100644 imp/themes/graphics/mime/image.png create mode 100644 imp/themes/graphics/mime/itip.png create mode 100644 imp/themes/graphics/mime/mail.png create mode 100644 imp/themes/graphics/mime/pdf.png create mode 100644 imp/themes/graphics/mime/text.png create mode 100644 imp/themes/graphics/mini-error.png create mode 100644 imp/themes/graphics/newmail.png create mode 100644 imp/themes/graphics/popdown.png create mode 100644 imp/themes/graphics/redbox_spinner.gif create mode 100644 imp/themes/graphics/shared.png create mode 100644 imp/themes/graphics/signed.png create mode 100644 imp/themes/graphics/spacer_red.png create mode 100644 imp/themes/graphics/spellcheck.png create mode 100644 imp/themes/green/screen.css create mode 100644 imp/themes/grey/screen.css create mode 100644 imp/themes/ideas/screen.css create mode 100644 imp/themes/ie6_or_less.css create mode 100644 imp/themes/ie7.css create mode 100644 imp/themes/lavander/screen.css create mode 100644 imp/themes/luc/screen.css create mode 100644 imp/themes/lucblue/screen.css create mode 100644 imp/themes/mozilla/screen.css create mode 100644 imp/themes/postnuke/screen.css create mode 100644 imp/themes/rtl.css create mode 100644 imp/themes/screen.css create mode 100644 imp/themes/silver/graphics/addressbook_add.png create mode 100644 imp/themes/silver/graphics/addressbook_browse.png create mode 100644 imp/themes/silver/graphics/apple.png create mode 100644 imp/themes/silver/graphics/attachment.png create mode 100644 imp/themes/silver/graphics/audio/doorbell.wav create mode 100644 imp/themes/silver/graphics/audio/gnid3.wav create mode 100644 imp/themes/silver/graphics/audio/jetsndb.wav create mode 100644 imp/themes/silver/graphics/audio/reminder.wav create mode 100644 imp/themes/silver/graphics/audio/theetone.wav create mode 100644 imp/themes/silver/graphics/compose.png create mode 100644 imp/themes/silver/graphics/empty_spam.png create mode 100644 imp/themes/silver/graphics/empty_trash.png create mode 100644 imp/themes/silver/graphics/encrypted.png create mode 100644 imp/themes/silver/graphics/expand.png create mode 100644 imp/themes/silver/graphics/favicon.ico create mode 100644 imp/themes/silver/graphics/fetchmail.png create mode 100644 imp/themes/silver/graphics/filters.png create mode 100644 imp/themes/silver/graphics/folders/drafts.png create mode 100644 imp/themes/silver/graphics/folders/folder.png create mode 100644 imp/themes/silver/graphics/folders/folder_create.png create mode 100644 imp/themes/silver/graphics/folders/folder_delete.png create mode 100644 imp/themes/silver/graphics/folders/folder_edit.png create mode 100644 imp/themes/silver/graphics/folders/folder_open.png create mode 100644 imp/themes/silver/graphics/folders/inbox.png create mode 100644 imp/themes/silver/graphics/folders/sent.png create mode 100644 imp/themes/silver/graphics/folders/spam.png create mode 100644 imp/themes/silver/graphics/folders/trash.png create mode 100644 imp/themes/silver/graphics/imp.png create mode 100644 imp/themes/silver/graphics/loading.gif create mode 100644 imp/themes/silver/graphics/mail_answered.png create mode 100644 imp/themes/silver/graphics/mail_clearflag.png create mode 100644 imp/themes/silver/graphics/mail_deleted.png create mode 100644 imp/themes/silver/graphics/mail_draft.png create mode 100644 imp/themes/silver/graphics/mail_flagged.png create mode 100644 imp/themes/silver/graphics/mail_forwarded.png create mode 100644 imp/themes/silver/graphics/mail_personal.png create mode 100644 imp/themes/silver/graphics/mail_priority_high.png create mode 100644 imp/themes/silver/graphics/mail_priority_low.png create mode 100644 imp/themes/silver/graphics/mail_seen.png create mode 100644 imp/themes/silver/graphics/mail_unseen.png create mode 100644 imp/themes/silver/graphics/manage_attachments.png create mode 100644 imp/themes/silver/graphics/mime/binary.png create mode 100644 imp/themes/silver/graphics/mime/compressed.png create mode 100644 imp/themes/silver/graphics/mime/encryption.png create mode 100644 imp/themes/silver/graphics/mime/html.png create mode 100644 imp/themes/silver/graphics/mime/image.png create mode 100644 imp/themes/silver/graphics/mime/itip.png create mode 100644 imp/themes/silver/graphics/mime/mail.png create mode 100644 imp/themes/silver/graphics/mime/pdf.png create mode 100644 imp/themes/silver/graphics/mime/text.png create mode 100644 imp/themes/silver/graphics/mini-error.png create mode 100644 imp/themes/silver/graphics/newmail.png create mode 100644 imp/themes/silver/graphics/popdown.png create mode 100644 imp/themes/silver/graphics/redbox_spinner.gif create mode 100644 imp/themes/silver/graphics/shared.png create mode 100644 imp/themes/silver/graphics/signed.png create mode 100644 imp/themes/silver/graphics/spacer_red.png create mode 100644 imp/themes/silver/graphics/spellcheck.png create mode 100644 imp/themes/silver/screen.css create mode 100644 imp/themes/silver/themed_graphics create mode 100644 imp/themes/simplex/screen.css create mode 100644 imp/themes/sun/screen.css create mode 100644 imp/themes/tango-blue/graphics/addressbook_add.png create mode 100644 imp/themes/tango-blue/graphics/addressbook_browse.png create mode 100644 imp/themes/tango-blue/graphics/apple.png create mode 100644 imp/themes/tango-blue/graphics/attachment.png create mode 100644 imp/themes/tango-blue/graphics/audio/doorbell.wav create mode 100644 imp/themes/tango-blue/graphics/audio/gnid3.wav create mode 100644 imp/themes/tango-blue/graphics/audio/jetsndb.wav create mode 100644 imp/themes/tango-blue/graphics/audio/reminder.wav create mode 100644 imp/themes/tango-blue/graphics/audio/theetone.wav create mode 100644 imp/themes/tango-blue/graphics/compose.png create mode 100644 imp/themes/tango-blue/graphics/empty_spam.png create mode 100644 imp/themes/tango-blue/graphics/empty_trash.png create mode 100644 imp/themes/tango-blue/graphics/encrypted.png create mode 100644 imp/themes/tango-blue/graphics/expand.png create mode 100644 imp/themes/tango-blue/graphics/favicon.ico create mode 100644 imp/themes/tango-blue/graphics/fetchmail.png create mode 100644 imp/themes/tango-blue/graphics/filters.png create mode 100644 imp/themes/tango-blue/graphics/folders/drafts.png create mode 100644 imp/themes/tango-blue/graphics/folders/folder.png create mode 100644 imp/themes/tango-blue/graphics/folders/folder_create.png create mode 100644 imp/themes/tango-blue/graphics/folders/folder_delete.png create mode 100644 imp/themes/tango-blue/graphics/folders/folder_edit.png create mode 100644 imp/themes/tango-blue/graphics/folders/folder_open.png create mode 100644 imp/themes/tango-blue/graphics/folders/inbox.png create mode 100644 imp/themes/tango-blue/graphics/folders/sent.png create mode 100644 imp/themes/tango-blue/graphics/folders/spam.png create mode 100644 imp/themes/tango-blue/graphics/folders/trash.png create mode 100644 imp/themes/tango-blue/graphics/imp.png create mode 100644 imp/themes/tango-blue/graphics/loading.gif create mode 100644 imp/themes/tango-blue/graphics/mail_answered.png create mode 100644 imp/themes/tango-blue/graphics/mail_clearflag.png create mode 100644 imp/themes/tango-blue/graphics/mail_deleted.png create mode 100644 imp/themes/tango-blue/graphics/mail_draft.png create mode 100644 imp/themes/tango-blue/graphics/mail_flagged.png create mode 100644 imp/themes/tango-blue/graphics/mail_forwarded.png create mode 100644 imp/themes/tango-blue/graphics/mail_personal.png create mode 100644 imp/themes/tango-blue/graphics/mail_priority_high.png create mode 100644 imp/themes/tango-blue/graphics/mail_priority_low.png create mode 100644 imp/themes/tango-blue/graphics/mail_seen.png create mode 100644 imp/themes/tango-blue/graphics/mail_unseen.png create mode 100644 imp/themes/tango-blue/graphics/manage_attachments.png create mode 100644 imp/themes/tango-blue/graphics/mime/binary.png create mode 100644 imp/themes/tango-blue/graphics/mime/compressed.png create mode 100644 imp/themes/tango-blue/graphics/mime/encryption.png create mode 100644 imp/themes/tango-blue/graphics/mime/html.png create mode 100644 imp/themes/tango-blue/graphics/mime/image.png create mode 100644 imp/themes/tango-blue/graphics/mime/itip.png create mode 100644 imp/themes/tango-blue/graphics/mime/mail.png create mode 100644 imp/themes/tango-blue/graphics/mime/pdf.png create mode 100644 imp/themes/tango-blue/graphics/mime/text.png create mode 100644 imp/themes/tango-blue/graphics/mini-error.png create mode 100644 imp/themes/tango-blue/graphics/newmail.png create mode 100644 imp/themes/tango-blue/graphics/shared.png create mode 100644 imp/themes/tango-blue/graphics/signed.png create mode 100644 imp/themes/tango-blue/graphics/spacer_red.png create mode 100644 imp/themes/tango-blue/graphics/spellcheck.png create mode 100644 imp/themes/tango-blue/screen.css create mode 100644 imp/themes/tango-blue/themed_graphics create mode 100644 imp/thread.php create mode 100644 imp/view.php diff --git a/imp/COPYING b/imp/COPYING new file mode 100644 index 000000000..5a965fbc5 --- /dev/null +++ b/imp/COPYING @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/imp/README b/imp/README new file mode 100644 index 000000000..844973a47 --- /dev/null +++ b/imp/README @@ -0,0 +1,93 @@ +What is IMP? +============ + +:Last update: $Date: 2007/04/18 17:20:33 $ +:Revision: $Revision: 2.23 $ +:Contact: imp@lists.horde.org + +.. contents:: Contents +.. section-numbering:: + +IMP is the Internet Messaging Program, a PHP-based webmail system and a +component of the Horde project. IMP, once installed, accesses mail over IMAP +thus requiring little to no special preparations on the server on which mail +is stored. + +IMP offers most of the features users have come to expect from their +conventional mail programs, including attachments, spell-check, address books, +multiple folders, and multiple-language support. + +This software is OSI Certified Open Source Software. OSI Certified is a +certification mark of the `Open Source Initiative`_. + +.. _`Open Source Initiative`: http://www.opensource.org/ + + +Obtaining IMP +------------- + +Further information on IMP and the latest version can be obtained at: + + http://www.horde.org/imp/ + + +Documentation +------------- + +The following documentation is available in the IMP distribution: + +:README_: This file +:COPYING_: Copyright and license information +:`docs/CHANGES`_: Changes by release +:`docs/CREDITS`_: Project developers +:`docs/INSTALL`_: Installation instructions and notes +:`docs/TODO`_: Development TODO list +:`docs/UPGRADING`_: Pointers on upgrading from previous IMP versions + + +Installation +------------ + +Instructions for installing IMP can be found in the file INSTALL_ in the +``docs/`` directory of the IMP distribution. + + +Assistance +---------- + +If you encounter problems with IMP, help is available! + +The Horde Frequently Asked Questions List (FAQ), available on the Web at + + http://www.horde.org/faq/ + +The Horde Project runs a number of mailing lists, for individual applications +and for issues relating to the project as a whole. Information, archives, and +subscription information can be found at + + http://www.horde.org/mail/ + +Lastly, Horde developers, contributors and users also make occasional +appearances on IRC, on the channel #horde on the freenode Network +(irc.freenode.net). + + +Licensing +--------- + +For licensing and copyright information, please see the file COPYING_ in the +IMP distribution. + +Thanks, + +The IMP team + + +.. _README: ?f=README.html +.. _COPYING: http://www.horde.org/licenses/gpl.php +.. _docs/CHANGES: ?f=CHANGES.html +.. _docs/CREDITS: ?f=CREDITS.html +.. _INSTALL: +.. _docs/INSTALL: ?f=INSTALL.html +.. _docs/TODO: ?f=TODO.html +.. _docs/UPGRADING: ?f=UPGRADING.html diff --git a/imp/acl.php b/imp/acl.php new file mode 100644 index 000000000..7ed49ccfe --- /dev/null +++ b/imp/acl.php @@ -0,0 +1,230 @@ + + * @author Eric Garrido + */ + +@define('IMP_BASE', dirname(__FILE__)); +require_once IMP_BASE . '/lib/base.php'; +require_once 'Horde/IMAP/ACL.php'; + +$prefs_url = IMP::prefsURL(true); + +/* Redirect back to the options screen if ACL is not enabled. */ +if ($prefs->isLocked('acl') || + !(isset($_SESSION['imp']['acl']) && is_array($_SESSION['imp']['acl']))) { + $notification->push(_("Folder sharing is not enabled."), 'horde.error'); + header('Location: ' . $prefs_url); + exit; +} + +$params = array( + 'hostspec' => $_SESSION['imp']['server'], + 'password' => Secret::read(IMP::getAuthKey(), $_SESSION['imp']['pass']), + 'port' => $_SESSION['imp']['port'], + 'protocol' => $_SESSION['imp']['protocol'], + 'username' => $_SESSION['imp']['user'], +); + +if (isset($_SESSION['imp']['acl']['params'])) { + $params = array_merge($params, $_SESSION['imp']['acl']['params']); +} + +$ACLDriver = &IMAP_ACL::singleton($_SESSION['imp']['acl']['driver'], $params); + +/* Check selected driver is supported. Redirect to options screen with + * error message if not. */ +$error = (!$ACLDriver->isSupported()) + ? _("This server does not support sharing folders.") + : $ACLDriver->getError(); + +if ($error) { + $notification->push($error, 'horde.error'); + header('Location: ' . $prefs_url); + exit; +} + +$acls = Util::getFormData('acl'); +$folder = Util::getFormData('folder'); +$new_user = Util::getFormData('new_user'); +if ($new_user) { + $new_acl = Util::getFormData('new_acl'); + /* check to see if $new_user already has an acl on the folder */ + if (isset($acls[$new_user])) { + $acls[$new_user] = $new_acl; + $new_user = ''; + } +} + +$protected = $ACLDriver->getProtected(); + +/* Run through the action handlers. */ +$actionID = Util::getFormData('actionID'); +$ok_form = true; +switch ($actionID) { +case 'imp_acl_set': + if (!$folder) { + $notification->push(_("No folder selected."), 'horde.error'); + $ok_form = false; + } + + if ($new_user) { + /* Each ACL is submitted with the acl as the value. Reverse the hash + mapping for createACL(). */ + $new_acl = array_flip($new_acl); + $result = $ACLDriver->createACL($folder, $new_user, $new_acl); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result); + } elseif (!count($new_acl)) { + $notification->push(sprintf(_("All rights on folder \"%s\" successfully removed for user \"%s\"."), $folder, $new_user), 'horde.success'); + } else { + $notification->push(sprintf(_("User \"%s\" successfully given the specified rights for the folder \"%s\"."), $new_user, $folder), 'horde.success'); + } + } + + if ($ok_form) { + $current_acl = $ACLDriver->getACL($folder); + foreach ($acls as $user => $acl) { + if ($acl) { + $acl = array_flip($acl); + /* We had to have an empty value submitted to make sure all + users with acls were sent back, so we can remove those + without checkmarks. */ + unset($acl['']); + } else { + $acl = array(); + } + + if (!$user) { + $notification->push(_("No user specified."), 'horde.error'); + continue; + } + + if (in_array($user, $protected)) { + if ($acl) { + $notification->push(sprintf(_("Rights for user \"%s\" cannot be modified."), $user), 'horde.error'); + } + continue; + } + + /* Check to see if ACL didn't change */ + if ((isset($current_acl[$user])) && + (array_keys($current_acl[$user]) == array_keys($acl))) { + continue; + } + + $result = $ACLDriver->editACL($folder, $user, $acl); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result); + } elseif (!count($acl)) { + $notification->push(sprintf(_("All rights on folder \"%s\" successfully removed for user \"%s\"."), $folder, $user), 'horde.success'); + } else { + $notification->push(sprintf(_("User \"%s\" successfully given the specified rights for the folder \"%s\"."), $user, $folder), 'horde.success'); + } + } + } + break; +} + +$imp_folder = &IMP_Folder::singleton(); +$rights = $ACLDriver->getRights(); +$rightsTitles = $ACLDriver->getRightsTitles(); + +if (empty($folder)) { + $folder = 'INBOX'; +} + +$curr_acl = $ACLDriver->getACL($folder); +$canEdit = $ACLDriver->canEdit($folder, $_SESSION['imp']['user']); + +if (is_a($curr_acl, 'PEAR_Error')) { + $notification->push($curr_acl, 'horde_error'); + $curr_acl = array(); +} + +require_once 'Horde/Prefs/UI.php'; +$result = Horde::loadConfiguration('prefs.php', array('prefGroups', '_prefs'), 'imp'); +if (!is_a($result, 'PEAR_Error')) { + // @todo Don't use extract + extract($result); +} +$app = 'imp'; +$chunk = Util::nonInputVar('chunk'); +Prefs_UI::generateHeader(null, $chunk); + +/* Set up template. */ +$t = new IMP_Template(); +$t->setOption('gettext', true); +$t->set('aclurl', Horde::applicationUrl('acl.php')); +$t->set('forminput', Util::formInput()); +$t->set('aclnavcell', Util::bufferOutput(array('Prefs_UI', 'generateNavigationCell'), 'acl')); +$t->set('changefolder', Horde::link('#', _("Change Folder"), 'smallheader', '', 'ACLFolderChange(true); return false;')); +$t->set('sharedimg', Horde::img('shared.png', _("Change Folder"))); +$t->set('options', IMP::flistSelect(array('selected' => $folder)); +$t->set('current', sprintf(_("Current access to %s"), IMP::displayFolder($folder))); +$t->set('folder', $folder); +$t->set('noacl', !count($curr_acl)); +$t->set('maxrule', 1); +if (!$t->get('noacl')) { + $i = 0; + $cval = array(); + foreach ($curr_acl as $index => $rule) { + $entry = array( + 'i' => ++$i, + 'num_val' => ($i - 1), + 'disabled' => in_array($index, $protected) || !$canEdit, + 'index' => $index + ); + /* Create table of each ACL option for each user granted permissions, + * enabled indicates the right has been given to the user */ + foreach (array_keys($rights) as $val) { + $entry['rule'][] = array('val' => $val, 'enabled'=> isset($rule{$val})); + } + $cval[] = $entry; + } + $t->set('curr_acl', $cval); + $t->set('maxval', count($curr_acl)); + /* number of individual ACL options, for table rendering */ + $t->set('maxrule', count($rights)); +} +$t->set('canedit', $canEdit); +if (empty($_SESSION['imp']['admin'])) { + $new_user_field = ''; +} else { + require_once IMP_BASE . '/lib/api.php'; + $current_users = array_keys($curr_acl); + $new_user_field = '"; +} +$t->set('new_user', $new_user_field); +$rightsTitlesval = array(); +foreach ($rightsTitles as $right => $desc) { + $rightsval[] = array( + 'right' => $right, + 'desc' => $desc + ); +} +$t->set('rights', $rightsval); +$t->set('width', round(100 / (count($rightsval) + 1)) . '%'); +$t->set('prefsurl', $prefs_url); + +Horde::addScriptFile('prototype.js', 'horde', true); +Horde::addScriptFile('acl.js', 'imp', true); +echo $t->fetch(IMP_TEMPLATES . '/acl/acl.html'); +if (!$chunk) { + require $registry->get('templates', 'horde') . '/common-footer.inc'; +} diff --git a/imp/attachment.php b/imp/attachment.php new file mode 100644 index 000000000..862c83278 --- /dev/null +++ b/imp/attachment.php @@ -0,0 +1,139 @@ + + * + * See the enclosed file COPYING for license information (GPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. + * + * This file should be the basis for serving hosted attachments. It + * should fetch the file from the VFS and funnel it to the client + * wishing to download the attachment. This will allow for the + * exchange of massive attachments without causing mail server havoc. + */ + +// Set up initial includes. +// This does *not* include IMP's base.php because we do not need to be +// authenticated to get the file. Most users won't send linked +// attachments just to other IMP users. +if (!defined('HORDE_BASE')) { + @define('HORDE_BASE', dirname(__FILE__) . '/..'); +} +@define('IMP_BASE', dirname(__FILE__)); +require_once HORDE_BASE . '/lib/core.php'; +require_once 'VFS.php'; +$registry = &Registry::singleton(); +$registry->importConfig('imp'); + +$_self_url = Horde::selfUrl(false, true, true); + +// Lets see if we are even able to send the user an attachment. +if (!$conf['compose']['link_attachments']) { + Horde::fatal(_("Linked attachments are forbidden."), $_self_url, __LINE__); +} + +// Gather required form variables. +$mail_user = Util::getFormData('u'); +$time_stamp = Util::getFormData('t'); +$file_name = Util::getFormData('f'); +if (!isset($mail_user) || !isset($time_stamp) || !isset($file_name) || + $mail_user == '' || $time_stamp == '' || $file_name == '') { + Horde::fatal(_("The attachment was not found."), + $_self_url, __LINE__); +} + +// Initialize the VFS. +$vfsroot = &VFS::singleton($conf['vfs']['type'], Horde::getDriverConfig('vfs', $conf['vfs']['type'])); +if (is_a($vfsroot, 'PEAR_Error')) { + Horde::fatal(sprintf(_("Could not create the VFS backend: %s"), $vfsroot->getMessage()), $_self_url, __LINE__); +} + +// Check if the file exists. +$mail_user = basename($mail_user); +$time_stamp = basename($time_stamp); +$file_name = escapeshellcmd(basename($file_name)); +$full_path = sprintf(IMP_Compose::VFS_LINK_ATTACH_PATH . '/%s/%d', $mail_user, $time_stamp); +if (!$vfsroot->exists($full_path, $file_name)) { + Horde::fatal(_("The specified attachment does not exist. It may have been deleted by the original sender."), $_self_url, __LINE__); +} + +// Check to see if we need to send a verification message. +if ($conf['compose']['link_attachments_notify']) { + if ($vfsroot->exists($full_path, $file_name . '.notify')) { + $delete_id = Util::getFormData('d'); + $read_id = $vfsroot->read($full_path, $file_name . '.notify'); + if (is_a($read_id, 'PEAR_Error')) { + Horde::logMessage($read_id, __FILE__, __LINE__, PEAR_LOG_ERR); + } elseif ($delete_id == $read_id) { + $vfsroot->deleteFile($full_path, $file_name); + $vfsroot->deleteFile($full_path, $file_name . '.notify'); + printf(_("Attachment %s deleted."), $file_name); + exit; + } + } else { + /* Create a random identifier for this file. */ + $id = base_convert($file_name . microtime(), 10, 36); + $res = $vfsroot->writeData($full_path, $file_name . '.notify' , $id, true); + if (is_a($res, 'PEAR_Error')) { + Horde::logMessage($res, __FILE__, __LINE__, PEAR_LOG_ERR); + } else { + /* Load $mail_user's preferences so that we can use their + * locale information for the notification message. */ + include_once 'Horde/Prefs.php'; + $prefs = &Prefs::singleton($conf['prefs']['driver'], + 'horde', $mail_user); + $prefs->retrieve(); + include_once 'Horde/Identity.php'; + $mail_identity = &Identity::singleton('none', $mail_user); + $mail_address = $mail_identity->getDefaultFromAddress(); + /* Ignore missing addresses, which are returned as <>. */ + if (strlen($mail_address) > 2) { + $mail_address_full = $mail_identity->getDefaultFromAddress(true); + NLS::setTimeZone(); + NLS::setLanguageEnvironment(); + NLS::setTextdomain('imp', IMP_BASE . '/locale', NLS::getCharset()); + String::setDefaultCharset(NLS::getCharset()); + + /* Set up the mail headers and read the log file. */ + $msg_headers = new Horde_MIME_Headers(); + $msg_headers->addReceivedHeader(); + $msg_headers->addMessageIdHeader(); + $msg_headers->addUserAgentHeader(); + $msg_headers->addHeader('Date', date('r')); + $msg_headers->addHeader('From', $mail_address_full); + $msg_headers->addHeader('To', $mail_address_full); + $msg_headers->addHeader('Subject', _("Notification: Linked attachment downloaded")); + + $msg = new Horde_MIME_Message(); + $msg->setType('text/plain'); + $msg->setCharset(NLS::getCharset()); + $msg->setContents(String::wrap(sprintf(_("Your linked attachment has been downloaded by at least one user.\n\nAttachment name: %s\nAttachment date: %s\n\nClick on the following link to permanently delete the attachment:\n%s"), $file_name, date('r', $time_stamp), Util::addParameter(Horde::selfUrl(true, false, true), 'd', $id)))); + + $msg->send($mail_address, $msg_headers); + } + } + } +} + +// Find the file's mime-type. +$file_data = $vfsroot->read($full_path, $file_name); +if (is_a($file_data, 'PEAR_Error')) { + Horde::logMessage($file_data, __FILE__, __LINE__, PEAR_LOG_ERR); + Horde::fatal(_("The specified file cannot be read."), $_self_url, __LINE__); +} +$mime_type = Horde_MIME_Magic::analyzeData($file_data, isset($conf['mime']['magic_db']) ? $conf['mime']['magic_db'] : null); +if ($mime_type === false) { + $mime_type = Horde_MIME_Magic::filenameToMIME($file_name, false); +} + +// Prevent 'jar:' attacks on Firefox. See Ticket #5892. +if ($browser->isBrowser('mozilla')) { + if (in_array(String::lower($mime_type), array('application/java-archive', 'application/x-jar'))) { + $mime_type = 'application/octet-stream'; + } +} + +// Send the client the file. +$browser->downloadHeaders($file_name, $mime_type, false, strlen($file_data)); +echo $file_data; diff --git a/imp/cache.php b/imp/cache.php new file mode 100644 index 000000000..6f93dae11 --- /dev/null +++ b/imp/cache.php @@ -0,0 +1,90 @@ + + */ + +/* The amount of time (in minutes) to cache the generated CSS and JS files. + * DEFAULT: 525600 = 1 year */ +$expire_time = 525600; + +/* Load IMP.php to access IMP::getPathInfo(). */ +if (!defined('HORDE_BASE')) { + define('HORDE_BASE', dirname(__FILE__) . '/..'); +} +require_once HORDE_BASE . '/lib/core.php'; +$path_info = trim(Util::getPathInfo(), '/'); +if (empty($path_info)) { + exit; +} + +// 'fckeditor' output won't have a second slash, so ignore errors +$old_error = error_reporting(0); +list($type, $cid) = explode('/', $path_info, 2); +error_reporting($old_error); + +/* Allow CSS and JS caches to be cached on the browser since there is no + * dynamic code that will change over the course of a session. Can't cache + * fckeditor setting as it may change. Only authenticate for 'fckeditor' + * actions (for access to user's prefs). */ +if ($type == 'fckeditor') { + $session_cache_limiter = 'nocache'; +} else { + $session_cache_limiter = 'public'; + session_cache_expire($expire_time); + @define('AUTH_HANDLER', true); + $authentication = 'none'; +} +$session_control = 'readonly'; +$session_timeout = 'none'; +require_once dirname(__FILE__) . '/lib/base.php'; + +switch ($type) { +case 'css': + $type = 'text/css'; + $lifetime = (empty($GLOBALS['conf']['server']['cachecssparams']['lifetime'])) ? 0 : $GLOBALS['conf']['server']['cachecssparams']['lifetime']; + break; + +case 'fckeditor': + header('Content-Type: text/javascript'); + echo 'FCKConfig.ToolbarSets["ImpToolbar"] = ' . $GLOBALS['prefs']->getValue('fckeditor_buttons') . ';' . "\n" . + // To more closely match "normal" textarea behavior, send
on + // enter instead of

. + 'FCKConfig.EnterMode = \'br\';' . "\n" . + 'FCKConfig.ShiftEnterMode = \'p\';'; + exit; + +case 'js': + $type = 'text/javascript'; + $lifetime = (empty($GLOBALS['conf']['server']['cachejsparams']['lifetime'])) ? 0 : $GLOBALS['conf']['server']['cachejsparams']['lifetime']; + break; + +default: + exit; +} + +if (empty($cid)) { + exit; +} + +$cache = &Horde_Cache::singleton($GLOBALS['conf']['cache']['driver'], Horde::getDriverConfig('cache', $GLOBALS['conf']['cache']['driver'])); +if (is_a($cache, 'PEAR_Error')) { + Horde::logMessage('No cache backend available.', __FILE__, __LINE__, PEAR_LOG_ERR); + exit; +} + +// If cache info doesn't exist, just output an empty body. +header('Content-Type: ' . $type); +$cache->output($cid, $lifetime); diff --git a/imp/compose.php b/imp/compose.php new file mode 100644 index 000000000..807383ffe --- /dev/null +++ b/imp/compose.php @@ -0,0 +1,1269 @@ + + * @author Michael Slusarz + */ + +function _mailboxReturnURL($encode, $url = null) +{ + if (empty($url)) { + $url = Horde::applicationUrl('mailbox.php'); + } + + foreach (array('start', 'page', 'mailbox', 'thismailbox') as $key) { + if (($param = Util::getFormData($key))) { + $url = Util::addParameter($url, $key, $param, $encode); + } + } + + return $url; +} + +function _popupSuccess() +{ + require_once 'Horde/Menu.php'; + $menu = new Menu(HORDE_MENU_MASK_NONE); + $menu->add(Horde::applicationUrl('compose.php'), _("New Message"), 'compose.png'); + $menu->add('', _("Close this window"), 'close.png', $GLOBALS['registry']->getImageDir('horde'), '', 'window.close();'); + require IMP_TEMPLATES . '/common-header.inc'; + $success_template = new IMP_Template(); + $success_template->set('menu', $menu->render()); + echo $success_template->fetch(IMP_TEMPLATES . '/compose/success.html'); + IMP::status(); + require $GLOBALS['registry']->get('templates', 'horde') . '/common-footer.inc'; +} + +function &_getIMPContents($index, $mailbox) +{ + if (empty($index)) { + return false; + } + $imp_contents = &IMP_Contents::singleton($index . IMP::IDX_SEP . $mailbox); + if (is_a($imp_contents, 'PEAR_Error')) { + $GLOBALS['notification']->push(_("Could not retrieve the message from the mail server."), 'horde.error'); + return false; + } + return $imp_contents; +} + + +@define('IMP_BASE', dirname(__FILE__)); +$compose_page = true; +$session_control = 'netscape'; +require_once IMP_BASE . '/lib/base.php'; +require_once 'Horde/Help.php'; +require_once 'Horde/Identity.php'; +require_once 'Horde/Text/Filter.php'; + +/* The message text. */ +$msg = ''; + +/* The headers of the message. */ +$header = array( + 'to' => '', + 'cc' => '', + 'bcc' => '', + 'subject' => '', + 'in_reply_to' => Util::getFormData('in_reply_to'), + 'references' => Util::getFormData('references') +); + +$get_sig = true; +$pgp_passphrase_dialog = $pgp_symmetric_passphrase_dialog = $showmenu = $smime_passphrase_dialog = false; +$cursor_pos = $oldrtemode = $rtemode = $siglocation = null; + +/* Set the current identity. */ +$identity = &Identity::singleton(array('imp', 'imp')); +if (!$prefs->isLocked('default_identity')) { + $identity_id = Util::getFormData('identity'); + if (!is_null($identity_id)) { + $identity->setDefault($identity_id); + } +} + +/* Catch submits if javascript is not present. */ +if (!($actionID = Util::getFormData('actionID'))) { + foreach (array('send_message', 'save_draft', 'cancel_compose', 'add_attachment', 'compose_expand_addr') as $val) { + if (Util::getFormData('btn_' . $val)) { + $actionID = $val; + break; + } + } +} + +if ($actionID) { + switch ($actionID) { + case 'mailto': + case 'mailto_link': + case 'draft': + case 'reply': + case 'reply_all': + case 'reply_list': + case 'forward_all': + case 'forward_body': + case 'forward_attachments': + case 'redirect_compose': + case 'fwd_digest': + // These are all safe actions that might be invoked without a token. + break; + + default: + $result = IMP::checkRequestToken('imp.compose', Util::getFormData('compose_requestToken')); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result); + $actionID = null; + } + } +} + +$save_sent_mail = Util::getFormData('save_sent_mail'); +$sent_mail_folder = $identity->getValue('sent_mail_folder'); +$index = Util::getFormData('index'); +$reply_index = Util::getFormData('reply_index'); +$thismailbox = Util::getFormData('thismailbox'); + +/* Check for duplicate submits. */ +require_once 'Horde/Token.php'; +if (isset($conf['token'])) { + /* If there is a configured token system, set it up. */ + $tokenSource = Horde_Token::factory( + $conf['token']['driver'], + Horde::getDriverConfig('token', $conf['token']['driver'])); +} else { + /* Default to the file system if no config. */ + $tokenSource = Horde_Token::factory('file'); +} +if ($token = Util::getFormData('compose_formToken')) { + $verified = $tokenSource->verify($token); + /* Notify and reset the actionID. */ + if (is_a($verified, 'PEAR_Error')) { + $notification->push($verified); + $actionID = null; + } elseif (!$verified) { + $notification->push(_("You have already submitted this page."), 'horde.error'); + $actionID = null; + } +} + +/* Set the current time zone. */ +NLS::setTimeZone(); + +/* Determine if compose mode is disabled. */ +$compose_disable = !empty($conf['hooks']['disable_compose']) && + Horde::callHook('_imp_hook_disable_compose', array(true), 'imp'); + +/* Determine if mailboxes are readonly. */ +$readonly_drafts = $readonly_sentmail = false; +$draft = IMP::folderPref($prefs->getValue('drafts_folder'), true); +if (!empty($draft)) { + $readonly_drafts = $imp_imap->isReadOnly($draft); +} +$readonly_sentmail = $imp_imap->isReadOnly($sent_mail_folder); +if ($readonly_sentmail) { + $save_sent_mail = false; +} + +/* Initialize the IMP_Compose:: object. */ +$imp_compose = &IMP_Compose::singleton(Util::getFormData('messageCache')); +$imp_compose->pgpAttachPubkey((bool) Util::getFormData('pgp_attach_pubkey')); +$imp_compose->userLinkAttachments((bool) Util::getFormData('link_attachments')); +$imp_compose->attachVCard((bool) Util::getFormData('vcard'), $identity->getValue('fullname')); + +/* Init IMP_UI_Compose:: object. */ +require_once IMP_BASE . '/lib/UI/Compose.php'; +$imp_ui = new IMP_UI_Compose(); + +/* Set the default charset & encoding. + * $charset - charset to use when sending messages + * $encoding - best guessed charset offered to the user as the default value in + * the charset dropdown list. */ +if ($prefs->isLocked('sending_charset')) { + $charset = NLS::getEmailCharset(); +} else { + $charset = Util::getFormData('charset'); +} +$encoding = empty($charset) ? NLS::getEmailCharset() : $charset; + +/* Is this a popup window? */ +$has_js = $browser->hasFeature('javascript'); +$isPopup = (($prefs->getValue('compose_popup') || Util::getFormData('popup')) && $has_js); + +/* Determine the composition type - text or HTML. + $rtemode is null if browser does not support it. */ +$rtemode = null; +if ($browser->hasFeature('rte')) { + if ($prefs->isLocked('compose_html')) { + $rtemode = $prefs->getValue('compose_html'); + } else { + $rtemode = Util::getFormData('rtemode'); + if (is_null($rtemode)) { + $rtemode = $prefs->getValue('compose_html'); + } else { + $oldrtemode = Util::getFormData('oldrtemode'); + $get_sig = false; + } + } +} + +/* Load stationery. */ +$stationery_list = array(); +if (!$prefs->isLocked('stationery')) { + $stationery = null; + $all_stationery = @unserialize($prefs->getValue('stationery', false)); + if (is_array($all_stationery)) { + $all_stationery = String::convertCharset($all_stationery, $prefs->getCharset()); + foreach ($all_stationery as $id => $choice) { + if (($choice['t'] == 'plain') || + (($choice['t'] == 'html') && $rtemode)) { + if ($rtemode && $choice['t'] == 'plain') { + $choice['c'] = $imp_compose->text2html($choice['c']); + } + $stationery_list[$id] = $choice; + } + } + } +} + +/* Update the file attachment information. */ +if ($_SESSION['imp']['file_upload']) { + /* Only notify if we are reloading the compose screen. */ + $notify = ($actionID != 'send_message') && ($actionID != 'save_draft'); + + $deleteList = Util::getPost('delattachments', array()); + + /* Update the attachment information. */ + foreach (array_keys($imp_compose->getAttachments()) as $i) { + if (!in_array($i, $deleteList)) { + $disposition = Util::getFormData('file_disposition_' . $i); + $description = Util::getFormData('file_description_' . $i); + $imp_compose->updateAttachment($i, array('disposition' => $disposition, 'description' => $description)); + } + } + + /* Delete attachments. */ + if (!empty($deleteList)) { + $filenames = $imp_compose->deleteAttachment($deleteList); + if ($notify) { + foreach ($filenames as $val) { + $notification->push(sprintf(_("Deleted the attachment \"%s\"."), Horde_MIME::decode($val)), 'horde.success'); + } + } + } + + /* Add new attachments. */ + if (!$imp_compose->addFilesFromUpload('upload_', 'upload_disposition_', $notify)) { + $actionID = null; + } +} + +/* Run through the action handlers. */ +$title = _("New Message"); +switch ($actionID) { +case 'mailto': + if (!($imp_contents = &_getIMPContents($index, $thismailbox))) { + break; + } + $imp_headers = $imp_contents->getHeaderOb(); + $header['to'] = ''; + if (Util::getFormData('mailto')) { + $header['to'] = $imp_headers->getValue('to'); + } + if (empty($header['to'])) { + ($header['to'] = Horde_MIME_Address::addrArray2String($imp_headers->getOb('from'))) || + ($header['to'] = Horde_MIME_Address::addrArray2String($imp_headers->getOb('reply-to'))); + } + break; + +case 'mailto_link': + $args = IMP::getComposeArgs(); + if (isset($args['body'])) { + $msg = $args['body']; + } + foreach (array('to', 'cc', 'bcc', 'subject') as $val) { + if (isset($args[$val])) { + $header[$val] = $args[$val]; + } + } + break; + +case 'draft': + $result = $imp_compose->resumeDraft($index . IMP::IDX_SEP . $thismailbox); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result->getMessage(), 'horde.error'); + } else { + if (!is_null($rtemode)) { + $rtemode = ($result['mode'] == 'html'); + } + $msg = $result['msg']; + $header = array_merge($header, $result['header']); + if (!is_null($result['identity']) && + ($result['identity'] != $identity->getDefault()) && + !$prefs->isLocked('default_identity')) { + $identity->setDefault($result['identity']); + $sent_mail_folder = $identity->getValue('sent_mail_folder'); + } + $resume_draft = true; + } + $get_sig = false; + break; + +case 'compose_expand_addr': +case 'redirect_expand_addr': + $header['to'] = $imp_ui->expandAddresses(Util::getFormData('to'), $imp_compose); + if ($actionID == 'compose_expand_addr') { + $header['cc'] = $imp_ui->expandAddresses(Util::getFormData('cc'), $imp_compose); + $header['bcc'] = $imp_ui->expandAddresses(Util::getFormData('bcc'), $imp_compose); + } + $get_sig = false; + break; + +case 'reply': +case 'reply_all': +case 'reply_list': + if (!($imp_contents = &_getIMPContents($index, $thismailbox))) { + break; + } + + $reply_msg = $imp_compose->replyMessage($actionID, $imp_contents, Util::getFormData('to')); + $msg = $reply_msg['body']; + $header = $reply_msg['headers']; + $format = $reply_msg['format']; + + if (!is_null($rtemode)) { + $rtemode = $rtemode || $format == 'html'; + } + + if ($actionID == 'reply') { + $title = _("Reply:"); + } elseif ($actionID == 'reply_all') { + $title = _("Reply to All:"); + } elseif ($actionID == 'reply_list') { + $title = _("Reply to List:"); + } + $title .= ' ' . $header['subject']; + + $encoding = empty($charset) ? $header['encoding'] : $charset; + $reply_index = $index; + break; + +case 'forward_all': +case 'forward_body': +case 'forward_attachments': + if (!($imp_contents = &_getIMPContents($index, $thismailbox))) { + break; + } + + $fwd_msg = $imp_ui->getForwardData($imp_compose, $imp_contents, $actionID, $index . IMP::IDX_SEP . $thismailbox); + if ($actionID == 'forward_all') { + $msg = ''; + } else { + $msg = $fwd_msg['body']; + } + $header = $fwd_msg['headers']; + $format = $fwd_msg['format']; + $rtemode = ($rtemode || (!is_null($rtemode) && ($format == 'html'))); + $title = $header['title']; + $encoding = empty($charset) ? $header['encoding'] : $charset; + break; + +case 'redirect_compose': + $title = _("Redirect this message"); + break; + +case 'redirect_send': + if (!($imp_contents = &_getIMPContents($index, $thismailbox))) { + break; + } + + $f_to = Util::getFormData('to', $imp_ui->getAddressList(Util::getFormData('to'), Util::getFormData('to_list'), Util::getFormData('to_field'), Util::getFormData('to_new'))); + + $result = $imp_ui->redirectMessage($f_to, $imp_compose, $imp_contents, $encoding); + if (!is_a($result, 'PEAR_Error')) { + if ($isPopup) { + if ($prefs->getValue('compose_confirm')) { + $notification->push(_("Message redirected successfully."), 'horde.success'); + _popupSuccess(); + } else { + Util::closeWindowJS(); + } + } else { + if ($prefs->getValue('compose_confirm')) { + $notification->push(_("Message redirected successfully."), 'horde.success'); + } + header('Location: ' . _mailboxReturnURL(false)); + } + exit; + } + $notification->push($result, 'horde.error'); + $actionID = 'redirect_compose'; + $get_sig = false; + break; + +case 'send_message': + if ($compose_disable) { + break; + } + + $from = $identity->getFromLine(null, Util::getFormData('from')); + if (is_a($from, 'PEAR_Error')) { + $get_sig = false; + $notification->push($from); + break; + } + $header['from'] = $from; + $header['replyto'] = $identity->getValue('replyto_addr'); + + $header['to'] = $imp_ui->getAddressList(Util::getFormData('to'), Util::getFormData('to_list'), Util::getFormData('to_field'), Util::getFormData('to_new')); + if ($prefs->getValue('compose_cc')) { + $header['cc'] = $imp_ui->getAddressList(Util::getFormData('cc'), Util::getFormData('cc_list'), Util::getFormData('cc_field'), Util::getFormData('cc_new')); + } + if ($prefs->getValue('compose_bcc')) { + $header['bcc'] = $imp_ui->getAddressList(Util::getFormData('bcc'), Util::getFormData('bcc_list'), Util::getFormData('bcc_field'), Util::getFormData('bcc_new')); + } + + $message = Util::getFormData('message'); + $header['subject'] = Util::getFormData('subject', ''); + if ($smf = Util::getFormData('sent_mail_folder')) { + $sent_mail_folder = $smf; + } + + $options = array( + 'save_sent' => $save_sent_mail, + 'sent_folder' => $sent_mail_folder, + 'save_attachments' => Util::getFormData('save_attachments_select'), + 'reply_type' => Util::getFormData('reply_type'), + 'reply_index' => (empty($reply_index) ? null : $reply_index . IMP::IDX_SEP . $thismailbox), + 'encrypt' => Util::getFormData('encrypt_options'), + 'priority' => Util::getFormData('x_priority'), + 'readreceipt' => Util::getFormData('request_read_receipt') + ); + $sent = $imp_compose->buildAndSendMessage($message, $header, $charset, $rtemode, $options); + + if (is_a($sent, 'PEAR_Error')) { + $get_sig = false; + $code = $sent->getCode(); + $notification->push($sent, strpos($code, 'horde.') === 0 ? $code : 'horde.error'); + if ($sent->getUserInfo() == 'pgp_symmetric_passphrase_dialog') { + $pgp_symmetric_passphrase_dialog = true; + } elseif ($sent->getUserInfo() == 'pgp_passphrase_dialog') { + $pgp_passphrase_dialog = true; + } elseif ($sent->getUserInfo() == 'smime_passphrase_dialog') { + $smime_passphrase_dialog = true; + } + break; + } + + if (Util::getFormData('resume_draft') && + $prefs->getValue('auto_delete_drafts') && + ($thismailbox == IMP::folderPref($prefs->getValue('drafts_folder'), true))) { + require_once IMP_BASE . '/lib/Message.php'; + $imp_message = &IMP_Message::singleton(); + $idx_array = array($index . IMP::IDX_SEP . $thismailbox); + if ($imp_message->delete($idx_array)) { + $notification->push(_("The draft message was automatically deleted because it was successfully completed and sent."), 'horde.success'); + } + } + + if ($isPopup) { + if ($prefs->getValue('compose_confirm') || !$sent) { + if ($sent) { + $notification->push(_("Message sent successfully."), 'horde.success'); + } + _popupSuccess(); + } else { + Util::closeWindowJS(); + } + } else { + if ($prefs->getValue('compose_confirm') && $sent) { + $notification->push(_("Message sent successfully."), 'horde.success'); + } + header('Location: ' . _mailboxReturnURL(false)); + } + exit; + +case 'save_draft': + if ($readonly_drafts) { + break; + } + + /* Set up the From address based on the identity. */ + $header['from'] = $identity->getFromLine(null, Util::getFormData('from')); + if (is_a($header['from'], 'PEAR_Error')) { + $get_sig = false; + $notification->push($header['from']); + break; + } + foreach (array('to', 'cc', 'bcc', 'subject') as $val) { + $header[$val] = Util::getFormData($val); + } + $message = Util::getFormData('message', ''); + + /* Save the draft. */ + $result = $imp_compose->saveDraft($header, $message, NLS::getCharset(), $rtemode); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result->getMessage(), 'horde.error'); + } else { + /* Closing draft if requested by preferences. */ + if ($isPopup) { + if ($prefs->getValue('close_draft')) { + Util::closeWindowJS(); + } else { + $notification->push($result, 'horde.success'); + break; + } + } else { + $notification->push($result); + header('Location: ' . _mailboxReturnURL(false)); + } + exit; + } + + $get_sig = false; + break; + +case 'fwd_digest': + $indices = Util::getFormData('fwddigest'); + if (!empty($indices)) { + $msglist = unserialize(urldecode($indices)); + $imp_compose->attachIMAPMessage($msglist, $header); + } + break; + +case 'cancel_compose': + $imp_compose->deleteAllAttachments(); + if ($isPopup) { + Util::closeWindowJS(); + } else { + header('Location: ' . _mailboxReturnURL(false)); + } + exit; + +case 'selectlist_process': + $select_id = Util::getFormData('selectlist_selectid'); + if (!empty($select_id)) { + if ($registry->hasMethod('files/selectlistResults') && + $registry->hasMethod('files/returnFromSelectlist')) { + $filelist = $registry->call('files/selectlistResults', array($select_id)); + if ($filelist && !is_a($filelist, 'PEAR_Error')) { + $i = 0; + foreach ($filelist as $val) { + $data = $registry->call('files/returnFromSelectlist', array($select_id, $i++)); + if ($data && !is_a($data, 'PEAR_Error')) { + $part = new Horde_MIME_Part(); + $part->setContents($data); + $part->setName(reset($val)); + $res = $imp_compose->addMIMEPartAttachment($part); + if (is_a($res, 'PEAR_Error')) { + $notification->push($res, 'horde.error'); + } + } + } + } + } + } + break; + +case 'change_stationery': + if (empty($stationery_list)) { + break; + } + $stationery = Util::getFormData('stationery'); + if (strlen($stationery)) { + $stationery = (int)$stationery; + $stationery_content = $stationery_list[$stationery]['c']; + $msg = Util::getFormData('message', ''); + if (strpos($stationery_content, '%s') !== false) { + $sig = $identity->getSignature(); + if ($rtemode) { + $sig = $imp_compose->text2html($sig); + $stationery_content = $imp_compose->text2html($stationery_content); + } + $msg = str_replace(array("\r\n", $sig), array("\n", ''), $msg); + $stationery_content = str_replace('%s', $sig, $stationery_content); + } + if (strpos($stationery_content, '%c') === false) { + $msg .= $stationery_content; + } else { + $msg = str_replace('%c', $msg, $stationery_content); + } + } + $get_sig = false; + break; + +case 'add_attachment': + $get_sig = false; + break; +} + +/* Get the message cache ID. */ +$messageCacheID = $imp_compose->getMessageCacheId(); + +/* Has this page been reloaded? */ +$reloaded = Util::getFormData('reloaded'); + +/* Are we in redirect mode? */ +$redirect = in_array($actionID, array('redirect_compose', 'redirect_expand_addr')); + +/* Attach autocompleters to the compose form elements. */ +$spellcheck = false; +if ($has_js) { + require_once IMP_BASE . '/lib/Imple.php'; + if ($redirect) { + $imp_ui->attachAutoCompleter('Imple', array('to')); + } else { + $auto_complete = array('to'); + foreach (array('cc', 'bcc') as $val) { + if ($prefs->getValue('compose_' . $val)) { + $auto_complete[] = $val; + } + } + $imp_ui->attachAutoCompleter('Imple', $auto_complete); + if (!empty($conf['spell']['driver'])) { + require_once 'Horde/SpellChecker.php'; + if (Horde_SpellChecker::factory($conf['spell']['driver'], array()) !== false) { + $spellcheck = true; + $imp_ui->attachSpellChecker('imp', true); + } + } + Horde::addScriptFile('ieEscGuard.js', 'horde', true); + } +} + +$max_attach = $imp_compose->additionalAttachmentsAllowed(); +$smf_check = !empty($conf['user']['select_sentmail_folder']) && !$prefs->isLocked('sent_mail_folder'); + +/* Get the URL to use for the cancel action. */ +$cancel_url = ''; +if ($isPopup) { + /* If the attachments cache is not empty, we must reload this page + * and delete the attachments. */ + if ($imp_compose->numberOfAttachments()) { + $cancel_url = Util::addParameter(Horde::selfUrl(), array('actionID' => 'cancel_compose', 'messageCache' => $messageCacheID, 'popup' => 1), null, false); + } +} else { + /* If the attachments cache is not empty, we must reload this page and + delete the attachments. */ + if ($imp_compose->numberOfAttachments()) { + $cancel_url = Util::addParameter(_mailboxReturnURL(true, Horde::selfUrl()), array('actionID' => 'cancel_compose', 'messageCache' => $messageCacheID), null, false); + } else { + $cancel_url = _mailboxReturnURL(true); + } + $showmenu = true; +} + +/* Grab any data that we were supplied with. */ +if (empty($msg)) { + $msg = Util::getFormData('message', Util::getFormData('body', '')); + if ($browser->hasQuirk('double_linebreak_textarea')) { + $msg = preg_replace('/(\r?\n){3}/', '$1', $msg); + } + $msg = "\n" . $msg; +} + +/* Get the current signature. */ +$sig = $identity->getSignature(); + +/* Convert from Text -> HTML or vice versa if RTE mode changed. */ +if (!is_null($oldrtemode) && ($oldrtemode != $rtemode)) { + if ($rtemode) { + /* Try to find the signature, replace it with a placeholder, + * HTML-ize the message, then replace the signature + * placeholder with the HTML-ized signature, complete with + * marker comment. */ + $msg = preg_replace('/' . preg_replace('/(?text2html($msg); + $msg = str_replace(array('##IMP_SIGNATURE_WS##', '##IMP_SIGNATURE##'), + array('

 

', '

' . $imp_compose->text2html($sig) . '

'), + $msg); + } else { + $msg = Text_Filter::filter($msg, 'html2text'); + } +} + +/* If this is the first page load for this compose item, add auto BCC + * addresses. */ +if (!$reloaded && ($actionID != 'draft')) { + $header['bcc'] = Horde_MIME_Address::addrArray2String($identity->getBccAddresses()); +} + +foreach (array('to', 'cc', 'bcc', 'subject') as $val) { + if (empty($header[$val])) { + $header[$val] = Util::getFormData($val, $imp_ui->getAddressList(Util::getFormData($val), Util::getFormData($val . '_list'), Util::getFormData($val . '_field'), Util::getFormData($val . '_new'))); + } +} + +if ($get_sig && isset($msg) && !empty($sig)) { + if ($rtemode) { + $sig = '

 

' . $imp_compose->text2html(trim($sig)) . '

'; + } + + if ($identity->getValue('sig_first')) { + $siglocation = 0; + $msg = "\n" . $sig . $msg; + } else { + $siglocation = String::length($msg); + /* We always add a line break at the beginning, so if length is 1, + ignore that line break (i.e. the message is empty). */ + if ($siglocation == 1) { + $siglocation = 0; + } + $msg .= "\n" . $sig; + } +} + +/* Open the passphrase window here. */ +if ($pgp_passphrase_dialog || $pgp_symmetric_passphrase_dialog) { + require_once IMP_BASE .'/lib/Crypt/PGP.php'; + $imp_pgp = new IMP_PGP(); + Horde::addScriptFile('popup.js', 'imp', true); + $notification->push($imp_pgp->getJSOpenWinCode($pgp_symmetric_passphrase_dialog ? 'open_symmetric_passphrase_dialog' : 'open_passphrase_dialog', "opener.focus();opener.uniqSubmit('send_message');"), 'javascript'); +} elseif ($smime_passphrase_dialog) { + require_once IMP_BASE .'/lib/Crypt/SMIME.php'; + $imp_smime = new IMP_SMIME(); + Horde::addScriptFile('popup.js', 'imp', true); + $notification->push($imp_smime->getJSOpenWinCode('open_passphrase_dialog', "opener.focus();opener.uniqSubmit('send_message');"), 'javascript'); +} + +/* If PGP encryption is set by default, and we have a recipient list on first + * load, make sure we have public keys for all recipients. */ +$encrypt_options = Util::getFormData('encrypt_options'); +$use_pgp = $prefs->getValue('use_pgp'); +if ($use_pgp) { + $default_encrypt = $prefs->getValue('default_encrypt'); + if (!$reloaded && + in_array($default_encrypt, array(IMP::PGP_ENCRYPT, IMP::PGP_SIGNENC))) { + $addrs = $imp_compose->recipientList($header); + if (!is_a($addrs, 'PEAR_Error') && !empty($addrs['list'])) { + require_once IMP_BASE .'/lib/Crypt/PGP.php'; + $imp_pgp = new IMP_PGP(); + foreach ($addrs['list'] as $val) { + $res = $imp_pgp->getPublicKey($val); + if (is_a($res, 'PEAR_Error')) { + $notification->push(_("PGP encryption cannot be used by default as public keys cannot be found for all recipients."), 'horde.warning'); + $encrypt_options = ($default_encrypt == IMP::PGP_ENCRYPT) ? IMP::ENCRYPT_NONE : IMP::PGP_SIGN; + break; + } + } + } + } +} + +/* Determine the default cursor position in the compose text area. */ +if (!$rtemode) { + switch ($prefs->getValue('compose_cursor')) { + case 'top': + default: + $cursor_pos = 0; + break; + + case 'bottom': + $cursor_pos = String::length($msg); + break; + + case 'sig': + if (!is_null($siglocation)) { + $cursor_pos = $siglocation; + } elseif (!empty($sig)) { + $next_pos = $pos = 0; + $sig_length = String::length($sig); + do { + $cursor_pos = $pos; + $pos = strpos($msg, $sig, $next_pos); + $next_pos = $pos + $sig_length; + } while ($pos !== false); + } + break; + }; +} + +/* Define some variables used in the javascript code. */ +$js_code = array( + 'var cancel_url = \'' . $cancel_url . '\'', + 'var compose_spellcheck = ' . intval($spellcheck && $prefs->getValue('compose_spellcheck')), + 'var cursor_pos = ' . (is_null($cursor_pos) ? 'null' : $cursor_pos), + 'var max_attachments = ' . (($max_attach === true) ? 'null' : $max_attach), + 'var compose_popup = ' . intval($isPopup), + 'var redirect = ' . intval($redirect), + 'var rtemode = ' . intval($rtemode), + 'var smf_check = ' . intval($smf_check), + 'var reloaded = ' . intval($reloaded), +); + +/* Create javascript identities array. */ +if (!$redirect) { + $js_ident = array(); + foreach ($identity->getAllSignatures() as $ident => $sig) { + $smf = $identity->getValue('sent_mail_folder', $ident); + $js_ident[] = array( + ($rtemode) ? str_replace(' target="_blank"', '', Text_Filter::filter($sig, 'text2html', array('parselevel' => TEXT_HTML_MICRO_LINKURL, 'class' => null, 'callback' => null))) : $sig, + $identity->getValue('sig_first', $ident), + ($smf_check) ? $smf : IMP::displayFolder($smf), + $identity->saveSentmail($ident), + Horde_MIME_Address::addrArray2String($identity->getBccAddresses($ident)) + ); + } + require_once 'Horde/Serialize.php'; + $js_code[] = 'var identities = ' . Horde_Serialize::serialize($js_ident, SERIALIZE_JSON, NLS::getCharset()); +} + +Horde::addScriptFile('prototype.js', 'horde', true); +Horde::addScriptFile('compose.js', 'imp', true); +require IMP_TEMPLATES . '/common-header.inc'; +IMP::addInlineScript($js_code); +if ($showmenu) { + IMP::menu(); +} + +/* Set up the base template now. */ +$t = new IMP_Template(); +$t->setOption('gettext', true); +$t->set('post_action', Util::addParameter(Horde::applicationUrl('compose.php'), 'uniq', base_convert(microtime(), 10, 36))); +$t->set('allow_compose', !$compose_disable); +if ($has_js) { + $t->set('loading_img', Horde::img('loading.gif', _("Loading..."))); +} + +if ($redirect) { + /* Prepare the redirect template. */ + $t->set('mailbox', htmlspecialchars($thismailbox)); + $t->set('index', htmlspecialchars($index)); + $t->set('status', IMP::status()); + $t->set('title', htmlspecialchars($title)); + $t->set('token', IMP::getRequestToken('imp.compose')); + + if ($registry->hasMethod('contacts/search')) { + $t->set('has_search', true); + $t->set('abook', Horde::link('#', _("Address Book"), 'widget', null, 'window.open(\'' . Util::addParameter(Horde::applicationUrl('contacts.php'), array('formname' => 'redirect', 'to_only' => 1)) . '\', \'contacts\', \'toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=550,height=300,left=100,top=100\'); return false;') . Horde::img('addressbook_browse.png') . '
' . _("Address Book") . ''); + if (!$has_js) { + $t->set('expand', Horde::link('#', _("Expand Names"), 'widget', null, "$('actionID').value='redirect_expand_addr';uniqSubmit();return false;") . Horde::img('expand.png') . '
' . _("Expand Names") . '', true); + } + } + + $t->set('to', Horde::label('to', _("To"))); + + $tabindex = -1; + if (is_array($header['to'])) { + $t->set('multiple_to', true); + $first_to = true; + $to_hdrs = array(); + foreach ($header['to'] as $to_item) { + $entry = array(); + if (count($to_item) > 1) { + $entry['multiple'] = true; + $entry['select_tabindex'] = ++$tabindex; + $entry['select_name'] = htmlspecialchars($to_item[0]); + $entry['select_to'] = array(); + for ($i = 1; $i < count($to_item); $i++) { + $entry['select_to'][] = array('val' => htmlspecialchars($to_item[$i])); + } + } else { + $entry['multiple'] = null; + $entry['input_value'] = htmlspecialchars($to_item); + } + $entry['input_tabindex'] = ++$tabindex; + + if ($first_to) { + $first_to = false; + $entry['help'] = Help::link('imp', 'compose-to'); + } else { + $entry['help'] = null; + } + $to_hdrs[] = $entry; + } + $t->set('to_new_tabindex', ++$tabindex); + $t->set('to_hdrs', $to_hdrs); + } else { + $t->set('input_tabindex', ++$tabindex); + $t->set('input_value', htmlspecialchars($header['to'])); + $t->set('help', Help::link('imp', 'compose-to')); + } + + echo $t->fetch(IMP_TEMPLATES . '/compose/redirect.html'); +} else { + if (!($reply_type = Util::getFormData('reply_type'))) { + switch ($actionID) { + case 'reply': + case 'reply_all': + case 'reply_list': + $reply_type = 'reply'; + break; + + case 'forward': + case 'forward_all': + case 'forward_body': + case 'forward_attachment': + $reply_type = 'forward'; + break; + } + } + + /* Prepare the compose template. */ + $tabindex = 0; + + $t->set('file_upload', $_SESSION['imp']['file_upload']); + $t->set('forminput', Util::formInput()); + + $hidden = array(); + if ($_SESSION['imp']['file_upload']) { + if ($browser->hasQuirk('broken_multipart_form')) { + $hidden[] = array('n' => 'msie_formdata_is_broken', 'v' => ''); + } + $hidden[] = array('n' => 'MAX_FILE_SIZE', 'v' => $_SESSION['imp']['file_upload']); + } + $hidden[] = array('n' => 'actionID', 'v' => ''); + $hidden[] = array('n' => 'user', 'v' => $_SESSION['imp']['uniquser']); + $hidden[] = array('n' => 'compose_requestToken', 'v' => IMP::getRequestToken('imp.compose')); + $hidden[] = array('n' => 'compose_formToken', 'v' => Horde_Token::generateId('compose')); + $hidden[] = array('n' => 'messageCache', 'v' => $messageCacheID); + $hidden[] = array('n' => 'mailbox', 'v' => htmlspecialchars($imp_mbox['mailbox'])); + $hidden[] = array('n' => 'thismailbox', 'v' => $thismailbox); + foreach (array('page', 'start', 'popup') as $val) { + $hidden[] = array('n' => $val, 'v' => htmlspecialchars(Util::getFormData($val))); + } + $hidden[] = array('n' => 'attachmentAction', 'v' => ''); + $hidden[] = array('n' => 'reloaded', 'v' => 1); + $hidden[] = array('n' => 'oldrtemode', 'v' => $rtemode); + $hidden[] = array('n' => 'rtemode', 'v' => $rtemode); + $hidden[] = array('n' => 'index', 'v' => $index); + if ($reply_type) { + $hidden[] = array('n' => 'reply_type', 'v' => $reply_type); + $hidden[] = array('n' => 'reply_index', 'v' => $reply_index); + $hidden[] = array('n' => 'in_reply_to', 'v' => htmlspecialchars($header['in_reply_to'])); + if ($reply_type == 'reply') { + $hidden[] = array('n' => 'references', 'v' => htmlspecialchars($header['references'])); + } + } + if (!empty($resume_draft)) { + $hidden[] = array('n' => 'resume_draft', 'v' => 1); + } + $t->set('hidden', $hidden); + + $t->set('title', htmlspecialchars($title)); + $t->set('status', IMP::status()); + $t->set('send_msg_ak', Horde::getAccessKeyAndTitle(_("_Send Message"))); + if ($conf['user']['allow_folders'] && !$readonly_drafts) { + $t->set('save_draft_ak', Horde::getAccessKeyAndTitle(_("Save _Draft"))); + } + $t->set('help_buttons', Help::link('imp', 'compose-buttons')); + $t->set('di_locked', $prefs->isLocked('default_identity')); + if ($t->get('di_locked')) { + $t->set('help_compose-from', Help::link('imp', 'compose-from')); + $t->set('fromaddr_locked', $prefs->isLocked('from_addr')); + $t->set('from', htmlspecialchars($identity->getFromLine(null, Util::getFormData('from')))); + if (!$t->get('fromaddr_locked')) { + $t->set('fromaddr_tabindex', ++$tabindex); + } + } else { + $select_list = $identity->getSelectList(); + $t->set('identity_label', Horde::label('identity', _("_Identity"))); + $t->set('help_compose-from', Help::link('imp', 'compose-identity')); + $t->set('last_identity', $identity->getDefault()); + $t->set('count_select_list', count($select_list) > 1); + if (count($select_list) > 1) { + $t->set('selectlist_tabindex', ++$tabindex); + $t_select_list = array(); + foreach ($select_list as $key => $select) { + $t_select_list[] = array('value' => $key, 'selected' => ($key == $identity->getDefault()), 'label' => htmlspecialchars($select)); + } + $t->set('select_list', $t_select_list); + } else { + $t->set('identity_default', $identity->getDefault()); + $t->set('identity_text', htmlspecialchars($select_list[0])); + } + } + $t->set('label_to', Horde::label('to', _("_To"))); + + $addr_array = array('to' => _("_To")); + if ($prefs->getValue('compose_cc')) { + $addr_array['cc'] = _("_Cc"); + } + if ($prefs->getValue('compose_bcc')) { + $addr_array['bcc'] = _("_Bcc"); + } + + $address_array = array(); + foreach ($addr_array as $val => $label) { + $addr = array( + 'id' => $val, + 'label' => Horde::label($val, $label), + ); + + $first_addr = false; + if (is_array($header[$val])) { + $addr['multiple'] = true; + $first_addr = true; + $hdrs = array(); + foreach ($header[$val] as $item) { + $entry = array(); + if (count($item) > 1) { + $entry['multiple'] = true; + $entry['select_tabindex'] = ++$tabindex; + $entry['select_name'] = htmlspecialchars($item[0]); + $entry['select_arr'] = array(); + for ($i = 1; $i < count($item); $i++) { + $entry['select_arr'][] = array('val' => htmlspecialchars($item[$i])); + } + $entry['input_value'] = null; + } else { + $entry['multiple'] = null; + $entry['input_value'] = htmlspecialchars($item); + } + $entry['input_tabindex'] = ++$tabindex; + + if ($first_addr) { + $first_addr = false; + $entry['help'] = Help::link('imp', 'compose-' . $val); + } else { + $entry['help'] = null; + } + $hdrs[] = $entry; + } + $addr['hdrs'] = $hdrs; + } else { + $addr['multiple'] = false; + $addr['input_tabindex'] = ++$tabindex; + $addr['input_value'] = htmlspecialchars($header[$val]); + $addr['help_compose'] = Help::link('imp', 'compose-' . $val); + } + $address_array[] = $addr; + } + $t->set('addr', $address_array); + + $t->set('subject_label', Horde::label('subject', _("S_ubject"))); + $t->set('subject_tabindex', ++$tabindex); + $t->set('subject', htmlspecialchars($header['subject'])); + $t->set('help-subject', Help::link('imp', 'compose-subject')); + + $t->set('set_priority', $prefs->getValue('set_priority')); + $t->set('unlocked_charset', !$prefs->isLocked('sending_charset')); + if ($t->get('unlocked_charset')) { + $t->set('charset_label', Horde::label('charset', _("C_harset"))); + $t->set('charset_tabindex', ++$tabindex); + $charset_array = array(); + foreach ($nls['encodings'] as $charset => $label) { + $charset_array[] = array('value' => $charset, 'selected' => (strtolower($charset) == strtolower($encoding)), 'label' => $label); + } + $t->set('charset_array', $charset_array); + $t->set('help_compose_charset', Help::link('imp', 'compose-charset')); + } + if ($t->get('set_priority')) { + $t->set('priority_label', Horde::label('priority', _("_Priority"))); + $t->set('priority_tabindex', ++$tabindex); + + $priority = Util::getFormData('x_priority', 3); + $priorities = array( + 1 => '1 (' . _("Highest") . ')', + 2 => '2 (' . _("High") . ')', + 3 => '3 (' . _("Normal") . ')', + 4 => '4 (' . _("Low") . ')', + 5 => '5 (' . _("Lowest") . ')' + ); + $priority_option = array(); + foreach ($priorities as $key => $val) { + $priority_option[] = array('val' => $key, 'label' => $val, 'selected' => ($priority == $key)); + } + $t->set('pri_opt', $priority_option); + $t->set('help_priority', Help::link('imp', 'compose-priority')); + } + + $t->set('stationery', !empty($stationery_list)); + if ($t->get('stationery')) { + $t->set('stationery_label', Horde::label('stationery', _("Stationery"))); + $stationeries = array(); + foreach ($stationery_list as $id => $choice) { + $stationeries[] = array('val' => $id, 'label' => $choice['n'], 'selected' => ($stationery === $id)); + } + $t->set('stationeries', $stationeries); + } + + $menu_view = $prefs->getValue('menu_view'); + $show_text = ($menu_view == 'text' || $menu_view == 'both'); + $compose_options = array(); + if ($registry->hasMethod('contacts/search')) { + $compose_options[] = array( + 'url' => Horde::link('#', '', 'widget', null, 'window.open(\'' . Horde::applicationUrl('contacts.php') . '\', \'contacts\', \'toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=550,height=300,left=100,top=100\'); return false;'), + 'img' => Horde::img('addressbook_browse.png'), + 'label' => $show_text ? _("Address Book") : ''); + if (!$has_js) { + $compose_options[] = array( + 'url' => Horde::link( + '#', '', 'widget', null, + "uniqSubmit('compose_expand_addr'); return false;", + '', '', array('name' => 'btn_compose_expand_addr')), + 'img' => Horde::img('expand.png'), + 'label' => $show_text ? _("Expand Names") : ''); + } + } + if ($spellcheck) { + $compose_options[] = array( + 'url' => Horde::link('#', '', 'widget', '', 'return false', '', '', + array('id' => 'spellcheck')), + 'img' => '', 'label' => ''); + } + if ($has_js && $conf['compose']['special_characters']) { + $compose_options[] = array( + 'url' => Horde::link( + '#', '', 'widget', null, + 'window.open(\'' + . Horde::url($registry->get('webroot', 'horde') + . '/services/keyboard.php') + . '\', \'chars\', \'height=220,width=400\'); return false;'), + 'img' => Horde::img('keyboard.png', null, null, + $registry->getImageDir('horde')), + 'label' => $show_text ? _("Special Characters") : ''); + } + if ($_SESSION['imp']['file_upload']) { + $compose_options[] = array( + 'url' => Horde::link('#attachments', '', 'widget', null, + 'Field.focus(\'upload_1\');return false;'), + 'img' => Horde::img('manage_attachments.png'), + 'label' => $show_text ? _("Attachments") : ''); + } + $t->set('compose_options', $compose_options); + $t->set('help_options', Help::link('imp', 'compose-options')); + + $t->set('ssm', ($conf['user']['allow_folders'] && !$prefs->isLocked('save_sent_mail'))); + if ($t->get('ssm')) { + if ($readonly_sentmail) { + $notification->push(sprintf(_("Cannot save sent-mail message to \"%s\" as that mailbox is read-only.", $sent_mail_folder), 'horde.warning')); + } + $t->set('ssm_selected', ($reloaded) ? ($save_sent_mail == 'on') : $identity->saveSentmail()); + $t->set('ssm_label', Horde::label('ssm', _("Sa_ve a copy in "))); + if ($smf = Util::getFormData('sent_mail_folder')) { + $sent_mail_folder = $smf; + } + if (!empty($conf['user']['select_sentmail_folder']) && + !$prefs->isLocked('sent_mail_folder')) { + $t->set('ssm_tabindex', ++$tabindex); + $t->set('ssm_folders', IMP::flistSelect('', false, array('INBOX'), $sent_mail_folder)); + } else { + if (!empty($sent_mail_folder)) { + $sent_mail_folder = '"' . IMP::displayFolder($sent_mail_folder) . '"'; + } + $t->set('ssm_folder', $sent_mail_folder); + $t->set('ssm_folders', false); + } + } + + $d_read = $prefs->getValue('disposition_request_read'); + $t->set('rrr', $conf['compose']['allow_receipts'] && ($d_read != 'never')); + if ($t->get('rrr')) { + $t->set('rrr_selected', ($d_read != 'ask') || (Util::getFormData('request_read_receipt') == 'on')); + $t->set('rrr_label', Horde::label('rrr', _("Request a _Read Receipt"))); + } + + $t->set('compose_html', (!is_null($rtemode) && !$prefs->isLocked('compose_html'))); + if ($t->get('compose_html')) { + $t->set('html_img', Horde::img('compose.png', _("Switch Composition Method"))); + $t->set('html_switch', Horde::link('#', _("Switch Composition Method"), '', '', "$('rtemode').value='" . ($rtemode ? 0 : 1) . "';uniqSubmit();return false;")); + $t->set('rtemode', $rtemode); + } + + $t->set('message_label', Horde::label('message', _("Te_xt"))); + $t->set('message_tabindex', ++$tabindex); + $t->set('message', htmlspecialchars($msg)); + + $t->set('use_encrypt', ($prefs->getValue('use_pgp') || $prefs->getValue('use_smime'))); + if ($t->get('use_encrypt')) { + $t->set('encrypt_label', Horde::label('encrypt_options', _("Encr_yption Options"))); + $t->set('encrypt_options', IMP::encryptList($encrypt_options)); + $t->set('help-encrypt', Help::link('imp', 'compose-options-encrypt')); + $t->set('pgp_options', ($prefs->getValue('use_pgp') && $prefs->getValue('pgp_public_key'))); + if ($t->get('pgp_options')) { + $t->set('pgp_attach_pubkey', Util::getFormData('pgp_attach_pubkey', $prefs->getValue('pgp_attach_pubkey'))); + $t->set('pap', Horde::label('pap', _("Attach a copy of your PGP public key to the message?"))); + $t->set('help-pubkey', Help::link('imp', 'pgp-compose-attach-pubkey')); + } + } + if ($registry->hasMethod('contacts/ownVCard')) { + $t->set('vcard', Horde::label('vcard', _("Attach your contact information to the message?"))); + $t->set('attach_vcard', Util::getFormData('vcard')); + } + if ($_SESSION['imp']['file_upload']) { + $localeinfo = NLS::getLocaleInfo(); + if ($GLOBALS['registry']->hasMethod('files/selectlistLink')) { + $res = $GLOBALS['registry']->call('files/selectlistLink', array(_("Attach Files"), 'widget', 'compose', true)); + $t->set('selectlistlink', (is_a($res, 'PEAR_Error')) ? null : $res); + } + $t->set('maxattachsize', !$imp_compose->maxAttachmentSize()); + if (!$t->get('maxattachsize')) { + $t->set('maxattachmentnumber', !$max_attach); + if (!$t->get('maxattachmentnumber')) { + $t->set('file_tabindex', ++$tabindex); + } + } + $t->set('attach_size', number_format($imp_compose->maxAttachmentSize(), 0, $localeinfo['decimal_point'], $localeinfo['thousands_sep'])); + $t->set('help-attachments', Help::link('imp', 'compose-attachments')); + + $save_attach = $prefs->getValue('save_attachments'); + $show_link_attach = ($conf['compose']['link_attachments'] && !$conf['compose']['link_all_attachments']); + $show_save_attach = ($t->get('ssm') && (strpos($save_attach, 'prompt') === 0) + && (!$conf['compose']['link_attachments'] || !$conf['compose']['link_all_attachments'])); + $t->set('show_link_save_attach', ($show_link_attach || $show_save_attach)); + if ($t->get('show_link_save_attach')) { + $attach_options = array(); + if ($show_save_attach) { + $save_attach_val = Util::getFormData('save_attachments_select', ($save_attach == 'prompt_yes')); + $attach_options[] = array('label' => _("Save Attachments with message in sent-mail folder?"), 'name' => 'save_attachments_select', 'select_yes' => ($save_attach_val == 1), 'select_no' => ($save_attach_val == 0), 'help' => Help::link('imp', 'compose-save-attachments')); + } + if ($show_link_attach) { + $link_attach_val = Util::getFormData('link_attachments'); + $attach_options[] = array('label' => _("Link Attachments?"), 'name' => 'link_attachments', 'select_yes' => ($link_attach_val == 1), 'select_no' => ($link_attach_val == 0), 'help' => Help::link('imp', 'compose-link-attachments')); + } + $t->set('attach_options', $attach_options); + } + + $t->set('numberattach', $imp_compose->numberOfAttachments()); + if ($t->get('numberattach')) { + require_once IMP_BASE . '/lib/MIME/Contents.php'; + $imp_contents = new IMP_Contents(new Horde_MIME_Message()); + + $atc = array(); + $disp_num = 0; + foreach ($imp_compose->getAttachments() as $atc_num => $mime) { + $entry = array(); + $disposition = $mime->getDisposition(); + $viewer = &$imp_contents->getMIMEViewer($mime); + $linked = Util::getFormData (sprintf('file_linked_%d', $atc_num)); + $entry['name'] = $mime->getName(true, true); + if ($mime->getType() != 'application/octet-stream') { + $preview_url = Util::addParameter(Horde::applicationUrl('view.php'), array('actionID' => 'compose_attach_preview', 'id' => $atc_num, 'messageCache' => $imp_compose->getMessageCacheId())); + $entry['name'] = Horde::link($preview_url, _("Preview") . ' ' . $entry['name'], 'link', 'compose_preview_window') . $entry['name'] . ''; + } + $entry['icon'] = $viewer->getIcon($mime->getType()); + $entry['disp_number'] = ++$disp_num; + $entry['number'] = $atc_num; + $entry['type'] = $mime->getType(); + $entry['size'] = $mime->getSize(); + $entry['disp_atc'] = ($disposition == 'attachment'); + $entry['disp_inline'] = ($disposition == 'inline'); + $entry['description'] = $mime->getDescription(true); + $atc[] = $entry; + } + $t->set('atc', $atc); + $t->set('total_attach_size', number_format($imp_compose->sizeOfAttachments() / 1024, 2, $localeinfo['decimal_point'], $localeinfo['thousands_sep'])); + $t->set('perc_attach', ((!empty($conf['compose']['attach_size_limit'])) && ($conf['compose']['attach_size_limit'] > 0))); + if ($t->get('perc_attach')) { + $t->set('perc_attach', sprintf(_("%s%% of allowed size"), number_format($imp_compose->sizeOfAttachments() / $conf['compose']['attach_size_limit'] * 100, 2, $localeinfo['decimal_point'], $localeinfo['thousands_sep']))); + } + $t->set('help-current-attachments', Help::link('imp', 'compose-current-attachments')); + } + } + + echo $t->fetch(IMP_TEMPLATES . '/compose/compose.html'); +} + +/* Load RTE. */ +if ($rtemode && !$redirect) { + echo $imp_ui->initRTE(); +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/imp/config/.htaccess b/imp/config/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/imp/config/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/imp/config/conf.xml b/imp/config/conf.xml new file mode 100644 index 000000000..314e11624 --- /dev/null +++ b/imp/config/conf.xml @@ -0,0 +1,449 @@ + + + + + + Spell Checker + + + + + + + + + + + External Utilities + + pgp.mit.edu + + pgp.mit.edu + keyserver.noreply.org + + + 10 + + + + + + Menu settings + + + + + + + + + + + true + + false + false + + + + false + true + + false + false + true + + + imp + + imp + dimp + mimp + + + + + + + + + + none + + + + + + 0 + true + 1800 + none + + + + + + 86400 + + + + + <strong>Requires a configured Horde_Cache backend.</strong> + + + + 86400 + + + + none + + + + + + 86400 + + + + + <strong>Requires a configured Horde_Cache backend.</strong> + + + + 86400 + + + + + + + + + Mailbox Settings + false + + + + Fetchmail Settings + false + 4000000 + + + + + Message Settings + + + ./config/filter.txt + **** + + + + + Spam Reporting + false + + false + + + + + + + + + + false + + true + + + + + + + + + + Print Options + false + + + + + + true + true + + + + true + true + false + true + + false + true + + + + 0 + 0 + 200000 + + + + + + false + false + false + false + false + false + false + false + false + false + false + false + + + + + Mail History + + true + + Outgoing Email Logging + + none + + + + 60 + 24 + + imp_sentmail + + + + + + + + External Applications + + true + + + + true + + + + Terms of Service Agreement + + + + diff --git a/imp/config/filter.txt.dist b/imp/config/filter.txt.dist new file mode 100644 index 000000000..29d364ba1 --- /dev/null +++ b/imp/config/filter.txt.dist @@ -0,0 +1,7 @@ +# $Horde: imp/config/filter.txt.dist,v 1.1 2000/09/15 02:20:37 jon Exp $ +# +# Enter a list of words that will be filtered. Only put one word on each +# line. Comments are allowed. A comment starts with a '#' and ends at the +# end of the line. +# +poop diff --git a/imp/config/header.php.dist b/imp/config/header.php.dist new file mode 100644 index 000000000..0c37d8093 --- /dev/null +++ b/imp/config/header.php.dist @@ -0,0 +1,22 @@ +getValue('signature'); +// if (preg_match('/%TAG%/', $sig)) { +// $tag = `cat /usr/share/tagline`; +// $sig = preg_replace('|%TAG%|', $tag, $sig); +// } +// return $sig; +// } +// } + +// Here is an example _imp_hook_postlogin function to redirect to a +// custom server after login. + +// if (!function_exists('_imp_hook_postlogin')) { +// function _imp_hook_postlogin($actionID, $isLogin) +// { +// header('Location: http://mail' . mt_rand(1, 9) . '.example.com/horde/'); +// exit; +// } +// } + +// This is an example for a post-sending hook that automatically prints all +// messages that have been sent successfully. + +// if (!function_exists('_imp_hook_postsent')) { +// function _imp_hook_postsent($message, $headers) +// { +// require_once IMP_BASE . '/lib/MIME/Contents.php'; +// require_once IMP_BASE . '/lib/UI/Message.php'; +// +// IMP::printMode(true); +// $contents = new IMP_Contents($message); +// $contents->showSummaryLinks(false); +// $contents->buildMessage(); +// $attachments = $contents->getAttachments(); +// $msgText = $contents->getMessage(); +// +// // @todo this is no longer good code. +// $imp_ui = new IMP_UI_Message(); +// $basic_headers = $imp_ui->basicHeaders(); +// $headers->setValueByFunction('date', array('nl2br', array($headers, 'addLocalTime'), 'htmlspecialchars')); +// if (($subject = $headers->getValue('subject'))) { +// $subject = IMP::filterText($subject); +// require_once 'Horde/Text.php'; +// $headers->setValue('subject', Text::htmlSpaces($subject)); +// } else { +// $headers->addHeader('Subject', _("[No Subject]")); +// } +// $headers->buildAddressLinks('from', null, true, false); +// foreach (array('to', 'cc', 'bcc') as $val) { +// $headers->buildAddressLinks($val, null, true, false); +// } +// if ($reply_to = $headers->buildAddressLinks('reply-to', null, false, false)) { +// if (!($from = $headers->getValue('from')) || ($from != $reply_to)) { +// $headers->setValue('Reply-to', $reply_to); +// } else { +// $headers->removeHeader('reply-to'); +// } +// } +// $hdrs = array(); +// foreach ($basic_headers as $head => $str) { +// if ($val = $headers->getValue($head)) { +// $hdrs[] = array('name' => $str, 'val' => $val, 'i' => 0); +// } +// } +// if ($val = $headers->getValue('priority')) { +// $hdrs[] = array('name' => _("Priority"), 'val' => $val, 'i' => 0); +// } +// if (!empty($attachments)) { +// $hdrs[] = array('name' => _("Part(s)"), 'val' => '' . $attachments . '
', 'i' => 0); +// } +// +// require_once IMP_BASE . '/lib/Template.php'; +// $template = new IMP_Template(); +// $template->set('headers', $hdrs); +// $template->set('msgtext', $msgText); +// $printer_friendly = true; +// require IMP_TEMPLATES . '/common-header.inc'; +// echo $template->fetch(IMP_TEMPLATES . '/message/message.html'); +// require $GLOBALS['registry']->get('templates', 'horde') . '/javascript/print.js'; +// require $GLOBALS['registry']->get('templates', 'horde') . '/common-footer.inc'; +// exit; +// } +// } + +// Here is an example _imp_hook_trailer function to set the trailer from the +// system taglines file; the string "@@TAG@@" (if present in a trailer) will be +// replaced by the content of the file "/usr/share/tagline" (generated by the +// "TaRT" utility). + +// if (!function_exists('_imp_hook_trailer')) { +// function _imp_hook_trailer($trailer) +// { +// if (preg_match('/@@TAG@@/', $trailer)) { +// $tag = `cat /usr/share/tagline`; +// $trailer = preg_replace('|@@TAG@@|', $tag, $trailer); +// } +// return $trailer; +// } +// } + +// Here is an another example _imp_hook_trailer function to set the trailer +// from the LDAP directory for each domain. This function replaces the current +// trailer with the data it gets from ispmanDomainSignature. + +// if (!function_exists('_imp_hook_trailer')) { +// function _imp_hook_trailer($trailer) +// { +// $vdomain = getenv('HTTP_HOST'); +// $vdomain = preg_replace('|^.*?\.|i', '', $vdomain); +// $vdomain = String::lower($vdomain); +// $ldapServer = 'localhost'; +// $ldapPort = '389'; +// $searchBase = 'ispmanDomain=' . $vdomain . ",o=ispman"; +// +// $ds = @ldap_connect($ldapServer, $ldapPort); +// $searchResult = @ldap_search($ds, $searchBase, 'uid=' . $vdomain); +// $information = @ldap_get_entries($ds, $searchResult); +// $trailer= $information[0]['ispmandomainsignature'][0]; +// ldap_close($ds); +// +// return $trailer; +// } +// } + +// Here is an example _imp_hook_vinfo function. +// +// If $type == 'username', this function returns a unique username composed of +// username + vdomain. $data is set to the username. +// +// If $type == 'vdomain', this function returns the HTTP_HOST variable after +// removing the 'mail.' subdomain. $data is null. +// +// ex. $HTTP_HOST = 'mail.mydomain.com', $username = 'myname': +// $vdomain = 'mydomain.com' +// $username = 'myname_mydomain_com' + +// if (!function_exists('_imp_hook_vinfo')) { +// function _imp_hook_vinfo($type = 'username', $data = null) +// { +// $vdomain = getenv('HTTP_HOST'); +// $vdomain = preg_replace('|^mail\.|i', '', $vdomain); +// $vdomain = String::lower($vdomain); +// +// switch ($type) { +// case 'username': +// return preg_replace('|\.|', '_', $data . '_' . $vdomain); +// +// case 'vdomain': +// return $vdomain; +// +// default: +// return PEAR::raiseError('invalid type: ' . $type); +// } +// } +// } + +// Here is an example of the _imp_hook_fetchmail_filter function to run +// SpamAssassin on email before it is written to the mailbox. +// Note: to use the spamassassin instead of spamd, change 'spamc' to +// 'spamassassin -P' and add any other important arguments, but realize spamc +// is MUCH faster than spamassassin. +// WARNING: Make sure to use the --noadd-from filter on spamd or spamassassin + +// if (!function_exists('_imp_hook_fetchmail_filter')) { +// function _imp_hook_fetchmail_filter($message) +// { +// // Where does SpamAssassin live, and what username should we use +// // for preferences? +// $cmd = '/usr/local/bin/spamc'; +// $username = Auth::getAuth(); +// // If you use the _sam_hook_username() hook, uncomment the next line +// //$username = _sam_hook_username($username); +// $username = escapeshellarg($username); +// +// // Also, we remove the file ourselves; this hook may be called +// // hundreds of times per run depending on how many messages we fetch +// $file = Horde::getTempFile('horde', false); +// +// // Call SpamAssassin; pipe the new message to our tempfile +// $fp = popen("$cmd -u $username > $file", 'w'); +// fwrite($fp, $message); +// pclose($fp); +// +// // Read the new message from the temporary file +// $message = file_get_contents($file); +// unlink($file); +// return $message; +// } +// } + +// Here is an example signature hook function to set the signature from the +// system taglines file; the string "%TAG%" (if present in a user's signature) +// will be replaced by the content of the file "/usr/share/tagline" (generated +// by the "TaRT" utility). + +// if (!function_exists('_imp_hook_signature')) { +// function _imp_hook_signature($sig) +// { +// if (preg_match('/%TAG%/', $sig)) { +// $tag = `cat /usr/share/tagline`; +// $sig = preg_replace('/%TAG%/', $tag, $sig); +// } +// +// return $sig; +// } +// } + +// This is an example hook function for displaying additional message +// information in the message listing screen for a mailbox. This example hook +// will add a icon if the message contains attachments and will change the +// display of the message entry based on the X-Priority header. + +// if (!function_exists('_imp_hook_msglist_format')) { +// function _imp_hook_msglist_format($mailbox, $uid) +// { +// // Required return (array): +// // 'class' - An array of CSS classnames that will be added to +// // the row. +// // 'flagbits' - An integer value which will be OR'd with the +// // current flags set for the row. The IMAP flag +// // constants used in IMP can be found at the top +// // of lib/IMP.php. +// // 'status' - HTML code to add to the status column for the row. +// $ret = array('class' => array(), 'flagbits' => 0, 'status' => ''); +// +// require_once IMP_BASE . '/lib/IMAP/MessageCache.php'; +// $cache = &IMP_MessageCache::singleton(); +// $cache_entry = $cache->retrieve($mailbox, array($uid), 8 | 32); +// $ob = reset($cache_entry); +// +// // Add attachment information +// require_once IMP_BASE . '/lib/UI/Mailbox.php'; +// $imp_ui = new IMP_UI_Mailbox(); +// if (($attachment = $imp_ui->getAttachmentType($ob->structure))) { +// $ret['status'] = Horde::img($attachment . '.png', $imp_ui->getAttachmentAlt($attachment), array('title' => $imp_ui->getAttachmentAlt($attachment))); +// } +// +// // Add xpriority information +// switch ($ob->header->getXpriority()) { +// case 'high': +// $ret['flagbits'] = IMP_FLAGGED; +// $ret['status'] .= Horde::img('mail_priority_high.png', _("High Priority"), array('title' => _("High Priority"))); +// $ret['class'][] = 'important'; +// break; +// +// case 'low': +// $ret['status'] .= Horde::img('mail_priority_low.png', _("Low Priority"), array('title' => _("Low Priority"))); +// $ret['class'][] = 'unimportant'; +// break; +// } +// +// return $ret; +// } +// } + +// This is an example hook function for the IMP redirection scheme. This +// function is called when the user opens a mailbox in IMP, and allows the +// client to be redirected based on the mailbox name. The return value of this +// function should be a valid page within a horde application which will be +// placed in a "Location" header to redirect the client. The only parameter +// is the name of the mailbox which the user has opened. If an empty string +// is returned the user is not redirected. + +// if (!function_exists('_imp_hook_mbox_redirect')) { +// function _imp_hook_mbox_redirect($mailbox) +// { +// require_once 'Horde/Kolab.php'; +// +// if (strpos($mailbox, "INBOX/Calendar") !== false +// || preg_match("!^user/[^/]+/Calendar!", $mailbox)) { +// return $GLOBALS['registry']->get('webroot', 'kronolith'); +// } elseif (strpos($mailbox, "INBOX/Tasks") !== false +// || preg_match("!^user/[^/]+/Tasks!", $mailbox)) { +// return $GLOBALS['registry']->get('webroot', 'nag'); +// } elseif (strpos($mailbox, "INBOX/Notes") !== false +// || preg_match("!^user/[^/]+/Notes!", $mailbox)) { +// return $GLOBALS['registry']->get('webroot', 'mnemo'); +// } elseif (strpos($mailbox, "INBOX/Contacts") !== false +// || preg_match("!^user/[^/]+/Contacts!", $mailbox)) { +// return $GLOBALS['registry']->get('webroot', 'turba'); +// } +// +// return ''; +// } +// } + +// This is an example hook function for the IMP mailbox icon scheme. This +// function is called when the folder list is created and a "standard" folder +// is to be displayed - it allows custom folder icons to be specified. +// ("Standard" means all folders except the INBOX, sent-mail folders and +// trash folders.) +// If a mailbox name doesn't appear in the below list, the default mailbox +// icon is displayed. +// Note that in IMP 4.2.x, the expected return value from this hook has +// changed. See the below examples for more information. + +// if (!function_exists('_imp_hook_mbox_icons')) { +// function _imp_hook_mbox_icons() +// { +// static $newmailboxes; +// +// if (!empty($newmailboxes)) { +// return $newmailboxes; +// } +// +// require_once 'Horde/Kolab.php'; +// +// $kc = new Kolab_Cyrus($GLOBALS['conf']['kolab']['server']); +// $mailboxes = $kc->listMailBoxes(); +// $newmailboxes = array(); +// +// foreach ($mailboxes as $box) { +// $box = preg_replace("/^{[^}]+}/", "", $box); +// if (strpos($box, "INBOX/Calendar") !== false +// || preg_match("!^user/[^/]+/Calendar!", $box)) { +// $newmailboxes[$box] = Horde::img( +// $GLOBALS['registry']->get('icon', 'kronolith'), +// _("Calendar"), +// 'width="16" height="16" style="vertical-align:middle"', +// '' +// ); +// // Use this example for IMP 4.2.x+. +// // $newmailboxes[$box] = array( +// // 'icon' => 'kronolith.png', +// // 'icondir' => $GLOBALS['registry']->getImageDir('kronolith') +// // 'alt' => _("Calendar") +// // ); +// } elseif (strpos($box, "INBOX/Tasks") !== false +// || preg_match("!^user/[^/]+/Tasks!", $box)) { +// $newmailboxes[$box] = Horde::img( +// $GLOBALS['registry']->get('icon', 'nag'), +// _("Tasks"), +// 'width="16" height="16" style="vertical-align:middle"', +// '' +// ); +// // Use this example for IMP 4.2.x+. +// // $newmailboxes[$box] = array( +// // 'icon' => 'nag.png', +// // 'icondir' => $GLOBALS['registry']->getImageDir('nag') +// // 'alt' => _("Tasks") +// // ); +// } elseif (strpos($box, "INBOX/Notes") !== false +// || preg_match("!^user/[^/]+/Notes!", $box)) { +// $newmailboxes[$box] = Horde::img( +// $GLOBALS['registry']->get('icon', 'mnemo'), +// _("Notes"), +// 'width="16" height="16" style="vertical-align:middle"', +// '' +// ); +// // Use this example for IMP 4.2.x+. +// // $newmailboxes[$box] = array( +// // 'icon' => 'mnemo.png', +// // 'icondir' => $GLOBALS['registry']->getImageDir('mnemo') +// // 'alt' => _("Notes") +// // ); +// } elseif (strpos($box, "INBOX/Contacts") !== false +// || preg_match("!^user/[^/]+/Contacts!", $box)) { +// $newmailboxes[$box] = Horde::img( +// $GLOBALS['registry']->get('icon', 'turba'), +// _("Contacts"), +// 'width="16" height="16" style="vertical-align:middle"', +// '' +// ); +// // Use this example for IMP 4.2.x+. +// // $newmailboxes[$box] = array( +// // 'icon' => 'turba.png', +// // 'icondir' => $GLOBALS['registry']->getImageDir('turba') +// // 'alt' => _("Contacts") +// // ); +// } +// } +// +// return $newmailboxes; +// } +// } + +// This is an example hook function to set a mailbox read-only. If the hook +// returns true, the given mailbox will be marked read only. + +// if (!function_exists('_imp_hook_mbox_readonly')) { +// function _imp_hook_mbox_readonly($mailbox) +// { +// // Make messages in the 'foo' mailbox readonly. +// return ($mailbox == 'foo'); +// } +// } + +// This is an example hook function to disable composing messages. If the hook +// returns true, message composition will be disabled. + +// if (!function_exists('_imp_hook_disable_compose')) { +// function _imp_hook_disable_compose() +// { +// // Entirely disable composition. +// return false; +// } +// } + +// This is an example hook function for the IMP spam reporting bounce option. +// This function is called when the message is about to be bounced - it +// will return the email address to bounce to. This is handy for spam +// reporting software (e.g. DSPAM) which has different e-mail aliases for +// spam reporting for each user. + +// if (!function_exists('_imp_hook_spam_bounce')) { +// function _imp_hook_spam_bounce($action) +// { +// $prefix = ($action == 'spam') ? 'spam-' : 'fp-'; +// return $prefix . Auth::getBareAuth() . '@example.com'; +// } +// } + +// Default Kolab hooks: +if (!empty($GLOBALS['conf']['kolab']['enabled'])) { + require_once 'Horde/Kolab.php'; + if (!function_exists('_imp_hook_mbox_redirect')) { + function _imp_hook_mbox_redirect($mailbox) + { + switch (Kolab::getMailboxType($mailbox)) { + case 'event': + return $GLOBALS['registry']->get('webroot', 'kronolith'); + + case 'task': + return $GLOBALS['registry']->get('webroot', 'nag'); + + case 'note': + return $GLOBALS['registry']->get('webroot', 'mnemo'); + + case 'contact': + return $GLOBALS['registry']->get('webroot', 'turba'); + + case 'prefs': + return $GLOBALS['registry']->get('webroot', 'horde') . '/services/prefs.php?app=horde'; + + default: + return ''; + } + } + + function _imp_hook_mbox_icons() + { + static $icons; + + if (!empty($icons)) { + return $icons; + } + + $folders = Kolab::listFolders(); + $icons = array(); + foreach ($folders as $folder) { + $name = preg_replace('/^{[^}]+}/', '', $folder[0]); + + switch ($folder[1]) { + case 'event': + $icons[$name] = array( + 'icon' => 'kronolith.png', + 'icondir' => $GLOBALS['registry']->getImageDir('kronolith'), + 'alt' => _("Calendar") + ); + break; + + case 'task': + $icons[$name] = array( + 'icon' => 'nag.png', + 'icondir' => $GLOBALS['registry']->getImageDir('nag'), + 'alt' => _("Tasks") + ); + break; + + case 'note': + $icons[$name] = array( + 'icon' => 'mnemo.png', + 'icondir' => $GLOBALS['registry']->getImageDir('mnemo'), + 'alt' => _("Notes") + ); + break; + + case 'contact': + $icons[$name] = array( + 'icon' => 'turba.png', + 'icondir' => $GLOBALS['registry']->getImageDir('turba'), + 'alt' => _("Contacts") + ); + break; + + case 'prefs': + $icons[$name] = array( + 'icon' => 'prefs.png', + 'icondir' => $GLOBALS['registry']->getImageDir('horde'), + 'alt' => _("Preferences") + ); + break; + } + } + + return $icons; + } + } +} + +// Sample function for returning the quota. Uses the PECL ssh2 +// extension. +// +// @param array $params Parameters for the function, set in servers.php +// +// @return array Tuple with two members: +// first: disk space used (in bytes) +// second: maximum disk space (in bytes) +// In case of an error, return PEAR::raiseError() +if (!function_exists('_imp_hook_quota')) { + function _imp_hook_quota($params = null) + { + $host = $_SESSION['imp']['server']; + $user = $_SESSION['imp']['user']; + $pass = Auth::getCredential('password'); + $command = $params[0]; + + $session = ssh2_connect($host); + if (!$session) { + return PEAR::raiseError(_("Connection to server failed."), 'horde.error'); + } + + if (!ssh2_auth_password($session, $user, $pass)) { + return PEAR::raiseError(_("Authentication failed."), 'horde.error'); + } + + $stream = ssh2_exec($session, $command, false); + stream_set_blocking($stream, true); + + $quota = preg_split('/\s+/', trim(stream_get_contents($stream)), 2); + return array($quota[1] * 1024, $quota[2] * 1024); + } +} diff --git a/imp/config/menu.php.dist b/imp/config/menu.php.dist new file mode 100644 index 000000000..c98e19a31 --- /dev/null +++ b/imp/config/menu.php.dist @@ -0,0 +1,41 @@ + 'http://www.example.com/', + * 'text' => 'Example, Inc.', + * 'icon' => 'example.png', + * 'icon_path' => 'http://www.example.com/images/', + * 'target' => '_blank', + * 'onclick' => '' + * ); + * + * You can also add a "separator" (a spacer) between menu items. To add a + * separator, simply add a new string to the $_menu array set to the text + * 'separator'. It should look like this: + * + * $_menu[] = 'separator'; + */ + +$_menu = array(); + +/* Add your custom entries below this line. */ diff --git a/imp/config/mime_drivers.php.dist b/imp/config/mime_drivers.php.dist new file mode 100644 index 000000000..01e03c0ca --- /dev/null +++ b/imp/config/mime_drivers.php.dist @@ -0,0 +1,291 @@ + true, + 'handles' => array('text/plain', 'text/rfc822-headers', 'application/pgp'), + /* If you want to scan ALL incoming messages for UUencoded data, set the + * following to true. This is very performance intensive and can take a + * long time for large messages. It is not recommended and is disabled by + * default. */ + 'uuencode' => false, + /* If you want to limit the display of message data inline for large + * messages, set the maximum size of the displayed message here (in + * bytes). If exceeded, the user will only be able to download the part. + * Set to 0 to disable this check. */ + 'limit_inline_size' => 1048576 +); + +/** + * HTML driver settings + */ +$mime_drivers['imp']['html'] = array( + 'inline' => false, + 'handles' => array( + 'text/html' + ), + 'icons' => array( + 'default' => 'html.png' + ), + /* If you don't want to display the link to open the HTML content in a + * separate window, set the following to false. */ + 'external' => true, + /* Run 'tidy' on all HTML output? This requires at least version 2.0 of the + * PECL 'tidy' extension to be installed on your system. */ + 'tidy' => false, + /* Check for phishing exploits? */ + 'phishing_check' => true +); + +/** + * Default smil driver settings + */ +$mime_drivers['imp']['smil'] = array( + 'inline' => true, + 'handles' => array( + 'application/smil' + ) +); + +/** + * Image driver settings + */ +$mime_drivers['imp']['images'] = array( + 'inline' => true, + 'handles' => array( + 'image/*' + ), + 'icons' => array( + 'default' => 'image.png' + ), + /* Display thumbnails for all images, not just large images? */ + 'allthumbs' => true +); + +/** + * Enriched text driver settings + */ +$mime_drivers['imp']['enriched'] = array( + 'inline' => true, + 'handles' => array( + 'text/enriched' + ), + 'icons' => array( + 'default' => 'text.png' + ) +); + +/** + * PDF settings + */ +$mime_drivers['imp']['pdf'] = array( + 'inline' => false, + 'handles' => array( + 'application/pdf', 'image/pdf' + ), + 'icons' => array( + 'default' => 'pdf.png' + ) +); + +/** + * PGP settings + */ +$mime_drivers['imp']['pgp'] = array( + 'inline' => true, + 'handles' => array( + 'application/pgp-encrypted', 'application/pgp-keys', + 'application/pgp-signature' + ), + 'icons' => array( + 'default' => 'encryption.png' + ) +); + +/** + * PKCS7 settings (S/MIME) + */ +$mime_drivers['imp']['pkcs7'] = array( + 'inline' => true, + 'handles' => array( + 'application/x-pkcs7-signature', 'application/x-pkcs7-mime', + 'application/pkcs7-signature', 'application/pkcs7-mime' + ), + 'icons' => array( + 'default' => 'encryption.png' + ) +); + +/** + * Digest message (message/rfc822) settings + */ +$mime_drivers['imp']['rfc822'] = array( + 'inline' => false, + 'handles' => array( + 'message/rfc822' + ), + 'icons' => array( + 'default' => 'mail.png' + ) +); + +/** + * Zip File Attachments settings + */ +$mime_drivers['imp']['zip'] = array( + 'inline' => false, + 'handles' => array( + 'application/zip', 'application/x-compressed', + 'application/x-zip-compressed' + ), + 'icons' => array( + 'default' => 'compressed.png' + ) +); + +/** + * Delivery Status messages settings + */ +$mime_drivers['imp']['status'] = array( + 'inline' => true, + 'handles' => array( + 'message/delivery-status' + ) +); + +/** + * Disposition Notification message settings + */ +$mime_drivers['imp']['notification'] = array( + 'inline' => true, + 'handles' => array( + 'message/disposition-notification' + ) +); + +/** + * multipart/appledouble settings + */ +$mime_drivers['imp']['appledouble'] = array( + 'inline' => true, + 'handles' => array( + 'multipart/appledouble' + ) +); + +/** + * iCalendar Transport-Independent Interoperability Protocol + */ +$mime_drivers['imp']['itip'] = array( + 'inline' => true, + 'handles' => array( + 'text/calendar', 'text/x-vcalendar' + ), + 'icons' => array( + 'default' => 'itip.png' + ) +); + +/** + * multipart/alternative settings + * YOU SHOULD NOT NORMALLY ALTER THIS SETTING. + */ +$mime_drivers['imp']['alternative'] = array( + 'inline' => true, + 'handles' => array( + 'multipart/alternative' + ) +); + +/** + * multipart/related settings + * YOU SHOULD NOT NORMALLY ALTER THIS SETTING. + */ +$mime_drivers['imp']['related'] = array( + 'inline' => true, + 'handles' => array( + 'multipart/related' + ), + 'icons' => array( + 'default' => 'html.png' + ) +); + +/** + * message/partial settings + * YOU SHOULD NOT NORMALLY ALTER THIS SETTING. + */ +$mime_drivers['imp']['partial'] = array( + 'inline' => true, + 'handles' => array( + 'message/partial' + ) +); + +/** + * MS-TNEF Attachment (application/ms-tnef) settings + * YOU SHOULD NOT NORMALLY ALTER THIS SETTING. + */ +$mime_drivers['imp']['tnef'] = array( + 'inline' => false, + 'handles' => array( + 'application/ms-tnef' + ), + 'icons' => array( + 'default' => 'binary.png' + ) +); diff --git a/imp/config/motd.php.dist b/imp/config/motd.php.dist new file mode 100644 index 000000000..c9d143ff3 --- /dev/null +++ b/imp/config/motd.php.dist @@ -0,0 +1,41 @@ + + + + + * To use, unncomment and modify these variables: + * + * $SERVER_SSL_PORT - Port on which your SSL server listens (Usually 443) + * $SERVER_HTTP_PORT - Port on which your HTTP server listens (Usually 80) + * $SERVER_SSL_URL - Full URL to your HTTPS server and Horde directory + * $SERVER_HTTP_URL - Full URL to your HTTP server and Horde directory + */ + +// $SERVER_SSL_PORT = 443; +// $SERVER_HTTP_PORT = 80; +// $SERVER_SSL_URL = 'https://www.example.com'; +// $SERVER_HTTP_URL = 'http://www.example.com'; +// +// $port = $_SERVER['SERVER_PORT']; +// +// echo '
'; +// +// switch ($port) { +// case $SERVER_SSL_PORT: +// echo _("You are currently using Secure HTTPS
"); +// break; +// +// case $SERVER_HTTP_PORT: +// echo _("You are currently using Standard HTTP
"); +// break; +// } +// +// echo '' . _("Click here for Standard HTTP") . ' - ' . _("Click here for Secure HTTPS") . '
'; + +?> +
+
getImageDir('horde')) ?>
diff --git a/imp/config/prefs.php.dist b/imp/config/prefs.php.dist new file mode 100644 index 000000000..323cca4eb --- /dev/null +++ b/imp/config/prefs.php.dist @@ -0,0 +1,1453 @@ + _("General Options"), + 'label' => _("Personal Information"), + 'desc' => _("Change the name, address, and signature that people see when they read and reply to your email."), + 'members' => array('replyto_addr', 'alias_addr', 'tieto_addr', 'bcc_addr', + 'signature', 'sig_dashes', 'sig_first', + 'save_sent_mail', 'sent_mail_folder', 'sentmailselect') +); + +if (!$is_pop3) { + $prefGroups['server'] = array( + 'column' => _("General Options"), + 'label' => _("Server and Folder Information"), + 'desc' => _("Change mail server and folder settings."), + 'members' => array('use_vinbox', 'subscribe', 'folderselect', + 'trashselect', 'spamselect') + ); +} + +if (!empty($_SESSION['imp']['acl'])) { + $prefGroups['acl'] = array( + 'column' => _("General Options"), + 'label' => _("Share Folders"), + 'desc' => _("Share your mail folders with other users."), + 'url' => 'acl.php' + ); +} + +$prefGroups['logintasks'] = array( + 'column' => _("General Options"), + 'label' => _("Login Tasks"), + 'desc' => sprintf(_("Customize tasks to run upon logon to %s."), $GLOBALS['registry']->get('name')), + 'members' => array() +); +if (!$is_pop3) { + $prefGroups['logintasks']['members'] = array_merge( + $prefGroups['logintasks']['members'], + array('initialpageselect', 'rename_sentmail_monthly', + 'delete_sentmail_monthly', 'delete_sentmail_monthly_keep', + 'purge_sentmail', 'purge_sentmail_interval', + 'purge_sentmail_keep', 'purge_trash', 'purge_trash_interval', + 'purge_trash_keep', 'purge_spam', 'purge_spam_interval', + 'purge_spam_keep')); +} +$prefGroups['logintasks']['members'] = array_merge( + $prefGroups['logintasks']['members'], + array('delete_attachments_monthly', 'delete_attachments_monthly_keep')); + +$prefGroups['compose'] = array( + 'column' => _("Message Options"), + 'label' => _("Message Composition"), + 'desc' => _("Customize how you send mail."), + 'members' => array('stationery_link', 'mailto_handler', 'compose_cc', + 'compose_bcc', 'compose_spellcheck', 'compose_confirm', + 'set_priority', 'compose_popup', 'compose_html', + 'fckeditor_buttons', 'mail_domain', + 'compose_cursor', 'sending_charset', 'encryptselect', + 'save_attachments') +); + +if (!empty($GLOBALS['conf']['compose']['allow_receipts'])) { + $prefGroups['compose']['members'] = array_merge($prefGroups['compose']['members'], array('disposition_request_read')); +} + +$prefGroups['reply_forward'] = array( + 'column' => _("Message Options"), + 'label' => _("Message Replies/Forwards"), + 'desc' => _("Customize how you reply to or forward mail."), + 'members' => array('reply_quote', 'reply_format', 'forward_default', + 'forward_bodytext', 'reply_headers', 'attrib_text') +); + +$prefGroups['drafts'] = array( + 'column' => _("Message Options"), + 'label' => _("Message Drafts"), + 'desc' => _("Customize how to deal with message drafts."), + 'members' => array('folderselect', 'close_draft', 'unseen_drafts', + 'auto_delete_drafts') +); + +$prefGroups['viewing'] = array( + 'column' => _("Message Options"), + 'label' => _("Message Viewing"), + 'desc' => _("Configure how messages are displayed."), + 'members' => array('filtering', 'strip_attachments', + 'html_image_replacement', 'html_image_addrbook', + 'highlight_text', 'highlight_simple_markup', + 'show_quoteblocks', 'dim_signature', 'emoticons', + 'attachment_display', 'mail_hdr', 'default_msg_charset', + 'alternative_display') +); +if (!empty($GLOBALS['conf']['maillog']['use_maillog'])) { + $prefGroups['viewing']['members'] = array_merge($prefGroups['viewing']['members'], array('disposition_send_mdn')); +} + +$prefGroups['delmove'] = array( + 'column' => _("Message Options"), + 'label' => _("Deleting and Moving Messages"), + 'desc' => _("Set preferences for what happens when you move and delete messages."), + 'members' => array('mailbox_return', 'delete_spam_after_report', + 'empty_spam_menu') +); +if (!$is_pop3) { + $prefGroups['delmove']['members'] = array_merge( + $prefGroups['delmove']['members'], + array('use_trash', 'trashselect', 'use_vtrash', 'empty_trash_menu')); +} + +$prefGroups['newmail'] = array( + 'column' => _("Message Options"), + 'label' => _("New Mail"), + 'desc' => _("Control when new mail will be checked for, and whether or not to notify you when it arrives."), + 'members' => array('refresh_time', 'nav_poll_all', 'nav_popup', 'soundselect') +); + +if (!empty($GLOBALS['conf']['mailbox']['show_preview'])) { + $prefGroups['mailpreview'] = array( + 'column' => _("Message Options"), + 'label' => _("Mail Previews"), + 'desc' => _("Configure mail preview options."), + 'members' => array('preview_enabled', 'preview_maxlen', 'preview_strip_nl', 'preview_show_unread', 'preview_show_tooltip') + ); +} + +if (!$is_pop3) { + $prefGroups['fetchmail'] = array( + 'column' => _("Message Options"), + 'label' => _("Fetch Mail"), + 'desc' => _("Customize accounts for fetching mail from other accounts."), + 'members' => array('fetchmail_link', 'fetchmail_popup', + 'fetchmail_menu') + ); +} + +$prefGroups['display'] = array( + 'column' => _("Other Options"), + 'label' => _("Mailbox and Folder Display Options"), + 'desc' => _("Change display options such as how many messages you see on each page and how messages are sorted."), + 'members' => array('mailbox_start', 'sortby', 'sortdir', 'max_msgs', + 'from_link', 'time_format') +); +if (!$is_pop3) { + $prefGroups['display']['members'] = array_merge( + $prefGroups['display']['members'], + array('nav_expanded', 'tree_view', 'nav_expanded_sidebar')); +} + +$prefGroups['filters'] = array( + 'column' => _("Other Options"), + 'label' => _("Filters"), + 'desc' => _("Create filtering rules to organize your incoming mail, sort it into folders, and delete spam."), + 'url' => 'filterprefs.php' +); + +$prefGroups['addressbooks'] = array( + 'column' => _("Other Options"), + 'label' => _("Address Books"), + 'desc' => _("Select address book sources for adding and searching for addresses."), + 'members' => array('save_recipients', 'display_contact', 'sourceselect') +); + +if (isset($GLOBALS['conf']['utils']['gnupg'])) { + $prefGroups['pgp'] = array( + 'column' => _("Other Options"), + 'label' => _("PGP Options"), + 'desc' => sprintf(_("Control PGP support for %s."), $GLOBALS['registry']->get('name')), + 'url' => 'pgp.php' + ); +} + +if (Util::extensionExists('openssl') && isset($GLOBALS['conf']['utils']['openssl_binary'])) { + $prefGroups['smime'] = array( + 'column' => _("Other Options"), + 'label' => _("S/MIME Options"), + 'desc' => sprintf(_("Control S/MIME support for %s."), $GLOBALS['registry']->get('name')), + 'url' => 'smime.php' + ); +} + +// Personal Information preferences + +// user preferred email address for Reply-To:, if different from From: +$_prefs['replyto_addr'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'text', + 'desc' => _("Your Reply-to: address: (optional)")); + +// user preferred alias addresses +$_prefs['alias_addr'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("Your alias addresses: (optional, enter each address on a new line)")); + +// user preferred 'tie to' addresses +$_prefs['tieto_addr'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("Addresses to explicitly tie to this identity: (optional, enter each address on a new line)")); + +// Automatically Bcc addresses when composing +$_prefs['bcc_addr'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("Addresses to BCC all messages: (optional, enter each address on a new line)")); + +// user signature +$_prefs['signature'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("Your signature:")); + +// precede the signature with dashes ('-- ')? +$_prefs['sig_dashes'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Precede your signature with dashes ('-- ')?")); + +// signature before replies and forwards? +$_prefs['sig_first'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Place your signature before replies and forwards?")); + +// save a copy of sent messages? +$_prefs['save_sent_mail'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Save sent mail?")); + +// sent mail folder +$_prefs['sent_mail_folder'] = array( + // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC + // 3501 [5.1.3]). For Exchange, uncomment the entry below and remove the + // default value entry. + // 'value' => 'Sent Items', + 'value' => _("Sent"), + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// sent mail folder selection widget. includes some javascript, so it's +// specific to IMP. +$_prefs['sentmailselect'] = array('type' => 'special'); + +// End Personal Information preferences + + +// Server and Folder Information preferences + +// display Virtual INBOX? +$_prefs['use_vinbox'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Display Virtual Inbox?")); + +// use IMAP subscribe? +$_prefs['subscribe'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Use IMAP folder subscriptions?")); + +// drafts folder selection widget. includes some javascript, so it's specific +// to IMP. +$_prefs['folderselect'] = array('type' => 'special'); + +// drafts folder +$_prefs['drafts_folder'] = array( + // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC + // 3501 [5.1.3]). + 'value' => _("Drafts"), + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// trash folder selection widget. includes some javascript, so it's +// specific to IMP. +$_prefs['trashselect'] = array('type' => 'special'); + +// trash folder +$_prefs['trash_folder'] = array( + // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC + // 3501 [5.1.3]). For Exchange, uncomment the entry below and remove the + // default value entry. + // 'value' => 'Deleted Items', + 'value' => _("Trash"), + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// spam folder selection widget. includes some javascript, so it's +// specific to IMP. +$_prefs['spamselect'] = array('type' => 'special'); + +// spam folder +$_prefs['spam_folder'] = array( + // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC + // 3501 [5.1.3]). + 'value' => _("Spam"), + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['vfolder'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Server and Folder Information preferences + + +// Folder sharing preferences + +// folder sharing options +// set 'locked' => true to disable folder sharing +$_prefs['acl'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End folder sharing preferences + + +// Login/Maintenance Tasks preferences + +// select widget for the initial_page preference +$_prefs['initialpageselect'] = array('type' => 'special'); + +// the page to display. Either a filename like 'folders.php' +// or a mailbox name. +$_prefs['initial_page'] = array( + 'value' => 'INBOX', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// rename sent-mail folder every month? +$_prefs['rename_sentmail_monthly'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Rename sent-mail folder at beginning of month?"), + 'help' => 'prefs-rename_sentmail_monthly'); + +// delete sent-mail folders every month? +$_prefs['delete_sentmail_monthly'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Delete old sent-mail folders at beginning of month?"), + 'help' => 'prefs-delete_sentmail_monthly'); + +// how many old sent-mail folders to keep every month? +$_prefs['delete_sentmail_monthly_keep'] = array( + 'value' => 12, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Number of old sent-mail folders to keep if deleting monthly."), + 'help' => 'prefs-delete_sentmail_monthly_keep'); + +// purge sent-mail folder? +$_prefs['purge_sentmail'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Purge old messages in the sent-mail folder(s)?"), + 'help' => 'prefs-purge_sentmail'); + +// how often to purge the Sent-Mail folder? +// 'value': yearly = 1, monthly = 2, weekly = 3, daily = 4, every login = 5 +$_prefs['purge_sentmail_interval'] = array( + 'value' => '2', + 'locked' => false, + 'shared' => false, + 'type' => 'select', + 'desc' => _("Purge sent-mail how often:"), + 'help' => 'prefs-purge_sentmail_interval'); + +// when purging sent-mail folder, purge messages older than how many days? +$_prefs['purge_sentmail_keep'] = array( + 'value' => 30, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Purge messages in sent-mail folder(s) older than this amount of days."), + 'help' => 'prefs-purge_sentmail_keep'); + +// purge old attachments every month? +$_prefs['delete_attachments_monthly'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Delete old linked attachments at beginning of month?"), + 'help' => 'prefs-delete_attachments_monthly'); + +// how many old months of attachments to keep? +$_prefs['delete_attachments_monthly_keep'] = array( + 'value' => 6, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Number of months to keep old linked attachments if deleting monthly."), + 'help' => 'prefs-delete_attachments_monthly_keep'); + +// purge Spam folder? +$_prefs['purge_spam'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Purge old messages in the Spam folder?"), + 'help' => 'prefs-purge_spam'); + +// how often to purge the Spam folder? +// 'value': yearly = 1, monthly = 2, weekly = 3, daily = 4, every login = 5 +$_prefs['purge_spam_interval'] = array( + 'value' => '2', + 'locked' => false, + 'shared' => false, + 'type' => 'select', + 'desc' => _("Purge Spam how often:"), + 'help' => 'prefs-purge_spam_interval'); + +// when purging Spam folder, purge messages older than how many days? +$_prefs['purge_spam_keep'] = array( + 'value' => 30, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Purge messages in Spam folder older than this amount of days."), + 'help' => 'prefs-purge_spam_keep'); + +// purge Trash folder? +$_prefs['purge_trash'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Purge old messages in the Trash folder?"), + 'help' => 'prefs-purge_trash'); + +// how often to purge the Trash folder? +// 'value': yearly = 1, monthly = 2, weekly = 3, daily = 4, every login = 5 +$_prefs['purge_trash_interval'] = array( + 'value' => '2', + 'locked' => false, + 'shared' => false, + 'type' => 'select', + 'desc' => _("Purge Trash how often:"), + 'help' => 'prefs-purge_trash_interval'); + +// when purging Trash folder, purge messages older than how many days? +$_prefs['purge_trash_keep'] = array( + 'value' => 30, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Purge messages in Trash folder older than this amount of days."), + 'help' => 'prefs-purge_trash_keep'); + +// show tos agreement? +$_prefs['tos_agreement'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Login/Maintenance preferences + + +// Message Composition preferences + +// Link to the stationery preferences. +$_prefs['stationery_link'] = array( + 'type' => 'link', + 'url' => 'stationery.php', + 'desc' => _("To the stationery and form responses.")); + +$_prefs['stationery'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// Link to add a Firefox 3 mailto: handler +$_prefs['mailto_handler'] = array( + 'type' => 'link', + 'xurl' => 'javascript:if(typeof navigator.registerProtocolHandler==\'undefined\')alert(\'' + . addslashes(_("Your browser does not support this feature.")) + . '\');else navigator.registerProtocolHandler(\'mailto\',\'' + . Util::addParameter(Horde::applicationUrl('compose.php', true), + array('actionID' => 'mailto_link', 'to' => ''), false) + . '%s\',\'' . $GLOBALS['registry']->get('name') . '\');', + 'desc' => sprintf(_("Click here to open all mailto: links in %s."), $GLOBALS['registry']->get('name'))); + +// Show Cc: field? +$_prefs['compose_cc'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show the Cc: header field when composing mail?") +); + +// Show Bcc: field? +$_prefs['compose_bcc'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show the Bcc: header field when composing mail?") +); + +// Check spelling before sending the message? +$_prefs['compose_spellcheck'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Check spelling before sending a message?")); + +// confirm successful sending of messages? +$_prefs['compose_confirm'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Display confirmation after sending a message?")); + +// allow the user to add a "X-Priority" header when composing messages? +$_prefs['set_priority'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Set the X-Priority header when composing messages?")); + +// compose in a separate window? +$_prefs['compose_popup'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Compose messages in a separate window?") +); + +// If browser supports the HTML editor, should we compose in HTML mode by +// default? +$_prefs['compose_html'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Compose messages with an HTML GUI by default (if browser supports the feature)?") +); + +// The list of buttons to show in FCKeditor +$_prefs['fckeditor_buttons'] = array( + 'value' => "[['FontFormat','FontName','FontSize'],['Bold','Italic','Underline'],['TextColor','BGColor'],'/',['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],['OrderedList','UnorderedList','Outdent','Indent'],['Link'],['Undo','Redo']]", + 'locked' => true, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("The buttons to show when using the HTML editor.") +); + +// default outgoing mail domain and address completion +$_prefs['mail_domain'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'text', + 'desc' => _("When sending mail or expanding addresses, what domain should we append to unqualified addresses (email addresses without \"@\")?")); + +// Where should the cursor be located in the compose text area by default? +$_prefs['compose_cursor'] = array( + 'value' => 'top', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('top' => _("Top"), + 'bottom' => _("Bottom"), + 'sig' => _("Before Signature")), + 'desc' => _("Where should the cursor be located in the compose text area by default?") +); + +// Select widget for the possible charsets +$_prefs['sending_charset'] = array( + 'value' => '', + 'locked' => false, + 'shared' => true, + 'type' => 'enum', + 'enum' => array_merge(array('' => _("Default")), + $GLOBALS['nls']['encodings']), + 'desc' => _("Your default charset for sending messages:")); + +// Select widget for the 'default_encrypt' preference +$_prefs['encryptselect'] = array('type' => 'special'); + +// The default encryption method to use when sending messages +$_prefs['default_encrypt'] = array( + 'value' => IMP::ENCRYPT_NONE, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// Save attachments when saving in sent-mail folder? +$_prefs['save_attachments'] = array( + 'value' => 'prompt_no', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('always' => _("Always save attachments"), + 'prompt_yes' => _("Prompt every time an attachment is sent; default to YES"), + 'prompt_no' => _("Prompt every time an attachment is sent; default to NO"), + 'never' => _("Never save attachments")), + 'desc' => _("When saving sent-mail, should we save attachment data?"), + 'help' => 'prefs-save_attachments'); + +// Disposition Notification Preferences +$_prefs['disposition_request_read'] = array( + 'value' => 'ask', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('never' => _("Never"), + 'ask' => _("Ask"), + 'always' => _("Always")), + 'desc' => _("Request read receipts?"), + 'help' => 'prefs-disposition_request_read' +); + +// End Message Composition preferences + + +// Message Replies/Forwards preferences + +// Should the original message be included? +$_prefs['reply_quote'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Include original message in a reply?")); + +// When replying/forwarding to a message, should we use the same format as the +// original message? +$_prefs['reply_format'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("When replying/forwarding to a message, should we use the same format as the original message?")); + +// What should the default forward method be? +$_prefs['forward_default'] = array( + 'value' => 'forward_all', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('forward_all' => _("Entire Message"), + 'forward_body' => _("Body Text Only"), + 'forward_attachments' => _("Body Text with Attachments")), + 'desc' => _("Default forwarding method:"), + 'help' => 'message-forward'); + +// Should the original message be included? +$_prefs['forward_bodytext'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Include body text in forward message by default?")); + +// Reply to header summary - leave a brief summary of the header inside +// the message. +$_prefs['reply_headers'] = array( + 'desc' => _("Include a brief summary of the header in a reply?"), + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox'); + +// How should we attribute quoted lines in a reply +$_prefs['attrib_text'] = array( + 'value' => _("Quoting %f:"), + 'locked' => false, + 'shared' => false, + 'type' => 'text', + 'desc' => _("How to attribute quoted lines in a reply"), + 'help' => 'prefs-attrib_text'); + +// End Message Replies/Forwards preferences + + +// Message Drafts preferences + +// closing window after saving a draft? +$_prefs['close_draft'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Should the compose window be closed after saving a draft?")); + +// save drafts as seen or unseen +$_prefs['unseen_drafts'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Save drafts as unseen?")); + +// auto-save drafts? value is in minutes, 0 == don't save. +// Only works w/DIMP - does not show in prefs screen by default +$_prefs['auto_save_drafts'] = array( + 'value' => 5, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("No"), + 5 => _("Every 5 minutes")), + 'desc' => _("Save drafts automatically while composing?"), +); + +// delete draft after resume & send? +$_prefs['auto_delete_drafts'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Automatically delete draft after successfully resuming and sending message?") +); + +// End Message Drafts preferences + + +// Message Viewing preferences + +// filter message content? +$_prefs['filtering'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Filter message content for profanity?")); + +// Should we display an icon to strip attachments? +$_prefs['strip_attachments'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show an icon to allow stripping of attachments from messages?")); + +// What should we do with spam messages after reporting them? +$_prefs['delete_spam_after_report'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Nothing"), + 1 => _("Delete spam messages")), + 'desc' => _("What should we do with spam messages after they have been reported as spam or innocent?"), + 'help' => 'prefs-delete_spam_after_report' +); +if (!$is_pop3) { + $_prefs['delete_spam_after_report']['enum'][2] = + _("Move spam messages to spam folder and innocent messages to INBOX"); +} + +// Replace image tags in HTML messages with blank images? +$_prefs['html_image_replacement'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Block images in HTML messages unless they are specifically requested?"), + 'help' => 'prefs-html_image_replacement' +); + +// By default, automatically show images in HTML messages if the sender is in +// the user's addressbook? +$_prefs['html_image_addrbook'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Automatically show images in HTML messages when the sender is in my address book?"), + 'help' => 'prefs-html_image_addrbook' +); + +// should we try to mark different conversations with different colors? +$_prefs['highlight_text'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Mark different levels of quoting with different colors?")); + +// should we try to mark simple markup with html tags? +$_prefs['highlight_simple_markup'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Mark simple markup?")); + +// should we show large blocks of quoted text or hide them? +$_prefs['show_quoteblocks'] = array( + 'value' => 'thread', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('shown' => _("Shown"), + 'thread' => _("Hidden in Thread View"), + 'list' => _("Hidden in List Messages"), + 'listthread' => _("Hidden in Thread View and List Messages"), + 'hidden' => _("Hidden")), + 'desc' => _("Should large blocks of quoted text be shown or hidden by default? It can be toggled easily whichever you choose.")); + +// should we dim signatures? +$_prefs['dim_signature'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Dim signatures?")); + +// Convert textual emoticons into graphical ones? +$_prefs['emoticons'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Convert textual emoticons into graphical ones?")); + +// how do we display attachments? +$_prefs['attachment_display'] = array( + 'value' => 'list', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('list' => _("Listing in the Header"), + 'inline' => _("Display in Body of Message"), + 'both' => _("Both Header Listing and Body of Message")), + 'desc' => _("How do you want to display attachments?")); + +// Display custom headers (configured via the identity screen) when viewing +// messages? +$_prefs['mail_hdr'] = array( + 'value' => '', +// 'value' => "Message-ID\nX-Spam-Level", + 'locked' => false, + 'shared' => false, + 'type' => 'textarea', + 'desc' => _("Additional headers to display when viewing: (optional, enter each header on a new line)")); + +// default message character set +$_prefs['default_msg_charset'] = array( + 'value' => isset($GLOBALS['nls']['emails'][$GLOBALS['language']]) + ? $GLOBALS['nls']['emails'][$GLOBALS['language']] + : (isset($GLOBALS['nls']['charsets'][$GLOBALS['language']]) + ? $GLOBALS['nls']['charsets'][$GLOBALS['language']] + : ''), + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array_merge(array('' => _("Default (US-ASCII)")), + $GLOBALS['nls']['encodings']), + 'desc' => _("The default charset for messages with no charset information:"), + 'help' => 'prefs-default_msg_charset'); + +// how do we display alternative mime parts? +$_prefs['alternative_display'] = array( + 'value' => 'none', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('above' => _("Above the message text"), + 'below' => _("Below the message text"), + 'none' => _("Not at all")), + 'desc' => _("Where do you want to display links to alternative formats of a message?")); + +$_prefs['disposition_send_mdn'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Prompt to send read receipt when requested by the sender?"), + 'help' => 'prefs-disposition_send_mdn' +); + +// End Message Viewing preferences + + +// Deleting and Moving Messages preferences + +// should we return to the mailbox listing after deleting a message? +$_prefs['mailbox_return'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Return to the mailbox listing after deleting, moving, or copying a message?")); + +// should we move messages to a trash folder instead of just marking +// them as deleted? +$_prefs['use_trash'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("When deleting messages, move them to your Trash folder instead of marking them as deleted?")); + +// use Virtual Trash folder +$_prefs['use_vtrash'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// virtual trash folder identifier +$_prefs['vtrash_id'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// display the 'Empty Trash' link in the menubar? +$_prefs['empty_trash_menu'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Display the \"Empty Trash\" link in the menubar?")); + +// display the 'Empty Spam' link in the menubar? +$_prefs['empty_spam_menu'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Display the \"Empty Spam\" link in the menubar?")); + +// hide deleted +$_prefs['delhide'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Deleting and Moving Messages preferences + + +// New Mail preferences + +// time before reloading the navigator or mailbox page +$_prefs['refresh_time'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Never"), + 30 => _("Every 30 seconds"), + 60 => _("Every minute"), + 300 => _("Every 5 minutes"), + 900 => _("Every 15 minutes"), + 1800 => _("Every half hour")), + 'desc' => _("Refresh Folder Views:"), +); + +// javascript popup if there's new mail? +$_prefs['nav_popup'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Display pop-up notification of new mail?"), +); + +// play a sound on new mail? if so, which one? +$_prefs['nav_audio'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit', +); + +// sound selection widget +$_prefs['soundselect'] = array('type' => 'special'); + +// End New Mail preferences + + +// Message Preview Preferences + +$_prefs['preview_enabled'] = array( + 'value' => '0', + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Enable message previews?") +); + +$_prefs['preview_maxlen'] = array( + 'value' => 250, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(100 => _("100 characters"), + 250 => _("250 characters"), + 500 => _("500 characters"), + 1000 => _("1000 characters")), + 'desc' => _("Characters to display:") +); + +$_prefs['preview_strip_nl'] = array( + 'value' => '1', + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Strip linebreaks?") +); + +$_prefs['preview_show_unread'] = array( + 'value' => '1', + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show previews for unread messages only?") +); + +$_prefs['preview_show_tooltip'] = array( + 'value' => '0', + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show previews in tooltips?") +); + +// End Message Preview + + +// Fetch Mail preferences + +// Change this if you want to customize how fetchmailprefs.php works. +$_prefs['fetchmail_link'] = array( + 'type' => 'link', + 'url' => 'fetchmailprefs.php', + 'img' => 'fetchmail.png', + 'desc' => _("Edit your preferences for accessing other mail accounts.")); + +// Fetch mail on separate window? +$_prefs['fetchmail_popup'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Fetch Mail in a separate window?")); + +// Show the Fetch mail icon on the menubar? +$_prefs['fetchmail_menu'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show the Fetch Mail icon on the menubar?")); + +// Don't change anything here. +$_prefs['fm_accounts'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['fetchmail_login'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Fetch Mail preferences + + +// Display Options preferences + +// which page to start on when opening mailbox +$_prefs['mailbox_start'] = array( + 'value' => IMP::MAILBOX_START_FIRSTUNSEEN, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(IMP::MAILBOX_START_FIRSTUNSEEN => _("Page with the First Unseen Message"), + IMP::MAILBOX_START_LASTUNSEEN => _("Page with the Last Unseen Message"), + IMP::MAILBOX_START_FIRSTPAGE => _("First Mailbox Page"), + IMP::MAILBOX_START_LASTPAGE => _("Last Mailbox Page")), + 'desc' => _("When opening a new mailbox for the first time, which page do you want to start on?"), + 'help' => 'prefs-mailbox_start'); + +// default sorting column +$_prefs['sortby'] = array( + 'value' => Horde_Imap_Client::SORT_ARRIVAL, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(Horde_Imap_Client::SORT_ARRIVAL => _("Arrival Time"), + Horde_Imap_Client::SORT_DATE => _("Message Date"), + Horde_Imap_Client::SORT_FROM => _("From Address"), + Horde_Imap_Client::SORT_TO => _("To Address"), + Horde_Imap_Client::SORT_SUBJECT => _("Subject Field"), + Horde_Imap_Client::SORT_SIZE => _("Message Size"), + Horde_Imap_Client::SORT_THREAD => _("Thread View")), + 'desc' => _("Default sorting criteria:")); + +// default sorting direction +$_prefs['sortdir'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Ascending"), + 1 => _("Descending")), + 'desc' => _("Default sorting direction:")); + +// sort prefs for individual folders +$_prefs['sortpref'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// mailbox constraints +$_prefs['max_msgs'] = array( + 'value' => 20, + 'locked' => false, + 'shared' => false, + 'type' => 'number', + 'desc' => _("Messages per page in the mailbox view.")); + +// How the from field should be displayed on the mailbox screen +$_prefs['from_link'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array( + 0 => _("Clicking on the address will compose a new message to the sender"), + 1 => _("Clicking on the address will open the message to be read"), + 2 => _("Do not generate a link in the From: column") + ), + 'desc' => _("The From: column of the message should be linked:")); + +// Time format for messages dated today +$_prefs['time_format'] = array( + 'value' => '%X', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array( + '%X' => strftime('%X'), + '%H:%M:%S' => strftime('%H:%M:%S'), + '%I:%M:%S %p' => strftime('%I:%M:%S %p'), + '%H:%M' => strftime('%H:%M'), + '%I:%M%p' => strftime('%I:%M%p'), + ), + 'desc' => _("Format of message dates in the mailbox view for messages dated today")); + +// expand folder tree by default +$_prefs['nav_expanded'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("No"), + 1 => _("Yes"), + 2 => _("Remember the last view")), + 'desc' => _("Expand the entire folder tree by default in the folders view?")); + +// folder tree view style +$_prefs['tree_view'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Combine all namespaces"), + 1 => _("Show non-private mailboxes in separate folders")), + 'desc' => _("How should namespaces be displayed in the folder tree view?") +); + +// expand folder tree by default in sidebar +$_prefs['nav_expanded_sidebar'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("No"), + 1 => _("Yes"), + 2 => _("Current expanded status in the folders view")), + 'desc' => _("Expand the entire folder tree by default in the sidebar?")); + +// poll all folders for new mail? +$_prefs['nav_poll_all'] = array( + 'value' => false, + 'locked' => $is_pop3, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Poll all folders for new mail?")); + +// list of folders to expand by default +$_prefs['expanded_folders'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// list of folders to poll for new mail +$_prefs['nav_poll'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Display Options preferences + + +// Filter preferences + +// run filters on login? +$_prefs['filter_on_login'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// run filters with INBOX display? +$_prefs['filter_on_display'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// run filters when sidebar updates? +$_prefs['filter_on_sidebar'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// show filter icon on the menubar? +$_prefs['filter_menuitem'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// Allow filters to be applied to any mailbox? +$_prefs['filter_any_mailbox'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End Filter preferences + + +// Address book preferences + +// Should recipients of outgoing messages be added automatically to +// the address book? +$_prefs['save_recipients'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Save recipients automatically to the default address book?")); + +// By default, display all contacts in the address book when loading +// the contacts screen. If your default address book is large and +// slow to display, you may want to disable and lock this option. +$_prefs['display_contact'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => true, + 'type' => 'checkbox', + 'desc' => _("List all contacts when loading the contacts screen? (if disabled, you will only see contacts that you search for explicitly)")); + +// address book selection widget +$_prefs['sourceselect'] = array('type' => 'special'); + +// address book(s) to use when expanding addresses +// You can provide default values this way (note the \t and the double quotes): +// 'value' => "source_one\tsource_two" +// refer to turba/config/sources.php for possible source values +$_prefs['search_sources'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// field(s) to use when expanding addresses +// This depends on the search_sources preference if you want to provide +// default values: +// 'value' => "source_one\tfield_one\tfield_two\nsource_two\tfield_three" +// will search the fields 'field_one' and 'field_two' in source_one and +// 'field_three' in source_two. +// refer to turba/config/sources.php for possible source and field values +$_prefs['search_fields'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// address book to use for adding addresses +// put $cfgSources array element name in the value field. +// Setting value to localsql would allow you to add contacts to MySQL database +// See turba/config/sources.php for more info +$_prefs['add_source'] = array( + 'value' => '', +// 'value' => 'localsql', + 'locked' => false, + 'shared' => true, + 'type' => 'implicit' +); + +// End Address book preferences + + +// PGP options + +// Activate PGP support? +$_prefs['use_pgp'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit' +); + +// You should not manually change the rest of the PGP entries +$_prefs['pgp_attach_pubkey'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['pgp_scan_body'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['pgp_verify'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['pgp_private_key'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['pgp_public_key'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End PGP Options + +// S/MIME options + +// Activate S/MIME support? +$_prefs['use_smime'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// You should not manually change the rest of the S/MIME entries +$_prefs['smime_verify'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['smime_private_key'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['smime_public_key'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +$_prefs['smime_additional_cert'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); + +// End S/MIME Options + +// Other entries (used internally in IMP) + +// virtual inbox identifier +$_prefs['vinbox_id'] = array( + 'value' => '', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit'); diff --git a/imp/config/servers.php.dist b/imp/config/servers.php.dist new file mode 100644 index 000000000..4f39c34d1 --- /dev/null +++ b/imp/config/servers.php.dist @@ -0,0 +1,284 @@ + array('#shared/', '#news/', '#public/') + * This paramater should only be used if you want to allow access + * to namespaces that may not be publicly advertised by the IMAP + * server (see RFC 2342 [3]). These additional namespaces will be + * added to the list of available namespaces returned by the + * server. This entry is only pertinent for IMAP servers. + * + * timeout: Set the server timeout (in seconds). + */ + +/* Any entries whose key value ('foo' in $servers['foo']) begin with '_' + * (an underscore character) will be treated as prompts, and you won't be + * able to log in to them. The only property these entries need is 'name'. + * This lets you put labels in the list, like this example: */ +$servers['_prompt'] = array( + 'name' => _("Choose a mail server:") +); + +/* Example configurations: */ + +$servers['imap'] = array( + 'name' => 'IMAP Server', + 'hostspec' => 'imap.example.com', + 'hordeauth' => false, + 'protocol' => 'imap', + 'port' => 143, + 'secure' => false, + 'maildomain' => 'example.com', + 'smtphost' => 'smtp.example.com', + 'smtpport' => 25, + 'realm' => '', + 'preferred' => '', + 'cache' => false, +); + +$servers['cyrus'] = array( + 'name' => 'Cyrus IMAP Server', + 'hostspec' => 'cyrus.example.com', + 'hordeauth' => false, + 'protocol' => 'imap', + 'port' => 143, + 'secure' => false, + 'maildomain' => 'example.com', + 'smtphost' => 'smtp.example.com', + 'smtpport' => 25, + 'realm' => '', + 'preferred' => '', + 'admin' => array( + 'params' => array( + 'login' => 'cyrus', + 'password' => 'cyrus_pass', + // The 'userhierarchy' parameter defaults to 'user.' + // If you are using a nonstandard hierarchy for personal + // mailboxes, you will need to set it here. + 'userhierarchy' => 'user.', + // Although these defaults are normally all that is required, + // you can modify the following parameters from their default + // values. + 'protocol' => 'imap', + 'hostspec' => 'localhost', + 'port' => 143 + ) + ), + 'quota' => array( + 'driver' => 'imap', + 'params' => array('hide_quota_when_unlimited' => true), + ), + 'acl' => true, + 'cache' => false, +); + +$servers['pop'] = array( + 'name' => 'POP3 Server', + 'server' => 'pop.example.com', + 'hordeauth' => false, + 'protocol' => 'pop3', + 'port' => 110, + 'secure' => false, + 'maildomain' => 'example.com', + 'smtphost' => 'smtp.example.com', + 'smtpport' => 25, + 'realm' => '', + 'preferred' => '', + 'cache' => false, +); + +$servers['secure-imap'] = array( + 'name' => 'Secure IMAP Server', + 'hostspec' => 'imap.example.com', + 'hordeauth' => false, + 'protocol' => 'imap', + 'port' => 993, + 'secure' => 'ssl', + 'maildomain' => 'example.com', + 'smtphost' => 'smtp.example.com', + 'smtpport' => 25, + 'realm' => '', + 'preferred' => '', + 'acl' => false, + 'cache' => false, +); + +if ($GLOBALS['conf']['kolab']['enabled']) { + require_once 'Horde/Kolab.php'; + $servers['kolab'] = array( + 'name' => 'Kolab Cyrus IMAP Server', + 'hostspec' => Kolab::getServer('imap'), + 'hordeauth' => 'full', + 'protocol' => 'imap', + 'port' => $GLOBALS['conf']['kolab']['imap']['port'], + 'secure' => false, + 'maildomain' => $GLOBALS['conf']['kolab']['imap']['maildomain'], + 'realm' => '', + 'preferred' => '', + 'quota' => array( + 'driver' => 'imap', + 'params' => array('hide_quota_when_unlimited' => true), + ), + 'acl' => true, + 'cache' => false, + ); +} diff --git a/imp/config/spelling.php.dist b/imp/config/spelling.php.dist new file mode 100644 index 000000000..04f93daad --- /dev/null +++ b/imp/config/spelling.php.dist @@ -0,0 +1,13 @@ +call('contacts/sources'); + +/* If we self-submitted, use that source. Otherwise, choose a good + * source. */ +$source = Util::getFormData('source'); +if (empty($source) || !isset($source_list[$source])) { + /* We don't just pass the second argument to getFormData() because + * we want to trap for invalid sources, not just no source. */ + reset($source_list); + $source = key($source_list); +} + +/* Get the search as submitted (defaults to '' which should list everyone). */ +$search = Util::getFormData('search'); + +/* Get the name of the calling form (Defaults to 'compose'). */ +$formname = Util::getFormData('formname', 'compose'); + +/* Are we limiting to only the 'To:' field? */ +$to_only = Util::getFormData('to_only'); + +$apiargs = array( + 'addresses' => array($search), + 'addressbooks' => array($source), + 'fields' => array() +); + +if ($search_fields_pref = $prefs->getValue('search_fields')) { + foreach (explode("\n", $search_fields_pref) as $s) { + $s = trim($s); + $s = explode("\t", $s); + if (!empty($s[0]) && ($s[0] == $source)) { + $apiargs['fields'][array_shift($s)] = $s; + break; + } + } +} + +$results = array(); +if (Util::getFormData('searched') || $prefs->getValue('display_contact')) { + $results = $registry->call('contacts/search', $apiargs); +} + +/* The results list returns an array for each source searched - at least + * that's how it looks to me. Make it all one array instead. */ +$addresses = array(); +foreach ($results as $r) { + $addresses = array_merge($addresses, $r); +} + +/* If self-submitted, preserve the currently selected users encoded by + * javascript to pass as value|text. */ +$selected_addresses = array(); +foreach (explode('|', Util::getFormData('sa')) as $addr) { + if (strlen(trim($addr))) { + $selected_addresses[] = @htmlspecialchars($addr, ENT_QUOTES, NLS::getCharset()); + } +} + +/* Prepare the contacts template. */ +$template = new IMP_Template(); +$template->setOption('gettext', true); + +$template->set('action', Horde::url(Util::addParameter(Horde::applicationUrl('contacts.php'), 'uniq', base_convert(microtime(), 10, 36)))); +$template->set('formname', $formname); +$template->set('formInput', Util::formInput()); +$template->set('search', htmlspecialchars($search)); +if (count($source_list) > 1) { + $template->set('multiple_source', true); + $s_list = array(); + foreach ($source_list as $key => $select) { + $s_list[] = array('val' => $key, 'selected' => ($key == $source), 'label' => htmlspecialchars($select)); + } + $template->set('source_list', $s_list); +} else { + $template->set('source_list', key($source_list)); +} +if ($browser->isBrowser('msie')) { + $template->set('select_event', ' ondblclick="addAddress(\'to\')"'); + $template->set('option_event', null); +} else { + $template->set('select_event', null); + $template->set('option_event', ' ondblclick="addAddress(\'to\')"'); +} +$a_list = array(); +foreach ($addresses as $addr) { + if (!empty($addr['email'])) { + if (strpos($addr['email'], ',') !== false) { + $a_list[] = @htmlspecialchars(MIME::rfc2822Encode($addr['name'], 'personal') . ': ' . $addr['email'] . ';', ENT_QUOTES, NLS::getCharset()); + } else { + $mbox_host = explode('@', $addr['email']); + if (isset($mbox_host[1])) { + $a_list[] = @htmlspecialchars(MIME::rfc822WriteAddress($mbox_host[0], $mbox_host[1], $addr['name']), ENT_QUOTES, NLS::getCharset()); + } + } + } +} +$template->set('a_list', $a_list); +$template->set('cc', !$to_only); +$template->set('sa', $selected_addresses); + +/* Display the form. */ +$title = _("Address Book"); +Horde::addScriptFile('prototype.js', 'horde', true); +Horde::addScriptFile('contacts.js', 'imp', true); +require IMP_TEMPLATES . '/common-header.inc'; +IMP::addInlineScript(array( + 'var formname = \'' . $formname . '\'', + 'var to_only = ' . intval($to_only), +)); +echo $template->fetch(IMP_TEMPLATES . '/contacts/contacts.html'); +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/imp/docs/CHANGES b/imp/docs/CHANGES new file mode 100644 index 000000000..c0f16b70e --- /dev/null +++ b/imp/docs/CHANGES @@ -0,0 +1,2157 @@ +-------- +v5.0-cvs +-------- + +[mms] Only support FCKeditor as GUI HTML editor. +[mms] Strip extra 'Fwd' and 'Re' cruft from subject line when replying to or + forwarding a message. +[mms] Cache results of address parsing. +[mms] Don't send server requests when autocompleting addresses when possible. +[mms] Added readonly mailbox and disable compose hooks. +[mms] Saving draft on session expiration now handled via VFS. +[mms] Add preference to delete draft on resume & send. + + +---------- +v4.3.1-cvs +---------- + +[mms] Fix linking from addresses in mailbox to compose screen (Bug #7432). +[jan] Use mailer configuration when sending iTip replies (Bug #7388). +[jan] Always display multipart/appledouble attachments. +[mms] Upgrade prototype.js to v1.6.0.3. +[jan] Escape output in test.php. + + +---- +v4.3 +---- + +[jan] Add compose token to redirect view (Bug #7383). +[jan] Don't resize window if not composing messages in a popup. + + +-------- +v4.3-RC2 +-------- + +[mms] Fix loading of print stylesheets when printing a message (Bug #7310). +[mjr] Fix redirect loop when conf[server][change_server] is true (Bug #6978). +[mms] Fix message caching and optimize storage. +[mms] Fix autocomplete address positioning on IE (Bug #7074). +[cjh] When the selected view doesn't match the type of browser's default view + (IMP or DIMP for a mobile browser, MIMP or DIMP for a desktop browser), + explicitly redirect to that view and disable the frameset (Bug #6332). +[jan] Add support for updating exsting events and cancelled recurring event + instances to iTip viewer (Bug #6636). +[mms] Fix uploaded compose attachment names if magic quoting is on (Bug #7215). +[mms] Cache results of address formatting. +[jan] Show name and email address in the address book popup (Request #6937). +[mms] Messages from lists can now have large quotes automatically hidden. + + +--------------------------------- +v4.3-RC1 (released as v4.2.1-RC1) +--------------------------------- + +[mms] Fix incorrect autocomplete replacement in certain cases (Bug #6819). +[mms] Use optimized autocomplete javascript library. +[mms] Handle ';' to delimit addresses when composing. +[jan] Don't allow adding private PGP keys as public keys (Bug #7080). +[jan] Add Basque translation (Euskal Herriko Unibertsitatea EHU/UPV + ). +[mms] Search by size now displayed in KB (Request #6921). +[jan] Add option to attach personal vCard to message (requires Turba 2.2.2). +[jan] Fix maildir quota driver (Bug #7014). +[jan] Add configuration for quota message format. +[mms] Maintain original header encoding on redirect (Bug #7006). +[cjh] Add CSRF tokens to the Compose screen (Kris Steinhoff + ). +[jan] Fix adding vhost specific trailer.txt. +[jan] Add more flexible placeholders to SQL quota driver. +[jan] Fix passing passwords to quota drivers. +[mms] Improved folder list generation (Bug #6972). +[cjh] Allow hiding quota messages when quota is unlimited + (Thomas Jarosch , Request #6934). +[jan] Add mailto: handler for Firefox 3+. +[mms] Fix address MIME encoding issues when saving a draft (Bug #6986). +[cjh] Include a hint about fixing invalid From addresses in the error message + (steinhof@umich.edu, Bug #6941). +[cjh] Fix overwriting $params in _imp_adminDo API call (Bug #6955). +[mms] Never wrap flowed lines in text/plain messages. +[mms] Fix broken spellcheck when using fckeditor on Safari 3 (Bug #6909). +[mms] Fix unescaping URL parameters passed to popup windows (Bug #6834). +[jan] Fix logging of forwarded messages. +[mms] Fix creation of subfolders in certain namespaces + (thomas.jarosch@intra2net.com, Bug #6827). +[mms] Improve search page by moving flags into search criteria section + (Request #6825). +[mms] If using imagemagick, allow creation of PDF thumbnails. +[mms] Strip quotation marks and backslashes from displayed addresses. +[mms] Fix spellcheck in HTML mode when using Xinha on IE (Bug #6799). +[mms] Fix rare case when spellchecking HTML input could result in the HTML + tags being recognized as misspelled words. +[jan] Fix parsing for Token System configuration parameters. +[mms] Add ability to search by size. + + +---- +v4.2 +---- + +[cjh] Fix display of email groups in received messages. +[cjh] Fix sending email to contact lists (Bug #6732). +[cjh] Make sure that email addresses entered in the Identities screen pass + basic well-formedness validation (Bug #6654). +[cjh] Fix default server selection on the login screen + (adrieder@sbox.tugraz.at, Bug #6738). +[cjh] Fix defaulting to the wrong address book in the Contacts popup + (steinhof@umich.edu, Bug #6723). + + +-------- +v4.2-RC4 +-------- + +[mms] Add ability to cache JS/CSS files to static files to improve performance + and to fix problems when updating JS/CSS files. +[cjh] Apply fix for http://dev.rubyonrails.org/ticket/11473 to prototype.js + (Request #6590). +[cjh] Make request token lifetime configurable (faurep@agr.gc.ca, Request + #6679). +[mms] If using SMTP, send messages using 8BITMIME (RFC 1652) or BINARYMIME + (RFC 3030) if appropriate (Request #6645). +[cjh] Work around a spellchecking issue with proc_close and --enable-sigchild + (Bug #6625). +[jan] Show user drop down list in ACL screen if possible. +[mms] Redirect after doing maintenance to the proper view (Bug #6179). +[mms] Allow switching views in mobile login mode (Request #6332). +[jan] Support vhosts setting when loading header.php, servers.php, + spelling.php and trailer.txt configuration files. +[mas] Use delete icon on search page to remove elements. (Liam Hoekenga + , Request #6515). +[mms] Add link to delete entire thread on thread screen (Request #5884). +[mms] Hide trash-related options when trash is disabled. +[jan] Allow users to specify server name and login credentials in Horde's + preferences (requires Horde 3.2). +[mms] Message cache now stored in configurable chunks to reduce memory usage. +[mms] Fix mailbox list caching when hiding deleted messages. + + +-------- +v4.2-RC3 +-------- + +[mas] Replace %l and %d with the current short username and domain name in spam + reporting shell calls. (Bug #6364) +[cjh] Add a hook quota driver (Michael.Redinger@uibk.ac.at, Request #6322). +[mms] Make xinha add BR tag instead of P tag on enter keypress (Mozilla only). +[mms] Add fckeditor to list of supported javascript editors. +[jan] Hide iTip actions if not using IMP frontend (Bug #6116). +[cjh] Fix showing suggestions for the second or subsequent misspelled word + (Bug #6081). +[jan] Add configuration option to force users to a certain view. +[jan] Localize default folder names. +[jan] Call a contacts/add API method to create links for adding contacts if + available. +[jan] Filter HTML body when replying to HTML messages with the WYIWYG editor. +[jan] Allow users to set the HTML editor toolbar buttons in their preferences. +[jan] Fix charset of composed HTML messages (Bug #6268). +[cjh] Protect mailbox, message, and folder actions with CSRF tokens. +[cjh] Fix action dropdowns in IE6 (Bug #6177). +[cjh] Make sure to call Event.extend() when using inline event handlers, for + IE6's benefit. +[cjh] Fix improper enabling of HTML composition on replies (Bug #6176). +[jan] Use subject's CN instead of OU for storing public keys (Bug #6169). +[cjh] Make sure that custom checkbox preferences are stored as 0 or 1 instead + of 'on' or ''. +[jan] Fix popup URL generation (Bug #6139). + + +-------- +v4.2-RC2 +-------- + +[mms] SECURITY: When sending linked attachments, protect against JAR attacks + in some Mozilla browsers (Bug #5892). +[cjh] Fix the bottom Select: menu in the mailbox view (Bug #6128). +[mms] Add hook for adding formatting information to a message list row + (Request #5234). +[mms] If javascript is available, automatically size the popup compose window. +[jan] Allow to write outside of HTML signatures in WYSIWYG editor (Bug #3753). +[jan] Highlight HTML signatures in WYSIWYG editor. +[jan] Remember webmail mode selected on the last login. +[mms] Compress download data. + + +-------- +v4.2-RC1 +-------- + +[jan] Fix broken tags in HTML messages. +[mms] When sending notification that linked attachment has been downloaded, + correctly set timezone in download time (Bug #4609). +[cjh] If encrypting a message, encrypt an attached public key as well + (Bug #5733). +[jan] Remove "default search field" preference, show all common fields instead. +[cjh] Rename IMP_IMAP_Client::namespace to getNamespace() for PHP 5.3 + compatibility. +[cjh] Cache PGP public keys for one hour (adrieder@sbox.tugraz.at, + Request #5773). +[mms] Add mailbox list caching across sessions. +[cjh] Don't translate "Fwd:" in email subjects (Request #5674). +[jan] Add link to strip all attachments from a message. +[jan] Show owner of S/MIME cert in signed messages, not the message sender. +[jan] Allow maintenance tasks to rename and delete fixed folders (Bug #5592). +[mms] Allow all javascript and CSS in a page to be served in a single browser + request. +[jan] Move all IMP-specific hook examples from Horde's config/ directory. +[jan] Fix compose window widgets with certain translations (Bug #5638). +[jan] Fix sidebar tree generation with certain translations (Bug #5525). +[cjh] Fix spellchecking HTML messages with active links (Bug #5629). +[cjh] Fix a fatal error when composing for users with no signature (Bug #5682). +[cjh] The pspell extension is no longer supported for spell checking since + it doesn't work with HTML composition at all (Bug #5516). +[cjh] Fix switching signatures when using HTML composition (Bugs #3753, #5594). + + +---------- +v4.2-ALPHA +---------- + +[jan] Add configuration for folders that may not be modified. +[mms] Inline PHP-generated javascript to avoid cross-domain leaking + (Bug #5307). +[cjh] Preserve current mailbox when composing in the main window (Bug #5415). +[cjh] Add a few more new mail sounds and allow the user to choose + between them (Request #3260). +[mms] Preserve URL anchor information when performing login. +[jan] Fetch public PGP keys from keyserver if not available in address book + (Requires Horde 3.2). +[mms] Add compose support for e-mails containing Internationalized Domain + Names (Request #5180). +[jan] Add a hook for post sending actions, after a message has been sent. +[mms] Add option to login screen to allow user to select the application mode + if either DIMP or MIMP is also installed. +[jan] Add unified IMAP quota driver to obsolete the Cyrus and Courier drivers. +[mms] Don't allow namespace delimiters in new mailbox names. +[mms] Change 'Important' flag to 'Flagged For Followup' and clear the flag + after a reply (Request #4867). +[mms] Allow display of shared/public folders separate from a user's personal + folders (Request #3581). +[mms] Allow thumbnails to be generated for all attached images, regardless + of image size. +[cjh] Add a modal confirmation dialog for emptying a folder (Request #4812). +[mms] Add ability for admin to limit size of reply text. +[mms] Add RSS/Atom feed for mailboxes (Eric Garrido , + Request #2733). +[mms] If tidy is available, use it to clean up outgoing HTML messages. +[mms] Automatically delete blacklisted messages (Request #4569). +[cjh] Implement non-modal newmail popups (Request #3327). +[mms] Add option to restrict size of MIME message parts that can be displayed + inline. +[cjh] Add a Help entry for keyboard navigation (Bug #4716). +[mms] Most javascript code now uses the Prototype library. +[jan] Address auto-completion searches only at beginning of names and + addresses. +[jan] Add button to empty the current folder. +[jan] Show percentage of attachment limit usage in compose window + (Eric Garrido , Request #3434). +[jan] Add SQL driver for quotas (Tomas Simonaitis , + Request #4053). +[mms] Allow user to view PGP encrypted messages sent by themself (Bug #4332). +[mas] Make ACL editor more intuitive (Eric Garrido , + Request #3808). +[mas] Conform to WCAG 1.0 Priority 2/Section 508 accessibility guidelines. + (Request #4080) +[mms] Added preference to allow composition in reply/forward based on + "richest" format available in original message (Request #4270). +[mms] Added preferences to determine default forwarding method and whether + to include body text in forwards by default. +[mms] Add preference to only verify PGP & S/MIME signed data upon user + request (Request #4022). +[mms] Add preference to indicate default cursor location in compose text + area (Request #3245). +[jan] Add support for symmetric PGP encryption (Requires Horde 3.2). +[cjh] Add an onbeforeunload handler so Firefox and IE users can be prompted + before accidentally closing a compose window (phyre@rogers.com, + Request #4271). +[jan] Move mail_hdr preference from identities to a regular preference. +[mms] Remove current mailbox information from session - allows multiple + simultaneous open IMP windows (Request #3171). +[mms] Add folder size display to folders screen (Request #4065). +[mms] Add ability to filter HTML message output with tidy (Request #388). +[cjh] Show thumbnails of large images instead of linking to them + (Eric Garrido , Request #3808). +[mms] Page location in mailbox is remembered for subsequent mailbox visits. +[mas] Add maintenance task to purge old messages from spam folder (Request + #3860). +[mms] Implement mailbox message list caching. +[mms] Port AJAX spell checking code from DIMP. +[mms] Port auto-complete contacts AJAX code from DIMP. +[mms] Add preference to poll all folders for new mail (Request #2197). +[mms] Allow admins to add "Printed By" headers to the top of all printed + messages (Request #1965). +[mms] Allow user to save per-folder sort preferences (Request #1483). +[jan] Add multidomain support for Kolab servers (tokoe@kde.org, Request #3579). +[cjh] Add a hook for post-login actions, after the session is established + but before redirection. +[mms] Recent search queries can be retrieved on the search page (Request + #3337). +[mms] Convert all templates to Horde_Template::. +[cjh] Show vTodo parts in the iTip driver (Request #3344). +[jan] Add maintenance task to purge old messages from sent-mail folders. +[cjh] Move allow_cc and allow_bcc to compose_cc and compose_bcc preferences. +[ben] Better support for MS-SQL. +[jan] Whether and where to show alternative mime parts is now a preference + instead of MIME configuration. +[mms] Split out custom spelling dictionary into separate configuration file. +[jan] Delete original message after saving a resumed draft. +[cjh] If the browser supports the necessary javascript, unblock images in HTML + messages without a page reload. +[cjh] Do all message styling based on flags with CSS. +[mms] Implement message caching. +[jan] Add permissions to restrict maximum number of recipients per message and + time. +[jan] Add API method "contacts/favouriteRecipients". +[jan] Add logging of sent messages. + + +------ +v4.1.6 +------ + +[jan] Fix sentmail folder not being updated in the preference interface after + updating to Horde 3.1.5 (Bug #5842). +[jan] Fix broken tags in HTML messages. + + +------ +v4.1.5 +------ + +[cjh] Lower memory usage when downloading folders + (Andrew Morgan ). +[mms] Fix detection of default namespace information when no namespaces are + defined on the server (Bug #5538). +[mms] Don't lose message bodies When moving messages to trash when over quota + (Bug #5470). +[cjh] Remove unused defaults in Fetchmail_imap (Bug #2799). +[jan] Fix empty folder name appearing on Cyrus and servers with similar + namespaces (Bug #5138). +[jan] Only show reply options in iCalendar viewer if a reply is requested. +[cjh] Remove non-responsive www.keyserver.net and wwwkeys.pgp.net from + PGP options (Bug #5323). +[jan] Fix moving messages when over quota on Dovecot servers (Bug #5270). +[jan] Fix parsing of certain distribution lists (Bug #5134). +[mms] Fix rare occurrence where an action perfomed on the mailbox screen would + instead be performed on the INBOX (Bug #5202). +[mms] Don't show save attachments prompt in compose screen if configured to + automatically link all attachments (Request #5189). + + +------ +v4.1.4 +------ + +[jan] SECURITY: Fix XSS vulnerabilities in the search screen and thread view. +[jan] Improve displaying of PGP messages (requires Horde 3.1.4 partially). +[mms] Make sure we pass a read/write IMAP stream to the filters API (Bug + #5054). +[mms] Do not allow move to trash unless trash folder is defined (Bug #5012). +[jan] Fix an encoding issue with the address book popup (Bug #5050). + + +---------- +v4.1.4-RC1 +---------- + +[cjh] "Ignore All" spellchecking fixes (technology@pmi-portland.org, Bug + #4922). +[cjh] Absolute restriction on the width of the contacts window select elements + (Request #1985). +[cjh] Send lowercase mailto: attributes in iCalendar replies (Bug #4872). +[cjh] Don't improperly increment iCalendar SEQUENCE values (Bug #4863). +[mms] Always subscribe to created folders. +[mms] Don't allow both trash folder and Virtual Trash to be selected in the + options (Bug #4698). +[cjh] Turn mailto: links in HTML emails into IMP compose links (Bug #3079). +[cjh] Attempt to calculate the actual filesystem block size in the + IMP_Quota_command driver (Eric Rostetter + , Request #4360). +[cjh] Make sure to honor user date format preferences in iTip viewer + (Bug #4635). +[cjh] Fix message list header underflow in IE7 (Bug #4608). +[cjh] Don't return empty sent-mail folders from the identity (Bug #4380). +[cjh] Don't rename folders from or to an empty string (Bug #4380). +[mas] Don't replace spaces with '.' when expanding addresses. (Bug #4236) + + +------ +v4.1.3 +------ + +[mms] Add 'login_tries' server configuration option. +[jan] Fix toggling compose mode if folders are turned off (Bug #4216). +[mms] Fix blacklist/whitelist reporting (Bug #4160). +[jan] Add link to view attached S/MIME key details. +[cjh] Correctly escape all folder names. +[mjr] Correctly restrict gallery list when saving images to a gallery program. +[jan] Send notifications about downloaded attachments to address from identity. +[mms] Escape group names pursuant to RFC 2822 (Bug #4018). +[mms] Fix saving images to gallery program (e.g. Ansel) from search mailboxes + (Bug #4046). + + +------ +v4.1.2 +------ + +[mas] Check Cyrus quota for current mailbox, instead of always showing INBOX. + (Eric Garrido ) +[cjh] Send linked attachment notifications in the language of the user who + sent the attachment (Bug #3712). +[mms] Fix appending default personal namespace to default sent-mail folder + (Bug #3873). +[mms] Fix IMAP logins for some servers that throw in extraneous server + information (Bug #3793). +[mms] Quote IMAP usernames when using LOGIN authentication to allow usernames + with spaces to login (Bug #3778). +[jan] Fix creating folders through the api (Bug #3787). +[mms] Added preference to toggle display of Virtual Inbox. +[mms] Fix display of Virtual Trash (Bug #3665). + + +------ +v4.1.1 +------ + +[mms] Silence some undefined warnings if folders are off (Bug #3755). +[cjh] Escape X-color data (Bug #3751). +[mms] Never open connection to specific mailbox unless we need it. +[mms] Don't allow IMP preference access unless authenticated. +[mms] Fix moving message to trash folder when over quota (Bug #3687). +[mms] Add preference for default charset to be used for messages with improper + charset information (requires Horde 3.1.1) (Request #2702). +[mms] Fix stripping attachments (Bug #3510). +[mms] Fix creation of duplicate Virtual INBOXes. +[mms] Fix displaying Show/Hide/Purge links for deleted messages in certain + cases. +[jan] Fix downloading of all attachments from certain messages in a ZIP file + with Internet Explorer. +[mms] Use other login methods in IMP_IMAPClient:: if the first method is + unsuccessful, to make Exchange working again. +[mms] If an IMP maintenance task is activated, make sure the Horde preference + controlling maintenance is also activated (Bug #2987). +[mms] Fix spellcheck on send (Bug #3589). +[mms] Allow user to select sent-mail folder in public namespace if public + namespace is blank (Bug #3603). +[mms] Add preference to define how we want to expand folder list in sidebar. + + +---- +v4.1 +---- + +[mms] Correctly expunge current mailbox when deleting messages on a POP3 + server (Bug #3156). + + +-------- +v4.1-RC3 +-------- + +[mas] Add Hebrew translation. +[mms] Attempt to login to mail server multiple times on non-auth failure to + eliminate some "random" session timeouts (ag@netside.de, Bug #3404). +[mms] Allow configuration of server timeouts in servers.php. +[jan] Less intrusive notification when expanding of addresses in the compose + view fails (Dmitriy MiksIr ). +[mms] IMP_IMAPClient:: now uses the Auth_SASL PEAR module during CRAM-MD5 and + DIGEST-MD5 authentication. + + +-------- +v4.1-RC2 +-------- + +[jan] Add Khmer translation (Leang Chumsoben ). +[mms] Make Linked attachments work in multipart/alternative messages + (Bug #3335). +[mms] Allow selection of Virtual Folder for login mailbox (Bug #3315). +[mms] Prompt user before sending messages with empty subjects (Bug #3333). +[mms] Add ability to edit search queries. +[jan] Log correct address in login success message if connecting through a + proxy (Bug #3289). +[jan] Fix forwarding of multiple messages. +[jan] Fix confirmations after successfully sending messages (Bug #3233). +[jan] Apply _imp_hook_mbox_icons hook to the sidebar folder tree (Bug #3132). +[mms] Re-add option to rebuild folder tree from IMAP server. +[mms] Fix sent-mail folder selection in compose view (Bug #2802). +[cjh] Fix redirection to initial_application preference after running + Maintenance tasks. + + +-------- +v4.1-RC1 +-------- + +[mms] Removed 'dotfiles' server parameter. +[mms] Allow PHP expressions to be executed for user-defined headers (Bug + #3093). +[mms] Support 'DelSp' parameter in flowed text messages (requires Horde 3.1). +[mms] Remove outdated, non-standards request for delivery confirmation. +[mms] Hide lengthy address lists by default in message view and allow the user + to toggle viewing (flachapelle@inverse.ca, Bug #3028). +[cjh] Account for changes to strtotime() in PHP 5.1. +[mms] It is not possible to hide deleted messages when using thread sort. +[mms] Option to send notification that linked attachment has been downloaded, + and link to delete the attachment (Bug #696). +[mms] After fetching mail, return to the local mailbox where mail is + downloaded to (Bug #2211). +[mms] Check the IMAP server to see if it supports searches in the current + charset. +[mms] Do not require users to click on 'Attach' button when attaching files + in the compose screen (Bug #2848). +[mms] Don't display unsubscribed folders in sidebar (Bug #2869). +[mms] Rename folders from top of tree to bottom to prevent errors on IMAP + servers that automatically rename all child folders (Bug #2882). +[mms] Fix opening compose popups when the mailbox contains urlencoded + characters (Bug #2872). +[mms] Fix refresh of folders when not using IMAP subscriptions (Bug #2878). +[cjh] Skip results with empty email addresses when expanding names + (Bug #2757). +[cjh] Replace %u with the current username in spam reporting shell calls + (Dmitriy MiksIr ). +[mms] Don't ask for password for decryption when the user does not have a + personal private key (Bug #2771). +[mms] Add API method to return logged in server hostname. +[mms] PGP encrypted messages now encrypted to all recipients in the same + message (Bug #2670) (requires Horde 3.1). +[mms] Added preference to define the default search field (Bug #2650). +[jan] Add ability to create notes from email messages. +[jmf] Add support for changing SMTP server/port on login (Bug #327). +[mms] Removed 'folders', 'namespace, and 'hierarchies' server parameters. +[mms] Add auto-detection of namespace information from IMAP server. +[cjh] Support configuring where the "Report as" spam/innocent links appear + (dustin@ywlcs.org, Bug #1096). +[mms] Add preference to move spam/innocent messages to appropriate mailbox + after reporting. +[mms] Add multiple message view page (Bug #481). +[jan] Add stationery and form responses. +[cjh] Differentiate between signed and encrypted attachments (Bug #1712). +[jmf] Ability to play sound on new mail. +[jan] Add permissions to restrict creation of folders. +[mms] Add configuration option to allow message bodies to be cached across + page loads. +[ben] Honor horde's alternate_login and redirect_on_logout settings. +[jan] Add "Empty Spam" menu item (Bug #1765, jens@peino.de). +[mms] Add Virtual INBOX to Virtual Folders. +[mms] Make sure special Virtual Folders can never be edited. +[mms] Allow import of photo attachments into a gallery application. +[mms] Fix IMAP thread display when the base level contains more than one + message. +[mms] Better/more complete preview message generation. +[mms] Graphical representation of thread on thread view screen. +[mms] Virtual Trash folder support (Todd Merritt ). +[mms] All composed messages are now sent in "flowed" format. The "wrap_width" + preference has been eliminated. +[mms] Success messages are not shown when adding a blacklist/whitelist address + if an error in adding the address(es) occurred. +[mms] No need to show a "Hide HTML images" link if the images have already + been displayed. +[mms] Include Cc: header information in the header text we display for forward + and reply messages (Bug #1079). +[jan] Show ZIP icon with "Download all attachments" link. +[mms] S/MIME parts should always attempt to be viewed inline, notwithstanding + the Content-Disposition for the part (requires Horde 3.1). + + +------ +v4.0.5 +------ + +[cjh] Correctly escape all folder names. +[jan] Fix French translation. + + +------ +v4.0.4 +------ + +[mms] Add warning that PGP key generation may take awhile (Bug #2672). +[mas] Add confirmation when reporting spam/innocent from message view. + (kevin_myer@iu13.org, Bug #2285) +[cjh] Fix check for duplicate addresses when automatically saving + recipients (Bug #2663). + + +---------- +v4.0.4-RC2 +---------- + +[mms] Fix additional newlines being added to forwarded messages when using + sendmail on *NIX (Bug #2449, t.zell@gmx.de). +[mms] Fix BCC addressess disappearing when resuming a message (Bug #2558). +[mas] Fix reporting multiple messages as spam at once. + (horde.org@spamvrij.kicks-ass.org, Bug #2549) +[mms] Add entire message search to search page. +[jan] Fix warnings if expanding names with spaces (Bug #2334). +[mms] Don't display body text in thread view if inline viewing of the content + is disabled. +[jwm] Renamed Accounts menu item to Fetch Mail for more consistency. + + +---------- +v4.0.4-RC1 +---------- + +[jan] Decode folder name when importing messages (ddibox@mail.ru, Bug #2479). +[jan] Send iTip replies with the correct identity (Bug #1507). +[jan] Name downloaded ZIP file with all attachments after the message subject. +[jan] Allow to accept invitations and add them to the calendar at once. +[jan] Show iTip attachments (event invitations) inline (Request #2032). +[mms] Fix display of localized INBOX name in folder list/sidebar (Bug #2368). +[mms] Fix display of linked attachments when the attachment filename contains + characters that need to be escaped. +[mms] Fix OR searches when user is hiding deleted messages. +[mms] Save drafts so any images added via the HTML editor will correctly + reappear when the message is resumed (Bug #1977). +[mms] Allow HTML formatting to be retained when resuming a draft (Bug #2328). +[mms] Work around broken c-client sort by arrival. Turns out to be more + efficient anyway (Bug #2139). +[jan] Add Bosnian translation (Vedran Ljubovic ). +[mms] If user selects a non-default sentmail folder on the compose screen, make + sure this is saved through any intervening spelling check (Bug #2093). +[mms] Ensure that no maintenance tasks may be skipped (Bug #1926). +[mas] Protect against special characters at the beginning of a line when using + aspell. (Bug #2060) +[cjh] Generate only one Select All checkbox on search results listings + spanning multiple mailboxes (Bug #1991). +[jan] Block embedded images if viewing HTML messages in a popup. +[cjh] Don't lose incomplete addresses after expansion is attempted. + (Bug #1900). +[jan] Fix background expansion of non-ascii names in compose view (Bug #1575). +[jan] Allow non-ascii searches (requires Horde 3.0.5). +[mms] Don't pass server information via login page if not being altered by + the user. (Bug #1883) +[mms] Add separate confirmation page when deleting/emptying folders (Bug #783). +[cjh] Allow sending blank searches to Turba even if the display_contact + preference is false (Bug #1854). +[mms] Encode attachment parameters with the same character set used in the + base message (Bug #1591). +[mms] Don't allow user to unsubscribe from INBOX. +[mms] Don't alter header encodings when redirecting messages (Bug #1823). +[mms] Fix charset issues with strip attachment message (Bug #1861). +[cjh] Add missing binary.png for the TNEF MIME Viewer (Bug #1873). +[jan] Localize all remaining INBOX strings in the interface. +[mms] Fix drop down lists in folder preferences (Bug #1794). +[jan] Fix compose links with non-ascii characters in email header links on + Internet Explorer (Bug #1726). +[mms] Ignore empty lines in config/header.txt (Bug #1770). +[cjh] Don't trigger the left/right key message navigation if the user is + holding down any modifier keys - let those bubble up to the browser + (Bug #1763). +[cjh] Only use a Refresh: header if we need to, and if the URL is under 160 + characters, to prevent triggering browser bugs that cause hangs + (Bug #1728). +[cjh] Prevent IE from clearing compose window fields if the user presses + ESC (Bug #1686). + + +------ +v4.0.3 +------ + +[jan] Ignore quoted text if spellchecking with aspell (Bug #1673, + kevin_myer@iu13.org). +[cjh] Fix typo in attachment.php that caused a PHP warning + (Xavier Montagutelli ). +[mms] Correctly store all data from the compose screen when spell checking a + message (Bug #1425). + + +---------- +v4.0.3-RC1 +---------- + +[cjh] Validate outgoing email addresses before sending mail (Bug #1543). +[mms] Added automatic detection of some mail server parameters to the test + script. +[mms] Fix Show/Hide Deleted links on search results screen (Bug #1587). +[mms] Correctly process 'Report and Spam' and Blacklist/Whitelist additions + from a search results mailbox view. +[mms] Correctly sort the contents of the Virtual Folder. +[mms] Fix viewing mailboxes in shared hierarchies in subscribe mode in the + IMAP_Tree lists (Bug #1550). +[jan] Return to current folder after emptying the trash folder (Bug #1563). +[mms] Display the attachment expiration date when sending linked attachments. +[mms] Fix editing virtual folders from the mailbox screen (Bug #1490). +[cjh] Log logouts at the same level Horde does (Bug #1499). +[jan] Don't lose session if clicking on link after blacklisting or + whitelisting addresses (Bug #1417). +[mms] Fix refresh of folder screen when viewing unsubscribed folders. +[mms] Added optional 'delimiter' parameter to servers.php to aid login times + for certain IMAP servers (selsky@columbia.edu, Bug #1485). +[mms] Don't link emails in HTML message compositions (Bug #1472). +[mms] Make sure we can create thumbnails/convert images before prompting user. +[mms] Ensure multipart/related and multipart/alternative messages can be viewed + if not viewable inline or if they contain only one part; + multipart/related parts are now viewed with their correct charset + (Bug #1433). +[mms] Fix display of IMAP hierarchies in the folder view (Bug #1403). +[jan] Fix viewing of multipart S/MIME or PGP signed messages (Bug #1393). +[jan] Mark sent-mail checkbox when changing the sent-mail folder in the + compose screen. +[mms] Be smarter about we we consider to be downloadable/forwardable. + Make sure text isn't both forwarded and attached in a forward message. +[jan] Fix success screen after redirecting a message (Bug #1374). +[jan] Fix "undefined index" warning (Bug #1367). + + +------ +v4.0.2 +------ + +[mms] Don't wrap flowed text in print view (Bug #1318). +[jan] Don't append trailer text twice if sending a message resumed from a + draft (Bug #1306). +[mms] Fix display of attachment names when forwarding messages (Bug #1300). + + +---------- +v4.0.2-RC1 +---------- + +[mms] Decode the contents of preview messages. +[mms] Fix reload of underlying window after entering PGP or S/MIME passphrase + (Bug #1145). +[cjh] Fix recompose recovery of messages written before a session timeout + (Bug #1209). +[mms] Don't escape 'From' at the beginning of the line in text messages. +[mms] Fix 'smtphost' and 'smtpport' configuration parameters. +[jan] Add batchCompose API method. +[mms] Fix a (very rare) situation where a base64 encoded message is not decoded + correctly in forwards/replies (Bug #1077). +[mms] Fix forwarding as a digest from search folders (Bug #1263). +[cjh] Fix PHP notice after forwarding a message (Bug #1283). +[mms] Show, but don't activate current folder in "Move/Copy To" folder list + (Bug #1240). +[mms] Make sure we show container folders in the search screen folder list. +[mms] Don't show address book save link for PGP and S/MIME keys if no default + address book is configured (Bug #1144). +[mms] Require virtual folders to have a label (Bug #1160). +[jan] Speed up mailbox loading by caching processed email addresses. +[jan] Fix new mail notification popups in mailbox views (Bug #876). +[jan] Fix custom_login.php example script. +[cjh] Don't insert entries for emails that already exist when gathering + addresses from outgoing emails (Bug #1054). +[jan] Fix wrapping of header in mailbox view with IE (Bug #1110). + + +------ +v4.0.1 +------ + +[cjh] Fix columns running in to each other with Safari/KHTML in the mailbox + view (requires Horde 3.0.1) (Bug #1026). +[mms] Allow signed messages sent via multipart/encrypted to be displayed on non + S/MIME enabled installations (Bug #1037). +[cjh] Fix for login_compose when IMP does not provide authentication + (Bug #892). + + +---- +v4.0 +---- + +[mms] Messages sent in HTML format no longer link email addresses to + non-existant javascript calls. +[jan] Use short, indented folder names in search form. +[jan] Return to correct mailbox page when clicking "Back to" link in threaded + view. +[jan] Fix sorting of folder names in summary block (Bug #987). +[mms] Determine the default IMAP delimiter according to RFC 3501. +[mms] Added 'smtpport' parameter to server configuration (bergonz@labs.it). +[jan] Correctly wrap quoted headers in message replies (Bug #962). +[jan] Show buttons on "message sent" screen as menu again. + + +-------- +v4.0-RC3 +-------- + +[jan] Fix link generation in HTML composer (Bug #941). +[cjh] Always honor the login_compose action (Bug #892). +[cjh] Save messages with a "message/rfc822" mime type (Bug #922). +[mms] Don't require to configure an e-mail address if using a spam hook. +[mms] Fix expansion of e-mail addresses (Bug #889). +[mms] Fix display of user-defined headers if the message contains more than + one of those headers (Bug #912). +[jan] Set one global date format in Horde's preferences (Bug #788). +[jan] Fix some javascript errors with IE 5.0. + + +-------- +v4.0-RC2 +-------- + +[mms] Allow more than one recipient for encrypted messages; store encrypted + messages locally using the local user's encryption (Bug #865). +[mms] Fix various S/MIME issues and update the code to more closely match the + look and feel of the PGP code. +[jan] Fix automatic spell checking on send, cutting off parts of the message + (Bugs #227, #259). + + +-------- +v4.0-RC1 +-------- + +[jan] Fix HTML message editor in IE (Bugs #692, #793). +[cjh] Search only the preferred address books for senders allowed to send HTML + messages with images. +[jan] Disable Kolab servers if Kolab has been disabled globally. +[mms] Allow all subscribed folders to be viewed in the IMP menu tree interface. +[mms] Only scan for emoticons in the body of text MIME parts. +[mms] Fix message saving and attachment ZIP file generation. +[mms] Allow the spam reporting system to bounce a message to an email address. +[mms] Move spam handling to a separate class. + + +--------- +v4.0-BETA +--------- + +[mms] Added virtual folder support. +[mms] Allow all messages in an entire folder to be marked as seen or unseen. +[mms] Allow attaching files from local VFS filesystems. +[mms] Allow quick and easy access to unsubscribed folders on the search + screen. +[jan] Add quota driver for Mercury/32 servers (Frank Lupo + ). +[mms] Add support for Message Disposition Notifications (RFC 2298). +[jan] Dynamically add new attachment fields if all are used. +[jan] Add special black-on-white styles for message printing. +[mms] Added preference that allows user to strip attachment information for + messages saved in the sent-mail folder after composing a message. +[mms] Improve message threading display in the mailbox screen. +[jan] Add Persian (Western) translation (Vahid Ghafarpour + ). +[cjh] Allow quoted parts of messages to get hidden. +[mms] Add messages thread view. +[jan] Allow navigation through mailbox pages with left and right keys. +[jan] Allow purging of multiple folders in the folders view (Todd Merritt + ). +[jan] Allow turning off of the links to alternative parts in + multipart/alternative messages. +[cjh] Hide unnecessary UI elements when there's only one address book + (Francois Marier ). +[cjh] Trap adding the same address multiple times in the Contacts window + (Francois Marier ). +[cjh] Make the header checkbox on the folders page toggle selection of + all folders (Francois Marier ). +[cjh] Add the basis for sending attachments as links to hosted files + (Andrew Coleman ). +[cjh] INBOX is now localized for display. +[jan] Show warning when compose or passphrase popups are blocked by the + browser. +[mms] Allow which headers to view by default to be defined for each identity + (Vijay Mahrra ). +[jan] Add mailbox management for supported servers like Cyrus. +[cjh] Add option for reporting email as not spam (Liam Hoekenga + ). +[jon] Added a new preference that will cause a message to be spell checked + before it is sent. +[max] Add 'mail_domain' pref which overrides the server's maildomain setting. +[mms] Added hooks for dynamic mailbox redirection and custom mailbox/folder + icons on the folder page (Stuart Binge ). +[mms] Use the MIME_Viewer system to generate 'previews' for composition + attachments. + + +---------- +v4.0-ALPHA +---------- + +[mms] Added addressbook lookup and expand names feature to the redirect screen. +[jon] Added the ability to create new tasks from received email messages. +[mms] Rewrote fetchmail to use subclasses/drivers to do all the work - this + allows support for accessing more mail server types in the future. +[mms] When renaming folders, all subfolders below the folder being rennamed + are now renamed also. +[mms] Handle creation/display of RFC 2646 format text messages (flowed text). +[mms] Rewrite of IMP_Tree code - now uses cache results for all folder and + mailbox updates instead of requerying the server for the folder tree. +[jan] Add Indonesian language (Slamin ). +[jan] Add check if the user has selected but not yet uploaded attachments. +[mms] Configuration option to disable Mail logging. +[jan] Add preference to automatically save all recipients in the default + address book. +[mms] Use NLS:: hostname->country lookup to show country-of-origin for e-mail + messages on the message screen. +[mms] Support for auto-BCC addresses during compose for each identity + (Nicholas Sushkin ). +[mms] Support multiple file uploads on an individual compose page. +[mms] HTML composed messages with image links now have the images downloaded + and sent inline with the message in a multipart/related part. +[jan] Show graphical emoticons. +[mms] For images that cannot be viewed directly by the browser, IMP can + automatically convert to a format that can be viewed. +[cjh] Log reply/forward/redirect actions and display these logs when viewing + the messages. +[cjh] IMP now supports a hordeauth setting in servers.php, a la Gollem and + other applications (Vijay Mahrra ). +[mms] Add on-demand generation of thumbnails for image attachments. +[mms] Added 'Download All Attachments' link on message page to allow all + attachments to be downloaded in a single zip file. +[mms] Improved HTML to text conversion when replying/forwarding to a HTML + message. +[mms] Add 'tie to' ability to allow a specific identity to be explicitly tied + to a message sent from a certain address. +[mms] Maximum subject/from lengths, From: field link options, and mailbox + time display formats are now user configurable preferences + (Robert Ribnitz ). +[jan] Add aliases to the user's identities to find messages sent to one of + his identities but not directly to one of his email addresses. +[mms] Preference to allow spam messages to be automatically deleted after + reporting (Rudi Heitbaum ). +[mms] Moved IMP authentication code to Auth_imp::. +[mms] Added configuration options allowing admin to limit (per message) both + the total size of attachments and the number of attachments. +[mms] Added preference allowing user to choose where to start browsing in a + mailbox when first opening the mailbox. +[mms] The guts of the IMP filtering code has been removed and ported to + 'ingo'. Thus, filtering is now handled via Horde API calls instead + of internally. +[mms] The IMP search page now handles NOT searches, as well as basic AND/OR + searches via the IMAP_Search:: library. +[cjh] Add shift-click selection/deselection of ranges of messages + (Andrew Johnson ). +[mms] Allow caching of folder list generation. +[mms] Added IMP_IMAP:: class to handle IMAP/POP3 connections. +[jan] Allow spam reporting from the mailbox view (Ahmed ). +[jan] Add preference to store drafts marked unseen + (Ahmed ). +[cjh] The last_login preference is now entirely handled by Horde. +[jan] Let the users select the message's charset while they are composing a + message. +[cjh] When a user's session times out while they are composing a message, + give them a special login screen which displays the message and + allows them to log in again to resume their message with all data + intact. +[cjh] Remove javascript refresh popups in the compose window. +[mms] Allow display of uuencoded attachments. +[cjh] Add flag-setting options on the message view + (Dan Wilson ). +[mms] Allow blocking of images in HTML messages by default (Amith Varghese + ). +[mms] Support for showing mail previews in javascript 'tooltips'. +[mms] Added message/partial MIME_Viewer. +[cjh] Add whitelist links to the mailbox view + (Amith Varghese ). +[jan] Make fetchmail on login a maintenance task (Nuno Loureiro + ). +[mms] Add VFS garbage collection for temporary attachment data. +[mms] Add a default encryption preference for sending messages. +[mms] Add 'Nuke Message' action to filters. +[mms] Add quick search links to search the current mailbox. +[mms] Scan messages for X-Priority and display results in the mailbox + view (Florent AIDE ). +[mms] Allow quicker access to large mailboxes on slower IMAP systems. +[mms] Added multipart/appledouble MIME_Viewer. +[jan] Add preference that lets users change the access control lists of + their imap folders (Chris Hastie ). +[mms] Split return receipt requests into 'delivered' and 'read' options + (Ryan Malloy ). +[mms] Implement fetchmail on login and fetchmail coloring to distinguish + between remote servers (Nuno Loureiro ). +[mms] User configurable attribution text for replies + (Chris Hastie ). +[mms] Added support for message/disposition-notification messages. +[jan] Folder names in any encoding can now be created/read through PHP's + multibyte support. +[mms] The "Reply" link for list messages will always send a message to the + original poster, never the list (Chris Hastie ). +[mms] Don't show "Reply All" link if user is the only recipient. +[mms] Added a multipart/report MIME_Viewer to make undelivered mail reports + easier to read. +[jan] Add Turkish translation (Genco Yilmaz ). +[mms] Convert IMP_Folder:: into an OO-interface. +[mms] Allow attachment descriptions to be altered + (Cliff Green ). +[mms] Set the local character set for all text/* composed messages. +[mms] The full MIME_Contents:: object is now cached when viewing a message + rather than the individual MIME_Parts. +[jan] Add UTF-8 support. Any content with any charset can now be displayed with + any translation. +[cjh] The mail/compose method is now a full call, not a link. This means, + aside from a bit less code duplication, that we now honor the + compose_popup preference in $registry calls. +[mms] Added hostname to information saved about user's last login. +[mms] Added support for stripping attachments from messages. +[mms] Better determination of MIME content-type for attachments when browser + does not send good information (using MIME_Magic::). +[mms] PGP messages are now rendered via the MIME embedded in the message. +[mms] Move composition related functions to IMP_Compose::. +[mms] Now, when reaching the end of the mailbox in the message screen, + directly load the mailbox script instead of redirecting via a URL. +[mms] Allow user to change disposition type of all attachments. +[jan] Add a preference to display message previews in the mailbox view + (Stephen Sherlock ). +[cjh] Add a preference for whether or not to display the entire addressbook + when first loading the contacts screen + (Etienne Goyer ). +[ejr] Add command line driver for quotas. +[mms] Allow multiple messages to be forwarded as rfc822 parts from the + mailbox screen. +[jan] Add logfile driver for quotas (Tim Gorter ). +[cjh] Add searching by Bcc header. +[mir] Add hook option to filter mail fetched by the Accounts (lib/Fetchmail) + feature. Example added in horde/config/hooks.php.dist +[cjh] Migrate to the new hooks API, removing the last need for + conf.php.dist (instead of conf.xml). +[mac] Add S/MIME support. +[avsm] Folders action bar only shows up at bottom if more than ten folders + are displayed on the screen. +[cjh] All hook functions that set preferences are now handled by the generic + preferences hook system; see horde/config/hooks.php.dist. +[mac] Don't modify the actual field name on auto-expand. +[mms] Created an IMP_Mailbox:: class to deal with building mailbox information + and, eventually, all message indexing. +[mac] Quota display now handled by the IMP_Quota API. +[mms] Can now filter by any header. +[cjh] Clean up the filter_on_login code, so that it is _always_ run on login. +[mac] Added an IMP specific ZIP MIME_Viewer. +[cjh] Use new &Identity::singleton() method and application-specific + driver implementations to load IMP's Identity_imp:: class. +[mms] Moved IMP session creation functions to IMP_Session::. +[mms] Added an IMP_Search:: class to handle mailbox searching. +[mms] Message sending now handled by IMP::sendMessage(). +[mms] Move text filtering to IMP:: class. +[mms] Added an IMP_Filter:: class to handle all filtering activity. +[mms] Spam reporting sends a message in message/rfc822 format. +[mms] Allow the users PGP public key to be uploaded to a keyserver. +[mms] The compose script makes sure to clean up all attachment files that + are generated during a message composition. even if cancelled. +[mms] Attachment disposition can now be set to either inline or attachment. +[mms] Improved handling of attachment data. +[mms] Added the multipart/related viewer. +[mms] Moved the message index tracking mechanism in the message.php script to + IMP_Message::. +[cjh] Add an option (preference controlled) to use IE's designmode + and send multipart/alternative messages. +[jan] Use a seperate textarea field for blacklisted email addresses in the + filters preference. +[mms] Add an option to allow for header summaries to be inserted when replying + to a message (Quinn Wilson ). +[mms] Created an IMP_Headers:: class to deal with all header manipulation + required in IMP. +[mms] Added a generic multipart/* MIME_Viewer. +[mms] Added a multipart/alternative MIME_Viewer. +[mms] Moved all common functions dealing with displaying the content of + mail messages to lib/Contents.php. +[cjh] Add an option to see a confirmation that messages were succesfully sent. +[cjh] Add option to delete fetched messages when using the fetchmail code. +[mms] Added application/ms-tnef MIME_Viewer. +[mms] Search for PGP public keys on a public keyserver for signed messages + if no key found locally. +[mms] Can now send messages with "X-Priority" set. +[mms] Add option to search for PGP data in 'text/plain' messages. +[mms] Add "Show All/Limited Headers" to message view. +[jan] Add fetchmail feature (Nuno Loureiro ). +[mms] Added MIME_Viewer to allow attached images to be viewed inline. +[mms] Add link for "Reply to List" for mailing lists. +[mms] Now recognize RFC 2369 headers (messages from mailing lists) and output + the relevant information. +[mms] Add message/rfc822 MIME_Viewer. +[jon] Set the username and password parameters when SMTP authentication is + requested. +[mms] Handle the new behavior of MIME_Structure::parse(). +[mms] Add OpenPGP functionality. +[ejr] Add text/enriched MIME_Viewer. +[cjh] If the server list is being used, users shouldn't be changing + the folder prefix. +[max] Add Brown IMP theme (Marco Obaid ) +[cjh] Make it possible to call IMP::authenticate() with arguments coming from + somewhere other than GET or POST vars. +[jan] Re-enable to select no sent mail folder for an identity. +[jan] Add method IMP::stripPreambleString(). +[jan] Fix problems with sent mail folder maintenance not being executed. +[cjh] Fix problems with the mailbox displayed after login if there is a + folders prefix set. +[cjh] Use the new PrefsUI class. +[cjh] Revert to not storing the folder prefix as part of user preferences. +[cjh] Fix problems with double Last Login: message and maintenance. +[jon] Adapt to the new Horde::img() syntax. +[cjh] Use the new Notification system. +[jan] Remove the standard value for the language preference. The language to + fall back to should be set Horde wide in lang.php instead. +[jon] Honor the "save sent mail" checkbox on the compose screen. +[jon] Print the language type in the entity. +[jon] Add entity support. +[jon] Add support to the mailbox and message views. +[mms] Move the quote prefix character from conf.php to the preferences. +[mms] Move the maintenace framework to Horde. + + +------ +v3.2.8 +------ + +[jan] Close XSS when setting the parent frame's page title by javascript (cjh). +[mms] Fix display of MIME parts less than 1K when local number format uses + ',' as the decimal separator. +[jan] Don't use trash folder on POP3 servers under certain circumstances + (Bug #1373). +[jan] Fix "Save as" link to save message sources (Bug #1233). + + +------ +v3.2.7 +------ + +[mms] Determine the default IMAP delimiter according to RFC 3501. +[mms] Fix the folders screen hanging if there was only one folder (Bug #504). +[jan] Correctly cancel messages composition in all cases (Rich Bartell + tags in the HTML MIME viewer. +[jan] SECURITY: Remove scripts from obfuscated "on..." attributes in the HTML + MIME viewer. + + +------ +v3.2.5 +------ + +[jan] SECURITY: Close an XSS hole in the HTML viewer, a variation to the one + reported in http://www.greymagic.com/security/advisories/gm005-mc/. +[cjh] Fix escaped double quotes on some broken mail servers (Bug #292). +[jan] Comment complete + + + +> + diff --git a/imp/templates/compose/compose.html b/imp/templates/compose/compose.html new file mode 100644 index 000000000..8ed08b7ec --- /dev/null +++ b/imp/templates/compose/compose.html @@ -0,0 +1,361 @@ +
enctype="multipart/form-data" action=""> + + + + + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + + class="button" onclick="return uniqSubmit('send_message', event);" value="Send Message" /> + + + class="button" onclick="uniqSubmit('save_draft', event);" value="Save Draft" /> + + +  
From  + + +   + + + + + + + + + + + + +  
 
  + + + + + + +   + + +
+
 
  + +  
+   + + +  
+   + + +  
  + +
  + + + + + + +
+
+
+
 
  + checked="checked" /> + + + + + + +
  + checked="checked" /> +
  + + + Switch to plain text compositionSwitch to HTML composition +
  + +
  + + class="button" onclick="return uniqSubmit('send_message', event);" value="Send Message" /> + + + class="button" onclick="uniqSubmit('save_draft', event);" value="Save Draft" /> + + +  
  + :  + +  
  + checked="checked" /> + +  
  + checked="checked" /> + +
+ + +
+ +

+  Attachments + +   + + +

+ + + + + + + + + + + + + + + + + + + + + + +
Maximum total attachment size reached.Maximum number of attachments reached. + + + + + + + + +
+ + + + +
+ (Maximum Attachment Size: bytes) +
+
+ +   +
+   + +   +
+ + +
+ +
+
+ Current Attachments (Total Size: KB / ) +
+ + + + + + + + + + +
+ [Icon] + .  ()   Size: KB +
+ + + + + + + + + + + + + +
+ +
 
+
+
+
+
+ + diff --git a/imp/templates/compose/redirect.html b/imp/templates/compose/redirect.html new file mode 100644 index 000000000..2f6119cbc --- /dev/null +++ b/imp/templates/compose/redirect.html @@ -0,0 +1,92 @@ +
+ + + + + + + +

+ +

+ + + + + + + + + + + + + + + + +
  + + + + + +
+
  + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + +
+ + +
+
  
 
+ + +
+
 
+
  + + + + +
+ + +
diff --git a/imp/templates/compose/success.html b/imp/templates/compose/success.html new file mode 100644 index 000000000..8e505cf4c --- /dev/null +++ b/imp/templates/compose/success.html @@ -0,0 +1 @@ + diff --git a/imp/templates/contacts/contacts.html b/imp/templates/contacts/contacts.html new file mode 100644 index 000000000..99d72e6c6 --- /dev/null +++ b/imp/templates/contacts/contacts.html @@ -0,0 +1,72 @@ +
+ + + + + +

+ Address Book +

+ +
+

+ + + + + + + + + +

+ + + + + + + + + + + +
+ + + +
 
+ +
 
+ +
+
+ + +
  + +
+
+ +
+ +
+ + +
+ + diff --git a/imp/templates/fetchmail/fetchmail.html b/imp/templates/fetchmail/fetchmail.html new file mode 100644 index 000000000..38d0b988f --- /dev/null +++ b/imp/templates/fetchmail/fetchmail.html @@ -0,0 +1,36 @@ +
+ + + +

+ Fetch Mail +

+ +
+ + Select accounts to fetch mail from: +
+
    + +
  • + +
  • +
    +
+ + You have not configured any external mail accounts. + Create an account. +
+
+
+ +
+ + + + + + +
+ diff --git a/imp/templates/fetchmail/fetchmailprefs.html b/imp/templates/fetchmail/fetchmailprefs.html new file mode 100644 index 000000000..40631a5e5 --- /dev/null +++ b/imp/templates/fetchmail/fetchmailprefs.html @@ -0,0 +1,129 @@ +
+ + Other Mail Accounts +
+ +
+ + + + + + + +
+ + + + +
+ + +   +
+ + or +
+ +
+ +   +
+ +
+ + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ checked="checked" /> + +
+ checked="checked" /> + +
+ checked="checked" /> + +
+ checked="checked" /> + +
+ (NOTE: You need to have "Perform maintenance operations on login?" enabled in your maintenance options.) + +
+ Color Indicator: +
+ + + + + + +
+ checked="checked" /> + +
+
+
+
+
+ +
+ + + + + +
+ + + + + + +
+ diff --git a/imp/templates/filters/prefs.html b/imp/templates/filters/prefs.html new file mode 100644 index 000000000..5864cc1a9 --- /dev/null +++ b/imp/templates/filters/prefs.html @@ -0,0 +1,37 @@ +
+ Filter Settings +
+ + +
+ Filter support is disabled on this system. + +

+
+ +
+
+ + + + + + +    
+
+ + +
+ +checked="checked" />    
+
+ +

+    + +

+
+ + +
+
diff --git a/imp/templates/folders/actions.html b/imp/templates/folders/actions.html new file mode 100644 index 000000000..f882a8224 --- /dev/null +++ b/imp/templates/folders/actions.html @@ -0,0 +1,60 @@ + + + + +
+ +
+ +   /> +
+
+
+ + + + + +
+
+
    + +
  • +
    +
  • +
  • +
+
+
+ +
+
diff --git a/imp/templates/folders/folders.html b/imp/templates/folders/folders.html new file mode 100644 index 000000000..1cb0393cb --- /dev/null +++ b/imp/templates/folders/folders.html @@ -0,0 +1,5 @@ + +
+   (/)   [] [] +
+
diff --git a/imp/templates/folders/folders_confirm.html b/imp/templates/folders/folders_confirm.html new file mode 100644 index 000000000..40f01c69c --- /dev/null +++ b/imp/templates/folders/folders_confirm.html @@ -0,0 +1,27 @@ +
+ + + +
+ Folder Actions - Confirmation +
+ +
+ You are attempting to delete the following folder(s). + You are attempting to delete all messages contained in the following folder(s). +
+ If you continue, all messages in the folder(s) will be lost! +
+ + +
+   +
+
+ +
+   + +
+ +
diff --git a/imp/templates/folders/folders_size.html b/imp/templates/folders/folders_size.html new file mode 100644 index 000000000..25533d206 --- /dev/null +++ b/imp/templates/folders/folders_size.html @@ -0,0 +1,32 @@ +
Folder Sizes
+ + + + + + + + + + + + + + + + + + + + + + + + +
FolderSize
Sum
+ +
+
+ +
+
diff --git a/imp/templates/folders/head.html b/imp/templates/folders/head.html new file mode 100644 index 000000000..2b0b8ee81 --- /dev/null +++ b/imp/templates/folders/head.html @@ -0,0 +1,11 @@ +

+ Folder Navigator  +

+
+
+ + + + + + diff --git a/imp/templates/folders/import.html b/imp/templates/folders/import.html new file mode 100644 index 000000000..138e4f1f3 --- /dev/null +++ b/imp/templates/folders/import.html @@ -0,0 +1,20 @@ + + + + + +
+ Import mbox File +
+ +
+
   +   +   + into folder + . +    + + +
+
diff --git a/imp/templates/javascript_defs.php b/imp/templates/javascript_defs.php new file mode 100644 index 000000000..a2850aa4e --- /dev/null +++ b/imp/templates/javascript_defs.php @@ -0,0 +1,81 @@ + array( + 'hasDOM' => $GLOBALS['browser']->hasFeature('dom'), + 'IMP_ALL' => IMP::FLAG_ALL, + 'isIE' => $GLOBALS['browser']->isBrowser('msie'), + 'pop3' => (isset($_SESSION['imp']) && ($_SESSION['imp']['protocol'] == 'pop')), + 'fixed_folders' => empty($GLOBALS['conf']['server']['fixed_folders']) + ? array() + : $GLOBALS['conf']['server']['fixed_folders'], + ), + + /* Gettext strings used in core javascript files. */ + 'text' => array_map('addslashes', array( + /* Strings used in compose.js */ + 'compose_cancel' => _("Cancelling this message will permanently discard its contents.") . "\n" . _("Are you sure you want to do this?"), + 'compose_discard' => _("Doing so will discard this message permanently."), + 'compose_recipient' => _("You must specify a recipient."), + 'compose_sigreplace' => _("The signature was successfully replaced."), + 'compose_signotreplace' => _("The signature could not be replaced."), + 'compose_nosubject' => _("The message does not have a Subject entered.") . "\n" . _("Send message without a Subject?"), + 'compose_file' => _("File"), + 'compose_attachment' => _("Attachment"), + 'compose_inline' => _("Inline"), + + /* Strings used in mailbox.js */ + 'mailbox_submit' => _("You must select at least one message first."), + 'mailbox_delete' => _("Are you sure you wish to PERMANENTLY delete these messages?"), + 'mailbox_selectone' => _("You must select at least one message first."), + 'yes' => _("Yes"), + 'no' => _("No"), + + /* Strings used in contacts.js */ + 'contacts_select' => _("You must select an address first."), + 'contacts_closed' => _("The message being composed has been closed. Exiting."), + 'contacts_called' => _("This window must be called from a compose window."), + + /* Strings used in folders.js */ + 'folders_select' => _("Please select a folder before you perform this action."), + 'folders_oneselect' => _("Only one folder should be selected for this action."), + 'folders_subfolder1' => _("You are creating a sub-folder to"), + 'folders_subfolder2' => _("Please enter the name of the new folder:"), + 'folders_toplevel' => _("You are creating a top-level folder.") . "\n" . _("Please enter the name of the new folder:"), + 'folders_download1' => _("All messages in the following folder(s) will be downloaded into one MBOX file:"), + 'folders_download2' => _("This may take some time. Are you sure you want to continue?"), + 'folders_rename1' => _("You are renaming the folder:"), + 'folders_rename2' => _("Please enter the new name:"), + 'folders_no_rename' => _("This folder may not be renamed:"), + + /* Strings used in search.js */ + 'search_select' => _("Please select at least one folder to search."), + + /* Strings used in popup.js */ + 'popup_block' => _("A popup window could not be opened. Perhaps you have set your browser to block popup windows?"), + + /* Strings used in login.js */ + 'login_username' => _("Please provide your username."), + 'login_password' => _("Please provide your password."), + + /* Strings used in multiple pages. */ + 'spam_report' => _("Are you sure you wish to report this message as spam?"), + 'notspam_report' => _("Are you sure you wish to report this message as innocent?"), + 'newfolder' => _("You are copying/moving to a new folder.") . "\n" . _("Please enter a name for the new folder:") . "\n", + 'target_mbox' => _("You must select a target mailbox first."), + )) +); + +require_once 'Horde/Serialize.php'; +echo IMP::wrapInlineScript(array('var IMP = ' . Horde_Serialize::serialize($code, SERIALIZE_JSON, NLS::getCharset()) . ';')); diff --git a/imp/templates/login/login.html b/imp/templates/login/login.html new file mode 100644 index 000000000..6ba1e2652 --- /dev/null +++ b/imp/templates/login/login.html @@ -0,0 +1,117 @@ +
target="_parent"> + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ @ +
+ +
+ +
+ +
  + +
  + +
+
+ diff --git a/imp/templates/login/mobile.inc b/imp/templates/login/mobile.inc new file mode 100644 index 000000000..32a81ebc9 --- /dev/null +++ b/imp/templates/login/mobile.inc @@ -0,0 +1,50 @@ +add(new Horde_Mobile_card()); + +$notification = &new Notification(); +$l = &$notification->attach('status', null, 'Notification_Listener_mobile'); +$l->setMobileObject($c); + +$c->add(new Horde_Mobile_text(sprintf(_("Welcome to %s"), ($imp_auth) ? $registry->get('name',' horde') : $registry->get('name')))); + +$f = &$c->add(new Horde_Mobile_form(Horde::applicationUrl('redirect.php', false, -1))); +$f->add(new Horde_Mobile_input('imapuser', htmlspecialchars(Util::getFormData('imapuser')), _("Username: "))); + +// Add a password input, and set the type accordingly. +$p = &$f->add(new Horde_Mobile_input('pass', '', _("Password: "))); +$p->set('type', 'password'); + +if (!empty($server_select)) { + $f->add($server_select); +} + +if (!empty($protocol_select)) { + $f->add($protocol_select); +} + +if (!empty($lang_select)) { + $f->add($lang_select); +} + +if (!empty($view_select)) { + $f->add($view_select); +} + +// Submit button. +$f->add(new Horde_Mobile_submit(_("Log in"))); + +if (!empty($actionID)) { + $f->add(new Horde_Mobile_hidden('actionID', $actionID)); +} +if (!empty($url_param)) { + $f->add(new Horde_Mobile_hidden('url', $url_param)); +} + +// Add the form to the page. +$m->add($f); + +// Display everything. +$m->display(); diff --git a/imp/templates/mailbox/actions.html b/imp/templates/mailbox/actions.html new file mode 100644 index 000000000..1f9c748f4 --- /dev/null +++ b/imp/templates/mailbox/actions.html @@ -0,0 +1,28 @@ + + + + +
+
+
    + class="lastnavbar"> +
  • +
+
+
+
    + +
  • +
  • +
  • +
  • +
    +
  • + +
  • +
  • +
    +
  • +
+
+
diff --git a/imp/templates/mailbox/actions_deleted.html b/imp/templates/mailbox/actions_deleted.html new file mode 100644 index 000000000..76072ddd0 --- /dev/null +++ b/imp/templates/mailbox/actions_deleted.html @@ -0,0 +1,6 @@ +
+
    +
  • +
  • +
+
diff --git a/imp/templates/mailbox/empty_mailbox.html b/imp/templates/mailbox/empty_mailbox.html new file mode 100644 index 000000000..06bc4fc8d --- /dev/null +++ b/imp/templates/mailbox/empty_mailbox.html @@ -0,0 +1,3 @@ +
+ There are no messages in this mailbox. +
diff --git a/imp/templates/mailbox/header.html b/imp/templates/mailbox/header.html new file mode 100644 index 000000000..c6435fd82 --- /dev/null +++ b/imp/templates/mailbox/header.html @@ -0,0 +1,21 @@ +
+
style="width:40%" class="leftFloat"> + + + + + + +
+ +
+ +
+
+ +
+ + +
+
+
diff --git a/imp/templates/mailbox/mailbox.html b/imp/templates/mailbox/mailbox.html new file mode 100644 index 000000000..734a090e9 --- /dev/null +++ b/imp/templates/mailbox/mailbox.html @@ -0,0 +1,15 @@ + + + + + + style="background:"> + + +   +   + + + + + diff --git a/imp/templates/mailbox/message_footers.html b/imp/templates/mailbox/message_footers.html new file mode 100644 index 000000000..fe2785d12 --- /dev/null +++ b/imp/templates/mailbox/message_footers.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/imp/templates/mailbox/message_headers.html b/imp/templates/mailbox/message_headers.html new file mode 100644 index 000000000..4f541e09e --- /dev/null +++ b/imp/templates/mailbox/message_headers.html @@ -0,0 +1,22 @@ + +
+ + + + + + + + + + + + + + + diff --git a/imp/templates/mailbox/navbar.html b/imp/templates/mailbox/navbar.html new file mode 100644 index 000000000..3f17dd02c --- /dev/null +++ b/imp/templates/mailbox/navbar.html @@ -0,0 +1,79 @@ +
  + + /> + onclick="document.location.href=this.down('A').href;"> + +
+ + class="bottomborder"> +
+ + + + + + + + + +
+ + +
+
+ +
    +
  • +
  • +
+ + + +
+
+
+
+ +
+ + + + + + + +
+
+ +
+
diff --git a/imp/templates/mailbox/searchfolder.html b/imp/templates/mailbox/searchfolder.html new file mode 100644 index 000000000..1f74c1f4f --- /dev/null +++ b/imp/templates/mailbox/searchfolder.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/imp/templates/menu.html b/imp/templates/menu.html new file mode 100644 index 000000000..998c89b1f --- /dev/null +++ b/imp/templates/menu.html @@ -0,0 +1,36 @@ +
+ + +
+ + + + + diff --git a/imp/templates/message/message.html b/imp/templates/message/message.html new file mode 100644 index 000000000..fac4278f5 --- /dev/null +++ b/imp/templates/message/message.html @@ -0,0 +1,16 @@ +
+ + + + + + + +
: 
+
+ +
+ + +
+
diff --git a/imp/templates/message/navbar_actions.html b/imp/templates/message/navbar_actions.html new file mode 100644 index 000000000..6124d63a6 --- /dev/null +++ b/imp/templates/message/navbar_actions.html @@ -0,0 +1,48 @@ + + + + +
+
    + +
  • +
    + +
  • +
      +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
  • +
    +
  • + +
  • +
  • +
    +
  • +
  • +
  • +
  • + +
  • +
  • +
    +
  • +
      +
    • +
    • +
    • +
    +
  • +
+
diff --git a/imp/templates/message/navbar_navigate.html b/imp/templates/message/navbar_navigate.html new file mode 100644 index 000000000..ede1cadcf --- /dev/null +++ b/imp/templates/message/navbar_navigate.html @@ -0,0 +1,48 @@ + + + + + + + + + +
+ +
+ + +
+
+ + +
+
    +
  • +
  • +
+
+
+ + +
+
+
+
+   + + +
+
+ diff --git a/imp/templates/message/navbar_top.html b/imp/templates/message/navbar_top.html new file mode 100644 index 000000000..299d7d91a --- /dev/null +++ b/imp/templates/message/navbar_top.html @@ -0,0 +1,13 @@ +
+ + + + + + + + + +

+ +

diff --git a/imp/templates/newmsg/alert.html b/imp/templates/newmsg/alert.html new file mode 100644 index 000000000..5e713957d --- /dev/null +++ b/imp/templates/newmsg/alert.html @@ -0,0 +1,18 @@ +
+ +

You have new mail in:

+
    + +
  • ()
  • +
    +
+ +
    + Go to Virtual Inbox +
+
+ +

+
+ +
diff --git a/imp/templates/pgp/import_key.html b/imp/templates/pgp/import_key.html new file mode 100644 index 000000000..ad6054fbf --- /dev/null +++ b/imp/templates/pgp/import_key.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Import Public PGP KeyImport Personal Public PGP KeyImport Personal Private PGP Key
+ + + + + + + +
+ +
+
--OR--
+ + + + +
+   + +
+
+ + +
+ + + + diff --git a/imp/templates/pgp/passphrase.html b/imp/templates/pgp/passphrase.html new file mode 100644 index 000000000..16233cbe5 --- /dev/null +++ b/imp/templates/pgp/passphrase.html @@ -0,0 +1,29 @@ +
+ + + + + + + +
+ + + Please enter the passphrase for this message. + + Please enter the passphrase for your PGP private key. You will only need to enter this passphrase once per session. + +
+ +
+   +   + + +
+ +
+ + diff --git a/imp/templates/pgp/pgp.html b/imp/templates/pgp/pgp.html new file mode 100644 index 000000000..d0cd06035 --- /dev/null +++ b/imp/templates/pgp/pgp.html @@ -0,0 +1,149 @@ + +   +
+ NOTE: PGP support requires popup windows to be used. If your browser is currently set to disable popup windows, you must change this setting or else the PGP features will not work correctly. +
+ + checked="checked" />   +
+
+ + checked="checked" />   +
+
+ + checked="checked" />   +
+
+ +

+ + +

+
+ +
+ +
+
+ PGP Public Keyring +
+ +
+ + No Keys in Keyring
+ + + Error:
+ + + + + + + + +
()  [View] [Details] [Delete]
+
+ + +
Key import is not available. File upload is not enabled on this server.
+ + +
Key import is not available. You have no address book defined to add your contacts.
+ +
+ +
+
+ +
+ +
+
+ Your PGP Public/Private Keys +
+ +
+ + PGP Personal Keypair support requires a secure web connection. + + + + + + + + + + + + + +
Your Public Key:  [View] [Details] [Send Key to Public Keyserver]
Your Private Key:  [] [View] [Details]
+ +

+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  
  
  
  + +
  
  
+ +

+ + + + + +

+
+ + + PGP support is disabled on this system. + +
+
+ +

+ + +

+
+
+ diff --git a/imp/templates/prefs/encryptselect.inc b/imp/templates/prefs/encryptselect.inc new file mode 100644 index 000000000..ef89f5284 --- /dev/null +++ b/imp/templates/prefs/encryptselect.inc @@ -0,0 +1,5 @@ +
+ +
diff --git a/imp/templates/prefs/folderselect.inc b/imp/templates/prefs/folderselect.inc new file mode 100644 index 000000000..10b01a968 --- /dev/null +++ b/imp/templates/prefs/folderselect.inc @@ -0,0 +1,27 @@ +isLocked('drafts_folder')): ?> + + +
+ + +
+ diff --git a/imp/templates/prefs/initialpageselect.inc b/imp/templates/prefs/initialpageselect.inc new file mode 100644 index 000000000..2d3bf83df --- /dev/null +++ b/imp/templates/prefs/initialpageselect.inc @@ -0,0 +1,21 @@ +isLocked('initial_page')): + +if (empty($GLOBALS['conf']['user']['allow_folders'])) { + $mailbox_option = ''; +} else { + $mailbox_selected = $prefs->getValue('initial_page'); + $mailbox_option = '\n"; + } + } + + $readSelect = ''; + if (!is_a($readable, 'PEAR_Error') && is_array($readable)) { + foreach (array_diff(array_keys($readable), $search['sources']) as $source) { + $readSelect .= '\n"; + } + } + + if (!is_a($writeable, 'PEAR_Error') && is_array($writeable)) { + $writeSelect = '' . "\n"; + $writeSource = ''; + foreach ($writeable as $source => $name) { + $sel = $prefs->getValue('add_source') == $source ? ' selected="selected"' : ''; + $writeSelect .= '\n"; + $writeSource = $source; + } + } + + $search_fields = array(); + if (!is_a($readable, 'PEAR_Error') && is_array($readable)) { + foreach (array_keys($readable) as $source) { + $search_fields[$source] = $registry->call('contacts/fields', $source); + } + } + + $js = "var searchFields = [];\n"; + $source_count = 0; + foreach ($search_fields as $source => $fields) { + $js .= "searchFields[$source_count] = [];\n"; + $js .= "searchFields[$source_count][0] = '$source';\n"; + + $field_count = 1; + foreach ($fields as $field) { + if ($field['search']) { + $marked = isset($search['fields'][$source]) && in_array($field['name'], $search['fields'][$source]) ? 'true' : 'false'; + $js .= "searchFields[$source_count][$field_count] = ['" . $field['name'] . "', '" . $field['label'] . "', $marked];\n"; + $field_count++; + } + } + + $source_count++; + } +} +?> + +isLocked('search_sources') && (!empty($readSelect) || !empty($prefSelect))): ?> + + +
+" /> + 1): ?> +
+ + + + + + + +
+ + + + getImageDir('horde')) ?> +
+ getImageDir('horde')) ?> +
+ + + + getImageDir('horde')) ?> +
+ getImageDir('horde')) ?> +
+ +
+ +
+ + +
+ + + + + +
+ + +
+ + + + +isLocked('add_source') && !empty($writeSelect)): ?> +
+
+ + + diff --git a/imp/templates/prefs/spamselect.inc b/imp/templates/prefs/spamselect.inc new file mode 100644 index 000000000..4844c0056 --- /dev/null +++ b/imp/templates/prefs/spamselect.inc @@ -0,0 +1,23 @@ +isLocked('spam_folder')): ?> + + +
+ + + diff --git a/imp/templates/prefs/trashselect.inc b/imp/templates/prefs/trashselect.inc new file mode 100644 index 000000000..16f227c96 --- /dev/null +++ b/imp/templates/prefs/trashselect.inc @@ -0,0 +1,29 @@ +isLocked('trash_folder') && !$prefs->isLocked('use_vtrash')): ?> + + +
+ + +
+ diff --git a/imp/templates/quota/quota.html b/imp/templates/quota/quota.html new file mode 100644 index 000000000..d27918714 --- /dev/null +++ b/imp/templates/quota/quota.html @@ -0,0 +1,7 @@ + + + + +
+ +
diff --git a/imp/templates/rss/mailbox.rss b/imp/templates/rss/mailbox.rss new file mode 100644 index 000000000..2b70fe680 --- /dev/null +++ b/imp/templates/rss/mailbox.rss @@ -0,0 +1,28 @@ +"?> +" type="text/xsl"?> + + + <tag:title /> + + + + + + + + + <tag:items.title /> + Date:
+ From:
+ To:
+
+ ]]>
+ + +
+
+
+ +
+
diff --git a/imp/templates/saveimage/saveimage.html b/imp/templates/saveimage/saveimage.html new file mode 100644 index 000000000..153f1b70a --- /dev/null +++ b/imp/templates/saveimage/saveimage.html @@ -0,0 +1,23 @@ +
+ + + + +

+ + Select the gallery to save the image in. +

+ +

+ + +

+ +
+   + +
+ +
diff --git a/imp/templates/search/search.html b/imp/templates/search/search.html new file mode 100644 index 000000000..2fd9aaf2c --- /dev/null +++ b/imp/templates/search/search.html @@ -0,0 +1,185 @@ + diff --git a/imp/templates/smime/import_key.html b/imp/templates/smime/import_key.html new file mode 100644 index 000000000..194775ec9 --- /dev/null +++ b/imp/templates/smime/import_key.html @@ -0,0 +1,77 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
colspan="2">Import Public S/MIME KeyImport Personal S/MIME Certificates
+ + + + + + + +
+ +
+
--OR--
colspan="2"> + + + + +
+   + +
+
+ + + + + + + +
+   +
+   +
+
+ + +
+ + + + diff --git a/imp/templates/smime/passphrase.html b/imp/templates/smime/passphrase.html new file mode 100644 index 000000000..8848423db --- /dev/null +++ b/imp/templates/smime/passphrase.html @@ -0,0 +1,31 @@ +
+ + + + + + + + + + + + +
+ + + Please enter the passphrase for your S/MIME private key. You will only need to enter this passphrase once per session. +
+ +
+   +   + + +

+ + + + diff --git a/imp/templates/smime/smime.html b/imp/templates/smime/smime.html new file mode 100644 index 000000000..4b0317d43 --- /dev/null +++ b/imp/templates/smime/smime.html @@ -0,0 +1,97 @@ + +   +
+ NOTE: S/MIME support requires popup windows to be used. If your browser is currently set to disable popup windows, you must change this setting or else the S/MIME features will not work correctly. +
+ + checked="checked" />   +
+
+ +

+ + +

+
+ +
+ +
+
+ S/MIME Public Keyring +
+ +
+ + No Keys in Keyring + + + Error: + + + + + + + + +
()  [View] [Details] [Delete]
+
+ + + Key import is not available. File upload is not enabled on this server. + + + Key import is not available. You have no address book defined to add your contacts. + +

+

+
+
+ +
+ +
+
+ Your S/MIME Public/Private Certificates +
+ +
+ + S/MIME Personal Keypair support requires a secure web connection. + + + + + + + + + + + +
Your Public Key:  [View] [Details]
Your Private Key:  [] [View]
+ +

+

+ + + Certificate import is not available. File upload is not enabled on this server. + +

+
+
+ + + S/MIME support is disabled on this system. + +
+
+ +

+ + +

+
+
+ diff --git a/imp/templates/stationery/stationery.html b/imp/templates/stationery/stationery.html new file mode 100644 index 000000000..e493005cf --- /dev/null +++ b/imp/templates/stationery/stationery.html @@ -0,0 +1,49 @@ +
+ + + + + +
+ Stationery +
+ +

+ + + + +
+ + + +
+ +
+ +
+ +
+ +
+ +
+You can use the following placeholders in the stationery text: %c for the current message content; %s for the signature. +

+ +   + +   + + + + + diff --git a/imp/templates/thread/thread.html b/imp/templates/thread/thread.html new file mode 100644 index 000000000..70c243ae5 --- /dev/null +++ b/imp/templates/thread/thread.html @@ -0,0 +1,55 @@ +

+ Thread Display:Multiple Message View: +

+
+ + +
+ +
 
+
+
+ +
+ + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + +
Date: 
To:From: 
Subject: 
+ +
+ +
+
+
 
diff --git a/imp/test.php b/imp/test.php new file mode 100644 index 000000000..36230663f --- /dev/null +++ b/imp/test.php @@ -0,0 +1,248 @@ + + * @author Chuck Hagenbuch + * @author Michael Slusarz + */ + +function _doConnectionTest() +{ + require_once 'Horde/Imap/Client.php'; + $imap_config = array( + 'username' => isset($_POST['user']) ? $_POST['user'] : '', + 'password' => isset($_POST['passwd']) ? $_POST['passwd'] : '', + 'hostspec' => isset($_POST['server']) ? $_POST['server'] : '', + 'port' => isset($_POST['port']) ? $_POST['port'] : '', + 'secure' => ($_POST['port'] == 'yes') + ); + + $driver = ($_POST['server_type'] == 'imap') ? 'Socket' : 'Cclient-pop3'; + + try { + $imap_client = Horde_Imap_Client::getInstance(($_POST['server_type'] == 'imap') ? 'Socket' : 'Cclient-pop3', $imap_config); + } catch (Horde_Imap_Client_Exception $e) { + return _errorMsg($e); + } + + echo "Attempting to login to the server:\n"; + + try { + $imap_client->login(); + } catch (Horde_Imap_Client_Exception $e) { + return _errorMsg($e); + } + + echo 'SUCCESS

'; + + if ($driver == 'Socket') { + echo "The following IMAP server information was discovered from the remote server:\n" . + "

Namespace Information
";
+
+        try {
+            $namespaces = $imap_client->getNamespaces();
+            foreach ($namespaces as $val) {
+                echo "NAMESPACE: \"" . $val['name'] . "\"\n";
+                echo "DELIMITER: " . $val['delimiter'] . "\n";
+                echo "TYPE: " . $val['type'] . "\n\n";
+            }
+        } catch (Horde_Imap_Client_Exception $e) {
+            _errorMsg($e);
+        }
+
+        echo "
\n" . + "
IMAP server capabilities:
";
+
+        try {
+            print_r($capability = $imap_client->capability());
+        } catch (Horde_Imap_Client_Exception $e) {
+            _errorMsg($e);
+        }
+
+        echo "
\n"; + + // @todo IMAP Charset Search Support + } +} + +function _errorMsg($e) +{ + echo 'ERROR - The server returned the following error message:' . "\n" . + '
' . $e->getMessage() . '

'; +} + + +/* Include Horde's core.php file. */ +include_once '../lib/core.php'; + +/* We should have loaded the String class, from the Horde_Util + * package, in core.php. If String:: isn't defined, then we're not + * finding some critical libraries. */ +if (!class_exists('String')) { + echo '

The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough and display_errors is on, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the framework module from Horde CVS, and install the packages in it with the install-packages.php script.

'; + exit; +} + +/* Initialize the Horde_Test:: class. */ +if (!is_readable('../lib/Test.php')) { + echo 'ERROR: You must install Horde before running this script.'; + exit; +} +require_once '../lib/Test.php'; +$horde_test = new Horde_Test; + +/* IMP version. */ +$module = 'IMP'; +require_once './lib/version.php'; +$module_version = IMP_VERSION; + +require TEST_TEMPLATES . 'header.inc'; +require TEST_TEMPLATES . 'version.inc'; + +/* Display versions of other Horde applications. */ +$app_list = array( + 'dimp' => array( + 'error' => 'DIMP provides an alternate display view using JavaScript.', + 'version' => '2.0' + ), + 'gollem' => array( + 'error' => 'Gollem provides access to local VFS filesystems to attach files.', + 'version' => '2.0' + ), + 'ingo' => array( + 'error' => 'Ingo provides basic mail filtering capabilities to IMP.', + 'version' => '2.0' + ), + 'mimp' => array( + 'error' => 'MIMP provides an alternate display view suitable for mobile browsers or very slow connections.', + 'version' => '2.0' + ), + 'nag' => array( + 'error' => 'Nag allows tasks to be directly created from e-mail data.', + 'version' => '3.0' + ), + 'turba' => array( + 'error' => 'Turba provides addressbook/contacts capabilities to IMP.', + 'version' => '3.0' + ) +); +$app_output = $horde_test->requiredAppCheck($app_list); + +?> +

Other Horde Applications

+
    + +
+getPhpVersionInformation(); +require TEST_TEMPLATES . 'php_version.inc'; + +/* PHP modules. */ +$module_list = array( + 'idn' => array( + 'descrip' => 'Internationalized Domain Names Support', + 'error' => 'IMP requires the idn module (installed via PECL) in order to handle Internationalized Domain Names.', + 'fatal' => false + ), + 'imap' => array( + 'descrip' => 'IMAP Support', + 'error' => 'IMP requires the imap module to interact with the mail server. It is required ONLY for POP3 access.', + 'fatal' => false + ), + 'openssl' => array( + 'descrip' => 'OpenSSL Support', + 'error' => 'The openssl module is required to use S/MIME in IMP. Compile PHP with --with-openssl to activate.', + 'fatal' => false + ), + 'tidy' => array( + 'descrip' => 'Tidy support', + 'error' => 'If the tidy PHP extension is available, IMP can use it to sanitize the output of HTML messages before displaying to the user, and to clean outgoing HTML messages created in the HTML composition mode. See imp/docs/INSTALL for more information.', + 'fatal' => false, + ) +); + +/* PHP settings. */ +$setting_list = array( + 'file_uploads' => array( + 'setting' => true, + 'error' => 'file_uploads must be enabled to use various features of IMP. See the INSTALL file for more information.' + ) +); + +/* IMP configuration files. */ +$file_list = array( + 'config/conf.php' => 'The file ./config/conf.php appears to be missing. You must generate this file as an administrator via Horde. See horde/docs/INSTALL.', + 'config/mime_drivers.php' => null, + 'config/prefs.php' => null, + 'config/servers.php' => null +); + +/* PEAR/PECL modules. */ +$pear_list = array( + 'Auth_SASL' => array( + 'path' => 'Auth/SASL.php', + 'error' => 'If your IMAP server uses CRAM-MD5 or DIGEST-MD5 authentication, this module is required.' + ), + 'HTTP_Request' => array( + 'path' => 'HTTP/Request.php', + 'error' => 'The HTML composition mode requires HTTP_Request.' + ) +); + +/* Get the status output now. */ +$module_output = $horde_test->phpModuleCheck($module_list); +$setting_output = $horde_test->phpSettingCheck($setting_list); +$file_output = $horde_test->requiredFileCheck($file_list); +$pear_output = $horde_test->PEARModuleCheck($pear_list); + +?> + +

PHP Module Capabilities

+
    + +
+ +

Miscellaneous PHP Settings

+
    + +
+ +

Required IMP Configuration Files

+
    + +
+ +

PEAR

+
    + +
+ +

PHP Mail Server Support Test

+ + +
+ + + + + + + + +
(If non-standard port; leave blank to auto-detect using standard ports)
+
+ + + * + * $Horde: imp/themes/azur/screen.css,v 1.7 2008/04/08 18:07:30 chuck Exp $ + */ + +.deleted { + background-color: #bbb; + color: #eee; +} +.important, .flagged { + background-color: #fcd3ff; + color: #f00; +} +.unseen { + background-color: #bec0dd; + color: #000; +} +.answered { + background-color: #e8e8ff; + color: #666; +} +.quoted1 { + color: #606; +} +.quoted2 { + color: #077; +} +.quoted3 { + color: #900; +} +.quoted4 { + color: #009; +} +.quoted5 { + color: #b60; +} +.signature { + color: #bbb; +} +.signature .fixed { + color: #bbb; + font-size: 110%; +} +.quotawarn { + color: #000; + background-color: yellow; +} +.quotaalert { + color: #fff; + background-color: red; +} diff --git a/imp/themes/bluemoon/screen.css b/imp/themes/bluemoon/screen.css new file mode 100644 index 000000000..e028de90b --- /dev/null +++ b/imp/themes/bluemoon/screen.css @@ -0,0 +1,39 @@ +/** + * $Horde: imp/themes/bluemoon/screen.css,v 1.5 2008/04/08 18:07:30 chuck Exp $ + */ + +.deleted { + background-color: #999; +} +.deleted-over { + background-color: #777; +} +.important, .flagged { + background-color: #fcc; +} +tr.important:hover, tr.important-over, tr.flagged:hover, tr.flagged-over { + background-color: #faa; +} +.unseen { + background-color: #eef; +} +.unseen-over { + background-color: #ccf; +} +.answered { + background-color: #cfc; +} +.answered-over { + background-color: #9e9; +} +.folderunsub { + background-color: #bcd; +} +.quotawarn { + color: #000; + background-color: yellow; +} +.quotaalert { + color: #fff; + background-color: red; +} diff --git a/imp/themes/bluewhite/screen.css b/imp/themes/bluewhite/screen.css new file mode 100644 index 000000000..899ca1c63 --- /dev/null +++ b/imp/themes/bluewhite/screen.css @@ -0,0 +1,38 @@ +/** + * $Horde: imp/themes/bluewhite/screen.css,v 1.10 2007/02/16 19:12:05 slusarz Exp $ + */ + +.folders { + font-size: 90%; +} +.folders select { + font-size: 112%; +} + +form#search div.smallheader { + font-family: Verdana,Helvetica,sans-serif; +} + +.answered { + background: #aca; +} +.important, .flagged { + background: #fcc; +} +tr.important:hover, tr.important-over, tr.flagged:hover, tr.flagged-over { + background: #faa; +} +.deleted { + background: #999; +} +.deleted:hover, .deleted-over { + background: #777; +} +.deleted * { + text-decoration: line-through; +} + +div.composebody { + background: #f3f3f9; + border: 1px solid #669; +} diff --git a/imp/themes/brown/screen.css b/imp/themes/brown/screen.css new file mode 100644 index 000000000..c09a4d3c8 --- /dev/null +++ b/imp/themes/brown/screen.css @@ -0,0 +1,7 @@ +/** + * $Horde: imp/themes/brown/screen.css,v 1.1 2004/10/17 20:49:38 mdjukic Exp $ + */ + +.unseen { + background-color: #efeeee; +} diff --git a/imp/themes/burntorange/screen.css b/imp/themes/burntorange/screen.css new file mode 100644 index 000000000..4ad00bec2 --- /dev/null +++ b/imp/themes/burntorange/screen.css @@ -0,0 +1,35 @@ +/** + * Theme by : Eric Jon ROSTETTER + * Please contact the Theme's author for any missing style. + * + * $Horde: imp/themes/burntorange/screen.css,v 1.3 2007/02/16 19:12:05 slusarz Exp $ + */ + +.deleted { + background-color: #ccc; +} +.important, .flagged { + background-color: yellow; +} +.unseen { + background-color: #ddffd5; +} +.answered { + background-color: #eeee90; +} +.quotawarn { + font-family: Verdana,Helvetica,sans-serif; + font-weight: bold; + font-size: 130%; +} +.quotaalert { + font-family: Verdana,Helvetica,sans-serif; + font-weight: bold; + font-size: 130%; +} +.control { + border-bottom: 1 px solid #fff; +} +.selected-control { + border-bottom: 1 px solid #fff; +} diff --git a/imp/themes/cherry/screen.css b/imp/themes/cherry/screen.css new file mode 100644 index 000000000..529b90743 --- /dev/null +++ b/imp/themes/cherry/screen.css @@ -0,0 +1,13 @@ +/** + * $Horde: imp/themes/cherry/screen.css,v 1.2 2007/02/16 19:12:05 slusarz Exp $ + */ + +.important, .flagged { + background-color: #FFFFAA; +} +.unseen { + background-color: #FFCC99; +} +.answered { + background-color: #DDDDDD; +} diff --git a/imp/themes/cornflower/screen.css b/imp/themes/cornflower/screen.css new file mode 100644 index 000000000..d9a737563 --- /dev/null +++ b/imp/themes/cornflower/screen.css @@ -0,0 +1,11 @@ +/** + * $Horde: imp/themes/cornflower/screen.css,v 1.3 2007/02/01 00:17:56 jan Exp $ + */ + +.folders { + font-size: 90%; +} + +form#search div.smallheader { + font-family: Verdana,Helvetica,sans-serif; +} diff --git a/imp/themes/fadetogreen/screen.css b/imp/themes/fadetogreen/screen.css new file mode 100644 index 000000000..00e8d92eb --- /dev/null +++ b/imp/themes/fadetogreen/screen.css @@ -0,0 +1,29 @@ +/** + * This theme as been written by Roel Gloudemans + * + * The theme is the basis for the website of the Sales Manager Club + * (http://www.clubsmc.nl) + * + * $Horde: imp/themes/fadetogreen/screen.css,v 1.3 2007/02/18 00:41:19 selsky Exp $ + */ + +/* Message list table styles. */ +.messageList { + table-layout: fixed; + width: 100%; + border: none; + background-color: #d6e2e3; +} + +.unseen { + font-weight: bold; + background: #bcc4c2; +} +tr.unseen:hover, tr.unseen-over { + font-weight: bold; + background: #7fa0a4; +} +.quotawarn { + color: #000; + background: ffc974; +} diff --git a/imp/themes/feed-rss.xsl b/imp/themes/feed-rss.xsl new file mode 100644 index 000000000..211493e0c --- /dev/null +++ b/imp/themes/feed-rss.xsl @@ -0,0 +1,79 @@ + + + + + + + + + + + <xsl:value-of select="/rss/channel/title"/> + + + + +

+ You're viewing an XML content feed which is + intended to be viewed within a feed aggregator. +

+ +

Subscribe to

+ +

+ Subscribe now in your favorite RSS aggregator: +

+ + + + + +

+

Preview

+

+ + + + + +
+ + + +

+ + + +

+
+ +
diff --git a/imp/themes/gennevilliers/screen.css b/imp/themes/gennevilliers/screen.css new file mode 100644 index 000000000..1814dba99 --- /dev/null +++ b/imp/themes/gennevilliers/screen.css @@ -0,0 +1,38 @@ +/** + * This theme as been written by AIDE Florent and + * Mélanie Gareau + * + * The theme idea was to incorporate smoothly in the Intranet. + * This theme is published under the same license as the horde package. + * + * The name comes from the city of Gennevilliers in France + * + * $Horde: imp/themes/gennevilliers/screen.css,v 1.3 2007/02/16 19:12:05 slusarz Exp $ + */ + +.unseen { + background-color: #eef; +} +.deleted { + background-color: #999; +} +.important, .flagged { + background-color: #fcc; +} +.answered { + background-color: #d6ffff; +} +.quotawarn { + font-family: Verdana,Helvetica,sans-serif; + font-weight: bold; + font-size: 130%; + color: #ea5d1c; + background-color: #f4ee7a; +} +.quotaalert { + font-family: Verdana,Helvetica,sans-serif; + font-weight: bold; + font-size: 140%; + color: #f4ee7a; + background-color: #ea5d1c; +} diff --git a/imp/themes/graphics/addressbook_add.png b/imp/themes/graphics/addressbook_add.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ebfe2c97f2706e67216d64e4317c3a552436ef GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1O5(0ceT!FN-s+N+Lj){tjp|Odb znTds+gT0rJnO}&1pnsB|k9%TPYyBIBFS`4P#i7am Y&H@eJ_ckUDKE07iy7B)0AoS`G^1q9yS zE%D)*Sy}g;+0(I`}^n3o40o9vbAg1u3NWm|Ni}#FJFH8^y%~G&tJTF@$%)% zH*em2{rdIWw{Jgw{P_R>KhVInd&K2|6k|z{UoeBivm0qZPNJuaV@SoV-1FW-O%6P+ z7sDJJ9Ckf@{QO=0{3(@tW~NVzKB@3hUf_I9T;kD(dt25tJatXCNm01G?N1n+xRiYC zQzx#kn_Fgjrv5qQBj4y-ytDaG+>*B0U6v}Vg4^dCvukx~qT7TW0-j`IgWs z_}|6I>3sY< literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/attachment.png b/imp/themes/graphics/attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..1369c6074d2f5ed01a6d23665e6dcbfebe27a228 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}dw@@fE0DHH%8jk-k7?{rZJM6c zIyI$bYD(+Wtd2SPy$ebwEG?b1v})SwnwhJc=5A=7x3O*E=JrKfx)yKmUb3TW>Gs~G zyZTq`?q9ik;)*>JSMHs@=D@VI2d1w*Fnhz{xm%7d-F5oti0+-dcJI`+ zd#A78KLbQJ?wHd5+)i{;!!O+SzG*X}@dwx_3dkYu5I+#PGgrunm~^wbAuZdPuFSgo+@S zPrP8N|EZ7Rt2QgiF~>CNYZSZQu(eZ6Y1yje)OGr!`k5%fycXG_#rIw?PybZW#~EyD u5S{Q`?bo6?YxVXy>8|<6_xFKs730B~g6m6sgMR>>#Ng@b=d#Wzp$PzWaHG8d literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/audio/doorbell.wav b/imp/themes/graphics/audio/doorbell.wav new file mode 100644 index 0000000000000000000000000000000000000000..1357b8a2b459e21fd4d118bd4d071a7f4314b1ac GIT binary patch literal 5168 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 literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/audio/reminder.wav b/imp/themes/graphics/audio/reminder.wav new file mode 100644 index 0000000000000000000000000000000000000000..2fe83c1981b921086eeea14bded7fe0cb4f3a11e GIT binary patch literal 25816 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 PrxTEa;^k)c{*V4Y(6!sP literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/compose.png b/imp/themes/graphics/compose.png new file mode 100644 index 0000000000000000000000000000000000000000..238463b1e3d0f70786142c5bea339af1f9e70735 GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfmH?j+S8s36KQFC+Kezt#+Vu0V(t7LMRVd!V*IreL-amv^L@X?_xo0t?^|8JY;w82uH@gpe}Dh}{r&s* z$B!RBeE9JG{rh+C-o1VM_RX6&uV24@_3G8jmoHzuc=7!C^JmYVJ$?H0$&)9KA3uKd z=+T1*56+x9bL!NolP6CeIdbIi;lqax9XfdM;DG}N_V3@nZ{NPXd-v|yvuF42-D}sb zU9n=tf&~j&TU*P@%3@<<9UL5huKxf3|69q3WFX6?B*-rq$R!sr?CyBI9B9rwPZ!4! z2}#z2r@fdMCD<-}?%hB2>DtJxoeRD>-a2(}{-y<``T<*tue3RESTCO^!^rgX2jiuA ze$9s%c=n(7b2_Lhy?D2b=Rvlc+g@Ki{j=7wJ8whu+T-UGRC?`}_Fc7N>88fA@W`bY3{~i?~?)tOXP1f2kF6R8(|oew5|G f!aU^+1IPcjx~d6|MQ0WOUCQ9;>gTe~DWM4f<(e9r literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/empty_spam.png b/imp/themes/graphics/empty_spam.png new file mode 100644 index 0000000000000000000000000000000000000000..d986094d122e0fe644a3e7144883dbfa8c370656 GIT binary patch literal 731 zcmV<10wn#3P)%`D(>Vlaq6@ zb9l9Qpq_}IospoRm7}4Gp`ntbqKl=YjHRTRinof2xQdOsjjgSttgNiBudlPRn7Oy2 zx3;dE$eX#huDZFiyu7@@zoo*!rN6(w!NI|@%(BG9#K*?E#>U3F)4IvY$+S=3J-rnNi%i`eAE+Mm<>lt) z=I7_<>gn3??b7h=*zD}=?(O95?d|gM`~Lk|lJ)xNL7=S4p{u)#!(6SDz6l^OI<2UzI3>WlUp^~<(BaJ3un>97 zb^-3UUSl+tpT^0 zv**5B5R}}NuVXVa`>I<{2ON$>d7Wl%+jUJ=0pQS#x390Ke$&-k@DI*=NRUdZ#Et*} N002ovPDHLkV1if~al-%r literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/empty_trash.png b/imp/themes/graphics/empty_trash.png new file mode 100644 index 0000000000000000000000000000000000000000..d986094d122e0fe644a3e7144883dbfa8c370656 GIT binary patch literal 731 zcmV<10wn#3P)%`D(>Vlaq6@ zb9l9Qpq_}IospoRm7}4Gp`ntbqKl=YjHRTRinof2xQdOsjjgSttgNiBudlPRn7Oy2 zx3;dE$eX#huDZFiyu7@@zoo*!rN6(w!NI|@%(BG9#K*?E#>U3F)4IvY$+S=3J-rnNi%i`eAE+Mm<>lt) z=I7_<>gn3??b7h=*zD}=?(O95?d|gM`~Lk|lJ)xNL7=S4p{u)#!(6SDz6l^OI<2UzI3>WlUp^~<(BaJ3un>97 zb^-3UUSl+tpT^0 zv**5B5R}}NuVXVa`>I<{2ON$>d7Wl%+jUJ=0pQS#x390Ke$&-k@DI*=NRUdZ#Et*} N002ovPDHLkV1if~al-%r literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/encrypted.png b/imp/themes/graphics/encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..b23ba8344a1498866ab8172dc39cbc2595326052 GIT binary patch literal 401 zcmV;C0dD?@P)C{GwYIjlxw^W$ySu`|!vD+w z#l^+W&d$}=*4f$F+uPgS-QD5g;o{=r|Nj8wuz*=;-MG|7P#-@$vEU^Yioc z^z`=j_W%FP{{H^||Nj6001kSMEdT%j0d!JMQvg8b*k%9#0FFsSK~#9!ozB}5!7vbj z;Zjm(;!s72h_kYmCROkMVA8ac-1{dt`^{!%y}u%DVl(qz+18{06{es7BwU8O5+Ib% z^xf~Yj@t@gDjyNgc~onba9fRDLH^aRVc@<1m<8Oy5>D6igzCoT%VEP9n}0Gy6kT&j v(IAUOOljSoOEJMjP~U+t8xFjluha7n;N}ttOds(U00000NkvXXu0mjf9B99Q literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/expand.png b/imp/themes/graphics/expand.png new file mode 100644 index 0000000000000000000000000000000000000000..993674b5fa8d26b58c24b3ee6f413c2d63193a07 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!R)9~4D+4n_LPA1Y4ug03j*6-A zny6^!(nIOAo&O|NkGT+|S&I7f3Od1o;IsI6S+N2IM4ox;TbZ z+{*0>^*Vc0VjZNDw5!( zs_Eabnt)o7_=VJS6`9fp;<;BOAK!40Enp{ghu!oI9?BKmKfPc(d5w+41;U9lTo%eW z$>wmCFQW8b!D{RrQwtHqPBWNY-^ct`0yB#d%&kOmd6h@7e*|mcLv-~FAvC>&+guU7 z17ld;+{57L1cH6T2uI@>pA6yXIE`wx`hC^L-bkR4z&|Gtr~~f)fi_P&*P2DqY!*eG zsMAR{4>xJDEDJORh&GFdw@R8q4CJvHBoBA77N26)oCeit1aXD2CQb7j9UXdV;pU9_ zeVWW({TJKY#x8>C?xLAD=#b`uOqV2M-?HyLa!-ojbR0-@b9<#N@ZJwZt`ZPMuAv buVilctgOs2@8V6M%NRUe{an^LB{Ts5%iZ7U literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/filters.png b/imp/themes/graphics/filters.png new file mode 100644 index 0000000000000000000000000000000000000000..ca7d1bc4d58f3335cff9c1771e545683f1cea715 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE0AVrX*qW6*#H0kflU7; ze`W$H#*!evU3rM!HYY>jXJ}SJj0PY#*{wKtyRdf zh}XDb(7v1F!-DhBgW%Jz;ncA8){ObvdimRX_Su&E-F^4npZw#H_~EGfd{qxlS_0#?K-2C?D{`chn`|^U#Cf)34#wu;0_Y_128)*{u27dimRX_Su&E-F@ZU%lF-% z{Ns@L;i&NB#`@&2^ya|q=GyJ&-TdjQ`{=p%>&yJ?!v62U_U_*O@XP)4)c^I<{r24a z_U8WgM}gTdY1 z-6hEVPeza*7A&ZO|MbL{TE6c$MM&FIKrcM$7+Q#ccGZ0D!;1jgWG}am!^%MO%+;AK z4Kz)ko$km$;M1%|9yXQc%t>^3(Y4s zbv(Gd{^6Ak^VAH_#Y8Qwo{@toOFv@x5b zI^@cNrgQu(6JG9kz;Q&>%}sSgTe~DWM4f!9Zh* literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/folders/folder_delete.png b/imp/themes/graphics/folders/folder_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..985c12a3c7ee4692fa333c1120e06aaf50a1ead7 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!L4Z$)t1A!3;Wd@}JFNbFfAaUk z>3{DJ9-e6Z|Lf&Hk0<=TTl?qbs`5~!1#SLY85sTp!S9bMC7%uf^)i+O`2{mLJiCzw zb zW=GS}w_ieQDi?KZt@C?r+f{f?{lj*NrES;cqt+eR;qImvr4;>o$&;j<1G29AyBxzW fZr|B(SAPOO`(1V>AJzU)pq&h!u6{1-oD!M<`L$&d literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/folders/folder_edit.png b/imp/themes/graphics/folders/folder_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..f324fcbb8589aedbd3e84733d41013943192b86c GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAI14-?i-EKU7`vU!wgWPllDyqr z82-2SpVz?n3+Y-IFz#Q^8T;LxZuFK&*c*j{G7{BdiHYCP4330J#Ed<{kUPbZKgN|p#+E_MtzOuyQ`)Ux*{@;Vw{6bBrr^Pcd!lK9$t_S}v1+M@g3e(vDD_~EGh<(BK@)%xVH^ya|(=(+vsu>0%3 z_v_32?85c!+4t?%^Y7>V@XP=5$^G-x{r24d_T2ya?R!)rDun(>00001bW%=J06^y0 zW&i*HYe_^wR2UhB!B-Z7FaSltckR9RhS*Dh{qN312>J0GXQcmd6fiT!Oi+o-+u}v~mjNPLH}7fg_Lx@1t~X2y+XE7d#`#s450L2gPu>_w)K+`1jigFv f<1LYs1?YzlX2lT3xJrS42B#SX7aBXsC^CsE~Q9l!CUJd$pdDyrYS_rkJ~{rp~vQ%e*d__=+*e?$n@^x|MAWK^Vj|L=KcBe zJTE7Y+Srf)0004WQchCv!n4JzOu(ktnM g4V{YWi);P<0QiIs(Ur6_jsO4v07*qoM6N<$g3dUfasU7T literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/folders/sent.png b/imp/themes/graphics/folders/sent.png new file mode 100644 index 0000000000000000000000000000000000000000..640ef455e3f97a71382e4b99617bd1fe1997ed2c GIT binary patch literal 395 zcmV;60d)R}P))^*U7B&(1YO9ui@0N z_128}+j{xid-mCu``vx_-Jks9koe)K`sA?u>8ktax%cbK{OrR1@4@}>%l-4z|Mk=T z_T2pT=KlBO|NHU(|Nk>HW~k?|0ssI20d!JMQvg8b*k%9#0EkIMK~#9!h0W&3M91Q{T~c}6#wQ*k>Vpc3DStVB)xHOF>{^BOJC@%oO4U^BIE(3+f%|Q z2fz=64TXEuo;DQ*0@ubXNpvL?IM?FX>!W~E)mp3H0uB{p4E+M^$`@@m2ds-nZ8Q;M1%-`zj>^6IjCv*Ye2 z8NS(DepONG&&ySR9#8oCO!fEO+UgLcL%mk>+XMc7IQ{?k$MT6DUO>H!B|(0{3=Yq3 zqyag_o-U3d6}M{7JMtYi;BX1d=@Cx)aOeLv$=#h-T(53-c+}1NN&djZ)0?j|UF_=I z#O;-QVyB8?^m^?*34332iAirUpJ%{g#`gJ|Dt{Yi)~j{aXL!%vnY(b`!9%ufPb81C tR~RZ(9{tJCx#Z~AAn8L!`~Fn?VEY-u{wE}0gEr8522WQ%mvv4FO#qbqYaRdq literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/folders/trash.png b/imp/themes/graphics/folders/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1bc921020fb2d8710cd1fc09a16fef2a8313ca GIT binary patch literal 461 zcmV;;0W$uHP)3rM!HYY>jXJ}SJddA* z#*{vmri`Gkny$K}y~ncS!-Chztn<)=;M1?+)Ue;vz4g|N`P+K-*_Qj=efQm;{Ns@L z;i&rLu>9$&`{=p%>&yJ?!v62U{qW2E^VI+K)BX0`{PyPl_v8i!1i~?)WB>pF0d!JM zQvg8b*k%9#0J2F$K~xwS1;Ncq!$24Sz}fAJpbf+yr~wf#o_q>l-Iws7CqauytXMI$ z+3x2I0DxqGHGnc)o-nl zmshWyqD6}ND4#@|rc4oW=-zsV8vFglpRC2rS42B#SX7aBXsC^CsE~Q9l!CUJd$pdDyrYS_rkJ~{rp~vQ%e*d__=+*e?$n@^x|MAWK^Vj|L=KcBe zJTE7Y+Srf)0004WQchCv!n4JzOu(ktnM g4V{YWi);P<0QiIs(Ur6_jsO4v07*qoM6N<$g3dUfasU7T literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/loading.gif b/imp/themes/graphics/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1560b646cff2cc4fd292d7fdb6f7adc7eb484b4a GIT binary patch literal 1737 zcmaLXeN0p99l-I&!tEQiv~W&~lv_&SmI|fRw)eE0zR=T_(^9a!crF*Q_O?JP*50BW za+x#6J*VfyIVLB@`G?mSW{fe8%LJS?j`_k2*Er)fUT2(h#u;OrF~)0*amLK)uKSPd z_ve%6mwfVklPAzh+MD7sAOkM}c>DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_answered.png b/imp/themes/graphics/mail_answered.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3bd85363738a761ef48a6a799a94f5b499c610 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}X@F0NE0AVnWaQ-Jl#q~MQ1xQa z2w>2OWH3(C*VnJDu4rtinbhAsb#mXdDHGSNUbbQF@~xZJ9NfR}?CDcy&YZb&<>JHp zw;tWU`SkI!aHmR-LolPQIz{G-_V> z09658+J8zx2Jq~y31R5KT|C-0RyFuW>&UfFKbM76uyij(by_KBsi|-8l zmaWXU#QDu!dk_44wKrU$Q6=c>2~~yc>81h~lj58gpXK^6Wvl*T4FSf?`=QZ52QYZL L`njxgN@xNAfToso literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_clearflag.png b/imp/themes/graphics/mail_clearflag.png new file mode 100644 index 0000000000000000000000000000000000000000..35134c04af0671735d87e45ad42d3a0de2ecaa70 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMffdHQn*Zh_lvDH&u1Ecx)_*_F0 z9RuPHUVIRioPX@{J$v8i^n$9*hc3idO|gp3M6d^6 P&`}JYu6{1-oD!M& z15q}ROwP_uE(W6Ff-9^YKH#|EiJ`8JwR05)6+6#O3R!%K-4p5&XlEd zdX_E)qA5$4&RM&5%G$Mawr-uXck7&`YnQHFyL9W;wR^V$$*p^j0pZeP$AD<fdF|f4d(WSrd;k30^XJ#z1JV0?-``*R{{G(k_s_q72cq}? zfoO1m)>tz@F4s^LbxQGm z8kBeV*`-CT0s8{tW4}%*F5C9MPXF9Z#=xM6#YZP-G^I5B;d!5^t-M)NQZQ73ci4W}GTz*w?k1u$}o_&R^|8lR133XIdzPoGdK6$r}&-7`l zV)8FcXOYsM7StdX-m20jDzU03Vdr$+oob;fvm7=Qo4O14>^gKW=&|%am}A vF!5vq3&ClhpGWv6s&<{3=grB?a8y3zfc3fui9h!Oy~E(?>gTe~DWM4fIt%bm literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_draft.png b/imp/themes/graphics/mail_draft.png new file mode 100644 index 0000000000000000000000000000000000000000..1f93f68bb84a1ba4199e62182907e6d4f09f6eee GIT binary patch literal 407 zcmV;I0cie-P)gkBgO)j+T^>hnBVHcUq&G zhODHIuB)c7t*6_sIkmE^r?$+zwx+7R-v6n6-oaYIzrMA>)Rfo%?#x=v%gWT$(fZbP z%-#6m-`e8e+5F^^<>TJm==$pDFoe4_vq?%i7r7%3=))Jd-mVDJJS z4w4^aOGlUpvKb&s%C^f`!yL&|LwoJnlHhQTqKII+^ZFJ6<2q4J^3&LoA;CA{=9_&L z#|G*xWgz~x0e5wwt--IMS1u|k!yxb*=(v@6`T-~U7ZzS%PuBnd002ovPDHLkV1oBz B(5wIe literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_flagged.png b/imp/themes/graphics/mail_flagged.png new file mode 100644 index 0000000000000000000000000000000000000000..25b76b1886b062cc9ddf6197de16845d01f4286f GIT binary patch literal 379 zcmV->0fhdEP)L`-BwO>0b4a8X%;N?C7K zT!>I#b6;eSS7m!>ZIxYXnqzT*adm%mb)ac?mu`5Rb9|?Lh_aDrsF9bdmYcVhpQ)Xo z(VVHju#?cEuF9#g%&xW2t+vjuw$HM;(X_kLy20PS$KSxn-p0)2#LMQ-)a26EES|9_Y$;~Ci6ySk@E4~Y-R67Tb*n=fE``|zE5xd=a4d%2Dahr6ehHBqeb7aFYnl~W5b3G zYu2n;y?XVkRjcaj>#M7)D=RBYN=owb@-i|q($mvZQ&Xd&q9P+B!@|N`TwD|s6o7UD zZE=>>ssyssN`m}?fn36XVR=>K9-xj|PZ!4!iSXR>ulWus@U$hWJ@^w+7BDkCeCxgc zx?Y|$Pd@s+-v1KYne=Htng2WsV%xXlQn&GrYF_sKXFG!roLxUHW941(1BaCbesP+) z7nS6G3T^xH??zZ<(TZuZT#HN$NS=czKSC+_F$L)di^&rgF~kwfp7$-{>`W Y`a$WOdwn%|K!-4Ry85}Sb4q9e0P#D%(*OVf literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_personal.png b/imp/themes/graphics/mail_personal.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2c9946c8741de62b5126cf308ff1929e7a12df GIT binary patch literal 797 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47<&SILR^)Ul(~2WjvhO~BOvzd z#cNd!9UcKu4IM*sw=fAg)%^O2HC;2OEnK@`_4eJzF1aSw`DV2T<#qdIG{;s><>D1c zYnta8k)6@9AT+1h);BJ)pd+_)X+&O2ao;LVZr+5V*1D-{WR=uY@~e7hF72E!{p#(9 z&tJX$^!bZlT5WpsyqJ>i{O)D0VQHlk*90V&)=XX7Id?|MU&cz#ujq^!ck zne!*in0NB>ZBAZ(ArVnwQ88XYAwfX_2?=p;4;NuB25EjqM-^5xdDhtx{HIGL&y-1> zD3Q8YC3~St_F}c%(NdX1#WI&`<&T!g9xRsSV`t!EW#C|8FqL5vX#GOLL+i=h;Yz9fs4JZq$xsH?t|kCmpB z5RZzSl%|^6nKNfxTwGLDRb^#m+1S{Ck@Ell|N2W>2|!j$NswPKkUP+TVfrPreL(l@ z@pN$vkqA%DU~5zpVAwoM(xD}H^4?m75EhjS7c%0*`9qSpg*Ozh;NkS}F3oG_~zpX)3oml`x0P5<)d!l5Noly+|j_uv(dBEQM7qd-x5`ihPmNk;r>gfdCv59a`Ra-^WdqN_^9aa z=-9Inj-e6F%@YsKat{fP@tSw^kjGU2(14EKgI59=I6oL0Yb;`9$Se&x-RA9n1?Ue3 MPgg&ebxsLQ0NkZ&-T(jq literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_priority_high.png b/imp/themes/graphics/mail_priority_high.png new file mode 100644 index 0000000000000000000000000000000000000000..5f75bf7ec2f2ed5fc56f68672a384ea36fa1cf67 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbD=P!n0zHv6Mq-C8q|R7N zU$B+A?wm*U|6(|BDzuE?|}S6`t@DXbFR-tDnm{r-UW|0cm4= literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_priority_low.png b/imp/themes/graphics/mail_priority_low.png new file mode 100644 index 0000000000000000000000000000000000000000..7af4ad4f61f78d97f6a4b9a1f1180f3364c9c79b GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!bbwEYD;EQcijsMSfQ&TbvMJEn5Uw*!3_Y%}DWj~u+A*tRC=Rp&Ef*5waG<}@`w6c^UyWHM=sTWSt8 Ohr!d;&t;ucLK6VZMKuxt literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mail_seen.png b/imp/themes/graphics/mail_seen.png new file mode 100644 index 0000000000000000000000000000000000000000..5593b246efee76785867126a549f0c93bfebe045 GIT binary patch literal 340 zcmV-a0jvIrP)|vtE;Q5tgNlA zt*)-Fu&}VPv9Y$cwz;{vy1Kf(y}iM~!NkPG$H&Lb&CSx%($v({)z#J3*4Ee8*V)tG20_00001bW%=J06^y0 zW&i*Ha!Eu%RCwB*&Pf)6Fcd^lG$NoN3D}_YJtgL6|GV=*kmHy)t2-)VQ);Ky=KZ9# zi<*FrBM6YF_YV!QK5r>evFf$}4iab>vLEy=BVtaSUNsCSz%-lIju$v1@5-_*Ufz9% mgbN`!4}viA^^w1fEqwtlrV^gyRipC&0000=(zvsy8r6E|Lem4?Z^G@&Gqi?_3`og^X&Na?e+Eb{PpSp008~`y9EFM00DGT zPE!Ct=GbNc0047IL_t(|+MUkZ8bUxAg<%@nNScupLUz?s{O0~|u7|T+(_KFv9@2ikr?K!aj)SAgBGZd>Fmzm5Q-14@Qug160x*rA9$1s@AA&9d4*MmQpU tWm)x%PPYLGs~G zyZTq`?q9ik;)*>JSMHs@=D@VI2d1w*Fnhz{xm%7d-F5oti0+-dcJI`+ zd#A78KLbQJ?w8WtOLk1$O z7u|UUoQzxId}5qze#grnnl@Gc*=xC%r|xfaj^sDn8~Wf@r1!Vj;*AGpKPmKnDtK^G z&WgkNNge;EEqCwiDcN%A%Dh8{nTx(RY6VoBGrL*vS;Jj&(bEebld@*+Oo?QBHowg% vTI?N*jPJG!zmDfET^wwYpHsrO;JWyggM#b(s^gafUBuw&>gTe~DWM4fgtV)W literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/binary.png b/imp/themes/graphics/mime/binary.png new file mode 100644 index 0000000000000000000000000000000000000000..6d71b7d7c6838a016da65d40c68234bd7e862627 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}Y=BRQE08uYFmQ5miin8F%gZY$ zDA+Tvc+aBhp3b(JGiUBy(Y|NxlzrRQ@7ccb!1{@YHqSb|Yx%K*+n%0T{_^UMbLY<8 zyLa#H-Q({boP6=<=EvvPUcGwt&mC8}dy8jDCp;@LaoDvyqH%`M!>7CwGlN`K xOjua|AZtQ!k7CR55AC_p*MGnHn{eU!zS1tCm5m4W*8v^D;OXk;vd$@?2>_Rts?Goa literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/compressed.png b/imp/themes/graphics/mime/compressed.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1a0937a306e013ee98485a1b08004018c3b83c GIT binary patch literal 875 zcmV-x1C;!UP)AA|E&vlH8V&#e z7A61^KnxNf02d|z9uxp36Ad69JsJQ2G(B1r3~Lhr6gxtS762VbF{d5?EK6V?Raby7 z9KRF;oG1V-PH!GoZ-+JjE>d8jB^`D;FBM>OS4lp3KozMh0LL2a$l%~;j{nX!S?94|KQR8Cpf2 zz5nmb;Q99d?&S0I=Kt~9|M}1E{r~d+`t<+*00aQ>Lq(DR0004WQchCUepkO1zqpIXu;skLx17~PbN>+YejwJ&ONE@na zs4E*Ypa8W@WS)?NX`H;Lcr;wVN6X6~QP)L~0RVosLd*>O0lEMH002ovPDHLkV1gD; BYRv!u literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/encryption.png b/imp/themes/graphics/mime/encryption.png new file mode 100644 index 0000000000000000000000000000000000000000..e79c2a53470159a6e153c5b19651994812e03022 GIT binary patch literal 505 zcmV>O-+GX zD{^vjs&6Z#aW;B-daQ9St#dM7icGMLU%iY@rIB{NjZmAHl*X1_$D3rR zqn^s2XsW8J%cOD6q;SoqZq254(57_Er+d(-bkD1Nv9Ynwtb5I@gU+pk)U0{cu71+8 ziPf@%*tLwjyu7}?zSg>wz`(%4z`(-7!rH!?;KH8a!kpm5px?x!;l!Zg#i8TIqSDgR z+uPd!004VHNFD$H00DGTPE!Ct=GbNc005auL_t&-S7Ttn4kCd7iOVe(9ueUw%nTQh z_7dRa6m*b=@%j8%Koq|@Oc$>Yn8o1>6JRsqVr67x;xT21@FNX^f`k42{k^S)AW9-b zJ=mA107 vnyiK#RKU*I&`?WDUsqie>X1k{V88+Z0OB1NbJNwZ00000NkvXXu0mjfTie)Z literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/html.png b/imp/themes/graphics/mime/html.png new file mode 100644 index 0000000000000000000000000000000000000000..8a935190273e6c728afce4623b60cedd567ea82c GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47+C{+LR^8||NsBLdiC1aKi4!c z-y^XmEVr$sX<}9T)UGM>cN{o*;P`n%zZ}!RJnOI`yNF_^*b3*^3YXY&_xOr{jE3;M zwz!h+l*<0OtG4&gSh(xZsl7+fp1N@D!qr&6{=IvW=Z_j`K z{{8*?_xJDLA3uJ4_wL=>w{PFPdGq@9>sPN{y?F8B*|TR)pFVx^gsB0YO=Dj;^N|B zVq!q=H}v-&00u;ONswPKkV^x=urJy4G0=*2o-U3d65*~Fu8K7|h_pV8EbF;@LszV0 zEwk5+j;>R`?YlURKdt|H_iZl^^IxNVip-{KqaL&Va#WvDv~%<3Z*q(wNg;b*XvVH9 zPjNmrpZl@Xr#ltQ52VgL)>`(G(_z<}?)DAkmuKI)uxJq@d+xRQj3uWz(^Is&npqv{ zIdmD1OkW~v>N!1}f!{4qbZX+fY=+42yydt3?h7)srQW>Q@z~;Eo26pQbJoqxtp9&r aW0dDQt9v;`)n`7?@8t;3rH zTR1hVG`Y9(e$hYUyIS+b7FCuyr^9!G8~VC$1Qzrt_U!EvICZM1i%)~&-k~aW-pGhO mI!E4%@&w8BIS4iB@3X(&z&f{K(JnTiB@CXfelF{r5}E+5=0jTm literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/itip.png b/imp/themes/graphics/mime/itip.png new file mode 100644 index 0000000000000000000000000000000000000000..044c1d75efd57f0d732bd3cbd942c22d0f09d17b GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}X@F0NE07iw6Vuk#*4Ni}c6JU8 z4V~;{vE0=zBO~LAuVZOxX?<-)Lw#jaV@+#IeOFi4qzPSfXHQ))Z^q&Uvz9KIyL|cb z=ksjVtX#Zq?b0n9S8v<4?ZANpr%s(ZfByW{t5Erv)o<8{h z|3ApaD)YHOim@cfFPOpM*^M+HC*RY>F+?JKZQp6JgAM|$`f8UY6hC&{j_ZB#^S}QV z2}^cq>8)#myP5tu*0D3V?Y>$Q6{^^B(t_Ec%zmf*UH&}RIWteF&b+aw>-MjU`Dde& z1;y8frYkLSF3exA7AtPg)oIAr`m$-w$u0LqKH7fkRyWe-jnI<+EiF- zzyA95^T2`qy*+Jvc5nar+amTa{K1xTQ@FEoY4FG*Y{sPzrB3^=+XTf6MEb4 z-nw$@`o*8$KmYjl>HF7@pFX^qJZZw+o0sn1y880j!^ih;_I7vt`tkMq*H5osKKuUl z^ZU22r%#!*Y2(I)3l{wU|Nq~=e}Dh}{r&s*uV24De*F0M?c3L{U%z_w>cxu}&z?Pd z`t<3OCr=(fe*EasqX!QjoIij5)TvWPjvP6B`0&Al2lwsUw|DQ}J$v@--o1P6+O;cI ztXRBw@qz^l=Fgu$Z{EDQbLY;PGiUbf*|TQNYHe*TD=W*+&W??Zb#QQylamt@6Jum# z1O))l4gEV!fUMAxAirQBm+F9F!$S7+Knpf_x;TbNNU|Qx_F_sDVYpDd{=N#AE$8u; zj<5@6Q4QR@N?DQ@`NI_?k_GIHlxM%3Gows_!OL8^Z?zReE9dX?i$61P@lM}fsWI0j z==$UJ?+o|u-R3bX^|SH*=n4M1u072gj(t5{D>iL{^Nc@Xp0@i=#j%*2=koOu+Wp@6 zXr^f6C-eO~CDu%t!63J*KW_bcj<-1*y?*V!Shb?zV%nDX{ErGY1um$S&kOZ_emBhL cBGZKb3qnoLoSqjr1?YALPgg&ebxsLQ0D`b}BLDyZ literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/pdf.png b/imp/themes/graphics/mime/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..de70b356c4878c61d247a59be81d127d7d6b88d5 GIT binary patch literal 1191 zcmd^7&r8%%5TA0RO06mhNt3R<{j9 znwy6TIuzw4s6$57LFcMc=*d8kD3=b39j4EF{TV&@e&3t#o0-p#`97?a`!mglnu#bg zaJD#zeSdh;O?V$W(K+bHZR;#5_sZc27^Lf9Uc%`yLQ})AuEqz&EUwZkX&O}0_M26-}%p^?8WK16K zSV)9a$b>wmvXUsNk|}wtWFs+BBQtWGoz%%ZbVN%bR3L>t0x+{ME3+|s#6v8?Dr~|Y z;c+d>s%*+0*&tht)!2+ZR*JJao3lrvAP%OW7V&`z5OhTw)FC&>zy~Z9u_y_U2vo&X zJSqeOH8B&9YQaWb%poW!gXTag2!(7YKn)l{Yj6Zm5P^Q^0c!Dx0yR~SWFHY4Qt^gY=cQ~1vWr8v_c%zfHcZL6YL^>Y#O?vO_%}FagPsJ9!CPp zpb)5t9rndxVtN=0h5*-LGkk@Y7#`e$L$CxjP>)$cA~c2iKr@UMbbt>)bVN&(A|02A zP>cruHtaY(qt20$k@4~I$;rv->FI@qh1uEJ<>lqo)z!7NwT+F9Mx(L4z3qQCXJ(!z zNfLe>CyyI;oUktD%5RBw(e1(VQ2g-!zG!G`?@@SkVW4<=c;ed?`?!yK(#7*PuMYO_ zoV-5zy7slRtLx{72d%wbpG%i2?|aTP#-1GhJ$5T|`P7Yi@BE|1&PG$MqkgS^y!QQG msw3I+=E%x{-HUT~?oaH{JAM4=;8Z3H1RCfo7he@dYkvVm>aleI literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mime/text.png b/imp/themes/graphics/mime/text.png new file mode 100644 index 0000000000000000000000000000000000000000..b83aa6b286aa1cff063551ed1007de6d32e6bc87 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE0At!X*qW6*#H0kfoz@B z6>LC?u_VYZn8D%MjWi&~+|$J|q~g}ren&0_1)jqt&;I9c3%bdtG|xvedExY}tdfUc uSexAv?N(XGbiqcdCU1@s*Pq-))l7Q*OaZHkPbC74VDNPHb6Mw<&;$UwRW5J< literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/mini-error.png b/imp/themes/graphics/mini-error.png new file mode 100644 index 0000000000000000000000000000000000000000..71438cdd2b342b743b97040ed61ecbd1157e06b4 GIT binary patch literal 252 zcmV085kT%%rD^#48bI70jB0q z+G~09`0*Rs7Z-D~v*!#-?~|cr-@JMIXdhyOKnnoRcMb4jplbR60000r1a1WzWg}NaI|Y3O8hjfZha6~FR3(EYB8MR_eK#|IGb@ZLIDiymz&a?pwghryr$B;n}hCykLHii z#lxcGqTa})*U7iy&84C6q2JK7=-9aA*v94D)z|FT&hyUqm~-TvL?_~!rd&HnS({q^SX{P6Yp_4E7l@c!`q`Sbq%{yZ-y zeU76i00001bW%=J06^y0W&i*H&`Cr=RCwBTj9FWPP!NVu+(I+6MJ<=ekW*v{E`%LW zus9WUIH_a*|DQB;6E}X(T+I8>a4IA!?2ry2@5m2BbX7YHXMVsp(B+yDRo07*qoM6N<$g6EVI$^ZZW literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/popdown.png b/imp/themes/graphics/popdown.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2b1335c3b16ccb54539b183876abcfae45acc3 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRN#0(@A6aU5nDV_kI5Z9YGZ$?H&)YsSl|Nmb! zX3Z3kqLLuLU?7*lL2Km~AYa1M#W93KHu+2uNAjLhzow73qau&(pUlH(V9e%v{<>r? PPz{5ptDnm{r-UW|_M#>j literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/redbox_spinner.gif b/imp/themes/graphics/redbox_spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..35218b31b5e09d98e59af8f8c17ab0c548b302b6 GIT binary patch literal 6820 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 literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/shared.png b/imp/themes/graphics/shared.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d2b13e01858876d3ed86e9118989b93cccadec GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!L4Z$)E0AVjXfZTA=T(1h&K!nS zt5yN2bLW!(pPTdk+OhZV-~azV=ll2X|No!+|NlEsspVz&6F`cwB*-tA!Qt7BG$1G5 z)5S5Q;#TgN*L)2M9BmJ68YW17uiwsSwPx-0`1{7sK8A07vUR;-)%~E`YpU3iug{kF z(qZTDODrd_fmKA@liN^ZsmhFtZ2LZ@u(i)AcDly8XstaTi`g#c T$6e3|TE*b$>gTe~DWM4fdqY~G literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/signed.png b/imp/themes/graphics/signed.png new file mode 100644 index 0000000000000000000000000000000000000000..b23ba8344a1498866ab8172dc39cbc2595326052 GIT binary patch literal 401 zcmV;C0dD?@P)C{GwYIjlxw^W$ySu`|!vD+w z#l^+W&d$}=*4f$F+uPgS-QD5g;o{=r|Nj8wuz*=;-MG|7P#-@$vEU^Yioc z^z`=j_W%FP{{H^||Nj6001kSMEdT%j0d!JMQvg8b*k%9#0FFsSK~#9!ozB}5!7vbj z;Zjm(;!s72h_kYmCROkMVA8ac-1{dt`^{!%y}u%DVl(qz+18{06{es7BwU8O5+Ib% z^xf~Yj@t@gDjyNgc~onba9fRDLH^aRVc@<1m<8Oy5>D6igzCoT%VEP9n}0Gy6kT&j v(IAUOOljSoOEJMjP~U+t8xFjluha7n;N}ttOds(U00000NkvXXu0mjf9B99Q literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/spacer_red.png b/imp/themes/graphics/spacer_red.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fea5e08123f66c6beb56ee3f975c4574861b14 GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xGmzZ=C-xtZVh->LasAK0Ao+;X9LVMNba4#f ekWEfFz|O!R$H2%aaWe`i%;4$j=d#Wzp$Pzb#t^Rn literal 0 HcmV?d00001 diff --git a/imp/themes/graphics/spellcheck.png b/imp/themes/graphics/spellcheck.png new file mode 100644 index 0000000000000000000000000000000000000000..bf94cabcfa6c7f18ab72ac21660cee457fbbb66f GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMV1=9cj{}z>$|;(~0M+r71o;I6xiG*WbpPBrptzf-i(?3fEbBo- zUZ+3?*Nu}67bpx45r& i=&kXg&%Fh04F8^ga`?iin6w>eB7>)^pUXO@geCwzOHyY5 literal 0 HcmV?d00001 diff --git a/imp/themes/green/screen.css b/imp/themes/green/screen.css new file mode 100644 index 000000000..9ce0b016b --- /dev/null +++ b/imp/themes/green/screen.css @@ -0,0 +1,16 @@ +/** + * $Horde: imp/themes/green/screen.css,v 1.2 2007/02/16 19:12:05 slusarz Exp $ + */ + +.deleted { + background-color: #B82828; +} +.important, .flagged { + background-color: #F78E8E; +} +.unseen { + background-color: #fae5c0; +} +.answered { + background-color: #6FD992; +} diff --git a/imp/themes/grey/screen.css b/imp/themes/grey/screen.css new file mode 100644 index 000000000..fb4e4ce17 --- /dev/null +++ b/imp/themes/grey/screen.css @@ -0,0 +1,13 @@ +/** + * $Horde: imp/themes/grey/screen.css,v 1.2 2007/02/16 19:12:05 slusarz Exp $ + */ + +.important, .flagged { + background-color: #a56363; +} +.unseen { + background-color: #d3d3d3; +} +.answered { + background-color: #b7ccb7; +} diff --git a/imp/themes/ideas/screen.css b/imp/themes/ideas/screen.css new file mode 100644 index 000000000..0a1cdc703 --- /dev/null +++ b/imp/themes/ideas/screen.css @@ -0,0 +1,7 @@ +/** + * $Horde: imp/themes/ideas/screen.css,v 1.1 2007/02/01 00:17:56 jan Exp $ + */ + +form#search div.smallheader { + font-family: Verdana,Helvetica,sans-serif; +} diff --git a/imp/themes/ie6_or_less.css b/imp/themes/ie6_or_less.css new file mode 100644 index 000000000..1be508dc1 --- /dev/null +++ b/imp/themes/ie6_or_less.css @@ -0,0 +1,10 @@ +/** + * $Horde: imp/themes/ie6_or_less.css,v 1.4 2008/06/11 17:54:02 slusarz Exp $ + * + * CSS corrections for IE 6 or below. + */ + +/* Fixes li & ol list numbering issues in HTML messages. */ +#html-message ul li, #html-message ol li { + margin-left: 2em; +} diff --git a/imp/themes/ie7.css b/imp/themes/ie7.css new file mode 100644 index 000000000..2aefa080f --- /dev/null +++ b/imp/themes/ie7.css @@ -0,0 +1,10 @@ +/** + * $Horde: imp/themes/ie7.css,v 1.4 2008/06/11 17:54:02 slusarz Exp $ + * + * CSS corrections for IE 7. + */ + +/* Fixes li & ol list numbering issues in HTML messages. */ +#html-message ul li, #html-message ol li { + margin-left: 2em; +} diff --git a/imp/themes/lavander/screen.css b/imp/themes/lavander/screen.css new file mode 100644 index 000000000..66a41e93c --- /dev/null +++ b/imp/themes/lavander/screen.css @@ -0,0 +1,13 @@ +/** + * $Horde: imp/themes/lavander/screen.css,v 1.1 2004/10/17 20:37:46 mdjukic Exp $ + */ + +.text { + background-color: #F6E7F8; +} +.answered { + background-color: #F4D7F8; +} +.unseen { + background-color: #E1C2E7; +} diff --git a/imp/themes/luc/screen.css b/imp/themes/luc/screen.css new file mode 100644 index 000000000..c797678fb --- /dev/null +++ b/imp/themes/luc/screen.css @@ -0,0 +1,15 @@ +/** + * $Horde: imp/themes/luc/screen.css,v 1.4 2007/02/01 00:17:56 jan Exp $ + */ + +.folders { + font-size: 90%; +} + +form#search div.smallheader { + font-family: Verdana,Helvetica,sans-serif; +} + +.answered { + background: #c1dac1; +} diff --git a/imp/themes/lucblue/screen.css b/imp/themes/lucblue/screen.css new file mode 100644 index 000000000..07a5fc44f --- /dev/null +++ b/imp/themes/lucblue/screen.css @@ -0,0 +1,11 @@ +/** + * $Horde: imp/themes/lucblue/screen.css,v 1.3 2007/02/01 00:17:56 jan Exp $ + */ + +.folders { + font-size: 90%; +} + +form#search div.smallheader { + font-family: Verdana,Helvetica,sans-serif; +} diff --git a/imp/themes/mozilla/screen.css b/imp/themes/mozilla/screen.css new file mode 100644 index 000000000..e4080a234 --- /dev/null +++ b/imp/themes/mozilla/screen.css @@ -0,0 +1,28 @@ +/** + * $Horde: imp/themes/mozilla/screen.css,v 1.1 2006/06/16 14:10:19 chuck Exp $ + */ + +/* Navbar action styling. */ +.msgactions li ul a:hover, .msgactions li ul a:active { + color: #000; + background-color: #e8f1ff; +} +.mboxcontrol { + color: #000; + background: #aebaca; +} + +/* Message body styling. */ +#messageBody { + padding: 2px; +} + +/* Autocomplete styles. */ +.autocomplete ul li { + text-decoration: none; +} +.autocomplete ul .selected { + color: #000; + background-color: #e8f1ff; + text-decoration: underline; +} diff --git a/imp/themes/postnuke/screen.css b/imp/themes/postnuke/screen.css new file mode 100644 index 000000000..c527629a6 --- /dev/null +++ b/imp/themes/postnuke/screen.css @@ -0,0 +1,19 @@ +/** + * $Horde: imp/themes/postnuke/screen.css,v 1.2 2007/02/16 19:12:05 slusarz Exp $ + */ + +.deleted { + background-color: #999999; +} +.important, .flagged { + background-color: #ffcccc; +} +.unseen { + background-color: #eeeeff; +} +.answered { + background-color: #D9DCC2; +} +.quoted { + color: #330066; +} diff --git a/imp/themes/rtl.css b/imp/themes/rtl.css new file mode 100644 index 000000000..3a11fe035 --- /dev/null +++ b/imp/themes/rtl.css @@ -0,0 +1,48 @@ +/** + * $Horde: imp/themes/rtl.css,v 1.5 2008/07/22 06:03:49 slusarz Exp $ + * S.Niksefat & C.Mortezania in Amirkabir MetaNET Ltd. + */ + +/* Message list table styles. */ +.messageList th { + text-align: right; +} + +/* Navbar action styling. */ +.msgactions li { + float: right; + border-right: 0; + border-left: 1px solid #888; +} +.msgactions li.lastnavbar { + border-left: 0; +} +.msgactions a.hasmenu { + padding-right: 0; + padding-left: 11px; + background-position: center left; +} +.msgactions li ul { + left: auto; + right: -1px; +} + +#msgheaders { + clear: right; +} + +/* Based on the Mozilla default defintions */ +#html-message blockquote[type="cite"] { + padding-left: 0; + padding-right: 1em; +} + +/* Pad the addressbook icon in header compose links. */ +.msgheader img { + padding: 1px 2px 1px 1px; +} + +/* Redbox styles. */ +#RB_window { + text-align: right; +} diff --git a/imp/themes/screen.css b/imp/themes/screen.css new file mode 100644 index 000000000..53c0c39a9 --- /dev/null +++ b/imp/themes/screen.css @@ -0,0 +1,388 @@ +/** + * $Horde: imp/themes/screen.css,v 1.95 2008/09/05 06:06:33 slusarz Exp $ + */ + +/* Message list table styles. */ +.messageList { + table-layout: fixed; + width: 100%; + border-collapse: collapse; +} +.messageList tr { + height: 20px; +} +.messageList th { + text-align: left; + cursor: pointer; + white-space: nowrap; + border: 1px solid #eee; + overflow: hidden; +} +.messageList td { + padding-top: 0; + padding-bottom: 0; + text-indent: 1px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + border: 1px solid #ddd; + vertical-align: middle; +} +.messageList img { + vertical-align: middle; +} + +/* Newmail alerts. */ +#newmail { + padding: 1em; + background: #ffc; + border: 2px solid #ccc; +} +#newmail ul { + list-style: none; + margin-bottom: 1em; +} + +/* Fetchmail styling. */ +#fetchmail { + padding: 1em; +} +#fetchmail ul { + list-style: none; +} + +/* Navbar action styling. */ +ul.msgactions, ul.msgactions ul { + list-style: none; +} +.msgactions li { + float: left; + padding: 1px 3px; + border-right: 1px solid #888; + position: relative; +} +.msgactions li.lastnavbar { + border-right: 0; +} +.msgactions a.hasmenu { + padding-right: 11px; + background: url("graphics/popdown.png") no-repeat center right; +} +.msgactions li a { + font-size: 90%; + white-space: nowrap; +} +.folders .msgactions li a { + font-size: 100%; +} +.msgactions li ul { + display: none; + position: absolute; + left: -1px; + margin-top: -2px; + padding: 2px; + background: #f4f4f4; + border: 1px solid #d4d4d4; + z-index: 99; +} +.bottomborder .msgactions li ul { + top: 1.25em; +} +.topborder .msgactions li ul { + bottom: 1.25em; +} +.msgactions li ul a:hover, .msgactions li ul a:active { + background: gray; + color: #fff; +} +.msgactions li:hover ul, .msgactions li.hover ul { + display: block; +} +.msgactions li ul li { + float: none; + padding: 0; + border: none; + display: inline; +} +.msgactions li ul li a { + display: block; + padding: 2px; +} +.mboxcontrol { + color: #000; + background: #ccc; +} +.bottomborder { + border-bottom: 1px solid #999; +} +.bottombordercollapse { + border-bottom: 2px solid #999; +} +.topborder { + border-top: 1px solid #999; +} + +#msgheaders { + clear: left; +} + +/* Message body styling. */ +.messageBody { + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + background: #fff; + padding: 8px; +} + +/* Search page styling. */ +form#search div { + padding: 1px; +} + +/* Style for div that fixes KHTML browsers. */ +.ohide { + overflow: hidden; +} + +/* Based on the Mozilla default definitions */ +#html-message td { + padding: 0; +} +#html-message ul { + display: block; + list-style-type: disc; + margin: 1em 0; + -moz-padding-start: 40px; +} +#html-message ol { + display: block; + list-style-type: decimal; + margin: 1em 0; + -moz-padding-start: 40px; +} +#html-message p { + display: block; + margin: 1em 0; +} +#html-message blockquote { + margin: 1em 40px; +} +#html-message blockquote[type="cite"] { + margin-left: 0; + margin-right: 0; + padding-left: 1em; +} + +/* Compose view */ +.composebody { + font-family: "Lucida Console",Courier,"Courier New"; + font-size: 100%; + padding: 2px; +} +#text_identity, #to, #cc, #bcc, #subject { + width: 550px; +} +.spellcheck { + white-space: pre; + white-space: -moz-pre-wrap; + white-space: -hp-pre-wrap; + white-space: -o-pre-wrap; + white-space: -pre-wrap; + white-space: pre-wrap; + white-space: pre-line; + word-wrap: break-word; +} + +.folders { + font-size: 100%; +} +.folderselect { + padding-top: 5px; +} +.seen { + background: #fff; +} +.seen:hover, .seen-over { + background: #f3f3f3; +} +.unseen { + font-weight: bold; + background: #eef; +} +tr.unseen:hover, tr.unseen-over { + font-weight: bold; + background: #ccf; +} +.answered { + background: #cfc; +} +tr.answered:hover, tr.answered-over { + background: #9e9; +} +.important, .flagged { + background: #fcc; +} +tr.important:hover, tr.important-over, tr.flagged:hover, tr.flagged-over { + background: #faa; +} +.unimportant { + font-weight: normal; +} +.deleted { + background: #999; +} +tr.deleted:hover, tr.deleted-over { + background: #777; +} +.deleted * { + text-decoration: line-through; +} +.folderunsub { + background: #bbb; + font-style: italic; +} +.quotawarn { + color: #000; + background: yellow; +} +.quotaalert { + color: #fff; + background: #f00; +} + +/* Pad the addressbook icon in header compose links. */ +.msgheader img { + vertical-align: middle; + padding: 1px 1px 1px 2px; +} + +/* Autocomplete styles. */ +.autocomplete { + background: #f4f4f4; + border: 1px solid #d4d4d4; + position: absolute; + padding: 2px 2px 2px 2px; +} +.autocomplete ul { + margin: 1px; + padding: 1px; + list-style-type: none; +} +.autocomplete ul li { + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; + color: #000; +} +.autocomplete ul .selected { + background: gray; + color: #fff; +} +.addressTr { + width: 580px; +} +.addressTr span { + vertical-align: top; +} + +/* SpellChecker styles. */ +.Checking { + color: #f00; +} +.incorrect { + text-decoration: underline; + cursor: pointer; + color: #f00; +} +.corrected { + text-decoration: underline; + cursor: pointer; + color: #090; +} + +/* Popdown styles. */ +a.popdown { + cursor: pointer; + background: url("graphics/popdown.png") no-repeat center center; + padding-left: 6px; + padding-right: 6px; +} +a.popdown:hover { + padding-left: 5px; + padding-right: 5px; + border-left: 1px solid #fff; + border-top: 1px solid #fff; + border-right: 1px solid #000; + border-bottom: 1px solid #000; +} + +/* Other styles used in IMP. */ +.padded { + padding: 1px; +} + +/* Audio selection */ +ul.nav-audio { + list-style: none; +} +.nav-audio li { + height: 24px; +} +.nav-audio embed { + vertical-align: middle; + height: 24px; +} + +/* Redbox styles. */ +#RB_overlay { + position: absolute; + z-index: 100; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + min-height: 100%; + background-color: #000; + opacity: .6; + filter: alpha(opacity=60); +} +#RB_loading { + z-index: 101; + width: 66; + margin-left: auto; + margin-right: auto; + margin-top: 200px; + padding-bottom: 66px; + text-align: center; + background: url("graphics/redbox_spinner.gif") no-repeat bottom center; +} +#RB_window { + z-index: 102; + background-color: #fff; + display: block; + text-align: left; + overflow: hidden; + margin: 20px auto 0 auto; + position: absolute; +} + +#RB_confirm { + width: 20em; + padding: 1em; + border: 1px solid #ccc; + background: #ffc; +} +#RB_confirm input { + margin: .2em; +} + +.largeaddrlist { + cursor: pointer; + background: #aaa; + margin-right: 5px; +} +.largeaddrlist:hover { + text-decoration: underline; +} diff --git a/imp/themes/silver/graphics/addressbook_add.png b/imp/themes/silver/graphics/addressbook_add.png new file mode 100644 index 0000000000000000000000000000000000000000..2a68453811f26444e2d04da5713c9c757dc999c0 GIT binary patch literal 661 zcmV;G0&4wR5;6} zlgmp~VHCiBGxv_KMl&C2qkCXb}Wq zf!ZRmAV?dcl3`5C9`u^&j*R%u>z&8;KPY{YWGtbfuK$a=ExUB}iH8 zEPs4~N^jt-Zswr3g){Ci_UZ~2!Wmr0Ma#WbhXyeU7+*w?FH!AkTK)!xHA(%V`3nWCtofZB~;xy1Wp zclf$8!*6>HJGqJf=sC(o!*&OC`_`CUEJs$9bD*XGd(Ea)E&#^XnS(ZgInMBG4q?C+}4skYc8sQWiIn=|m_d^&hoje?QvJHqv zqa+duDl02#Y;2^Yq$CGiSe?h^a1&_01i;l(w|V?-kc=Ef7eagphr`W62s%1C9HCH1 z#bU9%U$?rx%&ZwAVonn5xl8}}1&XvnG^ef{ySYZA*K@tzyT7lq^#o0|ZG4^&6PlhR v_HFfsW4GsQ^m_V%%Rnix4h+5;FoS;pMlVc!y2FYE00000NkvXXu0mjf;fN;k literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/addressbook_browse.png b/imp/themes/silver/graphics/addressbook_browse.png new file mode 100644 index 0000000000000000000000000000000000000000..b73419ba82098bbdca1989d31fa798756c987524 GIT binary patch literal 770 zcmV+d1O5DoP)LHt}U(fC{;>Yum{xmD^Y@B5nN0h99fKm3?`0_{sl~q#>Lf`Xq^mk zkPrtoHo*|Z3nt2x}Jy`Dy+VWv$$5Q(e+JC7mM8^t0(iL(m}3r?Oq>CBlk z+U+S25g-Hs)ayudKxvr*V(ri6%46oq;@1yc0P zA3d#Jwv=Vd%^Q~uhdUw?5#qmljMYF15n(hM*?Rc9vGHS$KYP}#o8KGsA85A5J$?L5 z*MC`7uV)9h3*UUa-*A}z_>9dmBBYe0l)#gR7WI4g9iBg>J=3wbH*kCHJ4ZXOSYQ27 zDru6(55yX)S@&n6~krBum)TC;$e8swaf zMkA1;lB^Q1DT^mw z_wd1AvaF1rQ^f`GXt>pMc(a6@v#P4V>fhgb;ib1-`{@%;>^~y%NUa>Var+02W?K%X zYERjjxIaDC&rwE%l#-mYDhz}(!NW^0=wBZMH5C_+RAIVF!K23~z}<>ANUn_?}3M|H~;_u07*qoM6N<$f@;M1& literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/apple.png b/imp/themes/silver/graphics/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe4f121cf12239484166e3fc3308a29b2b53eef GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp@KrFz)3?zTmvT_3{(Ey(i*8&EHI}8ke8D=o-V)&cN z@b@oJ;*QaT+!sKau_VYZn8D%MjWi&~%+tj&q~ccY32rV11rC>kx~qT7TW0-j`IgWs z_}|6I>3sY< literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/attachment.png b/imp/themes/silver/graphics/attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..ea897cc9f18ca49aa0f30bad4e6b67e4afc7f498 GIT binary patch literal 391 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 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/audio/reminder.wav b/imp/themes/silver/graphics/audio/reminder.wav new file mode 100644 index 0000000000000000000000000000000000000000..2fe83c1981b921086eeea14bded7fe0cb4f3a11e GIT binary patch literal 25816 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 PrxTEa;^k)c{*V4Y(6!sP literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/compose.png b/imp/themes/silver/graphics/compose.png new file mode 100644 index 0000000000000000000000000000000000000000..6c933681f3b5316e54ed7db9ce53f2e00989325b GIT binary patch literal 761 zcmVRvVeTifTlZGEZNAHZ7i+XD6HF1R0l=P zfyscSl7Z{b3aDs0m6Ms>RMQy=_$j(NqsYBiu(n~MBTC@sVniQ-D7XOPL4s1%z@zCE z#9N|hjR!nUwAQdZiP;?yq&uRRc&DJEnrMqqk0|m)F^Qn8x?}}ytx;sVA|RXQQLVw6 z-Q)+esR)vZ5Jso+9>FEb93>v#dzD8l7V^#ng}-dn>P-cNcgHd->U2#00Q?OKQ zcz8OiAj99uA_H|SPuZW&3N@X~?e9Wq4Gk3w0(oB67DQMxk;EU&)A-1l*) zwF(-Bfg`;q0Oz2az;d{^L@9A{Qbthn!_By>J%pVcu5B})M)9MP!_mWskZ#$7$!|}P z`+5u2Qa>-D{OhOAee6jGom7INCCqpO8QNurRMbW%$JB@W*x%C&Mj3iL2f>JmzJ2}B zsxKVD*jQa0xIB>v$l!P6q=I0_iwCeRuEs-nY*ui2wlBo{da&-rimXk_dpOx8l9Y2eXq^TiLre{gv0N zh@vQpp3E(_zQv8WAB*@mevb>S`MD?sAf3NIKIx==eZ#Jr9#7|~0H2e>)YKJ;10yn{ zb~SBXr^1(^@_cc&7(P~SnNU?q95~@CRVtL1isxZE)U%{&!=XelB6GnODxd1btErjO zj_6poZCs)d1RVpU;qKVX8HX|rHyyQURHCLW%8}-eFWR-IYhR*iQ-E&#nFI_$K^_5DwQb0QR_*>mIH#Cqd99N2l)Z|DPKCCbQ(9lp- zvu47Wa~kew3p-R8Jp8%booy=RR$@JQDF}+Z*eRMM5iCB+Uxaqp3-6bf0D%9C#5QQ<|d}62BjvZR2H60wE-&n>*?YcA|c6o&|A+rkb&Vsas2(@ zRZChzd<-rL%s+C)K`AUj&@4exERnTGr7g|ufjFlYo2X-lQc?WBS5|%h$H~-pP=>{CWcO1^&sC zas{(rHNEeVX?R|+D*2koKAT-1TVxuXF7Gt2pCrhe%W27Qah0e`>%4W-qEi^2ys8L$ zkzFy>C52%M!-~#H9Xt(|Evme3 znsTM3@O9jy7lMk63GZ(u8Hac+{l2Nv{)WYyc2KzeV81veQkLz}aZs=_c)I$ztaD0e F0sv?9ij)8V literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/encrypted.png b/imp/themes/silver/graphics/encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdd3304de57761ba769f304df43ef97b4e6cc98 GIT binary patch literal 792 zcmV+z1LypSP)gn-s{Jsef@w|XbT!@L zKqWCIT8+A(7Sx3z9}!4Pu(d7F()NAMIIl$mh8>gK+?nLgnRCyXOBiF=&l0fDCEXmG zO1fK=fkMUbY^kO|IUx!Li*G1rXYru4dEO2NVi`tlvyl0*xG05#{;n&-JwDA~#O)Gy zp_Bjjq?zlQDb_VBdhw2?3i+}b*G)Mkej}RiH|=KYV#o;^MY)fCsb9d zsU|OsN4*FKTk!a82BnG)znj1#sVFUsLkabxPk!I1k)<6rR_jd$gsWp3CfpLm!B_y3 zsXVd;6|1uoP{IT7MFtSAy@Rth*I@QnS)ry`u-WLkiCn3Iu66|{;z1la6h!*_9BM0* z{Ph5=@-syHFF{yNfEpSa|Bn$Hz+|?+`69m@R^azIIYol*12T?FuMz1z52!OpJxahE zsKZrEL0x&ntu#0QWkR*Ix~y>@k9Eo{8Whm#vABR1lv)~Yvjinr1J#!7Vpv?v?xE{w z`;|a0UsB7zvrDA!!ri2^HGa~ics!CzBobHC!F9M6c_^MfJ51b;DNsGT-LnItXArps z0g2@NX5wr7GudmHX6_GN4fPJ+>*$gBt0~^Ej_Ief7#!&Z5&eLC4(SIs@{H0mdjh0J zPi6ZrCt{+o3}&v|YVDdoQ9g>?w=bA~e*1~E*Mymx?w%PNsdJ5Z>vTu3e;IaWtm6;T WSyNB7TWW=I5Rl}zuENrQ28Pt;CX(qKOcDU|M8F&Z%jVGSZA7t& zSX&s1bi|{*v*DgAz3ST9+K6Us3~0Q9*~BWe6PID=&0x|wWdf!IWgI(}6lv9v-FpSS zw1U9OL{Ex%ACuJL>=wxTZg0 zEf8`!jsrze5UvA~SqG-HeEY!{P)iC{?3#nq?S616TB~hnMW{0-6j9tLvf?&u+XiC{ z?O_E0jiYQZlqIojGL$5a1qk9N)mlxpmZq1W6gHT`ec`8K>j$jl3}`WfukS z{=!u2#P1a^U!H8Xl5T`7??NT1t zUc_pqB=&-xQ}oxwg~5^6HaUDuDLGXE;y3!@QP_pOFSc-kKKIu gX8xa5{%_a#2W_ovs9z>%07*qoM6N<$f|edvg8%>k literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/favicon.ico b/imp/themes/silver/graphics/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b910e7964d3bce97a14440b52ac0979d7747ff49 GIT binary patch literal 1406 zcmeH_Sy&WQ7=~Xe(^e_ViWY6RY@?Nma>6at3R-L-GeyaU5-bFh1O*%fVGxkf2$004 zfG$uJGC^S26@n*B(!l`(1{j8A7+_|ctuuMil@~qT_MPWF@BjUm=Q-dej=MYJp2oT< zFcX*~5G!U2T>DE!?mw5j6`m9YdU7n(i{l~Q{1hgkFx-dZ5#AI=%tsZzh^j~lswf{+ zTNhHh#gFQk#gxbTqKfvXTIMTQLUsI7!7@r?11OTMqJF0zhh(d1lm*a`B<6TA3pXVD zQM@CN!-;D-Dwp!JJeVeV5EUs>Ds}}^mKH)~+ImXT!zkaqfwl}Om5MN06`@q^*+_Nf zCTg=bb1EyGy6i~W1oiu(XvmEwA?h6J1Ka3QMxj>5kSgote105_`EnGA8Zr{JXbKbA zoBSv3g{fqw^wND;LH7{_y(J1p%QDa&%VwY=m%fTTMyqnrRpv3EQZi6eh^{uD?%IP4 zo+uI&qdQrQ{^Swi5{85gO@}ZvA4K1Bl#!NS(6^RRQ|iRlUP^trli}ZMI8o)qd{%`` zU5V~Y6HT?Et84hR&Pj{F*wKth(}=CJ4s%yC8chf0^Q~B1bpM8>=QM_%GuV6Euxn2- zsXdFm?=<%QcEKOm2Lw7b=7BC8gK8YQbHW`04aUK4;Z7X-PA2p{7>4_?3~QMj>BBVA zk8M;d5VJui&|?}K#QZmU;UUb%A&g@N%;TaPhcOz*FpV1oE*r5j z)T^(#_WB!coH663=~Hk^iQc{Eo2;Ci-0$}9kN^0}D{|iZJZekirp;f4hpqGb`j)E> ze70QrMW`!5udhzL<2vQW;5VeMDqZ%`CrNkSru;H=`F#(F+#9rVWs=7|%8<7ol&lev zyzuG=Ngi{R@61e}pb{4xLg51+Z%T=&w5ZT>I)Qws_f`7XRz|IPDNxTule*w?T B@#_Ep literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/fetchmail.png b/imp/themes/silver/graphics/fetchmail.png new file mode 100644 index 0000000000000000000000000000000000000000..9680afd12f8fadf5b83f827240978446af5962b6 GIT binary patch literal 634 zcmV-=0)_pFP)3kp_oQM4NsQ6$aEKj6mx0hg})10sT;E2V;K zUHNY7qG&TIJ`gc&M*EmdrgP_>>zSLTO=}7j2M*`nnfbo+_|8cvrSLzG(R^{I&fHg| z3Nfi70*Jk=pS3m4lD_qhO!oanz~FpWe?InrjDM6H7D@P(w+NOTuL0gfPQ>)8EiKPO>RV|@%G(EApK7|ni6$Or7s}#zN5D2fFuoW z?SUp(cysDe%D^FVRe!-fK+o2zXp zH&*H~_``&05AX{CqjQ9Pq)Pw`p&~+e-<5=lgjH9A;4MsYR*p|Xp3o{VtL6Q8vD&1u z_TBwgt>E(`Zp(h8_8f=r&cr~-uy!|BC|zGKq17aQeR}wL=f1PUhPjus5Lo&7j={xc zCLhQZ=E~bn;<}`gh7Bu?>ih@P+*yw5-^u2k8!el-HG?lt4o$V&*`tbh^4#JtCOgRB z@^-thiGaZ!P|20J4^o7;v)78_|FldDe9Z$i&;9^|y&bKi-n=y{JsccrzVF2T076QP UWao5~B>(^b07*qoM6N<$g7%3ha{vGU literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/filters.png b/imp/themes/silver/graphics/filters.png new file mode 100644 index 0000000000000000000000000000000000000000..00818f63635ef3b3c04260c0d8f160b19570cb62 GIT binary patch literal 597 zcmV-b0;>IqP)62!*BTExOSjY%3)*jT5svJpGKf=$3CUqKK-1RDzx8ymlZ zwS;W;-7_=ySiHB1u9f68hg;0tAIzK-5q6bH&%Yeqk1(r}i84|~$mldU469wb{r=gf zuYVfkh}abCXHiD56XS1@m(?2&*9kHq6O|^j@r%)9WR;gBSR*+^{BUiAhv zLTNl5-SWcMf`$Z#q6Tzk02$5(j=VTsw!_ijI|?3O5Ws14CO8uvli9}fO~g1=Dv?Sg z6QM+>P3O~zsHL}l?cjL#8yuEVU~n|V*x($S*`2dri>5x}hU56pjd4M7=H5jVf&jnh_YoHFW1pQh33@EE+GcT-uHR1*sID5Hzvg z6g2}hp<@K+0FD7#ACek+3k!>iLhA`|uU)j;i__)Z&Fgb3t?v-b7s4*agaQ+5 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/folders/drafts.png b/imp/themes/silver/graphics/folders/drafts.png new file mode 100644 index 0000000000000000000000000000000000000000..53420f0276c62cd2c2f574d394c3c159441690bb GIT binary patch literal 645 zcmV;00($+4P)Yk0uo6? zK~y-)&5^rn6j2z(fA`Mp?u6i)G>JsCOeBqslER3ju@b>ju&~sB!zy5(Xb~S^Ef(p5 z5?_S@K^yTAW07pggS>W=o!Oat@3EMTiePFFeC7Fl=R2R_2+h3SP{%o(3w&GM0`A`8efQ1%tEo8(F!iFLTN6WU?gu1M_&^-N<9EBfUuev(tu(I3M*+MSJ8iMJ zDSYrWQ^%#@9>z!d=&jl-bMt8{2KX|2?n6=^9W}=OVHeLbhzuk#6yA_jEgQQjBmEW5 z4jgCxRZI+EWY3%$e^@cbfJ!sQpt)5rhNKcviw#M|vYm@YOAHT2M3Gf_f>TDwYn`=e zd>(O}%;;rrAWCfLISmbhnt6BCm_ z00|LjuRS7ffiPW&K^Wrtg>tX)hX6@FBVT_&w?!aukXmvFodOEy$#O^9$>|&1AqEN; zx+Qjyf-8@e$`qlXUMry5K|X_UK=4iE_DF^<^8Tr&95EDy?2=s?JjQsmpn z?<3blzEv*hDh5yx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWg@#5J*h%>dq^uaFBvVQ$3&c*y#>&P@VnG_z zkezqQ&je1b~~$O}L9 zo^;|X_f#3CS5n-cFHBf|3c+u^PpWoka6G0Rsr|AOXUJ zbHD{5nUGu>5YB96PUmjGgM{$-j5TbT8bBGbz2R zHjvpHkWu0*cCs9&;{|Ugi`d3|T+)Vj%kXX`qqQ>4W)|B!_mMlW`2x#YyU0W#8Pyvn z-<;pE4zUG8k-yYxmFW4%eIAbtF|hR_$8YW;YMMc&ZY1$9z5S(QZA)e!-q6)Y`+^>Z zzdYprlOaC7jZYg%{Ey!L(s5u9Pz1(+vk%UU4EzNDb1nO~@as(g0000#NXU(rVJZ0_Z7&gXp3z2_(q;VkBGMmsaW16Y~9 zp7fgr29!F<6RP>ub)&O4fa*V43V`C3yGz;wP~!A;4tPPFm}sl;XZ|Jd$pb)31sm2?QX#5xu zDMxIG3FC+rZ21>aF->7BLCkLhiNJ=4Xh0M6jm8n%ee?z>@vSZsmO#QHQGTDG?-71; z|3Slt3Z$mMI}gV3jscN_SKq?<{>Mjwg2jd#=*TQ%RKcRuE)beKot?IvC(#|lF1=DdvMQ?PApSc z(OerDrLOlX<;5AkFU)$g!?9p2(@mCY5j}K^A z`%F()Gos|V2Oy!%=+bUOREP)Iz!8ao4L~j+rb@K)1;4cy?z}jjz=<|ot9ojHO7-2^ z`+I{3!zhCP=C$6fDzWuJ*>mjD0&07*qoM6N<$f)0Et AfB*mh literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/folders/folder_edit.png b/imp/themes/silver/graphics/folders/folder_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ad669cc7814eb52a0990c156e4358bd8d523089c GIT binary patch literal 733 zcmV<30wVp1P)Ln`3m6cBjUs{~SZF1Q|l+PQ4$F&BPWU{LQ5Rm}%Yp+9Uy#II9~vucwq!AZ0U3VS=&d(VjEIGJ6F` zxEYZ+Do*Dgo&xS90WcC^bwyaXLaY<13Xc{ys@jsg}$ z5G+=Y;0}5=7O5P92480MbaXQ7%}6B`AYHKOFX}h+}d5}LKg{F2q&8;J?*AuZJvty1~9)ANwocD zyswqfv|ByYH|QiPmSI$m{Oe0B$hidL4Saj?irNjUNTgedgFr;v@FyS$FAiPZ+kvpX z-^tbQJARF~w@xzf^f?uc>#?PNS(q}q__!blpq^>0+$ab5#~RNbYmZJJIiAFc>3MLM zPag)Sv-P!|JI?j?{%Z?=0rqdL^*1#yN_MoZL{i~%zgRlF`+VQf|HkwKvQRq#2{xLW P00000NkvXXu0mjfz!^#T literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/folders/folder_open.png b/imp/themes/silver/graphics/folders/folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..784e8fa48234f4f64b6922a6758f254ee0ca08ec GIT binary patch literal 537 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 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/folders/trash.png b/imp/themes/silver/graphics/folders/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..ebad933c8b3729a9b27dc34c5a111600b8d46fdb GIT binary patch literal 476 zcmV<20VDp2P)!P6q=I0_iwCeRuEs-nY*ui2wlBo{da&-rimXk_dpOx8l9Y2eXq^TiLre{gv0N zh@vQpp3E(_zQv8WAB*@mevb>S`MD?sAf3NIKIx==eZ#Jr9#7|~0H2e>)YKJ;10yn{ zb~SBXr^1(^@_cc&7(P~SnNU?q95~@CRVtL1isxZE)U%{&!=XelB6GnODxd1btErjO zj_6poZCs)d1RVpU;qKVX8HX|rHyyQURHCLW%8}-eFWR-IYhR*iQ-E&#nFI_$K^_5DwQb0QR_*>mIH#Cqd99N2l)Z|DPKCCbQ(9lp- zvu47Wa~kew3p-R8Jp8%booy=RR$@JQDF}+Z*eRMM5iCB+Uxaqp3-6bf0D%9zj!aV1D~<*HB>(T#!&X?LweP`h!V z#f5ew2F#+kh=_`{(2cDWLBy7tHkri1Wb7oF$^3io``&etX-G&e+`Bj&F87>!L{-_T zzWA|n)Q0xwK!hlEuby~r@XH;Es=BQ|oSK=Ky1b~fiyf`hx;lOJKmBOx*5ppyZNQnY zZ~pS#)g`UB6YVg?ZhbEqmlQM~s!=ZT#ob{;{A zoFhq;@h1;+eW88s^ed&e?78U$KQ^2*kB{~9*UT+WJUhs~LIDwr0&yZF>u%v)#Hr6O z@xq}3d-JPrPJB~-!^Z8k`SC}FO5IqAV@F|cf$GPfk;!B>jF!OSY(VC<nfc3_W}hQUTZitf6w{8c71n-2vV^f1S5q93fvQmQ1tj zB^?@`daTGwy+Hz`LksuJ_dS8xX&mZOe^A|Uz zL^d@{{_qFm&m3WNIEVD|XPdoO*#Jg|a-^R=%mY)Gt002ovPDHLkV1h-DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mail_answered.png b/imp/themes/silver/graphics/mail_answered.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa690716e0f6857c19fa0528027e7cc8db5e2ef GIT binary patch literal 744 zcmVP)c~##*ANH-D!^m@w=tH>#DnIawIU7Ec}8oC!iJ z5^?vJ?c(=d^y*rm-L=4s9J?HJo%)I{DIJMBw7q8(U1H6yC6h=rwy+HyqQw=~+8 z(7-}daqWJM#dhGN3&l-NJ1`<1a~NHp;mPYdORFKn89~ei&lPx5;7Q0O186M5lS@c7OQVyO3&xLG4(DD_NFX{~CGn7VCi0|e(?XKy4 z(}mJVio!r2cc-efd_^`PNGAkMUvc|sm29?;(nyM={K>}lTJHiOK!=)yjMy-m-A0Xa!TK~yNu zg^)c<0&xI`pS%0tsU4-6rPL5bQ1nI(5kzy7kmS%*kmOhC8^n!5Q4mN%h!qV%&>{#C zSwj>N5uuj2Sf1WpLk$+a{I&<4;m0F6{5{bOi`|MLCM2hxZ-1)BNMj^2Uj*f0Qi@V! zx3_}9diVk|A}afmcGyvE9F`fU1z6>pEH97(fye1wQe`Xx=oIjCkI69$Ji`G9(PMcb zheID7gm}Z@&TQ4n)JQynkcTxNNGO27MFku0tEss^f5~Dh;w_<}A|ucd_>sI_+&~^c zsAF#Z3X^_9v~g)?Yqn~NAxe+}kmX=QnP!#&_E>Wc&qiXd%?&Jya0DQ#=UbzApi#GS zJ2L>uVq`_3OyUGUY{!Xzt2-BH0{Msh^TB_FL7f7me;0r7V^0000^TB^kd6+}^bNWq$>v1_tvlWwx_aduPjaVm7+WB(oI`{tYfK^SA$&!X7p5^p_z zH!nrxAX_Oxq>T=F2EnOlStfTGd5Sb+NwXqP*=wX)shY2Fn4~ zt0o@2D5ItsR8D6PQO$5jC_vHI6G#4of~_43nK(g!n+Xa8LD2({3=>rACZ=C+BH0l~ zXENk_qD|fQE#|so=+DG4yR4wru+SBwJ~7CJ5)y&h@W=|fI^)Ro#Xxq8M>XAPXOkby z^~R7+MKHBc^a&nO=BV;`a;}I(BI2J3i+`0-YqcE^o*mn=A&D*q`jVJ=uVB5R`*{9V zL6+~yK?juCzO&z%6`O_w&y8u?*i;+HW@H3|0hCnZSEn=QUQ8r zFUl9L0_=<@U^8A@qEtCKEh8)i;3*Crh+u%jE1Q;|06tIQ|cuyn{$0iG$fe99x)lM04lo z+Ue`FsgN9viXnlBJe!o4Pv9z)5>Wo$n;UDQ)I9{8zwxJqZ}%Xn*F>_HValHsi>F2| z_ea0az-awIlkYX^0#;U0+S4#aIxxh#x-?g mOmN7cBd`)@O`OZycYgu8p&|Af^9}g`0000YCj9)0M$R^4v<1rbljMjA>+a4*Fv?vRhe{~gr z%Dh6QGei@IC{91XUoMy!8piefTprt(G*USyp&U=#>zgJyrzjLP6B&-PJrzNYsRhW}abY-=o|braxZC!={j}CE5Rpfy5PR8yX4z5xy*} ztSSisPRYSHeV<*&Z}a8BIY#Ms7s7Cbbv+>flXm`dkZsR)Ahv@B#N$BW8|H*E=uaL^Dpo+dHYMiN4- zIrR{~4g*QN((=Y<@+z19F(uVfdg9>O-pYU#3dw*eq%<*1foXtY2n@N(Thl^-b{(Zw m7UwhR(d2ir-fuKmCw>B@7##EPk)wG40000W2MxECPn{*ELdZ1op0xyVpxzDdhz3h^YVPo^S(T97!Wp}{CC5s zOO0&MCbYN{*S_u5sKy(UFm7-Lr)M|odnZ1F`|tp z;QLC~;7ZS9V!0QqC_yL9nVW1CJTMZN4M(R$+ zOTZBsFr_4h`&3JNv0I_O8fwI~`z}0v3|$@I8UFpf@&;uE8s7DoF&~bRfJhmzX*a6< zs}(O~Kx~cpZxH}pS*S{qZRPWYW?G`zW8AQcn3#1@S*BcNV6f!zir{5lPjYZSt>eR~E27PJ0+es0y~s0ch&nN;M*NkCc% zXiQ#beHkC&om4IpK8qPut?)aNVjs<%39&#|d3=N1!OZi|I!ONj#Vr@M%?lVEC`+Fg zAQwL{?FfzVoB-$9WC=Ju7r^r86-w*!nR~wgLM67#gs;7-00000NkvXXu0mjfgI^=` literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mail_forwarded.png b/imp/themes/silver/graphics/mail_forwarded.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6c5d396ad024567a769d1f2285c525bef8c88b GIT binary patch literal 754 zcmV~0d>kmp9&fG9>#5EaEn(MD9Xvl47<{Rb2T3D!0$wpy4@P!Tnn zB0fxQ2!aPL_fZ@!=Wv9zmj8jnf5JO`<=MmZs@#@p z5O*{}9L5B6J+L7ORza<+9h)-B~<&cwIhUkd?cp4is-ziNrfY^u-7xdbFt=#%1534Oi8ajBBo}VZvCxd1 zTu*VtX+~P45)Om?dG5aS`PPW(%?lDPBwaz$6C^$8$_Q#plJTjpbgj;_rYi*?oK~m+ zDD`C->dkZKh0j6|Q^-0bJxIFHnHJOo$@r8{VNIUWU>31rp3@BVvYIZG2D0>Yuj2Y- zg?b?AObc>pK`oG+zkPsr3x_BTWXX8H*w}0@e;@>?SdsP&!-HMidhRn*4VkHi+<58} zTg6ae0~aSoNqRq(^;(g}0#Yiz)&q*YIg-f)mmeJA&3%nD3aJ$X-6L%1+fEQRIeTL* zS5K6|3cOaNtTtBowSZzzj!ZfM7L<|f+jtyp4ccf7mf6J$n}&ALkZlfLEYRoNvtG0Q zzJh|U~_Rdjkv}0kGt_?V}5$?sXN`N zTt|nOa)sx)IIf_-7XW**;!X9`USPjuUUsJrREk)6q*M9ZHEb zl2A!T3LBjrrTx74{FsUNcVA1zw%IWoiGNMw=s9P8>+qh!B*saR2}S literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mail_personal.png b/imp/themes/silver/graphics/mail_personal.png new file mode 100644 index 0000000000000000000000000000000000000000..7c71de03b2b38cdf3aba691e3a3334b712ea4d5e GIT binary patch literal 663 zcmV;I0%-k-P)^@R5;6} zlU-<1VHn33^g%H_Q)k_G9ovjfnFiK+H+Wv4;+`mU!eP_1WYT1cBMG4+b^?L6?AK< zB&!jFQPqM`i@@k4u(!!^rBRBL3hHN70i&#iOH+^0u48x?v*GiYACKJzT+r-=qk+oz zUpus;svxs4gSf1jroEXH?t1wdY3Aof0-iGMy6$K8JD3_XyAT<+1dUmit6yK(! zNF_M9n(Bm#E9}vQx7n3q{&nCY)~18Vynj^W_e>bi@1BCANxml61a_7c$XmJMZk?*# z;GcZLxX)MuKlTCU=6xU;ncBCjL?Amju!Wp&&M@$uZ9p#m5yGvf5Ue8*EJF}(aLDzJ zAlPvPBtx=PWAE0I3CKlubR6lS2?)Vw;GM(ZEgZ6)VF+v#S+fswc_vu$Vh-L#8KE%#xl>f)!T)$#yRmO>TTOvB+HZ zV8!UbBF$h)Z%6VHiyt@rn*}fK8xy1uKWEQR=pEqAk+P7{#x6 x&>pVMG)#i!=x;v%@<9vjT^KNkD*ncQ;SaYr!-X7+DklH{002ovPDHLkV1noBEY$!2 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mail_priority_high.png b/imp/themes/silver/graphics/mail_priority_high.png new file mode 100644 index 0000000000000000000000000000000000000000..f233bc77053bf3d4b0c8fafd2a9c58bf34603b61 GIT binary patch literal 673 zcmV;S0$%-zP)N@1p=a9KakdI4{r9Fsj0rE)+ zb~J|8lW*Tz02$`Zaxk^6sfOa5!ghcM1=puT<{WmU!JK!6{4kb3fZrJ*ROjE>@quHyr}*Cr;=Aa64! zj|O-=Sx^U(hAq-h=kq`Q2V>dc0LCnFFu6l&F;*d8IpiIHH4yNNu{%yB`v73}L;K|S z5BXjfZJO%>P`FNNQN^m$1zjx5c5Y{17VpEWq!t0|e{#P8+?shbj%;~D00000NkvXX Hu0mjf+-WMY literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mail_priority_low.png b/imp/themes/silver/graphics/mail_priority_low.png new file mode 100644 index 0000000000000000000000000000000000000000..ade431851b0b6546eb6bee5cd85716df7f67e077 GIT binary patch literal 725 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 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mime/image.png b/imp/themes/silver/graphics/mime/image.png new file mode 100644 index 0000000000000000000000000000000000000000..6c2aaaaaf33ec07184ae0f5824ef24c82c41106f GIT binary patch literal 589 zcmV-T029`oe)=`;M0Ve`z_rRHM)ytw;{NqJ92_6VOk@C*y0Ex)o5ihL^ph1#5YinO zyxORvZUfgg!GxzCWTNIM`)KJS{p1Ntor?_ABp3_=gaD2H85Y)0(rUlQOh{nzR6z<5 zEO0De$IN)yJIjF82x73(uJW{bfy*E6{#GD4S;+brQ?z@ND2z~($5eI$1QYf0H)an^QOO;qRuu9YpYp4SM;xg>M8uf2>q?GuNnCdgP^*Bj5V_b?dAq2Ppn9^MBB^YUM zad0N-T{Ujg*A6d~mYV4na=hT4Nz+_}SGTgW|Iir!%$ z;@OGkWI6+j0H}~K4RYR%!7y|zM`O@*K>rL{*&}x3lR**HrMXC1->#slU>X|w!U1xQ zqcAz`{eoOom?Tf*9)f$7n8&|1&5M4#i^32;+&E? zC3Q;bRFQN#y*%%=_V)Mfa<$xe^kB0TO;vJPkN*k(2v-CI7)OaWj?&eKPos(H4wGh_ zIC;6#q1B5SMap5{(Hc0~XO7OfqZ=x{kupu8-H&9azl`L1pTuu^Znm3EA)kCoG=JuwsyNLEtY83i->Z~j3y~F)`RA1k>zTES07po!kBVS2y#L{jCt|CMY&v{ zxmqM|`OA#P2{R&)OcQd}v0kt6_Dh#`Z$i5_;q|93je3Q^PcfR{TmBHRmr;rWahz~G z2x-&;d_O~HkmKXt5Cd#Bs?-+qj3zOiUdU24KowBIUPg(gPNmxqX)Fiia~V*$y;5L( zrGNmU;81MA$F2k%oeUXQ@}N%bXz=qOij$4IYk4W=jfhDxfCz{PGXe-#ge#VfYTyoj zh4JvDePrW{lf(Oux2xG;VZmlSvDU+Qf@i=O!B`MLglhttCUHDIKkc7~O9lw>B8WRlD)Gm}Jrz31u-X&&gn2lvjs=i{7nIaL6v2==uw+8Lcs(8j27 z;|c`rmSv@Lx!heopGP^^Ieb3f=R!%Lpp$}iMS-&P3EJ)s48wrJ_Ni0~k|c47D2nj= z{jS6bt|kFpFf|p5cM`_&0Zh|`rfEp0(}=}lT#(6RpzAsUfxv^LSYX>WlAaN$>)*J5 z0#sE+JRUD8iT9*fz{)_^7@6P&!sEjTcD+I9Z4YjT1`wH@fV{cEvneYGFU%maIEU2s55&K(LixD|{p-uiS@?KNj zk-Go8G$hH6g002ovPDHLkV1hVj1#|!a literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/mime/text.png b/imp/themes/silver/graphics/mime/text.png new file mode 100644 index 0000000000000000000000000000000000000000..813f712f726c935f9adf8d2f2dd0d7683791ef11 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MK085kT%%rD^#48bI70jB0q z+G~09`0*Rs7Z-D~v*!#-?~|cr-@JMIXdhyOKnnoRcMb4jplbR60000Q51$RwCw?WgWe;0fi^vY%UagXRhyB(O=1wVPFJlYqlK$kNFcaSBrLFKHcpU( zVj5rP+%se7wuRup#~J3_|C@8?jsx6(aN8gV+_?~^wID=7QAmWo&=P9GzK~Bj7P?xU z4^LybJ-~;P$nL)ri2Lx-f?f?uyKtX3G(76UWeycgm{0H$eX9nWr+ASHH8>r~vom;o zFz$}vYpDI9TZYLgxm?Z}9nS!RQHI8Y*b~3AE}I>k|Ynq_|_kL0z^} zg`YWG?`i*VRiHt=)+fle*{;CjiLD9r5bPAPFRr!h8&+rODTKm>mjte|vSwTU#7zr+ Y0SIdSJYsEaB>(^b07*qoM6N<$g6XKB5dZ)H literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/popdown.png b/imp/themes/silver/graphics/popdown.png new file mode 100644 index 0000000000000000000000000000000000000000..9b23c06d7b4f4689dc8c9fd4e9d4d1f199fe376f GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM-`@i?U z_W%6<>VNmY^FQu?=k0EK8(;qS{{MRQfQxhfe|^4DBSLrMi_=~IrT?G*6aRH>fZ%Fr xHSdzT`JeW`iC!n;=N{%MvhUm!=_W-^hCUIl<$=usRzPbQJYD@<);T3K0RSKzPZ9tC literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/redbox_spinner.gif b/imp/themes/silver/graphics/redbox_spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..35218b31b5e09d98e59af8f8c17ab0c548b302b6 GIT binary patch literal 6820 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 literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/shared.png b/imp/themes/silver/graphics/shared.png new file mode 100644 index 0000000000000000000000000000000000000000..8850a83557e120b6519ac5b62b81c2e73c3cc698 GIT binary patch literal 686 zcmV;f0#W^mP)4{FP;YV zAe~^`&|0W3;HDm2rM4TZb!vv~wlvL4?Jtm$#e;!|=lT8ed_T`iLJbB3*q^(v7c(<~ z@PkSILi|{vuz&oyS#LG(Kgz5X?YWd4Fce?AK6Cl$oNs|W?7Q%_dj{R34t^+))r}9r z?c$y1ryyf?;(5RS;jA~sHgyf#e}HEPB3{y4h=#(9*Wp^V=QH+;*|XDA@8lXhS_&I` z61396N&y8py@JBWZ+Fp$2XAycM^r8y9CO;iJn^fXJ4Zcs@1AcsZ<8L zKSesENH~&epvE{HeD^><+(VoL>bt+_LZL9o=kvlTz)(Eza5&P*WD-|AS?uh;MJ7b! zl2^mrIR!V9Tlms`kEPT-WV2ZW0)cccmrIXEP*rus=kuZ6ZX-NCiHqa6P~2XFs=Wfk z_VKaR!i}j#@Le8_Mg#G99QAsAc_@8BmCNOMp654Xu^2j?4*LE6$cA8$&rDGiXqpDg zvY42dfYa%OAP59@l~ELBB^V51=#3`Oefa zrqC4IA@)(sosif75R%{TA62p@n9C!vb)m!}k;n+JUMiIq%$BSpS!3&%mafPy UGkGjIO#lD@07*qoM6N<$f+^-cqW}N^ literal 0 HcmV?d00001 diff --git a/imp/themes/silver/graphics/signed.png b/imp/themes/silver/graphics/signed.png new file mode 100644 index 0000000000000000000000000000000000000000..2ebc4f6f9663e32cad77d67ef93ab8843dfea3c0 GIT binary patch literal 749 zcmVe|tv9>?g+k#9o0pTxd@;_sq{kwlU;^VvV*?BV8P@}BoaZTQUROpWV6|-M`|^n&)=+8tHo3*<<$NU zU`%V~ZF;?hBSYsjJ6%JzV}E(D{pOLqQklliUf9um_tGl-wty`y*p?eYNW56P>X@1s zZs7KrRZKtmV7Lqj^5Fgr7_`LjhdJK@ltF&O`j7?*NUM$KvmNGz)3WjM?V$vHlPT0AFyF?kLE<#HZabCSW3-oa*6;Z zrXD`Ulwd<^2glP%1Y1Kc1Ij%DU^=ME(jKf6APNlA$Uu;J4bVilQHSWX5uJ$9Zsp4M z0%!@LvyTxz=Z6stxlichODIY+yNGt%RM;m`>H4LOKLFs9Y%b5aUN|2|{0Zw|<_~i} fmXz*V19AKYa4nJa0`PlBg3pY5G^19JQHhNlNj`@k%q%HHzg==U|9D%gW$B$$pnzkJW0RZ8O~_ z**^l>7H?3b1=gURtg>1uTESC4M-RmX46)~p85(ciV2C_Fjlp$--AR~)afRMYkbh08 z4X%OwtCOX5QXyPUQYlKIT_aI_mrA_ym5}Ph590lI|1dY-e8b>)T!Q$}jyx;DP=E8f z`?4qhxtni(VX!@_j1r9uwKo$O%5S=2)f{@(N4)p$pTHGQ{xjEJf5%{XSQ;Z8FqGcZ zl3e`w2SfGs#SE#JIl*G#XPFqH&rY_S_vnAX(kK5JO0Pd>Fg+-NGa&&rR{O4h{-3$~ z_A`dyvpx*PS5LYx0%~3Y)SQ3$5raOeW=sQO&$9r%az1SBi~p8$9{kVP_~L)S!pHv^ zGB4j_(A+OUR8nT}JgFeudizi1j#vNv=0E(;kb3?$gX&%hlJWx3pG8j7?*C^yBIBFS`4P#i7am Y&H@eJ_ckUDKMh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00KfuL_t(I%axN$Pg6k@$A2^TPT#Zz+wu?%5Q7pWCW!hWTr_cGVu&BW zl{*s_kdR2?XE5$e_e4H|kp&5fLBIee1$o;-Tl%&f|B^{72Zw zY4z&;lcm#g=mGz3bD8<6Spf0!&Aa7?qjx5Qi6j8J6`@@RjYLWTfN1$ER)f;vA}=0I z6HBIFn}ten^4|C@3_~D<$>+5n0EBCK{5xe-t&Xb<%6$oHi5R^-VM;(OnWp%2;jIY} z2?wcJ7KK8&%^2M|AwO`FMkIu3)rn;fag+f)VM6{!J5F};o#cxE+%A9NEH!}9Xp&mp zrh9vj;!r=4qf-EazGl0C>E(;o@ZJVWSwHo$2#NJ9rNI=Dqda!NhpJitEPbW@6vNf0Ij{wS{R-;96(hptnMzayH63_J*IS{ z*K0uJuMvd!je*7;?jyRjPjRRpJLre@y=Q@};%Nr%Z&bYk8Vwp!*J9-M&(O&@rMgXY z?*vt;;rJA}yCYXB%DhmIQYP_ugo$u~debHv^uy@&Hdm~J@lt_urN+m_Pnc5UYVX*# zMo58A83-W|faAFA?C0Fx>bd;Bu>tVR1o*nT&Ev6fTeer3l#;55vzc$m-QjU2TQDX- zpB oK|Y`UFbmB5$9E<(KP3Qu0S{%@Dt{XhVgLXD07*qoM6N<$f|XZKJpcdz literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/apple.png b/imp/themes/tango-blue/graphics/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..6d74bbd79f783cea8ade062ae37c54dd88b7f9fd GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp@KrFz*3?%J)Uw|Y;1AIbU3m6#gFfjaOn8C1%;cqI# z-@ibKJ4O?7UjS*wk|4ie28U-i(m=b|>6k#*O$IM#k7Tyw2@QrE1_m42m>8Lx z(h3=wB;Fo4a6p5D$$?Q-z+utNOP4MQIj}8bRFq+0NO9xV+A-7eKhP`&Pgg&ebxsLQ E0ANlzcmMzZ literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/attachment.png b/imp/themes/tango-blue/graphics/attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..529bb7f554dfa585a4a8d6b9135956b188be3f37 GIT binary patch literal 649 zcmV;40(Sk0P)s%e4^YA&(d3cVhTCLK&Bw17g6TmTG z1V{n*fT@5#xT4HeH3O0?b^tS7rmoSw{r%V-b~ZOQiN#_pEk6BTsZ=}xe=t$cSGQab zmz{mi(ebe{R#sQJ6}U|#@&J>`gv;$R0T-3Ye*j4q&q%WP893+j`Iw##vHWIvYHO=7 zl>V7MAB{f7>-7Sh`X>Nf@%e^rz^+b1Cz(tJ;8MUJTm){cudQL&u@hi-JD_9GGYEiI z(AHxWNfwU+*8l`T2hh+oL9th9b-HH241~;Pvnr8Dpb>-?Kv{uGC;SGqx_WF6pgJv| z1wdDW+XMBRg})V4l@)2!{{iYJm2wreS`E+xP%4!GD3*%b1NmGYfLE_yGT`11Fln=P z^YPOM0P?w93((NSLZJrC%||(L{3KS3&1kV$2}foCC=?3Y0_)jq)}YtxNhW_}CU0Ih z_SzjhiasQ}k;T#LB>pW95Nr2@*@dMACdQA@(``3uG#cK$e@nSi#bYy1oMBO%h6bQrj!1R8#$B#Q=Wvpxb0Q=5Y{ jFbmuT!U2DDE_ literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/audio/doorbell.wav b/imp/themes/tango-blue/graphics/audio/doorbell.wav new file mode 100644 index 0000000000000000000000000000000000000000..1357b8a2b459e21fd4d118bd4d071a7f4314b1ac GIT binary patch literal 5168 zcmbW4TW}lKdB>IMOFMn(Oq*#Q(rGi(nKZ2%ySC&+s%6oXsS7Rf1`+^?3jsoeK!CXJ zVzD3=iv_S)To%|}U_k&&TnK;=Nbmv@ASjp=MT#^j$+BcCV(h4P9Xn~_Nz;cuv=4o2 z4`e5O4>*_w=lst9`@a7<5C0vydg;>N{l%$MlDEV?S|j{7e|GBBsc(Tl?Axbae7|+- zk5AoD!|Fc*%pd;w%`?kOe|zomS5K%v{fBp!{`WVT@BWFl`ai#LYrfN$&Hvk~QFC2* z^7O=bRbt+KeuudHvS#yfMe~o}zEb~qANuZ@iSoaHQXfC9PCWjP>SV7b@{^A@k!yYK z&65gx;bkd*((v|uPs=^HkB*)1z4hMRZ0{9W_!sY`tX;;)@(wq7@l9<0Uc)giN2>SR z^r+sIT(6*4q_$`~kBpqxBo4RT7kebL%_UZTN#GOQtm?Yu#*CKehS*wh44SZ;XLqvPqV zmDsq{JpbgbPd%ijmm7Z3g#m2sAg38p#dbd0ghX1`#z7139k7({H++&lsPx`eKyiH{ z-d;to_R87yO=f&>GJNmO{LHY9tUai~;!%8UZ<88PS@VZGN#&rP-)+-32gYNK9ZoG8 z3vBK!8hhoQrTsEGJnE_Lt-1z>&GW}?YPeTB_wWuo)<4M~J(^YYjI-Ov^P@i!1va;H zH_i`w8pjoMSmj!Jf1OYcn+wM+Vr<|hx4X+pd&Jz%UP95YVcI)IZI6at+ZFUZ3V&_C zVjU3S)tz;(bWmU1--s%QZf5pc^pxagtg)S%8oNm^Hq%DA2FouO>|zNb)GISmF_gcv z=~oVz;_a=dW@wUW?95J$O@@~nf_X%VRa!-KNQM@7s)T&R%-2^b)v%FXsk5qnExp!G zS)}UV%1#B6X*6VgsoLdD}xfN%R#MNAFQq>^fC>#vL%?rD&Hbdl}cyI+Z9471?aM0 zE`j-aEvy|g##UCjn`1hv+M1h|Oa-c2IYcorlWW!7QVE)CE>e@DrcAv?Pmk&tfa-@Q zg0*$tD$|kk&7woDa?Nj6FuBr^Tw4riCCU^QN_43 zyIv+H)Tpp=i<;EUq!w~Pqt?ln3lWP3q4W8e?S_%e-r`}cnG_agT?P}DSn0TV{!`5+)B+%=`p^P@fvh9{6a1;t%aHLe8{YWgSleN0nltIF{7LIWeVV7Aox<2 zH0Ye{tpa5;g35)U?WQeQC^D$Q5-e1bEq z)36Z&4J2G9voBLhxXosa&nGdX9_O>EpiKuxFT@}%LT9rvhXE#qQru~>5vhe)!fe9$ zB99pj4mvAP76Te9=7KgON*4+-RA(YHB_0C}%oa0VtIa>Vkn)-hu6QZq2SzaYT*z*6 zgh6Ge(Gl!4V1zop`psr<2FwH5@MI-R!d6$TkPSQZNTiUb5j`Bq7I@5H_5wNFXeK)1 zW*Z*Q3qGU4PGy9EK?j8kS;}FukwTUQ$K;>QGA_M=NMw^e7AZLWUe3r+}od#yT zHj^t+5-7y#ih|KyR#!Nar5z?DkPxCSi_M=ZCJC$An<}O#pu=RdLD=L1hSE-pGm_0R zPNUtQm`eb&aNxZgf^jyRBw^bNRlCsvcF-;p9L!`{%nDPPYyvY_NIt{5O(?~uBQ6s} zCIr@PgT1W4yKQzNoaFt89gAjDBm%jaIlx#ED%D}oP*PyMc4r`w2Q?61G@T?N2&X%! z9Sfz>Va(n^X_pNRr{@x+9U)WMRLJQhxeOS<>ZarIuTj8QkzhuM;C4H~rlUAmWYdfn zh6pCjlXe?U$N7NG=%n~m&}nl9c)&Ou{-hAaAiJLvI6vr)6@a)MXHt9!1=jIw0D+wT zL^|rS+P#T628iR)6z4}FJSy-cK-oFaB;=0r@d##x0vs3%c2T?##nBmp5fTKrHFTQu zJ8j@3k|DPPqmps3!%lK>%4Kl`xD?}sI%cIv)Q;2XIBB?y zu$N17gdOp7JnKVIF9RAtAS{yVvA>j}PXRQ< z^I?}A3nbGK!1#GSgxO&%%rSlh2GcQKyWPvAlN4%mg;E(BbKs$PD%ufGc05DD=p5m2 zcsYTgFb5V%#zWwqMK~6e1fzEti~>dw4krQRFxcs#IMxpuh-CQAkibFUfHT1H;Fw$# zn`FEWaH61w!|916xfh=CTmXoN;_(pfz{By5XD%>L6t|;(a6W$2>7xN^M~N`Y`8#Nm z54j*GFe}_~iA@4=XMp7x;3U|=1)QjtPOzMwHoS)^w zgmVV`7xjWBL1ixxj|%ZHff12pG6Gy8V=)TY<7YSu+z2AV(Ox?^QLqEGyF(lsnCW!vn$it(RWCmi_Io4>Fhj@&Z)(<$tZflGo1o8$18u+ z;={)qjOI*_F?#gben9-{Yo_Yavn|Vy&Rm{u{_J519_UuPh5d(1gyO;*+QjbXN7Ufy zGn0+azSx8Q`Q<)){po`;Jox5yEWiI`!zb-Nrz*Vn@g2PT`>$&1Uw(EQy70<%fAiV1 zDkAE>hUD&ia672D)Fm%Gezr$m`N8WqO3y!UKySa+<6e94q-Gzy+&`7sIob|M-?*U2 zJp1w>-1pLXX!Ym6tedaC-s|3c^nM*3?j6+6?LFL%icgo$R+&6|MjY9HeiT#oTu_JVM|)}WV7JJ#^59W*`oigJp6$<{35wIN zjBrPv?8j7H-8b0H;!&%LR^QzS0)7xIj#jB?5&SA|rF(96z*Y0kx zhTd)k)q1=elfU_fI(6`*Nl1GJtvSF1bRw}C=(Ko~=pA*m{o!3!eX-|e{`kWNA?qD> z6z=R*eOk$=nQQDf<0jGd8?p8W?TD=FvOahCa0wm0JnWcj@02|gBVrR*-`}7odwXy2 zyH9RYV_nyv^6{f3m-PCWtI*yq5tCx6CEmDOk7#>)Z_e&M2Cq4QsT@D3AkscLR%*A) zKCM^|#hd%}@QvPnqj30W#WmE`hb}&NZyqoz@4|Mw;L(VrR=&BnLa8qInzDzFYBNJ` ziCl{ZyMk5HH}08lHM4GwSO(8-?JfEgm#+inxMClCYuH^o*iKs|gA?9jyP3r%Mn(~# zy;t)odqwv0@o^az^^Ez}4&LR>fFX;`X3jk^EJrf$9xM{FD<<+^XuzbuR$^4NY-yxDeVZz{O!AC*I1t%FW+t?k?}FDFSk-l z;X1k60dy8f&5#tyZSUk!S-;9xY1iYhN;X9nR%|d7dPwH%w1JEcO#~{f z)i^vZGmyEJrH;-7V4CwD^^g)PZMQSCwpKVut(+zcD@(I(om?}MS#RXA@gb$B zyxmG#M@Mv_YI89LX;jlxq0`TlQtQbzxAJbaSQA*>X(p{Q>2##FSp$sPOcjI&^D&A!O6208^_bF|Axn_&)46!J0L zY(mN8ToN!4<^wqb=s+L=WCVtQjW7|P%TSojg!&Ugf&^g=Bj`9s5ojj?fL!2#j4)76 z1u&b{<&T4;frHHCqvI?^AQ19(b^smvK~Nzv8-$S@NC7yC;=TwQqdW-g1WAGm;gHSg zXH#)d!hus^mH_?so4ud@WcFBtIrn(hdC!P1Kkf4@X@bpEiLgXwU0WPGt1MgAPLbkzxs#GeimND6yDeGX zlsM%qRY4&$K%>7~pG!IE6bhJ!d8!A>2@K?y%X|KpmsisH;mf;s+kd`uXYapv|5|Br z|Mj1D?%eqU{QPP6PWJZ?cmCr}<)Fm<5&r!z@c)huxC8uKQ8h&p1X0lqLpQp%>-KHS zcKUW#SHV;XeYDQjEXVn1G7`{sT*vC;aWK&C8re8(vSz>wo9krO!=|dTh_IPpJ?C=+ zR6d#cnVFh`O+rXg@i?<<_wh9?+qOE}LgAv4s)J<{ek|sbK|m8v_?tpu!q3gIdbXW~ z$W{i4ayHKFWg&VnAr5g{jI5b((c3~ZGgWyz4oML3S7!Y>1XvfsZws|Lnj*u>;MInJ z*lgGP%wWRoP8b~sf$erhySf4ss@ZC91O8uTxxUxOcf#oziVPFVq990`2^Tf3{%?%` zmEmpSSf(n$gbIv-}l{L8_$1kPPUyosw8FOc%*DYIDX(|=5#e#f?_0r6Sk|} zvAw{D^p4x_=^u?3p-@9NEiVjULRdS?$V?Vk4ymwc*n(TLO$AQ~#%|5%xk2D%=0O z9mhb3?ZSki@7Rv#^*f3P6UqX^@Y{erH;kZA2R2+s1yjIiPS$aFY)}lg?$!`XXCZL- zkLKclP$(FC8^Q?&k>@zD;cQ((U?NA;!uBrN{;m0rDZ|sJNL;(k$xx_fSpFb}mFfFI zzazsj0pT;t?vgi%L)QUwy9zd$r`xQwE%cLlJr#}#Y!oBHozV5J8^use-wVLtn1FyZ zMI%^kUGMaxc;NTJd`lDItji1+n%VHyY#mIN5ly!FtvS&U3Uy#p^$iiuIvFt}#VOeq zb;98g3Wd$sH{fuUu#v2cx0-2#MP46|Gd~$4W!umWhDm0j+mU&gP-Mv#E$TSD1qQ|7 zjoMQLUX-x4vk*qlA0~0&dO_r4L)ZukLKwOZmO?RZ5Cyi1uyGVY@=CTaUJT}CrXzUV zv9+MkEc_r%BH#6+5CTFmlF%jyTFSPQ6Qya4E%G`N4;Mu=(WDSO6Pj*?={N~JKNN3#i7l*F#aF&sinqf%>Q zQ#;;hHiZz;aOmkg4TZAJN|k~;p{u5w&Syzxz9G=8fLNkZX^Gg3elnYnAmA_wJBVfk zk!w}TO&+$Bs@w5wfeRg`ktH!Sk9e|rRA*H%2r*quV+fcI`wG)$k@0+pIPJZu))JK0U<^wCzC+{7Ig)R;smx?I;?S72q!&W&SJ1}+(Q(_ zVmqiZTE|p1J2_s?he4E#hqg$OjKC2`#R{!rv*N{Sk%VC~P8_L?t#wo^Q(3^?V6i$* zv8Ap;lQhqhwu78UhYz zdXv>^8i(hXW5D?x4n_-&_x;z{cJX0_3S6L0;rT%DnI#0sEXfm_}l4N+M zaj;+BhOm?68VZflY1)^l7R__SVd0RJA)wlgkJq@EWIFcMHqnLDk$07{-&?u*(qy z!_(Emvm*wZ)}O4;Ptqu!%v0;5JuS60Fx45aFSa(ad7?@4O!fJb!!~R+S+z&&izSSk zE=G<3#|zKYo^*Bp zrY=dH;ri-q8ppHM$w0;91fuZhSzR;@2^sNv12zPUHL6J?L=^U()Q|yheEQ&Yb3Pr! zv(x1etPSJ#cOO^5L_v#In~PZ-Pft%%qurp8(As~vS7LQTiTRvoSwfti=-AQ$n4S1H+wat zB8oQ0SJ&%F0(KtDEfOi*(SvXHs)8y|w4TDaNjy2fJ|8M1DJVi^=kE_I2&}ComoLw! z*e(+o2Ugzs`-3tbN2%%M_4y>8o?l<33fbaRRNnd94`p6KZLq7Gt64I;`0+)ml5n!Z zHNX0<#3>?4YU$PM&3rVwczr$AT1})0)d%;#J)jjtlIrlq+s*NKcJ=mp-XRHIM%C}{ zeN$-596`$Q=Jm_fc>eO;&2fh$Ia#cJfB);Jw8XUt6mM>>m!rjtcW;*+s>Nwa^@sak zKBWY2&kc`;E`j@Qy?7eRc0)lcSqu!a05QYMIQg-u?2zM--zQt;hGj*s0M> zaSQ=Neg%{=|<7vC1h z)ht}ky*f=jd-UqvtCKF$ZQpL~J$PJ`Q2nsj zau>%F&lkWRGmJ@a;oF5SY?F+n=sS zJvTjn|7Kz%As9KR_}w!SX>6fL>EmV4?Rgg;ZjN1EjgzQTetb~lRH9I7=+iNL=C#jX zzdUn!tskalr9$wwQF;D!U!Bg<4k=HsZq^2?I`dPjRoZ8~9$$Y}wT7caYs}d8{_};1)sd|H$(g z1Uo~X2fBczep7{sx=N~`&%-Mhc;F*8)Oe~Ct z|99${XN151`TH68`x*HE?F{gOz@PoV{{)`n;BP??MZO}x(|>g#JK4@n)XGPzm-?68 zgXh)T>4R^_^$$XF^QS`G=MC+}^?bXf;uit+8=k;@y z-_AJyMmYUnS0e2f%fdelcE8kn6uA2V_HONGoyH3?cKQAN%AX!ZKk2O?pKX-3kUpzzY+(3wbSgsvYh>&E}}mj ze}`3JWi|7CacPpSO;*Z)QO%X#PX zjXxv$A7owcbuRYf(#^>1VgKJf!XK-jC1XGKrRQJ0S&jes``y1h6%K-t*)RRGMyYhn z_P<8fAH4dabpCSm*PU@PDfzi#HNPmcfKPlfTvXe9J2H$uNb)B{`J8;-rwOnE+!yezl)JF~67*p79G z%keLKF7!(5j;{ai$M3#N>+@^N?DKESrQSGm|C>cgxrArmppuvFd|*8JVE1dzy0P+X z?%K~sQ^E(9`)_x(JC!JVHEX;Qz2E8Gb;r}S67_ShQdgoZ@zM8s-~OI5=&Z(H{)I~5 zb7Dt*aR^Q&#%8(q++wZ z@~sal6?8=mJtv8wqx<6z4rd=%-lW%_TX_80%|Yc`^NUxwkYObT3mVd zihwA?&F_A#_wXP`;ny}UUaL{j;kGw#NJeN~j9lh)Ypb*W@u0qg--ujUSb908;* zi6E5(*A%RV)TyJQkmH!VtjN=b(5^8GlB6;@k)S$_=19{#3a8^aw!|5%w`tfmB{1<~ zG0Cf}+iFZb!Kfl+CW4hHM>WQ+Mq8lSToy|pqEKtwow25f`4SpKaMWlRgMrhjl^G;l z%Eeew8nop`$4>i7VCm)aeZbT}kJ20gNib4K~L{$0!S> zKoQBvqBv|frY5K3*>XI^R(Q|yHXDvjkyJ8M%+Q+D=(_!mBr*lOkSJ4(<648Z)ez81 zE{Wz*Rk4Q+udj(hHiyNFOj+;P-M&$;VMHlf!gGSAj(S$l<`q1FW-~0swwm75(Od?l z5=p8=)g))qXm}heWb$a7kQuXW^#+TTuxGjoSw-R{q@;*i&+`VlD5FI@k!LDOqt+fdZjGdf6jI6yn$~H#eOHvqSsWff z2~DTob1j>}%b9!`p;X1|IbK7QsB8(zPz>WV+(ARLdAyQI5m-g@XRPjtypYS4Qn7xDiza=Ab6fL zs4E6lATk*eV{F46I5rHJhW_LTNwB+4yDe*C9xWxy6rnq{LATaWNw$>05JZxco>%YJ z1O?CGsa&-pG|cA6u`G%rQ?Te&*a985(-fs@0Yx$dQ?*^E@6~LfT*;>~q^xRIujzF( zfkkpiro=FY=XQIRtq=r~ETO2VoBd9sV{k$Vc2vH~D4k|^ zQaX@`hbxLU*qqKghQ(x%R3ulRETg{JGHMK745iQ%VL5~ObhpRz#KuNwJ(Vka{np_@ z$CJrQG>GMLVy!Xm48}Z8#aAQIVzt^nobKJ-^yFMN@YY5uMCi@!&FOK65%5SnUJ$C< z&a}7PH`r)6dSMAIvfl9I*6d`Puawr;me(9#1YA99NijB z$3i(3$b=%QWlZLqQ&SQn*8(fcnTkCf96Z?`43% zlR{WVn~r+pmdWLFspa(?LK&Uy`Div$c{-N}NAWV%=y|=CqvJ?99xhdQtF^t?AM`{F zi3e6!3KZpTjyK1h7GI+Bp&UlZT6@~C>d>A}rDC`u*JoRs!-m7>kZd5D#RL&{SiNNl zG>T$5TvGIQw^LUXHj^pD(zh-r<%kS|pqUKC3TDG=D2jp=%Ec1F)Ef2(9-vjr z=~yn6q(sGS!*v=LE^NtVT_d zXo4(ZRE5_yt8Q94$5L3ij8_HGv@O?E=^EV5kXe?(NwOk{idBQ| zhyq1caOkdNXqKbtGAu7fR?gZ@zq_zo-~yJFYdW;Uc4R8h4#R=xLw5uL27?oRy8-Pg zY*%<3ctAz9ZD{9txI46SlIgcA5(Dip9Jt=H4O8JcXfIcIL4l{)nj*k(F_LCPO|vbd zCUYza?G$V;m^@pP1*$?odsWs92UbUB8JJFj5=6~5ElY*Oh9K|?!zu=`tznz5D zhvl+NS>#D*r`V_Mn)ajBm%!y)mMp;PgFj|@tyXhwXouBBNs@WG`j#ZHIIKRr%Z6pv zp`E9oy+SgITC2nLqELl)jN+l)s$0-rsbHlFRaG>zVOyri!)7hRW)%z@+7*SXRB&i# zRlgnHMcB+(8TU6UY<63fIg-F(cd#m06T1eRnR?nT)y_7v2#-UHB*ke4ybLviXQ&bi z_ZKC26`YzV&=|a1OjWc@r%}@shAJ0Og5VUR(Qq0DEIx)JC0MOm&4HImWmy_6lNDal z9NV-t9wr|L{2mTqB+@y(K?R7Q3Qe%%PcR$ zt5Ac-S1Ke{;YHPi*;6&4QpQRpoEBwxb1hT%_ddL8RZdp4nkvcyLsh_#a;gTK!B8ck zN`mRCRC#DOby*QPwpy(+ybQ-G>|Cx&Q8W$Bx~{|1BmsUwGc+ekaE2lYaLfV#Ajq1c z!1+8|rNPYkw^QLq5=5Sbb`C-zNrD#zzyg-x1YUw>MLD}a!!U4yq`>|B69kS0G(nVQ zSrSFKIrN4FYylhvoDaR@sx;itKS2~FxSfA$&8@u0G|9lu4JkK91bl_>b|9pS!XG1+}hu-_W z^?MJK_4IsrzJI+xb#T4k4od;|gAV$~es}$q@=x~%e>QXeF*H9t{=w+{)6YitbaLQs z{_y;%`Ma0H>Hpu$&yM}M^?#mT?oZ_pEKRSjt;4hvu0@j0b=)~V}CHv z?DzfbayW$BiT>&S#`xj+PcP@;@a+7vcK@9|yZo%LfCxT4-M`!4zTFRx{r0Cinvwd*3Qa`x-hui3E zCeOAJw4S|EXYa(*R}Ow5iE#I`_NV*CpBeuUUNLxM!Fs{z4D<9AefkRX{woX51B>As zN7%zOSSv7onyx_@!m%`1V=yUT0l>QYuP6-`0ou3aK0d`U~M5Rf!kAb73?A0 z4eZ&|mjVU{2IuUs%1{uK!m)0^A2=VbXZ-G|nx-lum~IGZ1u*QcW7bp%icrWAz;o2x zI>cF0l_JY!ii054uKA7vFP2c8g^<;2w;e;KOZjXrk1^o4J%|DY3Wb=M)*JPP+t8>A znvEn&5VAT=ukCpj1i@UX1Stx{S^zxNObsm|EQ`slt>K_4Q1N7BEtpcfM>~U&XXB-O zEK@L=24@Zp6}%g(8)hb$&d^1IZ|}{H`bIIDNF$3#Z@y{k#q^C;DpOQX?|=WV<+pI+ zMr!?f2XUH;aBWnbcBuDme!tGEEclG`1zmxAD%sb!I=CXfAyFDWruz43(vhC{Ia(5{yn*Re&fybtaJPJ zfBfT9_E%o|=fCiB*f8Gx>hGMazxgs+v}gDK@6)?!~JwCh+Fg*8TnFn_mnNllI|9-+QlbpZ_19 z`In2RAiw+PzyDsJ4=yaCRta}@C)BkUmV>F*&e7@Pj~6m}lw6ySI0^IE8cic1!8FL*(V>7K$moHrN>*&s*z3 z)tw2vY>*qd*Iv0+K6&_H{IzfHx5JCCTv#o;QBt36RT3+P*1o$rGY9Qj=reDx;1x>Z z2gZDhDpybMoYW8{8NT@XmtM>nA3feWxcyE?4y>fZsv(AB9HXr);m-cyS10|3F{GBh z93Ut;f}ptIwBYxj{Qf}=Ew7w=^Rq8sruW`EarU-%-9iRY)p}%NJjMVL98rGjrsA%dMu=`uygR6^<;#mcRIR zda(WEq(9WWmY&MG%`vrl<-*nL#cXx*?tl1$$CgS3)?R&k0jbT88G>NtQXbnpdi?Q3 zO(i1XOV35Q;m+9QWWsjJtb6b7F1;Ff^WwsKgxY=YPaZlVg>M8Gb9(#1Nw=6z2Z9$O z;^fZ5uZ|rODXy)o3tqRU8(1!dP-uPr=vLQ2GZ!x{MJe^@{-cS+#Wyalp+bN5)w_Kz zoxFZyA+I%d_iuSDmM3EfUGF<>kqQTpvREA)98F~|7Q7mysAl)ht)ZUIFD(U&7EJEl zDN_o?7sF+_@9j+LbgGoCU~;!VsaZsPV}qg%XZxt@;H9-2k&@%gk4|PBy0&(86&L%x zql1Z&F2u4Ks^LwVJsnL1OGs5|&)RK?%ZJh>qt=;hjd&s!TwKBB{@~zb>XdT9K(u5v z$Nfo*Ed*1EBI{1Oea9qXi5$mSy>VX_kmTALF0{Mz{k~bqY;1&!ZhJP_>2tZ&$ZDK0 zHv3yWPe=onf(eb@*tDuxG*BW9qc>?;B$;; zkLH^_+dxy1JO#MY$dy?X31>;8-5$4H8c8QId9^hicRNx!6pAKDWxBQ1ca%bWJyD|F z{@$RjQpj33T~+OIzbjVDxm;SXdi_pYC`Ti)1R+nhW_?F3#DnP)T^}Fx8%ia!5{eUo zyE&QEWU7#kk%HUo^mQ(eWRn=%?GCzdK{}E~>E`6-w5=2Ah1D=B)b|he>METItpLQ+ z8tr(s3YrP05dhTstvaMcMZ9cyvu<6da_|IPXut(cjf@AEvxMH+Jf1WeG_f3rb4F{r zHBmSeNhfK!1pul{C(~)PDi0@pgbp^Dnx-QTGTrBpPCRO{X0 zv}K@$bUKe3^-j|Hg7CgGa(E3n{8T+&!5#$ZT*W5aVit z@p!1vS)>G}sNb|Dx)cT&w$|C*-O{M!^0ljJ#@jl5bTp{u*RL%E2-zEN&nyn$S(MY8 z4bPRaNH|&M0N5V29j=s0)0zwKS3^d^Hx^@5eYAgkYu_b;3s=`txM;K{6RS!RvS!!o zwxSWSrNssJvr)^gO@KXq$%Do`dclbOjVs` z(^CbOO)lODR$;;?gJxGFlW=v{uvCsKL~g7EtFwdCqr=_47+gGmH9<*&uJ!r?RpyM* zw9^DfUs$=kny&SSldh{fTp?SiO(w2Z&1W`lTwf`5AKbljI3MZA^1_uMBg>FJ*A0^4 z?aBV!lZ#j}xUi7s`;&fKf$)GtX=87{Z&0bVjcW_5Y5U}>w-2WP^=E>?C~3+JidF@h zRP4#=$y6_=k<`k1f~}9+2Ad~%j*)vO?;bR$z~u{<&o8C4J0CpS?E`F6%%%~(;ozx2 z0>eqEz4_qLwp~i5kyxa}Hu?=N7YY%)>~1~$;8C9opF4N)+Dcm7dT?{>$UMLtf?#zU zRA})=w1A8C>B+-gi%23B66avA=-9^P>j_qAAHMs|_vd2#!kbra1TwbfBxAQVwAc0=+o~!_Q=(1VFV{c zXR}=i-&je@&FR7Mll$HL!nuW1fl=(%#KVG%8Edk4^5EpKk$(N>f8n(>V{bqF^!;5q zyAmKF|Ft@OC35}zQc3G>9vnY9HZser2@)VK$uybJjkR)r=hnjqr!zhH%4dJ$2Etj> zqX$QIIuSvPM!o5F>y_1WZ!Z+(<`AB;XJE+;BSVM?0cL9X@>->Lc>B@ao10qd!i%qm za8`2%lb(!aGAs}p5U$yH;Of;N4w0bK9(w|cRh^Dkml*;LU%MLMdh^}=*`O_?R~BNN zW5XYZF9ZV#t~KblyFHgm#uB(#1E7`_$b7D1k9TJyo5K>T*Vaq+=6rkXiCBDXBO&zW zTce&%C4<2jrU2ejH^g!wgR@3&)Yqs&CKfJmt=ZwhKttlewT+xMzIn9U6>>nUhD+AY z(c#47^U**IIzHR-YHT^3L>L3&q^?xTM58gn9PIDUol0yy5X^G@qgyw}W-++9983$a zhMOIgOeWGL#^{fF28U--X;`-2XlQfAY$l6~-e@v#xzxs5BuzP+#|JZy&#tcrGlVgm zO`AHEjm1ioTpv$8wNgs?k9K>#hEPn!(g;wr+ta>5gqGH0sL$?fg! zp~GSESegK0wbxduVlJDfHLu%k=~OxazFg~VZuKoTy}lI6(e}=R+dCegUR+qqG0x`x zPD@7P8-YAni|JNZ!?MYAiEs9Y9fwP-E=3WcdwB17(;|YGuB`e8cW(ByQsDaaSXuAx z-P~ylSRx!NidMVZwV6U9gV449eA+Xa#PVvqtPBoMc3Wb0xI1_qu#~>B^~`d~gAyL>(t zOJjV!*Kg_qo(BTd?has%bD@omOtrava%-o}B$lo$1W9-McgL#wAM#2e1Xl@_vb=k!7;!3or&F($91CNfZu5F~4#&i>Q zGJyenUF%Orb~(1T8c0`+>CHR)%}NqFj_}^>U}_;NS8s$6Y4q@;_ij3crAwEW!iceX zxC4HKwoK@qGw)FI`%W zmN;)d>q*5_k*T%2b@ZxWBuz-Kqv&f8j!ug>^VS=yK8P8%4E0-`*PP#jDSM=_R50o&UcP(A8j_d=-Z$F z&1*$>_wIuS$9*ZWxR!^^Qc(pm7v4w;!_&Kmn{6e(dhv3EZj6UbTY>7Bh%Q$k_4=fu{irB=(C@J6`OK7H@K z(}95p&%N;4TE&@ej`}T2BoG<^>$*_R$3lUPtUNwGoYW10K(d8ueK@qqTq3j{NOHqF z?>^aYDMWnf(v39dv>Jf2iUPx0W%zXZzOU``cP_ zaWRyoB&R>_YQ>E}me$?w=Jv=YBWvLzr`yeb$AEY~Qj)uyJNw&hHgf6QLX5V@2d9TU zF}1Q9E%EMPHtT6vWIa}_>doP(W6%Xa;62%D(mSIOaMXnuAS$A_wKHu&oVvUm#?-;V&E391Cf3$s znB0J~Y8+@miq)Fe>$nn;OJzzRGa2_?0gZ=Z1=ig<+#gvK?2h$xwZ3(@H?kPtm|+lM zk9#)kz8q4Kf!VO-3IaR?WLc9@6Z##FWMFKwooRzFM!?Qgj6N9Nx`3sk2?QS3ZNbIG zLaCyFro~k$pk%N45TMkvRE7uxEZ3}hJDvgE)OI)fpA3qdd1 z7LTUmDNJmPwr5=xi!MX@3NGpNcx>R&v(@q@vvE_zv#Bh`g9G$T9tT3FszSdVv7Ct| z5Y8UL*dW*qtgNSLd$hYZt+V+^Ad;^_(m85r6p-B*qq@zy&Xth@#%hgTA0mKkESe#; z?rdk%6Y_!OwK!1&AF{d4;~7JsD;RE*`Y>N+uivkJOnT><)B1 zva%8`!aJ}#>nM0K9Ls?d8Vp(nQ_2@`)_=0WVfkDMG&_S)&*lozU?k7FqaE1mbb4bg zl;`V{o$a9o{vwiwV7WK&jA|*HgHXBIZQBBtj%UgW$W10qA-A!(3W@C2&C|WEkXgO4 z94D>O4qy`1Tr`#??LP3+v?ZobYMM(>BDW`A{O9IDb|}G z?t%I&x3RoY5Zo>dRI21NCCH8^U9*Zrz!Q*-o#TUPQ!GVR*E2l4>wSp0!pkd3#@jnN z+VW)BCyQZRZM0i%O#$}1YIL9z)j}d1h#*pL^We7+E+?_I908Q?W}6i%+4y3dcIWTi z8(4B7bp28=qfF;RR{(JnE;je>oVF{G%Wqx|;P%#|caKdrA6n0#oITy?aA+bF%TtWn zJ=p4+GVtJNJXWXzVpTKDR#OGotmE1;9!tbGLPT@#_;_x>^sNU<*5qKjLx)z@*5lRw z%?A%=YBmVgxU9AMJrfUy^NiMo;mn)(+Kr7Q%GaAt19mz_8_iCg&X+}c^-=&6`2y}f z`27z-Iph{!`EpRdb$@f%YoX8m;&onl#RIUg|zkiBhu>D6LyOQ*VbcB@w|5$$IFQnGhwhjTk$d&0l` zrN#K_3#$+Q`oI3}W>Zc6=6~~J*SveP+QCP+g^SDm_dl$!$EfUY{==W;KKaY<9^U=R zPWqob^JcYUv7;vsdx5u;S{+>>`ZFt$?c90L$dnt6-1A?^cPC;}IQ{UL$~AAz62J6o zH?rB4)ZU-{=Z{33EieA^bHwonGaT2{^cT;2-~CrdR7GK~|I9B?pZtffX!S{b^(TJp zYUiVq+W4c7+LyiSzoI?-XeJGA-xOZ_}!J;IEUpUY1-|y6RpBz!Iy^)cnXi&TNl|BG?b9?pGpwy8Pur02dxYU$nszM+B>U7 zoR1b8`#TONH#`+93YLO|GoZtvq~7kPU1dcky%r`EkmR`2sY{o6kP^y|pvz8(3^3ng>B6 zKzObQWIhO`cvbi5V35iHBLRXH9`xd%0s-z;snuPb#fzvjY9XR_UQB~XyXsf7vDh)2UJ)L%H)nXE!2C~0F+g5=8D3ZMH)8rz6 zKr}C@I!I$c4nYB{tLUa_C_GJ;v2smoLGf>f;tI~NTLjK9L2P4Qx#}`L^4cm4P;SIFKO0Ih+{Jdc>nI8W3vdvl@KuX zMm@k@@;MM^m`!*DEGR(&fn*v0cYy?m<`tu6=(^0)6_Tp*5~zJF(9V_N;k@1ic`K|$ zE?cA(@ba*BXf6-=@|pi4^65M&S`c^Cd`F1VfT}>~P{qId_r_N*E46vi<_GKKkd{`q{+L0xUeNP_>L8WmpJ5W|Tpmn!{oGTo-m6iqdMM z(`#8=F&+$OS-U@-bZRUtN|8OACAM75WlF3CxIi6t5QTwwMewOi_={yhlXSL1Y&n-m z0F>&3R}cU}gbI!tw19y4g*T!oBuhJ!woYZDF$m8fPywL`h;EeTcxwP+zjOk`k)jLw zUYVsyn0pa)f{=aCXd#=<;7WIEYv9>xCAkqPixLZB8HvUydpz+BRb?{a1Z{%&raLgv z;6@(SPMzMn*{T+CWcBTfId=#u+r5KkB}3G7&?3{2s%Mn>@qDti+sa>jVXdImazR3!?t8cAPAhK$le)6!6BQza+`*LZp zT^FRmmX;2p-cUtRwaF!-mEKlUs2VnU{Zh&WP;`3#z8gNjkS}hmmc|eFbV}XYl5z#T z!>wOfAwUVE9DI1E$$}Ps{oD<*X;KyUXkSiel(rCE$GV#aO0*8zXeg(f=z6f)^#s~I zy+7bErW$$eg@vluY|h^QbdL$gNNoLbNS`&(lrZ0K@X}=8*m&h4!V-k_@Y@f}bR?g= z{6?_(<`gv3xvxDuBGguL8~X<{z|i$p|GpZy_jnBEp71Vov8rODt6_yMM@W{ z_Q|_5Dx4B!Bv$So4~S4&YY1g_aL~+Nxt4)#+nk>AW}r{ zbVRHyCIFsD4!`wVw>wTt55MwKSaUc++T5{8(w>;P)hMr&3*7vjJt0$6w&z%99vQ0Y(B(PNrr!`zNMyE87vmK zPcWkd2R@=5j8*s2f78}OtmF~b2`%`_#y-t54giB48Z{R z#KRNFD##3dYe}L-l!7_%%??>YP?!%eY$`{>bg(M;YEZd?BOrO0Z5zZ01cs3uJPj0s zFyFq-0*7lDFiV{Oh_eG#^2LGvWPQnR@VSuXf&&C! z1F~7@5qO9)!3f|k;0b5|K{5x~wn*gC z09RNY-;1N5Fr+kZID}*|8;z#RfWwag7a$6mY>Ac(2ZjWyUSGrHYga%Q2TCxAel)|> zMR4^w1Tgv5bT$Mk8oWfNqIafaPdQ8It59dsYiM9xXpq%uszBtkknj%X0O@F%dSA1n8f+~;Nf`nO1`nlGUJok`pGMDH1~t&Mhky8e>!mNQi`2E$^pl6F zHxj-3ZppcMlKSue=}ToXTmPfK{xf$qh~h8*?DhKNagv4JyfjW_?7_06w$(Aw!u z`r4{dXWssN<>)@WGWg`N4T*|Y{H0&59PJSD2jBm=gAjc6)qnI^YO7AnfB#>9P<(Zn zB%gnle)pSWRGr^$UApMLGko>ggl#8RJOBFs`6PB7#lHB=KZ{R4yxF_|d*78`y2|OX zmv1nmDUlz3=UcU8MXD^mcmQD4UaYE_x#+)X8|`qi^g&ph7J@`!AXy*( z@q2P0Nix9~*7}dyEAjr#K{nEO@}&I5>#`GjCA0gj_th-lRbTm~fOpuGdPk2s8w+Ti zy}Hh|J5Z)Hxm_faQ1sB(i+!OuWi(i>*4CnBl@M6vW;yC+yBFF zRlo3hhKRhjzWIlLSX-f{t<~qlohSRbRd()OzpUK8tz`?0Q#!Y5y>m;kCQ~zVWho=1 z)|t^!$2_{TYp27p$inBZHt(J^hVR^M1z!qk&Gg&E{y}viH+g)ANjV4R7k=WBy6Mnc z-~WrR2A^N8#Gd_^iP_gq_2!e`*$-Yt8+Q}g|Rp``}A8! zqb)oC=5rU~B%bel@Zl!s?DolvudbC!*RNO~e7bFI-JHt0^WJ}Nf2%KtUi{n_0`~UJ#~(jxl1O+x zj)FBQCW!9deE#Sw{p`6fza1*%nZ5URsGQJ*a9-(nncw)0M9ph%z5Dgs!ugkiB%0#( z?#;wZL2jso&~1^yjSL0GqB|SQC{8m_v{f$QXj!O_X8RL15{M;JmB#k*1blp%K=|q1 z<9cE7Ml6+J_CJ2q=Yb@O2Q$uYkHr`f!tq*v)5--?NEY?c!iGR=5W#5*)P973t=il@ zJnZpkHnf@%bg;h?lq0Z`*HN%yu~4QfoD1xL;Fm{0V2#C>VnS=Mb+~0yiN)oD;&$gV zvlt77ih6%@Z^zDsV)0b9y}3226+wSoVmtuqsu;K%L2C9Cs7ix-)uCPt4~8+pfU7$? zy1tYk1!uND(5Or#4RQ5otH~Dg$rNP(_3jB3nk?c16wyIip@WI4859^e5(v*`6X4D$ zLP4B1Xy{BTQm9I1e^eJM`FM^IRVY0ZS#T#j-hw_0{37K-Pg z>Tuj|vavP5R-Ng*@34uL2pG-rd{6_ZFHTBYz1I*a(9g@ZAxmr#kkDFd*jAZRB3uyN z&SYqidC-C=9WbamaO_D$0?c*jkN`*LD`vaZbVPz+Dv&|Q;6|aqq$Y48gJK{+cOgTd zNu(sWUb|(2N6uzxtJP{ZD#U^*t`1ma6Y`x|~gkrmO2>A;rUWFQ> zhEAuW8JuryZGneK2BHXSPiB1^pfvz-Bq;Jwp(X^c0%a@9JPR^L5vn9;j_2eW6wE*h zSE?{FpxKU0Kp_&rT7y1hJb1nYUfXsRkU@if-_ZPCKw*GrItt^9{`GpZ-I5_aOXD?w z?*@8)eKnjF2K&3ydLRki1f+HX zSa2x;Yi6`3n{BA6i>FDmHyXEvLK?VJrP=c8umLa}oTZ_GRvi@M5CPDp*-s+aO0YbXeh|tr zFm4jT8!@TXP}RBw!a{u$@J_piTz)fZ3`WDrHsDYfQc&5!wdY;6!gsrTGDeo8p;G7M zpbceHY;+Cp4OBE+;qU^p4YD#4Ev#HzBzGSjwe7YNx^RPZOo7sd9#4Y}tR@2qV1=u* zNBfSb$%S}c8g`giq)eB{)}s#()c9)P#)WnB-A_*1nvAc!eVv;P1zc(w6loow*r~;6 zdVQtPdvIqc2^K6N*=|$e@UrYV#o-ics+C zINSRk5zSRF1XsbVR;spFw;WH3F9%QvNQXOHLg+@4S2S<$v|qe_H4FRHyLHEkFGQ-c zplv-lq_15_Lj0=iKAK`HF;Qok+H}AM7E!0=x|1=t_U82x5GO|u_r&0}5Ck*sXdq<* z8BTGxA3o?77cW6IUcT}0@lfV#1|Clf4K5O-2SZD5ZTCvouAwynV>){+sEwZNxD+Yi zH(t3^9-rPixp(SB-n3*-b_UF~S676|&3jM2ddy$^+?STKK&sw4Zc#w= z+kjlLxmDOulf#3(nOj`CyprRc&Jc2sB3gx-x}HtNSC%71u6^?4R#znQ(e*%1bWKrf z^(>B6YkWR|YK}h>b142LA3|CG!|G*;Ji85-UebmnJX4i zsA>~g9zY2XG9D}$15Uo~IS_{ufUp1yrC_mOB*!+UySpQ;6br`-RRFL(l>+S&E16KV zQZ1Jmkhn`=`vu8xAqk?P<{7vd8)K(P&>UK2^Ci@=?9n|?}zk&K{%JQ}`L z0p$mvVP|P5)dDyY@;xYev%B4f!4?y-OvM~bhfN@wqduk5^(+Nk2v|4Ug|Z<6!>a%W z)|4s%lqVFTL2iLS*-*VV?10P;*Z?3vw#F`#35C*CcQ^)NNj?ERayr0Z(S>xO0;nY9 zRY2Z@%twP91k~C*SX@Z>0BWQpw?AwuKE{a&P9NxHx|l1FaE%B2E{c{J8M2-lsJ742 zuQR*|LK_26D#+Oc!$(dzEDOw<*672$mJ2zIH(?z$s+iA%4~CUi>2evWFl&D1OF-rY zGpJC&1D0hExJ8{zfoeo(On|AUGN7E4n&VMZhEmcDAvYl`P(a2~0EEuZ8bSH)OUnUC z2FMSfFUY}2BwwOcKkX8*d>-RW&tH{-zYokd0Ak=f5zzY8peD`FjeM~^;GBRF+Kvgy zoDU_}Tu}9q#e9(lv=nkKG#U4q;6dMm8O*@5O+Rl0m2FjmawJF^0nvpS^cMu>>QZBK~txJ=mWUUbyR3V*WJ6Ib)M2K=8KJW| z?6zz8>h)-~IT{W-MsanuptgG*&me=>L)G@yY`*DYE0@^*^-C*YG&{E+&J}y=#Dna%s~kqB(zjcXaeWW~|(L0^Z09g5@>P}>2A)#z;=9rdfxjd&hGSqt>SRBbe$ z091~xy!yrlU7zgVKHXA4$ctAh0NG0vM%MrVu}p~YfVKy`#^+WBsT$61JDIRXb+eS0W?`LM5y=s9z<8*cOZ#^iqay+oWU(%oFnlPs2QLVlgz|2 zl-b{$cv3069!5d#wb{3;g(PqjR^2y9!1D0A17BPKF)KjLXQrR3O11~WA0WJw2y1ow zZCfmZ*#tk^1jmNwk&0wPB`W}ZKr!)9OXCw)fZfPGng$phKw6-?^(`C=W(_onz{3EX z4@poBWM?T9Hchwbd$?R#vH_a{KLHt*0R=ZczQ_Xa(FBn|Dpdpue>Suza2+|WG2H?w zVKNNvv$M6;)A3j^3Z{5C?wV{72o?aR06Bu%M^V>(^a=`hM6+J6fjFt;OBH-A30Clp z?$a)1K~@4jxoJrZ;iF!_BmoNLyB*+=Ao~KV=`{=<^dKd`n|f{dFbv2WS$8>yu{#qw29kc{dAxb!TkLJ|c# z&4=`0fk843Ut0mieI3@9#K4U}fj@*dB~YXS?*s`PgaMQ}*qXwgih*E5ZBIsk%Vm;z z3W6?>bO3*c`h*$?S;3i75EDWDHVgEeKQbRag_x?{X=qFlzEcB|m39NT%`*q>yD650 zLT6F00i}56K%wBz_k_S!ah-|sWl6t76c13?}FwFs2dnt{_s)3I=Zux7g>TcCX?` z$fH<^lpKpgaUN>-t-2%Rqe<{T7R1Fe4oV)V&4Z6mAUPZ=5w<36F|%}SHN$y3rw8pS zEO8oFdou_ra`5dE8mb!_Y^jK07+aqVEv5{gwaK7T-GL;l4tOvlfRZIyR^3LU-LdFQ zqTr+1jZQ;>DrJD-p^O^-5&>eifn_~Y^<{xL71YLb&sX)P0t<^NvA+#MV2g@}vaF^- zkvF{IxL;ymYg~5m@;U*6uLuRr?pQZ#&KDfohIS3R}tJhX?qBow7I~rAj?*Twn zqJU?TMWH^}+Man#^u~=qn$Si^N7K5>fz&F6L69eaUfqxt)6zJoO(e1q&;h+V*xBt# zrBpl)urdHI@YMo%pCO=xk`7=_R1gJ1Opd{;3NMSs`w_0xf-k=`sOZAwg}5-ibN`?v zbV@IdhZCoaOmr_t zLd{EaIDnK6qUnlg!pABEu)FXX4oG`|&_6TQ;DzAZ6u>8gF$KONjfu_i=D=oi(Fj=1 zp1&Gs8or$aj;N_IK&%4=_ms$j>Gu5xa5z504v8+~b6Y%!IeQiZEJ~IEgEw+GBo3~m z)){~>sg%hANAI;jhzBzZ77Jk2v)sYw%Kc(l_(X>bpOEk^EUN*9rE}o5!Oz$YTY-EN zGA-a@AiDqwicj6^KIaC$9Jsy;jsv^bXnQpt*c@2D*3h4Xw7--HEK{L3(9Li-p*!0fX|$7 zj1U40-ZF{fGxJO5dEV+P2`A%o5-ZZ}zTLIFwRCmm@o~j@AWed(E1_D_I!!{*FP|up zV1Di$SjkB6*Vkxx6v+K?rT&Cg9dr^|8rR?-%&u2lwtd^{QFuUmuj}(c&%zM;;4Efm z$5c3Q8QBZ&=M&0NrnG}#J(r{lkUiR3oG-CB*0dm;dJl9b`vuo@Nszj<_5?e3cfTb6 zjBL)iq)S}OG1I#n`febwN26{g%-GH2$9rluDWDl^jg{G#*r%KOyX!1uBpE%}^1g9| zi*LXbBSH@WX%#|T+an206{fBNwtTj{=admS%>8lH$+{iR_|Aui{bR~`7MBxS(TuNX zela^epgwqF0mKcbWIwz(g0P>d0PRB$u0-2N1xJFGI(B$Dpy!448%#Agq0tNW71Er{ z-%|rYbV!SjqZy&;`@EVu)isAf`oUQk~&*-;GJ614z0T=(fmx_ zHjW#%4u|xuEldaxbm4Ft=#@n;pLg>SdUkxY-`DRUWTe>U#fx1u=k~+H^&}k~=(WKq zYJYGxT|RugzoM{*ihkqj6$h+zkD+_Z>z+R0!~50cDM&#dBMuS?v5nnn!g4VrKhnqI z<14;9d9z0=Aa=66n$PidAu1hJ4sl&*1mz`gFAHGX$Nk+`)c+7FP+a-!dC%kzM)v?m z_Lwy7hleZha;zO1lZZWE(5T7t=RV%nlJXo6riXJH!pto1;v&t*-vFASt|qn64;1HK zdL15TmG&g|cDcKT*hnWH$CyM3g%F&Jejqvaa_9Np+5OjVpH~+YS-t4-0PYW6fQY3@ zUiZ^Jg?o8nBr?hi(aNLA-S7YTopyrHfB0#4d5^M$i zkCw<{FgX1Lu%`<&5RY`1k|TzHzMTyZdp%T-f~%3;P^Q#gU7QV|1h^n>vv)$c3zP)W zoh%QDPE#X^!#W6qrey2S zhxp)djWCDw_A8xi@Z3m+K0IiouK55fh(_^x7?P$e6DVyTgCSfU5DQQm;UPSlM^`Fh zIC@r55_PZ5Ilw`nF2Z-3<+4EuyZgEGk{*a7Ip-)VaEa@(5V4;PzG+Wv%!fRqUgekyA)$^RpgCZCr3lc3X!Ky zNt!}fNkAx@J{R_-F_Iu>LO#saN^FDZ2G{3+wa+jc*cF&fom?s%xIqF9L1`6r!ZHvF z3iZe&5}j~L21GpIpm6bo>a!~foiSgwI|5GLFB1BVG|oqVsnlZ3}QBj*5?VBxbsP{K>fX?5-SSg z>6ApZh-@c}>eE~e9=oR7L=R(^x}xC#b0^gwKe-XiFQIle6MF@N^l(BvG*%_ zzR?nnuxv(P*gu`)4m=VC{PO(O@zs|<{(Z}{&=#S*BBZln$-LwT1}#_SnKh1}jz)a= z&fAA1?zkYtRfXTbewgFxym>n!j5i@ZG8nwpd)hP0{Ya)6mw9GPJlK7)YY6}Sk`@c_yG9d3cF z$ou1hQVw~6#N)f|?oh{r(2+CI6@sp025=!MvHeWM%;_FS-QT`_n2|o)IlTPn)zQ75 ze|$;n+y8#OAMgF}kLQOM51&8bH64ITAk}1a@)j0Q7fLx9mAmJ3SepUIBcnibJU1-!2C^YAy|3)QCa|@tJHYSMihb#t%SxJk$#z6Uf;C*3yC)L3FPOb!h$-i9<9Kr?}mvs zfAZ)B3s1Kj+;G)3Zf~+$*e4S?c%zhj3@ACXy6bcRaz?Z|K_+X@lL=%CI`ZyyG@Sa9$*8NTK z9!dJNw_|W2BF94TK*(h6gZ&4k*tIBY&pB9l@RPqVOa>86%j_z`b>?wZC^#ds5FCeMX}S_I@wy&l)N$f7)RxJxeftDjC%$-OVD*a zxio+u9%~kM80X%a(8jQ(cs@`We2=Ms-jHq5|So{9Mq=(qkE8`!$rFfACG(Nk}XP^c)#nE0qieBmgeFIdAAl5Pe0b zln#EN4Vt`;<4-08*IW4>jB6hy>MFm6M(ELc*zL{n>TF84Z8nDr2hw2-%tlyHZMRg& zV1qYEm(i4+N2wTXYeB^`w!yTAwr60dk(3PEKl|>XE&l=%C7ELvd1h z4AL)9tPpS%WDM|W(xj};_tesKtuZXb9h9+2fszr?&H-$Ruh~($wWb$gnNxi<=B7?k zvCsQz;YNdoo*QAuUz^JggG1HBypngssNP7@FzG`qngj*eDin*b zr}-%B=TF#SPApJtpr!!98WXn}lB6=Ij5Nf7!JCkax>*{=@FRNO#sCaBhHOcSlu%=x z!r8=@@l}u^Vs!z7vn)CxHG@dttJEP^nqz``T?C6)z_Yp>z@oIwK_thQ<64a=HEEJI zt{b#1{{$w8keO6-FUf@6<`!_aXH!q;DPSS#W_w|$fl)Fi@fR;R76f{*va+VM7uFO% zwDACzV5zD#O%wlPTXCDwDfhniRZQ5!@XmvFQGqL6rAAs(QHno@0r(0!eN zMMjoce7yF&JgVaXn476@*xYez0%EWVqr9f!pDlS~gYIbSu8#Ydn` zHdq9f6bj$yC+YF4U04swislY4yU$s<1ykq`r`41=Mn4b?Tcc{46>v*AW3b6Jy(pZpP|idbHU+88;;}slrNRX5>isH;?0^ml zaoA;gfW~Q2H}!S3DX@dkMn!8NCG3jij5orfZz-0ozSA^DQGjw}mHc{V3WCrTduTPH z-nEl#2!_OSQ~0&9Dm)ihRH(2+31FpAEN{|yYJFIT8>$(F;zT52RuYh4APWh`6s&`G zHB+u6DUF5TN(2RV>wrMvYls`6PVf)~P!_WfbAocDaV8NGeO9$i@>o>tRJ#Zk zW=4QBQQ?)hxp=z~iH>|kHv4GEuraN*J5^J(30`C$S-$x1M6pfaO(>$3^}%A-mP+`5 ztSf#L@VXnQ(L|*HI1tjXu#h{D5;<`PA|x#hJcLj)sCWCL;YY9ok>Kq`_}=xiEV)wTw44Z1 z$Yn>-20V?R@q^YX5k=JW>WO5>ZkdnWKF|o|2ooN7C^{_;NbjU3n7qwP0V{m!8tGX(|~@KZdxOD14L2 z&d;OS`kDzoS;HA6NsB>QyJ#S_%HB|*)JB*5b_kib=k?CiEu)jGa=rpAktI3X#A?mt zB6ybMK3qXJRqZ1};@cHg{qrWvZLPKW^_CdxpBQ(x7Wt!krb$pCL&+72+{i3k)w>*- z@mv35>io!0-D8mumsF(J5$L$k4eWN&?T2M{l#75Bu6YR4nA!H>M6M#^GuhLbwuP;U z>SiIe(i+t*Wc~MgV{T}@;Huz8+W~wtjTX);hYaZzkQE|IbtL&HC+|kG11& z?@u4tUP+B!6Dbe!dpBwKX?soE!~LEAF1~Hv4hpnac7h{BtofZ6v}qik*Za!$`tB3l z%uEue`&>({*S0CX|EtXt^=a$K+q*Tj-8~)VkKr53_3mm;M&_jr zFS=iAxM5qNI+GR}mWZv1`*bDib#(i9BGl5Rn}7YOz1@-RJ3st+AI`-8%^B>Qf%y`p6UC&(IBt1hnB#guw?k%loVG zTMO^y>yIgC^dP~KQwOH}MdZ}#(-~W{*)iS#|x0&qX{|CG(6rBJ7 literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/audio/reminder.wav b/imp/themes/tango-blue/graphics/audio/reminder.wav new file mode 100644 index 0000000000000000000000000000000000000000..2fe83c1981b921086eeea14bded7fe0cb4f3a11e GIT binary patch literal 25816 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 PrxTEa;^k)c{*V4Y(6!sP literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/compose.png b/imp/themes/tango-blue/graphics/compose.png new file mode 100644 index 0000000000000000000000000000000000000000..f02081d8233a7f22ad6965463347bdad80a18b2a GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEOYJfF^dwUf7-(a!s^SjgvWtI!o zR_wX{nvcPy#l%;#Us>Cb$GOKaOs6mTH)~RMutfXI%>KuzPN#Pnf~P` s-`=@>zPvDO!t+X|7xq87yZ#>$-%`D(>Vlaq6@ zb9l9Qpq_}IospoRm7}4Gp`ntbqKl=YjHRTRinof2xQdOsjjgSttgNiBudlPRn7Oy2 zx3;dE$eX#huDZFiyu7@@zoo*!rN6(w!NI|@%(BG9#K*?E#>U3F)4IvY$+S=3J-rnNi%i`eAE+Mm<>lt) z=I7_<>gn3??b7h=*zD}=?(O95?d|gM`~Lk|lJ)xNL7=S4p{u)#!(6SDz6l^OI<2UzI3>WlUp^~<(BaJ3un>97 zb^-3UUSl+tpT^0 zv**5B5R}}NuVXVa`>I<{2ON$>d7Wl%+jUJ=0pQS#x390Ke$&-k@DI*=NRUdZ#Et*} N002ovPDHLkV1if~al-%r literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/empty_trash.png b/imp/themes/tango-blue/graphics/empty_trash.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4f98b9da732ac7199ca35b1c49110a1c0eae94 GIT binary patch literal 754 zcmV0}$TO*4mX0!A5`~RND#W)g)=jM5O`hLHC`#z6JBoh2b9s1r6 z|5%trB0+4)&Q=`P{>F4uvuWA9mGv#<9BMm5WbWq!xzWzFSG{KcmN_-4E60zva-(|^ zDO7-qlE29)8wZtHt#4cuVw7XO>(2>O!$xf1mYFttgCAP;KiGOfmhGSmV70jQR1@~ zF!mi<4AF#&BUP2n7%#@1fycaj=Lm-k0AZr|zE4GENfBFQdB(%TBN{0qUKycj#R{ym zyng$L*KY=>p0^MQffK=xdcO-)l*S4BWuOK;xIZ)u0=0`8F&d(-whB>jd5bYW-4-(l z8G|4o%HYT|=9aA_=EtdCU|2M-fxd@Nk)VKx;GFy}AV$GC1i=<8BOe}+&w=q8c{0?G z%?GFis0mPh6^H^1Js-8pmM0@3N?<{a5(FU5va+Tgr{J7oGs46~#sU$*4+90Y+1-6T k-R*t<{)iE^+2cU)4GL5=8LmVL-T(jq07*qoM6N<$g6k(#ga7~l literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/encrypted.png b/imp/themes/tango-blue/graphics/encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..e18b0b0c89d9d8aac53cf8cc2ba709c3b1a24882 GIT binary patch literal 809 zcmV+^1J?YBP);01|dsR_D~f*aj+Tg1O0MR1u- zNb$ZEOP7|!At_V^(UpZH&6GrwSZgy51)a`(-}he5d0nK@qVWe091iC^oQGp(XQroA z<3$lcBoIVU5#)hF_@@?8M8ZyAWbuO!KRv_j%yj%eR5gYWVhABR=c2VXib%B9#@U(a z2#^5O=H~!#&S9;kC12*_*Un5@6a@zk9YSJYaiPX5XU@`Yw*mO*<1ZK;t#ESe zDBV5XB#9v{jnV1ktgWr>7&zwu7#SHQgvk8dRVF51qtnSb{`d$lkB@U>=|{f(<~#1* zy+f%~qPMrqbI(7^(#;#&sq_B9xx(=9Fx6_6E0;f~aWCWTx6ZNt(>e>a>%4jH4brrm zq5XrjS~;J5c8RCPPV^?K`nLf!diE6YnnBK`dpZf|Vz-qicA zrn~RBy}8AaBS#q=8p7IwX0u5oqAEN(Fv1HjR=MA5@$1$v96WrOw5yAE-o3Ej%+5?t zZES8{McGLIG5vHj&lXhW7$ADU z5edW?0DV}k{}{}DId6a-P>4Ci4(OjC+o<0{>>56=tJ3r4&c4FMG~D#88*{-MEGo#-YX00000NkvXXu0mjf{bq61 literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/expand.png b/imp/themes/tango-blue/graphics/expand.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaaae17300d32a6af10d90846a9459bb5ccece4 GIT binary patch literal 888 zcmV-;1Bd*HP)@2SH5hox4Y=Jq-hgvEcneW%{ z0`DxY^YBRm0bpoFf4g$zoLRlfz|=fytw5u6fIS!%L+6$kfiF%WPs-{or*j6&b^h% zmzfC5{Lz~vX?q3F*m)eGSzN=X@%W;OfAE>rW}`BD@#4zH=H^c=0I{|FU1J?+<09!bS&&8E0Qid`lrH5cw#cPf9sdq2LfBeyPK?G=sgUh zPpx)@a0T&s6x5DRzN%4fbl84WqLC?(s)sJ6!-0VB=G64`a`N!-=YIfs>PzwdF;b`i O0000^;0FlN}KatKHq3%DRMunX)i>>{vB1E1c{*IA~qm}#b;n(3K&&okfW`<$Q8`}F~4 zU?w8wf&C(UH49h*ARzFjZIZWH*ef2yj#afxJEtlC_c+a*VjRm!15 z6>{>_X&DQKWO8y+Q($CN8Xax&bH!n)t*e**fqrrK^+{pL4zbwswDoH5?(S}Bb~vQs zmtUp5vrF9GL2(WEq@l?nM=GnNwXIEhdV0j?^GRQSzu31I%jT_iZM_=vdcD%y+bcir zJ0QFF?3F$H%jJiCNx^zi@S(2#b%CC@H-1>3asLmcbs>XMq{wbInw zA}x+q-X$!DRMi}pBYa=i>24YF`^DvUi^*(d3`+Udptf&Sbv4&Ei=Y2h>{JYcjDwQf z-6zLu>!kifgY*pyNUzH!22-{aeNiR@10HSvhTj@xWMo9s@bIuG1p;ULv9U2N{&kFB zV^g!7;$2N^O3r4R7F%PESqzz3^tDlv(+r~1r%FPSUSbn< zvLP;EBx++!c`m^UYdXflm81uG1$hK{ zWS=n=kU@}5@Lgd3!8d|=L>5Iqfjoil2e|-aLD@l% zgRud<3dRY{8yGW?KdKarA?PE}3t&D`w(D!q^B@Bt3m^kvzCa#84p4sZCy-N+N02oz z|Dd-)enHN_S^#>PssViuG68xQWEb=w$Uo>g(957_K|g|wg5IZEK!&MSka>_JkXx{B zfHi~a0P76{e6)+>-5(C?t{LB2r_*oWAM zKn6foKxV)i2N9XhLjRBdha-@GPJ4LHRGWLjoY|N+|B{F+=4^B~LZe#Sa8?Eu5ta|K&&*NTw>aDd&8Zs+!4Ft z<(wRo$!IdiKmW>_1$Vx<+-lBIE!Ud7a`}?G9^aa0dP*=@ci>;%{=FMfBF2ksrv(zZ#+8y literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/fetchmail.png b/imp/themes/tango-blue/graphics/fetchmail.png new file mode 100644 index 0000000000000000000000000000000000000000..b94680f21f4f6393cd50d9c722b41b85529e984a GIT binary patch literal 569 zcmV-90>=G`P)NISG}D7ZD|(4b)od?&fWF$HS7{Y!d_GcX=~!W`5?)JT*R1x@VeZ znH^}Yxx2I+`TMI?MF-NRX_l{CnxrF3%TOplrNZAx18i;mV(sHvTkw2~Jw8#A7I%8# z>Ef+Oz%VlG$@SBX;)N1QDU?zyK3lj6gaTS?9LMJ6hiz7CnMBb@i~aC*5Iehz9KTwW zfj;+B)WK>k!=u}0akU>O#xvx>_0tLQzTREjm|8iK25=l3fbTzDKCl1g;G{DO97xcT|=GDmM`)}-?eW&`~Uwxkm4DpENScJ4zp&=%Vb|%VdUlxG>XB~)z4*}Q$iB}$xb?j literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/drafts.png b/imp/themes/tango-blue/graphics/folders/drafts.png new file mode 100644 index 0000000000000000000000000000000000000000..354a5c4fc57753fd0cfcc06dfed5a3f0770ee6c7 GIT binary patch literal 492 zcmVayYJA_f49Gdh>`aMa zvepWK=lj0hc)fY6sa!5&jOmL7LC}q?^QR$`f>xjWLJ_8NqS2$nMrMu}d=Z{`>PB z!Js^VC<+0%ypH)^`FrOX0C;g6Qz#S}rI7?-7-j_b-9pyFLkPzHpTRA^4G|f7`v}Iz zQWQ{CLT` z=fK?B+ueUcgw&mTx8?fP8#5oZ_IS4UlwPlQrCO;yj|7yQi?lwqqD*+(cr$(Vs9LE# z0Eh#m(;1HB@{s`NLMd=l3Z)da7uEYf05Hbjc`mO%_Gxx9%%#H)XKp%DNa@dEf@UYf zg64HNtq;9mzz z0TxYQt&biCWrx3zi1`R0A}FO05k$Zj!CGNxeauK0j4VSdL!1G*==LU59h96xI zMByWh2N4hikuew;S(yNSb=sUhdyWrZ|BROccMMviB*Wb(P{I#8i on>e<%XnEP;xA*VLo2x9V1Hy;2%BQg6_y7O^07*qoM6N<$f|VrF)Bpeg literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/folder_create.png b/imp/themes/tango-blue/graphics/folders/folder_create.png new file mode 100644 index 0000000000000000000000000000000000000000..5b428d2f562cae89d413abd53c4b850767ba44f4 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!L4Z$)>;M1%|9yXQc%t>^3(Y4s zbv(Gd{^6Ak^VAH_#Y8Qwo{@toOFv@x5b zI^@cNrgQu(6JG9kz;Q&>%}sSgTe~DWM4f!9Zh* literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/folder_delete.png b/imp/themes/tango-blue/graphics/folders/folder_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..985c12a3c7ee4692fa333c1120e06aaf50a1ead7 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!L4Z$)t1A!3;Wd@}JFNbFfAaUk z>3{DJ9-e6Z|Lf&Hk0<=TTl?qbs`5~!1#SLY85sTp!S9bMC7%uf^)i+O`2{mLJiCzw zb zW=GS}w_ieQDi?KZt@C?r+f{f?{lj*NrES;cqt+eR;qImvr4;>o$&;j<1G29AyBxzW fZr|B(SAPOO`(1V>AJzU)pq&h!u6{1-oD!M<`L$&d literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/folder_edit.png b/imp/themes/tango-blue/graphics/folders/folder_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..f324fcbb8589aedbd3e84733d41013943192b86c GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAI14-?i-EKU7`vU!wgWPllDyqr z82-2SpVz?n3+Y-IFz#Q^8T;LxZuFK&*c*j{G7{BdiHYCP43cVPQ;zF0Y6Y-;<5;ZC2-aEN-Ul%u85)#z*FfcH~`@T9H@$2A2@QE^U{K zOU+5f<~ZY!b4>9sJdaqU|7ecRED(i4_ZM({dP3`~*KF>d7ly8JK literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/inbox.png b/imp/themes/tango-blue/graphics/folders/inbox.png new file mode 100644 index 0000000000000000000000000000000000000000..56131102a61ae8eb494778997add03342f4d39d1 GIT binary patch literal 652 zcmV;70(1R|P)Y{d)Rk``f)C)vZhQzg1wq7}?;z+)xbp+s zRa3#V=?AS^({9&XFVu&N*C?a5^5dyE7z;44rNV=N!H)v1RE2L%rUh+g;+@*JJkg zMnq9m4OD^YWPNS>@S4dn6K&{?jw7bLM!2zvSi(bE9t<-|?vx^Hm8t%~PbZNKS#5P7Tl;s>A+m!zG zn=D>gW_)tO!QMVuGecCdwOaaeef`O!5CXDnuL{LWMqV{>$39s$7?g2%`QED_~h(7rJZg1eV@g}%i_8&sZ@%DZKISTiZpwB zyR5HoU;;Fohpc^H8v?XjEfyCRC|2wA}VfwyLuh-@Mw>GPl#L0Zh)I2RJ07QhTREmDzr(SoM z7`I7|C25A%ofCuAN`hCn@B7zAjosa6j#4TIUa0-hh>h31$E(Cc*p z*sr^69CQHa*Lz$&uMkm#eE`!in4B2LvXXdy0|4c^E|!(}qXki57zQE&A^>O&{U9I+ z1GFBzQ{8U #;@f`~$Ejfl_>0yI#sH*hLt!Y~*Bj&JZcKr9wJ0tw~vKFP6hrZY2a zZr zZEheU|6ocP7WF7a=Fu= zSgss!<;G3EY&AfGMzdP#@O5WUp#D?>tk< zW5lJY zaV}wgzKl}Mhk@2uo1lOwidZ776|Y8)=mC?Pdp!6nII89f1tJ?UJv~hj1TBc8=MLb! zCz}$=3uV%&3;@=#T`MlB3rAHbLi^IhzeR246wQ)qy3#o3P@CPiS zTEG7cfM@{cEY1sp!F$0wk51(PsC<1!=ehyfyLTWyL7YWgyu3z0Mb=S|6XLK)XYT;3 z`u6eT%|jYrUz1tUOZE9UQKf)LfVdb1Sl1+C0OHtED$e1P2I-zQ>h&6y4Aq9C7R`WC zj-NR;vLy)joPOvY(1vhNa$Fzg|=)b<Pcdz2oM=8yK0<3vx$vIAq*~&Yi!;k2R_6=!Z0<+IW3(r0q;(4-9`79; z`98D)?>&gH@cVlcfr2j+6H^;nzhv3|8!MRk1DpFrmJ}o`OaK4?07*qoM6N<$g3;Ao AH2?qr literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/folders/trash.png b/imp/themes/tango-blue/graphics/folders/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..bb293e639abea9dae4286cd2bd423935467db7b8 GIT binary patch literal 691 zcmV;k0!;mhP)B8Dij|ec=RZtisD5?1fhtE2fc`1#Df>< zt)Lb`kWxyILIoe-!Gof-rL|P0LPe9bX-(VR&Fs#MhiIP${0=iPkN^MqXT-@rL4_Wd9m-&<6i0@E?w?6=gyx0=cey_JnVZwrBXRF&_DRJu0U7*1mhFq^-OsA z>cz&T`vd)hR{?B*csxP6skyE|{&-i-O$dY#3=R!k0crwLN<7cy`PdSpr3C*)W1h|n zdDGJ1Pp%{wEhXr=b_`!C0CeaPc!jze4UWT&-VeKM0MBy)_&M+MwYXe6u<(rb)UQn! zjnQZoGP_t{tCPX@eV=%IbM(FKQL@b)jJ?}je#DN^7jr11@0?EW&=W2qer7?gp1|bAskw|6;0}o+Eh}dx)CyCJ#Z+Q+G zRFOZ@Sbr02Z>myWl6)_F%*=X7Ww0!pSS(4VZ4X9=luMt9IteVx#*R23teQZfRAm3* zBYd1*AP5aoX^b(%oD|w97U#cVbVy@*8?jglr9-q)WW|@ab|HS?^}XTXD7;_SL0hX& zAbmg(sw%>=0r1>1(P$i{Ty|%to``xst>dS`h^PtnXF2 Ze*>Hc5M-a`pzHtu002ovPDHLkV1m>=GfV&g literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/imp.png b/imp/themes/tango-blue/graphics/imp.png new file mode 100644 index 0000000000000000000000000000000000000000..56131102a61ae8eb494778997add03342f4d39d1 GIT binary patch literal 652 zcmV;70(1R|P)Y{d)Rk``f)C)vZhQzg1wq7}?;z+)xbp+s zRa3#V=?AS^({9&XFVu&N*C?a5^5dyE7z;44rNV=N!H)v1RE2L%rUh+g;+@*JJkg zMnq9m4OD^YWPNS>@S4dn6K&{?jw7bLM!2zvSi(bE9t<-|?vx^Hm8t%~PbZNKS#5P7Tl;s>A+m!zG zn=D>gW_)tO!QMVuGecCdwOaaeef`O!5CXDG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_answered.png b/imp/themes/tango-blue/graphics/mail_answered.png new file mode 100644 index 0000000000000000000000000000000000000000..b001f9cb24ae9f0e1d88967f80212f64dac87867 GIT binary patch literal 583 zcmV-N0=WH&P)wOlL`k5YeGa zmP+YpNPIMZMJUdSYr6;y@7;ILy$<QxKi0tB5l07@yM zC?X6)q9{TsMI6V(ag5d)V+^kAau9rFBsY#@R#$HlblP~HhcO0Y%pbM|V+@Yt;QKy7 zr%mqmI&mBi0AUz%ZDE0>l_k0d0m)=?0>Uu%eV@z!ig+e~Z<0ntYkY;oDjH_a?XvZU1EZ+_f>7SfX$md9BuLIEScDYEU zQi;SU`T6|^%gZaIGnq3F??2y}$b(v$UavP8;l|=(5B~-jH3zja^p8OOIvwFMfYHJL-ap%zxO4v2c-{`C^&5RZ V8tP(M{R#j8002ovPDHLkV1h)8^@{)i literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_clearflag.png b/imp/themes/tango-blue/graphics/mail_clearflag.png new file mode 100644 index 0000000000000000000000000000000000000000..35134c04af0671735d87e45ad42d3a0de2ecaa70 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMffdHQn*Zh_lvDH&u1Ecx)_*_F0 z9RuPHUVIRioPX@{J$v8i^n$9*hc3idO|gp3M6d^6 P&`}JYu6{1-oD!M&zTSKHwa6yKh=K0vayjSR!{MlOI?ew~01$5*$Y8nq zFQDD1!>?HfK!2+vtp9$Yur!`k-F?}UyIcDvMurbn{B>|>j{NFVg5=j@0Wfjt;xF=< zfy)&MjE|k?RAvg`k@x%9f8u7v4*HK@<=U;&e=>OR1g_scOCnZzc%yf60I2T1>c0pRVjVfy_n`KnEdIY+9lk<~3| zIYi}^SDKPXQGT4q)312<(GqxSE3g<*6j7V3Dr3tmU-|g>#KHurWXR!;4z$%Qth{7l zd774nJ%|TZged0k6sWCE5kv`a3Ve7r{{aNrn|o2tqpQ6MabSxYrM&G`2Jn?k z#aZeToy4OQEscuih8`xTUL&T2h+wVk6cFXWS_DCtG>e~~Q!Ie;dzqPkfi4=H7@RUV zwhP1n=I565{sY~ih{I@b%3%zM)pYJXh;?ACL+6CGwVVb*APRtz)A@6g_wS8NR$j!= d>HHPI`~;;h<$s)!$`}9u002ovPDHLkV1i+9CI0{b literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_draft.png b/imp/themes/tango-blue/graphics/mail_draft.png new file mode 100644 index 0000000000000000000000000000000000000000..c22d8885e664de7017b71add3738986732bcd930 GIT binary patch literal 756 zcmVh1IIeX~+tCM{kgdl5o(`u!#b5y7&HGEqs(g^??J21Lwo}9?{v+e$*J-rnN?E zh0+?MHF~m?`qgV~&{|E*weCH8?)+9dJKF8vFveJ=lvPUED2i+thE{8B!!Wd+9qkst z0mx;00EnW9FboNTfG`Y+q6jG^Qc9Fk7-Mi8hnu+@OyNi=S+Zm)xoi)f=V6S&81viN z8ezdP+e2Q;`+t(-pr9mBxXpM?0w&-yZai;mM^C&m7@6N z3jl5uMF3fr#=(I+b#?VrrBc(mYgX>Z&x~TN1;7}?;M;rX^j>~^%2WLMJ#-h< z*0vpPJ=FH+(~@)Muw(m99LJd!e0X-9c@-tbgwOLkUC8mzy99sX#Hr(#4jwqPJD<;^ zwWj|?mZW?`Jm&NK=_5)DnrUr4CLI1l6h#yY1s>eFj)^bi)!i$EnPzZ2fPV{w5G0dH zLJ2S;CUX!ViA}~@BU+X@b>Lq mhDSzb%&oNuA+XlG1NaHsopbR?$j)B?0000%bswb91|Iq2)zS;ACZ0uMm`MjC@Q`F`1MrUYut*5&$~T=%Hmq*flM-OHV~}rtoa9##=7ftBAd?u0000< KMNUMnLSTY-!ZPIm literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_forwarded.png b/imp/themes/tango-blue/graphics/mail_forwarded.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1f3b776b784d295cee6abd4caa14f30aee4616 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}QGic~Ye)U!Q^&3yJ$UK=|NmdV ze*OIU^QTXrK7Rc8^y$;bj~_pH@ZjFPdw1^KxqbWgjT<+vUAuPm>eb7aFYnl~W5b3G zYu2n;y?XVkRjcaj>#M7)D=RBYN=owb@-i|q($mvZQ&Xd&q9P+B!@|N`TwD|s6o7UD zZE=>>ssyssN`m}?fn36XVR=>K9-xj|PZ!4!iSXR>ulWus@U$hWJ@^w+7BDkCeCxgc zx?Y|$Pd@s+-v1KYne=Htng2WsV%xXlQn&GrYF_sKXFG!roLxUHW941(1BaCbesP+) z7nS6G3T^xH??zZ<(TZuZT#HN$NS=czKSC+_F$L)di^&rgF~kwfp7$-{>`W Y`a$WOdwn%|K!-4Ry85}Sb4q9e0P#D%(*OVf literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_personal.png b/imp/themes/tango-blue/graphics/mail_personal.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c6f46211e7030572cb77af47c363657dc60153 GIT binary patch literal 708 zcmV;#0z3VQP)YgRB;r>e>2y4I^KCWn2(e)wHFvU6{KyF=&>xQl@JBCFmMqBt_#{#i-@32 zn}HB2(1Q^eV3FO*Fa?2?Uu11hdr2NAechnnz_F_QEYGW|kln8pZXO_r?d}K0dM05(B$w_WG zGYvSmoM3QthQ~PvsrdjVXFVb?gk&x!Yi-g}p=^0L>-bg-SQFEs6HP}fQ!N+ge@AJo z)}zREbam}-Pkd+_Z0PRBHy&moo~ClFm*AHv zCMNS_G>iW0u^xoacf7gA!(Yfsj2(xsL=RrO?CgCzhh8$!bEcZU2hTZup$*ki%H7v< zs7j9JU6m-$p5lG~P`9#!OIIy!j7jI%Y#gB$5JDk_k?VIl>GQ)(Qimo~grYDVOs`*} zY}`{xz6?zhXsUux^4#yAx^il~Mrr`T!PXK6Y0RU?>h){C89QnzV ze-WYNDUF3d6B`3wJ$d5?$f^=MYg{<(HnzDPOauzZvW#qZQfia2I~-WeB^w`7PRVte qUi9?%GR6<1&SEi@Ay|BRLsVP(x;a01(WV7Pp=%^07YRHE&nYX#VKBLvL z@NAp22pk8qtINps^bF3XQuhIbkn(zNU;yXnsIf70UF^+Gw&v%l7mH02|M(bdU?2wW z0f;CJGp&}@bY}pkQX#NyYWw>Hj)MwA0OB~tFwK@&scQgw6h%@KqEQ$tg;T9kEfkQ3 zfpd6B^=FEfOomi8i=N3yO^6NvUDLEMsMqz-b#bayyjl%_?R=i?e7-4_YumWCO-FzK zG2s8`fe>YTe;>PCZWIGtot$K9d70ty@g|9olF;)4;1hrdeE;d;)>dFz7XN~2Sze`3 z_zJvke5Bb_s&HXs&3mb zwQo|_$4|||?~KFTdAOBIBrXXdOr@0V1i|VCynh2Tf1Sqv=UMMMK;lXI)k0U%1u=+Iz&hk%IuR7&MUiQN*w z#zb+0BeITMt$v;X z=*((RF-Gb*x{Y)yLuXqKfQ_IyhGA^`$XmtKyYZyEr*AR|sy7W?X*ZK5Se>q>c>~!aDMdAAX#Hq*MridFpNluh%tm=L^JXW|CK~?<=#HdV5YM)F-{6 d{L}q-e*qM&@r3HI;iUio002ovPDHLkV1n%j9smFU literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mail_seen.png b/imp/themes/tango-blue/graphics/mail_seen.png new file mode 100644 index 0000000000000000000000000000000000000000..5593b246efee76785867126a549f0c93bfebe045 GIT binary patch literal 340 zcmV-a0jvIrP)|vtE;Q5tgNlA zt*)-Fu&}VPv9Y$cwz;{vy1Kf(y}iM~!NkPG$H&Lb&CSx%($v({)z#J3*4Ee8*V)tG20_00001bW%=J06^y0 zW&i*Ha!Eu%RCwB*&Pf)6Fcd^lG$NoN3D}_YJtgL6|GV=*kmHy)t2-)VQ);Ky=KZ9# zi<*FrBM6YF_YV!QK5r>evFf$}4iab>vLEy=BVtaSUNsCSz%-lIju$v1@5-_*Ufz9% mgbN`!4}viA^^w1fEqwtlrV^gyRipC&0000b4kv<&Ak}m3 z*DRulxY8Fnq5}9oNmadb&O7IPQ54=7<3+?9WBlIkjt@ssvOyn!q9`!NkmotZ7>c66 zT8p(7=Nzg^7=|2XZvhAathKDI-6I?HiJ}NqMOA-`EvPC%5D>>P*`QDR!9%RIB_Pjp z?kp~{yt>TMVMe`PpMX%!aU9d@z2W})I!UX=xASvujA8@K&)>#5&!FGq+4C3IHh!@G znypTkx#k=IQLR=1tOYr;@$BHjhPuXHa7vN zjVg@vd3eUk$|^~#b*+DrF7V`O!jFp!zMOsH?$XlaC4L+ZxBupJHJB#!27s^MmH&dD X4hIf`Nks%e4^YA&(d3cVhTCLK&Bw17g6TmTG z1V{n*fT@5#xT4HeH3O0?b^tS7rmoSw{r%V-b~ZOQiN#_pEk6BTsZ=}xe=t$cSGQab zmz{mi(ebe{R#sQJ6}U|#@&J>`gv;$R0T-3Ye*j4q&q%WP893+j`Iw##vHWIvYHO=7 zl>V7MAB{f7>-7Sh`X>Nf@%e^rz^+b1Cz(tJ;8MUJTm){cudQL&u@hi-JD_9GGYEiI z(AHxWNfwU+*8l`T2hh+oL9th9b-HH241~;Pvnr8Dpb>-?Kv{uGC;SGqx_WF6pgJv| z1wdDW+XMBRg})V4l@)2!{{iYJm2wreS`E+xP%4!GD3*%b1NmGYfLE_yGT`11Fln=P z^YPOM0P?w93((NSLZJrC%||(L{3KS3&1kV$2}foCC=?3Y0_)jq)}YtxNhW_}CU0Ih z_SzjhiasQ}k;T#LB>pW95Nr2@*@dMACdQA@(``3uG#cK$e@nSi#bYy1oMBO%h6bQrj!1R8#$B#Q=Wvpxb0Q=5Y{ jFbmuT!U2DDE_ literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/binary.png b/imp/themes/tango-blue/graphics/mime/binary.png new file mode 100644 index 0000000000000000000000000000000000000000..003ded243b98decd76b698b570c7d547063c49ff GIT binary patch literal 560 zcmV-00?+-4P)D1xM5I}MNt#wchYVWS&J@CLX5H%;8IVB^kk0WO-j zVZ#M9-hk1Sapgj)3EEN2454WYwESiIhbS(TW)x<2yvbQUPfqfl10h*lTAiF(czU+D zv^q&dWEku@?)vj*kMSILJxU^@;9_ZqiF(A}?KgcOP9z zbWMXZ=rIf|J9DW-{12DvhX@2hfDnRD#S*5WI6eKz7q^P%xL9^(Dxb?10AvuZ9vq`< z8oK&3?e-7&1&Q7`w?>l;_xA-inFCPgaP7E(t~7)Y2n3B*huXf+-HDrAGZpXNZz2(- z2l@f<9QQRKq-AI3msi%f-W#XYI>B$W`R?tqwOyxNIi%U>P_7)Iq$FkOO$X=dy1sJ2SPsvc||@9~;Fodo>^5?=Y4gB$Z6iYMu}?4V-ed3%`8vWa4;-|!rlq;+FD2zP4? yJEpJ29bOeaU#Kop5S09_EEJAR;2Y<-%KQc&oA5+Zct%YC0000Vhlm95D^5CAW0*NO~l4h2`Gn+SSXee3p=k!DITN| zloYWEXca63MGv(U^qPobY>b#9Dp8{0UEbTVcsUg#cu}XB*@6F?*_nZVGy!PT%rNk5 zliHE-nb49(%`}10vsV}N{rqDUTQ;Bo7$dnCNIoxON&^{bA}^laGjk880qPdu^yOBT zEWa_clc&Tx2f*4|8y`gof^!a2aQL`dICk+4OK+dE`@k5lTlYsTutSWPkfmY@o;2kB zMZE(6RQjtR27v0WeY98J5hzgEvJDN{um$>(l@Gjpa+{MEra-d|pH&4=2yN1juSixu z;fgT;7AQWtIU$FSo`duYWUHV7)eJ(4YRG+92Ww!@-u*n7y$)#60)BA&kYbGBD?sJP zdQc>%Uxr2wvM|?-q){`MfcjsaLA`SadgR1;mgk#Ysp6f7xO?jg<1;~QC+VXy zJ@MAA0M19>z4jvs+H&M;MdVlo~3xi*=OJ?_woqWD+!X0r)Eth>zf6~#I~h_x=;wA-Dd z+**KQozrf0=yrP`uv~tU=PNp$9=PN9&m5``MT8K_&{aPpgh0?h*3ZgnLD8Uy3TAf5 zKt#}>1StVDDuN)wzMjU2m?2ivf~uktc>kCKFrUwkT3ak;+}}L_LQ1IyAm|C&2XH%X zK}ArJQpKIZ YZ=>v}zGvq^U;qFB07*qoM6N<$f<&0NlmGw# literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/html.png b/imp/themes/tango-blue/graphics/mime/html.png new file mode 100644 index 0000000000000000000000000000000000000000..53014ab153f17a68c5b107a7b0f1d153d956afbb GIT binary patch literal 709 zcmV;$0y_PPP)fq#HTtFrvrY!+YtrY0(hb{NEx9zYRiRMGt~$xpLen%X%K|_MvGY{57DC{1x$t_u4wM}O%d&_> zB905S5<)OAFtBSDx%SZC-~V5Ne@U)wtR<-G^IC?buUWE&McJ}(%Mwzloy&KgU43zH z>WPD(udi>%;QQuJ9==*2(55nZ<`@S%n`uxK(s_fG*cOY+vB#HgKfUfSh(@CTBvJ;i z7dALQKFn~hpLE_}HTnhF9L^m6C;rbpTZhG-+so&ddOuo%CZL}L7gPyuCr-SWPA+@0e>rs z;@+LY+r^KZ80{jHPLebm@pp7!+h79-31OM6rz{p%mhjcv&J@DoFbPekyWPipbdzAO zAIpYnF8NG~<0FFzA+T+m`1%IY-vkA-jH0-aJbp6y0$Vu~y;vcqo0$16$6mCxHvb_| zRrU8`$P(G@0*!?qcw~jm?G}=CZpsylLaNM2sYJ18(&TAG*LB3q%*>l)GI_3Q6t@m> z_T(@}dsKo40(^_b`LJSO;>IYJ$!1b0qQZ^IAv8^6*M45R`}}@;K)pFNG0NfYRshnO rEDzqTQNhJ_!Nf33ZcTKO%jNh5gZdd1q4stt00000NkvXXu0mjfZID5< literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/image.png b/imp/themes/tango-blue/graphics/mime/image.png new file mode 100644 index 0000000000000000000000000000000000000000..68da5027cf1aa23d6ca16eca99fd01025c82f776 GIT binary patch literal 558 zcmV+}0@3}6P)W8+D$+wD1(hb7ZnxQ)>0#;WVhSMx1M~WOW`<`(y-`~O?lW3>LcLKl zTI-Q&y-_m`fH8&#kDju%^KPiHOVtHdSC#>A0E7_i?tf4s(+R0|vB7qwa4%ryoayflfE%+4_t0F6nNx)`Z6qVHi=FPKTS#CU}=K zz{+W!#C9YIhrSlXiNSHls7#+^Yo;a`d;);QTNPSAe+|gJYq?(Q!^i)DrRoA3o7+RD wat;teu)4CGrROk3N|^!cjmHn~jryI>0JT`*mWx6Xs{jB107*qoM6N<$f&tz34gdfE literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/itip.png b/imp/themes/tango-blue/graphics/mime/itip.png new file mode 100644 index 0000000000000000000000000000000000000000..a01950b730d36770211b588e27d438c604bcc2b4 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}X@F0NE07iw6Vuk#*4Ni}c6JU8 z4V~;{vE0=zBO~LAuVZOxX?<-)Lw#jaV@+#IeOFi4qzPSfXHQ))Z^q&Uvz9KIyL|cb z=ksjVtX#Zq?b0n9S8v<4?ZANpr%s(ZfByW{t5Erv)o<8{h z|3ApaD)YHOim@cfFPOpM*^M+1C&}C0g`tC0)&t1lEbxddW?^+kxeYN~Nl*<;|NnRTH(Qu!ugndGyGQ xfRGKFH*P!_a>DzQhsOsdUQzL|!>QiAewe literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/mail.png b/imp/themes/tango-blue/graphics/mime/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..859251fe0fcdbdf20de5040a802825ce977c1a24 GIT binary patch literal 550 zcmV+>0@?kEP)R4zO-SE_shK7L#K^bOYL`2|4i#%^^+d&Zo zk&sSy=pcw4>ZZxwY}*bA=G8Pha*v|J@tT}?%W zfngW`WV2bOr`~d}ruX2F47l3KjU|BXjcOQ7B-6|9cn5Kyc>qH_^Pxk?Y5HvP6 z@NQ%F=Lf9UupKV(UBp_bq(9L5mb75XrJ44nVXyC#?3BIa!Q*#eDs))^YbWW z`NsDFJ}oTJ+SbPAhK=hul>Tj?q2ZJq>dv3z`|8@kUyxGLkZ9U&=waVr86b=ZH79G4 oQU(Hs$Hqtd{^O2@kK`J+0Q~)|WKOu)r~m)}07*qoM6N<$g3M6(EC2ui literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/pdf.png b/imp/themes/tango-blue/graphics/mime/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..d18082e397e7e54f20721af768c4c2983258f1b4 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$HyOL$D9)yc9|lc|nKf<9@eUiWd>3GuTC!a5vdfWYEazjncPj5ZQX%+1 zt8B*4=d)!cdDz4wr^#OMYfqGz$1LDFF>|#>*O?AGil(WEs?wLLy{Gj2J_@opDm%`dlax3yA*@*N$G&*ukFv>P8+2CBWO(qz zD0k1@kN>hhb1_6`&wrCswzINE(evt-5C1B^STi2@PmdKI;Vst0PQB6!2kdN literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mime/text.png b/imp/themes/tango-blue/graphics/mime/text.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7f2d6017d823bf9f1209d9933faf612dffe9f8 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$ic-+2*wv2(<2J_t+h+ zs5rlI{^p#SO2-|aiODDi-jZP}W|aE1)~BmOR3$EA(Vi@w>U%ZDa$9qM8}c0HKK>=@ z`d4d)YqwsmShMx=n<-}wTJ%-CXPi)?Z+d)E$Kx3$zTq0>%B>G-<`ESK<06 zKLv;!Rde(>`RU=L2g~Ovo%n1M@bQ?*+>S*Vvl$k=|9v$za@qmb9gNTaiaD`NnxMxo zp5*#q&TW}{<`>WDw{ULpSLj^#x@qe3m+d`GEQ*uw+Md|dvtPsTSdE!)vF)Ukp32Aj azp#b`#_#;I)BX+6mkge+elF{r5}E*#afeO- literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/mini-error.png b/imp/themes/tango-blue/graphics/mini-error.png new file mode 100644 index 0000000000000000000000000000000000000000..71438cdd2b342b743b97040ed61ecbd1157e06b4 GIT binary patch literal 252 zcmV085kT%%rD^#48bI70jB0q z+G~09`0*Rs7Z-D~v*!#-?~|cr-@JMIXdhyOKnnoRcMb4jplbR60000x~Vjlni0r*Ko zK~y-)t&>e?6Hyd}zey&^WXPmVQ`0OWh3ZNaOEGCg5G|%+ih>mde-K@XNWqN=?gepU z5em|cx~cn8LG8-6__Ii2P>g6PSZu1`B4f&%Op?jC5Tip9Q1tHJdFLG7z4tu$$CCb( zXqVkl@b5#C`>|~SW=7H~&*XOG8#k{H0=b`Ox2w+lVxGOpY}V%sM4?;-F>jaoCU+8F zy>jgrXyu?*L>TcQTTTm!k5y`SQ&7#woy6}8c}luYrDB5hl7apLvCVNTX_xAU7sXzby1-Ub)&hq5(9Lvie7#$rW z)YF6CucE4Ps0S&2x`(^;imp(M*+(No$H(r!akLN)_acPJx$_rLRn;+@ucd8lR3|XS zI$eDUR#vBxG|P4vD2l@HaDs<(v+N%^0Duqz!!R%mgTmX_96oXs#jiCrEnCvXp#Z6asU|jc`xahV!Zb}30!`f28abPV zg{Pc2dAbQTtU4DjO|ZDMgkcB=y~QA#$#5v0rd~C%8x5>l6$y!k)nMn2?G)EPcWyz~ zbrQ)vKQ3gSgXjSiRin2rhOX;v4JPkQPhI|tk2uNysP7V2y6Y6gd4d1{002ovPDHLk FV1h5`60`sS literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/shared.png b/imp/themes/tango-blue/graphics/shared.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b523f62f574a0f2c2c3bb3466ebbfbd0ed3ea5 GIT binary patch literal 616 zcmV-u0+;=XP)238L?iSf#a4vkPw^%d?ZulQ zIVeK<2a1#s1i^}gs=bIJ7_icyhy?}zT1;KdX0vH_JZuT3O(ecB416>5yzhK7;@I)n z<#0HBg*9><$D2#e>G842TQrb3b8b-foj6%{(YA|>jwdlqvo|%BzS|HGiymb@H{ZyF zCr=-*EnQDdrH24C09`j|3vO%(h#ro4ZbBf0Abl@&9`FE;<4`PGWZwK{ZqcAAZHUq} z5S1an{kEE5ZqXodp$FTkG{x}yRL)*|v|R%z7A*k2=50QFFEj<%x+wsFV%s*l-emMT zQY_0_O(0Q~mH!3^RUMI<)!S6&JhgHCsbU5Ta)P{+*j?+tEpO^bV0&48G(5xc_>A z_x2Xb6-hAQ^8nu-lyF^t_3$>+1YkLrCDPqNCX)dm9*=_%>^U+>=Yc*}D$?tLVO)}y z)%utJFt3tH03zKTHOUs9dEfnc`#xqeGnh-CCPX0AzFhe6IS9}a2(ha-L3Z*KFK;B) zwPJUFKLA|=w+WO#zL=f3xc6T#v;;01|dsR_D~f*aj+Tg1O0MR1u- zNb$ZEOP7|!At_V^(UpZH&6GrwSZgy51)a`(-}he5d0nK@qVWe091iC^oQGp(XQroA z<3$lcBoIVU5#)hF_@@?8M8ZyAWbuO!KRv_j%yj%eR5gYWVhABR=c2VXib%B9#@U(a z2#^5O=H~!#&S9;kC12*_*Un5@6a@zk9YSJYaiPX5XU@`Yw*mO*<1ZK;t#ESe zDBV5XB#9v{jnV1ktgWr>7&zwu7#SHQgvk8dRVF51qtnSb{`d$lkB@U>=|{f(<~#1* zy+f%~qPMrqbI(7^(#;#&sq_B9xx(=9Fx6_6E0;f~aWCWTx6ZNt(>e>a>%4jH4brrm zq5XrjS~;J5c8RCPPV^?K`nLf!diE6YnnBK`dpZf|Vz-qicA zrn~RBy}8AaBS#q=8p7IwX0u5oqAEN(Fv1HjR=MA5@$1$v96WrOw5yAE-o3Ej%+5?t zZES8{McGLIG5vHj&lXhW7$ADU z5edW?0DV}k{}{}DId6a-P>4Ci4(OjC+o<0{>>56=tJ3r4&c4FMG~D#88*{-MEGo#-YX00000NkvXXu0mjf{bq61 literal 0 HcmV?d00001 diff --git a/imp/themes/tango-blue/graphics/spacer_red.png b/imp/themes/tango-blue/graphics/spacer_red.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb1f8a5e55aa1125ed87ff928226e638b6d731e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}bl_7YEDSN1Dh0vrN*$FF{E1PZYw zdAqwX{0G4WdzViJif|TqL>4nJa0`PlBg3pY5zaGwCxpL)y1_lO($&)9;#jan!?t)@~xVZTLjEs!` zFpV&J-n@DL85kJ;Z``=?KOZ08|Jk!=|L^MRf?I?PkX`T}*#$8%F)&yB$K?Yi1_lO( zz`#I;wzf8OImRVRmSEF^Vi=Q_mKKAfqa#CLV4y3y!p6o%hVbxk#@N_cWS25h9PsBZ z-)48nUi$ygscU* + */ + +@define('IMP_BASE', dirname(__FILE__)); +require_once IMP_BASE . '/lib/base.php'; + +/* What mode are we in? + * DEFAULT/'thread' - Thread mode + * 'msgview' - Multiple message view + */ +$mode = Util::getFormData('mode', 'thread'); + +$imp_mailbox = &IMP_Mailbox::singleton($imp_mbox['mailbox'], $imp_mbox['index']); + +$error = false; +if ($mode == 'thread') { + /* THREAD MODE: Make sure we have a valid index. */ + if (!$imp_mailbox->isValidIndex()) { + $error = true; + } +} else { + /* MSGVIEW MODE: Make sure we have a valid list of messages. */ + $cacheID = Util::getFormData('msglist'); + if (!$cacheID) { + $error = true; + } + $cacheSess = &Horde_SessionObjects::singleton(); + $msglist = $cacheSess->query($cacheID); + if ($msglist) { + $cacheSess->setPruneFlag($cacheID, true); + } else { + $error = true; + } +} + +if ($error) { + $actionID = 'message_missing'; + $from_message_page = true; + $start = null; + require IMP_BASE . '/mailbox.php'; + exit; +} + +/* Set the current time zone. */ +NLS::setTimeZone(); + +/* Run through action handlers. */ +$actionID = Util::getFormData('actionID'); +switch ($actionID) { +case 'add_address': + $contact_link = IMP::addAddress(Util::getFormData('address'), Util::getFormData('name')); + if (is_a($contact_link, 'PEAR_Error')) { + $notification->push($contact_link); + } else { + $notification->push(sprintf(_("Entry \"%s\" was successfully added to the address book"), $contact_link), 'horde.success', array('content.raw')); + } + break; +} + +$msgs = $tree = array(); +$rowct = 0; + +$subject = ''; +$page_label = IMP::getLabel($imp_mbox['mailbox']); + +if ($mode == 'thread') { + $threadob = $imp_mailbox->getThreadOb(); + $index_array = $imp_mailbox->getIMAPIndex(); + $thread = $threadob->getThread($index_array['index']); + + $imp_thread = new IMP_IMAP_Thread($threadob); + $threadtree = $imp_thread->getThreadImageTree($thread, false); + $loop_array = array($imp_mbox['mailbox'] => $thread); +} else { + $loop_array = IMP::parseIndicesList($msglist); +} + +$charset = NLS::getCharset(); +$imp_ui = new IMP_UI_Message(); + +foreach ($loop_array as $mbox => $idxlist) { + $fetch_res = $GLOBALS['imp_imap']->ob->fetch($mbox, array( + Horde_Imap_Client::FETCH_ENVELOPE => true + ), array('ids' => $idxlist)); + + foreach ($idxlist as $idx) { + $envelope = $fetch_res[$idx]['envelope']; + + /* Get the body of the message. */ + $curr_msg = $curr_tree = array(); + $contents = &IMP_Contents::singleton($idx . IMP::IDX_SEP . $mbox); + $mime_id = $contents->findBody(); + $mime_part = $contents->getMIMEPart($mime_id); + if ($contents->canDisplayInline($mime_part)) { + $curr_msg['body'] = $contents->renderMIMEPart($mime_part); + } else { + $curr_msg['body'] = '' . _("There is no text that can be displayed inline.") . ''; + } + $curr_msg['idx'] = $idx; + + /* Get headers for the message. */ + $curr_msg['date'] = $imp_ui->addLocalTime(nl2br($envelope['date'])); + + if (IMP::isSpecialFolder($mbox)) { + $curr_msg['addr_to'] = true; + $curr_msg['addr'] = _("To:") . ' ' . $imp_ui->buildAddressLinks($envelope['to'], Horde::selfUrl(true), true); + $addr = _("To:") . ' ' . htmlspecialchars(Horde_MIME_Address::addrObject2String(reset($envelope['to'])), ENT_COMPAT, $charset); + } else { + $curr_msg['addr_to'] = false; + $curr_msg['addr'] = $imp_ui->buildAddressLinks($envelope['from'], Horde::selfUrl(true), true); + $addr = htmlspecialchars(Horde_MIME_Address::addrObject2String(reset($envelope['from'])), ENT_COMPAT, $charset); + } + + $subject_header = htmlspecialchars($envelope['subject'], ENT_COMPAT, $charset); + if ($mode == 'thread') { + if (empty($subject)) { + $subject = preg_replace('/^re:\s*/i', '', $subject_header); + } + } + $curr_msg['subject'] = $subject_header; + + /* Create links to current message and mailbox. */ + if ($mode == 'thread') { + $curr_msg['link'] = Horde::widget('#display', _("Back to Thread Display"), 'widget', '', '', _("Back to Thread Display"), true); + } else { + $curr_msg['link'] = Horde::widget('#display', _("Back to Multiple Message View Index"), 'widget', '', '', _("Back to Multiple Message View Index"), true); + } + $curr_msg['link'] .= ' | ' . Horde::widget(IMP::generateIMPUrl('message.php', $imp_mbox['mailbox'], $idx, $mbox), _("Go to Message"), 'widget', '', '', _("Go to Message"), true); + $curr_msg['link'] .= ' | ' . Horde::widget(Util::addParameter(IMP::generateIMPUrl('mailbox.php', $mbox), array('start' => $imp_mailbox->getArrayIndex($idx))), sprintf(_("Back to %s"), $page_label), 'widget', '', '', sprintf(_("Bac_k to %s"), $page_label)); + + $curr_tree['class'] = (++$rowct % 2) ? 'text' : 'item0'; + $curr_tree['subject'] = (($mode == 'thread') ? $threadtree[$idx] : null) . ' ' . Horde::link('#i' . $idx) . $subject_header . ' (' . $addr . ')'; + + $msgs[] = $curr_msg; + $tree[] = $curr_tree; + } +} + +/* Flag messages as seen. */ +$imp_message = &IMP_Message::singleton(); +$imp_message->flag(array('\\seen'), $loop_array); + +$template = new IMP_Template(); +$template->setOption('gettext', true); +$template->set( + 'subject', + $mode == 'thread' ? $subject : sprintf(_("%d Messages"), count($msgs))); +if ($mode == 'thread') { + $delete_link = Util::addParameter( + IMP::generateIMPUrl('mailbox.php', $mbox), + array('start' => $imp_mailbox->getArrayIndex($idx), + 'actionID' => 'delete_messages', + 'mailbox_token' => IMP::getRequestToken('imp.mailbox'))); + foreach ($thread as $val) { + $delete_link = Util::addParameter( + $delete_link, + array('indices[]' => $val . IMP::IDX_SEP . $imp_mbox['mailbox'])); + } + $template->set('delete', Horde::link('#', _("Delete Thread"), null, null, "if (confirm('" . addslashes(_("Are you sure you want to delete all messages in this thread?")) . "')) { window.location = '" . $delete_link . "'; } return false;") . Horde::img('delete.png', _("Delete Thread"), null, $registry->getImageDir('horde')) . ''); +} +$template->set('thread', $mode == 'thread'); +$template->set('messages', $msgs); +$template->set('tree', $tree); + +/* Output page. */ +$title = ($mode == 'thread') ? _("Thread View") : _("Multiple Message View"); +require IMP_TEMPLATES . '/common-header.inc'; +IMP::menu(); +IMP::status(); +echo $template->fetch(IMP_TEMPLATES . '/thread/thread.html'); +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/imp/view.php b/imp/view.php new file mode 100644 index 000000000..b3ad56542 --- /dev/null +++ b/imp/view.php @@ -0,0 +1,166 @@ + 'compose_attach_preview' + * -> 'download_all' + * -> 'download_attach' + * -> 'download_render' + * -> 'save_message' + * -> 'view_attach' + * -> 'view_source' + * 'ctype' -- The content-type to use instead of the content-type + * found in the original Horde_MIME_Part object. + * 'download_ids' -- For 'download_all', the list of IDs to download. + * 'id' -- The MIME part to display. + * 'index -- The index of the message. + * 'mailbox' -- The mailbox of the message. + * 'zip' -- Download in .zip format? + * + * $Horde: imp/view.php,v 2.231 2008/09/01 09:27:13 jan Exp $ + * + * Copyright 1999-2008 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (GPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. + * + * @author Chuck Hagenbuch + * @author Michael Slusarz + */ + +function _sanitizeName($name) +{ + $name = String::convertCharset($name, NLS::getCharset(), 'UTF-8'); + return String::convertCharset(trim(preg_replace('/[^\pL\pN-+_. ]/u', '_', $name), ' _'), 'UTF-8'); +} + + +/* Don't compress if we are already sending in compressed format. */ +if ((isset($_GET['actionID']) && ($_GET['actionID'] == 'download_all')) || + !empty($_GET['zip'])) { + $no_compress = true; +} + +$session_control = 'readonly'; +@define('IMP_BASE', dirname(__FILE__)); +require_once IMP_BASE . '/lib/base.php'; + +$actionID = Util::getFormData('actionID'); +$id = Util::getFormData('id'); +$ctype = Util::getFormData('ctype'); + +/* 'compose_attach_preview' doesn't use IMP_Contents since there is no + * IMAP message data - rather, we must use the IMP_Compose object to + * get the necessary Horde_MIME_Part. */ +if ($actionID == 'compose_attach_preview') { + /* Initialize the IMP_Compose:: object. */ + $imp_compose = &IMP_Compose::singleton(Util::getFormData('messageCache')); + $mime = $imp_compose->buildAttachment($id); + + /* Create a dummy IMP_Contents() object so we can use the view + * code below. Then use the 'view_attach' handler to output to + * the user. */ + $contents = new IMP_Contents($mime); + $actionID = 'view_attach'; +} else { + $index = Util::getFormData('index'); + $mailbox = Util::getFormData('mailbox'); + if (!$index || !$mailbox) { + exit; + } + + $contents = &IMP_Contents::singleton($index . IMP::IDX_SEP . $mailbox); + if (is_a($contents, 'PEAR_Error')) { + Horde::fatal($contents, __FILE__, __LINE__); + } +} + +/* Run through action handlers */ +switch ($actionID) { +case 'download_all': + $headers = $contents->getHeaderOb(); + $zipfile = _sanitizeName($headers->getValue('subject')); + if (empty($zipfile)) { + $zipfile = _("attachments.zip"); + } else { + $zipfile .= '.zip'; + } + + $tosave = array(); + foreach (unserialize(Util::getFormData('download_ids')) as $val) { + $mime = $contents->getMIMEPart($val); + $tosave[] = array('data' => $mime->getContents(), 'name' => $mime->getName(true)); + } + + $horde_compress = &Horde_Compress::singleton('zip'); + $body = $horde_compress->compress($tosave); + $browser->downloadHeaders($zipfile, 'application/zip', false, strlen($body)); + echo $body; + exit; + +case 'download_attach': +case 'download_render': + switch ($actionID) { + case 'download_attach': + $mime = $contents->getMIMEPart($id); + $body = $mime->getContents(); + $type = $mime->getType(true); + $name = $mime->getName(true); + break; + + case 'download_render': + $render = $contents->renderMIMEPart($id, array('format' => 'full', 'type' => $ctype)); + $body = $render['body']; + $type = $render['type']; + $name = $render['name']; + break; + } + + if (empty($name)) { + $name = _("unnamed"); + } + + /* Compress output? */ + if (($actionID == 'download_attach') && Util::getFormData('zip')) { + $horde_compress = &Horde_Compress::singleton('zip'); + $body = $horde_compress->compress(array(array('data' => $body, 'name' => $name))); + $name .= '.zip'; + $type = 'application/zip'; + } + $browser->downloadHeaders($name, $type, false, strlen($body)); + echo $body; + exit; + +case 'view_attach': + $render = $contents->renderMIMEPart($id, array('format' => 'full', 'type' => $ctype)); + $browser->downloadHeaders($render['name'], $render['type'], true, strlen($render['data'])); + echo $render['data']; + exit; + +case 'view_source': + $msg = $contents->fullMessageText(); + $browser->downloadHeaders('Message Source', 'text/plain', true, strlen($msg)); + echo $msg; + exit; + +case 'save_message': + $mime_headers = $contents->getHeaderOb(); + + if (($subject = $mime_headers->getValue('subject'))) { + $name = _sanitizeName($subject); + } else { + $name = 'saved_message'; + } + + if (!($from = Horde_MIME_Address::bareAddress($mime_headers->getValue('from')))) { + $from = '<>'; + } + + $date = new DateTime($mime_headers->getValue('date')); + + $body = 'From ' . $from . ' ' . $date->format('D M d H:i:s Y') . "\r\n" . $contents->fullMessageText(); + $browser->downloadHeaders($name . '.eml', 'message/rfc822', false, strlen($body)); + echo $body; + exit; +} -- 2.11.0