From 781bc0ae84d730063d6c467ae7f813a663aee890 Mon Sep 17 00:00:00 2001 From: Dmi3yy Date: Mon, 10 Dec 2018 16:08:29 +0200 Subject: [PATCH] 1.4.7 --- README.md | 3 +- assets/docs/changelog.txt | 332 ++ .../js/easy-ui/themes/modx/images/loading.gif | Bin 0 -> 1737 bytes assets/lib/APIHelpers.class.php | 48 +- assets/lib/Formatter/CSSMinify.php | 2 +- assets/lib/Formatter/SqlFormatter.php | 20 +- assets/lib/Helpers/Assets.php | 21 +- assets/lib/Helpers/Collection.php | 13 +- assets/lib/Helpers/Config.php | 13 +- assets/lib/Helpers/FS.php | 12 +- assets/lib/Helpers/Mailer.php | 18 +- assets/lib/Helpers/PHPThumb.php | 6 +- assets/lib/Helpers/Video.php | 16 +- assets/lib/MODxAPI/MODx.php | 65 +- assets/lib/MODxAPI/autoTable.abstract.php | 8 +- assets/lib/MODxAPI/modManagers.php | 36 +- assets/lib/MODxAPI/modResource.php | 2250 ++++----- assets/lib/MODxAPI/modUsers.php | 97 +- assets/lib/Module/Action.php | 2 +- assets/lib/Module/Helper.php | 4 +- assets/lib/Module/Template.php | 14 +- assets/lib/SimpleTab/controller.abstract.php | 6 +- assets/lib/SimpleTab/plugin.class.php | 19 +- assets/lib/SimpleTab/table.abstract.php | 2 +- assets/lib/class.modxRTEbridge.php | 14 +- assets/lib/class.summary.php | 10 +- assets/modules/docmanager/templates/main.tpl | 1 + .../modules/docmanager/templates/update.tpl | 1 + assets/modules/docmanager/tv.ajax.php | 10 +- assets/modules/store/core.php | 3 + assets/modules/store/css/style.css | 16 +- .../store/installer/instprocessor-fast.php | 34 +- .../modules/store/installer/instprocessor.php | 10 +- .../store/installer/sqlParser.class.php | 30 +- assets/modules/store/js/store.js | 2 +- assets/modules/store/lang/english.php | 6 +- assets/modules/store/lang/italian.php | 12 +- assets/modules/store/lang/nederlands-utf8.php | 6 + assets/modules/store/lang/nederlands.php | 6 + assets/modules/store/lang/russian-UTF8.php | 6 +- assets/modules/store/template/main.html | 4 +- assets/modules/store/update.php | 2 + .../plugins/codemirror/codemirror.plugin.php | 9 +- .../elementsintree/assets/txt_content.tpl | 119 +- .../elementsintree/includes/functions.inc.php | 369 +- ...nager_main_frame_header_html_block.inc.php | 31 +- .../on_manager_tree_prerender.inc.php | 23 +- .../includes/on_manager_tree_render.inc.php | 73 +- .../elementsintree/plugin.elementsintree.php | 85 +- .../extrascheck/CheckOutdated.class.php | 476 ++ .../OutdatedExtrasCheck.plugin.php | 64 + assets/plugins/extrascheck/lang/english.php | 27 - .../extrascheck/lang/english/core.inc.php | 33 + assets/plugins/extrascheck/lang/italian.php | 27 - .../extrascheck/lang/italian/core.inc.php | 32 + .../plugins/extrascheck/lang/russian-UTF8.php | 26 - .../lang/russian-UTF8/core.inc.php | 32 + assets/plugins/extrascheck/lang/spanish.php | 27 - .../extrascheck/lang/spanish/core.inc.php | 31 + assets/plugins/extrascheck/outdated.json | 71 + .../plugins/filesource/plugin.filesource.php | 35 +- assets/plugins/managermanager/mm.inc.php | 9 - .../plugins/managermanager/utilities.inc.php | 160 +- .../ddmultiplefields/ddmultiplefields.php | 15 +- .../ddselectdocuments/ddselectdocuments.php | 79 +- .../widgets/mm_hidefields/mm_hidefields.php | 2 +- .../mm_requirefields/mm_requirefields.php | 2 +- assets/plugins/qm/css/actionButtons.css | 170 +- assets/plugins/qm/css/navButtons.css | 182 +- assets/plugins/qm/css/style.css | 706 +-- assets/plugins/qm/qm.inc.php | 2560 +++++----- .../plugins/tinymce4/bridge.tinymce4.inc.php | 3 +- .../theme/theme.tinymce4.base.inc.php | 8 +- .../theme/theme.tinymce4.custom.inc.php | 17 +- .../theme/theme.tinymce4.full.inc.php | 4 +- assets/plugins/tinymce4/tinymce/langs/fr.js | 436 +- .../tinymce/plugins/modxlink/plugin.js | 1660 +++++++ .../tinymce/plugins/modxlink/plugin.min.js | 1546 +----- .../skins/darkness/content.inline.min.css | 1 + .../tinymce/skins/darkness/content.min.css | 2 + .../skins/darkness/content.mobile.min.css | 20 + .../skins/darkness/fonts/tinymce-mobile.woff | Bin 0 -> 4624 bytes .../skins/darkness/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes .../skins/darkness/fonts/tinymce-small.svg | 63 + .../skins/darkness/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes .../skins/darkness/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes .../tinymce/skins/darkness/fonts/tinymce.eot | Bin 0 -> 17572 bytes .../tinymce/skins/darkness/fonts/tinymce.svg | 131 + .../tinymce/skins/darkness/fonts/tinymce.ttf | Bin 0 -> 17408 bytes .../tinymce/skins/darkness/fonts/tinymce.woff | Bin 0 -> 17484 bytes .../tinymce/skins/darkness/img/anchor.gif | Bin 0 -> 53 bytes .../tinymce/skins/darkness/img/loader.gif | Bin 0 -> 2608 bytes .../tinymce/skins/darkness/img/object.gif | Bin 0 -> 152 bytes .../tinymce/skins/darkness/img/trans.gif | Bin 0 -> 43 bytes .../tinymce/skins/darkness/skin.ie7.min.css | 1 + .../tinymce/skins/darkness/skin.min.css | 1 + .../skins/darkness/skin.mobile.min.css | 2 + .../tinymce/skins/lightgray/content.min.css | 2 +- .../skins/lightgray/content.mobile.min.css | 20 + .../skins/lightgray/fonts/tinymce-mobile.woff | Bin 0 -> 4624 bytes .../skins/lightgray/skin.mobile.min.css | 2 + .../tinymce/themes/mobile/theme.min.js | 8 + .../tinymce4/tpl/tpl.tinymce4.config.html | 50 +- assets/plugins/updater/plugin.updater.php | 66 +- .../DocLister/core/DocLister.abstract.php | 68 +- .../DocLister/core/controller/onetable.php | 72 +- .../DocLister/core/controller/shopkeeper.php | 15 +- .../core/controller/site_content.php | 20 +- .../core/controller/site_content_menu.php | 9 +- .../core/controller/site_content_tags.php | 2 +- .../DocLister/core/extender/e.extender.inc | 84 +- .../extender/multicategories.extender.inc | 35 + .../core/extender/paginate.extender.inc | 636 +-- .../core/extender/prepare.extender.inc | 13 +- .../core/extender/summary.extender.inc | 52 +- .../DocLister/core/extender/tv.extender.inc | 16 +- .../DocLister/core/filter/private.filter.php | 2 +- .../DocLister/core/filter/tv.filter.php | 4 +- .../core/filterDocLister.abstract.php | 28 +- .../core/lang/english/paginate.inc.php | 2 - .../DocLister/lib/DLTemplate.class.php | 168 +- assets/snippets/DocLister/lib/DLphx.class.php | 1658 +++---- .../DocLister/snippet.DLBuildMenu.php | 104 - assets/snippets/DocLister/snippet.DLMenu.php | 3 + assets/snippets/FormLister/__autoload.php | 1 + .../FormLister/core/FormLister.abstract.php | 177 +- .../FormLister/core/controller/Form.php | 88 +- .../FormLister/core/controller/Login.php | 10 +- .../FormLister/core/controller/Profile.php | 14 +- .../FormLister/core/controller/Register.php | 10 +- .../FormLister/core/controller/Reminder.php | 2 +- .../core/lang/italian/activate.inc.php | 17 + .../core/lang/italian/content.inc.php | 20 + .../core/lang/italian/deleteContent.inc.php | 16 + .../core/lang/italian/deleteUser.inc.php | 13 + .../FormLister/core/lang/italian/form.inc.php | 17 + .../core/lang/italian/login.inc.php | 14 + .../core/lang/italian/mailchimp.inc.php | 13 + .../core/lang/italian/profile.inc.php | 14 + .../core/lang/italian/register.inc.php | 14 + .../core/lang/italian/reminder.inc.php | 17 + .../FormLister/docs/en/010_Controllers.md | 50 - .../FormLister/docs/en/020_Parameters.md | 298 -- .../FormLister/docs/en/030_Data_Validation.md | 132 - .../FormLister/docs/en/035_Captcha_Usage.md | 43 - .../FormLister/docs/en/040_Data_Output.md | 59 - .../FormLister/docs/en/050_Mail_Sending.md | 239 - .../docs/en/060_Authorizing_Users.md | 132 - .../docs/en/070_Registering_Users.md | 138 - .../docs/en/075_Activating_User_Profiles.md | 77 - .../docs/en/080_Editing_User_Profiles.md | 98 - .../docs/en/085_Deleting_Users_Profiles.md | 50 - .../docs/en/090_Reminding_Passwords.md | 143 - ...100_Creating_And_Editing_User_Documents.md | 166 - .../docs/en/105_Deleting_User_Documents.md | 97 - .../FormLister/docs/en/110_Lexicons.md | 32 - ...21\204\320\276\321\200\320\274\320\260.md" | 91 - ...20\273\320\265\320\275\320\270\321\217.md" | 140 - ...20\270\314\206\320\273\320\276\320\262.md" | 118 - ...20\277\321\207\320\265\320\270\314\206.md" | 85 - ...20\265\320\275\320\270\320\270\314\206.md" | 74 - ...20\276\320\273\320\265\320\270\314\206.md" | 148 - ...20\267\320\260\321\206\320\270\321\217.md" | 48 - ...21\200\320\260\321\206\320\270\321\217.md" | 98 - ...20\260\320\277\320\270\321\201\320\270.md" | 42 - ...20\276\320\273\320\265\320\270\314\206.md" | 131 - assets/snippets/FormLister/docs/history.md | 191 - ...20\273\320\273\320\265\321\200\321\213.md" | 50 - ...20\274\320\265\321\202\321\200\321\213.md" | 298 -- ...20\260\320\275\320\275\321\213\321\205.md" | 132 - ...20\272\320\260\320\277\321\207\320\270.md" | 175 - ...20\260\320\275\320\275\321\213\321\205.md" | 40 - ...20\277\320\270\321\201\320\265\320\274.md" | 237 - ...20\265\320\273\320\265\320\270\314\206.md" | 204 - ...20\265\320\273\320\265\320\270\314\206.md" | 142 - ...20\270\321\201\320\265\320\270\314\206.md" | 89 - ...20\260\321\202\320\265\320\273\321\217.md" | 99 - ...20\260\321\202\320\265\320\273\321\217.md" | 50 - ...20\265\320\273\321\217\320\274\320\270.md" | 148 - ...20\265\320\273\321\217\320\274\320\270.md" | 166 - ...20\265\320\273\321\217\320\274\320\270.md" | 97 - ...20\270\320\272\320\276\320\275\321\213.md" | 32 - .../snippets/FormLister/lib/FileValidator.php | 52 +- assets/snippets/FormLister/lib/Filters.php | 173 + assets/snippets/FormLister/lib/Lexicon.php | 4 +- assets/snippets/FormLister/lib/Validator.php | 60 +- .../lib/captcha/modxCaptcha/connector.php | 2 +- .../lib/captcha/modxCaptcha/modxCaptcha.php | 10 +- .../lib/captcha/modxCaptcha/noises/index.html | 2 + .../lib/captcha/modxCaptcha/noises/noise1.jpg | Bin 0 -> 9393 bytes .../lib/captcha/modxCaptcha/noises/noise2.jpg | Bin 0 -> 10565 bytes .../lib/captcha/modxCaptcha/noises/noise3.jpg | Bin 0 -> 6924 bytes .../lib/captcha/modxCaptcha/noises/noise4.jpg | Bin 0 -> 8259 bytes .../lib/captcha/modxCaptcha/ttf/ftb_____.ttf | Bin 0 -> 30820 bytes .../lib/captcha/reCaptcha/wrapper.php | 2 +- .../snippets/FormLister/plugin.userHelper.php | 12 +- assets/snippets/docinfo/snippet.docinfo.php | 66 +- assets/snippets/phpthumb/phpthumb.bmp.php | 140 +- assets/snippets/phpthumb/phpthumb.class.php | 1335 ++--- assets/snippets/phpthumb/phpthumb.filters.php | 874 ++-- .../snippets/phpthumb/phpthumb.functions.php | 341 +- assets/snippets/phpthumb/phpthumb.gif.php | 220 +- assets/snippets/phpthumb/phpthumb.ico.php | 64 +- assets/snippets/phpthumb/phpthumb.unsharp.php | 49 +- assets/snippets/phpthumb/snippet.phpthumb.php | 108 +- index.php | 4 +- install/actions/action_connection.php | 3 +- install/actions/action_mode.php | 3 +- install/actions/action_options.php | 7 +- install/actions/action_summary.php | 3 +- install/actions/tpl_connection.html | 570 +-- install/assets/plugins/ElementsInTree.tpl | 5 +- .../assets/plugins/OutdatedExtrasCheck.tpl | 306 +- install/assets/plugins/qm.tpl | 94 +- install/assets/plugins/tinymce4.tpl | 2 +- install/assets/plugins/updater.tpl | 46 +- install/assets/plugins/userHelper.tpl | 4 +- install/assets/snippets/DLMenu.tpl | 2 +- install/assets/snippets/DLSitemap.tpl | 2 +- install/assets/snippets/DLcrumbs.tpl | 2 +- install/assets/snippets/DocLister.tpl | 2 +- install/assets/snippets/FormLister.tpl | 2 +- install/assets/snippets/docinfo.tpl | 6 +- install/assets/snippets/phpthumb.tpl | 6 +- install/cli-install.php | 36 +- install/config.inc.tpl | 34 +- install/connection.collation.php | 3 +- install/connection.databasetest.php | 3 +- install/connection.servertest.php | 5 +- install/functions.php | 3 +- install/index.php | 1 + install/instprocessor.php | 44 +- install/lang/polish-utf8.inc.php | 38 +- install/lang/russian-UTF8.inc.php | 10 +- install/lang/spanish-utf8.inc.php | 54 +- install/setup.data.sql | 416 +- install/setup.info.php | 2 +- install/setup.sql | 2332 ++++----- install/sqlParser.class.php | 15 +- install/template.tpl | 90 +- .../actions/access_permissions.dynamic.php | 16 +- manager/actions/bkmanager.static.php | 20 +- .../actions/category_mgr/inc/Categories.php | 2 +- .../inc/Module_Categories_Manager.php | 2 +- .../actions/category_mgr/skin/main.tpl.phtml | 178 +- manager/actions/document_data.static.php | 26 +- manager/actions/eventlog.dynamic.php | 318 +- manager/actions/export_site.static.php | 2 +- manager/actions/files.dynamic.php | 10 +- manager/actions/help.static.php | 105 +- .../{01About_EVO.php => 01About_Title.phtml} | 2 +- ...ocumentation.php => 02Documentation.phtml} | 0 ...on_Notices.php => 03Version_Notices.phtml} | 0 .../{04Changelog.php => 04Changelog.phtml} | 0 .../actions/help/version_notices/1.4.2.php | 29 + .../actions/help/version_notices/1.4.3.php | 42 + .../actions/help/version_notices/1.4.4.php | 26 + .../actions/help/version_notices/1.4.5.php | 15 + .../actions/help/version_notices/1.4.6.php | 30 + .../actions/help/version_notices/1.4.7.php | 29 + manager/actions/import_site.static.php | 10 +- manager/actions/logging.static.php | 671 +-- manager/actions/messages.static.php | 3 +- manager/actions/modules.static.php | 300 +- manager/actions/move_document.dynamic.php | 2 +- manager/actions/mutate_categories.dynamic.php | 2 +- manager/actions/mutate_content.dynamic.php | 192 +- .../actions/mutate_htmlsnippet.dynamic.php | 2 +- .../actions/mutate_menuindex_sort.dynamic.php | 2 +- manager/actions/mutate_module.dynamic.php | 1455 +++--- .../mutate_module_resources.dynamic.php | 3 +- manager/actions/mutate_password.dynamic.php | 87 +- manager/actions/mutate_plugin.dynamic.php | 8 +- .../mutate_plugin_priority.dynamic.php | 2 +- manager/actions/mutate_role.dynamic.php | 5 +- manager/actions/mutate_settings.dynamic.php | 295 +- .../tab1_site_settings.inc.php | 104 +- .../tab3_user_settings.inc.php | 14 + .../tab4_manager_settings.inc.php | 155 +- .../tab5_security_settings.inc.php | 37 +- .../tab6_filemanager_settings.inc.php | 6 + .../tab7_filebrowser_settings.inc.php | 31 +- manager/actions/mutate_snippet.dynamic.php | 3 +- .../mutate_template_tv_rank.dynamic.php | 2 +- manager/actions/mutate_tv_rank.dynamic.php | 2 +- manager/actions/mutate_user.dynamic.php | 1577 +++--- manager/actions/mutate_web_user.dynamic.php | 7 +- manager/actions/resources/functions.inc.php | 10 +- .../actions/resources/mgrResources.class.php | 4 +- .../actions/resources/tab5_plugins.inc.php | 0 manager/actions/search.static.php | 179 +- manager/actions/site_schedule.static.php | 274 +- manager/actions/sysinfo.static.php | 304 +- manager/actions/user_management.static.php | 20 +- .../web_access_permissions.dynamic.php | 14 +- .../actions/web_user_management.static.php | 13 +- manager/actions/welcome.static.php | 1279 ++--- manager/frames/1.php | 1295 ++--- manager/frames/index.html | 2 +- manager/frames/mainmenu.php | 930 ++-- manager/frames/nodes.functions.inc.php | 8 +- manager/frames/tree.php | 148 +- manager/includes/accesscontrol.inc.php | 39 +- manager/includes/actionlist.inc.php | 6 +- manager/includes/active_user_locks.inc.php | 4 +- manager/includes/categories.inc.php | 8 +- manager/includes/config_check.inc.php | 2 +- manager/includes/controls/datagrid.class.php | 2 +- .../includes/controls/datasetpager.class.php | 2 +- .../includes/controls/phpmailer/PHPMailer.php | 203 +- manager/includes/controls/phpmailer/POP3.php | 2 +- manager/includes/controls/phpmailer/SMTP.php | 19 +- manager/includes/default_config.php | 13 +- .../includes/document.parser.class.inc.php | 482 +- manager/includes/error.class.inc.php | 2 +- .../extenders/dbapi.mysql.class.inc.php | 774 --- .../extenders/dbapi.mysqli.class.inc.php | 19 +- .../extenders/deprecated.functions.inc.php | 26 +- manager/includes/extenders/ex_dbapi.inc.php | 2 +- .../includes/extenders/export.class.inc.php | 12 +- .../includes/extenders/maketable.class.php | 4 +- .../extenders/manager.api.class.inc.php | 14 +- .../extenders/modifiers.class.inc.php | 29 +- .../extenders/modxmailer.class.inc.php | 5 +- .../extenders/phpcompat.class.inc.php | 2 +- manager/includes/footer.inc.php | 44 +- manager/includes/functions/actions/files.php | 574 +++ manager/includes/header.inc.php | 707 +-- manager/includes/lang/bulgarian.inc.php | 4 +- manager/includes/lang/chinese.inc.php | 4 +- manager/includes/lang/czech.inc.php | 4 +- manager/includes/lang/danish.inc.php | 4 +- manager/includes/lang/english.inc.php | 3004 ++++++------ .../lang/errormsg/spanish-utf8.inc.php | 38 + .../includes/lang/errormsg/spanish.inc.php | 6 + manager/includes/lang/finnish.inc.php | 4 +- manager/includes/lang/francais-utf8.inc.php | 4 +- manager/includes/lang/german.inc.php | 2844 ++++++----- manager/includes/lang/hebrew.inc.php | 4 +- manager/includes/lang/italian.inc.php | 3001 ++++++------ manager/includes/lang/japanese-utf8.inc.php | 2 +- manager/includes/lang/nederlands-utf8.inc.php | 2960 +++++------ manager/includes/lang/norsk.inc.php | 4 +- manager/includes/lang/persian.inc.php | 4 +- manager/includes/lang/polish-utf8.inc.php | 215 +- .../includes/lang/portuguese-br-utf8.inc.php | 4 +- manager/includes/lang/portuguese.inc.php | 4 +- manager/includes/lang/russian-UTF8.inc.php | 111 +- manager/includes/lang/spanish-utf8.inc.php | 382 +- manager/includes/lang/svenska-utf8.inc.php | 4 +- manager/includes/log.class.inc.php | 21 +- manager/includes/manager.lockout.inc.php | 34 + manager/includes/menu.class.inc.php | 2 +- manager/includes/preload.functions.inc.php | 163 +- manager/includes/protect.inc.php | 7 + manager/includes/secure_mgr_documents.inc.php | 2 +- manager/includes/secure_web_documents.inc.php | 2 +- manager/includes/sysalert.display.inc.php | 80 +- .../includes/template.parser.class.inc.php | 528 +- manager/includes/tmplvars.commands.inc.php | 4 +- manager/includes/tmplvars.format.inc.php | 4 +- manager/includes/tmplvars.inc.php | 12 +- manager/includes/veriword.php | 2 +- manager/includes/version.inc.php | 4 +- manager/index.php | 6 +- manager/media/browser/mcpuk/config.php | 92 +- manager/media/browser/mcpuk/core/autoload.php | 78 +- manager/media/browser/mcpuk/core/browser.php | 960 ++-- manager/media/browser/mcpuk/core/uploader.php | 186 +- manager/media/browser/mcpuk/css.php | 4 +- .../browser/mcpuk/js/FileAPI/FileAPI.exif.js | 69 + .../mcpuk/js/FileAPI/FileAPI.flash.camera.swf | Bin 0 -> 1635 bytes .../mcpuk/js/FileAPI/FileAPI.flash.image.swf | Bin 0 -> 2136 bytes .../mcpuk/js/FileAPI/FileAPI.flash.swf | Bin 0 -> 37071 bytes .../browser/mcpuk/js/FileAPI/FileAPI.html5.js | 3569 ++++++++++++++ .../mcpuk/js/FileAPI/FileAPI.html5.min.js | 3 + .../media/browser/mcpuk/js/FileAPI/FileAPI.js | 4361 +++++++++++++++++ .../browser/mcpuk/js/FileAPI/FileAPI.min.js | 3 + .../mcpuk/js/FileAPI/crossdomain.xml.example | 9 + .../mcpuk/js/FileAPI/jquery.fileapi.min.js | 2 + .../media/browser/mcpuk/js/browser/0bject.js | 2 +- .../browser/mcpuk/js/browser/dropUpload.js | 248 - .../media/browser/mcpuk/js/browser/files.js | 9 +- .../media/browser/mcpuk/js/browser/folders.js | 14 +- .../media/browser/mcpuk/js/browser/init.js | 6 +- .../media/browser/mcpuk/js/browser/misc.js | 13 +- .../media/browser/mcpuk/js/browser/toolbar.js | 115 - .../browser/mcpuk/js/browser/uploader.js | 157 + manager/media/browser/mcpuk/js/customEvent.js | 15 + .../mcpuk/js/lazyload/10.5.2/lazyload.min.js | 1 + .../mcpuk/js/lazyload/8.7.1/lazyload.min.js | 1 + manager/media/browser/mcpuk/lang/ru.php | 13 +- manager/media/browser/mcpuk/lib/class_gd.php | 3 +- .../media/browser/mcpuk/lib/class_image.php | 10 +- .../media/browser/mcpuk/lib/helper_dir.php | 2 +- .../media/browser/mcpuk/themes/evo/style.css | 271 +- .../media/browser/mcpuk/tpl/tpl_browser.php | 378 +- .../browser/mcpuk/tpl/tpl_javascript.php | 29 +- manager/media/browser/mcpuk/upload.php | 17 - manager/media/calendar/datepicker.inc.php | 2 +- manager/media/rss/extlib/Snoopy.class.inc | 25 +- .../script/air-datepicker/datepicker.inc.php | 4 +- manager/media/script/main.js | 463 ++ .../media/style/common/manager.lockout.tpl | 2 +- .../common/moo-datepicker/datepicker.inc.php | 4 +- .../media/style/common/spectrum/spectrum.css | 1028 ++-- manager/media/style/default/ajax.php | 1243 ++--- .../media/style/default/color.switcher.php | 340 +- .../style/default/css/color.switcher.css | 372 +- .../media/style/default/css/contextmenu.css | 25 +- manager/media/style/default/css/custom.css | 951 ++-- manager/media/style/default/css/fonts.css | 216 +- manager/media/style/default/css/forms.css | 145 +- manager/media/style/default/css/index.css | 20 +- manager/media/style/default/css/layout.css | 58 +- manager/media/style/default/css/main.css | 16 +- manager/media/style/default/css/mainmenu.css | 349 +- manager/media/style/default/css/page.css | 18 +- manager/media/style/default/css/tabpane.css | 76 +- manager/media/style/default/css/tree.css | 64 +- .../images/login/default/login-background.jpg | Bin 0 -> 201833 bytes .../images/login/default/login-logo.png | Bin 0 -> 5587 bytes .../images/misc/logo-navbar-left-white.png | Bin 0 -> 24430 bytes .../default/images/misc/logo-navbar-left.png | Bin 0 -> 25427 bytes .../default/images/misc/logo-navbar-white.png | Bin 0 -> 5867 bytes manager/media/style/default/index.html | 2 +- .../media/style/default/js/color.switcher.js | 562 +-- manager/media/style/default/js/modx.js | 66 +- manager/media/style/default/js/modx.min.js | 2 +- manager/media/style/default/login.tpl | 636 ++- .../media/style/default/manager.lockout.tpl | 387 +- .../default/snippets/welcome/RecentInfo.php | 103 + manager/media/style/default/style.css | 16 +- manager/media/style/default/style.php | 1028 ++-- manager/media/style/default/welcome.php | 48 +- manager/media/style/default/welcome.tpl | 68 +- .../processors/cache_sync.class.processor.php | 17 +- .../processors/delete_content.processor.php | 2 +- .../duplicate_content.processor.php | 6 +- .../duplicate_tmplvars.processor.php | 8 +- .../processors/execute_module.processor.php | 5 +- manager/processors/login.processor.php | 17 +- .../processors/move_document.processor.php | 2 +- manager/processors/save_content.processor.php | 593 +-- manager/processors/save_module.processor.php | 2 +- manager/processors/save_plugin.processor.php | 5 +- .../processors/save_template.processor.php | 4 +- .../processors/save_tmplvars.processor.php | 23 +- manager/processors/save_user.processor.php | 859 ++-- .../processors/save_web_user.processor.php | 685 +-- .../processors/undelete_content.processor.php | 2 +- .../user_documents_permissions.class.php | 2 +- vendor/.htaccess | 2 +- 453 files changed, 42074 insertions(+), 34620 deletions(-) create mode 100644 assets/js/easy-ui/themes/modx/images/loading.gif mode change 100755 => 100644 assets/lib/Formatter/CSSMinify.php mode change 100755 => 100644 assets/lib/Helpers/Assets.php mode change 100755 => 100644 assets/lib/Helpers/FS.php mode change 100755 => 100644 assets/lib/MODxAPI/modManagers.php mode change 100755 => 100644 assets/lib/Module/Template.php mode change 100755 => 100644 assets/modules/store/core.php mode change 100755 => 100644 assets/modules/store/css/style.css mode change 100755 => 100644 assets/modules/store/template/main.html create mode 100644 assets/modules/store/update.php mode change 100755 => 100644 assets/plugins/elementsintree/includes/on_manager_main_frame_header_html_block.inc.php mode change 100755 => 100644 assets/plugins/elementsintree/includes/on_manager_tree_prerender.inc.php create mode 100644 assets/plugins/extrascheck/CheckOutdated.class.php create mode 100644 assets/plugins/extrascheck/OutdatedExtrasCheck.plugin.php delete mode 100755 assets/plugins/extrascheck/lang/english.php create mode 100644 assets/plugins/extrascheck/lang/english/core.inc.php delete mode 100755 assets/plugins/extrascheck/lang/italian.php create mode 100644 assets/plugins/extrascheck/lang/italian/core.inc.php delete mode 100755 assets/plugins/extrascheck/lang/russian-UTF8.php create mode 100644 assets/plugins/extrascheck/lang/russian-UTF8/core.inc.php delete mode 100755 assets/plugins/extrascheck/lang/spanish.php create mode 100644 assets/plugins/extrascheck/lang/spanish/core.inc.php create mode 100644 assets/plugins/extrascheck/outdated.json create mode 100644 assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.js create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/content.inline.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/content.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/content.mobile.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-mobile.woff create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.eot create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.svg create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.ttf create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.woff create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.eot create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.svg create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.ttf create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.woff create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/img/anchor.gif create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/img/loader.gif create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/img/object.gif create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/img/trans.gif create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/skin.ie7.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/skin.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/darkness/skin.mobile.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/lightgray/content.mobile.min.css create mode 100644 assets/plugins/tinymce4/tinymce/skins/lightgray/fonts/tinymce-mobile.woff create mode 100644 assets/plugins/tinymce4/tinymce/skins/lightgray/skin.mobile.min.css create mode 100644 assets/plugins/tinymce4/tinymce/themes/mobile/theme.min.js mode change 100755 => 100644 assets/snippets/DocLister/core/controller/shopkeeper.php create mode 100644 assets/snippets/DocLister/core/extender/multicategories.extender.inc mode change 100755 => 100644 assets/snippets/DocLister/core/lang/english/paginate.inc.php delete mode 100755 assets/snippets/DocLister/snippet.DLBuildMenu.php mode change 100755 => 100644 assets/snippets/FormLister/core/controller/Login.php mode change 100755 => 100644 assets/snippets/FormLister/core/controller/Reminder.php create mode 100644 assets/snippets/FormLister/core/lang/italian/activate.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/content.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/deleteContent.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/deleteUser.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/form.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/login.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/mailchimp.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/profile.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/register.inc.php create mode 100644 assets/snippets/FormLister/core/lang/italian/reminder.inc.php delete mode 100755 assets/snippets/FormLister/docs/en/010_Controllers.md delete mode 100755 assets/snippets/FormLister/docs/en/020_Parameters.md delete mode 100755 assets/snippets/FormLister/docs/en/030_Data_Validation.md delete mode 100755 assets/snippets/FormLister/docs/en/035_Captcha_Usage.md delete mode 100755 assets/snippets/FormLister/docs/en/040_Data_Output.md delete mode 100755 assets/snippets/FormLister/docs/en/050_Mail_Sending.md delete mode 100755 assets/snippets/FormLister/docs/en/060_Authorizing_Users.md delete mode 100755 assets/snippets/FormLister/docs/en/070_Registering_Users.md delete mode 100755 assets/snippets/FormLister/docs/en/075_Activating_User_Profiles.md delete mode 100755 assets/snippets/FormLister/docs/en/080_Editing_User_Profiles.md delete mode 100755 assets/snippets/FormLister/docs/en/085_Deleting_Users_Profiles.md delete mode 100755 assets/snippets/FormLister/docs/en/090_Reminding_Passwords.md delete mode 100755 assets/snippets/FormLister/docs/en/100_Creating_And_Editing_User_Documents.md delete mode 100755 assets/snippets/FormLister/docs/en/105_Deleting_User_Documents.md delete mode 100755 assets/snippets/FormLister/docs/en/110_Lexicons.md delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/001_\320\237\321\200\320\276\321\201\321\202\320\260\321\217_\321\204\320\276\321\200\320\274\320\260.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/002_\320\255\320\273\320\265\320\274\320\265\320\275\321\202\321\213_\321\203\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\321\217.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/003_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\321\204\320\260\320\270\314\206\320\273\320\276\320\262.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/004_\320\244\320\276\321\200\320\274\320\260_\321\201_\320\272\320\260\320\277\321\207\320\265\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/005_\320\222\321\213\320\262\320\276\320\264_\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/006_\320\224\320\262\320\260_\320\275\320\260\320\261\320\276\321\200\320\260_\320\277\320\276\320\273\320\265\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/007_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" delete mode 100755 "assets/snippets/FormLister/docs/examples/ru/008_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217.md" delete mode 100644 "assets/snippets/FormLister/docs/examples/ru/009_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\320\276\320\270\314\206_\320\267\320\260\320\277\320\270\321\201\320\270.md" delete mode 100644 "assets/snippets/FormLister/docs/examples/ru/010_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206.md" delete mode 100755 assets/snippets/FormLister/docs/history.md delete mode 100755 "assets/snippets/FormLister/docs/ru/010_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/020_\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/030_\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\321\217_\320\264\320\260\320\275\320\275\321\213\321\205.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/035_\320\230\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\260\320\277\321\207\320\270.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264_\320\264\320\260\320\275\320\275\321\213\321\205.md" delete mode 100644 "assets/snippets/FormLister/docs/ru/050_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\320\277\320\270\321\201\320\265\320\274.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/060_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/070_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/075_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\321\213\321\205_\320\267\320\260\320\277\320\270\321\201\320\265\320\270\314\206.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/080_\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/085_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/090_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/100_\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265_\320\270_\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/105_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" delete mode 100755 "assets/snippets/FormLister/docs/ru/110_\320\233\320\265\320\272\321\201\320\270\320\272\320\276\320\275\321\213.md" mode change 100755 => 100644 assets/snippets/FormLister/lib/FileValidator.php create mode 100644 assets/snippets/FormLister/lib/Filters.php mode change 100755 => 100644 assets/snippets/FormLister/lib/Lexicon.php mode change 100755 => 100644 assets/snippets/FormLister/lib/Validator.php mode change 100755 => 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/connector.php mode change 100755 => 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/modxCaptcha.php create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/index.html create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise1.jpg create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise2.jpg create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise3.jpg create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise4.jpg create mode 100644 assets/snippets/FormLister/lib/captcha/modxCaptcha/ttf/ftb_____.ttf mode change 100755 => 100644 assets/snippets/FormLister/lib/captcha/reCaptcha/wrapper.php mode change 100755 => 100644 install/assets/plugins/userHelper.tpl mode change 100755 => 100644 install/assets/snippets/DLMenu.tpl mode change 100755 => 100644 install/assets/snippets/DLSitemap.tpl mode change 100755 => 100644 install/assets/snippets/DocLister.tpl mode change 100755 => 100644 install/assets/snippets/FormLister.tpl rename manager/actions/help/{01About_EVO.php => 01About_Title.phtml} (98%) mode change 100755 => 100644 rename manager/actions/help/{02Documentation.php => 02Documentation.phtml} (100%) mode change 100755 => 100644 rename manager/actions/help/{03Version_Notices.php => 03Version_Notices.phtml} (100%) mode change 100755 => 100644 rename manager/actions/help/{04Changelog.php => 04Changelog.phtml} (100%) mode change 100755 => 100644 create mode 100644 manager/actions/help/version_notices/1.4.2.php create mode 100644 manager/actions/help/version_notices/1.4.3.php create mode 100644 manager/actions/help/version_notices/1.4.4.php create mode 100644 manager/actions/help/version_notices/1.4.5.php create mode 100644 manager/actions/help/version_notices/1.4.6.php create mode 100644 manager/actions/help/version_notices/1.4.7.php mode change 100755 => 100644 manager/actions/resources/tab5_plugins.inc.php delete mode 100755 manager/includes/extenders/dbapi.mysql.class.inc.php mode change 100755 => 100644 manager/includes/extenders/dbapi.mysqli.class.inc.php create mode 100644 manager/includes/functions/actions/files.php create mode 100644 manager/includes/lang/errormsg/spanish-utf8.inc.php create mode 100644 manager/includes/lang/errormsg/spanish.inc.php create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.exif.js create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.flash.camera.swf create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.flash.image.swf create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.flash.swf create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.html5.js create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.html5.min.js create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.js create mode 100755 manager/media/browser/mcpuk/js/FileAPI/FileAPI.min.js create mode 100755 manager/media/browser/mcpuk/js/FileAPI/crossdomain.xml.example create mode 100755 manager/media/browser/mcpuk/js/FileAPI/jquery.fileapi.min.js delete mode 100755 manager/media/browser/mcpuk/js/browser/dropUpload.js create mode 100755 manager/media/browser/mcpuk/js/browser/uploader.js create mode 100755 manager/media/browser/mcpuk/js/customEvent.js create mode 100755 manager/media/browser/mcpuk/js/lazyload/10.5.2/lazyload.min.js create mode 100755 manager/media/browser/mcpuk/js/lazyload/8.7.1/lazyload.min.js delete mode 100755 manager/media/browser/mcpuk/upload.php create mode 100644 manager/media/script/main.js create mode 100644 manager/media/style/default/images/login/default/login-background.jpg create mode 100644 manager/media/style/default/images/login/default/login-logo.png create mode 100644 manager/media/style/default/images/misc/logo-navbar-left-white.png create mode 100644 manager/media/style/default/images/misc/logo-navbar-left.png create mode 100644 manager/media/style/default/images/misc/logo-navbar-white.png create mode 100644 manager/media/style/default/snippets/welcome/RecentInfo.php diff --git a/README.md b/README.md index 1f06112f..85bb568e 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,8 @@ Previous Releases: https://modx.com/download/evolution/previous-releases.html Extras: -https://extras.evolution-cms.com +https://extras.evo.im Documentation: +http://docs.evo.im https://evolution-docs.com diff --git a/assets/docs/changelog.txt b/assets/docs/changelog.txt index 40a4fd37..b421d790 100755 --- a/assets/docs/changelog.txt +++ b/assets/docs/changelog.txt @@ -1,6 +1,338 @@ This file shows the changes in recent releases of Evolution CMS. The most current release is usually the development release, and is only shown to give an idea of what's currently in the pipeline. + +Evolution CMS 1.4.7 (Dec 10, 2018) +* [GitHub:#92a15c0b6] - [fix] for php7: ddmultiplefields.php http://modx.im/blog/addons/4265.html#comment44232 (Dmi3yy) +* [GitHub:#fa8ba4219] - [fix] typo for 7.3 (Dmi3yy) +* [GitHub:#e132703e4] - [fix] phpthumb to 1.3.3 (Agel_Nash) +* [GitHub:#116f383be] - [fix] Php Thumb image cache path #896 (Nicola) +* [GitHub:#e4ef60a24] - [fix] Undefined index (Agel_Nash) +* [GitHub:#24bd8dd49] - [fix] Save module name and code, if module exist (issue #892) (Serg) +* [GitHub:#4afe71703] - [fix] Form attribute "action" fixes (issue #892) (Serg) +* [GitHub:#e88614d3c] - [fix] #892 duplicated element name issue (Serg) +* [GitHub:#e194b6b59] - [fix] sort modules by name (#887) (Nicola) +* [GitHub:#288a6f96b] - [fix] sort elements by name (#887) (Nicola) +* [GitHub:#e353554f3] - [fix] #888 The FileSource 0.1 is dependent on the mootools (Serg) +* [GitHub:#c5b019ca9] - [fix] #874 Remove fullstop at end of new password displayed on screen(Serg) +* [GitHub:#24eaa5a3d] - [Fix] #882 broken extras module link in RSS check (Nicola) +* [GitHub:#f644a6b1e] - [fix] #869 (missing 1 lexicon) (Agel_Nash) +* [GitHub:#30f27489c] - [fix] update ElementsInTree 1.5.10 (Agel_Nash) +* [GitHub:#403e590d1] - [fix] Update DocInfo and DocLister (Agel_Nash) +* [GitHub:#aa5086c01] - [improvement]colorpicker added (mnoskov) +* [GitHub:#eb2e24936] - [improvement] Enable Mootools Setting Option (Nicola) +* [GitHub:#d4200c3f2] - [improvement] rename extras.evolution-cms.com to extras.evo.im (Dmi3yy) +* [GitHub:#cadb97e2a] - [typo] format code save_user_processor (Serg) +* [GitHub:#d9b8e3c84] - [typo] fix typo in color mode name (Nicola) +* [GitHub:#8130c764c] - [typo] code tag for singleton example (Nicola) +* [GitHub:#91e36991d] - [delete] deprecated snippet DLBuildMenu (Pathologic) +* [GitHub:#a97b1b5f7] - [info] Update 1.4.7 Version Noticies (help) (Nicola) +* [GitHub:#9a174d0b2] - [info] 1.4.6 Version Noticies (help) (Nicola) +* [GitHub:#9e209b4ef] - [info] 1.4.5 Version Noticies (help) (Nicola) +* [GitHub:#bdce11559] - [info] 1.4.4 Version Noticies (help) (Nicola) +* [GitHub:#fd5dfab2c] - [info] 1.4.3 Version Noticies (help) (Nicola) +* [GitHub:#918a14bab] - [info] 1.4.2 Version Noticies (help) (Nicola) +* [GitHub:#a9830af28] - [lang] Polish translation (#891) (Piotr Matysiak) +* [GitHub:#640eea798] - [lang] Updated Italian Language (#861) (Nicola) +* [GitHub:#c28388868] - [lang] Resolve #869 (Agel_Nash) +* [GitHub:#c443927e4] - [lang] #859 (missing 6 manager, 2 installer) https://github.com/evolution-cms/evolution/issues/853#issuecomment-435479192 (Agel_Nash) + + +Evolution CMS 1.4.6 (Nov 02, 2018) +* [GitHub:#3d445623f] - OutdatedExtrasCheck add url for check Outdated (Dmi3yy) +* [GitHub:#4265bc48e] - Исправлена бага. Если создать ресурс через modResource и получить для него урл и Использовать AliasListing только для Папок [(aliaslistingfolder)] стояло Да то получал /{doc_id}.html вместо нормального урла (dzhuryn) +* [GitHub:#bad13152e] - Исправлена бага. Если создать ресурс через modResource и получить для него урл то в место /proizvoditeli/proizvoditel_1541140716/kolekciya_1541140716/tovar_1541140716.html получал /tovar_1541140716.html из за отсутствия alias_visible (dzhuryn) +* [GitHub:#9aa1c9369] - Remove debug (Agel_Nash) +* [GitHub:#c7cd2ccce] - Update OutdatedExtrasCheck (Agel_Nash) +* [GitHub:#d232ae622] - fix existes GET[q] (Serg) +* [GitHub:#d5827b63c] - moved menu item version in config menu (Serg) +* [GitHub:#cfbe776cd] - Code refactoring the OutdatedExtrasCheck plugin (Agel_Nash) +* [GitHub:#c0a82df48] - Update the OutdatedExtrasCheck lexicon (Agel_Nash) +* [GitHub:#e3d08940d] - Reformat source code the OutdatedExtrasCheck plugin (Agel_Nash) +* [GitHub:#5b837b592] - Up version OutdatedExtrasCheck (Agel_Nash) +* [GitHub:#31e1e651c] - Move source code the OutdatedExtrasCheck plugin into file (Agel_Nash) +* [GitHub:#907a44ea2] - Resolve #845 (Agel_Nash) +* [GitHub:#0a902dab3] - remove redundant property (Pathologic) +* [GitHub:#a23c162bc] - DocLister 2.4.0 (Agel_Nash) +* [GitHub:#ad905490f] - update Filters.php (Pathologic) +* [GitHub:#e5da5675c] - change PHP version in lexicons (Pathologic) +* [GitHub:#a315fe63f] - remove dot from password output (Pathologic) +* [GitHub:#faba1ef7a] - update FormLister to 1.8.0 (Pathologic) +* [GitHub:#917cdb6f9] - Relation to #876 (Agel_Nash) +* [GitHub:#57682bc13] - Refactor the send_errormail cell (Agel_Nash) +* [GitHub:#811f5903b] - #868 (Installer + Update date) (Agel_Nash) +* [GitHub:#11aad77cb] - Polish translations (Manager) (Piotr Matysiak) +* [GitHub:#39654dc2a] - Polish translations (Installer) (Piotr Matysiak) +* [GitHub:#49343d989] - Rename "Создать PHP-файл" to "Создать файл" (#872) (Ser1ous) +* [GitHub:#31ace520a] - Resolve #868 (Agel_Nash) +* [GitHub:#c3ddd2228] - Remove duplicate lexicon (Agel_Nash) +* [GitHub:#c907375de] - Replacing div to pre at the messageQuit method (Agel_Nash) +* [GitHub:#0442323ea] - Fix #825 (Agel_Nash) +* [GitHub:#2e247bfd9] - errorHandlers (Agel_Nash) +* [GitHub:#4d5566bb1] - Resolve #792 (Agel_Nash) +* [GitHub:#343ff4070] - Update phpthumb snippet (Agel_Nash) +* [GitHub:#6aea8b048] - phpthumb 1.7.15 (Agel_Nash) +* [GitHub:#a233a3ff6] - Update DL for compability https://github.com/evolution-cms/evolution/commit/49fab5242971a42eb225c3186238d5649f2e328e (Agel_Nash) +* [GitHub:#f1b0d559b] - fix JS event for radio[chunk_processor] (Serg) +* [GitHub:#de24eaa3f] - add JS event for radio[chunk_processor] (Serg) +* [GitHub:#dc02ce968] - MM removed unused script Tips (Serg) +* [GitHub:#64fccfefa] - fix #818 (Serg) +* [GitHub:#b59bc534d] - fix ip lenght for work with ipw6 #849 (#850) (Ser1ous) +* [GitHub:#49fab5242] - Fix #848 (Agel_Nash) +* [GitHub:#81e10ea54] - Fix #280 (Agel_Nash) +* [GitHub:#2ffdb4e68] - #834 (Agel_Nash) +* [GitHub:#ca4cb5498] - Fix #834 (Agel_Nash) +* [GitHub:#fcc2024e4] - addOutput method (Agel_Nash) +* [GitHub:#c57a5d844] - FIX Lighness Navbar Logo (#827) (Nicola) +* [GitHub:#ada15c795] - event reference fix (#844) (mnoskov) +* [GitHub:#99ba335ac] - fix style loginform in dark mode (Serg) +* [GitHub:#07ca6dea6] - remove mootools.js (Serg) +* [GitHub:#7043a5321] - fix sysalert.display.inc.php (Serg) +* [GitHub:#c2b01a5a6] - fix popup.wrap (Serg) +* [GitHub:#3f846155d] - phpMailer update to 6.0.5 (Dmi3yy) +* [GitHub:#47011d823] - up ajaxSearch version to 1.12.0 in OutdatedExtrasCheck (Dmi3yy) +* [GitHub:#402a5e99d] - Fix #806 (Agel_Nash) +* [GitHub:#3261911f4] - Update snippet.docinfo.php (#806) (Anton Kanopkin) +* [GitHub:#ab1c9ec5a] - events stack (mnoskov) +* [GitHub:#1e59390d4] - events stack (mnoskov) +* [GitHub:#3d15cb1c7] - removing debug statement (Agel_Nash) +* [GitHub:#05a80d9f8] - Fix JS error – typo (esszett) +* [GitHub:#e8025d501] - Fix #26 (Agel_Nash) +* [GitHub:#be22213f0] - Change checking of manager mode / Part 2 (Agel_Nash) +* [GitHub:#46eaa39e6] - Resolve review in PR #779 (Agel_Nash) +* [GitHub:#e4231e872] - Fix #793 (Agel_Nash) +* [GitHub:#3c5aa9b8a] - Fix #828 (Agel_Nash) +* [GitHub:#270ae36c5] - Fix mysql 8.0 bug with copy tv #809 (Ser1ous) +* [GitHub:#615841010] - Refactoring DocumentParser::getHiddenIdFromAlias() (Agel_Nash) +* [GitHub:#6fa6950f0] - Fix #790 (Agel_Nash) +* [GitHub:#1684460b4] - Fix #784 (Agel_Nash) +* [GitHub:#af38bca42] - Fix #797 (Agel_Nash) +* [GitHub:#288068bb1] - Fix #535 (Agel_Nash) +* [GitHub:#27dce74cc] - resolve #819 (Agel_Nash) +* [GitHub:#0ca34ccf0] - improved loginbox styles (Nicola) +* [GitHub:#082db9992] - Update tree.php (Mr B) +* [GitHub:#9a956458d] - [I] Add title for theme mode icon (Mr B) +* [GitHub:#5abf6da33] - fix style on login light (Nicola) +* [GitHub:#4e9a12007] - wrong position (Nicola) +* [GitHub:#c824e55f1] - manager_theme_mode_message #818 (Nicola) +* [GitHub:#cc47a7c1c] - fix light login styles (Nicola) +* [GitHub:#128e35b88] - fix light login fields (Nicola) +* [GitHub:#9d2a81ada] - Updated extrascheck plugin v1.4.5 (Nicola) +* [GitHub:#f4e8d1b76] - Login form style Settings #800 (Nicola) +* [GitHub:#f786a4180] - [F] Fix unable to uncheck permissions (Mr B) +* [GitHub:#9799c7e13] - fix browser resize issues of kcfinder (Pathologic) +* [GitHub:#5471839a9] - fix escape name components (Serg) +* [GitHub:#f4632e571] - fix escape for widget docs (Serg) +* [GitHub:#f6d50671e] - fix escape search result (Serg) +* [GitHub:#9201cd8ea] - fix view svg (Serg) +* [GitHub:#f99b291dd] - Update search.static.php (luigif) +* [GitHub:#373c31cfe] - Update search.static.php (luigif) +* [GitHub:#bc457c79a] - Rename 01About_EVO.php to 01About_Title.php (luigif) +* [GitHub:#6385ac4ba] - Update mutate_categories.dynamic.php (luigif) +* [GitHub:#841ac1ff9] - fix not working clientResize option (Pathologic) +* [GitHub:#473725d08] - fixed #794 (Serg) +* [GitHub:#dc005e5cd] - fix #794 (Serg) +* [GitHub:#85094c9e5] - fix #780 (Serg) +* [GitHub:#149fdb0a2] - Revert "fix #792" (Serg) +* [GitHub:#86eebdd5c] - fix #792 (Serg) +* [GitHub:#a176c043e] - fix notice php7 (Serg) +* [GitHub:#8e30682a4] - Fix some XSS (Agel_Nash) +* [GitHub:#a7fe1cfbc] - Security Fix (Agel_Nash) +* [GitHub:#b59d1f57b] - Fix #789 (Agel_Nash) +* [GitHub:#2b8aaa622] - Fix #788 (Agel_Nash) +* [GitHub:#1845b64b2] - html_escape function (Agel_Nash) +* [GitHub:#79edb9ef5] - Change checking of manager mode (thalegion) + + +Evolution CMS 1.4.5 (Aug 07, 2018) +* [GitHub:#18627a876] - [F] fix #693 Drag/drop sortable lists (Serg) +* [GitHub:#9cdf9e173] - [F] fix #770 Restyle manager lockout page (Serg) +* [GitHub:#c4a06df62] - [F] fix tree update "Save and Quit" (Serg) +* [GitHub:#f11a627fb] - [I] add file browser events (Pathologic) +* [GitHub:#6ef91bc82] - [I] add more events (Pathologic) +* [GitHub:#618f4313f] - [F] fix #692 Manager left menu charset issue (dmi3yy) +* [GitHub:#a6fc60de7] - [F] fix #755 cookie context and lifetime (dmi3yy) +* [GitHub:#08aad4482] - [F] fix doclister (Pathologic) +* [GitHub:#b219ec85e] - [I] add support mysql 8.0 (Ser1ous) +* [GitHub:#6198dc5ac] - [F] fix #624 Issues for manager with no 'Interface Access' setting (Pathologic) +* [GitHub:#a1c3d37ab] - [F] fix #769 plugin settings get lost while upgrading to newer version (Pathologic) +* [GitHub:#26a430eb6] - [F] fix #730 Retain Plugin Event Execution Order When Upgrading (Pathologic) +* [GitHub:#c8080596b] - [F] update FormLister to 1.7.21 (Pathologic) +* [GitHub:#db41ba731] - [F] fix #767 Web Users not showing in Online Users (Pathologic) +* [GitHub:#747985a47] - [F] fix #368 problem with dublicete snippet (Pathologic) +* [GitHub:#a0c7f264c] - [F] fix for work with mysql 8.0 (Ser1ous) +* [GitHub:#04863cd88] - [I] Update mutate_user.dynamic.php (Mr B) +* [GitHub:#83550c437] - [I] Add username label (Mr B) +* [GitHub:#3130df11c] - [F] fix memory leak (Pathologic) +* [GitHub:#61cd0c0eb] - [F] fix #763 Evolution 1.4.5RC2 Does not work logo replacement(Serg) +* [GitHub:#3bed43eb9] - [F] fix text color in darkness mode (Serg) +* [GitHub:#196e815be] - [F] Fix saving web users (Mr B) +* [GitHub:#841db700d] - [F] fix #552 Weird Chunk Rendering When minifyphp_incache is enabled (Pathologic) +* [GitHub:#ce83e5411] - [F] fix checkVersion (Pathologic) +* [GitHub:#7626ccfbd] - [I] update FormLister (Pathologic) +* [GitHub:#553ff5332] - [F] fix #519 2 functions parseProperties (Pathologic) +* [GitHub:#b637d20ce] - [F] fix #556 Cli mode (Pathologic) +* [GitHub:#86ecaec70] - [F] fix #300 OnDocPublished add automatic start (Pathologic) +* [GitHub:#ac3033f12] - [F] fix #233 Disabling function touch generates error "Cannot access or create thumbnails folder." in media manager (Pathologic) +* [GitHub:#5223b3ab4] - [I] alter recent info table (Mr B) +* [GitHub:#d753660e0] - [I] add OnFileBrowserInit event (Pathologic) +* [GitHub:#5e0a3510f] - [F] fix #749 not bloced user (Serg) +* [GitHub:#5af0c3c4f] - [I] cancel close tabs for components (Serg) +* [GitHub:#b8a27cad0] - [F] fix #758 modxlink plugin (Pathologic) +* [GitHub:#3db936dab] - [I] events of directory delete (Pathologic) +* [GitHub:#57da95fee] - [F] fix #736 backup button back into the dashboard (dmi3yy) +* [GitHub:#63b229bf3] - [F] fix #750 tinymce 4 - link to images folder, not only to files (Pathologic) +* [GitHub:#3032cd717] - [I] stop username wrap if has spaces (Mr B) +* [GitHub:#f3639c642] - [F] Fix saving web user permissions (Mr B) +* [GitHub:#8e083becb] - [I] add File Browser events, skip thumbnails creation (Pathologic) +* [GitHub:#471b9e41a] - [I] add more File Browser events (Pathologic) +* [GitHub:#8ad6402a6] - [F] Fix #737 (Serg) +* [GitHub:#4a1f6972d] - [I] Update mainmenu.css (Mr B) +* [GitHub:#bc539c054] - [I] Update style.php (Mr B) +* [GitHub:#7132beb6b] - [I] Add time to dashboard resource edit dates (Mr B) +* [GitHub:#118f69e47] - [R] russian-UTF8.inc.php #728 (Agel_Nash) +* [GitHub:#62285b7b4] - [R] Update english.inc.php (Mr B) +* [GitHub:#d5d170404] - [I] Add confirmation for purge plugins (Mr B) +* [GitHub:#4143fea6b] - [F] remove docs from core FormLister #366 (dmi3yy) +* [GitHub:#3d178f654] - [F] fix #727 Ampersand (&) in Site Name escaped infinitely (Serg) +* [GitHub:#b5b88d912] - [F] Save and close global tabs (Serg) +* [GitHub:#239fda8a2] - [F] Fix html (Serg) +* [GitHub:#4d909750f] - [F] fix validator in FormLister (dmi3yy) +* [GitHub:#44ff0ff10] - [F] Fix #722 Issues with managing users (Serg) +* [GitHub:#9a64f25aa] - [F] Fix style left-menu position (Serg) +* [GitHub:#51f9102e0] - [F] Fix theme ajax.php (Serg) +* [GitHub:#3eda7b7d6] - [F] Fix add images in settings (Serg) +* [GitHub:#005993658] - [F] Fix notice variables (Serg) +* [GitHub:#952c85d0a] - [I] Action name for dashboard (Mr B) +* [GitHub:#25140784a] - [I] Add date to active users hit time (Mr B) + + +Evolution CMS 1.4.4 (Jun 08, 2018) +* [GitHub:#5d177a4ea] - [I] Auto set Sender (Евгений Борисов) +* [GitHub:#f13d19d60] - [I] Move color switcher icon (Mr B) +* [GitHub:#ee5cb56b2] - [I] Remove css / colour switch conflict (Mr B) +* [GitHub:#32d2165c7] - [I] Update save_user.processor.php (Mr B) +* [GitHub:#a450d22af] - [I] Trim user/webuser email address (Mr B) +* [GitHub:#cdbeaf8b9] - [I] Update web_user_management.static.php (Mr B) +* [GitHub:#82cda9654] - [I] Replace gender on user/webuser tables (Mr B) +* [GitHub:#b9c3e474c] - [F] - Ignored if default class is extended (Евгений Борисов) +* [GitHub:#dda339c27] - [I] config_mutator.php (Agel_Nash) +* [GitHub:#cb55e213c] - [I] Define MODX_CLI (Agel_Nash) +* [GitHub:#a3fc8c57c] - [I] refactoring webAlertAndQuit (Agel_Nash) +* [GitHub:#bbefb5a28] - [I] $_lang['invalid_event_response'] (Agel_Nash) +* [GitHub:#c60c6a8e6] - [I] OnBeforeMinifyCss (Agel_Nash) +* [GitHub:#81c160eea] - [I] Native support mixed types in a output statement (Agel_Nash) +* [GitHub:#019462178] - [F] Conflict with DLTemplate::renderDoc() (Евгений Борисов) +* [GitHub:#0f0095dd7] - [F] style for 1200px - (dmi3yy) +* [GitHub:#21b31569c] - Update preload.functions.inc.php (Евгений Борисов) +* [GitHub:#d568f89d2] - [I] Code style (Agel_Nash) +* [GitHub:#769270b96] - [S] Cross-Site Scripting https://www.exploit-db.com/exploits/44775/ Site name field XSS fix: https://github.com/nathunandwani/ClipperCMS/commit/f286fbfa81dc3728dbbf6d9d817c8848edcad0b2 (Agel_Nash) +* [GitHub:#ddb47a7d0] - [F] Fix buttons transition and focus background-color (Serg) +* [GitHub:#5edac57c8] - [I] Moving tv parameters without a category to the General tab (Serg) +* [GitHub:#2950b760d] - [F] correct install finish (dmi3yy) +* [GitHub:#ebed40c60] - [F] undeclared variable (Serg) +* [GitHub:#f399f2ea8] - [F] broken OnParseProperties event (Pathologic) +* [GitHub:#ef95a606a] - [F] update DocLister and FormLister (dmi3yy) +* [GitHub:#8c873d61a] - [F] Update tab6_filemanager_settings.inc.php (Mr B) +* [GitHub:#3608ab90f] - [F] Update tab5_security_settings.inc.php (Mr B) +* [GitHub:#0c2fa0ddd] - [I] Add missing events for System Settings tabs (Mr B) +* [GitHub:#323e9cdc9] - [F] tab3 invokeEvent to last tr (Mr B) +* [GitHub:#8d1a0ebac] - [F] revert tab change (Mr B) +* [GitHub:#aff400f72] - [F] Correct message urls (Mr B) +* [GitHub:#6fa23c6a7] - [I] Show element icon (Mr B) +* [GitHub:#7b3692125] - [F] fix locked (Ser1ous) +* [GitHub:#e32d25e19] - [F] Fix strict mode bug on get tv list (Ser1ous) +* [GitHub:#67117ab6b] - [F] fix error log in phpmailer (Pathologic) +* [GitHub:#569a1533c] - [I] singleton (Pathologic) +* [GitHub:#946f7f5de] - [F] fix code format (Ser1ous) +* [GitHub:#bb174a09d] - [I] Ctr+Alt+L on PhpStorm (Ser1ous) +* [GitHub:#4c5a44233] - [I] Add event pub/unpub documents (Ser1ous) +* [GitHub:#99edc5fb5] - [F] Fix ios iframe scroll so only applied to ios (Mr B) +* [GitHub:#bd7237579] - [F] Update qm.inc.php (Mr B) +* [GitHub:#2905e58c7] - [I] Give custom QM buttons a title (Mr B) +* [GitHub:#d287e2b85] - [F] Update execute_module.processor.php (Mr B) +* [GitHub:#12c151b13] - [I] Make store fit iframe width (Mr B) +* [GitHub:#ccb4ac7a6] - [I] Change html check for scroller (Mr B) +* [GitHub:#e100bef00] - [I] iframe scroller for for Module if no need fix add to GET &api=1 (dmi3yy) +* [GitHub:#97179a3bd] - [I] Stacked table cells for system configuration (Piotr Matysiak) +* [GitHub:#84617f23b] - [I] Stacked table cells on small screens (Piotr Matysiak) +* [GitHub:#4db235560] - [F] fix for module iframe scrolling (Mr B) +* [GitHub:#c07af3d5f] - [F] Update modx.min.js (Mr B) +* [GitHub:#c84388af0] - [I] Restrict menu tree auto hide to small mobile (Mr B) +* [GitHub:#7acb549af] - [I] Polish translation (Piotr Matysiak) +* [GitHub:#dbd75f74f] - [I] move login page and menu setting to tab 4 (dmi3yy) +* [GitHub:#f266be8b6] - [F] TinyMCE darcness theme by default - need set lightgray by default #613 (dmi3yy) +* [GitHub:#5c6d120ed] - [F] update DocLister 2.3.15 (dmi3yy) +* [GitHub:#8aed61699] - [F] update FormLister to 1.7.19 (dmi3yy) +* [GitHub:#10a9a62b0] - [I] add params for manager_menu_position (dmi3yy) +* [GitHub:#816c645a0] - [F] welcome widget fix (Piotr Matysiak) +* [GitHub:#cc0e2294c] - [F] Fix manager restrict by day login (Mr B) +* [GitHub:#3658514a8] - [I] welcome widget change (Piotr Matysiak) +* [GitHub:#631286ca9] - [F] welcome and online widgets stacked (Piotr Matysiak) +* [GitHub:#a0198c207] - [F] #650 Display valid-hostnames after setting them (Deesen) +* [GitHub:#ffd97e6bf] - [F] #616 Fix TinyMCE4 custom-theme´s toolbars with global settings (Deesen) +* [GitHub:#657088dc1] - [F] Update .htaccess (Евгений Борисов) +* [GitHub:#454f4f975] - [F] Update index.css (Mr B) +* [GitHub:#bdc53cbf2] - [F] Update modx.min.js (Mr B) +* [GitHub:#135e9b047] - [F] Update modx.js (Mr B) +* [GitHub:#009388364] - [F] iOS iframe Scrolling/jumping (Mr B) +* [GitHub:#bec6c2f09] - [F] #643 Fix TinyMCE4 mobile-mode (Deesen) +* [GitHub:#c26f0eaa6] - [I] Add space to bottom of menu tree (Mr B) +* [GitHub:#8ecd06ecf] - [I] Remove 'Top how many' option as not used (Mr B) +* [GitHub:#30673e780] - refactor stay icons (Serg) +* [GitHub:#adc145943] - [S] Secutiy fix for old version (dmi3yy) +* [GitHub:#1c7f67c1b] - [F] #629 Fix issue with HTTP2/SSL & check connection to server (Deesen) +* [GitHub:#aa7892eea] - [F] store sql fixed (mnoskov) +* [GitHub:#4e6d54387] - [F] box-shadow (Piotr Matysiak) +* [GitHub:#57821c93c] - [I] Remove scrollbars in centered layout (Piotr Matysiak) +* [GitHub:#be9830839] - [I] Login form positions (Piotr Matysiak) +* [GitHub:#e6fec0458] - [F] Set loginbox position CSS class (Piotr Matysiak) +* [GitHub:#160590f23] - [I] Login page - set images placeholders (Piotr Matysiak) +* [GitHub:#009833f50] - [I] Manager Polish Translation update (Piotr Matysiak) +* [GitHub:#28a082472] - [I] Manager Polish Translation (Piotr Matysiak) +* [GitHub:#b69d83b50] - [I] Optimized images (Piotr Matysiak) +* [GitHub:#60cc4b893] - [I] First commit of new login page (Piotr Matysiak) +* [GitHub:#0e628b256] - [I] setting for customize login page (dmi3yy) +* [GitHub:#9b0f507c2] - [F] for TinyMCE skin by default lightgray (dmi3yy) +* [GitHub:#73ebfee5a] - [F] missing tabheader border (Piotr Matysiak) +* [GitHub:#0840e3a31] - [F] minify css default theme (Serg) +* [GitHub:#3cf94bf7d] - [F] width auto for select size=1 (Serg) +* [GitHub:#c2a4032d7] - [F] logo page help (Serg) +* [GitHub:#74da26055] - [F] class input-group-addon (Serg) +* [GitHub:#f8f91e41a] - [F] pagination darkness theme (Serg) +* [GitHub:#4eb2414d3] - [F] hover background-color mainMenu item version (Serg) +* [GitHub:#19b1f5534] - [F] fix for darkness mode (Piotr Matysiak) +* [GitHub:#27b5a37fb] - [F] Fix missing border (Piotr Matysiak) + +Evolution CMS 1.4.3 (Apr 04, 2018) +* [GitHub:#e10383b14] - update DocLister (dmi3yy) +* [GitHub:#2654f2c59] - update Formlister (dmi3yy) +* [GitHub:#64c4e9adf] - add select for theme mode in managers settings (dmi3yy) +* [GitHub:#44f8f6c88] - fix for not touch composer.json on update (dmi3yy) +* [GitHub:#4fd89e618] - add Darkness style for tinyMCE (dmi3yy) +* [GitHub:#8526ee4b5] - add styles for modes theme (Serg) +* [GitHub:#097a1076b] - more checks in cli mode (Pathologic) +* [GitHub:#6fb277896] - Missing introtext in Recent Resources (Piotr Matysiak) +* [GitHub:#998f3a2fa] - Fix #603 bug for resource tree scrolling (Piotr Matysiak) +* [GitHub:#f8c17c495] - moved JS code to a file manager/media/script/main.js (Serg) +* [GitHub:#060e49f1d] - fix empty template on save tv (Serg) +* [GitHub:#3fb227540] - [F] #577 Fix TinyMCE for [*introtext*] (Deesen) +* [GitHub:#1a5a68027] - Fix Extras buttons on 1.4.1 #571 (dmi3yy) +* [GitHub:#263737fbe] - add user_agent info to manager_log (dmi3yy) +* [GitHub:#36dfe9c6d] - write manager IP address to manager_log (dmi3yy) +* [GitHub:#8a3bee0ce] - new settings manager_theme_mode (dmi3yy) +* [GitHub:#745f633af] - setting color schema for manager template (dmi3yy) +* [GitHub:#f25ec1e59] - fix 577 TinyMCE introtext mode not work (dmi3yy) +* [GitHub:#d27e12bdc] - fix notice (Serg) +* [GitHub:#10ce1f270] - fix TinyMCE disable after update to 1.4.2 (dmi3yy) +* [GitHub:#dc06fb72f] - fix possible wrong path calculation (Pathologic) +* [GitHub:#b6fecddec] - [I] Wrap TinyMCE3 Toolbar (Mr B) +* [GitHub:#f55089ba7] - [F] Prevent long select option text values overflowing container (Mr B) +* [GitHub:#40f2a53d4] - add view ability for ini files in manager files (dmi3yy) +* [GitHub:#d3117b1c2] - fix demo site (Formlister, param reply-to) (dmi3yy) +* [GitHub:#a5aff20db] - formlister fix typo (dmi3yy) + + Evolution CMS 1.4.2 (Mar 23, 2018) * [GitHub:#6a33e6f2b] - now you can use argv like this: php cli-install.php --database_server=localhost --database=db --database_user=dbuser --database_password=dbpass --table_prefix=evo_ --cmsadmin=admin --cmsadminemail=dmi3yy@gmail.com --cmspassword=123456 --language=ru --mode=new --installData=n --removeInstall=y (dmi3yy) * [GitHub:#d8e7ec072] - run install file (dmi3yy) diff --git a/assets/js/easy-ui/themes/modx/images/loading.gif b/assets/js/easy-ui/themes/modx/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/assets/lib/APIHelpers.class.php b/assets/lib/APIHelpers.class.php index d4256ead..c387279b 100644 --- a/assets/lib/APIHelpers.class.php +++ b/assets/lib/APIHelpers.class.php @@ -80,7 +80,7 @@ public static function getkey($data, $key, $default = null, $validate = null) if (is_array($data) && (is_int($key) || is_string($key)) && $key !== '' && array_key_exists($key, $data)) { $out = $data[$key]; } - if (!empty($validate) && is_callable($validate)) { + if (! empty($validate) && is_callable($validate)) { $out = (($validate($out) === true) ? $out : $default); } return $out; @@ -94,14 +94,14 @@ public static function getkey($data, $key, $default = null, $validate = null) * @license GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.html * @param string $email проверяемый email * @param boolean $dns проверять ли DNS записи - * @return boolean Результат проверки почтового ящика + * @return boolean|string Результат проверки почтового ящика * @author Anton Shevchuk */ public static function emailValidate($email, $dns = true) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { list(, $domain) = explode("@", $email, 2); - if (!$dns || ($dns && checkdnsrr($domain, "MX") && checkdnsrr($domain, "A"))) { + if (! $dns || ($dns && checkdnsrr($domain, "MX") && checkdnsrr($domain, "A"))) { $error = false; } else { $error = 'dns'; @@ -232,7 +232,7 @@ public static function getUserIP($default = '127.0.0.1') case ($tmp = self::getEnv('HTTP_X_FORWARDED_FOR')): $out = $tmp; break; - case (!empty($_SERVER['REMOTE_ADDR'])): + case (! empty($_SERVER['REMOTE_ADDR'])): $out = $_SERVER['REMOTE_ADDR']; break; default: @@ -270,13 +270,14 @@ public static function sanitarTag( $out = str_replace( array_keys($chars), array_values($chars), - is_null($charset) ? $data : self::e($data, $charset) + $charset === null ? $data : self::e($data, $charset) ); break; case is_array($data): - $out = $data; - foreach ($out as $key => &$val) { - $val = self::sanitarTag($val, $charset, $chars); + $out = array(); + foreach ($data as $key => $val) { + $key = self::sanitarTag($key, $charset, $chars); + $out[$key] = self::sanitarTag($val, $charset, $chars); } break; default: @@ -381,6 +382,37 @@ public static function checkString($value, $minLen = 1, $alph = array(), $mixArr return $flag; } + /** + * @param $IDs + * @param string $sep + * @param integer[] $ignore + * @return array + * @throws Exception + */ + public static function cleanIDs($IDs, $sep = ',', $ignore = array()) + { + $out = array(); + if (!is_array($IDs)) { + if (is_scalar($IDs)) { + $IDs = explode($sep, $IDs); + } else { + $IDs = array(); + throw new Exception('Invalid IDs list
' . print_r($IDs, 1) . '
'); + } + } + foreach ($IDs as $item) { + $item = trim($item); + if (is_scalar($item) && (int)$item >= 0) { //Fix 0xfffffffff + if (empty($ignore) || !\in_array((int)$item, $ignore, true)) { + $out[] = (int)$item; + } + } + } + $out = array_unique($out); + + return $out; + } + /** * Переменовывание элементов массива * diff --git a/assets/lib/Formatter/CSSMinify.php b/assets/lib/Formatter/CSSMinify.php old mode 100755 new mode 100644 index 821aa813..1f72c60f --- a/assets/lib/Formatter/CSSMinify.php +++ b/assets/lib/Formatter/CSSMinify.php @@ -6,7 +6,7 @@ class CSSMinify public function __construct($cssFilesPath = array()) { - if (is_array($cssFilesPath) && !empty($cssFilesPath)) { + if (is_array($cssFilesPath) && ! empty($cssFilesPath)) { $this->cssPath = $cssFilesPath; } } diff --git a/assets/lib/Formatter/SqlFormatter.php b/assets/lib/Formatter/SqlFormatter.php index ccc0a963..50f795cb 100644 --- a/assets/lib/Formatter/SqlFormatter.php +++ b/assets/lib/Formatter/SqlFormatter.php @@ -834,7 +834,7 @@ protected static function getNextToken($string, $previous = null) } // Non-quoted variable name else { preg_match('/^(' . $string[0] . '[a-zA-Z0-9\._\$]+)/', $string, $matches); - if (!empty($matches)) { + if (! empty($matches)) { $ret[self::TOKEN_VALUE] = $matches[1]; } } @@ -863,7 +863,7 @@ protected static function getNextToken($string, $previous = null) // A reserved word cannot be preceded by a '.' // this makes it so in "mytable.from", "from" is not considered a reserved word - if (!$previous || !isset($previous[self::TOKEN_VALUE]) || $previous[self::TOKEN_VALUE] !== '.') { + if (! $previous || !isset($previous[self::TOKEN_VALUE]) || $previous[self::TOKEN_VALUE] !== '.') { $upper = strtoupper($string); // Top Level Reserved Word if (preg_match('/^(' . self::$regex_reserved_toplevel . ')($|\s|' . self::$regex_boundaries . ')/', $upper, @@ -1158,7 +1158,7 @@ public static function format($string, $highlight = true) $return = rtrim($return, ' '); } - if (!$inline_parentheses) { + if (! $inline_parentheses) { $increase_block_indent = true; // Add a newline after the parentheses $newline = true; @@ -1191,7 +1191,7 @@ public static function format($string, $highlight = true) } // Add a newline before the closing parentheses (if not already added) - if (!$added_newline) { + if (! $added_newline) { $return .= "\n" . str_repeat($tab, $indent_level); } } // Top level reserved words start a new line and increase the special indent level @@ -1208,7 +1208,7 @@ public static function format($string, $highlight = true) // Add a newline after the top level reserved word $newline = true; // Add a newline before the top level reserved word (if not already added) - if (!$added_newline) { + if (! $added_newline) { $return .= "\n" . str_repeat($tab, $indent_level); } // If we already added a newline, redo the indentation since it may be different now else { @@ -1222,14 +1222,14 @@ public static function format($string, $highlight = true) $highlighted = preg_replace('/\s+/', ' ', $highlighted); } //if SQL 'LIMIT' clause, start variable to reset newline - if ($token[self::TOKEN_VALUE] === 'LIMIT' && !$inline_parentheses) { + if ($token[self::TOKEN_VALUE] === 'LIMIT' && ! $inline_parentheses) { $clause_limit = true; } } // Checks if we are out of the limit clause elseif ($clause_limit && $token[self::TOKEN_VALUE] !== "," && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_NUMBER && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) { $clause_limit = false; } // Commas start a new line (unless within inline parentheses or SQL 'LIMIT' clause) - elseif ($token[self::TOKEN_VALUE] === ',' && !$inline_parentheses) { + elseif ($token[self::TOKEN_VALUE] === ',' && ! $inline_parentheses) { //If the previous TOKEN_VALUE is 'LIMIT', resets new line if ($clause_limit === true) { $newline = false; @@ -1241,7 +1241,7 @@ public static function format($string, $highlight = true) } // Newline reserved words start a new line elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_NEWLINE) { // Add a newline before the reserved word (if not already added) - if (!$added_newline) { + if (! $added_newline) { $return .= "\n" . str_repeat($tab, $indent_level); } @@ -1335,7 +1335,7 @@ public static function splitQuery($string) foreach ($tokens as $token) { // If this is a query separator if ($token[self::TOKEN_VALUE] === ';') { - if (!$empty) { + if (! $empty) { $queries[] = $current_query . ';'; } $current_query = ''; @@ -1351,7 +1351,7 @@ public static function splitQuery($string) $current_query .= $token[self::TOKEN_VALUE]; } - if (!$empty) { + if (! $empty) { $queries[] = trim($current_query); } diff --git a/assets/lib/Helpers/Assets.php b/assets/lib/Helpers/Assets.php old mode 100755 new mode 100644 index 73829d61..3e4f5efd --- a/assets/lib/Helpers/Assets.php +++ b/assets/lib/Helpers/Assets.php @@ -12,8 +12,10 @@ class AssetsHelper * @var \DocumentParser * @access protected */ - protected $modx = null; - protected $fs = null; + protected $modx; + + /** @var \Helpers\FS */ + protected $fs; /** * @var AssetsHelper cached reference to singleton instance @@ -52,7 +54,6 @@ private function __construct(DocumentParser $modx) */ private function __clone() { - } /** @@ -62,7 +63,6 @@ private function __clone() */ private function __wakeup() { - } /** @@ -94,12 +94,12 @@ public function registerJQuery() public function registerScript($name, $params) { $out = ''; - if (!isset($this->modx->loadedjscripts[$name])) { + if (! isset($this->modx->loadedjscripts[$name])) { $src = $params['src']; - $remote = strpos($src, "http") !== false; - if (!$remote) { + $remote = strpos($src, 'http') === 0 || strpos($src, '//') === 0; + if (! $remote) { $src = $this->modx->config['site_url'] . $src; - if (!$this->fs->checkFile($params['src'])) { + if (! $this->fs->checkFile($params['src'])) { $this->modx->logEvent(0, 3, 'Cannot load ' . $src, 'Assets helper'); return $out; @@ -116,7 +116,6 @@ public function registerScript($name, $params) } $this->modx->loadedjscripts[$name] = $params; - } return $out; @@ -129,7 +128,9 @@ public function registerScript($name, $params) public function registerScriptsList($list = array()) { $out = ''; - if (!is_array($list)) return $out; + if (! \is_array($list)) { + return $out; + } foreach ($list as $script => $params) { $out .= $this->registerScript($script, $params); diff --git a/assets/lib/Helpers/Collection.php b/assets/lib/Helpers/Collection.php index a68ddc37..fbae5957 100644 --- a/assets/lib/Helpers/Collection.php +++ b/assets/lib/Helpers/Collection.php @@ -93,7 +93,7 @@ public function partition(Closure $p) /** * @param $offset - * @param null $length + * @param null|int $length * @return array */ public function slice($offset, $length = null) @@ -132,7 +132,7 @@ public function append($value) /** * @param $data - * @param null $id + * @param null|int|string $id * @return $this */ public function add($data, $id = null) @@ -280,10 +280,13 @@ public function offsetGet($offset) */ public function offsetSet($offset, $value) { - if (! isset($offset)) { - return $this->add($value); + if ($offset !== null) { + $this->set($offset, $value); + } else { + $this->add($value); } - $this->set($offset, $value); + + return $this; } /** diff --git a/assets/lib/Helpers/Config.php b/assets/lib/Helpers/Config.php index e8166c21..f82b5367 100644 --- a/assets/lib/Helpers/Config.php +++ b/assets/lib/Helpers/Config.php @@ -10,7 +10,8 @@ class Config { private $_cfg = array(); - protected $fs = null; + /** @var FS */ + protected $fs; protected $path = ''; /** @@ -20,7 +21,7 @@ class Config */ public function __construct($cfg = array()) { - if (!empty($cfg)) { + if (! empty($cfg)) { $this->setConfig($cfg); } $this->fs = FS::getInstance(); @@ -69,7 +70,9 @@ public function loadConfig($name) if ($this->fs->checkFile($configFile)) { $json = file_get_contents(MODX_BASE_PATH . $configFile); - $config = array_merge($config, jsonHelper::jsonDecode($json, array('assoc' => true), true)); + /** @var array $json */ + $json = jsonHelper::jsonDecode($json, array('assoc' => true), true); + $config = array_merge($config, $json); } } @@ -90,7 +93,7 @@ public function getConfig() /** * Сохранение массива настроек * @param array $cfg массив настроек - * @return int результат сохранения настроек + * @return int|bool результат сохранения настроек */ public function setConfig($cfg, $overwrite = false) { @@ -106,7 +109,7 @@ public function setConfig($cfg, $overwrite = false) /** * @param $name - * @param null $def + * @param mixed $def * @return mixed */ public function getCFGDef($name, $def = null) diff --git a/assets/lib/Helpers/FS.php b/assets/lib/Helpers/FS.php old mode 100755 new mode 100644 index 67310ae8..3c8db115 --- a/assets/lib/Helpers/FS.php +++ b/assets/lib/Helpers/FS.php @@ -107,7 +107,7 @@ public function takeFileName($file) /** * @param $file - * @param bool $lower + * @param bool $lower * @return string */ public function takeFileExt($file, $lower = true) @@ -127,7 +127,7 @@ public function checkFile($file) { $f = is_scalar($file) ? MODX_BASE_PATH . $this->relativePath($file) : ''; - return (!empty($f) && is_file($f) && is_readable($f)); + return (! empty($f) && is_file($f) && is_readable($f)); } /** @@ -138,7 +138,7 @@ public function checkDir($path) { $f = is_scalar($path) ? $this->relativePath($path) : ''; - return (!empty($f) && is_dir(MODX_BASE_PATH . $f) && is_readable(MODX_BASE_PATH . $f)); + return (! empty($f) && is_dir(MODX_BASE_PATH . $f) && is_readable(MODX_BASE_PATH . $f)); } /** @@ -152,14 +152,14 @@ public function fileSize($file, $format = false) if ($this->checkFile($file)) { $out = filesize(MODX_BASE_PATH . $this->relativePath($file)); } - + if($format === true) $format = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); if (is_array($format)) { $size = $out > 0 ? floor(log($out, 1024)) : 0; $type = isset($format[$size]) ? ' '.$format[$size] : ''; $out = number_format($out / pow(1024, $size), 2, '.', ',') . $type; } - + return $out; } @@ -228,7 +228,7 @@ public function takeFileMIME($file) */ public function makeDir($path, $perm = 0755) { - if (!$this->checkDir($path)) { + if (! $this->checkDir($path)) { $path = MODX_BASE_PATH . $this->relativePath($path); $flag = mkdir($path, $this->toOct($perm), true); } else { diff --git a/assets/lib/Helpers/Mailer.php b/assets/lib/Helpers/Mailer.php index 397fa01b..c4ab8c76 100644 --- a/assets/lib/Helpers/Mailer.php +++ b/assets/lib/Helpers/Mailer.php @@ -17,8 +17,8 @@ class Mailer /** * @var MODxMailer $mail */ - protected $mail = null; - protected $modx = null; + protected $mail; + protected $modx; public $config = array(); protected $debug = false; protected $queuePath = 'assets/cache/mail/'; @@ -43,7 +43,7 @@ public function __construct(DocumentParser $modx, $cfg, $debug = false) { $this->modx = $modx; $this->noemail = (bool)(isset($cfg['noemail']) ? $cfg['noemail'] : 0); - if (!$this->noemail) { + if (! $this->noemail) { $this->mail = new MODxMailer(); if (method_exists('MODxMailer', 'init')) { $this->mail->init($modx); @@ -61,7 +61,7 @@ public function __construct(DocumentParser $modx, $cfg, $debug = false) */ public function addAddressToMailer($type, $addr) { - if (!$this->noemail && !empty($addr)) { + if (! $this->noemail && ! empty($addr)) { $a = array_filter(array_map('trim', explode(',', $addr))); foreach ($a as $address) { switch ($type) { @@ -89,7 +89,7 @@ public function addAddressToMailer($type, $addr) */ public function attachFiles($filelist = array()) { - if (!$this->noemail) { + if (! $this->noemail) { $contentType = "application/octetstream"; foreach ($filelist as $file) { if (is_file($file['filepath']) && is_readable($file['filepath'])) { @@ -108,7 +108,7 @@ public function attachFiles($filelist = array()) public function send($report) { //если отправлять некуда или незачем, то делаем вид, что отправили - if (!$this->getCFGDef('to') || $this->noemail) { + if (! $this->getCFGDef('to') || $this->noemail) { return true; } elseif (empty($report)) { return false; @@ -127,12 +127,12 @@ public function send($report) /** * @param $report - * @return bool + * @return bool|string */ public function toQueue($report) { //если отправлять некуда или незачем, то делаем вид, что отправили - if (!$this->getCFGDef('to') || $this->noemail) { + if (! $this->getCFGDef('to') || $this->noemail) { return true; } elseif (empty($report)) { return false; @@ -165,7 +165,7 @@ public function toQueue($report) */ public function setQueuePath($path = '') { - if (!empty($path)) { + if (! empty($path)) { $this->queuePath = $path; return true; } else { diff --git a/assets/lib/Helpers/PHPThumb.php b/assets/lib/Helpers/PHPThumb.php index 508c8924..98fc1b48 100644 --- a/assets/lib/Helpers/PHPThumb.php +++ b/assets/lib/Helpers/PHPThumb.php @@ -10,8 +10,10 @@ class PHPThumb { - private $thumb = null; - protected $fs = null; + /** @var \phpthumb */ + private $thumb; + /** @var FS */ + protected $fs; public $debugMessages = ''; /** diff --git a/assets/lib/Helpers/Video.php b/assets/lib/Helpers/Video.php index 315826d1..842c920b 100644 --- a/assets/lib/Helpers/Video.php +++ b/assets/lib/Helpers/Video.php @@ -90,7 +90,7 @@ class Video */ public function __construct($link = null, $autostart = true, $info = false) { - if (!empty($link)) { + if (! empty($link)) { $this->setLink($link); $this->setInfo($info); if ($autostart) { @@ -181,10 +181,10 @@ public function setLink($link) /** Обработка ссылки. Возвращает идентификатор видеохостинга или false */ public function process($link = null, $info = null) { - if (!empty($link)) { + if (! empty($link)) { $this->setLink($link); } - if (!empty($info)) { + if (! empty($info)) { $this->setInfo($info); } @@ -208,11 +208,11 @@ public function process($link = null, $info = null) /** Скачать превью. Если не указать имя файла для записи - функция вернет содержимое файла */ public function fetchImage($filename = null) { - if (!$url = $this->getImage()) { + if (! $url = $this->getImage()) { return false; } - if (!$res = $this->fetchPage($url)) { + if (! $res = $this->fetchPage($url)) { return false; } @@ -228,7 +228,7 @@ protected function cleanLink() $this->link = 'http://' . $this->link; } - if (!$this->link_parts = parse_url($this->link)) { + if (! $this->link_parts = parse_url($this->link)) { return false; } @@ -244,7 +244,7 @@ protected function maybeYoutube() if ('youtube.com' == $h) { parse_str($this->link_parts['query'], $q); - if ('/watch' == $p && !empty($q['v'])) { + if ('/watch' == $p && ! empty($q['v'])) { return $this->foundYoutube($q['v']); } if (0 === strpos($p, '/embed/')) { @@ -396,7 +396,7 @@ public function getEmbed($options) $class = isset($options['class']) ? $options['class'] : ''; $url = $this->getVideo($autoplay); - if (!empty($class)) { + if (! empty($class)) { $class = ' class="' . $class . '"'; } diff --git a/assets/lib/MODxAPI/MODx.php b/assets/lib/MODxAPI/MODx.php index 207de94f..67eae07d 100644 --- a/assets/lib/MODxAPI/MODx.php +++ b/assets/lib/MODxAPI/MODx.php @@ -90,9 +90,9 @@ abstract class MODxAPI extends MODxAPIhelpers protected $default_field = array(); /** - * @var null|integer|string + * @var mixed */ - protected $id = null; + protected $id; /** * @var array @@ -198,11 +198,11 @@ public function getDefaultFields() protected function getTime($value) { $value = trim($value); - if (!empty($value)) { - if (!is_numeric($value)) { + if (! empty($value)) { + if (! is_numeric($value)) { $value = (int)strtotime($value); } - if (!empty($value)) { + if (! empty($value)) { $value += $this->modxConfig('server_offset_time'); } } @@ -226,7 +226,7 @@ final public function modxConfig($name, $default = null) */ public function addQuery($q) { - if (is_scalar($q) && !empty($q)) { + if (is_scalar($q) && ! empty($q)) { $this->_query[] = $q; } @@ -260,7 +260,7 @@ final public function query($SQL) */ final public function escape($value) { - if (!is_scalar($value)) { + if (! is_scalar($value)) { $value = ''; } else { $value = $this->modx->db->escape($value); @@ -292,7 +292,7 @@ final public function invokeEvent($name, $data = array(), $flag = false) */ final public function getInvokeEventResult($name, $data = array(), $flag = null) { - $flag = (isset($flag) && $flag != '') ? (bool)$flag : false; + $flag = (isset($flag) && $flag !== '') ? (bool)$flag : false; return $flag ? $this->modx->invokeEvent($name, $data) : false; } @@ -400,7 +400,7 @@ public function switchObject($id) //Если уже загружен объект, с которым мы хотим временно поработать case ($this->getID() == $id && $id): //Если $id не указан, но уже загружен какой-то объект - case (!$id && null !== $this->getID()): + case (! $id && null !== $this->getID()): default: $obj = $this; break; @@ -435,7 +435,7 @@ public function hasIgnore() */ public function set($key, $value) { - if ((is_scalar($value) || $this->isJsonField($key)) && is_scalar($key) && !empty($key)) { + if ((is_scalar($value) || $this->isJsonField($key)) && is_scalar($key) && ! empty($key)) { $this->field[$key] = $value; } @@ -484,7 +484,7 @@ public function fromArray($data) */ final protected function Uset($key, $id = '') { - if (!isset($this->field[$key])) { + if (! isset($this->field[$key])) { $tmp = "`{$key}`=''"; $this->log[] = "{$key} is empty"; } else { @@ -494,7 +494,7 @@ final protected function Uset($key, $id = '') throw new Exception("{$key} is invalid
" . print_r($this->field[$key], true) . "
"); } } - if (!empty($tmp) && $this->isChanged($key)) { + if (! empty($tmp) && $this->isChanged($key)) { if ($id == '') { $this->set[] = $tmp; } else { @@ -528,7 +528,7 @@ public function store($data = array()) */ public function rollback($key = '') { - if (!empty($key) && isset($this->store[$key])) { + if (! empty($key) && isset($this->store[$key])) { $this->set($key, $this->store[$key]); } else { $this->fromArray($this->store); @@ -545,7 +545,7 @@ public function rollback($key = '') */ public function isChanged($key) { - $flag = !isset($this->store[$key]) || (isset($this->store[$key]) && $this->store[$key] != $this->field[$key]); + $flag = ! isset($this->store[$key]) || (isset($this->store[$key]) && $this->store[$key] != $this->field[$key]); return $flag; } @@ -559,26 +559,7 @@ public function isChanged($key) */ final public function cleanIDs($IDs, $sep = ',', $ignore = array()) { - $out = array(); - if (!is_array($IDs)) { - if (is_scalar($IDs)) { - $IDs = explode($sep, $IDs); - } else { - $IDs = array(); - throw new Exception('Invalid IDs list
' . print_r($IDs, 1) . '
'); - } - } - foreach ($IDs as $item) { - $item = trim($item); - if (is_scalar($item) && (int)$item >= 0) { //Fix 0xfffffffff - if (!empty($ignore) && in_array((int)$item, $ignore, true)) { - $this->log[] = 'Ignore id ' . (int)$item; - } else { - $out[] = (int)$item; - } - } - } - $out = array_unique($out); + $out = APIhelpers::cleanIDs($IDs, $sep, $ignore); return $out; } @@ -591,7 +572,7 @@ final public function cleanIDs($IDs, $sep = ',', $ignore = array()) */ final public function fromJson($data, $callback = null) { - if (is_scalar($data) && !empty($data)) { + if (is_scalar($data) && ! empty($data)) { $json = json_decode($data); } else { throw new Exception("json is not string with json data"); @@ -673,7 +654,7 @@ public function toArray($prefix = '', $suffix = '', $sep = '_') $out = array(); $fields = $this->field; $fields[$this->fieldPKName()] = $this->getID(); - if ($tpl != $plh) { + if ($tpl !== $plh) { foreach ($fields as $key => $value) { $out[str_replace($plh, $key, $tpl)] = $value; } @@ -709,7 +690,7 @@ final public function makeTable($table) */ final public function sanitarIn($data, $sep = ',') { - if (!is_array($data)) { + if (! is_array($data)) { $data = explode($sep, $data); } $out = array(); @@ -751,11 +732,7 @@ public function checkUnique($table, $field, $PK = 'id') if ($where != '') { $sql = $this->query("SELECT `" . $this->escape($PK) . "` FROM " . $this->makeTable($table) . " WHERE " . $where); $id = $this->modx->db->getValue($sql); - if (!$id || (!$this->newDoc && $id == $this->getID())) { - $flag = true; - } else { - $flag = false; - } + $flag = (! $id || (! $this->newDoc && $id == $this->getID())); } else { $flag = false; } @@ -855,7 +832,7 @@ final protected function checkVersion($version, $dmi3yy = true) if (version_compare($tmp, $version, '>=')) { $flag = true; if ($dmi3yy) { - $flag = (boolean)preg_match('/^' . $tmp . '(.*)\-d/', $currentVer); + $flag = $flag || (boolean)preg_match('/^' . $tmp . '(.*)\-d/', $currentVer); } } @@ -864,7 +841,7 @@ final protected function checkVersion($version, $dmi3yy = true) /** * @param string $name - * @return bool|mixed + * @return bool|string|int */ protected function eraseField($name) { diff --git a/assets/lib/MODxAPI/autoTable.abstract.php b/assets/lib/MODxAPI/autoTable.abstract.php index 3ea788bf..4c1c53ad 100644 --- a/assets/lib/MODxAPI/autoTable.abstract.php +++ b/assets/lib/MODxAPI/autoTable.abstract.php @@ -90,12 +90,12 @@ public function save($fire_events = false, $clearCache = false) if ($this->newDoc && $this->get($key) === null && $this->get($key) !== $value) { $this->set($key, $value); } - if ((!$this->generateField || isset($fld[$key])) && $this->get($key) !== null) { + if ((! $this->generateField || isset($fld[$key])) && $this->get($key) !== null) { $this->Uset($key); } unset($fld[$key]); } - if (!empty($this->set)) { + if (! empty($this->set)) { if ($this->newDoc) { $SQL = "INSERT {$this->ignoreError} INTO {$this->makeTable($this->table)} SET " . implode(', ', $this->set); @@ -125,9 +125,9 @@ public function save($fire_events = false, $clearCache = false) public function delete($ids, $fire_events = false) { $_ids = $this->cleanIDs($ids, ','); - if (is_array($_ids) && $_ids != array()) { + if (is_array($_ids) && $_ids !== array()) { $id = $this->sanitarIn($_ids); - if (!empty($id)) { + if (! empty($id)) { $this->query("DELETE from {$this->makeTable($this->table)} where `" . $this->pkName . "` IN ({$id})"); } $this->clearCache($fire_events); diff --git a/assets/lib/MODxAPI/modManagers.php b/assets/lib/MODxAPI/modManagers.php old mode 100755 new mode 100644 index 536f201a..9472b489 --- a/assets/lib/MODxAPI/modManagers.php +++ b/assets/lib/MODxAPI/modManagers.php @@ -143,14 +143,14 @@ public function edit($id) $this->close(); $this->newDoc = false; - if (!$find = $this->findUser($id)) { + if (! $find = $this->findUser($id)) { $this->id = null; } else { $this->set('editedon', time()); $result = $this->query(" SELECT * from {$this->makeTable('user_attributes')} as attribute LEFT JOIN {$this->makeTable('manager_users')} as user ON user.id=attribute.internalKey - WHERE BINARY {$find}='{$this->escape($id)}' + WHERE {$find}='{$this->escape($id)}' "); $this->field = $this->modx->db->getRow($result); @@ -175,7 +175,7 @@ public function edit($id) */ public function set($key, $value) { - if (is_scalar($value) && is_scalar($key) && !empty($key)) { + if (is_scalar($value) && is_scalar($key) && ! empty($key)) { switch ($key) { case 'password': $this->givenPassword = $value; @@ -233,20 +233,20 @@ public function save($fire_events = false, $clearCache = false) return false; } - if (!$this->checkUnique('manager_users', 'username')) { + if (! $this->checkUnique('manager_users', 'username')) { $this->log['UniqueUsername'] = 'username not unique
' . print_r($this->get('username'),
                     true) . '
'; return false; } - if (!$this->checkUnique('user_attributes', 'email', 'internalKey')) { + if (! $this->checkUnique('user_attributes', 'email', 'internalKey')) { $this->log['UniqueEmail'] = 'Email not unique
' . print_r($this->get('email'), true) . '
'; return false; } - if(!$this->get('role')) { + if(! $this->get('role')) { $this->log['UniqueEmail'] = 'Wrong manager role
' . print_r($this->get('role'), true) . '
'; } @@ -260,7 +260,7 @@ public function save($fire_events = false, $clearCache = false) $this->Uset($key, 'user'); unset($fld[$key]); } - if (!empty($this->set['user'])) { + if (! empty($this->set['user'])) { if ($this->newDoc) { $SQL = "INSERT into {$this->makeTable('manager_users')} SET " . implode(', ', $this->set['user']); } else { @@ -282,7 +282,7 @@ public function save($fire_events = false, $clearCache = false) $this->Uset($key, 'attribute'); unset($fld[$key]); } - if (!empty($this->set['attribute'])) { + if (! empty($this->set['attribute'])) { if ($this->newDoc) { $this->set('internalKey', $this->id)->Uset('internalKey', 'attribute'); $SQL = "INSERT into {$this->makeTable('user_attributes')} SET " . implode(', ', @@ -295,7 +295,7 @@ public function save($fire_events = false, $clearCache = false) } unset($fld['id']); foreach ($fld as $key => $value) { - if ($value == '' || !$this->isChanged($key)) { + if ($value == '' || ! $this->isChanged($key)) { continue; } $result = $this->query("SELECT `setting_value` FROM {$this->makeTable('user_settings')} WHERE `user` = '{$this->id}' AND `setting_name` = '{$key}'"); @@ -306,7 +306,7 @@ public function save($fire_events = false, $clearCache = false) } } // TODO - if (!$this->newDoc && $this->givenPassword) { + if (! $this->newDoc && $this->givenPassword) { $this->invokeEvent('OnManagerChangePassword', array( 'userObj' => $this, 'userid' => $this->id, @@ -316,7 +316,7 @@ public function save($fire_events = false, $clearCache = false) ), $fire_events); } - if (!empty($this->groupIds)) { + if (! empty($this->groupIds)) { $this->setUserGroups($this->id, $this->groupIds); } // TODO @@ -412,7 +412,7 @@ public function checkBlock($id = 0) $b = $tmp->get('blocked'); $bu = $tmp->get('blockeduntil'); $ba = $tmp->get('blockedafter'); - $flag = (($b && !$bu && !$ba) || ($bu && $now < $bu) || ($ba && $now > $ba)); + $flag = (($b && ! $bu && ! $ba) || ($bu && $now < $bu) || ($ba && $now > $ba)); unset($tmp); return $flag; @@ -434,7 +434,7 @@ public function testAuth($id, $password, $blocker, $fire_events = false) $flag = $pluginFlag = false; if ( - (null !== $tmp->getID()) && (!$blocker || ($blocker && !$tmp->checkBlock($id))) + (null !== $tmp->getID()) && (! $blocker || ($blocker && ! $tmp->checkBlock($id))) ) { $_password = $tmp->get('password'); $eventResult = $this->getInvokeEventResult('OnManagerAuthentication', array( @@ -451,7 +451,7 @@ public function testAuth($id, $password, $blocker, $fire_events = false) } else { $pluginFlag = (bool)$eventResult; } - if (!$pluginFlag) { + if (! $pluginFlag) { $hashType = $this->getPasswordHashType($_password); switch ($hashType) { case 'phpass': @@ -488,7 +488,7 @@ public function testAuth($id, $password, $blocker, $fire_events = false) */ public function logOut($cookieName = 'modx_remember_manager', $fire_events = false) { - if (!$uid = $this->modx->getLoginUserID('mgr')) { + if (! $uid = $this->modx->getLoginUserID('mgr')) { return; } $params = array( @@ -534,7 +534,7 @@ protected function SessionHandler($directive, $cookieName, $remember = true) $_SESSION['mgrPermissions'] = $this->mgrPermissions; $_SESSION['mgrDocgroups'] = $this->getDocumentGroups(); $_SESSION['mgrToken'] = md5($this->get('sessionid')); - if (!empty($remember)) { + if (! empty($remember)) { $this->setAutoLoginCookie($cookieName, $remember); } } @@ -584,7 +584,7 @@ public function isSecure() */ public function setAutoLoginCookie($cookieName, $remember = true) { - if (!empty($cookieName) && $this->getID() !== null) { + if (! empty($cookieName) && $this->getID() !== null) { $secure = $this->isSecure(); $remember = is_bool($remember) ? $this->getRememberTime() : (int)$remember; $cookieValue = $this->get('username'); @@ -659,7 +659,7 @@ public function setUserGroups($userID = 0, $groupIds = array()) foreach ($groupIds as $gid) { $this->query("REPLACE INTO {$this->makeTable('member_groups')} (`user_group`, `member`) VALUES ('{$gid}', '{$uid}')"); } - if (!$this->newDoc) { + if (! $this->newDoc) { $groupIds = empty($groupIds) ? '0' : implode(',', $groupIds); $this->query("DELETE FROM {$this->makeTable('member_groups')} WHERE `member`={$uid} AND `user_group` NOT IN ({$groupIds})"); } diff --git a/assets/lib/MODxAPI/modResource.php b/assets/lib/MODxAPI/modResource.php index 7966dddd..ec9c9180 100644 --- a/assets/lib/MODxAPI/modResource.php +++ b/assets/lib/MODxAPI/modResource.php @@ -1,1118 +1,1132 @@ - 'document', - 'contentType' => 'text/html', - 'pagetitle' => 'New document', - 'longtitle' => '', - 'description' => '', - 'alias' => '', - 'link_attributes' => '', - 'published' => 1, - 'pub_date' => 0, - 'unpub_date' => 0, - 'parent' => 0, - 'isfolder' => 0, - 'introtext' => '', - 'content' => '', - 'richtext' => 1, - 'template' => 0, - 'menuindex' => 0, - 'searchable' => 1, - 'cacheable' => 1, - 'createdon' => 0, - 'createdby' => 0, - 'editedon' => 0, - 'editedby' => 0, - 'deleted' => 0, - 'deletedon' => 0, - 'deletedby' => 0, - 'publishedon' => 0, - 'publishedby' => 0, - 'menutitle' => '', - 'donthit' => 0, - 'privateweb' => 0, - 'privatemgr' => 0, - 'content_dispo' => 0, - 'hidemenu' => 0, - 'alias_visible' => 1 - ); - /** - * @var array - */ - private $table = array( - '"' => '_', - "'" => '_', - ' ' => '_', - '.' => '_', - ',' => '_', - 'а' => 'a', - 'б' => 'b', - 'в' => 'v', - 'г' => 'g', - 'д' => 'd', - 'е' => 'e', - 'ё' => 'e', - 'ж' => 'zh', - 'з' => 'z', - 'и' => 'i', - 'й' => 'y', - 'к' => 'k', - 'л' => 'l', - 'м' => 'm', - 'н' => 'n', - 'о' => 'o', - 'п' => 'p', - 'р' => 'r', - 'с' => 's', - 'т' => 't', - 'у' => 'u', - 'ф' => 'f', - 'х' => 'h', - 'ц' => 'c', - 'ч' => 'ch', - 'ш' => 'sh', - 'щ' => 'sch', - 'ь' => '', - 'ы' => 'y', - 'ъ' => '', - 'э' => 'e', - 'ю' => 'yu', - 'я' => 'ya', - 'А' => 'A', - 'Б' => 'B', - 'В' => 'V', - 'Г' => 'G', - 'Д' => 'D', - 'Е' => 'E', - 'Ё' => 'E', - 'Ж' => 'Zh', - 'З' => 'Z', - 'И' => 'I', - 'Й' => 'Y', - 'К' => 'K', - 'Л' => 'L', - 'М' => 'M', - 'Н' => 'N', - 'О' => 'O', - 'П' => 'P', - 'Р' => 'R', - 'С' => 'S', - 'Т' => 'T', - 'У' => 'U', - 'Ф' => 'F', - 'Х' => 'H', - 'Ц' => 'C', - 'Ч' => 'Ch', - 'Ш' => 'Sh', - 'Щ' => 'Sch', - 'Ь' => '', - 'Ы' => 'Y', - 'Ъ' => '', - 'Э' => 'E', - 'Ю' => 'Yu', - 'Я' => 'Ya', - ); - /** - * @var array массив ТВшек где name это ключ массива, а ID это значение - */ - private $tv = array(); - /** - * @var array массив ТВшек где ID это ключ массива, а name это значение - */ - private $tvid = array(); - /** - * @var array значения по умолчанию для ТВ параметров - */ - private $tvd = array(); - - /** @var array связи ТВ и шаблонов */ - private $tvTpl = array(); - - /** @var array параметры ТВ с массивами */ - protected $tvaFields = array(); - - /** - * Массив администраторов - * @var DLCollection - */ - private $managerUsers = null; - /** @var array группы документов */ - protected $groupIds = array(); - - /** - * modResource constructor. - * @param DocumentParser $modx - * @param bool $debug - */ - public function __construct($modx, $debug = false) - { - parent::__construct($modx, $debug); - $this->get_TV(); - $uTable = $this->makeTable("manager_users"); - $aTable = $this->makeTable("user_attributes"); - $query = "SELECT `u`.`id`, `a`.`email`, `u`.`username` FROM " . $aTable . " as `a` LEFT JOIN " . $uTable . " as `u` ON `u`.`id`=`a`.`internalKey`"; - $query = $this->query($query); - $this->managerUsers = new DLCollection($modx, empty($query) ? array() : $query); - } - - /** - * @return array - */ - public function toArrayMain() - { - $out = array_intersect_key(parent::toArray(), $this->default_field); - - return $out; - } - - /** - * @param bool $render - * @return array - */ - public function toArrayTV($render = false) - { - $out = array_diff_key(parent::toArray(), $this->default_field); - $tpl = $this->get('template'); - $tvTPL = APIHelpers::getkey($this->tvTpl, $tpl, array()); - foreach ($tvTPL as $item) { - if (isset($this->tvid[$item]) && !array_key_exists($this->tvid[$item], $out)) { - $value = $this->get($this->tvid[$item]); - $out[$this->tvid[$item]] = empty($value) ? $this->tvd[$this->tvid[$item]] : $value; - } - - } - if ($render) { - foreach ($out as $key => $val) { - $out[$key] = $this->renderTV($key); - } - } - - return $out; - } - - /** - * @param string $prefix - * @param string $suffix - * @param string $sep - * @param bool $render - * @return array - */ - public function toArray($prefix = '', $suffix = '', $sep = '_', $render = true) - { - $out = array_merge( - $this->toArrayMain(), - $this->toArrayTV($render), - array($this->fieldPKName() => $this->getID()) - ); - - return \APIhelpers::renameKeyArr($out, $prefix, $suffix, $sep); - } - - /** - * @return null|string - */ - public function getUrl() - { - $out = null; - $id = (int)$this->getID(); - if (!empty($id)) { - $out = $this->modx->makeUrl($id); - } - - return $out; - } - - /** - * @param string $main - * @param string $second - * @return mixed - */ - public function getTitle($main = 'menutitle', $second = 'pagetitle') - { - $title = $this->get($main); - if (empty($title) && $title !== '0') { - $title = $this->get($second); - } - - return $title; - } - - /** - * @return bool - */ - public function isWebShow() - { - $pub = ($this->get('publishedon') < time() && $this->get('published')); - $unpub = ($this->get('unpub_date') == 0 || $this->get('unpub_date') > time()); - $del = ($this->get('deleted') == 0 && ($this->get('deletedon') == 0 || $this->get('deletedon') > time())); - - return ($pub && $unpub && $del); - } - - /** - * @return $this - */ - public function touch() - { - $this->set('editedon', time()); - - return $this; - } - - /** - * @param $tvname - * @return null|string - */ - public function renderTV($tvname) - { - $out = null; - if ($this->getID() > 0) { - include_once MODX_MANAGER_PATH . "includes/tmplvars.format.inc.php"; - include_once MODX_MANAGER_PATH . "includes/tmplvars.commands.inc.php"; - $tvval = $this->get($tvname); - if ($this->isTVarrayField($tvname) && is_array($tvval)) { - $tvval = implode('||', $tvval); - } - $param = APIHelpers::getkey($this->tvd, $tvname, array()); - $display = APIHelpers::getkey($param, 'display', ''); - $display_params = APIHelpers::getkey($param, 'display_params', ''); - $type = APIHelpers::getkey($param, 'type', ''); - $out = getTVDisplayFormat($tvname, $tvval, $display, $display_params, $type, $this->getID(), ''); - } - - return $out; - } - - /** - * @param $key - * @return mixed - */ - public function get($key) - { - $out = parent::get($key); - if (isset($this->tv[$key])) { - $tpl = $this->get('template'); - $tvTPL = APIHelpers::getkey($this->tvTpl, $tpl, array()); - $tvID = APIHelpers::getkey($this->tv, $key, 0); - if (in_array($tvID, $tvTPL) && is_null($out)) { - $out = APIHelpers::getkey($this->tvd, $key, null); - } - } - - return $out; - } - - /** - * @param $key - * @param $value - * @return $this - */ - public function set($key, $value) - { - if ((is_scalar($value) || $this->isTVarrayField($key) || $this->isJsonField($key)) && is_scalar($key) && !empty($key)) { - switch ($key) { - case 'parent': - $value = (int)$value; - break; - case 'template': - $value = trim($value); - $value = $this->setTemplate($value); - break; - case 'published': - $value = (int)((bool)$value); - if ($value) { - $this->field['publishedon'] = time() + $this->modxConfig('server_offset_time'); - } - break; - case 'pub_date': - $value = $this->getTime($value); - if ($value > 0 && time() + $this->modxConfig('server_offset_time') > $value) { - $this->field['published'] = 1; - $this->field['publishedon'] = $value; - } - break; - case 'unpub_date': - $value = $this->getTime($value); - if ($value > 0 && time() + $this->modxConfig('server_offset_time') > $value) { - $this->field['published'] = 0; - $this->field['publishedon'] = 0; - } - break; - case 'deleted': - $value = (int)((bool)$value); - if ($value) { - $this->field['deletedon'] = time() + $this->modxConfig('server_offset_time'); - } else { - $this->field['deletedon'] = 0; - } - break; - case 'deletedon': - $value = $this->getTime($value); - if ($value > 0 && time() + $this->modxConfig('server_offset_time') < $value) { - $value = 0; - } - if ($value) { - $this->field['deleted'] = 1; - } - break; - case 'editedon': - case 'createdon': - case 'publishedon': - $value = $this->getTime($value); - break; - case 'publishedby': - case 'editedby': - case 'createdby': - case 'deletedby': - $value = $this->getUser($value, $this->default_field[$key]); - break; - } - $this->field[$key] = $value; - } - - return $this; - } - - /** - * @param $value - * @param int $default - * @return int|mixed - */ - protected function getUser($value, $default = 0) - { - $currentAdmin = APIHelpers::getkey($_SESSION, 'mgrInternalKey', 0); - $value = (int)$value; - if (!empty($value)) { - $by = $this->findUserBy($value); - $exists = $this->managerUsers->exists(function ($key, Helpers\Collection $val) use ($by, $value) { - return ($val->containsKey($by) && $val->get($by) === (string)$value); - }); - if (!$exists) { - $value = 0; - } - } - if (empty($value)) { - $value = empty($currentAdmin) ? $default : $currentAdmin; - } - - return $value; - } - - /** - * @param $data - * @return bool|string - */ - protected function findUserBy($data) - { - switch (true) { - case (is_int($data) || ((int)$data > 0 && (string)intval($data) === $data)): - $find = 'id'; - break; - case filter_var($data, FILTER_VALIDATE_EMAIL): - $find = 'email'; - break; - case is_scalar($data): - $find = 'username'; - break; - default: - $find = false; - } - - return $find; - } - - /** - * @param array $data - * @return $this - */ - public function create($data = array()) - { - $this->close(); - $fld = array(); - foreach ($this->tvd as $name => $tv) { - $fld[$name] = $tv; - }; - $this->store($fld); - - $this->fromArray(array_merge($fld, $data)); - $this->set('createdby', null) - ->set('editedby', null) - ->set('createdon', time()) - ->touch(); - - return $this; - } - - /** - * @param $id - * @return $this - */ - public function edit($id) - { - $id = is_scalar($id) ? trim($id) : ''; - if ($this->getID() != $id) { - $this->close(); - $this->markAllEncode(); - $this->newDoc = false; - - $result = $this->query("SELECT * from {$this->makeTable('site_content')} where `id`=" . (int)$id); - $this->fromArray($this->modx->db->getRow($result)); - $result = $this->query("SELECT * from {$this->makeTable('site_tmplvar_contentvalues')} where `contentid`=" . (int)$id); - while ($row = $this->modx->db->getRow($result)) { - $this->field[$this->tvid[$row['tmplvarid']]] = $row['value']; - } - if (empty($this->field['id'])) { - $this->id = null; - } else { - $this->id = $this->field['id']; - $this->set('editedby', null)->touch(); - $this->decodeFields(); - } - $this->store($this->toArray(null, null, null, false)); - unset($this->field['id']); - } - - return $this; - } - - /** - * @param bool $fire_events - * @param bool $clearCache - * @return bool|null - */ - public function save($fire_events = false, $clearCache = false) - { - $parent = null; - if ($this->field['pagetitle'] == '') { - $this->log['emptyPagetitle'] = 'Pagetitle is empty in
' . print_r($this->field, true) . '
'; - - return false; - } - - $uid = $this->modx->getLoginUserID('mgr'); - - if ( - $this->field['parent'] == 0 && - !$this->modxConfig('udperms_allowroot') && - !($uid && isset($_SESSION['mgrRole']) && $_SESSION['mgrRole'] == 1) - ) { - $this->log['rootForbidden'] = 'Only Administrators can create documents in the root folder because udperms_allowroot setting is off'; - - return false; - } - - $this->set('alias', $this->getAlias()); - - $this->invokeEvent('OnBeforeDocFormSave', array( - 'mode' => $this->newDoc ? "new" : "upd", - 'id' => isset($this->id) ? $this->id : '', - 'doc' => $this->toArray(), - 'docObj' => $this - ), $fire_events); - - $fld = $this->encodeFields()->toArray(null, null, null, false); - foreach ($this->default_field as $key => $value) { - $tmp = $this->get($key); - if ($this->newDoc && (!is_int($tmp) && $tmp == '')) { - if ($tmp == $value) { - switch ($key) { - case 'cacheable': - $value = $this->modxConfig('cache_default'); - break; - case 'template': - $value = $value = $this->modxConfig('default_template'); - break; - case 'published': - $value = $this->modxConfig('publish_default'); - break; - case 'searchable': - $value = $this->modxConfig('search_default'); - break; - case 'donthit': - $value = $this->modxConfig('track_visitors'); - break; - } - } - $this->field[$key] = $value; - } - switch (true) { - case $key == 'parent': - $parent = (int)$this->get($key); - $q = $this->query("SELECT count(`id`) FROM {$this->makeTable('site_content')} WHERE `id`='{$parent}'"); - if ($this->modx->db->getValue($q) != 1) { - $parent = 0; - } - $this->field[$key] = $parent; - $this->Uset($key); - break; - case ($key == 'alias_visible' && !$this->checkVersion('1.0.10', true)): - $this->eraseField('alias_visible'); - break; - default: - $this->Uset($key); - } - unset($fld[$key]); - } - - if (!empty($this->set)) { - if ($this->newDoc) { - $SQL = "INSERT into {$this->makeTable('site_content')} SET " . implode(', ', $this->set); - } else { - $SQL = "UPDATE {$this->makeTable('site_content')} SET " . implode(', ', - $this->set) . " WHERE `id` = " . $this->id; - } - $this->query($SQL); - - if ($this->newDoc) { - $this->id = $this->modx->db->getInsertId(); - } - - if ($parent > 0) { - $this->query("UPDATE {$this->makeTable('site_content')} SET `isfolder`='1' WHERE `id`='{$parent}'"); - } - } - - $_deleteTVs = $_insertTVs = array(); - foreach ($fld as $key => $value) { - if (empty($this->tv[$key]) || !$this->isChanged($key) || !$this->belongsToTemplate($this->tv[$key])) { - continue; - } elseif ($value === '') { - $_deleteTVs[] = $this->tv[$key]; - } else { - $_insertTVs[$this->tv[$key]] = $this->escape($value); - } - } - - if (!empty($_insertTVs)) { - $values = array(); - foreach ($_insertTVs as $id => $value) { - $values[] = "({$this->id}, {$id}, '{$value}')"; - } - $values = implode(',', $values); - $this->query("INSERT INTO {$this->makeTable('site_tmplvar_contentvalues')} (`contentid`,`tmplvarid`,`value`) VALUES {$values} ON DUPLICATE KEY UPDATE - `value` = VALUES(`value`)"); - } - - if (!empty($_deleteTVs)) { - $ids = implode(',', $_deleteTVs); - $this->query("DELETE FROM {$this->makeTable('site_tmplvar_contentvalues')} WHERE `contentid` = '{$this->id}' AND `tmplvarid` IN ({$ids})"); - } - - if (!isset($this->mode)) { - $this->mode = $this->newDoc ? "new" : "upd"; - $this->newDoc = false; - } - - if (!empty($this->groupIds)) { - $this->setDocumentGroups($this->id, $this->groupIds); - } - $this->invokeEvent('OnDocFormSave', array( - 'mode' => $this->mode, - 'id' => isset($this->id) ? $this->id : '', - 'doc' => $this->toArray(), - 'docObj' => $this - ), $fire_events); - - if ($clearCache) { - $this->clearCache($fire_events); - } - $this->decodeFields(); - - return $this->id; - } - - /** - * @param $tvId - * @return bool - */ - protected function belongsToTemplate($tvId) - { - $template = $this->get('template'); - - return isset($this->tvTpl[$template]) && in_array($tvId, $this->tvTpl[$template]); - } - - /** - * @param $ids - * @return $this - * @throws Exception - */ - public function toTrash($ids) - { - $ignore = $this->systemID(); - $_ids = $this->cleanIDs($ids, ',', $ignore); - if (is_array($_ids) && $_ids != array()) { - $id = $this->sanitarIn($_ids); - $uid = (int)$this->modx->getLoginUserId(); - $deletedon = time() + $this->modxConfig('server_offset_time'); - $this->query("UPDATE {$this->makeTable('site_content')} SET `deleted`=1, `deletedby`={$uid}, `deletedon`={$deletedon} WHERE `id` IN ({$id})"); - } else { - throw new Exception('Invalid IDs list for mark trash:
' . print_r($ids,
-                    1) . '
please, check ignore list:
' . print_r($ignore, 1) . '
'); - } - - return $this; - } - - /** - * @param bool $fire_events - * @return $this - */ - public function clearTrash($fire_events = false) - { - $q = $this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `deleted`='1'"); - $_ids = $this->modx->db->getColumn('id', $q); - if (is_array($_ids) && $_ids != array()) { - $this->invokeEvent('OnBeforeEmptyTrash', array( - "ids" => $_ids - ), $fire_events); - - $id = $this->sanitarIn($_ids); - $this->query("DELETE from {$this->makeTable('site_content')} where `id` IN ({$id})"); - $this->query("DELETE from {$this->makeTable('site_tmplvar_contentvalues')} where `contentid` IN ({$id})"); - - $this->invokeEvent('OnEmptyTrash', array( - "ids" => $_ids - ), $fire_events); - } - - return $this; - } - - /** - * @param $ids - * @param int|bool $depth - * @return array - */ - public function children($ids, $depth) - { - $_ids = $this->cleanIDs($ids, ','); - if (is_array($_ids) && $_ids != array()) { - $id = $this->sanitarIn($_ids); - if (!empty($id)) { - $q = $this->query("SELECT `id` FROM {$this->makeTable('site_content')} where `parent` IN ({$id})"); - $id = $this->modx->db->getColumn('id', $q); - if ($depth > 0 || $depth === true) { - $id = $this->children($id, is_bool($depth) ? $depth : ($depth - 1)); - } - $_ids = array_merge($_ids, $id); - } - } - - return $_ids; - } - - /** - * @param string|array $ids - * @param bool $fire_events - * @return $this - * @throws Exception - */ - public function delete($ids, $fire_events = false) - { - $ids = $this->children($ids, true); - $_ids = $this->cleanIDs($ids, ',', $this->systemID()); - $this->invokeEvent('OnBeforeDocFormDelete', array( - 'ids' => $_ids - ), $fire_events); - $this->toTrash($_ids); - $this->invokeEvent('OnDocFormDelete', array( - 'ids' => $_ids - ), $fire_events); - - return $this; - } - - /** - * @return array - */ - private function systemID() - { - $ignore = array( - 0, //empty document - (int)$this->modxConfig('site_start'), - (int)$this->modxConfig('error_page'), - (int)$this->modxConfig('unauthorized_page'), - (int)$this->modxConfig('site_unavailable_page') - ); - $data = $this->query("SELECT DISTINCT setting_value FROM {$this->makeTable('web_user_settings')} WHERE `setting_name`='login_home' AND `setting_value`!=''"); - $data = $this->modx->db->makeArray($data); - foreach ($data as $item) { - $ignore[] = (int)$item['setting_value']; - } - - return array_unique($ignore); - - } - - /** - * @param $alias - * @return string - */ - protected function checkAlias($alias) - { - $alias = strtolower($alias); - if ($this->modxConfig('friendly_urls')) { - $_alias = $this->escape($alias); - if ((!$this->modxConfig('allow_duplicate_alias') && !$this->modxConfig('use_alias_path')) || ($this->modxConfig('allow_duplicate_alias') && $this->modxConfig('use_alias_path'))) { - $flag = $this->modx->db->getValue($this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `alias`='{$_alias}' AND `parent`={$this->get('parent')} LIMIT 1")); - } else { - $flag = $this->modx->db->getValue($this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `alias`='{$_alias}' LIMIT 1")); - } - if (($flag && $this->newDoc) || (!$this->newDoc && $flag && $this->id != $flag)) { - $suffix = substr($alias, -2); - if (preg_match('/-(\d+)/', $suffix, $tmp) && isset($tmp[1]) && (int)$tmp[1] > 1) { - $suffix = (int)$tmp[1] + 1; - $alias = substr($alias, 0, -2) . '-' . $suffix; - } else { - $alias .= '-2'; - } - $alias = $this->checkAlias($alias); - } - } - - return $alias; - } - - /** - * @param $key - * @return bool - */ - public function issetField($key) - { - return (array_key_exists($key, $this->default_field) || array_key_exists($key, $this->tv)); - } - - /** - * @param bool $reload - * @return $this - */ - protected function get_TV($reload = false) - { - $this->modx->_TVnames = $this->loadFromCache('_TVnames'); - if ($this->modx->_TVnames === false || empty($this->modx->_TVnames) || $reload) { - $this->modx->_TVnames = array(); - $result = $this->query('SELECT `id`,`name`,`default_text`,`type` FROM ' . $this->makeTable('site_tmplvars')); - while ($row = $this->modx->db->GetRow($result)) { - $this->modx->_TVnames[$row['name']] = array( - "id" => $row['id'], - "type" => $row['type'], - "default" => $row['default_text'] - ); - } - $this->saveToCache($this->modx->_TVnames, '_TVnames'); - } - $arrayTypes = array('checkbox', 'listbox-multiple'); - $arrayTVs = array(); - foreach ($this->modx->_TVnames as $name => $data) { - $this->tvid[$data['id']] = $name; - $this->tv[$name] = $data['id']; - if (in_array($data['type'], $arrayTypes)) { - $arrayTVs[] = $name; - } - } - if (empty($this->tvaFields)) { - $this->tvaFields = $arrayTVs; - } - $this->loadTVTemplate()->loadTVDefault(array_values($this->tv)); - - return $this; - } - - /** - * @return $this - */ - protected function loadTVTemplate() - { - $this->tvTpl = $this->loadFromCache('_tvTpl'); - if ($this->tvTpl === false) { - $q = $this->query("SELECT `tmplvarid`, `templateid` FROM " . $this->makeTable('site_tmplvar_templates')); - $this->tvTpl = array(); - while ($item = $this->modx->db->getRow($q)) { - $this->tvTpl[$item['templateid']][] = $item['tmplvarid']; - } - $this->saveToCache($this->tvTpl, '_tvTpl'); - } - - return $this; - } - - /** - * @param array $tvId - * @return $this - */ - protected function loadTVDefault(array $tvId = array()) - { - if (is_array($tvId) && !empty($tvId)) { - $this->tvd = array(); - foreach ($tvId as $id) { - $name = $this->tvid[$id]; - $this->tvd[$name] = $this->modx->_TVnames[$name]['default']; - } - } - - return $this; - } - - /** - * @param $tpl - * @return int - * @throws Exception - */ - public function setTemplate($tpl) - { - if (!is_numeric($tpl) || $tpl != (int)$tpl) { - if (is_scalar($tpl)) { - $sql = "SELECT `id` FROM {$this->makeTable('site_templates')} WHERE `templatename` = '" . $this->escape($tpl) . "'"; - $rs = $this->query($sql); - if (!$rs || $this->modx->db->getRecordCount($rs) <= 0) { - throw new Exception("Template {$tpl} is not exists"); - } - $tpl = $this->modx->db->getValue($rs); - } else { - throw new Exception("Invalid template name: " . print_r($tpl, 1)); - } - } - - return (int)$tpl; - } - - /** - * @return string - */ - protected function getAlias() - { - if ($this->modxConfig('friendly_urls') && $this->modxConfig('automatic_alias') && $this->get('alias') == '') { - $alias = strtr($this->get('pagetitle'), $this->table); - } else { - if ($this->get('alias') != '') { - $alias = $this->get('alias'); - } else { - $alias = ''; - } - } - $alias = $this->modx->stripAlias($alias); - - return $this->checkAlias($alias); - } - - /** - * @param int $parent - * @param string $criteria - * @param string $dir - * @return $this - * - * Пересчет menuindex по полю таблицы site_content - */ - public function updateMenuindex($parent, $criteria = 'id', $dir = 'asc') - { - $dir = strtolower($dir) == 'desc' ? 'desc' : 'asc'; - if (is_integer($parent) && $criteria !== '') { - $this->query("SET @index := 0"); - $this->query("UPDATE {$this->makeTable('site_content')} SET `menuindex` = (@index := @index + 1) WHERE `parent`={$parent} ORDER BY {$criteria} {$dir}"); - } - - return $this; - } - - /** - * Устанавливает значение шаблона согласно системной настройке - * - * @return $this - */ - public function setDefaultTemplate() - { - $parent = $this->get('parent'); - $template = $this->modxConfig('default_template'); - switch ($this->modxConfig('auto_template_logic')) { - case 'sibling': - if (!$parent) { - $site_start = $this->modxConfig('site_start'); - $where = "sc.isfolder=0 AND sc.id!={$site_start}"; - $sibl = $this->modx->getDocumentChildren($parent, 1, 0, 'template', $where, 'menuindex', 'ASC', 1); - if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { - $template = $sibl[0]['template']; - } - } else { - $sibl = $this->modx->getDocumentChildren($parent, 1, 0, 'template', 'isfolder=0', 'menuindex', - 'ASC', 1); - if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { - $template = $sibl[0]['template']; - } else { - $sibl = $this->modx->getDocumentChildren($parent, 0, 0, 'template', 'isfolder=0', 'menuindex', - 'ASC', 1); - if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { - $template = $sibl[0]['template']; - } - } - } - break; - case 'parent': - if ($parent) { - $_parent = $this->modx->getPageInfo($parent, 0, 'template'); - if (isset($_parent['template'])) { - $template = $_parent['template']; - } - } - break; - } - $this->set('template', $template); - - return $this; - } - - /** - * Декодирует конкретное поле - * @param string $field Имя поля - * @param bool $store обновить распакованное поле - * @return array ассоциативный массив с данными из json строки - */ - public function decodeField($field, $store = false) - { - $out = array(); - if ($this->isDecodableField($field)) { - $data = $this->get($field); - if ($this->isTVarrayField($field)) { - $out = explode('||', $data); - } else { - $out = jsonHelper::jsonDecode($data, array('assoc' => true), true); - } - } - if ($store) { - $this->field[$field] = $out; - $this->markAsDecode($field); - } - - return $out; - } - - /** - * Запаковывает конкретное поле в JSON - * @param string $field Имя поля - * @param bool $store обновить запакованное поле - * @return string|null json строка - */ - public function encodeField($field, $store = false) - { - $out = null; - if ($this->isEncodableField($field)) { - $data = $this->get($field); - if ($this->isTVarrayField($field)) { - $out = is_array($data) ? implode('||', $data) : (string)$data; - } else { - $out = json_encode($data); - } - } - if ($store) { - $this->field[$field] = $out; - $this->markAsEncode($field); - } - - return $out; - } - - /** - * Может ли содержать данное поле json массив - * @param string $field имя поля - * @return boolean - */ - public function isTVarrayField($field) - { - return (is_scalar($field) && in_array($field, $this->tvaFields)); - } - - /** - * Пометить все поля как запакованные - * @return $this - */ - public function markAllEncode() - { - parent::markAllEncode(); - foreach ($this->tvaFields as $field) { - $this->markAsEncode($field); - } - - return $this; - } - - /** - * Пометить все поля как распакованные - * @return $this - */ - public function markAllDecode() - { - parent::markAllDecode(); - foreach ($this->tvaFields as $field) { - $this->markAsDecode($field); - } - - return $this; - } - - /** - * @param int $docId - */ - public function getDocumentGroups($docId = 0) - { - $out = array(); - $doc = $this->switchObject($docId); - if (null !== $doc->getID()) { - $doc_groups = $this->makeTable('document_groups'); - $docgroup_names = $this->makeTable('documentgroup_names'); - - $rs = $this->query("SELECT `dg`.`document_group`, `dgn`.`name` FROM {$doc_groups} as `dg` INNER JOIN {$docgroup_names} as `dgn` ON `dgn`.`id`=`dg`.`document_group` - WHERE `dg`.`document` = " . $doc->getID()); - while ($row = $this->modx->db->getRow($rs)) { - $out[$row['document_group']] = $row['name']; - } - - } - unset($doc); - - return $out; - } - - /** - * @param int $docId - * @param array $groupIds - * @return $this - */ - public function setDocumentGroups($docId = 0, $groupIds = array()) - { - if (!is_array($groupIds)) { - return $this; - } - if ($this->newDoc && $docId == 0) { - $this->groupIds = $groupIds; - } else { - $doc = $this->switchObject($docId); - if ($id = $doc->getID()) { - foreach ($groupIds as $gid) { - $this->query("REPLACE INTO {$this->makeTable('document_groups')} (`document_group`, `document`) VALUES ('{$gid}', '{$id}')"); - } - if (!$this->newDoc) { - $groupIds = empty($groupIds) ? '0' : implode(',', $groupIds); - $this->query("DELETE FROM {$this->makeTable('document_groups')} WHERE `document`={$id} AND `document_group` NOT IN ({$groupIds})"); - } - } - unset($doc); - $this->groupIds = array(); - } - - return $this; - } -} + 'document', + 'contentType' => 'text/html', + 'pagetitle' => 'New document', + 'longtitle' => '', + 'description' => '', + 'alias' => '', + 'link_attributes' => '', + 'published' => 1, + 'pub_date' => 0, + 'unpub_date' => 0, + 'parent' => 0, + 'isfolder' => 0, + 'introtext' => '', + 'content' => '', + 'richtext' => 1, + 'template' => 0, + 'menuindex' => 0, + 'searchable' => 1, + 'cacheable' => 1, + 'createdon' => 0, + 'createdby' => 0, + 'editedon' => 0, + 'editedby' => 0, + 'deleted' => 0, + 'deletedon' => 0, + 'deletedby' => 0, + 'publishedon' => 0, + 'publishedby' => 0, + 'menutitle' => '', + 'donthit' => 0, + 'privateweb' => 0, + 'privatemgr' => 0, + 'content_dispo' => 0, + 'hidemenu' => 0, + 'alias_visible' => 1 + ); + /** + * @var array + */ + private $table = array( + '"' => '_', + "'" => '_', + ' ' => '_', + '.' => '_', + ',' => '_', + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'е' => 'e', + 'ё' => 'e', + 'ж' => 'zh', + 'з' => 'z', + 'и' => 'i', + 'й' => 'y', + 'к' => 'k', + 'л' => 'l', + 'м' => 'm', + 'н' => 'n', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'c', + 'ч' => 'ch', + 'ш' => 'sh', + 'щ' => 'sch', + 'ь' => '', + 'ы' => 'y', + 'ъ' => '', + 'э' => 'e', + 'ю' => 'yu', + 'я' => 'ya', + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Е' => 'E', + 'Ё' => 'E', + 'Ж' => 'Zh', + 'З' => 'Z', + 'И' => 'I', + 'Й' => 'Y', + 'К' => 'K', + 'Л' => 'L', + 'М' => 'M', + 'Н' => 'N', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'C', + 'Ч' => 'Ch', + 'Ш' => 'Sh', + 'Щ' => 'Sch', + 'Ь' => '', + 'Ы' => 'Y', + 'Ъ' => '', + 'Э' => 'E', + 'Ю' => 'Yu', + 'Я' => 'Ya', + ); + /** + * @var array массив ТВшек где name это ключ массива, а ID это значение + */ + private $tv = array(); + /** + * @var array массив ТВшек где ID это ключ массива, а name это значение + */ + private $tvid = array(); + /** + * @var array значения по умолчанию для ТВ параметров + */ + private $tvd = array(); + + /** @var array связи ТВ и шаблонов */ + private $tvTpl = array(); + + /** @var array параметры ТВ с массивами */ + protected $tvaFields = array(); + + /** + * Массив администраторов + * @var DLCollection + */ + private $managerUsers = null; + /** @var array группы документов */ + protected $groupIds = array(); + + /** + * modResource constructor. + * @param DocumentParser $modx + * @param bool $debug + */ + public function __construct($modx, $debug = false) + { + parent::__construct($modx, $debug); + $this->get_TV(); + $uTable = $this->makeTable("manager_users"); + $aTable = $this->makeTable("user_attributes"); + $query = "SELECT `u`.`id`, `a`.`email`, `u`.`username` FROM " . $aTable . " as `a` LEFT JOIN " . $uTable . " as `u` ON `u`.`id`=`a`.`internalKey`"; + $query = $this->query($query); + $this->managerUsers = new DLCollection($modx, empty($query) ? array() : $query); + } + + /** + * @return array + */ + public function toArrayMain() + { + $out = array_intersect_key(parent::toArray(), $this->default_field); + + return $out; + } + + /** + * @param bool $render + * @return array + */ + public function toArrayTV($render = false) + { + $out = array_diff_key(parent::toArray(), $this->default_field); + $tpl = $this->get('template'); + $tvTPL = APIHelpers::getkey($this->tvTpl, $tpl, array()); + foreach ($tvTPL as $item) { + if (isset($this->tvid[$item]) && !array_key_exists($this->tvid[$item], $out)) { + $value = $this->get($this->tvid[$item]); + $out[$this->tvid[$item]] = empty($value) ? $this->tvd[$this->tvid[$item]] : $value; + } + + } + if ($render) { + foreach ($out as $key => $val) { + $out[$key] = $this->renderTV($key); + } + } + + return $out; + } + + /** + * @param string $prefix + * @param string $suffix + * @param string $sep + * @param bool $render + * @return array + */ + public function toArray($prefix = '', $suffix = '', $sep = '_', $render = true) + { + $out = array_merge( + $this->toArrayMain(), + $this->toArrayTV($render), + array($this->fieldPKName() => $this->getID()) + ); + + return \APIhelpers::renameKeyArr($out, $prefix, $suffix, $sep); + } + + /** + * @return null|string + */ + public function getUrl() + { + $out = null; + $id = (int)$this->getID(); + if (! empty($id)) { + $out = $this->modx->makeUrl($id); + } + + return $out; + } + + /** + * @param string $main + * @param string $second + * @return mixed + */ + public function getTitle($main = 'menutitle', $second = 'pagetitle') + { + $title = $this->get($main); + if (empty($title) && $title !== '0') { + $title = $this->get($second); + } + + return $title; + } + + /** + * @return bool + */ + public function isWebShow() + { + $pub = ($this->get('publishedon') < time() && $this->get('published')); + $unpub = ($this->get('unpub_date') == 0 || $this->get('unpub_date') > time()); + $del = ($this->get('deleted') == 0 && ($this->get('deletedon') == 0 || $this->get('deletedon') > time())); + + return ($pub && $unpub && $del); + } + + /** + * @return $this + */ + public function touch() + { + $this->set('editedon', time()); + + return $this; + } + + /** + * @param $tvname + * @return null|string + */ + public function renderTV($tvname) + { + $out = null; + if ($this->getID() > 0) { + include_once MODX_MANAGER_PATH . "includes/tmplvars.format.inc.php"; + include_once MODX_MANAGER_PATH . "includes/tmplvars.commands.inc.php"; + $tvval = $this->get($tvname); + if ($this->isTVarrayField($tvname) && is_array($tvval)) { + $tvval = implode('||', $tvval); + } + $param = APIHelpers::getkey($this->tvd, $tvname, array()); + $display = APIHelpers::getkey($param, 'display', ''); + $display_params = APIHelpers::getkey($param, 'display_params', ''); + $type = APIHelpers::getkey($param, 'type', ''); + $out = getTVDisplayFormat($tvname, $tvval, $display, $display_params, $type, $this->getID(), ''); + } + + return $out; + } + + /** + * @param $key + * @return mixed + */ + public function get($key) + { + $out = parent::get($key); + if (isset($this->tv[$key])) { + $tpl = $this->get('template'); + $tvTPL = APIHelpers::getkey($this->tvTpl, $tpl, array()); + $tvID = APIHelpers::getkey($this->tv, $key, 0); + if (in_array($tvID, $tvTPL) && is_null($out)) { + $out = APIHelpers::getkey($this->tvd, $key, null); + $out = $out['default']; + } + } + + return $out; + } + + /** + * @param $key + * @param $value + * @return $this + */ + public function set($key, $value) + { + if ((is_scalar($value) || $this->isTVarrayField($key) || $this->isJsonField($key)) && is_scalar($key) && ! empty($key)) { + switch ($key) { + case 'donthit': + $value = (int)((bool)$value); + break; + case 'parent': + $value = (int)$value; + break; + case 'template': + $value = trim($value); + $value = $this->setTemplate($value); + break; + case 'published': + $value = (int)((bool)$value); + if ($value) { + $this->field['publishedon'] = time() + $this->modxConfig('server_offset_time'); + } + break; + case 'pub_date': + $value = $this->getTime($value); + if ($value > 0 && time() + $this->modxConfig('server_offset_time') > $value) { + $this->field['published'] = 1; + $this->field['publishedon'] = $value; + } + break; + case 'unpub_date': + $value = $this->getTime($value); + if ($value > 0 && time() + $this->modxConfig('server_offset_time') > $value) { + $this->field['published'] = 0; + $this->field['publishedon'] = 0; + } + break; + case 'deleted': + $value = (int)((bool)$value); + if ($value) { + $this->field['deletedon'] = time() + $this->modxConfig('server_offset_time'); + } else { + $this->field['deletedon'] = 0; + } + break; + case 'deletedon': + $value = $this->getTime($value); + if ($value > 0 && time() + $this->modxConfig('server_offset_time') < $value) { + $value = 0; + } + if ($value) { + $this->field['deleted'] = 1; + } + break; + case 'editedon': + case 'createdon': + case 'publishedon': + $value = $this->getTime($value); + break; + case 'publishedby': + case 'editedby': + case 'createdby': + case 'deletedby': + $value = $this->getUser($value, $this->default_field[$key]); + break; + } + $this->field[$key] = $value; + } + + return $this; + } + + /** + * @param $value + * @param int $default + * @return int|mixed + */ + protected function getUser($value, $default = 0) + { + $currentAdmin = APIHelpers::getkey($_SESSION, 'mgrInternalKey', 0); + $value = (int)$value; + if (! empty($value)) { + $by = $this->findUserBy($value); + $exists = $this->managerUsers->exists(function ($key, Helpers\Collection $val) use ($by, $value) { + return ($val->containsKey($by) && $val->get($by) === (string)$value); + }); + if (! $exists) { + $value = 0; + } + } + if (empty($value)) { + $value = empty($currentAdmin) ? $default : $currentAdmin; + } + + return $value; + } + + /** + * @param $data + * @return bool|string + */ + protected function findUserBy($data) + { + switch (true) { + case (is_int($data) || ((int)$data > 0 && (string)intval($data) === $data)): + $find = 'id'; + break; + case filter_var($data, FILTER_VALIDATE_EMAIL): + $find = 'email'; + break; + case is_scalar($data): + $find = 'username'; + break; + default: + $find = false; + } + + return $find; + } + + /** + * @param array $data + * @return $this + */ + public function create($data = array()) + { + $this->close(); + $fld = array(); + foreach ($this->tvd as $name => $tv) { + $fld[$name] = $tv['default']; + }; + $this->store($fld); + + $this->fromArray(array_merge($fld, $data)); + $this->set('createdby', null) + ->set('editedby', null) + ->set('createdon', time()) + ->touch(); + + return $this; + } + + /** + * @param $id + * @return $this + */ + public function edit($id) + { + $id = is_scalar($id) ? trim($id) : ''; + if ($this->getID() != $id) { + $this->close(); + $this->markAllEncode(); + $this->newDoc = false; + $result = $this->query("SELECT * from {$this->makeTable('site_content')} where `id`=" . (int)$id); + $this->fromArray($this->modx->db->getRow($result)); + $result = $this->query("SELECT * from {$this->makeTable('site_tmplvar_contentvalues')} where `contentid`=" . (int)$id); + while ($row = $this->modx->db->getRow($result)) { + $this->field[$this->tvid[$row['tmplvarid']]] = $row['value']; + } + $fld = array(); + foreach ($this->tvd as $name => $tv) { + if ($this->belongsToTemplate($this->tv[$name])) { + $fld[$name] = $tv['default']; + } + }; + $this->store(array_merge($fld, $this->field)); + if (empty($this->field['id'])) { + $this->id = null; + } else { + $this->id = $this->field['id']; + $this->set('editedby', null)->touch(); + $this->decodeFields(); + } + unset($this->field['id']); + } + + return $this; + } + + /** + * @param bool $fire_events + * @param bool $clearCache + * @return mixed + */ + public function save($fire_events = false, $clearCache = false) + { + $parent = null; + if ($this->field['pagetitle'] == '') { + $this->log['emptyPagetitle'] = 'Pagetitle is empty in
' . print_r($this->field, true) . '
'; + + return false; + } + + $uid = $this->modx->getLoginUserID('mgr'); + + if ( + empty($this->field['parent']) && + ! $this->modxConfig('udperms_allowroot') && + !($uid && isset($_SESSION['mgrRole']) && $_SESSION['mgrRole'] == 1) + ) { + $this->log['rootForbidden'] = 'Only Administrators can create documents in the root folder because udperms_allowroot setting is off'; + + return false; + } + + $this->set('alias', $this->getAlias()); + + $this->invokeEvent('OnBeforeDocFormSave', array( + 'mode' => $this->newDoc ? "new" : "upd", + 'id' => isset($this->id) ? $this->id : '', + 'doc' => $this->toArray(), + 'docObj' => $this + ), $fire_events); + + $fld = $this->encodeFields()->toArray(null, null, null, false); + foreach ($this->default_field as $key => $value) { + $tmp = $this->get($key); + if ($this->newDoc && (!is_int($tmp) && $tmp == '')) { + if ($tmp == $value) { + switch ($key) { + case 'cacheable': + $value = (int)$this->modxConfig('cache_default'); + break; + case 'template': + $value = (int)$this->modxConfig('default_template'); + break; + case 'published': + $value = (int)$this->modxConfig('publish_default'); + break; + case 'searchable': + $value = (int)$this->modxConfig('search_default'); + break; + case 'donthit': + $value = (int)$this->modxConfig('track_visitors'); + break; + } + } + $this->field[$key] = $value; + } + switch (true) { + case $key == 'parent': + $parent = (int)$this->get($key); + $q = $this->query("SELECT count(`id`) FROM {$this->makeTable('site_content')} WHERE `id`='{$parent}'"); + if ($this->modx->db->getValue($q) != 1) { + $parent = 0; + } + $this->field[$key] = $parent; + $this->Uset($key); + break; + case ($key == 'alias_visible' && ! $this->checkVersion('1.0.10', true)): + $this->eraseField('alias_visible'); + break; + default: + $this->Uset($key); + } + unset($fld[$key]); + } + + if (! empty($this->set)) { + if ($this->newDoc) { + $SQL = "INSERT into {$this->makeTable('site_content')} SET " . implode(', ', $this->set); + } else { + $SQL = "UPDATE {$this->makeTable('site_content')} SET " . implode(', ', + $this->set) . " WHERE `id` = " . $this->id; + } + $this->query($SQL); + + if ($this->newDoc) { + $this->id = $this->modx->db->getInsertId(); + } + + if ($parent > 0) { + $this->query("UPDATE {$this->makeTable('site_content')} SET `isfolder`='1' WHERE `id`='{$parent}'"); + } + } + + $_deleteTVs = $_insertTVs = array(); + foreach ($fld as $key => $value) { + if (empty($this->tv[$key]) || ! $this->isChanged($key) || ! $this->belongsToTemplate($this->tv[$key])) { + continue; + } elseif ($value === '' || is_null($value) || (isset($this->tvd[$key]) && $value == $this->tvd[$key]['default'])) { + $_deleteTVs[] = $this->tv[$key]; + } else { + $_insertTVs[$this->tv[$key]] = $this->escape($value); + } + } + + if (! empty($_insertTVs)) { + $values = array(); + foreach ($_insertTVs as $id => $value) { + $values[] = "({$this->id}, {$id}, '{$value}')"; + } + $values = implode(',', $values); + $this->query("INSERT INTO {$this->makeTable('site_tmplvar_contentvalues')} (`contentid`,`tmplvarid`,`value`) VALUES {$values} ON DUPLICATE KEY UPDATE + `value` = VALUES(`value`)"); + } + + if (! empty($_deleteTVs)) { + $ids = implode(',', $_deleteTVs); + $this->query("DELETE FROM {$this->makeTable('site_tmplvar_contentvalues')} WHERE `contentid` = '{$this->id}' AND `tmplvarid` IN ({$ids})"); + } + + if (!isset($this->mode)) { + $this->mode = $this->newDoc ? "new" : "upd"; + $this->newDoc = false; + } + + if (! empty($this->groupIds)) { + $this->setDocumentGroups($this->id, $this->groupIds); + } + $this->invokeEvent('OnDocFormSave', array( + 'mode' => $this->mode, + 'id' => isset($this->id) ? $this->id : '', + 'doc' => $this->toArray(), + 'docObj' => $this + ), $fire_events); + + + $this->modx->getAliasListing($this->id); + + if ($clearCache) { + $this->clearCache($fire_events); + } + $this->decodeFields(); + + return $this->id; + } + + /** + * @param $tvId + * @return bool + */ + protected function belongsToTemplate($tvId) + { + $template = $this->get('template'); + + return isset($this->tvTpl[$template]) && in_array($tvId, $this->tvTpl[$template]); + } + + /** + * @param $ids + * @return $this + * @throws Exception + */ + public function toTrash($ids) + { + $ignore = $this->systemID(); + $_ids = $this->cleanIDs($ids, ',', $ignore); + if (is_array($_ids) && $_ids != array()) { + $id = $this->sanitarIn($_ids); + $uid = (int)$this->modx->getLoginUserId(); + $deletedon = time() + $this->modxConfig('server_offset_time'); + $this->query("UPDATE {$this->makeTable('site_content')} SET `deleted`=1, `deletedby`={$uid}, `deletedon`={$deletedon} WHERE `id` IN ({$id})"); + } else { + throw new Exception('Invalid IDs list for mark trash:
' . print_r($ids,
+                    1) . '
please, check ignore list:
' . print_r($ignore, 1) . '
'); + } + + return $this; + } + + /** + * @param bool $fire_events + * @return $this + */ + public function clearTrash($fire_events = false) + { + $q = $this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `deleted`='1'"); + $_ids = $this->modx->db->getColumn('id', $q); + if (is_array($_ids) && $_ids != array()) { + $this->invokeEvent('OnBeforeEmptyTrash', array( + "ids" => $_ids + ), $fire_events); + + $id = $this->sanitarIn($_ids); + $this->query("DELETE from {$this->makeTable('site_content')} where `id` IN ({$id})"); + $this->query("DELETE from {$this->makeTable('site_tmplvar_contentvalues')} where `contentid` IN ({$id})"); + + $this->invokeEvent('OnEmptyTrash', array( + "ids" => $_ids + ), $fire_events); + } + + return $this; + } + + /** + * @param $ids + * @param int|bool $depth + * @return array + */ + public function children($ids, $depth) + { + $_ids = $this->cleanIDs($ids, ','); + if (is_array($_ids) && $_ids != array()) { + $id = $this->sanitarIn($_ids); + if (! empty($id)) { + $q = $this->query("SELECT `id` FROM {$this->makeTable('site_content')} where `parent` IN ({$id})"); + $id = $this->modx->db->getColumn('id', $q); + if ($depth > 0 || $depth === true) { + $id = $this->children($id, is_bool($depth) ? $depth : ($depth - 1)); + } + $_ids = array_merge($_ids, $id); + } + } + + return $_ids; + } + + /** + * @param string|array $ids + * @param bool $fire_events + * @return $this + * @throws Exception + */ + public function delete($ids, $fire_events = false) + { + $ids = $this->children($ids, true); + $_ids = $this->cleanIDs($ids, ',', $this->systemID()); + $this->invokeEvent('OnBeforeDocFormDelete', array( + 'ids' => $_ids + ), $fire_events); + $this->toTrash($_ids); + $this->invokeEvent('OnDocFormDelete', array( + 'ids' => $_ids + ), $fire_events); + + return $this; + } + + /** + * @return array + */ + private function systemID() + { + $ignore = array( + 0, //empty document + (int)$this->modxConfig('site_start'), + (int)$this->modxConfig('error_page'), + (int)$this->modxConfig('unauthorized_page'), + (int)$this->modxConfig('site_unavailable_page') + ); + $data = $this->query("SELECT DISTINCT setting_value FROM {$this->makeTable('web_user_settings')} WHERE `setting_name`='login_home' AND `setting_value`!=''"); + $data = $this->modx->db->makeArray($data); + foreach ($data as $item) { + $ignore[] = (int)$item['setting_value']; + } + + return array_unique($ignore); + + } + + /** + * @param $alias + * @return string + */ + protected function checkAlias($alias) + { + $alias = strtolower($alias); + if ($this->modxConfig('friendly_urls')) { + $_alias = $this->escape($alias); + if ((! $this->modxConfig('allow_duplicate_alias') && ! $this->modxConfig('use_alias_path')) || ($this->modxConfig('allow_duplicate_alias') && $this->modxConfig('use_alias_path'))) { + $flag = $this->modx->db->getValue($this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `alias`='{$_alias}' AND `parent`={$this->get('parent')} LIMIT 1")); + } else { + $flag = $this->modx->db->getValue($this->query("SELECT `id` FROM {$this->makeTable('site_content')} WHERE `alias`='{$_alias}' LIMIT 1")); + } + if (($flag && $this->newDoc) || (! $this->newDoc && $flag && $this->id != $flag)) { + $suffix = substr($alias, -2); + if (preg_match('/-(\d+)/', $suffix, $tmp) && isset($tmp[1]) && (int)$tmp[1] > 1) { + $suffix = (int)$tmp[1] + 1; + $alias = substr($alias, 0, -2) . '-' . $suffix; + } else { + $alias .= '-2'; + } + $alias = $this->checkAlias($alias); + } + } + + return $alias; + } + + /** + * @param $key + * @return bool + */ + public function issetField($key) + { + return (array_key_exists($key, $this->default_field) || (array_key_exists($key, $this->tv) && $this->belongsToTemplate($this->tv[$key]))); + } + + /** + * @param bool $reload + * @return $this + */ + protected function get_TV($reload = false) + { + $this->modx->_TVnames = $this->loadFromCache('_TVnames'); + if ($this->modx->_TVnames === false || empty($this->modx->_TVnames) || $reload) { + $this->modx->_TVnames = array(); + $result = $this->query('SELECT `id`,`name`,`default_text`,`type`,`display`,`display_params` FROM ' . $this->makeTable('site_tmplvars')); + while ($row = $this->modx->db->GetRow($result)) { + $this->modx->_TVnames[$row['name']] = array( + 'id' => $row['id'], + 'type' => $row['type'], + 'default' => $row['default_text'], + 'display' => $row['display'], + 'display_params' => $row['display_params'] + ); + } + $this->saveToCache($this->modx->_TVnames, '_TVnames'); + } + $arrayTypes = array('checkbox', 'listbox-multiple'); + $arrayTVs = array(); + foreach ($this->modx->_TVnames as $name => $data) { + $this->tvid[$data['id']] = $name; + $this->tv[$name] = $data['id']; + if (in_array($data['type'], $arrayTypes)) { + $arrayTVs[] = $name; + } + } + if (empty($this->tvaFields)) { + $this->tvaFields = $arrayTVs; + } + $this->loadTVTemplate()->loadTVDefault(array_values($this->tv)); + + return $this; + } + + /** + * @return $this + */ + protected function loadTVTemplate() + { + $this->tvTpl = $this->loadFromCache('_tvTpl'); + if ($this->tvTpl === false) { + $q = $this->query("SELECT `tmplvarid`, `templateid` FROM " . $this->makeTable('site_tmplvar_templates')); + $this->tvTpl = array(); + while ($item = $this->modx->db->getRow($q)) { + $this->tvTpl[$item['templateid']][] = $item['tmplvarid']; + } + $this->saveToCache($this->tvTpl, '_tvTpl'); + } + + return $this; + } + + /** + * @param array $tvId + * @return $this + */ + protected function loadTVDefault(array $tvId = array()) + { + if (is_array($tvId) && ! empty($tvId)) { + $this->tvd = array(); + foreach ($tvId as $id) { + $name = $this->tvid[$id]; + $this->tvd[$name] = $this->modx->_TVnames[$name]; + } + } + + return $this; + } + + /** + * @param $tpl + * @return int + * @throws Exception + */ + public function setTemplate($tpl) + { + if (!is_numeric($tpl) || $tpl != (int)$tpl) { + if (is_scalar($tpl)) { + $sql = "SELECT `id` FROM {$this->makeTable('site_templates')} WHERE `templatename` = '" . $this->escape($tpl) . "'"; + $rs = $this->query($sql); + if (! $rs || $this->modx->db->getRecordCount($rs) <= 0) { + throw new Exception("Template {$tpl} is not exists"); + } + $tpl = $this->modx->db->getValue($rs); + } else { + throw new Exception("Invalid template name: " . print_r($tpl, 1)); + } + } + + return (int)$tpl; + } + + /** + * @return string + */ + protected function getAlias() + { + if ($this->modxConfig('friendly_urls') && $this->modxConfig('automatic_alias') && $this->get('alias') == '') { + $alias = strtr($this->get('pagetitle'), $this->table); + } else { + if ($this->get('alias') != '') { + $alias = $this->get('alias'); + } else { + $alias = ''; + } + } + $alias = $this->modx->stripAlias($alias); + + return $this->checkAlias($alias); + } + + /** + * @param int $parent + * @param string $criteria + * @param string $dir + * @return $this + * + * Пересчет menuindex по полю таблицы site_content + */ + public function updateMenuindex($parent, $criteria = 'id', $dir = 'asc') + { + $dir = strtolower($dir) == 'desc' ? 'desc' : 'asc'; + if (is_integer($parent) && $criteria !== '') { + $this->query("SET @index := 0"); + $this->query("UPDATE {$this->makeTable('site_content')} SET `menuindex` = (@index := @index + 1) WHERE `parent`={$parent} ORDER BY {$criteria} {$dir}"); + } + + return $this; + } + + /** + * Устанавливает значение шаблона согласно системной настройке + * + * @return $this + */ + public function setDefaultTemplate() + { + $parent = $this->get('parent'); + $template = $this->modxConfig('default_template'); + switch ($this->modxConfig('auto_template_logic')) { + case 'sibling': + if (! $parent) { + $site_start = $this->modxConfig('site_start'); + $where = "sc.isfolder=0 AND sc.id!={$site_start}"; + $sibl = $this->modx->getDocumentChildren($parent, 1, 0, 'template', $where, 'menuindex', 'ASC', 1); + if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { + $template = $sibl[0]['template']; + } + } else { + $sibl = $this->modx->getDocumentChildren($parent, 1, 0, 'template', 'isfolder=0', 'menuindex', + 'ASC', 1); + if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { + $template = $sibl[0]['template']; + } else { + $sibl = $this->modx->getDocumentChildren($parent, 0, 0, 'template', 'isfolder=0', 'menuindex', + 'ASC', 1); + if (isset($sibl[0]['template']) && $sibl[0]['template'] !== '') { + $template = $sibl[0]['template']; + } + } + } + break; + case 'parent': + if ($parent) { + $_parent = $this->modx->getPageInfo($parent, 0, 'template'); + if (isset($_parent['template'])) { + $template = $_parent['template']; + } + } + break; + } + $this->set('template', $template); + + return $this; + } + + /** + * Декодирует конкретное поле + * @param string $field Имя поля + * @param bool $store обновить распакованное поле + * @return array ассоциативный массив с данными из json строки + */ + public function decodeField($field, $store = false) + { + $out = array(); + if ($this->isDecodableField($field)) { + $data = $this->get($field); + if ($this->isTVarrayField($field)) { + $out = explode('||', $data); + } else { + $out = jsonHelper::jsonDecode($data, array('assoc' => true), true); + } + } + if ($store) { + $this->field[$field] = $out; + $this->markAsDecode($field); + } + + return $out; + } + + /** + * Запаковывает конкретное поле в JSON + * @param string $field Имя поля + * @param bool $store обновить запакованное поле + * @return string|null json строка + */ + public function encodeField($field, $store = false) + { + $out = null; + if ($this->isEncodableField($field)) { + $data = $this->get($field); + if ($this->isTVarrayField($field)) { + $out = is_array($data) ? implode('||', $data) : (string)$data; + } else { + $out = json_encode($data); + } + } + if ($store) { + $this->field[$field] = $out; + $this->markAsEncode($field); + } + + return $out; + } + + /** + * Может ли содержать данное поле json массив + * @param string $field имя поля + * @return boolean + */ + public function isTVarrayField($field) + { + return (is_scalar($field) && in_array($field, $this->tvaFields)); + } + + /** + * Пометить все поля как запакованные + * @return $this + */ + public function markAllEncode() + { + parent::markAllEncode(); + foreach ($this->tvaFields as $field) { + $this->markAsEncode($field); + } + + return $this; + } + + /** + * Пометить все поля как распакованные + * @return $this + */ + public function markAllDecode() + { + parent::markAllDecode(); + foreach ($this->tvaFields as $field) { + $this->markAsDecode($field); + } + + return $this; + } + + /** + * @param int $docId + */ + public function getDocumentGroups($docId = 0) + { + $out = array(); + $doc = $this->switchObject($docId); + if (null !== $doc->getID()) { + $doc_groups = $this->makeTable('document_groups'); + $docgroup_names = $this->makeTable('documentgroup_names'); + + $rs = $this->query("SELECT `dg`.`document_group`, `dgn`.`name` FROM {$doc_groups} as `dg` INNER JOIN {$docgroup_names} as `dgn` ON `dgn`.`id`=`dg`.`document_group` + WHERE `dg`.`document` = " . $doc->getID()); + while ($row = $this->modx->db->getRow($rs)) { + $out[$row['document_group']] = $row['name']; + } + + } + unset($doc); + + return $out; + } + + /** + * @param int $docId + * @param array $groupIds + * @return $this + */ + public function setDocumentGroups($docId = 0, $groupIds = array()) + { + if (!is_array($groupIds)) { + return $this; + } + if ($this->newDoc && $docId == 0) { + $this->groupIds = $groupIds; + } else { + $doc = $this->switchObject($docId); + if ($id = $doc->getID()) { + foreach ($groupIds as $gid) { + $this->query("REPLACE INTO {$this->makeTable('document_groups')} (`document_group`, `document`) VALUES ('{$gid}', '{$id}')"); + } + if (! $this->newDoc) { + $groupIds = empty($groupIds) ? '0' : implode(',', $groupIds); + $this->query("DELETE FROM {$this->makeTable('document_groups')} WHERE `document`={$id} AND `document_group` NOT IN ({$groupIds})"); + } + } + unset($doc); + $this->groupIds = array(); + } + + return $this; + } +} diff --git a/assets/lib/MODxAPI/modUsers.php b/assets/lib/MODxAPI/modUsers.php index a5a8bcbb..64af4797 100644 --- a/assets/lib/MODxAPI/modUsers.php +++ b/assets/lib/MODxAPI/modUsers.php @@ -17,7 +17,7 @@ class modUsers extends MODxAPI ), 'attribute' => array( 'fullname' => '', - 'role' => '', + 'role' => 0, 'email' => '', 'phone' => '', 'mobilephone' => '', @@ -52,6 +52,11 @@ class modUsers extends MODxAPI */ protected $givenPassword = ''; protected $groupIds = array(); + protected $userIdCache = array( + 'attribute.internalKey' => '', + 'attribute.email' => '', + 'user.username' => '' + ); /** * @var integer @@ -135,6 +140,34 @@ public function create($data = array()) return $this; } + /** + * + */ + public function close() + { + parent::close(); + $this->userIdCache = array( + 'attribute.internalKey' => '', + 'attribute.email' => '', + 'user.username' => '' + ); + } + + /** + * @param $id + * @return mixed + */ + protected function getUserId($id) { + $find = $this->findUser($id); + if ($find && ! empty($this->userIdCache[$find])) { + $id = $this->userIdCache[$find]; + } else { + $id = null; + } + + return $id; + } + /** * @param $id * @return $this @@ -142,16 +175,19 @@ public function create($data = array()) public function edit($id) { $id = is_scalar($id) ? trim($id) : ''; - if ($this->getID() != $id) { + if ($this->getUserId($id) != $id) { $this->close(); $this->newDoc = false; - if (!$find = $this->findUser($id)) { + if (! $find = $this->findUser($id)) { $this->id = null; } else { $this->set('editedon', time()); $this->editQuery($find, $id); $this->id = empty($this->field['internalKey']) ? null : $this->get('internalKey'); + $this->userIdCache['attribute.internalKey'] = $this->getID(); + $this->userIdCache['attribute.email'] = $this->get('email'); + $this->userIdCache['user.username'] = $this->get('username'); $this->store($this->toArray()); unset($this->field['id']); unset($this->field['internalKey']); @@ -170,7 +206,7 @@ protected function editQuery($find, $id) $result = $this->query(" SELECT * from {$this->makeTable('web_user_attributes')} as attribute LEFT JOIN {$this->makeTable('web_users')} as user ON user.id=attribute.internalKey - WHERE BINARY {$find}='{$this->escape($id)}' + WHERE {$find}='{$this->escape($id)}' "); $this->field = $this->modx->db->getRow($result); } @@ -182,7 +218,7 @@ protected function editQuery($find, $id) */ public function set($key, $value) { - if (is_scalar($value) && is_scalar($key) && !empty($key)) { + if (is_scalar($value) && is_scalar($key) && ! empty($key)) { switch ($key) { case 'password': $this->givenPassword = $value; @@ -233,7 +269,7 @@ public function save($fire_events = false, $clearCache = false) return false; } - if (!$this->checkUnique('web_users', 'username')) { + if ($this->isChanged('username') && ! $this->checkUnique('web_users', 'username')) { $this->log['UniqueUsername'] = 'username not unique
' . print_r(
                 $this->get('username'),
                 true
@@ -242,7 +278,7 @@ public function save($fire_events = false, $clearCache = false)
             return false;
         }
 
-        if (!$this->checkUnique('web_user_attributes', 'email', 'internalKey')) {
+        if ($this->isChanged('username') && ! $this->checkUnique('web_user_attributes', 'email', 'internalKey')) {
             $this->log['UniqueEmail'] = 'Email not unique 
' . print_r($this->get('email'), true) . '
'; return false; @@ -257,7 +293,7 @@ public function save($fire_events = false, $clearCache = false) $this->Uset($key, 'user'); unset($fld[$key]); } - if (!empty($this->set['user'])) { + if (! empty($this->set['user'])) { if ($this->newDoc) { $SQL = "INSERT into {$this->makeTable('web_users')} SET " . implode(', ', $this->set['user']); } else { @@ -277,7 +313,7 @@ public function save($fire_events = false, $clearCache = false) unset($fld['id']); foreach ($fld as $key => $value) { - if ($value == '' || !$this->isChanged($key)) { + if ($value == '' || ! $this->isChanged($key)) { continue; } $result = $this->query("SELECT `setting_value` FROM {$this->makeTable('web_user_settings')} WHERE `webuser` = '{$this->id}' AND `setting_name` = '{$key}'"); @@ -287,7 +323,7 @@ public function save($fire_events = false, $clearCache = false) $this->query("INSERT into {$this->makeTable('web_user_settings')} SET `webuser` = {$this->id},`setting_name` = '{$key}',`setting_value` = '{$value}';"); } } - if (!$this->newDoc && $this->givenPassword) { + if (! $this->newDoc && $this->givenPassword) { $this->invokeEvent('OnWebChangePassword', array( 'userObj' => $this, 'userid' => $this->id, @@ -298,7 +334,7 @@ public function save($fire_events = false, $clearCache = false) ), $fire_events); } - if (!empty($this->groupIds)) { + if (! empty($this->groupIds)) { $this->setUserGroups($this->id, $this->groupIds); } @@ -329,7 +365,7 @@ protected function saveQuery(array &$fld) $this->Uset($key, 'attribute'); unset($fld[$key]); } - if (!empty($this->set['attribute'])) { + if (! empty($this->set['attribute'])) { if ($this->newDoc) { $this->set('internalKey', $this->id)->Uset('internalKey', 'attribute'); $SQL = "INSERT into {$this->makeTable('web_user_attributes')} SET " . implode( @@ -372,6 +408,9 @@ public function delete($ids, $fire_events = false) return $flag; } + /** + * @return mixed + */ protected function deleteQuery() { return $this->query(" @@ -415,8 +454,12 @@ public function authUser($id = 0, $fulltime = true, $cookieName = 'WebLoginPE', */ public function checkBlock($id = 0) { - $tmp = clone $this; - if ($id && $tmp->getID() != $id) { + if ($this->getID()) { + $tmp = clone $this; + } else { + $tmp = $this; + } + if ($id && $tmp->getUserId($id) != $id) { $tmp->edit($id); } $now = time(); @@ -424,7 +467,7 @@ public function checkBlock($id = 0) $b = $tmp->get('blocked'); $bu = $tmp->get('blockeduntil'); $ba = $tmp->get('blockedafter'); - $flag = (($b && !$bu && !$ba) || ($bu && $now < $bu) || ($ba && $now > $ba)); + $flag = (($b && ! $bu && ! $ba) || ($bu && $now < $bu) || ($ba && $now > $ba)); unset($tmp); return $flag; @@ -439,13 +482,17 @@ public function checkBlock($id = 0) */ public function testAuth($id, $password, $blocker, $fire_events = false) { - $tmp = clone $this; - if ($id && $tmp->getID() != $id) { + if ($this->getID()) { + $tmp = clone $this; + } else { + $tmp = $this; + } + if ($id && $tmp->getUserId($id) != $id) { $tmp->edit($id); } $flag = $pluginFlag = false; - if ((null !== $tmp->getID()) && (!$blocker || ($blocker && !$tmp->checkBlock($id))) + if ((null !== $tmp->getID()) && (! $blocker || ($blocker && ! $tmp->checkBlock($id))) ) { $eventResult = $this->getInvokeEventResult('OnWebAuthentication', array( 'userObj' => $this, @@ -461,7 +508,7 @@ public function testAuth($id, $password, $blocker, $fire_events = false) } else { $pluginFlag = (bool)$eventResult; } - if (!$pluginFlag) { + if (! $pluginFlag) { $flag = ($tmp->get('password') == $tmp->getPassword($password)); } } @@ -481,7 +528,7 @@ public function AutoLogin($fulltime = true, $cookieName = 'WebLoginPE', $fire_ev if (isset($_COOKIE[$cookieName])) { $cookie = explode('|', $_COOKIE[$cookieName], 4); if (isset($cookie[0], $cookie[1], $cookie[2]) && strlen($cookie[0]) == 32 && strlen($cookie[1]) == 32) { - if (!$fulltime && isset($cookie[4])) { + if (! $fulltime && isset($cookie[4])) { $fulltime = (int)$cookie[4]; } $this->close(); @@ -491,7 +538,7 @@ public function AutoLogin($fulltime = true, $cookieName = 'WebLoginPE', $fire_ev && null !== $this->getID() && $this->get('password') == $cookie[1] && $this->get('sessionid') == $cookie[2] - && !$this->checkBlock($this->getID()) + && ! $this->checkBlock($this->getID()) ) { $flag = $this->authUser($this->getID(), $fulltime, $cookieName, $fire_events); } @@ -507,7 +554,7 @@ public function AutoLogin($fulltime = true, $cookieName = 'WebLoginPE', $fire_ev */ public function logOut($cookieName = 'WebLoginPE', $fire_events = false) { - if (!$uid = $this->modx->getLoginUserID('web')) { + if (! $uid = $this->modx->getLoginUserID('web')) { return; } $params = array( @@ -551,7 +598,7 @@ protected function SessionHandler($directive, $cookieName, $remember = true) $_SESSION['webUsrConfigSet'] = array(); $_SESSION['webUserGroupNames'] = $this->getUserGroups(); $_SESSION['webDocgroups'] = $this->getDocumentGroups(); - if (!empty($remember)) { + if (! empty($remember)) { $this->setAutoLoginCookie($cookieName, $remember); } } @@ -603,7 +650,7 @@ public function isSecure() */ public function setAutoLoginCookie($cookieName, $remember = true) { - if (!empty($cookieName) && $this->getID() !== null) { + if (! empty($cookieName) && $this->getID() !== null) { $secure = $this->isSecure(); $remember = is_bool($remember) ? $this->getRememberTime() : (int)$remember; $cookieValue = array(md5($this->get('username')), $this->get('password'), $this->get('sessionid'), $remember); @@ -679,7 +726,7 @@ public function setUserGroups($userID = 0, $groupIds = array()) foreach ($groupIds as $gid) { $this->query("REPLACE INTO {$this->makeTable('web_groups')} (`webgroup`, `webuser`) VALUES ('{$gid}', '{$uid}')"); } - if (!$this->newDoc) { + if (! $this->newDoc) { $groupIds = empty($groupIds) ? '0' : implode(',', $groupIds); $this->query("DELETE FROM {$this->makeTable('web_groups')} WHERE `webuser`={$uid} AND `webgroup` NOT IN ({$groupIds})"); } diff --git a/assets/lib/Module/Action.php b/assets/lib/Module/Action.php index f06b6189..4a953439 100644 --- a/assets/lib/Module/Action.php +++ b/assets/lib/Module/Action.php @@ -95,7 +95,7 @@ protected static function _workValue($callback) self::$TPL = 'ajax/getValue'; $data = Helper::jeditable('data'); $out = array(); - if (!empty($data)) { + if (! empty($data)) { $modObj = self::$classTable; $modObj->edit($data['id']); if ($modObj->getID() !== null && ((is_object($callback) && ($callback instanceof \Closure)) || is_callable($callback))) { diff --git a/assets/lib/Module/Helper.php b/assets/lib/Module/Helper.php index 14d23f85..449ab3ff 100644 --- a/assets/lib/Module/Helper.php +++ b/assets/lib/Module/Helper.php @@ -70,7 +70,7 @@ public static function jeditable($key = 'id', $post = true) isset($request[$key]) && is_scalar($request[$key]) && preg_match("/^(.*)_(\d+)$/i", $request[$key], $match) ) ? $match : array(); - if (!empty($match)) { + if (! empty($match)) { $data = array( 'key' => $match[1], 'id' => $match[2] @@ -96,7 +96,7 @@ public static function curl($url, $data = '', $post = false, array $header = arr if ($post) { curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } - if (!empty($header)) { + if (! empty($header)) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } curl_setopt($ch, CURLOPT_TIMEOUT, 10); diff --git a/assets/lib/Module/Template.php b/assets/lib/Module/Template.php old mode 100755 new mode 100644 index 08ddcd13..794d1948 --- a/assets/lib/Module/Template.php +++ b/assets/lib/Module/Template.php @@ -7,13 +7,13 @@ abstract class Template { /** - * @var \DocumentParser|null + * @var \DocumentParser */ - protected $_modx = null; + protected $_modx; /** - * @var null|string + * @var string */ - protected $_tplFolder = null; + protected $_tplFolder; /** * @var string */ @@ -47,7 +47,7 @@ abstract class Template * Template constructor. * @param \DocumentParser $modx * @param bool $ajax - * @param null $tplFolder + * @param null|string $tplFolder */ public function __construct(\DocumentParser $modx, $ajax = false, $tplFolder = null) { @@ -166,7 +166,7 @@ public function showBody($TplName, array $tplParams = array()) /** * @param $key * @param array $param - * @param null $default + * @param mixed $default * @return mixed|null */ public static function getParam($key, array $param = array(), $default = null) @@ -177,7 +177,7 @@ public static function getParam($key, array $param = array(), $default = null) /** * @param $action * @param array $data - * @param null $module + * @param null|int|string $module * @param bool $full * @return string */ diff --git a/assets/lib/SimpleTab/controller.abstract.php b/assets/lib/SimpleTab/controller.abstract.php index 544b36a9..691ff371 100644 --- a/assets/lib/SimpleTab/controller.abstract.php +++ b/assets/lib/SimpleTab/controller.abstract.php @@ -72,7 +72,7 @@ public function remove() $ids = isset($_POST['ids']) ? (string)$_POST['ids'] : ''; $ids = isset($_POST['id']) ? (string)$_POST['id'] : $ids; $out['success'] = false; - if (!empty($ids)) { + if (! empty($ids)) { if ($this->data->deleteAll($ids, $this->rid)) { $out['success'] = true; } @@ -90,7 +90,7 @@ public function place() $ids = isset($_POST['ids']) ? (string)$_POST['ids'] : ''; $dir = isset($_POST['dir']) ? $_POST['dir'] : 'top'; $out['success'] = false; - if (!empty($ids)) { + if (! empty($ids)) { if ($this->data->place($ids, $dir, $this->rid)) { $out['success'] = true; } @@ -125,7 +125,7 @@ public function reorder() */ public function listing() { - if (!$this->rid) { + if (! $this->rid) { $this->isExit = true; return; diff --git a/assets/lib/SimpleTab/plugin.class.php b/assets/lib/SimpleTab/plugin.class.php index 0b9b6638..2379ba71 100644 --- a/assets/lib/SimpleTab/plugin.class.php +++ b/assets/lib/SimpleTab/plugin.class.php @@ -102,10 +102,9 @@ public function checkPermissions() $templates = isset($this->params['templates']) ? explode(',', $this->params['templates']) : false; $roles = isset($this->params['roles']) ? explode(',', $this->params['roles']) : false; - $tplFlag = ($this->checkTemplate && !$templates || ($templates && !in_array( - $this->params['template'], - $templates - ))); + $tplFlag = ($this->checkTemplate && ( + ! $templates || ($templates && !in_array($this->params['template'],$templates)) + )); $documents = isset($this->params['documents']) ? explode(',', $this->params['documents']) : false; $docFlag = ($this->checkId && $tplFlag) ? !($documents && in_array($this->params['id'], $documents)) : $tplFlag; @@ -121,9 +120,9 @@ public function checkPermissions() */ public function prerender() { - if (!$this->checkTable()) { + if (! $this->checkTable()) { $result = $this->createTable(); - if (!$result) { + if (! $result) { $this->modx->logEvent(0, 3, "Cannot create {$this->table} table.", $this->pluginName); return; @@ -184,7 +183,7 @@ public function getTplPlaceholders() */ public function render() { - if (!$this->checkPermissions()) { + if (! $this->checkPermissions()) { $output = $this->prerender(); if ($output !== false) { $ph = $this->getTplPlaceholders(); @@ -205,7 +204,7 @@ public function render() */ public function renderEmpty() { - if (!$this->checkPermissions()) { + if (! $this->checkPermissions()) { $tpl = MODX_BASE_PATH . $this->emptyTpl; if ($this->fs->checkFile($tpl)) { $output = '[+js+]' . file_get_contents($tpl); @@ -249,9 +248,9 @@ public function registerEvents($events = array(), $eventsType = '6') $eventsTable = $this->modx->getFullTableName('system_eventnames'); foreach ($events as $event) { $result = $this->modx->db->select('`id`', $eventsTable, "`name` = '{$event}'"); - if (!$this->modx->db->getRecordCount($result)) { + if (! $this->modx->db->getRecordCount($result)) { $sql = "INSERT INTO {$eventsTable} VALUES (NULL, '{$event}', '{$eventsType}', '{$this->pluginName} Events')"; - if (!$this->modx->db->query($sql)) { + if (! $this->modx->db->query($sql)) { $this->modx->logEvent(0, 3, "Cannot register {$event} event.", $this->pluginName); } } diff --git a/assets/lib/SimpleTab/table.abstract.php b/assets/lib/SimpleTab/table.abstract.php index dd2d57f4..7dfe634b 100644 --- a/assets/lib/SimpleTab/table.abstract.php +++ b/assets/lib/SimpleTab/table.abstract.php @@ -123,7 +123,7 @@ public function deleteThumb($url, $cache = false) } $dir = $this->fs->takeFileDir($url); $iterator = new \FilesystemIterator($dir); - if (!$iterator->valid()) { + if (! $iterator->valid()) { rmdir($dir); } if ($cache) { diff --git a/assets/lib/class.modxRTEbridge.php b/assets/lib/class.modxRTEbridge.php index f32d9b65..5279133f 100755 --- a/assets/lib/class.modxRTEbridge.php +++ b/assets/lib/class.modxRTEbridge.php @@ -84,7 +84,7 @@ public function __construct($editorKey = NULL, $bridgeConfig=array(), $tvOptions foreach($this->gSettingsRows as $param=>$row) { if(isset($row['defaultCheckbox']) && $row['defaultCheckbox']) { $useGlobalName = $editorKey . '_' . $param . '_useglobal'; - $this->modxParams[$param . '_useglobal'] = !empty($editorConfig[$useGlobalName]) || (isset($editorConfig[$useGlobalName]) && is_null($editorConfig[$useGlobalName])) ? '1' : '0'; + $this->modxParams[$param . '_useglobal'] = !isset($editorConfig[$useGlobalName]) || !empty($editorConfig[$useGlobalName]) || (isset($editorConfig[$useGlobalName]) && is_null($editorConfig[$useGlobalName])) ? '1' : '0'; } } @@ -94,7 +94,7 @@ public function __construct($editorKey = NULL, $bridgeConfig=array(), $tvOptions // Handle defaultCheckbox if(isset($row['defaultCheckbox']) && $row['defaultCheckbox']) { $useGlobalName = $editorKey . '_' . $param . '_useglobal'; - $this->modxParams[$param . '_useglobal'] = !empty($editorConfig[$useGlobalName]) || (isset($editorConfig[$useGlobalName]) && is_null($editorConfig[$useGlobalName])) ? '1' : '0'; + $this->modxParams[$param . '_useglobal'] = !isset($editorConfig[$useGlobalName]) || !empty($editorConfig[$useGlobalName]) || (isset($editorConfig[$useGlobalName]) && is_null($editorConfig[$useGlobalName])) ? '1' : '0'; } }; @@ -368,7 +368,7 @@ public function renderBridgeParams($selector) // Load Tv-Options as bridged-params if($selector !== 'initBridge') { foreach ($this->themeConfig as $key => $conf) { - if (isset($this->tvOptions[$selector][$key])) { + if (isset($this->tvOptions[$selector][$key]) && $key != 'theme') { // Issue #577 $this->themeConfig[$key]['bridged'] = $this->tvOptions[$selector][$key]; } } @@ -452,11 +452,11 @@ public function renderConfigRawString() // Get final value of editor-config public function determineValue($key, $conf=NULL) { - if($conf == NULL) { $conf = $this->themeConfig[$key]; }; + if($conf == NULL && isset($this->themeConfig[$key])) { $conf = $this->themeConfig[$key]; }; $value = isset($this->themeConfig[$key]['bridged']) ? $this->themeConfig[$key]['bridged'] : NULL; $value = $value === NULL && isset($this->themeConfig[$key]['force']) ? $this->themeConfig[$key]['force'] : $value; - $value = $value === NULL ? $this->themeConfig[$key]['value'] : $value; + $value = $value === NULL && isset($this->themeConfig[$key]['value']) ? $this->themeConfig[$key]['value'] : $value; if(!in_array($conf['type'], array('boolean','bool'))) { if ($value === '' && $conf['empty'] === false) { // Empty values not allowed @@ -966,7 +966,7 @@ public function getTemplateChunkList() $templatesArr = array(); - if ($modx->getLoginUserType() === 'manager') { + if ($modx->getLoginUserType() === 'manager' || IN_MANAGER_MODE) { $modx->getSettings(); $ids = $modx->config[$this->editorKey.'_template_docs']; @@ -1017,7 +1017,7 @@ public function saveContentProcessor($rid, $ppPluginName, $ppEditableIds='editab { global $modx; - if ($rid > 0 && $modx->getLoginUserType() === 'manager') + if ($rid > 0 && ($modx->getLoginUserType() === 'manager' || IN_MANAGER_MODE)) { if(!isset($_POST['secHash']) || !isset($_SESSION['modxRTEbridge']['secHash'][$rid]) || diff --git a/assets/lib/class.summary.php b/assets/lib/class.summary.php index 9ec665d7..0e325690 100644 --- a/assets/lib/class.summary.php +++ b/assets/lib/class.summary.php @@ -41,9 +41,9 @@ class SummaryText /** * SummaryText constructor. - * @param $text - * @param $action - * @param null $break + * @param string $text + * @param string $action + * @param null|string $break */ public function __construct($text, $action, $break = null) { @@ -214,7 +214,7 @@ protected function html_substr($posttext, $minimum_length = 200, $length_offset } else { $next_char = ""; } - if (!$quotes_on) { + if (! $quotes_on) { // Check if it's a tag // On a "<" add 3 if it's an opening tag (like ) @@ -354,7 +354,7 @@ private function closeTags($text) if (mb_strstr($tag, ' ', 'UTF-8')) { $tag = mb_substr($tag, 0, strpos($tag, ' '), 'UTF-8'); } - if (!mb_stristr($tag, 'br', 'UTF-8') && !mb_stristr($tag, 'img', 'UTF-8') && !empty($tag)) { + if (! mb_stristr($tag, 'br', 'UTF-8') && ! mb_stristr($tag, 'img', 'UTF-8') && ! empty($tag)) { $endTags .= ''; } } diff --git a/assets/modules/docmanager/templates/main.tpl b/assets/modules/docmanager/templates/main.tpl index 81d9b610..332668cd 100755 --- a/assets/modules/docmanager/templates/main.tpl +++ b/assets/modules/docmanager/templates/main.tpl @@ -75,6 +75,7 @@ [+onManagerMainFrameHeaderHTMLBlock+] +

[+lang.DM_module_title+] diff --git a/assets/modules/docmanager/templates/update.tpl b/assets/modules/docmanager/templates/update.tpl index 14f0688c..0b948c84 100755 --- a/assets/modules/docmanager/templates/update.tpl +++ b/assets/modules/docmanager/templates/update.tpl @@ -24,6 +24,7 @@ +

[+lang.DM_module_title+]

diff --git a/assets/modules/docmanager/tv.ajax.php b/assets/modules/docmanager/tv.ajax.php index b51ce802..bf3d2f7d 100755 --- a/assets/modules/docmanager/tv.ajax.php +++ b/assets/modules/docmanager/tv.ajax.php @@ -93,7 +93,7 @@ function renderFormElement($field_type, $field_id, $default_text, $field_element case "dropdown": // handler for select boxes $field_html .= ''; $index_list = ParseIntputOptions(ProcessTVCommand($field_elements, $field_id)); - while (list($item, $itemvalue) = each($index_list)) { + foreach($index_list as $item => $itemvalue) { list($item, $itemvalue) = (is_array($itemvalue)) ? $itemvalue : explode("==", $itemvalue); if (strlen($itemvalue) == 0) { $itemvalue = $item; @@ -118,7 +118,7 @@ function renderFormElement($field_type, $field_id, $default_text, $field_element $field_value = explode("||", $field_value); $field_html .= ' - - -
- -

'.$tv['caption'].'

- -
'.$tv['description'].'
- -
- '.$tvHtml.' -
- - '.$imagePreview.' - - - '.$editorHtml.' - '; - } - } - - // Page output: close modal box and refresh parent frame - else $output .= ''; - - // Page output: footer - $output .= ' - - - '; - } - - else { - $output = 'Error: Access denied.'; - } - } - - // QM+ with toolbar - else { - - if(isset($_SESSION['mgrValidated']) && $_REQUEST['z'] != 'manprev') { - - // If logout break here - if(isset($_REQUEST['logout'])) { - $this->Logout(); - break; - } - - $userID = $_SESSION['mgrInternalKey']; - - // Add ID - $controls .= '
  • ID: '.$docID.'
  • '; - // Go to Manager button - if ($this->managerbutton == 'true') { - $managerButton = ' -
  • - '.$_lang['manager'].' -
  • - '; - $controls .= $managerButton; - } - // Edit button - - $editButton = ' -
  • - '.$_lang['edit_resource'].' -
  • - '; - - // Check if user has manager access to current document - $access = $this->checkAccess(); - - // Does user have permissions to edit document - if($access) $controls .= $editButton; - - if ($this->addbutton == 'true' && $access) { - // Add button - $addButton = ' -
  • - '.$_lang['create_resource_here'].' -
  • - '; - - // Does user have permissions to add document - if($this->modx->hasPermission('new_document')) $controls .= $addButton; - } - - // Custom add buttons if not empty and enough permissions - if ($this->custombutton != '') { - - // Replace [*id*] with current doc id - $this->custombutton = str_replace("[*id*]", $docID, $this->custombutton); - - // Handle [~id~] links - $this->custombutton = $this->modx->rewriteUrls($this->custombutton); - - $buttons = explode("||", $this->custombutton); // Buttons are divided by "||" - - // Custom buttons class index - $i = 0; - - // Parse buttons - foreach($buttons as $key => $field) { - $i++; - - $field = substr($field, 1, -1); // Trim "'" from beginning and from end - $buttonParams = explode("','", $field); // Button params are divided by "','" - - $buttonTitle = $buttonParams[0]; - $buttonAction = $buttonParams[1]; // Contains URL if this is not add button - $buttonParentId = $buttonParams[2]; // Is empty is this is not add button - $buttonTplId = $buttonParams[3]; - - // Button visible for all - if ($buttonParams[4] == '') { - $showButton = TRUE; - } - // Button is visible for specific user roles - else { - $showButton = FALSE; - - // Get user roles the button is visible for - $buttonRoles = explode(",", $buttonParams[4]); // Roles are divided by ',' - - // Check if user role is found - foreach($buttonRoles as $key => $field) { - if ($field == $_SESSION['mgrRole']) { - $showButton = TRUE; - } - } - } - $buttonIcon = $buttonParams[5]; - // Show custom button - if ($showButton) { - switch ($buttonAction) - { - case 'new': - $customButton = ' -
  • - '.$buttonTitle.' -
  • - '; - break; - - case 'link': - $customButton = ' -
  • - '.$buttonTitle.' -
  • - '; - break; - - case 'modal': - $customButton = ' -
  • - '.$buttonTitle.' -
  • - '; - break; - } - $controls .= $customButton; - } - } - } - - - - // Logout button - $logout = $this->modx->config['site_manager_url'].'index.php?a=8&quickmanager=logout&logoutid='.$docID; - $logoutButton = ' -
  • - '.$_lang['logout'].' -
  • - '; - - $controls .= $logoutButton; - - $username = $_SESSION['mgrShortname']; - // Add action buttons - $editor = ' -
    - -
    - -
      -
    • - '.$username.' -
    • - -
    • - '.$controls.' -
    -
    '; - - $MGR_DIR = $this->modx->getManagerPath( ); - $css = ' - '; - - $css .= ' - - '; - - // font-awesome - if ($this->loadfa == 'true') { - $css .= ' - - '; - } - // Buttons Styles - if ($this->buttonStyle == 'actionButtons') { - $css .= ' - - '; - } - else - if ($this->buttonStyle == 'navButtons') { - $css .= ' - - '; - } - // Top toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'top')) { - $css .= ' - - '; - } - else - // Top toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'top')) { - $css .= ' - - '; - } - else - // Top toolbar Relative - if ($this->position == 'before') { - $css .= ' - - '; - } - else - // Bottom toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'bottom')) { - $css .= ' - - '; - } - else - // Bottom toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'bottom')) { - $css .= ' - - '; - } - // Left toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'left')) { - $css .= ' - - '; - } - else - // Left toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'left')) { - $css .= ' - - '; - } - // Right toolbar Autohide true - if (($this->autohide == 'true') && ($this->position == 'right')) { - $css .= ' - - '; - } - else - // Right toolbar Autohide false - if (($this->autohide == 'false') && ($this->position == 'right')) { - $css .= ' - - '; - } - // Remove background - if (($this->removeBg == 'yes') && ($this->buttonStyle == 'actionButtons')) { - $css .= ' - - '; - } - else - if (($this->removeBg == 'yes') && ($this->buttonStyle == 'navButtons')) { - $css .= ' - - '; - } - // Insert jQuery and ColorBox in head if needed - $head = ''; - if ($this->loadfrontendjq == 'true') $head .= ''; - if ($this->loadtb == 'true') { - $head .= ' - - - - - - '; - } - - // Insert ColorBox jQuery definitions for QuickManager+ - $head .= ' - - '; - - $head .= " - - "; - - // Insert QM+ css in head - $head .= $css; - - // Place QM+ head information in head, just before tag - $output = preg_replace('~()~i', $head . '\1', $output); - - // Insert editor toolbar right after tag - $output = preg_replace('~(]*>)~i', '\1' . $editor, $output); - - // Search and create edit buttons in to the content - if ($this->editbuttons == 'true' && $access) { - $output = preg_replace('//', '$2', $output); - } - - // Search and create new document buttons in to the content - if ($this->newbuttons == 'true' && $access) { - $output = preg_replace('//', '$3', $output); - } - - // Search and create new document buttons in to the content - if ($this->tvbuttons == 'true' && $access) { - // Set and get user doc groups for TV permissions - $this->docGroup = ''; - $mrgDocGroups = $_SESSION['mgrDocgroups']; - if (!empty($mrgDocGroups)) $this->docGroup = implode(",", $mrgDocGroups); - - // Create TV buttons and check TV permissions - $output = preg_replace_callback('//', array(&$this, 'createTvButtons'), $output); - } - } - } - - break; - - // Edit document in ThickBox frame (MODX manager frame) - case 'OnDocFormPrerender': - - // If there is Qm call, add control buttons and modify to edit document page - if (intval($_REQUEST['quickmanager']) == 1) { - - global $content, $_style; - - // Set template for new document, action = 4 - if(intval($_GET['a']) == 4) { - - // Custom add button - if (isset($_GET['customaddtplid'])) { - // Set template - $content['template'] = intval($_GET['customaddtplid']); - } - - // Normal add button - else { - switch ($this->tpltype) { - // Template type is parent - case 'parent': - // Get parent document id - $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); - - // Get parent document - $parent = $this->modx->getDocument($pid); - - // Set parent template - $content['template'] = $parent['template']; - - break; - - // Template is specific id - case 'id': - $content['template'] = $this->tplid; - - break; - - // Template is inherited by Inherit Selected Template plugin - case 'selected': // Template is inherited by Inherit Selected Template plugin - case 'sibling': - // Get parent document id - $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); - - if ($this->modx->config['auto_template_logic'] === 'sibling') { - // Eoler: template_autologic in Evolution 1.0.5+ - // http://tracker.modx.com/issues/9586 - $tv = array(); - $sibl = $this->modx->getDocumentChildren($pid, 1, 0, 'template', '', 'menuindex', 'ASC', 1); - if(empty($sibl)) { - $sibl = $this->modx->getDocumentChildren($pid, 0, 0, 'template', '', 'menuindex', 'ASC', 1); - } - if(!empty($sibl)) { - $tv['value'] = $sibl[0]['template']; - } - else $tv['value'] = ''; // Added by yama - } - else - { - // Get "inheritTpl" TV - $tv = $this->modx->getTemplateVar('inheritTpl', '', $pid); - } - - // Set template to inherit - if ($tv['value'] != '') $content['template'] = $tv['value']; - else $content['template'] = $this->modx->config['default_template']; - break; - } - } - } - - // Manager control class - $mc = new Mcc(); - - // Hide default manager action buttons - $mc->addLine('$("#actions").hide();'); - - - // Get doc id - $doc_id = intval($_REQUEST['id']); - - // Get jQuery conflict mode - if ($this->noconflictjq == 'true') $jq_mode = '$j'; - else $jq_mode = '$'; - - // Add action buttons - $url = $this->modx->makeUrl($doc_id,'','','full'); - $mc->addLine('var controls = "";'); - - // Modify head - $mc->head = ''; - if ($this->loadmanagerjq == 'true') $mc->head .= ''; - - // Add control button - $mc->addLine('$("body").prepend(controls);'); - - // Hide fields to from front-end editors - if ($this->hidefields != '') { - $hideFields = explode(",", $this->hidefields); - - foreach($hideFields as $key => $field) { - $mc->hideField($field); - } - } - - // Hide tabs to from front-end editors - if ($this->hidetabs != '') { - $hideTabs = explode(",", $this->hidetabs); - - foreach($hideTabs as $key => $field) { - $mc->hideTab($field); - } - } - - // Hide sections from front-end editors - if ($this->hidesections != '') { - $hideSections = explode(",", $this->hidesections); - - foreach($hideSections as $key => $field) { - $mc->hideSection($field); - } - } - - // Hidden field to verify that QM+ call exists - $hiddenFields = ''; - - // Different doc to be refreshed? - if (isset($_REQUEST['qmrefresh'])) { - $hiddenFields .= ''; - } - - // Output - $e->output($mc->Output().$hiddenFields); - } - - break; - - // Where to logout - case 'OnManagerLogout': - // Only if cancel editing the document and QuickManager is in use - if ($_REQUEST['quickmanager'] == 'logout') { - // Redirect to document id - if ($this->logout != 'manager') { - $this->modx->sendRedirect($this->modx->makeUrl($_REQUEST['logoutid']), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); - } - } - - break; - } - } - - // Check if user has manager access permissions to current document - //_______________________________________________________ - function checkAccess() { - $access = FALSE; - - // If user is admin (role = 1) - if ($_SESSION['mgrRole'] == 1) $access = TRUE; - - else { - $docID = $this->modx->documentIdentifier; - - // Database table - $table= $this->modx->getFullTableName("document_groups"); - - // Check if current document is assigned to one or more doc groups - $result = $this->modx->db->select('count(id)', $table, "document='{$docID}'"); - $rowCount= $this->modx->db->getValue($result); - - // If document is assigned to one or more doc groups, check access - if ($rowCount >= 1) { - - // Get document groups for current user - $mrgDocGroups = $_SESSION['mgrDocgroups']; - if (!empty($mrgDocGroups)) { - $docGroup = implode(",", $mrgDocGroups); - - // Check if user has access to current document - $result = $this->modx->db->select('count(id)', $table, "document = '{$docID}' AND document_group IN ({$docGroup})"); - $rowCount = $this->modx->db->getValue($result); - - if ($rowCount >= 1) $access = TRUE; - } - - else $access = FALSE; - } - - else $access = TRUE; - } - - return $access; - } - - // Function from: processors/cache_sync.class.processor.php - //_____________________________________________________ - function getParents($id, $path = '') { // modx:returns child's parent - if(empty($this->aliases)) { - $qh = $this->modx->db->select("id, IF(alias='', id, alias) AS alias, parent", $this->modx->getFullTableName('site_content')); - while ($row = $this->modx->db->getRow($qh)) { - $this->aliases[$row['id']] = $row['alias']; - $this->parents[$row['id']] = $row['parent']; - } - } - if (isset($this->aliases[$id])) { - $path = $this->aliases[$id] . ($path != '' ? '/' : '') . $path; - return $this->getParents($this->parents[$id], $path); - } - return $path; - } - - // Create TV buttons if user has permissions to TV - //_____________________________________________________ - function createTvButtons($matches) { - - $access = FALSE; - $table = $this->modx->getFullTableName('site_tmplvar_access'); - $docID = $this->modx->documentIdentifier; - - // Get TV caption for button title - $tv = $this->modx->getTemplateVar($matches[1]); - $caption = $tv['caption']; - - // If caption is empty this must be a "build-in-tv-field" like pagetitle etc. - if ($caption == '') { - - // Allowed for all - $access = TRUE; - - // Resolve caption - $caption = $this->getDefaultTvCaption($matches[1]); - } - - // Check TV access - else { - $access = $this->checkTvAccess($tv['id']); - } - - // Return TV button link if access - if ($access && $caption != '') { - $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; - return ''.$caption.''; - } - } - - // Check user access to TV - //_____________________________________________________ - function checkTvAccess($tvId) { - $access = FALSE; - $table = $this->modx->getFullTableName('site_tmplvar_access'); - - // If user is admin (role = 1) - if ($_SESSION['mgrRole'] == 1 && !$access) { $access = TRUE; } - - // Check permission to TV, is TV in document group? - if (!$access) { - $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}'"); - $rowCount = $this->modx->db->getValue($result); - // TV is not in any document group - if ($rowCount == 0) { $access = TRUE; } - } - - // Check permission to TV, TV is in document group - if (!$access && $this->docGroup != '') { - $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}' AND documentgroup IN ({$this->docGroup})"); - $rowCount = $this->modx->db->getValue($result); - if ($rowCount >= 1) { $access = TRUE; } - } - - return $access; - } - - // Get default TV ("build-in" TVs) captions - //_____________________________________________________ - function getDefaultTvCaption($name) { - - global $_lang; - $caption = ''; - - switch ($name) { - case 'pagetitle' : $caption = $_lang['resource_title']; break; - case 'longtitle' : $caption = $_lang['long_title']; break; - case 'description' : $caption = $_lang['resource_description']; break; - case 'content' : $caption = $_lang['resource_content']; break; - case 'menutitle' : $caption = $_lang['resource_opt_menu_title']; break; - case 'introtext' : $caption = $_lang['resource_summary']; break; - } - - return $caption; - } - - // Check that a document isn't locked for editing - //_____________________________________________________ - function checkLocked() { - - $pageId = $this->modx->documentIdentifier; - $locked = TRUE; - - if ($this->modx->elementIsLocked(7, $pageId) === NULL) { - $locked = FALSE; - } - - return $locked; - } - - // Set document locked on/off - //_____________________________________________________ - function setLocked($locked) { - - $pageId = $this->modx->documentIdentifier; - - // Set document locked - if ($locked == 1) { - $this->modx->lockElement(7, $pageId); - } - - // Set document unlocked - else { - $this->modx->unlockElement(7, $pageId); - } - } - - // Save TV - //_____________________________________________________ - function saveTv($tvName) { - - $tmplvarContentValuesTable = $this->modx->getFullTableName('site_tmplvar_contentvalues'); - $siteContentTable = $this->modx->getFullTableName('site_content'); - $pageId = $this->modx->documentIdentifier; - $result = null; - $time = time(); - $user = $_SESSION['mgrInternalKey']; - $tvId = isset($_POST['tvid']) ? intval($_POST['tvid']) : ''; - $tvContent = isset($_POST['tv'.$tvName]) ? $_POST['tv'.$tvName] : ''; - $tvContentTemp = ''; - - // Escape TV content - $tvContent = $this->modx->db->escape($tvContent); - - // Invoke OnBeforeDocFormSave event - $this->modx->invokeEvent('OnBeforeDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); - - // Handle checkboxes and other arrays, TV to be saved must be e.g. value1||value2||value3 - if (is_array($tvContent)) { - $tvContent = implode("||", $tvContent); - } - - // Save TV - if ($tvId != '') { - $fields = array( - 'tmplvarid' => $tvId, - 'contentid' => $pageId, - 'value' => $tvContent, - ); - $result = $this->modx->db->select('count(id)', $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); - - // TV exists, update TV - if($this->modx->db->getValue($result)) { - $this->modx->db->update($fields, $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); - } - - // TV does not exist, create new TV - else { - $this->modx->db->insert($fields, $tmplvarContentValuesTable); - } - - // Page edited by - $this->modx->db->update( - array( - 'editedon' => $time, - 'editedby' => $user - ), $siteContentTable, "id = '{$pageId}'"); - } - - // Save default field, e.g. pagetitle - else { - $this->modx->db->update( - array( - $tvName => $tvContent, - 'editedon' => $time, - 'editedby' => $user - ), $siteContentTable, "id = '{$pageId}'"); - } - - // Invoke OnDocFormSave event - $this->modx->invokeEvent('OnDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); - - // Clear cache - $this->modx->clearCache('full'); - } - -} -} +modx = $modx; + + // Get plugin parameters + $this->jqpath = $jqpath; + $this->loadmanagerjq = $loadmanagerjq; + $this->loadfrontendjq = $loadfrontendjq; + $this->noconflictjq = $noconflictjq; + $this->loadfa = $loadfa; + $this->loadtb = $loadtb; + $this->tbwidth = $tbwidth; + $this->tbheight = $tbheight; + $this->usemm = null; + $this->hidefields = $hidefields; + $this->hidetabs = $hidetabs; + $this->hidesections = $hidesections; + $this->addbutton = $addbutton; + $this->tpltype = $tpltype; + $this->tplid = $tplid; + $this->custombutton = $custombutton; + $this->managerbutton = $managerbutton; + $this->logout = $logout; + $this->autohide = $autohide; + $this->position = $position; + $this->editbuttons = $editbuttons; + $this->editbclass = $editbclass; + $this->newbuttons = $newbuttons; + $this->newbclass = $newbclass; + $this->tvbuttons = $tvbuttons; + $this->tvbclass = $tvbclass; + $this->buttonStyle = $buttonStyle; + $this->removeBg = $removeBg; + + // Includes + include_once($this->modx->config['base_path'].'assets/plugins/qm/mcc.class.php'); + + // Run plugin + $this->Run(); + } + + //_______________________________________________________ + function Run() { + + // Include MODX manager language file + global $_lang; + + // Get manager language + $manager_language = $this->modx->config['manager_language']; + + // Individual user language setting (if set) + if (isset($_SESSION['mgrUsrConfigSet']['manager_language'])) $manager_language = $_SESSION['mgrUsrConfigSet']['manager_language']; + + // Include_once the language file + if(!isset($manager_language) || !file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { + $manager_language = "english"; // if not set, get the english language file. + } + // Include default language + include_once MODX_MANAGER_PATH."includes/lang/english.inc.php"; + + // Include user language + if($manager_language!="english" && file_exists(MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php")) { + include_once MODX_MANAGER_PATH."includes/lang/".$manager_language.".inc.php"; + } + + // Get event + $e = &$this->modx->Event; + + // Run plugin based on event + switch ($e->name) { + + // Save document + case 'OnDocFormSave': + + // Saving process for Qm only + if(intval($_REQUEST['quickmanager']) == 1) { + + $id = $e->params['id']; + $key = $id; + + // Normal saving document procedure stops to redirect => Before redirecting secure documents and clear cache + + // Secure web documents - flag as private (code from: processors/save_content.processor.php) + include $this->modx->config['site_manager_path']."includes/secure_web_documents.inc.php"; + secureWebDocument($key); + + // Secure manager documents - flag as private (code from: processors/save_content.processor.php) + include $this->modx->config['site_manager_path']."includes/secure_mgr_documents.inc.php"; + secureMgrDocument($key); + + // Clear cache + $this->modx->clearCache('full'); + + // Different doc to be refreshed than the one we are editing? + if (isset($_POST['qmrefresh'])) { + $id = intval($_POST['qmrefresh']); + } + + // Redirect to clearer page which refreshes parent window and closes modal box frame + if ($this->modx->config['friendly_urls'] == 1){ + $this->modx->sendRedirect($this->modx->makeUrl($id).'?quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + }else{ + $this->modx->sendRedirect($this->modx->makeUrl($id).'&quickmanagerclose=1', 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + } + + } + + break; + + // Display page in front-end + case 'OnWebPagePrerender': + + // Get document id + $docID = $this->modx->documentIdentifier; + + // Get page output + $output = &$this->modx->documentOutput; + + // Close modal box after saving (previously close.php) + if (isset($_GET['quickmanagerclose'])) { + + // Set url to refresh + $url = $this->modx->makeUrl($docID, '', '', 'full'); + + $output = ' + + + + + + + + + +'; + break; + } + + // QM+ TV edit + if(intval($_GET['quickmanagertv'] == 1) && $_GET['tvname'] != '' && $this->tvbuttons == 'true') { + + $tvName = ''; + $locked = FALSE; + $access = FALSE; + $save = 0; + $imagePreview = ''; + + // Includes + include_once(MODX_MANAGER_PATH.'includes/tmplvars.inc.php'); + include_once(MODX_MANAGER_PATH.'includes/tmplvars.commands.inc.php'); + include_once(MODX_MANAGER_PATH.'includes/tmplvars.format.inc.php'); + + // Get save status + if (isset($_POST['save'])) $save = intval($_POST['save']); + + // Get TV name + if (preg_match('/^([^\\"\'\(\)<>!?]+)/i', $_GET['tvname'])) $tvName = $_GET['tvname']; + + // Get TV array + $tv = $this->modx->getTemplateVar($tvName, '*', $docID); + + // Handle default TVs + switch ($tvName) { + case 'pagetitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'longtitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'description' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'content' : $tv['type'] = 'richtext'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'menutitle' : $tv['type'] = 'text'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + case 'introtext' : $tv['type'] = 'textarea'; $tv['caption'] = $this->getDefaultTvCaption($tvName); $access = TRUE; break; + } + + // Check TV access + if (!$access) { $access = $this->checkTvAccess($tv['id']); } + + // User can access TV + if ($access) { + + // Show TV form + if ($save == 0) { + + // Check is document locked? Someone else is editing the document... //$_lang['lock_msg'] + if ($this->checkLocked()) $locked = TRUE; + + // Set document locked + else $this->setLocked(1); + + // Handle RTE + if($tv['type'] == 'richtext') { + // Invoke OnRichTextEditorInit event + $eventOutput = $this->modx->invokeEvent("OnRichTextEditorInit", array('editor'=>$this->modx->config['which_editor'], 'elements'=>array('tv'.$tvName))); + + if(is_array($eventOutput)) { + $editorHtml = implode("",$eventOutput); + } + } + + // Render TV html + $tvHtml = renderFormElement($tv['type'], $tv['name'], $tv['default_text'], $tv['elements'], $tv['value']); + + // Get jQuery conflict mode + if ($this->noconflictjq == 'true') $jq_mode = '$j'; + else $jq_mode = '$'; + } + + // Save TV + else { + // Remove document locked + $this->setLocked(0); + + // Save TV + $this->saveTv($tvName); + } + + // Page output: header + $output = ' + + + + + + + + + + '; + + // Page output: TV form + if ($save == 0) { + $output .= ' + + '; + + // Document is locked message + if ($locked) { + $output .= ' +

    '.$_lang['locked'].'

    +
    '.$_lang['lock_msg'].'
    + '; + } + + // Normal form + else { + // Image preview + if ($tv['type'] == 'image') { + $imagePreview = ' +
    + + '; + } + $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; + $output .= ' +
    + + + + + +

    '.$tv['caption'].'

    + +
    '.$tv['description'].'
    + +
    + '.$tvHtml.' +
    + + '.$imagePreview.' + +
    + '.$editorHtml.' + '; + } + } + + // Page output: close modal box and refresh parent frame + else $output .= ''; + + // Page output: footer + $output .= ' + + + '; + } + + else { + $output = 'Error: Access denied.'; + } + } + + // QM+ with toolbar + else { + + if(isset($_SESSION['mgrValidated']) && $_REQUEST['z'] != 'manprev') { + + // If logout break here + if(isset($_REQUEST['logout'])) { + $this->Logout(); + break; + } + + $userID = $_SESSION['mgrInternalKey']; + + // Add ID + $controls .= '
  • ID: '.$docID.'
  • '; + // Go to Manager button + if ($this->managerbutton == 'true') { + $managerButton = ' +
  • + '.$_lang['manager'].' +
  • + '; + $controls .= $managerButton; + } + // Edit button + + $editButton = ' +
  • + '.$_lang['edit_resource'].' +
  • + '; + + // Check if user has manager access to current document + $access = $this->checkAccess(); + + // Does user have permissions to edit document + if($access) $controls .= $editButton; + + if ($this->addbutton == 'true' && $access) { + // Add button + $addButton = ' +
  • + '.$_lang['create_resource_here'].' +
  • + '; + + // Does user have permissions to add document + if($this->modx->hasPermission('new_document')) $controls .= $addButton; + } + + // Custom add buttons if not empty and enough permissions + if ($this->custombutton != '') { + + // Replace [*id*] with current doc id + $this->custombutton = str_replace("[*id*]", $docID, $this->custombutton); + + // Handle [~id~] links + $this->custombutton = $this->modx->rewriteUrls($this->custombutton); + + $buttons = explode("||", $this->custombutton); // Buttons are divided by "||" + + // Custom buttons class index + $i = 0; + + // Parse buttons + foreach($buttons as $key => $field) { + $i++; + + $field = substr($field, 1, -1); // Trim "'" from beginning and from end + $buttonParams = explode("','", $field); // Button params are divided by "','" + + $buttonTitle = $buttonParams[0]; + $buttonAction = $buttonParams[1]; // Contains URL if this is not add button + $buttonParentId = $buttonParams[2]; // Is empty is this is not add button + $buttonTplId = $buttonParams[3]; + + // Button visible for all + if ($buttonParams[4] == '') { + $showButton = TRUE; + } + // Button is visible for specific user roles + else { + $showButton = FALSE; + + // Get user roles the button is visible for + $buttonRoles = explode(",", $buttonParams[4]); // Roles are divided by ',' + + // Check if user role is found + foreach($buttonRoles as $key => $field) { + if ($field == $_SESSION['mgrRole']) { + $showButton = TRUE; + } + } + } + $buttonIcon = $buttonParams[5]; + // Show custom button + if ($showButton) { + switch ($buttonAction) + { + case 'new': + $customButton = ' +
  • + '.$buttonTitle.' +
  • + '; + break; + + case 'link': + $customButton = ' +
  • + '.$buttonTitle.' +
  • + '; + break; + + case 'modal': + $customButton = ' +
  • + '.$buttonTitle.' +
  • + '; + break; + } + $controls .= $customButton; + } + } + } + + + + // Logout button + $logout = $this->modx->config['site_manager_url'].'index.php?a=8&quickmanager=logout&logoutid='.$docID; + $logoutButton = ' +
  • + '.$_lang['logout'].' +
  • + '; + + $controls .= $logoutButton; + + $username = $_SESSION['mgrShortname']; + // Add action buttons + $editor = ' +
    + +
    + +
      +
    • + '.$username.' +
    • + +
    • + '.$controls.' +
    +
    '; + + $MGR_DIR = $this->modx->getManagerPath( ); + $css = ' + '; + + $css .= ' + + '; + + // font-awesome + if ($this->loadfa == 'true') { + $css .= ' + + '; + } + // Buttons Styles + if ($this->buttonStyle == 'actionButtons') { + $css .= ' + + '; + } + else + if ($this->buttonStyle == 'navButtons') { + $css .= ' + + '; + } + // Top toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'top')) { + $css .= ' + + '; + } + else + // Top toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'top')) { + $css .= ' + + '; + } + else + // Top toolbar Relative + if ($this->position == 'before') { + $css .= ' + + '; + } + else + // Bottom toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'bottom')) { + $css .= ' + + '; + } + else + // Bottom toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'bottom')) { + $css .= ' + + '; + } + // Left toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'left')) { + $css .= ' + + '; + } + else + // Left toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'left')) { + $css .= ' + + '; + } + // Right toolbar Autohide true + if (($this->autohide == 'true') && ($this->position == 'right')) { + $css .= ' + + '; + } + else + // Right toolbar Autohide false + if (($this->autohide == 'false') && ($this->position == 'right')) { + $css .= ' + + '; + } + // Remove background + if (($this->removeBg == 'yes') && ($this->buttonStyle == 'actionButtons')) { + $css .= ' + + '; + } + else + if (($this->removeBg == 'yes') && ($this->buttonStyle == 'navButtons')) { + $css .= ' + + '; + } + // Insert jQuery and ColorBox in head if needed + $head = ''; + if ($this->loadfrontendjq == 'true') $head .= ''; + if ($this->loadtb == 'true') { + $head .= ' + + + + + + '; + } + + // Insert ColorBox jQuery definitions for QuickManager+ + $head .= ' + + '; + + $head .= " + + "; + + // Insert QM+ css in head + $head .= $css; + + // Place QM+ head information in head, just before tag + $output = preg_replace('~()~i', $head . '\1', $output); + + // Insert editor toolbar right after tag + $output = preg_replace('~(]*>)~i', '\1' . $editor, $output); + + // Search and create edit buttons in to the content + if ($this->editbuttons == 'true' && $access) { + $output = preg_replace('//', '$2', $output); + } + + // Search and create new document buttons in to the content + if ($this->newbuttons == 'true' && $access) { + $output = preg_replace('//', '$3', $output); + } + + // Search and create new document buttons in to the content + if ($this->tvbuttons == 'true' && $access) { + // Set and get user doc groups for TV permissions + $this->docGroup = ''; + $mrgDocGroups = $_SESSION['mgrDocgroups']; + if (!empty($mrgDocGroups)) $this->docGroup = implode(",", $mrgDocGroups); + + // Create TV buttons and check TV permissions + $output = preg_replace_callback('//', array(&$this, 'createTvButtons'), $output); + } + } + } + + break; + + // Edit document in ThickBox frame (MODX manager frame) + case 'OnDocFormPrerender': + + // If there is Qm call, add control buttons and modify to edit document page + if (intval($_REQUEST['quickmanager']) == 1) { + + global $content, $_style; + + // Set template for new document, action = 4 + if(intval($_GET['a']) == 4) { + + // Custom add button + if (isset($_GET['customaddtplid'])) { + // Set template + $content['template'] = intval($_GET['customaddtplid']); + } + + // Normal add button + else { + switch ($this->tpltype) { + // Template type is parent + case 'parent': + // Get parent document id + $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); + + // Get parent document + $parent = $this->modx->getDocument($pid); + + // Set parent template + $content['template'] = $parent['template']; + + break; + + // Template is specific id + case 'id': + $content['template'] = $this->tplid; + + break; + + // Template is inherited by Inherit Selected Template plugin + case 'selected': // Template is inherited by Inherit Selected Template plugin + case 'sibling': + // Get parent document id + $pid = $content['parent'] ? $content['parent'] : intval($_REQUEST['pid']); + + if ($this->modx->config['auto_template_logic'] === 'sibling') { + // Eoler: template_autologic in Evolution 1.0.5+ + // http://tracker.modx.com/issues/9586 + $tv = array(); + $sibl = $this->modx->getDocumentChildren($pid, 1, 0, 'template', '', 'menuindex', 'ASC', 1); + if(empty($sibl)) { + $sibl = $this->modx->getDocumentChildren($pid, 0, 0, 'template', '', 'menuindex', 'ASC', 1); + } + if(!empty($sibl)) { + $tv['value'] = $sibl[0]['template']; + } + else $tv['value'] = ''; // Added by yama + } + else + { + // Get "inheritTpl" TV + $tv = $this->modx->getTemplateVar('inheritTpl', '', $pid); + } + + // Set template to inherit + if ($tv['value'] != '') $content['template'] = $tv['value']; + else $content['template'] = $this->modx->config['default_template']; + break; + } + } + } + + // Manager control class + $mc = new Mcc(); + + // Hide default manager action buttons + $mc->addLine('$("#actions").hide();'); + + + // Get doc id + $doc_id = intval($_REQUEST['id']); + + // Get jQuery conflict mode + if ($this->noconflictjq == 'true') $jq_mode = '$j'; + else $jq_mode = '$'; + + // Add action buttons + $url = $this->modx->makeUrl($doc_id,'','','full'); + $mc->addLine('var controls = "";'); + + // Modify head + $mc->head = ''; + if ($this->loadmanagerjq == 'true') $mc->head .= ''; + + // Add control button + $mc->addLine('$("body").prepend(controls);'); + + // Hide fields to from front-end editors + if ($this->hidefields != '') { + $hideFields = explode(",", $this->hidefields); + + foreach($hideFields as $key => $field) { + $mc->hideField($field); + } + } + + // Hide tabs to from front-end editors + if ($this->hidetabs != '') { + $hideTabs = explode(",", $this->hidetabs); + + foreach($hideTabs as $key => $field) { + $mc->hideTab($field); + } + } + + // Hide sections from front-end editors + if ($this->hidesections != '') { + $hideSections = explode(",", $this->hidesections); + + foreach($hideSections as $key => $field) { + $mc->hideSection($field); + } + } + + // Hidden field to verify that QM+ call exists + $hiddenFields = ''; + + // Different doc to be refreshed? + if (isset($_REQUEST['qmrefresh'])) { + $hiddenFields .= ''; + } + + // Output + $e->output($mc->Output().$hiddenFields); + } + + break; + + // Where to logout + case 'OnManagerLogout': + // Only if cancel editing the document and QuickManager is in use + if ($_REQUEST['quickmanager'] == 'logout') { + // Redirect to document id + if ($this->logout != 'manager') { + $this->modx->sendRedirect($this->modx->makeUrl($_REQUEST['logoutid']), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently'); + } + } + + break; + } + } + + // Check if user has manager access permissions to current document + //_______________________________________________________ + function checkAccess() { + $access = FALSE; + + // If user is admin (role = 1) + if ($_SESSION['mgrRole'] == 1) $access = TRUE; + + else { + $docID = $this->modx->documentIdentifier; + + // Database table + $table= $this->modx->getFullTableName("document_groups"); + + // Check if current document is assigned to one or more doc groups + $result = $this->modx->db->select('count(id)', $table, "document='{$docID}'"); + $rowCount= $this->modx->db->getValue($result); + + // If document is assigned to one or more doc groups, check access + if ($rowCount >= 1) { + + // Get document groups for current user + $mrgDocGroups = $_SESSION['mgrDocgroups']; + if (!empty($mrgDocGroups)) { + $docGroup = implode(",", $mrgDocGroups); + + // Check if user has access to current document + $result = $this->modx->db->select('count(id)', $table, "document = '{$docID}' AND document_group IN ({$docGroup})"); + $rowCount = $this->modx->db->getValue($result); + + if ($rowCount >= 1) $access = TRUE; + } + + else $access = FALSE; + } + + else $access = TRUE; + } + + return $access; + } + + // Function from: processors/cache_sync.class.processor.php + //_____________________________________________________ + function getParents($id, $path = '') { // modx:returns child's parent + if(empty($this->aliases)) { + $qh = $this->modx->db->select("id, IF(alias='', id, alias) AS alias, parent", $this->modx->getFullTableName('site_content')); + while ($row = $this->modx->db->getRow($qh)) { + $this->aliases[$row['id']] = $row['alias']; + $this->parents[$row['id']] = $row['parent']; + } + } + if (isset($this->aliases[$id])) { + $path = $this->aliases[$id] . ($path != '' ? '/' : '') . $path; + return $this->getParents($this->parents[$id], $path); + } + return $path; + } + + // Create TV buttons if user has permissions to TV + //_____________________________________________________ + function createTvButtons($matches) { + + $access = FALSE; + $table = $this->modx->getFullTableName('site_tmplvar_access'); + $docID = $this->modx->documentIdentifier; + + // Get TV caption for button title + $tv = $this->modx->getTemplateVar($matches[1]); + $caption = $tv['caption']; + + // If caption is empty this must be a "build-in-tv-field" like pagetitle etc. + if ($caption == '') { + + // Allowed for all + $access = TRUE; + + // Resolve caption + $caption = $this->getDefaultTvCaption($matches[1]); + } + + // Check TV access + else { + $access = $this->checkTvAccess($tv['id']); + } + + // Return TV button link if access + if ($access && $caption != '') { + $amp = ($this->modx->config['friendly_urls'] == 1) ? '?' : '&'; + return ''.$caption.''; + } + } + + // Check user access to TV + //_____________________________________________________ + function checkTvAccess($tvId) { + $access = FALSE; + $table = $this->modx->getFullTableName('site_tmplvar_access'); + + // If user is admin (role = 1) + if ($_SESSION['mgrRole'] == 1 && !$access) { $access = TRUE; } + + // Check permission to TV, is TV in document group? + if (!$access) { + $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}'"); + $rowCount = $this->modx->db->getValue($result); + // TV is not in any document group + if ($rowCount == 0) { $access = TRUE; } + } + + // Check permission to TV, TV is in document group + if (!$access && $this->docGroup != '') { + $result = $this->modx->db->select('count(id)', $table, "tmplvarid = '{$tvId}' AND documentgroup IN ({$this->docGroup})"); + $rowCount = $this->modx->db->getValue($result); + if ($rowCount >= 1) { $access = TRUE; } + } + + return $access; + } + + // Get default TV ("build-in" TVs) captions + //_____________________________________________________ + function getDefaultTvCaption($name) { + + global $_lang; + $caption = ''; + + switch ($name) { + case 'pagetitle' : $caption = $_lang['resource_title']; break; + case 'longtitle' : $caption = $_lang['long_title']; break; + case 'description' : $caption = $_lang['resource_description']; break; + case 'content' : $caption = $_lang['resource_content']; break; + case 'menutitle' : $caption = $_lang['resource_opt_menu_title']; break; + case 'introtext' : $caption = $_lang['resource_summary']; break; + } + + return $caption; + } + + // Check that a document isn't locked for editing + //_____________________________________________________ + function checkLocked() { + + $pageId = $this->modx->documentIdentifier; + $locked = TRUE; + + if ($this->modx->elementIsLocked(7, $pageId) === NULL) { + $locked = FALSE; + } + + return $locked; + } + + // Set document locked on/off + //_____________________________________________________ + function setLocked($locked) { + + $pageId = $this->modx->documentIdentifier; + + // Set document locked + if ($locked == 1) { + $this->modx->lockElement(7, $pageId); + } + + // Set document unlocked + else { + $this->modx->unlockElement(7, $pageId); + } + } + + // Save TV + //_____________________________________________________ + function saveTv($tvName) { + + $tmplvarContentValuesTable = $this->modx->getFullTableName('site_tmplvar_contentvalues'); + $siteContentTable = $this->modx->getFullTableName('site_content'); + $pageId = $this->modx->documentIdentifier; + $result = null; + $time = time(); + $user = $_SESSION['mgrInternalKey']; + $tvId = isset($_POST['tvid']) ? intval($_POST['tvid']) : ''; + $tvContent = isset($_POST['tv'.$tvName]) ? $_POST['tv'.$tvName] : ''; + $tvContentTemp = ''; + + // Escape TV content + $tvContent = $this->modx->db->escape($tvContent); + + // Invoke OnBeforeDocFormSave event + $this->modx->invokeEvent('OnBeforeDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); + + // Handle checkboxes and other arrays, TV to be saved must be e.g. value1||value2||value3 + if (is_array($tvContent)) { + $tvContent = implode("||", $tvContent); + } + + // Save TV + if ($tvId != '') { + $fields = array( + 'tmplvarid' => $tvId, + 'contentid' => $pageId, + 'value' => $tvContent, + ); + $result = $this->modx->db->select('count(id)', $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); + + // TV exists, update TV + if($this->modx->db->getValue($result)) { + $this->modx->db->update($fields, $tmplvarContentValuesTable, "tmplvarid = '{$fields['tmplvarid']}' AND contentid = '{$fields['contentid']}'"); + } + + // TV does not exist, create new TV + else { + $this->modx->db->insert($fields, $tmplvarContentValuesTable); + } + + // Page edited by + $this->modx->db->update( + array( + 'editedon' => $time, + 'editedby' => $user + ), $siteContentTable, "id = '{$pageId}'"); + } + + // Save default field, e.g. pagetitle + else { + $this->modx->db->update( + array( + $tvName => $tvContent, + 'editedon' => $time, + 'editedby' => $user + ), $siteContentTable, "id = '{$pageId}'"); + } + + // Invoke OnDocFormSave event + $this->modx->invokeEvent('OnDocFormSave', array('mode'=>'upd', 'id'=>$pageId)); + + // Clear cache + $this->modx->clearCache('full'); + } + +} +} diff --git a/assets/plugins/tinymce4/bridge.tinymce4.inc.php b/assets/plugins/tinymce4/bridge.tinymce4.inc.php index 9f36e24a..6256abe6 100755 --- a/assets/plugins/tinymce4/bridge.tinymce4.inc.php +++ b/assets/plugins/tinymce4/bridge.tinymce4.inc.php @@ -49,7 +49,8 @@ public function __construct($tvOptions=array()) 'template_docs' => '', 'template_chunks' => '', 'custom_buttons3' => '', - 'custom_buttons4' => '' + 'custom_buttons4' => '', + 'skin' => '' ) ); diff --git a/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php b/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php index 033eb954..8e10bc60 100755 --- a/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php +++ b/assets/plugins/tinymce4/theme/theme.tinymce4.base.inc.php @@ -44,7 +44,7 @@ $this->set('document_base_url', MODX_SITE_URL, 'string' ); // https://www.tinymce.com/docs/configure/url-handling/#document_base_url $this->set('entity_encoding', $this->pluginParams['entityEncoding'],'string'); // https://www.tinymce.com/docs/configure/content-filtering/#encodingtypes -$this->set('entities', $this->pluginParams['entities'], 'string'); // https://www.tinymce.com/docs/configure/content-filtering/#entities +$this->set('entities', isset($this->pluginParams['entities']) ? $this->pluginParams['entities'] : '', 'string'); // https://www.tinymce.com/docs/configure/content-filtering/#entities $this->set('language', $this->lang('lang_code'), 'string'); // https://www.tinymce.com/docs/configure/localization/#language if($this->lang('lang_code') != 'en') @@ -81,8 +81,8 @@ // @todo: final base-setup like tinymce3 "default"-theme? $this->set('plugins', 'anchor visualblocks autolink autosave save advlist fullscreen paste modxlink media contextmenu table youtube image imagetools code textcolor', 'string'); // https://www.tinymce.com/docs/get-started/basic-setup/#pluginconfiguration -$this->set('toolbar1', 'undo redo | bold forecolor backcolor strikethrough formatselect fontsizeselect pastetext code | fullscreen help', 'string'); -$this->set('toolbar2', 'image media youtube link unlink anchor | alignleft aligncenter alignright | bullist numlist | blockquote outdent indent | table hr | visualblocks styleprops removeformat', 'string'); +$this->set('toolbar1', 'undo redo | bold forecolor backcolor strikethrough formatselect fontsizeselect pastetext code | fullscreen help', 'string', false); +$this->set('toolbar2', 'image media youtube link unlink anchor | alignleft aligncenter alignright | bullist numlist | blockquote outdent indent | table hr | visualblocks styleprops removeformat', 'string', true); // Bridge does not return NULL, and does not use this->set() itself, so these parameters must be set at least once.. // Params get translated by bridge because it does not return NULL, so the returned values will be used @@ -98,4 +98,4 @@ theme: "mobile", plugins: [ "autosave", "lists", "autolink" ], toolbar: [ "undo", "bold", "italic", "styleselect" ] -}', 'json' ); \ No newline at end of file +}', 'json' ); diff --git a/assets/plugins/tinymce4/theme/theme.tinymce4.custom.inc.php b/assets/plugins/tinymce4/theme/theme.tinymce4.custom.inc.php index e2e5c034..af201e37 100755 --- a/assets/plugins/tinymce4/theme/theme.tinymce4.custom.inc.php +++ b/assets/plugins/tinymce4/theme/theme.tinymce4.custom.inc.php @@ -23,7 +23,18 @@ $this->set('menubar', false, 'bool' ); // https://www.tinymce.com/docs/configure/editor-appearance/#menubar +// Take over global values for each of the 4 rows +/* +if(!empty($this->modxParams['custom_buttons_useglobal'])) { + $i=1; + while($i<=4) { + $this->modxParams['custom_buttons'.$i] = $modx->configGlobal[$this->editorKey.'_custom_buttons'.$i]; + $i++; + } +} +*/ + $this->set('toolbar1', $this->modxParams['custom_buttons1'], 'string', false ); -$this->set('toolbar2', $this->modxParams['custom_buttons2'], 'string', false ); -$this->set('toolbar3', $this->modxParams['custom_buttons3'], 'string', false ); -$this->set('toolbar4', $this->modxParams['custom_buttons4'], 'string', false ); \ No newline at end of file +$this->set('toolbar2', $this->modxParams['custom_buttons2'], 'string', true ); +$this->set('toolbar3', $this->modxParams['custom_buttons3'], 'string', true ); +$this->set('toolbar4', $this->modxParams['custom_buttons4'], 'string', true ); \ No newline at end of file diff --git a/assets/plugins/tinymce4/theme/theme.tinymce4.full.inc.php b/assets/plugins/tinymce4/theme/theme.tinymce4.full.inc.php index 43e27b51..8b87363c 100755 --- a/assets/plugins/tinymce4/theme/theme.tinymce4.full.inc.php +++ b/assets/plugins/tinymce4/theme/theme.tinymce4.full.inc.php @@ -20,8 +20,8 @@ // http://archive.tinymce.com/forum/viewtopic.php?pid=115507#p115507 // @todo: Is this list complete for a "full"-theme? -$this->set('plugins', 'anchor autolink lists spellchecker pagebreak layer table save hr modxlink image imagetools emoticons insertdatetime preview media searchreplace print code contextmenu paste directionality fullscreen noneditable visualchars textcolor nonbreaking template youtube autosave advlist visualblocks charmap wordcount codesample', 'string'); +$this->set('plugins', 'anchor autolink lists spellchecker pagebreak layer table save hr modxlink image imagetools emoticons insertdatetime preview media searchreplace print code contextmenu paste directionality fullscreen noneditable visualchars textcolor nonbreaking template youtube autosave advlist visualblocks charmap wordcount codesample colorpicker', 'string'); $this->set('toolbar1', 'save print newdocument | undo redo | searchreplace | cut copy paste pastetext | visualchars spellchecker | visualblocks code | preview fullscreen', 'string'); $this->set('toolbar2', 'styleselect formatselect fontselect fontsizeselect | forecolor backcolor', 'string'); $this->set('toolbar3', 'bold italic underline strikethrough subscript superscript removeformat | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | ltr rtl', 'string'); -$this->set('toolbar4', 'image youtube media | link unlink anchor | table | pagebreak hr | template codesample nonbreaking insertdatetime | charmap emoticons', 'string'); \ No newline at end of file +$this->set('toolbar4', 'image youtube media | link unlink anchor | table | pagebreak hr | template codesample nonbreaking insertdatetime | charmap emoticons', 'string'); diff --git a/assets/plugins/tinymce4/tinymce/langs/fr.js b/assets/plugins/tinymce4/tinymce/langs/fr.js index b74abd48..00791350 100755 --- a/assets/plugins/tinymce4/tinymce/langs/fr.js +++ b/assets/plugins/tinymce4/tinymce/langs/fr.js @@ -1,219 +1,219 @@ -tinymce.addI18n('fr_FR',{ -"Cut": "Couper", -"Heading 5": "En-t\u00eate 5", -"Header 2": "Titre 2", -"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.", -"Heading 4": "En-t\u00eate 4", -"Div": "Div", -"Heading 2": "En-t\u00eate 2", -"Paste": "Coller", -"Close": "Fermer", -"Font Family": "Police", -"Pre": "Pre", -"Align right": "Aligner \u00e0 droite", -"New document": "Nouveau document", -"Blockquote": "Citation", -"Numbered list": "Num\u00e9rotation", -"Heading 1": "En-t\u00eate 1", -"Headings": "En-t\u00eates", -"Increase indent": "Augmenter le retrait", -"Formats": "Formats", -"Headers": "Titres", -"Select all": "Tout s\u00e9lectionner", -"Header 3": "Titre 3", -"Blocks": "Blocs", -"Undo": "Annuler", -"Strikethrough": "Barr\u00e9", -"Bullet list": "Puces", -"Header 1": "Titre 1", -"Superscript": "Exposant", -"Clear formatting": "Effacer la mise en forme", -"Font Sizes": "Taille de police", -"Subscript": "Indice", -"Header 6": "Titre 6", -"Redo": "R\u00e9tablir", -"Paragraph": "Paragraphe", -"Ok": "Ok", -"Bold": "Gras", -"Code": "Code", -"Italic": "Italique", -"Align center": "Centrer", -"Header 5": "Titre 5", -"Heading 6": "En-t\u00eate 6", -"Heading 3": "En-t\u00eate 3", -"Decrease indent": "Diminuer le retrait", -"Header 4": "Titre 4", -"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", -"Underline": "Soulign\u00e9", -"Cancel": "Annuler", -"Justify": "Justifier", -"Inline": "En ligne", -"Copy": "Copier", -"Align left": "Aligner \u00e0 gauche", -"Visual aids": "Aides visuelle", -"Lower Greek": "Grec minuscule", -"Square": "Carr\u00e9", -"Default": "Par d\u00e9faut", -"Lower Alpha": "Alpha minuscule", -"Circle": "Cercle", -"Disc": "Disque", -"Upper Alpha": "Alpha majuscule", -"Upper Roman": "Romain majuscule", -"Lower Roman": "Romain minuscule", -"Name": "Nom", -"Anchor": "Ancre", -"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", -"Restore last draft": "Restaurer le dernier brouillon", -"Special character": "Caract\u00e8res sp\u00e9ciaux", -"Source code": "Code source", -"B": "B", -"R": "R", -"G": "V", -"Color": "Couleur", -"Right to left": "Droite \u00e0 gauche", -"Left to right": "Gauche \u00e0 droite", -"Emoticons": "Emotic\u00f4nes", -"Robots": "Robots", -"Document properties": "Propri\u00e9t\u00e9 du document", -"Title": "Titre", -"Keywords": "Mots-cl\u00e9s", -"Encoding": "Encodage", -"Description": "Description", -"Author": "Auteur", -"Fullscreen": "Plein \u00e9cran", -"Horizontal line": "Ligne horizontale", -"Horizontal space": "Espacement horizontal", -"Insert\/edit image": "Ins\u00e9rer\/modifier une image", -"General": "G\u00e9n\u00e9ral", -"Advanced": "Avanc\u00e9", -"Source": "Source", -"Border": "Bordure", -"Constrain proportions": "Conserver les proportions", -"Vertical space": "Espacement vertical", -"Image description": "Description de l'image", -"Style": "Style", -"Dimensions": "Dimensions", -"Insert image": "Ins\u00e9rer une image", -"Zoom in": "Zoomer", -"Contrast": "Contraste", -"Back": "Retour", -"Gamma": "Gamma", -"Flip horizontally": "Retournement horizontal", -"Resize": "Redimensionner", -"Sharpen": "Affiner", -"Zoom out": "D\u00e9zoomer", -"Image options": "Options de l'image", -"Apply": "Appliquer", -"Brightness": "Luminosit\u00e9", -"Rotate clockwise": "Rotation horaire", -"Rotate counterclockwise": "Rotation anti-horaire", -"Edit image": "Modifier l'image", -"Color levels": "Niveaux de couleur", -"Crop": "Rogner", -"Orientation": "Orientation", -"Flip vertically": "Retournement vertical", -"Invert": "Inverser", -"Insert date\/time": "Ins\u00e9rer date\/heure", -"Remove link": "Enlever le lien", -"Url": "Url", -"Text to display": "Texte \u00e0 afficher", -"Anchors": "Ancres", -"Insert link": "Ins\u00e9rer un lien", -"New window": "Nouvelle fen\u00eatre", -"None": "n\/a", -"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", -"Target": "Cible", -"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", -"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", -"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", -"Poster": "Publier", -"Alternative source": "Source alternative", -"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", -"Insert video": "Ins\u00e9rer une vid\u00e9o", -"Embed": "Int\u00e9grer", -"Nonbreaking space": "Espace ins\u00e9cable", -"Page break": "Saut de page", -"Paste as text": "Coller comme texte", -"Preview": "Pr\u00e9visualiser", -"Print": "Imprimer", -"Save": "Enregistrer", -"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", -"Replace": "Remplacer", -"Next": "Suiv", -"Whole words": "Mots entiers", -"Find and replace": "Trouver et remplacer", -"Replace with": "Remplacer par", -"Find": "Chercher", -"Replace all": "Tout remplacer", -"Match case": "Respecter la casse", -"Prev": "Pr\u00e9c ", -"Spellcheck": "V\u00e9rification orthographique", -"Finish": "Finie", -"Ignore all": "Tout ignorer", -"Ignore": "Ignorer", -"Add to Dictionary": "Ajouter au dictionnaire", -"Insert row before": "Ins\u00e9rer une ligne avant", -"Rows": "Lignes", -"Height": "Hauteur", -"Paste row after": "Coller la ligne apr\u00e8s", -"Alignment": "Alignement", -"Border color": "Couleur de la bordure", -"Column group": "Groupe de colonnes", -"Row": "Ligne", -"Insert column before": "Ins\u00e9rer une colonne avant", -"Split cell": "Diviser la cellule", -"Cell padding": "Espacement interne cellule", -"Cell spacing": "Espacement inter-cellulles", -"Row type": "Type de ligne", -"Insert table": "Ins\u00e9rer un tableau", -"Body": "Corps", -"Caption": "Titre", -"Footer": "Pied", -"Delete row": "Effacer la ligne", -"Paste row before": "Coller la ligne avant", -"Scope": "Etendue", -"Delete table": "Supprimer le tableau", -"H Align": "Alignement H", -"Top": "Haut", -"Header cell": "Cellule d'en-t\u00eate", -"Column": "Colonne", -"Row group": "Groupe de lignes", -"Cell": "Cellule", -"Middle": "Milieu", -"Cell type": "Type de cellule", -"Copy row": "Copier la ligne", -"Row properties": "Propri\u00e9t\u00e9s de la ligne", -"Table properties": "Propri\u00e9t\u00e9s du tableau", -"Bottom": "Bas", -"V Align": "Alignement V", -"Header": "En-t\u00eate", -"Right": "Droite", -"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", -"Cols": "Colonnes", -"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", -"Width": "Largeur", -"Cell properties": "Propri\u00e9t\u00e9s de la cellule", -"Left": "Gauche", -"Cut row": "Couper la ligne", -"Delete column": "Effacer la colonne", -"Center": "Centr\u00e9", -"Merge cells": "Fusionner les cellules", -"Insert template": "Ajouter un th\u00e8me", -"Templates": "Th\u00e8mes", -"Background color": "Couleur d'arri\u00e8re-plan", -"Custom...": "Personnalis\u00e9...", -"Custom color": "Couleur personnalis\u00e9e", -"No color": "Aucune couleur", -"Text color": "Couleur du texte", -"Show blocks": "Afficher les blocs", -"Show invisible characters": "Afficher les caract\u00e8res invisibles", -"Words: {0}": "Mots : {0}", -"Insert": "Ins\u00e9rer", -"File": "Fichier", -"Edit": "Editer", -"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.", -"Tools": "Outils", -"View": "Voir", -"Table": "Tableau", -"Format": "Format" +tinymce.addI18n('fr_FR',{ +"Cut": "Couper", +"Heading 5": "En-t\u00eate 5", +"Header 2": "Titre 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.", +"Heading 4": "En-t\u00eate 4", +"Div": "Div", +"Heading 2": "En-t\u00eate 2", +"Paste": "Coller", +"Close": "Fermer", +"Font Family": "Police", +"Pre": "Pre", +"Align right": "Aligner \u00e0 droite", +"New document": "Nouveau document", +"Blockquote": "Citation", +"Numbered list": "Num\u00e9rotation", +"Heading 1": "En-t\u00eate 1", +"Headings": "En-t\u00eates", +"Increase indent": "Augmenter le retrait", +"Formats": "Formats", +"Headers": "Titres", +"Select all": "Tout s\u00e9lectionner", +"Header 3": "Titre 3", +"Blocks": "Blocs", +"Undo": "Annuler", +"Strikethrough": "Barr\u00e9", +"Bullet list": "Puces", +"Header 1": "Titre 1", +"Superscript": "Exposant", +"Clear formatting": "Effacer la mise en forme", +"Font Sizes": "Taille de police", +"Subscript": "Indice", +"Header 6": "Titre 6", +"Redo": "R\u00e9tablir", +"Paragraph": "Paragraphe", +"Ok": "Ok", +"Bold": "Gras", +"Code": "Code", +"Italic": "Italique", +"Align center": "Centrer", +"Header 5": "Titre 5", +"Heading 6": "En-t\u00eate 6", +"Heading 3": "En-t\u00eate 3", +"Decrease indent": "Diminuer le retrait", +"Header 4": "Titre 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", +"Underline": "Soulign\u00e9", +"Cancel": "Annuler", +"Justify": "Justifier", +"Inline": "En ligne", +"Copy": "Copier", +"Align left": "Aligner \u00e0 gauche", +"Visual aids": "Aides visuelle", +"Lower Greek": "Grec minuscule", +"Square": "Carr\u00e9", +"Default": "Par d\u00e9faut", +"Lower Alpha": "Alpha minuscule", +"Circle": "Cercle", +"Disc": "Disque", +"Upper Alpha": "Alpha majuscule", +"Upper Roman": "Romain majuscule", +"Lower Roman": "Romain minuscule", +"Name": "Nom", +"Anchor": "Ancre", +"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", +"Restore last draft": "Restaurer le dernier brouillon", +"Special character": "Caract\u00e8res sp\u00e9ciaux", +"Source code": "Code source", +"B": "B", +"R": "R", +"G": "V", +"Color": "Couleur", +"Right to left": "Droite \u00e0 gauche", +"Left to right": "Gauche \u00e0 droite", +"Emoticons": "Emotic\u00f4nes", +"Robots": "Robots", +"Document properties": "Propri\u00e9t\u00e9 du document", +"Title": "Titre", +"Keywords": "Mots-cl\u00e9s", +"Encoding": "Encodage", +"Description": "Description", +"Author": "Auteur", +"Fullscreen": "Plein \u00e9cran", +"Horizontal line": "Ligne horizontale", +"Horizontal space": "Espacement horizontal", +"Insert\/edit image": "Ins\u00e9rer\/modifier une image", +"General": "G\u00e9n\u00e9ral", +"Advanced": "Avanc\u00e9", +"Source": "Source", +"Border": "Bordure", +"Constrain proportions": "Conserver les proportions", +"Vertical space": "Espacement vertical", +"Image description": "Description de l'image", +"Style": "Style", +"Dimensions": "Dimensions", +"Insert image": "Ins\u00e9rer une image", +"Zoom in": "Zoomer", +"Contrast": "Contraste", +"Back": "Retour", +"Gamma": "Gamma", +"Flip horizontally": "Retournement horizontal", +"Resize": "Redimensionner", +"Sharpen": "Affiner", +"Zoom out": "D\u00e9zoomer", +"Image options": "Options de l'image", +"Apply": "Appliquer", +"Brightness": "Luminosit\u00e9", +"Rotate clockwise": "Rotation horaire", +"Rotate counterclockwise": "Rotation anti-horaire", +"Edit image": "Modifier l'image", +"Color levels": "Niveaux de couleur", +"Crop": "Rogner", +"Orientation": "Orientation", +"Flip vertically": "Retournement vertical", +"Invert": "Inverser", +"Insert date\/time": "Ins\u00e9rer date\/heure", +"Remove link": "Enlever le lien", +"Url": "Url", +"Text to display": "Texte \u00e0 afficher", +"Anchors": "Ancres", +"Insert link": "Ins\u00e9rer un lien", +"New window": "Nouvelle fen\u00eatre", +"None": "n\/a", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", +"Target": "Cible", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", +"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", +"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", +"Poster": "Publier", +"Alternative source": "Source alternative", +"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", +"Insert video": "Ins\u00e9rer une vid\u00e9o", +"Embed": "Int\u00e9grer", +"Nonbreaking space": "Espace ins\u00e9cable", +"Page break": "Saut de page", +"Paste as text": "Coller comme texte", +"Preview": "Pr\u00e9visualiser", +"Print": "Imprimer", +"Save": "Enregistrer", +"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", +"Replace": "Remplacer", +"Next": "Suiv", +"Whole words": "Mots entiers", +"Find and replace": "Trouver et remplacer", +"Replace with": "Remplacer par", +"Find": "Chercher", +"Replace all": "Tout remplacer", +"Match case": "Respecter la casse", +"Prev": "Pr\u00e9c ", +"Spellcheck": "V\u00e9rification orthographique", +"Finish": "Finie", +"Ignore all": "Tout ignorer", +"Ignore": "Ignorer", +"Add to Dictionary": "Ajouter au dictionnaire", +"Insert row before": "Ins\u00e9rer une ligne avant", +"Rows": "Lignes", +"Height": "Hauteur", +"Paste row after": "Coller la ligne apr\u00e8s", +"Alignment": "Alignement", +"Border color": "Couleur de la bordure", +"Column group": "Groupe de colonnes", +"Row": "Ligne", +"Insert column before": "Ins\u00e9rer une colonne avant", +"Split cell": "Diviser la cellule", +"Cell padding": "Espacement interne cellule", +"Cell spacing": "Espacement inter-cellulles", +"Row type": "Type de ligne", +"Insert table": "Ins\u00e9rer un tableau", +"Body": "Corps", +"Caption": "Titre", +"Footer": "Pied", +"Delete row": "Effacer la ligne", +"Paste row before": "Coller la ligne avant", +"Scope": "Etendue", +"Delete table": "Supprimer le tableau", +"H Align": "Alignement H", +"Top": "Haut", +"Header cell": "Cellule d'en-t\u00eate", +"Column": "Colonne", +"Row group": "Groupe de lignes", +"Cell": "Cellule", +"Middle": "Milieu", +"Cell type": "Type de cellule", +"Copy row": "Copier la ligne", +"Row properties": "Propri\u00e9t\u00e9s de la ligne", +"Table properties": "Propri\u00e9t\u00e9s du tableau", +"Bottom": "Bas", +"V Align": "Alignement V", +"Header": "En-t\u00eate", +"Right": "Droite", +"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", +"Cols": "Colonnes", +"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", +"Width": "Largeur", +"Cell properties": "Propri\u00e9t\u00e9s de la cellule", +"Left": "Gauche", +"Cut row": "Couper la ligne", +"Delete column": "Effacer la colonne", +"Center": "Centr\u00e9", +"Merge cells": "Fusionner les cellules", +"Insert template": "Ajouter un th\u00e8me", +"Templates": "Th\u00e8mes", +"Background color": "Couleur d'arri\u00e8re-plan", +"Custom...": "Personnalis\u00e9...", +"Custom color": "Couleur personnalis\u00e9e", +"No color": "Aucune couleur", +"Text color": "Couleur du texte", +"Show blocks": "Afficher les blocs", +"Show invisible characters": "Afficher les caract\u00e8res invisibles", +"Words: {0}": "Mots : {0}", +"Insert": "Ins\u00e9rer", +"File": "Fichier", +"Edit": "Editer", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.", +"Tools": "Outils", +"View": "Voir", +"Table": "Tableau", +"Format": "Format" }); \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.js b/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.js new file mode 100644 index 00000000..e986e487 --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.js @@ -0,0 +1,1660 @@ +/** + * modxlink.js + * + * Based on link.js but with resource search added. + * + * By default both pagetitle and alias are searched. + * + * Author: markwillis82 + * Date: 7/7/15 + * update 64j 8/11/17 + */ + +// Handles selection from Modx-Ressource-Tree +if (typeof parent.modx !== 'undefined' && typeof parent.modx.tree !== 'undefined') { + var modxOldRessourceId = parent.modx.tree.itemToChange; + var modxLinkTitle = ''; + var checkModxTreeUpdateInterval = undefined; + var checkModxTreeUpdate = function() { + + checkModxTreeUpdateInterval = setTimeout(checkModxTreeUpdate, 100); + + if (parent.modx.tree.itemToChange != modxOldRessourceId) { + modxOldRessourceId = parent.modx.tree.itemToChange; + modxLinkTitle = parent.modx.tree.selectedObjectName; + + document.getElementById('link-href-inp').value = '[~' + modxOldRessourceId + '~]'; + if (!document.getElementById('text-to-display').value) { + document.getElementById('text-to-display').value = modxLinkTitle; + } + } + }; +} + +/*global tinymce:true */ +var autoComplt = (function() { + /* Properties: + [ Private ] + _CONST = the constants collection + _ui = the obj to build UI + _AutoCompltList = the class dealing with the autocomplete operations + [ Public ] + > Refer to the Public APIs above + Methods: + [ Private ] + > _getIEVersion : Get the IE version + > _getAppropriateMode : Get the mode appropriate for the current user scenario + > _getWindowSize : Get the client window width and height + > _normalizeEvt : Normalize the event obj + > _addEvt : Add an event to one elem, used for cross-browser mitigation + > _rmEvent : remove an event to one elem, used for cross-browser mitigation + > _getComputedStyle : Get the computed style value, used for cross-browser mitigation + [ Public ] + > enable : Refer to the Public APIs above + + */ + 'use strict'; + + var _DBG = 0; // A little debug flag + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + if (this === undefined || this === null) {throw new TypeError('"this" is null or not defined');} + var length = this.length >>> 0; + fromIndex = +fromIndex || 0; + if (Math.abs(fromIndex) === Infinity) {fromIndex = 0;} + if (fromIndex < 0) { + fromIndex += length; + if (fromIndex < 0) {fromIndex = 0;} + } + for (; fromIndex < length; fromIndex++) {if (this[fromIndex] === searchElement) {return fromIndex;}} + return -1; + }; + } + + var + /* Return: + @ Is IE: the version of IE + @ Not IE: NaN + */ + _getIEVersion = function() { + var rv = -1; // Return value assumes failure. + if (navigator.appName == 'Microsoft Internet Explorer') { + var ua = navigator.userAgent; + var re = new RegExp('MSIE ([0-9]{1,}[\.0-9]{0,})'); + if (re.exec(ua) != null) { + rv = +(RegExp.$1); + } + } + return (rv === -1) ? NaN : rv; + }, + /* Return: + > _CONST.modePC or _CONST.modeMobile + */ + _getAppropriateMode = function() { + + // Judge by the userAgent string + var ua = window.navigator.userAgent.toLowerCase(); + if (ua.search(/mobile|windows phone/) >= 0) return _CONST.modeMobile; + + // Bye the legacy IEs + if (_getIEVersion() <= 9) return _CONST.modePC; + + // Judge by the window width + return (_getWindowSize().windowWidth > _CONST.modeMobileW) ? _CONST.modePC : _CONST.modeMobile; + }, + /* Return: { + windowWidth : the width of the client window in px. If unable to find, then -1. + windowHeight : the height of the client window in px. If unable to find, then -1. + } + */ + _getWindowSize = function() { + + if (window.innerWidth) { + + return { + windowWidth: window.innerWidth, + windowHeight: window.innerHeight + }; + + } else if (document.documentElement.offsetHeight) { + + return { + windowWidth: document.documentElement.offsetWidth, + windowHeight: document.documentElement.offsetHeight + }; + + } else if (document.body.offsetHeight) { + + return { + windowWidth: document.body.offsetWidth, + windowHeight: document.body.offsetHeight + }; + + } else if (document.documentElement.clientHeight) { + + return { + windowWidth: document.documentElement.clientWidth, + windowHeight: document.documentElement.clientHeight + }; + + } else if (document.body.clientHeight) { + + return { + windowWidth: document.body.clientWidth, + windowHeight: document.body.clientHeight + }; + } + + return { + windowWidth: -1, + windowHeight: -1 + }; + }, + _CONST = (function(c) { + + _CONST = c; + + c.modePC = 'modePC'; // Represent the PC mode + + c.modeMobile = 'modeMobile'; // Represent the mobile mode + + c.modeMobileW = 768; // in px. The width used to seperate the PC & mobile mode + + c.autoCompltListClass = 'autoComplt-list'; + + c.autoCompltHintClass = 'autoComplt-hint'; + + c.autoCompltHintSelectedClass = 'autoComplt-hint-selected'; + + c.maxHintNum = (_getAppropriateMode() === _CONST.modePC) ? 10 : 5; // For limited mobile screen, not too many + + c.autoCompltDelay = 250; // in ms + + c.hiddenArg_close_list_n_make_final_selection = 'hiddenArg_close_list_n_make_final_selection'; + + c.listStatus = { + attr: 'data-listStatus', + open: 'open' + }; + + c.keyCode = { + up: 38, + down: 40, + esc: 27, + enter: 13 + }; + + c.defaultStyles = { + + autoCompltList: { + maxHeight: 'none', + border: '1px solid #aaa', + padding: '0', + margin: '0', + zIndex: 99999, + overflowX: 'hidden', + overflowY: 'auto', + display: 'none', + position: 'absolute', + backgroundColor: '#fff' + }, + + autoCompltHint: { + height: '1.5em', + padding: (_getAppropriateMode() === _CONST.modePC) ? '2px 6px 2px 10px' : '6px 6px 6px 10px', // For good touch ux, enlarge for the mobile mode + margin: '6px 0', + overflow: 'hidden', + listStyleType: 'none', + color: '#000', + backgroundColor: '#fff', + cursor: 'default', + fontSize: '1em' + }, + + autoCompltHintSelected: { + color: '#fff', + backgroundColor: '#3399ff' + } + }; + + c.adjStyleAttrs = { + autoCompltList: ['border', 'maxHeight', 'backgroundColor'], + autoCompltHint: ['height', 'padding', 'margin', 'color', 'backgroundColor', 'fontSize'], + autoCompltHintSelected: ['color', 'backgroundColor'] + }; + + // names of listeners supported + c.listenersSupported = [ + 'select' // Called when the user's final hint selection is decided + ]; + + return _CONST; + })({}), + /* Arg: + e = the event obj + Return: + the normalized event obj + */ + _normalizeEvt = function(e) { + + if (!e) e = window.event; + + if (!e.target) e.target = e.srcElement; + + e.stopBubble = function() { + this.cancelBubble = true; + if (this.stopPropagation) { this.stopPropagation(); } + }; + + e.stopDefault = function() { + if (this.preventDefault) { this.preventDefault(); } + this.returnValue = false; + return false; + }; + return e; + }, + /* Arg: + elem = the DOM elem + evt = the event name + eHandle = the event handle + */ + _addEvt = function(elem, evt, eHandle) { + if (elem.addEventListener) { + elem.addEventListener(evt, eHandle); + } else if (elem.attachEvent) { // The IE 8 case + elem.attachEvent('on' + evt, eHandle); + } + }, + /* Arg: Refer to _addEvt + */ + _rmEvent = function(elem, evt, eHandle) { + if (elem.removeEventListener) { + elem.removeEventListener(evt, eHandle); + } else if (elem.detachEvent) { // The IE 8 case + elem.detachEvent('on' + evt, eHandle); + } + }, + /* Arg: + elem = the DOM elem + name = the style name + */ + _getComputedStyle = function(elem, name) { + var v = null; + + if (window.getComputedStyle) { + + v = window.getComputedStyle(elem)[name] || null; + + } else if (elem.currentStyle) { // Hack for IE...Reference from the jQuery + + v = elem.currentStyle && elem.currentStyle[name]; + + var left, + rsLeft, + style = elem.style; + + // Avoid setting v to empty string here + // so we don't default to auto + if (v == null && style && style[name]) { + v = style[name]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if (rsLeft) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === 'fontSize' ? '1em' : v; + v = style.pixelLeft + 'px'; + + // Revert the changed values + style.left = left; + if (rsLeft) { + elem.runtimeStyle.left = rsLeft; + } + + } + + return v; + }, + /* Methods: + [ Public ] + > buildElem : Build on elem from the HTML text + > buildHint : Build one autocomplete hint elem + > buildList : Build one autocomplete list + */ + _ui = { + /* Arg: + html = the HTMl text + Return: + the elem built from the input HTML + */ + buildElem: function(html) { + var div = document.createElement('DIV'); + div.innerHTML = html; + return div.firstChild.cloneNode(true); + }, + /* Arg: + hint = the hint text + styles = the obk holding the styles to set. Refer to _CONST.defaultStyles.autoCompltHint for the required styles + Return: + @ OK: the hint ui elem + @ NG: null + */ + buildHint: function(hint, styles) { + if (typeof hint == 'string' && hint) { + hint = this.buildElem('
  • ' + hint + '
  • '); + + hint.style.height = hint.style.lineHeight = styles.autoCompltHint.height; // line-height shall always be equal to the height + hint.style.padding = styles.autoCompltHint.padding; + hint.style.margin = styles.autoCompltHint.margin; + hint.style.overflow = styles.autoCompltHint.overflow; + hint.style.listStyleType = styles.autoCompltHint.listStyleType; + hint.style.color = styles.autoCompltHint.color; + hint.style.backgroundColor = styles.autoCompltHint.backgroundColor; + hint.style.cursor = styles.autoCompltHint.cursor; + hint.style.fontSize = styles.autoCompltHint.fontSize; + + return hint; + } + return null; + }, + /* Arg: + styles = the obk holding the styles to set. Refer to _CONST.defaultStyles.autoCompltList for the required styles + Return: + @ OK: the list ui elem + @ NG: null + */ + buildList: function(styles) { + var list = this.buildElem('
      '); + + list.style.maxHeight = styles.autoCompltList.maxHeight; + list.style.border = styles.autoCompltList.border; + list.style.padding = styles.autoCompltList.padding; + list.style.margin = styles.autoCompltList.margin; + list.style.zIndex = styles.autoCompltList.zIndex; + list.style.overflowX = styles.autoCompltList.overflowX; + list.style.overflowY = styles.autoCompltList.overflowY; + list.style.display = styles.autoCompltList.display; + list.style.position = styles.autoCompltList.position; + list.style.backgroundColor = styles.autoCompltList.backgroundColor; + + return list; + } + }, + /* Properties: + [ Public ] + uiElem = the autocomplete list current being displayed and associated with. + assocInput = the input elem associated with + mouseOnList = A little flag marking the moused is on the top of the autocomplete list + maxHintNum = The max number of hints displayed + styles = the obj holding the style setting of the list and hints. Refer to _CONST.defaultStyles for the required styles. + onMouseSelectionListener = Called when user explicitly selects one hint by mouse clicking. No args passed. + Methods: + [ Public ] + > genList : Build and setup one autocomplete list + > isHint : Check if it is a autocomplete hint elem or not + > putHints : Put hints into the autocomplete list + > clearHints : Clear all hints + > isOpen : Tell if the auotcomplete list is open or not + > open : Open the autocomplete list. NOTICE: before opening, there must at one hint in the list so please call this.putHints first then open. + > close : Close the autocomplete list + > autoScroll : Auto scroll the list according the position and offset of the current selected hint so the current selected hint could show up + > pick : Pick up one hint. NOTICE: this action is to pick up one hint but not to select that hint so it will not change this.assocInput's value. Please use this.getPicked to get the picked hint and extract the hint text and assign this.assocInput's value the hint text + > unpick : Unpick all hints + > getPicked : Get the hint elem picked + */ + _AutoCompltList = function(assocInput) { + + this.uiElem = null; + this.assocInput = assocInput; + this.mouseOnList = false; + this.onMouseSelectionListener = null; + this.maxHintNum = _CONST.maxHintNum; + this.styles = JSON.parse(JSON.stringify(_CONST.defaultStyles)); // Copy the default first + + }; + { + /* + */ + _AutoCompltList.prototype.genList = function() { + if (!this.uiElem) { + + var that = this; + + this.uiElem = _ui.buildList(this.styles); + + // Make hint selected onmouseover + _addEvt(this.uiElem, 'mouseover', function(e) { + e = _normalizeEvt(e); + if (that.isHint(e.target)) { + that.pick(e.target); + that.autoScroll(); + } + }); + + // Make hint not selected onmouseout + _addEvt(this.uiElem, 'mouseout', function(e) { + that.unpick(); + }); + + // Prepare for the hint selection by clicking + _addEvt(this.uiElem, 'mousedown', function(e) { + that.mouseOnList = true; + // One hack for FF. + // Even call focus methos on the input's onblur event, however, still the input losese its focus. + // As a result we have to set a timeout here + setTimeout(function() { + that.assocInput.focus(); + }, 50); + }); + + // pick hint by clicking + _addEvt(this.uiElem, 'mouseup', function(e) { + + e = _normalizeEvt(e); + + if (that.isHint(e.target)) { + + that.pick(e.target); + + if (typeof that.onMouseSelectionListener == 'function') that.onMouseSelectionListener(); + } + }); + + document.body.appendChild(this.uiElem); + } + }; + /* Arg: + el = the elem to check + Return: + @ Ok: true + @ NG: false + */ + _AutoCompltList.prototype.isHint = function(el) { + if (el && typeof el == 'object' && el.nodeType === 1) { + var cls = ' ' + el.className + ' '; + return (cls.indexOf(' ' + _CONST.autoCompltHintClass + ' ') >= 0); + } + return false; + }; + /* Arg: + hints = the array of hint texts + Return: + the number of hints put + */ + _AutoCompltList.prototype.putHints = function(hints) { + var count = 0; + if (hints instanceof Array) { + var i, + j, + hs = []; + + j = Math.min(hints.length, this.maxHintNum); + for (i = 0; i < j; i++) { + hs.push(_ui.buildHint(hints[i], this.styles)); + if (!hs[hs.length - 1]) { + hs.pop(); + } + } + + if (hs.length > 0) { + var buf = document.createDocumentFragment(); + for (i = 0, count = hs.length; i < count; i++) { + buf.appendChild(hs[i]); + } + this.clearHints(); + + this.genList(); // Geneate the list in case there is none + this.uiElem.appendChild(buf); + } + } + return count; + }; + /* + */ + _AutoCompltList.prototype.clearHints = function() { + if (this.uiElem) { + this.uiElem.innerHTML = ''; + } + }; + /* + Return: + @ Ok: true + @ NG: false + */ + _AutoCompltList.prototype.isOpen = function() { + if (this.uiElem) { + return (this.uiElem.getAttribute(_CONST.listStatus.attr) == _CONST.listStatus.open); + } + return false; + }; + /* + */ + _AutoCompltList.prototype.open = function() { + var hints; + + if (this.uiElem + && (hints = this.uiElem.querySelectorAll('.' + _CONST.autoCompltHintClass)) + && hints.length // At lease one hint exists, we would open... + ) { + var i, + buf; + + // Position the list + buf = this.assocInput.getBoundingClientRect(); + this.uiElem.style.top = (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + + buf.bottom + 'px'; + this.uiElem.style.left = buf.left + 'px'; + + // Calculate the list's width + buf = buf.right - buf.left - parseFloat(_getComputedStyle(this.uiElem, 'borderLeftWidth')) - parseFloat(_getComputedStyle(this.uiElem, 'borderRightWidth')); + this.uiElem.style.width = buf + 'px'; + + // Calculate the list's height + for (i = 0, buf = 0; i < hints.length; i++) { + buf += parseFloat(_getComputedStyle(hints[i], 'height')) + + parseFloat(_getComputedStyle(hints[i], 'paddingTop')) + + parseFloat(_getComputedStyle(hints[i], 'paddingBottom')); + + if (hints[i + 1]) { // Compute the margin between the hints + buf += Math.max( + parseFloat(_getComputedStyle(hints[i], 'marginBottom')), parseFloat(_getComputedStyle(hints[i + 1], 'marginTop')) + ); + } + } + buf += parseFloat(_getComputedStyle(hints[0], 'marginTop')) + + parseFloat(_getComputedStyle(hints[hints.length - 1], 'marginBottom')); + this.uiElem.style.height = (buf + 1) + 'px'; // Plus one for a little buffer + + // Open + this.uiElem.setAttribute(_CONST.listStatus.attr, _CONST.listStatus.open); + this.uiElem.style.display = 'block'; + + } + }; + /* + */ + _AutoCompltList.prototype.close = function() { + if (this.uiElem) { + this.mouseOnList = false; + this.uiElem.parentNode.removeChild(this.uiElem); + this.uiElem = null; + } + }; + /* + */ + _AutoCompltList.prototype.autoScroll = function() { + var hint = this.getPicked(); + if (hint) { + var currHint, + offset = 0, + minDisplayH = 0, + hintH = hint.clientHeight, + hintMT = parseFloat(_getComputedStyle(hint, 'marginTop')), + hintMB = parseFloat(_getComputedStyle(hint, 'marginBottom')); + + currHint = hint.previousSibling; + + minDisplayH = hintH + (currHint ? Math.max(hintMT, hintMB) : hintMT); // The min height to display one hint + + while (currHint) { + + offset += hintH; // Add the current hint' hintH + + currHint = currHint.previousSibling; + if (currHint) { + // There is one hint before the current hint so calculate based on the collapsed model + offset += Math.max(hintMT, hintMB); + } else { + // No more previous hint, this is the 1st hint so just take the marign top + offset += hintMT; + } + } + + if (this.uiElem.clientHeight + this.uiElem.scrollTop - offset < minDisplayH + || offset - this.uiElem.scrollTop < minDisplayH + ) { + // Ther is no enough room displaying the current selected hint so adjust the scroll + this.uiElem.scrollTop = offset; + } + } + }; + /* Arg: + candidate = could be + 1) the hint elem or + 2) the index of the hint in the list. Passing in -1 would pick the last hint. Passing in 0 would pick the 1st hint. + */ + _AutoCompltList.prototype.pick = function(candidate) { + + if (this.uiElem) { + + var hint = null; + + if (this.isHint(candidate)) { + + hint = candidate; + + } else if (typeof candidate == 'number' && (candidate >= 0 || candidate === -1)) { + + var hints = this.uiElem.querySelectorAll('.' + _CONST.autoCompltHintClass); + + if (hints.length > 0) { + hint = +candidate; + hint = (hint === -1 || hint > hints.length - 1) ? hints.length - 1 : hint; + hint = hints[hint]; + } + } + + if (hint !== null) { + + this.unpick(); + hint.className += ' ' + _CONST.autoCompltHintSelectedClass; + hint.style.color = this.styles.autoCompltHintSelected.color; + hint.style.backgroundColor = this.styles.autoCompltHintSelected.backgroundColor; + } + } + }; + /* + */ + _AutoCompltList.prototype.unpick = function() { + if (this.uiElem) { + var slct = this.getPicked(); + if (slct) { + slct.className = _CONST.autoCompltHintClass; + slct.style.color = this.styles.autoCompltHint.color; + slct.style.backgroundColor = this.styles.autoCompltHint.backgroundColor; + } + } + }; + /* Return: + @ OK: the selected hint element + @ NG: null + */ + _AutoCompltList.prototype.getPicked = function() { + return !this.uiElem ? null : this.uiElem.querySelector('.' + _CONST.autoCompltHintSelectedClass) || null; + }; + } + + var + publicProps = { + + enable: function(input, params) { + if (input + && typeof input == 'object' + && typeof input.tagName == 'string' + && input.tagName.toLowerCase() == 'input' + && input.type == 'text' + && input.nodeType === 1 + && !input.autoComplt + ) { + + /* Propertise: + [ Private ] + input_autoComplt_delay = the ms delays the work of fetching the autocomplete hints based on the user's input + input_autoComplt_enabled = true to perform the autocomplete function; false not to perform. + input_autoComplt_currentTarget = the current user's input for which the autocomplete is target + input_autoComplt_listenerMap = the map of listeners + input_autoComplt_list = the instance of _AutoCompltList + Methods: + [ Private ] + > input_autoComplt_hintsFetcher : The function fetching the autocomplete hints + > input_autoComplt_startFetcher : Setup and call input_autoComplt_hintsFetcher to fetch the hints + > input_autoComplt_compltInput : Autocomplete the according to the hint selection state + > input_autoComplt_blurEvtHandle, input_autoComplt_keyEvtHandle : The event handle + > input_autoComplt_inputEvtHandleMobile : The event handle for the mobile mode + [ Public ] + > setHintsFetcher, setListener, config, setStyles, close, enable, disable, destroy : Refe to the Public APIs above + */ + input.autoComplt = {}; + + var + input_autoComplt_delay = _CONST.autoCompltDelay, + input_autoComplt_enabled = true, + input_autoComplt_currentTarget = '', + input_autoComplt_hintsFetcher = null, + input_autoComplt_listenerMap = null, + input_autoComplt_list = new _AutoCompltList(input), + /* + */ + input_autoComplt_startFetcher = function() { + + if (input.value.length > 0 + && input_autoComplt_enabled + && typeof input_autoComplt_hintsFetcher == 'function' + && input_autoComplt_currentTarget !== input.value // If equals, it means we've already been searching for the hints for the same value + ) { + + var fetcherCaller = { + + that: input, + + // Record the autocomplete target for this fetching job + compltTarget: (input_autoComplt_currentTarget = input.value), + + compltTargetMatchCurrentTarget: function() { + // If the user's input has changed during the fetching, this fetching job is useless. + // So only when the user's input doesn't change, we will return true to indicate proceeding further. + return (fetcherCaller.compltTarget === input_autoComplt_currentTarget); + }, + + call: function() { + + if (fetcherCaller.compltTargetMatchCurrentTarget()) { + + input_autoComplt_hintsFetcher.call( + fetcherCaller.that, + fetcherCaller.compltTarget, + fetcherCaller.openHint + ); + } + }, + + openHint: function(hints) { + if (fetcherCaller.compltTargetMatchCurrentTarget()) { + + if (input_autoComplt_list.putHints(hints)) { + input_autoComplt_list.open(); + } else { + fetcherCaller.that.autoComplt.close(); + } + } + } + }; + + setTimeout(fetcherCaller.call, input_autoComplt_delay); + } + }, + /* + */ + input_autoComplt_compltInput = function() { + + if (input_autoComplt_enabled) { + + var hint = input_autoComplt_list.getPicked(); + + if (hint) { + input.value = hint.innerHTML; + } else { + // If no hint is selected, just use the original user input to autocomplete + input.value = input_autoComplt_currentTarget; + } + } + }, + /* + */ + input_autoComplt_blurEvtHandle = function(e) { + + if (input_autoComplt_list.mouseOnList) { + // If the mouse is on the autocomplete list, do not close the list + // and still need to focus on the input. + input.focus(); + input_autoComplt_list.mouseOnList = false; // Assign false for the next detection + } else { + + if (input_autoComplt_list.isOpen()) { + input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); + } + } + }, + /* + */ + input_autoComplt_keyEvtHandle = function(e) { + + if (_getAppropriateMode() === _CONST.modeMobile) return; // Let this::input_autoComplt_inputEvtHandleMobile handle + + e = _normalizeEvt(e); + + if (input_autoComplt_enabled) { + if (e.type == 'keydown' + && input_autoComplt_list.isOpen() + && (e.keyCode === _CONST.keyCode.up || e.keyCode === _CONST.keyCode.down) + ) { + // At the case that the hint list is open ans user is walking thru the hints. + // Let's try to autocomplete the input by the selected input. + + var hint = input_autoComplt_list.getPicked(); + + if (e.keyCode === _CONST.keyCode.up) { + + if (!hint) { + // If none is selected, then pick the last hint + input_autoComplt_list.pick(-1); + } else if (hint.previousSibling) { + // If some hint is selected and the previous hint exists, then pick the previous hint + input_autoComplt_list.pick(hint.previousSibling); + } else { + // If some hint is selected but the previous hint doesn't exists, then unpick all + input_autoComplt_list.unpick(); + } + + } else if (e.keyCode === _CONST.keyCode.down) { + + if (!hint) { + // If none is selected, then pick the first hint + input_autoComplt_list.pick(0); + } else if (hint.nextSibling) { + // If some hint is selected and the next hint exists, then pick the next hint + input_autoComplt_list.pick(hint.nextSibling); + } else { + // If some hint is selected but the next hint doesn't exists, then unpick all + input_autoComplt_list.unpick(); + } + + } + + input_autoComplt_list.autoScroll(); + + input_autoComplt_compltInput(); + + } + else if (e.type == 'keyup') { + + var startFetching = false; + + switch (e.keyCode) { + case _CONST.keyCode.up: + case _CONST.keyCode.down: + if (input_autoComplt_list.isOpen()) { + // We have handled this 2 key codes onkeydown, so must do nothing here + } else { + startFetching = true; + } + break; + + case _CONST.keyCode.esc: + if (input_autoComplt_list.isOpen()) { + // When pressing the ESC key, let's resume back to the original user input + input.value = input_autoComplt_currentTarget; + input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); + } + break; + + case _CONST.keyCode.enter: + if (input_autoComplt_list.isOpen()) { + // When pressing the enter key, let's try autocomplete + input_autoComplt_compltInput(); + input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); + } + break; + + default: + startFetching = true; + break; + } + + if (startFetching) { + if (input.value.length > 0) { + input_autoComplt_startFetcher(); + } else { + input.autoComplt.close(); + } + } + } + } + }, + /* + */ + input_autoComplt_inputEvtHandleMobile = function(e) { + + if (_getAppropriateMode() === _CONST.modePC) return; // Let this::input_autoComplt_keyEvtHandle handle + + if (input.value.length > 0) { + input_autoComplt_startFetcher(); + } else { + input.autoComplt.close(); + } + }, + /* Arg: + name = Refer to _CONST.listenersSupported + */ + input_autoComplt_invokeListener = function(name) { + + if (input_autoComplt_listenerMap != null && typeof input_autoComplt_listenerMap[name] == 'function') { + + input_autoComplt_listenerMap[name].call(input); + } + }; + + input.autoComplt.setHintsFetcher = function(hintsFetcher) { + if (hintsFetcher === null || typeof hintsFetcher == 'function') { + input_autoComplt_hintsFetcher = hintsFetcher; + return true; + } + return false; + }; + + input.autoComplt.setListener = function(name, listener) { + + if ((listener === null || typeof listener == 'function') && _CONST.listenersSupported.indexOf(name) >= 0) { + + if (input_autoComplt_listenerMap == null) input_autoComplt_listenerMap = {}; + + input_autoComplt_listenerMap[name] = listener; + + return true; + } + + return false; + }; + + input.autoComplt.setStyles = function(targetClass, styles) { + + var tStyles, + adjStyleAttrs, + newStyles = false; + + // Let's find out which the target UI part is being set + switch (targetClass) { + case _CONST.autoCompltListClass: + tStyles = input_autoComplt_list.styles.autoCompltList; + adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltList; + break; + + case _CONST.autoCompltHintClass: + tStyles = input_autoComplt_list.styles.autoCompltHint; + adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltHint; + break; + + case _CONST.autoCompltHintSelectedClass: + tStyles = input_autoComplt_list.styles.autoCompltHintSelected; + adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltHintSelected; + break; + } + + if (styles instanceof Object && tStyles && adjStyleAttrs) { + + for (var i = 0; i < adjStyleAttrs.length; i++) { + + if (typeof styles[adjStyleAttrs[i]] == 'string' || typeof styles[adjStyleAttrs[i]] == 'number') { // A simple type checking + if (!newStyles) { + newStyles = {}; + } + newStyles[adjStyleAttrs[i]] = tStyles[adjStyleAttrs[i]] = styles[adjStyleAttrs[i]]; + } + + } + + } + + return newStyles; + }; + + input.autoComplt.config = function(params) { + + var pms = false; + + if (params instanceof Object) { + + var buf; + + // Config the fetching delay timing + // + if (params.delay !== undefined && (buf = Math.floor(params.delay)) > 0) { + + if (!pms) pms = {}; + + input_autoComplt_delay = pms.delay = buf; + } + + // Config the max number of displayed hints + // + if (params.maxHintNum !== undefined && (buf = Math.floor(params.maxHintNum)) > 0) { + + if (!pms) pms = {}; + + input_autoComplt_list.maxHintNum = pms.maxHintNum = buf; + } + } + return pms; + }; + + input.autoComplt.close = function() { + + input_autoComplt_currentTarget = ''; // Closing means no need for autocomplete hint so no autocomplete target either + + input_autoComplt_list.close(); + + if (input_autoComplt_enabled + && input.value !== '' + && arguments[0] === _CONST.hiddenArg_close_list_n_make_final_selection + ) { + + input_autoComplt_invokeListener('select'); + } + }; + + input.autoComplt.enable = function() { + input_autoComplt_enabled = true; + }; + + input.autoComplt.disable = function() { + input_autoComplt_enabled = false; + this.close(); + }; + + input.autoComplt.destroy = function() { + _rmEvent(input, 'blur', input_autoComplt_blurEvtHandle); + _rmEvent(input, 'keyup', input_autoComplt_keyEvtHandle); + _rmEvent(input, 'keydown', input_autoComplt_keyEvtHandle); + this.disable(); + delete input.autoComplt; + }; + + input_autoComplt_list.onMouseSelectionListener = function() { + + input_autoComplt_compltInput(); + + input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); + }; + + _addEvt(input, 'blur', input_autoComplt_blurEvtHandle); + _addEvt(input, 'keyup', input_autoComplt_keyEvtHandle); + _addEvt(input, 'keydown', input_autoComplt_keyEvtHandle); + + _addEvt(input, 'input', input_autoComplt_inputEvtHandleMobile); + + if (params instanceof Object) { + input.autoComplt.config(params); + input.autoComplt.setHintsFetcher(params.hintsFetcher); + } + + return input; + } + return null; + } + + }; + + return publicProps; +}()); + +tinymce.PluginManager.add('modxlink', function(editor) { + function createLinkList(callback) + { + return function() { + var linkList = editor.settings.link_list; + + if (typeof linkList == 'string') { + tinymce.util.XHR.send({ + url: linkList, + success: function(text) { + callback(tinymce.util.JSON.parse(text)); + } + }); + } else if (typeof linkList == 'function') { + linkList(callback); + } else { + callback(linkList); + } + }; + } + + function buildListItems(inputList, itemCallback, startItems) + { + function appendItems(values, output) + { + output = output || []; + + tinymce.each(values, function(item) { + var menuItem = {text: item.text || item.title}; + + if (item.menu) { + menuItem.menu = appendItems(item.menu); + } else { + menuItem.value = item.value; + + if (itemCallback) { + itemCallback(menuItem); + } + } + + output.push(menuItem); + }); + + return output; + } + + return appendItems(inputList, startItems || []); + } + + function showDialog(linkList) + { + + if (parent.tree) { + parent.tree.ca = 'disabled'; // Disable Modx-TreeAction, resetted on onOk or OnCancel + checkModxTreeUpdate.call(this); // Watch Modx-Tree for changes and update URL-field + } + ; + + var data = {}, selection = editor.selection, dom = editor.dom, selectedElm, anchorElm, initialText; + var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; + + function linkListChangeHandler(e) + { + var textCtrl = win.find('#text'); + + if (!textCtrl.value() || (e.lastControl && textCtrl.value() == e.lastControl.text())) { + textCtrl.value(e.control.text()); + } + + win.find('#href').value(e.control.value()); + } + + function buildAnchorListControl(url) + { + var anchorList = []; + + tinymce.each(editor.dom.select('a:not([href])'), function(anchor) { + var id = anchor.name || anchor.id; + + if (id) { + anchorList.push({ + text: id, + value: '#' + id, + selected: url.indexOf('#' + id) != -1 + }); + } + }); + + if (anchorList.length) { + anchorList.unshift({text: 'None', value: ''}); + + return { + name: 'anchor', + type: 'listbox', + label: 'Anchors', + values: anchorList, + onselect: linkListChangeHandler + }; + } + } + + function updateText() + { + if (!initialText && data.text.length === 0 && onlyText) { + this.parent().parent().find('#text')[0].value(this.value()); + } + } + + function urlChange(e) + { + var meta = e.meta || {}; + + if (linkListCtrl) { + linkListCtrl.value(editor.convertURL(this.value(), 'href')); + } + + tinymce.each(e.meta, function(value, key) { + win.find('#' + key).value(value); + }); + + if (!meta.text) { + updateText.call(this); + } + } + + function isOnlyTextSelected(anchorElm) + { + var html = selection.getContent(); + + // Partial html and not a fully selected anchor element + if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') == -1)) { + return false; + } + + if (anchorElm) { + var nodes = anchorElm.childNodes, i; + + if (nodes.length === 0) { + return false; + } + + for (i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].nodeType != 3) { + return false; + } + } + } + + return true; + } + + selectedElm = selection.getNode(); + anchorElm = dom.getParent(selectedElm, 'a[href]'); + onlyText = isOnlyTextSelected(); + + data.text = initialText = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({format: 'text'}); + data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; + + if (anchorElm) { + data.target = dom.getAttrib(anchorElm, 'target'); + } else if (editor.settings.default_link_target) { + data.target = editor.settings.default_link_target; + } + + if ((value = dom.getAttrib(anchorElm, 'rel'))) { + data.rel = value; + } + + if ((value = dom.getAttrib(anchorElm, 'class'))) { + data['class'] = value; + } + + if ((value = dom.getAttrib(anchorElm, 'title'))) { + data.title = value; + } + + if (onlyText) { + textListCtrl = { + name: 'text', + type: 'textbox', + size: 40, + label: 'Text to display', + id: 'text-to-display', + onchange: function() { + data.text = this.value(); + } + }; + } + + if (linkList) { + linkListCtrl = { + type: 'listbox', + label: 'Link list', + values: buildListItems( + linkList, + function(item) { + item.value = editor.convertURL(item.value || item.url, 'href'); + }, + [{text: 'None', value: ''}] + ), + onselect: linkListChangeHandler, + value: editor.convertURL(data.href, 'href'), + onPostRender: function() { + linkListCtrl = this; + } + }; + } + + if (editor.settings.target_list !== false) { + if (!editor.settings.target_list) { + editor.settings.target_list = [ + {text: 'None', value: ''}, + {text: 'New window', value: '_blank'} + ]; + } + + targetListCtrl = { + name: 'target', + type: 'listbox', + label: 'Target', + values: buildListItems(editor.settings.target_list) + }; + } + + if (editor.settings.rel_list) { + relListCtrl = { + name: 'rel', + type: 'listbox', + label: 'Rel', + values: buildListItems(editor.settings.rel_list) + }; + } + + if (editor.settings.link_class_list) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems( + editor.settings.link_class_list, + function(item) { + if (item.value) { + item.textStyle = function() { + return editor.formatter.getCssText({inline: 'a', classes: [item.value]}); + }; + } + } + ) + }; + } + + if (editor.settings.link_title !== false) { + linkTitleCtrl = { + name: 'title', + type: 'textbox', + label: 'Title', + value: data.title + }; + } + + win = editor.windowManager.open({ + title: 'Insert link', + data: data, + body: [ + { + name: 'href', + type: 'FileImagePicker', + filetype: 'file', + size: 40, + autofocus: true, + label: 'Url', + id: 'link-href', + onchange: urlChange, + onkeyup: updateText + }, + { + name: 'search', + type: 'textbox', + label: 'Search in EVO', + id: 'link-search' + }, + textListCtrl, + linkTitleCtrl, + buildAnchorListControl(data.href), + linkListCtrl, + relListCtrl, + targetListCtrl, + classListCtrl + ], + onSubmit: function(e) { + /*eslint dot-notation: 0*/ + var href; + + data = tinymce.extend(data, e.data); + href = data.href; + + // Delay confirm since onSubmit will move focus + function delayedConfirm(message, callback) + { + var rng = editor.selection.getRng(); + + window.setTimeout(function() { + editor.windowManager.confirm(message, function(state) { + editor.selection.setRng(rng); + callback(state); + }); + }, 0); + } + + function insertLink() + { + + // Reset Modx-TreeAction + if (parent.tree) { + parent.tree.ca = ''; + clearTimeout(checkModxTreeUpdateInterval); + } + ; + + var linkAttrs = { + href: href, + target: data.target ? data.target : null, + rel: data.rel ? data.rel : null, + 'class': data['class'] ? data['class'] : null, + title: data.title ? data.title : null + }; + + if (anchorElm) { + editor.focus(); + + if (onlyText && data.text != initialText) { + if ('innerText' in anchorElm) { + anchorElm.innerText = data.text; + } else { + anchorElm.textContent = data.text; + } + } + + dom.setAttribs(anchorElm, linkAttrs); + + selection.select(anchorElm); + editor.undoManager.add(); + } else { + if (onlyText) { + editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(data.text))); + } else { + editor.execCommand('mceInsertLink', false, linkAttrs); + } + } + } + + if (!href) { + editor.execCommand('unlink'); + return; + } + + // Is email and not //user@domain.com + if (href.indexOf('@') > 0 && href.indexOf('//') == -1 && href.indexOf('mailto:') == -1) { + delayedConfirm( + 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', + function(state) { + if (state) { + href = 'mailto:' + href; + } + + insertLink(); + } + ); + + return; + } + + // Is not protocol prefixed + if ((editor.settings.link_assume_external_targets && !/^\w+:/i.test(href)) || + (!editor.settings.link_assume_external_targets && /^\s*www\./i.test(href))) { + delayedConfirm( + 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', + function(state) { + if (state) { + href = 'http://' + href; + } + + insertLink(); + } + ); + + return; + } + + insertLink(); + }, + onClose: function(e) { + // Reset Modx-TreeAction + if (parent.tree) { + parent.tree.ca = ''; + clearTimeout(checkModxTreeUpdateInterval); + } + ; + } + }); + + var input = document.querySelector('#link-search'), _resultDataset = {}; + autoComplt.enable(input, { + // the hintsFetcher is your customized function which searchs the proper autocomplete hints based on the user's input value. + hintsFetcher: function(v, openList) { + _resultDataset = {}; + var xhr = new XMLHttpRequest(), _link = encodeURI(tinymce4_baseUrl + 'tinymce/plugins/modxlink/search.php' + '?q=' + v); + xhr.open('GET', _link); + xhr.onload = function() { + if (xhr.status === 200) { + //alert(xhr.responseText); + var _results = JSON.parse(xhr.responseText), _e = []; + for (var i = 0; i < Object.keys(_results).length; i++) { + _resultDataset[_results[i].pagetitle] = _results[i]; + _e.push(_results[i].pagetitle); + } + openList(_e); + } else { + console.error('ajax error', _link); + } + }; + xhr.send(); + } + }); + input.autoComplt.setListener('select', function(e, r) { + var _a = document.querySelector('#link-href input'), _title = document.querySelector('#text-to-display'); + _a.value = '[~' + _resultDataset[this.value].id + '~]'; + if (_title.value == '') _title.value = _resultDataset[this.value].title; + }); + + } + + editor.addButton('link', { + icon: 'link', + tooltip: 'Insert/edit link', + shortcut: 'Meta+K', + onclick: createLinkList(showDialog), + stateSelector: 'a[href]' + }); + + editor.addButton('unlink', { + icon: 'unlink', + tooltip: 'Remove link', + cmd: 'unlink', + stateSelector: 'a[href]' + }); + + editor.addShortcut('Meta+K', '', createLinkList(showDialog)); + editor.addCommand('mceLink', createLinkList(showDialog)); + + this.showDialog = showDialog; + + editor.addMenuItem('link', { + icon: 'link', + text: 'Insert/edit link', + shortcut: 'Meta+K', + onclick: createLinkList(showDialog), + stateSelector: 'a[href]', + context: 'insert', + prependToContext: true + }); + tinymce.ui.Factory.add('FileImagePicker',tinymce.ui.ComboBox.extend({ + init: function(settings) { + var self = this, editor = tinymce.activeEditor, editorSettings = editor.settings; + var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes; + settings.spellcheck = false; + fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types; + if (fileBrowserCallbackTypes) { + fileBrowserCallbackTypes = Tools.makeMap(fileBrowserCallbackTypes, /[, ]/); + } + + if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[settings.filetype]) { + fileBrowserCallback = editorSettings.file_picker_callback; + if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[settings.filetype])) { + actionCallback = function() { + var meta = self.fire('beforecall').meta; + + meta = Tools.extend({filetype: settings.filetype}, meta); + + // file_picker_callback(callback, currentValue, metaData) + fileBrowserCallback.call( + editor, + function(value, meta) { + self.value(value).fire('change', {meta: meta}); + }, + self.value(), + meta + ); + }; + } else { + // Legacy callback: file_picker_callback(id, currentValue, filetype, window) + fileBrowserCallback = editorSettings.file_browser_callback; + if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[settings.filetype])) { + actionCallback = function() { + fileBrowserCallback( + self.getEl('inp').id, + self.value(), + self.settings.filetype, + window + ); + }; + } + } + } + + if (actionCallback) { + settings.icon = 'browse'; + settings.onaction = actionCallback; + } + + self._super(settings); + self.off('click').on('click', function(e){ + var elm = e.target, root = self.getEl(); + if (!self.$.contains(root, elm) && elm != root) { + return; + } + + while (elm && elm != root) { + if (elm.id && elm.id.indexOf('-action') != -1) { + if (elm.id === self._id + '-image-action') { + self.settings.filetype = 'image'; + } else { + self.settings.filetype = 'file'; + } + self.fire('action'); + } + elm = elm.parentNode; + } + }); + }, + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix; + var value = self.state.get('value') || ''; + var icon, text, openBtnHtml = '', extraAttrs = ''; + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + openBtnHtml = ( + '
      ' + + '' + + '' + + '
      ' + ); + self.classes.add('has-open'); + + return ( + '
      ' + + '' + + openBtnHtml + + '
      ' + ); + }, + })); +}); diff --git a/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.min.js b/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.min.js index 48b0ac09..fc3ec010 100755 --- a/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.min.js +++ b/assets/plugins/tinymce4/tinymce/plugins/modxlink/plugin.min.js @@ -1,1545 +1 @@ -/** - * modxlink.js - * - * Based on link.js but with resource search added. - * - * By default both pagetitle and alias are searched. - * - * Author: markwillis82 - * Date: 7/7/15 - * update 64j 8/11/17 - */ - -// Handles selection from Modx-Ressource-Tree -if (parent.modx.tree) { - var modxOldRessourceId = parent.modx.tree.itemToChange; - var modxLinkTitle = ''; - var checkModxTreeUpdateInterval = undefined; - var checkModxTreeUpdate = function() { - - checkModxTreeUpdateInterval = setTimeout(checkModxTreeUpdate, 100); - - if (parent.modx.tree.itemToChange != modxOldRessourceId) { - modxOldRessourceId = parent.modx.tree.itemToChange; - modxLinkTitle = parent.modx.tree.selectedObjectName; - - document.getElementById('link-href-inp').value = '[~' + modxOldRessourceId + '~]'; - if (!document.getElementById('text-to-display').value) { - document.getElementById('text-to-display').value = modxLinkTitle; - } - } - }; -} - -/*global tinymce:true */ -var autoComplt = (function() { - /* Properties: - [ Private ] - _CONST = the constants collection - _ui = the obj to build UI - _AutoCompltList = the class dealing with the autocomplete operations - [ Public ] - > Refer to the Public APIs above - Methods: - [ Private ] - > _getIEVersion : Get the IE version - > _getAppropriateMode : Get the mode appropriate for the current user scenario - > _getWindowSize : Get the client window width and height - > _normalizeEvt : Normalize the event obj - > _addEvt : Add an event to one elem, used for cross-browser mitigation - > _rmEvent : remove an event to one elem, used for cross-browser mitigation - > _getComputedStyle : Get the computed style value, used for cross-browser mitigation - [ Public ] - > enable : Refer to the Public APIs above - - */ - 'use strict'; - - var _DBG = 0; // A little debug flag - - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function(searchElement, fromIndex) { - if (this === undefined || this === null) {throw new TypeError('"this" is null or not defined');} - var length = this.length >>> 0; - fromIndex = +fromIndex || 0; - if (Math.abs(fromIndex) === Infinity) {fromIndex = 0;} - if (fromIndex < 0) { - fromIndex += length; - if (fromIndex < 0) {fromIndex = 0;} - } - for (; fromIndex < length; fromIndex++) {if (this[fromIndex] === searchElement) {return fromIndex;}} - return -1; - }; - } - - var - /* Return: - @ Is IE: the version of IE - @ Not IE: NaN - */ - _getIEVersion = function() { - var rv = -1; // Return value assumes failure. - if (navigator.appName == 'Microsoft Internet Explorer') { - var ua = navigator.userAgent; - var re = new RegExp('MSIE ([0-9]{1,}[\.0-9]{0,})'); - if (re.exec(ua) != null) { - rv = +(RegExp.$1); - } - } - return (rv === -1) ? NaN : rv; - }, - /* Return: - > _CONST.modePC or _CONST.modeMobile - */ - _getAppropriateMode = function() { - - // Judge by the userAgent string - var ua = window.navigator.userAgent.toLowerCase(); - if (ua.search(/mobile|windows phone/) >= 0) return _CONST.modeMobile; - - // Bye the legacy IEs - if (_getIEVersion() <= 9) return _CONST.modePC; - - // Judge by the window width - return (_getWindowSize().windowWidth > _CONST.modeMobileW) ? _CONST.modePC : _CONST.modeMobile; - }, - /* Return: { - windowWidth : the width of the client window in px. If unable to find, then -1. - windowHeight : the height of the client window in px. If unable to find, then -1. - } - */ - _getWindowSize = function() { - - if (window.innerWidth) { - - return { - windowWidth: window.innerWidth, - windowHeight: window.innerHeight - }; - - } else if (document.documentElement.offsetHeight) { - - return { - windowWidth: document.documentElement.offsetWidth, - windowHeight: document.documentElement.offsetHeight - }; - - } else if (document.body.offsetHeight) { - - return { - windowWidth: document.body.offsetWidth, - windowHeight: document.body.offsetHeight - }; - - } else if (document.documentElement.clientHeight) { - - return { - windowWidth: document.documentElement.clientWidth, - windowHeight: document.documentElement.clientHeight - }; - - } else if (document.body.clientHeight) { - - return { - windowWidth: document.body.clientWidth, - windowHeight: document.body.clientHeight - }; - } - - return { - windowWidth: -1, - windowHeight: -1 - }; - }, - _CONST = (function(c) { - - _CONST = c; - - c.modePC = 'modePC'; // Represent the PC mode - - c.modeMobile = 'modeMobile'; // Represent the mobile mode - - c.modeMobileW = 768; // in px. The width used to seperate the PC & mobile mode - - c.autoCompltListClass = 'autoComplt-list'; - - c.autoCompltHintClass = 'autoComplt-hint'; - - c.autoCompltHintSelectedClass = 'autoComplt-hint-selected'; - - c.maxHintNum = (_getAppropriateMode() === _CONST.modePC) ? 10 : 5; // For limited mobile screen, not too many - - c.autoCompltDelay = 250; // in ms - - c.hiddenArg_close_list_n_make_final_selection = 'hiddenArg_close_list_n_make_final_selection'; - - c.listStatus = { - attr: 'data-listStatus', - open: 'open' - }; - - c.keyCode = { - up: 38, - down: 40, - esc: 27, - enter: 13 - }; - - c.defaultStyles = { - - autoCompltList: { - maxHeight: 'none', - border: '1px solid #aaa', - padding: '0', - margin: '0', - zIndex: 99999, - overflowX: 'hidden', - overflowY: 'auto', - display: 'none', - position: 'absolute', - backgroundColor: '#fff' - }, - - autoCompltHint: { - height: '1.5em', - padding: (_getAppropriateMode() === _CONST.modePC) ? '2px 6px 2px 10px' : '6px 6px 6px 10px', // For good touch ux, enlarge for the mobile mode - margin: '6px 0', - overflow: 'hidden', - listStyleType: 'none', - color: '#000', - backgroundColor: '#fff', - cursor: 'default', - fontSize: '1em' - }, - - autoCompltHintSelected: { - color: '#fff', - backgroundColor: '#3399ff' - } - }; - - c.adjStyleAttrs = { - autoCompltList: ['border', 'maxHeight', 'backgroundColor'], - autoCompltHint: ['height', 'padding', 'margin', 'color', 'backgroundColor', 'fontSize'], - autoCompltHintSelected: ['color', 'backgroundColor'] - }; - - // names of listeners supported - c.listenersSupported = [ - 'select' // Called when the user's final hint selection is decided - ]; - - return _CONST; - })({}), - /* Arg: - e = the event obj - Return: - the normalized event obj - */ - _normalizeEvt = function(e) { - - if (!e) e = window.event; - - if (!e.target) e.target = e.srcElement; - - e.stopBubble = function() { - this.cancelBubble = true; - if (this.stopPropagation) { this.stopPropagation(); } - }; - - e.stopDefault = function() { - if (this.preventDefault) { this.preventDefault(); } - this.returnValue = false; - return false; - }; - return e; - }, - /* Arg: - elem = the DOM elem - evt = the event name - eHandle = the event handle - */ - _addEvt = function(elem, evt, eHandle) { - if (elem.addEventListener) { - elem.addEventListener(evt, eHandle); - } else if (elem.attachEvent) { // The IE 8 case - elem.attachEvent('on' + evt, eHandle); - } - }, - /* Arg: Refer to _addEvt - */ - _rmEvent = function(elem, evt, eHandle) { - if (elem.removeEventListener) { - elem.removeEventListener(evt, eHandle); - } else if (elem.detachEvent) { // The IE 8 case - elem.detachEvent('on' + evt, eHandle); - } - }, - /* Arg: - elem = the DOM elem - name = the style name - */ - _getComputedStyle = function(elem, name) { - var v = null; - - if (window.getComputedStyle) { - - v = window.getComputedStyle(elem)[name] || null; - - } else if (elem.currentStyle) { // Hack for IE...Reference from the jQuery - - v = elem.currentStyle && elem.currentStyle[name]; - - var left, - rsLeft, - style = elem.style; - - // Avoid setting v to empty string here - // so we don't default to auto - if (v == null && style && style[name]) { - v = style[name]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - - // Remember the original values - left = style.left; - rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - if (rsLeft) { - elem.runtimeStyle.left = elem.currentStyle.left; - } - style.left = name === 'fontSize' ? '1em' : v; - v = style.pixelLeft + 'px'; - - // Revert the changed values - style.left = left; - if (rsLeft) { - elem.runtimeStyle.left = rsLeft; - } - - } - - return v; - }, - /* Methods: - [ Public ] - > buildElem : Build on elem from the HTML text - > buildHint : Build one autocomplete hint elem - > buildList : Build one autocomplete list - */ - _ui = { - /* Arg: - html = the HTMl text - Return: - the elem built from the input HTML - */ - buildElem: function(html) { - var div = document.createElement('DIV'); - div.innerHTML = html; - return div.firstChild.cloneNode(true); - }, - /* Arg: - hint = the hint text - styles = the obk holding the styles to set. Refer to _CONST.defaultStyles.autoCompltHint for the required styles - Return: - @ OK: the hint ui elem - @ NG: null - */ - buildHint: function(hint, styles) { - if (typeof hint == 'string' && hint) { - hint = this.buildElem('
    • ' + hint + '
    • '); - - hint.style.height = hint.style.lineHeight = styles.autoCompltHint.height; // line-height shall always be equal to the height - hint.style.padding = styles.autoCompltHint.padding; - hint.style.margin = styles.autoCompltHint.margin; - hint.style.overflow = styles.autoCompltHint.overflow; - hint.style.listStyleType = styles.autoCompltHint.listStyleType; - hint.style.color = styles.autoCompltHint.color; - hint.style.backgroundColor = styles.autoCompltHint.backgroundColor; - hint.style.cursor = styles.autoCompltHint.cursor; - hint.style.fontSize = styles.autoCompltHint.fontSize; - - return hint; - } - return null; - }, - /* Arg: - styles = the obk holding the styles to set. Refer to _CONST.defaultStyles.autoCompltList for the required styles - Return: - @ OK: the list ui elem - @ NG: null - */ - buildList: function(styles) { - var list = this.buildElem('
        '); - - list.style.maxHeight = styles.autoCompltList.maxHeight; - list.style.border = styles.autoCompltList.border; - list.style.padding = styles.autoCompltList.padding; - list.style.margin = styles.autoCompltList.margin; - list.style.zIndex = styles.autoCompltList.zIndex; - list.style.overflowX = styles.autoCompltList.overflowX; - list.style.overflowY = styles.autoCompltList.overflowY; - list.style.display = styles.autoCompltList.display; - list.style.position = styles.autoCompltList.position; - list.style.backgroundColor = styles.autoCompltList.backgroundColor; - - return list; - } - }, - /* Properties: - [ Public ] - uiElem = the autocomplete list current being displayed and associated with. - assocInput = the input elem associated with - mouseOnList = A little flag marking the moused is on the top of the autocomplete list - maxHintNum = The max number of hints displayed - styles = the obj holding the style setting of the list and hints. Refer to _CONST.defaultStyles for the required styles. - onMouseSelectionListener = Called when user explicitly selects one hint by mouse clicking. No args passed. - Methods: - [ Public ] - > genList : Build and setup one autocomplete list - > isHint : Check if it is a autocomplete hint elem or not - > putHints : Put hints into the autocomplete list - > clearHints : Clear all hints - > isOpen : Tell if the auotcomplete list is open or not - > open : Open the autocomplete list. NOTICE: before opening, there must at one hint in the list so please call this.putHints first then open. - > close : Close the autocomplete list - > autoScroll : Auto scroll the list according the position and offset of the current selected hint so the current selected hint could show up - > pick : Pick up one hint. NOTICE: this action is to pick up one hint but not to select that hint so it will not change this.assocInput's value. Please use this.getPicked to get the picked hint and extract the hint text and assign this.assocInput's value the hint text - > unpick : Unpick all hints - > getPicked : Get the hint elem picked - */ - _AutoCompltList = function(assocInput) { - - this.uiElem = null; - this.assocInput = assocInput; - this.mouseOnList = false; - this.onMouseSelectionListener = null; - this.maxHintNum = _CONST.maxHintNum; - this.styles = JSON.parse(JSON.stringify(_CONST.defaultStyles)); // Copy the default first - - }; - { - /* - */ - _AutoCompltList.prototype.genList = function() { - if (!this.uiElem) { - - var that = this; - - this.uiElem = _ui.buildList(this.styles); - - // Make hint selected onmouseover - _addEvt(this.uiElem, 'mouseover', function(e) { - e = _normalizeEvt(e); - if (that.isHint(e.target)) { - that.pick(e.target); - that.autoScroll(); - } - }); - - // Make hint not selected onmouseout - _addEvt(this.uiElem, 'mouseout', function(e) { - that.unpick(); - }); - - // Prepare for the hint selection by clicking - _addEvt(this.uiElem, 'mousedown', function(e) { - that.mouseOnList = true; - // One hack for FF. - // Even call focus methos on the input's onblur event, however, still the input losese its focus. - // As a result we have to set a timeout here - setTimeout(function() { - that.assocInput.focus(); - }, 50); - }); - - // pick hint by clicking - _addEvt(this.uiElem, 'mouseup', function(e) { - - e = _normalizeEvt(e); - - if (that.isHint(e.target)) { - - that.pick(e.target); - - if (typeof that.onMouseSelectionListener == 'function') that.onMouseSelectionListener(); - } - }); - - document.body.appendChild(this.uiElem); - } - }; - /* Arg: - el = the elem to check - Return: - @ Ok: true - @ NG: false - */ - _AutoCompltList.prototype.isHint = function(el) { - if (el && typeof el == 'object' && el.nodeType === 1) { - var cls = ' ' + el.className + ' '; - return (cls.indexOf(' ' + _CONST.autoCompltHintClass + ' ') >= 0); - } - return false; - }; - /* Arg: - hints = the array of hint texts - Return: - the number of hints put - */ - _AutoCompltList.prototype.putHints = function(hints) { - var count = 0; - if (hints instanceof Array) { - var i, - j, - hs = []; - - j = Math.min(hints.length, this.maxHintNum); - for (i = 0; i < j; i++) { - hs.push(_ui.buildHint(hints[i], this.styles)); - if (!hs[hs.length - 1]) { - hs.pop(); - } - } - - if (hs.length > 0) { - var buf = document.createDocumentFragment(); - for (i = 0, count = hs.length; i < count; i++) { - buf.appendChild(hs[i]); - } - this.clearHints(); - - this.genList(); // Geneate the list in case there is none - this.uiElem.appendChild(buf); - } - } - return count; - }; - /* - */ - _AutoCompltList.prototype.clearHints = function() { - if (this.uiElem) { - this.uiElem.innerHTML = ''; - } - }; - /* - Return: - @ Ok: true - @ NG: false - */ - _AutoCompltList.prototype.isOpen = function() { - if (this.uiElem) { - return (this.uiElem.getAttribute(_CONST.listStatus.attr) == _CONST.listStatus.open); - } - return false; - }; - /* - */ - _AutoCompltList.prototype.open = function() { - var hints; - - if (this.uiElem - && (hints = this.uiElem.querySelectorAll('.' + _CONST.autoCompltHintClass)) - && hints.length // At lease one hint exists, we would open... - ) { - var i, - buf; - - // Position the list - buf = this.assocInput.getBoundingClientRect(); - this.uiElem.style.top = (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) - + buf.bottom + 'px'; - this.uiElem.style.left = buf.left + 'px'; - - // Calculate the list's width - buf = buf.right - buf.left - parseFloat(_getComputedStyle(this.uiElem, 'borderLeftWidth')) - parseFloat(_getComputedStyle(this.uiElem, 'borderRightWidth')); - this.uiElem.style.width = buf + 'px'; - - // Calculate the list's height - for (i = 0, buf = 0; i < hints.length; i++) { - buf += parseFloat(_getComputedStyle(hints[i], 'height')) - + parseFloat(_getComputedStyle(hints[i], 'paddingTop')) - + parseFloat(_getComputedStyle(hints[i], 'paddingBottom')); - - if (hints[i + 1]) { // Compute the margin between the hints - buf += Math.max( - parseFloat(_getComputedStyle(hints[i], 'marginBottom')), parseFloat(_getComputedStyle(hints[i + 1], 'marginTop')) - ); - } - } - buf += parseFloat(_getComputedStyle(hints[0], 'marginTop')) - + parseFloat(_getComputedStyle(hints[hints.length - 1], 'marginBottom')); - this.uiElem.style.height = (buf + 1) + 'px'; // Plus one for a little buffer - - // Open - this.uiElem.setAttribute(_CONST.listStatus.attr, _CONST.listStatus.open); - this.uiElem.style.display = 'block'; - - } - }; - /* - */ - _AutoCompltList.prototype.close = function() { - if (this.uiElem) { - this.mouseOnList = false; - this.uiElem.parentNode.removeChild(this.uiElem); - this.uiElem = null; - } - }; - /* - */ - _AutoCompltList.prototype.autoScroll = function() { - var hint = this.getPicked(); - if (hint) { - var currHint, - offset = 0, - minDisplayH = 0, - hintH = hint.clientHeight, - hintMT = parseFloat(_getComputedStyle(hint, 'marginTop')), - hintMB = parseFloat(_getComputedStyle(hint, 'marginBottom')); - - currHint = hint.previousSibling; - - minDisplayH = hintH + (currHint ? Math.max(hintMT, hintMB) : hintMT); // The min height to display one hint - - while (currHint) { - - offset += hintH; // Add the current hint' hintH - - currHint = currHint.previousSibling; - if (currHint) { - // There is one hint before the current hint so calculate based on the collapsed model - offset += Math.max(hintMT, hintMB); - } else { - // No more previous hint, this is the 1st hint so just take the marign top - offset += hintMT; - } - } - - if (this.uiElem.clientHeight + this.uiElem.scrollTop - offset < minDisplayH - || offset - this.uiElem.scrollTop < minDisplayH - ) { - // Ther is no enough room displaying the current selected hint so adjust the scroll - this.uiElem.scrollTop = offset; - } - } - }; - /* Arg: - candidate = could be - 1) the hint elem or - 2) the index of the hint in the list. Passing in -1 would pick the last hint. Passing in 0 would pick the 1st hint. - */ - _AutoCompltList.prototype.pick = function(candidate) { - - if (this.uiElem) { - - var hint = null; - - if (this.isHint(candidate)) { - - hint = candidate; - - } else if (typeof candidate == 'number' && (candidate >= 0 || candidate === -1)) { - - var hints = this.uiElem.querySelectorAll('.' + _CONST.autoCompltHintClass); - - if (hints.length > 0) { - hint = +candidate; - hint = (hint === -1 || hint > hints.length - 1) ? hints.length - 1 : hint; - hint = hints[hint]; - } - } - - if (hint !== null) { - - this.unpick(); - hint.className += ' ' + _CONST.autoCompltHintSelectedClass; - hint.style.color = this.styles.autoCompltHintSelected.color; - hint.style.backgroundColor = this.styles.autoCompltHintSelected.backgroundColor; - } - } - }; - /* - */ - _AutoCompltList.prototype.unpick = function() { - if (this.uiElem) { - var slct = this.getPicked(); - if (slct) { - slct.className = _CONST.autoCompltHintClass; - slct.style.color = this.styles.autoCompltHint.color; - slct.style.backgroundColor = this.styles.autoCompltHint.backgroundColor; - } - } - }; - /* Return: - @ OK: the selected hint element - @ NG: null - */ - _AutoCompltList.prototype.getPicked = function() { - return !this.uiElem ? null : this.uiElem.querySelector('.' + _CONST.autoCompltHintSelectedClass) || null; - }; - } - - var - publicProps = { - - enable: function(input, params) { - if (input - && typeof input == 'object' - && typeof input.tagName == 'string' - && input.tagName.toLowerCase() == 'input' - && input.type == 'text' - && input.nodeType === 1 - && !input.autoComplt - ) { - - /* Propertise: - [ Private ] - input_autoComplt_delay = the ms delays the work of fetching the autocomplete hints based on the user's input - input_autoComplt_enabled = true to perform the autocomplete function; false not to perform. - input_autoComplt_currentTarget = the current user's input for which the autocomplete is target - input_autoComplt_listenerMap = the map of listeners - input_autoComplt_list = the instance of _AutoCompltList - Methods: - [ Private ] - > input_autoComplt_hintsFetcher : The function fetching the autocomplete hints - > input_autoComplt_startFetcher : Setup and call input_autoComplt_hintsFetcher to fetch the hints - > input_autoComplt_compltInput : Autocomplete the according to the hint selection state - > input_autoComplt_blurEvtHandle, input_autoComplt_keyEvtHandle : The event handle - > input_autoComplt_inputEvtHandleMobile : The event handle for the mobile mode - [ Public ] - > setHintsFetcher, setListener, config, setStyles, close, enable, disable, destroy : Refe to the Public APIs above - */ - input.autoComplt = {}; - - var - input_autoComplt_delay = _CONST.autoCompltDelay, - input_autoComplt_enabled = true, - input_autoComplt_currentTarget = '', - input_autoComplt_hintsFetcher = null, - input_autoComplt_listenerMap = null, - input_autoComplt_list = new _AutoCompltList(input), - /* - */ - input_autoComplt_startFetcher = function() { - - if (input.value.length > 0 - && input_autoComplt_enabled - && typeof input_autoComplt_hintsFetcher == 'function' - && input_autoComplt_currentTarget !== input.value // If equals, it means we've already been searching for the hints for the same value - ) { - - var fetcherCaller = { - - that: input, - - // Record the autocomplete target for this fetching job - compltTarget: (input_autoComplt_currentTarget = input.value), - - compltTargetMatchCurrentTarget: function() { - // If the user's input has changed during the fetching, this fetching job is useless. - // So only when the user's input doesn't change, we will return true to indicate proceeding further. - return (fetcherCaller.compltTarget === input_autoComplt_currentTarget); - }, - - call: function() { - - if (fetcherCaller.compltTargetMatchCurrentTarget()) { - - input_autoComplt_hintsFetcher.call( - fetcherCaller.that, - fetcherCaller.compltTarget, - fetcherCaller.openHint - ); - } - }, - - openHint: function(hints) { - if (fetcherCaller.compltTargetMatchCurrentTarget()) { - - if (input_autoComplt_list.putHints(hints)) { - input_autoComplt_list.open(); - } else { - fetcherCaller.that.autoComplt.close(); - } - } - } - }; - - setTimeout(fetcherCaller.call, input_autoComplt_delay); - } - }, - /* - */ - input_autoComplt_compltInput = function() { - - if (input_autoComplt_enabled) { - - var hint = input_autoComplt_list.getPicked(); - - if (hint) { - input.value = hint.innerHTML; - } else { - // If no hint is selected, just use the original user input to autocomplete - input.value = input_autoComplt_currentTarget; - } - } - }, - /* - */ - input_autoComplt_blurEvtHandle = function(e) { - - if (input_autoComplt_list.mouseOnList) { - // If the mouse is on the autocomplete list, do not close the list - // and still need to focus on the input. - input.focus(); - input_autoComplt_list.mouseOnList = false; // Assign false for the next detection - } else { - - if (input_autoComplt_list.isOpen()) { - input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); - } - } - }, - /* - */ - input_autoComplt_keyEvtHandle = function(e) { - - if (_getAppropriateMode() === _CONST.modeMobile) return; // Let this::input_autoComplt_inputEvtHandleMobile handle - - e = _normalizeEvt(e); - - if (input_autoComplt_enabled) { - if (e.type == 'keydown' - && input_autoComplt_list.isOpen() - && (e.keyCode === _CONST.keyCode.up || e.keyCode === _CONST.keyCode.down) - ) { - // At the case that the hint list is open ans user is walking thru the hints. - // Let's try to autocomplete the input by the selected input. - - var hint = input_autoComplt_list.getPicked(); - - if (e.keyCode === _CONST.keyCode.up) { - - if (!hint) { - // If none is selected, then pick the last hint - input_autoComplt_list.pick(-1); - } else if (hint.previousSibling) { - // If some hint is selected and the previous hint exists, then pick the previous hint - input_autoComplt_list.pick(hint.previousSibling); - } else { - // If some hint is selected but the previous hint doesn't exists, then unpick all - input_autoComplt_list.unpick(); - } - - } else if (e.keyCode === _CONST.keyCode.down) { - - if (!hint) { - // If none is selected, then pick the first hint - input_autoComplt_list.pick(0); - } else if (hint.nextSibling) { - // If some hint is selected and the next hint exists, then pick the next hint - input_autoComplt_list.pick(hint.nextSibling); - } else { - // If some hint is selected but the next hint doesn't exists, then unpick all - input_autoComplt_list.unpick(); - } - - } - - input_autoComplt_list.autoScroll(); - - input_autoComplt_compltInput(); - - } - else if (e.type == 'keyup') { - - var startFetching = false; - - switch (e.keyCode) { - case _CONST.keyCode.up: - case _CONST.keyCode.down: - if (input_autoComplt_list.isOpen()) { - // We have handled this 2 key codes onkeydown, so must do nothing here - } else { - startFetching = true; - } - break; - - case _CONST.keyCode.esc: - if (input_autoComplt_list.isOpen()) { - // When pressing the ESC key, let's resume back to the original user input - input.value = input_autoComplt_currentTarget; - input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); - } - break; - - case _CONST.keyCode.enter: - if (input_autoComplt_list.isOpen()) { - // When pressing the enter key, let's try autocomplete - input_autoComplt_compltInput(); - input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); - } - break; - - default: - startFetching = true; - break; - } - - if (startFetching) { - if (input.value.length > 0) { - input_autoComplt_startFetcher(); - } else { - input.autoComplt.close(); - } - } - } - } - }, - /* - */ - input_autoComplt_inputEvtHandleMobile = function(e) { - - if (_getAppropriateMode() === _CONST.modePC) return; // Let this::input_autoComplt_keyEvtHandle handle - - if (input.value.length > 0) { - input_autoComplt_startFetcher(); - } else { - input.autoComplt.close(); - } - }, - /* Arg: - name = Refer to _CONST.listenersSupported - */ - input_autoComplt_invokeListener = function(name) { - - if (input_autoComplt_listenerMap != null && typeof input_autoComplt_listenerMap[name] == 'function') { - - input_autoComplt_listenerMap[name].call(input); - } - }; - - input.autoComplt.setHintsFetcher = function(hintsFetcher) { - if (hintsFetcher === null || typeof hintsFetcher == 'function') { - input_autoComplt_hintsFetcher = hintsFetcher; - return true; - } - return false; - }; - - input.autoComplt.setListener = function(name, listener) { - - if ((listener === null || typeof listener == 'function') && _CONST.listenersSupported.indexOf(name) >= 0) { - - if (input_autoComplt_listenerMap == null) input_autoComplt_listenerMap = {}; - - input_autoComplt_listenerMap[name] = listener; - - return true; - } - - return false; - }; - - input.autoComplt.setStyles = function(targetClass, styles) { - - var tStyles, - adjStyleAttrs, - newStyles = false; - - // Let's find out which the target UI part is being set - switch (targetClass) { - case _CONST.autoCompltListClass: - tStyles = input_autoComplt_list.styles.autoCompltList; - adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltList; - break; - - case _CONST.autoCompltHintClass: - tStyles = input_autoComplt_list.styles.autoCompltHint; - adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltHint; - break; - - case _CONST.autoCompltHintSelectedClass: - tStyles = input_autoComplt_list.styles.autoCompltHintSelected; - adjStyleAttrs = _CONST.adjStyleAttrs.autoCompltHintSelected; - break; - } - - if (styles instanceof Object && tStyles && adjStyleAttrs) { - - for (var i = 0; i < adjStyleAttrs.length; i++) { - - if (typeof styles[adjStyleAttrs[i]] == 'string' || typeof styles[adjStyleAttrs[i]] == 'number') { // A simple type checking - if (!newStyles) { - newStyles = {}; - } - newStyles[adjStyleAttrs[i]] = tStyles[adjStyleAttrs[i]] = styles[adjStyleAttrs[i]]; - } - - } - - } - - return newStyles; - }; - - input.autoComplt.config = function(params) { - - var pms = false; - - if (params instanceof Object) { - - var buf; - - // Config the fetching delay timing - // - if (params.delay !== undefined && (buf = Math.floor(params.delay)) > 0) { - - if (!pms) pms = {}; - - input_autoComplt_delay = pms.delay = buf; - } - - // Config the max number of displayed hints - // - if (params.maxHintNum !== undefined && (buf = Math.floor(params.maxHintNum)) > 0) { - - if (!pms) pms = {}; - - input_autoComplt_list.maxHintNum = pms.maxHintNum = buf; - } - } - return pms; - }; - - input.autoComplt.close = function() { - - input_autoComplt_currentTarget = ''; // Closing means no need for autocomplete hint so no autocomplete target either - - input_autoComplt_list.close(); - - if (input_autoComplt_enabled - && input.value !== '' - && arguments[0] === _CONST.hiddenArg_close_list_n_make_final_selection - ) { - - input_autoComplt_invokeListener('select'); - } - }; - - input.autoComplt.enable = function() { - input_autoComplt_enabled = true; - }; - - input.autoComplt.disable = function() { - input_autoComplt_enabled = false; - this.close(); - }; - - input.autoComplt.destroy = function() { - _rmEvent(input, 'blur', input_autoComplt_blurEvtHandle); - _rmEvent(input, 'keyup', input_autoComplt_keyEvtHandle); - _rmEvent(input, 'keydown', input_autoComplt_keyEvtHandle); - this.disable(); - delete input.autoComplt; - }; - - input_autoComplt_list.onMouseSelectionListener = function() { - - input_autoComplt_compltInput(); - - input.autoComplt.close(_CONST.hiddenArg_close_list_n_make_final_selection); - }; - - _addEvt(input, 'blur', input_autoComplt_blurEvtHandle); - _addEvt(input, 'keyup', input_autoComplt_keyEvtHandle); - _addEvt(input, 'keydown', input_autoComplt_keyEvtHandle); - - _addEvt(input, 'input', input_autoComplt_inputEvtHandleMobile); - - if (params instanceof Object) { - input.autoComplt.config(params); - input.autoComplt.setHintsFetcher(params.hintsFetcher); - } - - return input; - } - return null; - } - - }; - - return publicProps; -}()); - -tinymce.PluginManager.add('modxlink', function(editor) { - function createLinkList(callback) - { - return function() { - var linkList = editor.settings.link_list; - - if (typeof linkList == 'string') { - tinymce.util.XHR.send({ - url: linkList, - success: function(text) { - callback(tinymce.util.JSON.parse(text)); - } - }); - } else if (typeof linkList == 'function') { - linkList(callback); - } else { - callback(linkList); - } - }; - } - - function buildListItems(inputList, itemCallback, startItems) - { - function appendItems(values, output) - { - output = output || []; - - tinymce.each(values, function(item) { - var menuItem = {text: item.text || item.title}; - - if (item.menu) { - menuItem.menu = appendItems(item.menu); - } else { - menuItem.value = item.value; - - if (itemCallback) { - itemCallback(menuItem); - } - } - - output.push(menuItem); - }); - - return output; - } - - return appendItems(inputList, startItems || []); - } - - function showDialog(linkList) - { - - if (parent.tree) { - parent.tree.ca = 'disabled'; // Disable Modx-TreeAction, resetted on onOk or OnCancel - checkModxTreeUpdate.call(this); // Watch Modx-Tree for changes and update URL-field - } - ; - - var data = {}, selection = editor.selection, dom = editor.dom, selectedElm, anchorElm, initialText; - var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; - - function linkListChangeHandler(e) - { - var textCtrl = win.find('#text'); - - if (!textCtrl.value() || (e.lastControl && textCtrl.value() == e.lastControl.text())) { - textCtrl.value(e.control.text()); - } - - win.find('#href').value(e.control.value()); - } - - function buildAnchorListControl(url) - { - var anchorList = []; - - tinymce.each(editor.dom.select('a:not([href])'), function(anchor) { - var id = anchor.name || anchor.id; - - if (id) { - anchorList.push({ - text: id, - value: '#' + id, - selected: url.indexOf('#' + id) != -1 - }); - } - }); - - if (anchorList.length) { - anchorList.unshift({text: 'None', value: ''}); - - return { - name: 'anchor', - type: 'listbox', - label: 'Anchors', - values: anchorList, - onselect: linkListChangeHandler - }; - } - } - - function updateText() - { - if (!initialText && data.text.length === 0 && onlyText) { - this.parent().parent().find('#text')[0].value(this.value()); - } - } - - function urlChange(e) - { - var meta = e.meta || {}; - - if (linkListCtrl) { - linkListCtrl.value(editor.convertURL(this.value(), 'href')); - } - - tinymce.each(e.meta, function(value, key) { - win.find('#' + key).value(value); - }); - - if (!meta.text) { - updateText.call(this); - } - } - - function isOnlyTextSelected(anchorElm) - { - var html = selection.getContent(); - - // Partial html and not a fully selected anchor element - if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') == -1)) { - return false; - } - - if (anchorElm) { - var nodes = anchorElm.childNodes, i; - - if (nodes.length === 0) { - return false; - } - - for (i = nodes.length - 1; i >= 0; i--) { - if (nodes[i].nodeType != 3) { - return false; - } - } - } - - return true; - } - - selectedElm = selection.getNode(); - anchorElm = dom.getParent(selectedElm, 'a[href]'); - onlyText = isOnlyTextSelected(); - - data.text = initialText = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({format: 'text'}); - data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; - - if (anchorElm) { - data.target = dom.getAttrib(anchorElm, 'target'); - } else if (editor.settings.default_link_target) { - data.target = editor.settings.default_link_target; - } - - if ((value = dom.getAttrib(anchorElm, 'rel'))) { - data.rel = value; - } - - if ((value = dom.getAttrib(anchorElm, 'class'))) { - data['class'] = value; - } - - if ((value = dom.getAttrib(anchorElm, 'title'))) { - data.title = value; - } - - if (onlyText) { - textListCtrl = { - name: 'text', - type: 'textbox', - size: 40, - label: 'Text to display', - id: 'text-to-display', - onchange: function() { - data.text = this.value(); - } - }; - } - - if (linkList) { - linkListCtrl = { - type: 'listbox', - label: 'Link list', - values: buildListItems( - linkList, - function(item) { - item.value = editor.convertURL(item.value || item.url, 'href'); - }, - [{text: 'None', value: ''}] - ), - onselect: linkListChangeHandler, - value: editor.convertURL(data.href, 'href'), - onPostRender: function() { - linkListCtrl = this; - } - }; - } - - if (editor.settings.target_list !== false) { - if (!editor.settings.target_list) { - editor.settings.target_list = [ - {text: 'None', value: ''}, - {text: 'New window', value: '_blank'} - ]; - } - - targetListCtrl = { - name: 'target', - type: 'listbox', - label: 'Target', - values: buildListItems(editor.settings.target_list) - }; - } - - if (editor.settings.rel_list) { - relListCtrl = { - name: 'rel', - type: 'listbox', - label: 'Rel', - values: buildListItems(editor.settings.rel_list) - }; - } - - if (editor.settings.link_class_list) { - classListCtrl = { - name: 'class', - type: 'listbox', - label: 'Class', - values: buildListItems( - editor.settings.link_class_list, - function(item) { - if (item.value) { - item.textStyle = function() { - return editor.formatter.getCssText({inline: 'a', classes: [item.value]}); - }; - } - } - ) - }; - } - - if (editor.settings.link_title !== false) { - linkTitleCtrl = { - name: 'title', - type: 'textbox', - label: 'Title', - value: data.title - }; - } - - win = editor.windowManager.open({ - title: 'Insert link', - data: data, - body: [ - { - name: 'href', - type: 'filepicker', - filetype: 'file', - size: 40, - autofocus: true, - label: 'Url', - id: 'link-href', - onchange: urlChange, - onkeyup: updateText - }, - { - name: 'search', - type: 'textbox', - label: 'Search in EVO', - id: 'link-search' - }, - textListCtrl, - linkTitleCtrl, - buildAnchorListControl(data.href), - linkListCtrl, - relListCtrl, - targetListCtrl, - classListCtrl - ], - onSubmit: function(e) { - /*eslint dot-notation: 0*/ - var href; - - data = tinymce.extend(data, e.data); - href = data.href; - - // Delay confirm since onSubmit will move focus - function delayedConfirm(message, callback) - { - var rng = editor.selection.getRng(); - - window.setTimeout(function() { - editor.windowManager.confirm(message, function(state) { - editor.selection.setRng(rng); - callback(state); - }); - }, 0); - } - - function insertLink() - { - - // Reset Modx-TreeAction - if (parent.tree) { - parent.tree.ca = ''; - clearTimeout(checkModxTreeUpdateInterval); - } - ; - - var linkAttrs = { - href: href, - target: data.target ? data.target : null, - rel: data.rel ? data.rel : null, - 'class': data['class'] ? data['class'] : null, - title: data.title ? data.title : null - }; - - if (anchorElm) { - editor.focus(); - - if (onlyText && data.text != initialText) { - if ('innerText' in anchorElm) { - anchorElm.innerText = data.text; - } else { - anchorElm.textContent = data.text; - } - } - - dom.setAttribs(anchorElm, linkAttrs); - - selection.select(anchorElm); - editor.undoManager.add(); - } else { - if (onlyText) { - editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(data.text))); - } else { - editor.execCommand('mceInsertLink', false, linkAttrs); - } - } - } - - if (!href) { - editor.execCommand('unlink'); - return; - } - - // Is email and not //user@domain.com - if (href.indexOf('@') > 0 && href.indexOf('//') == -1 && href.indexOf('mailto:') == -1) { - delayedConfirm( - 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', - function(state) { - if (state) { - href = 'mailto:' + href; - } - - insertLink(); - } - ); - - return; - } - - // Is not protocol prefixed - if ((editor.settings.link_assume_external_targets && !/^\w+:/i.test(href)) || - (!editor.settings.link_assume_external_targets && /^\s*www\./i.test(href))) { - delayedConfirm( - 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', - function(state) { - if (state) { - href = 'http://' + href; - } - - insertLink(); - } - ); - - return; - } - - insertLink(); - }, - onClose: function(e) { - // Reset Modx-TreeAction - if (parent.tree) { - parent.tree.ca = ''; - clearTimeout(checkModxTreeUpdateInterval); - } - ; - } - }); - - var input = document.querySelector('#link-search'), _resultDataset = {}; - autoComplt.enable(input, { - // the hintsFetcher is your customized function which searchs the proper autocomplete hints based on the user's input value. - hintsFetcher: function(v, openList) { - _resultDataset = {}; - var xhr = new XMLHttpRequest(), _link = encodeURI(tinymce4_baseUrl + 'tinymce/plugins/modxlink/search.php' + '?q=' + v); - xhr.open('GET', _link); - xhr.onload = function() { - if (xhr.status === 200) { - //alert(xhr.responseText); - var _results = JSON.parse(xhr.responseText), _e = []; - for (var i = 0; i < Object.keys(_results).length; i++) { - _resultDataset[_results[i].pagetitle] = _results[i]; - _e.push(_results[i].pagetitle); - } - openList(_e); - } else { - console.error('ajax error', _link); - } - }; - xhr.send(); - } - }); - input.autoComplt.setListener('select', function(e, r) { - var _a = document.querySelector('#link-href input'), _title = document.querySelector('#text-to-display'); - _a.value = '[~' + _resultDataset[this.value].id + '~]'; - if (_title.value == '') _title.value = _resultDataset[this.value].title; - }); - - } - - editor.addButton('link', { - icon: 'link', - tooltip: 'Insert/edit link', - shortcut: 'Meta+K', - onclick: createLinkList(showDialog), - stateSelector: 'a[href]' - }); - - editor.addButton('unlink', { - icon: 'unlink', - tooltip: 'Remove link', - cmd: 'unlink', - stateSelector: 'a[href]' - }); - - editor.addShortcut('Meta+K', '', createLinkList(showDialog)); - editor.addCommand('mceLink', createLinkList(showDialog)); - - this.showDialog = showDialog; - - editor.addMenuItem('link', { - icon: 'link', - text: 'Insert/edit link', - shortcut: 'Meta+K', - onclick: createLinkList(showDialog), - stateSelector: 'a[href]', - context: 'insert', - prependToContext: true - }); -}); \ No newline at end of file +if(typeof parent.modx!=='undefined' && typeof parent.modx.tree!=='undefined')var modxOldRessourceId=parent.modx.tree.itemToChange,modxLinkTitle="",checkModxTreeUpdateInterval=void 0,checkModxTreeUpdate=function(){checkModxTreeUpdateInterval=setTimeout(checkModxTreeUpdate,100),parent.modx.tree.itemToChange!=modxOldRessourceId&&(modxOldRessourceId=parent.modx.tree.itemToChange,modxLinkTitle=parent.modx.tree.selectedObjectName,document.getElementById("link-href-inp").value="[~"+modxOldRessourceId+"~]",document.getElementById("text-to-display").value||(document.getElementById("text-to-display").value=modxLinkTitle))};var autoComplt=function(){"use strict";Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){if(void 0===this||null===this)throw new TypeError('"this" is null or not defined');var n=this.length>>>0;for(e=+e||0,Math.abs(e)===1/0&&(e=0),e<0&&(e+=n)<0&&(e=0);e=0?o.modeMobile:function(){var t=-1;if("Microsoft Internet Explorer"==navigator.appName){var e=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(e)&&(t=+RegExp.$1)}return-1===t?NaN:t}()<=9?o.modePC:n().windowWidth>o.modeMobileW?o.modePC:o.modeMobile},n=function(){return window.innerWidth?{windowWidth:window.innerWidth,windowHeight:window.innerHeight}:document.documentElement.offsetHeight?{windowWidth:document.documentElement.offsetWidth,windowHeight:document.documentElement.offsetHeight}:document.body.offsetHeight?{windowWidth:document.body.offsetWidth,windowHeight:document.body.offsetHeight}:document.documentElement.clientHeight?{windowWidth:document.documentElement.clientWidth,windowHeight:document.documentElement.clientHeight}:document.body.clientHeight?{windowWidth:document.body.clientWidth,windowHeight:document.body.clientHeight}:{windowWidth:-1,windowHeight:-1}},o=(o=t={},t.modePC="modePC",t.modeMobile="modeMobile",t.modeMobileW=768,t.autoCompltListClass="autoComplt-list",t.autoCompltHintClass="autoComplt-hint",t.autoCompltHintSelectedClass="autoComplt-hint-selected",t.maxHintNum=e()===o.modePC?10:5,t.autoCompltDelay=250,t.hiddenArg_close_list_n_make_final_selection="hiddenArg_close_list_n_make_final_selection",t.listStatus={attr:"data-listStatus",open:"open"},t.keyCode={up:38,down:40,esc:27,enter:13},t.defaultStyles={autoCompltList:{maxHeight:"none",border:"1px solid #aaa",padding:"0",margin:"0",zIndex:99999,overflowX:"hidden",overflowY:"auto",display:"none",position:"absolute",backgroundColor:"#fff"},autoCompltHint:{height:"1.5em",padding:e()===o.modePC?"2px 6px 2px 10px":"6px 6px 6px 10px",margin:"6px 0",overflow:"hidden",listStyleType:"none",color:"#000",backgroundColor:"#fff",cursor:"default",fontSize:"1em"},autoCompltHintSelected:{color:"#fff",backgroundColor:"#3399ff"}},t.adjStyleAttrs={autoCompltList:["border","maxHeight","backgroundColor"],autoCompltHint:["height","padding","margin","color","backgroundColor","fontSize"],autoCompltHintSelected:["color","backgroundColor"]},t.listenersSupported=["select"],o),i=function(t){return t||(t=window.event),t.target||(t.target=t.srcElement),t.stopBubble=function(){this.cancelBubble=!0,this.stopPropagation&&this.stopPropagation()},t.stopDefault=function(){return this.preventDefault&&this.preventDefault(),this.returnValue=!1,!1},t},l=function(t,e,n){t.addEventListener?t.addEventListener(e,n):t.attachEvent&&t.attachEvent("on"+e,n)},a=function(t,e,n){t.removeEventListener?t.removeEventListener(e,n):t.detachEvent&&t.detachEvent("on"+e,n)},s=function(t,e){var n=null;if(window.getComputedStyle)n=window.getComputedStyle(t)[e]||null;else if(t.currentStyle){n=t.currentStyle&&t.currentStyle[e];var o,i,l=t.style;null==n&&l&&l[e]&&(n=l[e]),o=l.left,(i=t.runtimeStyle&&t.runtimeStyle.left)&&(t.runtimeStyle.left=t.currentStyle.left),l.left="fontSize"===e?"1em":n,n=l.pixelLeft+"px",l.left=o,i&&(t.runtimeStyle.left=i)}return n},r={buildElem:function(t){var e=document.createElement("DIV");return e.innerHTML=t,e.firstChild.cloneNode(!0)},buildHint:function(t,e){return"string"==typeof t&&t?((t=this.buildElem('
      • '+t+"
      • ")).style.height=t.style.lineHeight=e.autoCompltHint.height,t.style.padding=e.autoCompltHint.padding,t.style.margin=e.autoCompltHint.margin,t.style.overflow=e.autoCompltHint.overflow,t.style.listStyleType=e.autoCompltHint.listStyleType,t.style.color=e.autoCompltHint.color,t.style.backgroundColor=e.autoCompltHint.backgroundColor,t.style.cursor=e.autoCompltHint.cursor,t.style.fontSize=e.autoCompltHint.fontSize,t):null},buildList:function(t){var e=this.buildElem('
          ');return e.style.maxHeight=t.autoCompltList.maxHeight,e.style.border=t.autoCompltList.border,e.style.padding=t.autoCompltList.padding,e.style.margin=t.autoCompltList.margin,e.style.zIndex=t.autoCompltList.zIndex,e.style.overflowX=t.autoCompltList.overflowX,e.style.overflowY=t.autoCompltList.overflowY,e.style.display=t.autoCompltList.display,e.style.position=t.autoCompltList.position,e.style.backgroundColor=t.autoCompltList.backgroundColor,e}},u=function(t){this.uiElem=null,this.assocInput=t,this.mouseOnList=!1,this.onMouseSelectionListener=null,this.maxHintNum=o.maxHintNum,this.styles=JSON.parse(JSON.stringify(o.defaultStyles))};return u.prototype.genList=function(){if(!this.uiElem){var t=this;this.uiElem=r.buildList(this.styles),l(this.uiElem,"mouseover",function(e){e=i(e),t.isHint(e.target)&&(t.pick(e.target),t.autoScroll())}),l(this.uiElem,"mouseout",function(e){t.unpick()}),l(this.uiElem,"mousedown",function(e){t.mouseOnList=!0,setTimeout(function(){t.assocInput.focus()},50)}),l(this.uiElem,"mouseup",function(e){e=i(e),t.isHint(e.target)&&(t.pick(e.target),"function"==typeof t.onMouseSelectionListener&&t.onMouseSelectionListener())}),document.body.appendChild(this.uiElem)}},u.prototype.isHint=function(t){return!(!t||"object"!=typeof t||1!==t.nodeType)&&(" "+t.className+" ").indexOf(" "+o.autoCompltHintClass+" ")>=0},u.prototype.putHints=function(t){var e=0;if(t instanceof Array){var n,o,i=[];for(o=Math.min(t.length,this.maxHintNum),n=0;n0){var l=document.createDocumentFragment();for(n=0,e=i.length;n=0||-1===t)){var n=this.uiElem.querySelectorAll("."+o.autoCompltHintClass);n.length>0&&(e=n[e=-1===(e=+t)||e>n.length-1?n.length-1:e])}null!==e&&(this.unpick(),e.className+=" "+o.autoCompltHintSelectedClass,e.style.color=this.styles.autoCompltHintSelected.color,e.style.backgroundColor=this.styles.autoCompltHintSelected.backgroundColor)}},u.prototype.unpick=function(){if(this.uiElem){var t=this.getPicked();t&&(t.className=o.autoCompltHintClass,t.style.color=this.styles.autoCompltHint.color,t.style.backgroundColor=this.styles.autoCompltHint.backgroundColor)}},u.prototype.getPicked=function(){return this.uiElem&&this.uiElem.querySelector("."+o.autoCompltHintSelectedClass)||null},{enable:function(t,n){if(t&&"object"==typeof t&&"string"==typeof t.tagName&&"input"==t.tagName.toLowerCase()&&"text"==t.type&&1===t.nodeType&&!t.autoComplt){t.autoComplt={};var s=o.autoCompltDelay,r=!0,c="",d=null,m=null,p=new u(t),f=function(){if(t.value.length>0&&r&&"function"==typeof d&&c!==t.value){var e={that:t,compltTarget:c=t.value,compltTargetMatchCurrentTarget:function(){return e.compltTarget===c},call:function(){e.compltTargetMatchCurrentTarget()&&d.call(e.that,e.compltTarget,e.openHint)},openHint:function(t){e.compltTargetMatchCurrentTarget()&&(p.putHints(t)?p.open():e.that.autoComplt.close())}};setTimeout(e.call,s)}},h=function(){if(r){var e=p.getPicked();t.value=e?e.innerHTML:c}},g=function(e){p.mouseOnList?(t.focus(),p.mouseOnList=!1):p.isOpen()&&t.autoComplt.close(o.hiddenArg_close_list_n_make_final_selection)},y=function(n){if(e()!==o.modeMobile&&(n=i(n),r))if("keydown"!=n.type||!p.isOpen()||n.keyCode!==o.keyCode.up&&n.keyCode!==o.keyCode.down){if("keyup"==n.type){var l=!1;switch(n.keyCode){case o.keyCode.up:case o.keyCode.down:p.isOpen()||(l=!0);break;case o.keyCode.esc:p.isOpen()&&(t.value=c,t.autoComplt.close(o.hiddenArg_close_list_n_make_final_selection));break;case o.keyCode.enter:p.isOpen()&&(h(),t.autoComplt.close(o.hiddenArg_close_list_n_make_final_selection));break;default:l=!0}l&&(t.value.length>0?f():t.autoComplt.close())}}else{var a=p.getPicked();n.keyCode===o.keyCode.up?a?a.previousSibling?p.pick(a.previousSibling):p.unpick():p.pick(-1):n.keyCode===o.keyCode.down&&(a?a.nextSibling?p.pick(a.nextSibling):p.unpick():p.pick(0)),p.autoScroll(),h()}};return t.autoComplt.setHintsFetcher=function(t){return(null===t||"function"==typeof t)&&(d=t,!0)},t.autoComplt.setListener=function(t,e){return(null===e||"function"==typeof e)&&o.listenersSupported.indexOf(t)>=0&&(null==m&&(m={}),m[t]=e,!0)},t.autoComplt.setStyles=function(t,e){var n,i,l=!1;switch(t){case o.autoCompltListClass:n=p.styles.autoCompltList,i=o.adjStyleAttrs.autoCompltList;break;case o.autoCompltHintClass:n=p.styles.autoCompltHint,i=o.adjStyleAttrs.autoCompltHint;break;case o.autoCompltHintSelectedClass:n=p.styles.autoCompltHintSelected,i=o.adjStyleAttrs.autoCompltHintSelected}if(e instanceof Object&&n&&i)for(var a=0;a0&&(n||(n={}),s=n.delay=e),void 0!==t.maxHintNum&&(e=Math.floor(t.maxHintNum))>0&&(n||(n={}),p.maxHintNum=n.maxHintNum=e));return n},t.autoComplt.close=function(){var e;c="",p.close(),r&&""!==t.value&&arguments[0]===o.hiddenArg_close_list_n_make_final_selection&&(e="select",null!=m&&"function"==typeof m[e]&&m[e].call(t))},t.autoComplt.enable=function(){r=!0},t.autoComplt.disable=function(){r=!1,this.close()},t.autoComplt.destroy=function(){a(t,"blur",g),a(t,"keyup",y),a(t,"keydown",y),this.disable(),delete t.autoComplt},p.onMouseSelectionListener=function(){h(),t.autoComplt.close(o.hiddenArg_close_list_n_make_final_selection)},l(t,"blur",g),l(t,"keyup",y),l(t,"keydown",y),l(t,"input",function(n){e()!==o.modePC&&(t.value.length>0?f():t.autoComplt.close())}),n instanceof Object&&(t.autoComplt.config(n),t.autoComplt.setHintsFetcher(n.hintsFetcher)),t}return null}}}();tinymce.PluginManager.add("modxlink",function(t){function e(e){return function(){var n=t.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(t){e(tinymce.util.JSON.parse(t))}}):"function"==typeof n?n(e):e(n)}}function n(t,e,n){return function t(n,o){return o=o||[],tinymce.each(n,function(n){var i={text:n.text||n.title};n.menu?i.menu=t(n.menu):(i.value=n.value,e&&e(i)),o.push(i)}),o}(t,n||[])}function o(e){parent.tree&&(parent.tree.ca="disabled",checkModxTreeUpdate.call(this));var o,i,l,a,s,r,u,c,d,m,p,f,h={},g=t.selection,y=t.dom;function C(t){var e=a.find("#text");(!e.value()||t.lastControl&&e.value()==t.lastControl.text())&&e.value(t.control.text()),a.find("#href").value(t.control.value())}function v(){!l&&0===h.text.length&&s&&this.parent().parent().find("#text")[0].value(this.value())}o=g.getNode(),i=y.getParent(o,"a[href]"),s=function(t){var e=g.getContent();if(/]+>[^<]+<\/a>$/.test(e)||-1==e.indexOf("href=")))return!1;if(t){var n,o=t.childNodes;if(0===o.length)return!1;for(n=o.length-1;n>=0;n--)if(3!=o[n].nodeType)return!1}return!0}(),h.text=l=i?i.innerText||i.textContent:g.getContent({format:"text"}),h.href=i?y.getAttrib(i,"href"):"",i?h.target=y.getAttrib(i,"target"):t.settings.default_link_target&&(h.target=t.settings.default_link_target),(f=y.getAttrib(i,"rel"))&&(h.rel=f),(f=y.getAttrib(i,"class"))&&(h.class=f),(f=y.getAttrib(i,"title"))&&(h.title=f),s&&(r={name:"text",type:"textbox",size:40,label:"Text to display",id:"text-to-display",onchange:function(){h.text=this.value()}}),e&&(u={type:"listbox",label:"Link list",values:n(e,function(e){e.value=t.convertURL(e.value||e.url,"href")},[{text:"None",value:""}]),onselect:C,value:t.convertURL(h.href,"href"),onPostRender:function(){u=this}}),!1!==t.settings.target_list&&(t.settings.target_list||(t.settings.target_list=[{text:"None",value:""},{text:"New window",value:"_blank"}]),d={name:"target",type:"listbox",label:"Target",values:n(t.settings.target_list)}),t.settings.rel_list&&(c={name:"rel",type:"listbox",label:"Rel",values:n(t.settings.rel_list)}),t.settings.link_class_list&&(m={name:"class",type:"listbox",label:"Class",values:n(t.settings.link_class_list,function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({inline:"a",classes:[e.value]})})})}),!1!==t.settings.link_title&&(p={name:"title",type:"textbox",label:"Title",value:h.title}),a=t.windowManager.open({title:"Insert link",data:h,body:[{name:"href",type:"FileImagePicker",filetype:"file",size:40,autofocus:!0,label:"Url",id:"link-href",onchange:function(e){var n=e.meta||{};u&&u.value(t.convertURL(this.value(),"href")),tinymce.each(e.meta,function(t,e){a.find("#"+e).value(t)}),n.text||v.call(this)},onkeyup:v},{name:"search",type:"textbox",label:"Search in EVO",id:"link-search"},r,p,function(e){var n=[];if(tinymce.each(t.dom.select("a:not([href])"),function(t){var o=t.name||t.id;o&&n.push({text:o,value:"#"+o,selected:-1!=e.indexOf("#"+o)})}),n.length)return n.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:n,onselect:C}}(h.href),u,c,d,m],onSubmit:function(e){var n;function o(e,n){var o=t.selection.getRng();window.setTimeout(function(){t.windowManager.confirm(e,function(e){t.selection.setRng(o),n(e)})},0)}function a(){parent.tree&&(parent.tree.ca="",clearTimeout(checkModxTreeUpdateInterval));var e={href:n,target:h.target?h.target:null,rel:h.rel?h.rel:null,class:h.class?h.class:null,title:h.title?h.title:null};i?(t.focus(),s&&h.text!=l&&("innerText"in i?i.innerText=h.text:i.textContent=h.text),y.setAttribs(i,e),g.select(i),t.undoManager.add()):s?t.insertContent(y.createHTML("a",e,y.encode(h.text))):t.execCommand("mceInsertLink",!1,e)}h=tinymce.extend(h,e.data),(n=h.href)?n.indexOf("@")>0&&-1==n.indexOf("//")&&-1==n.indexOf("mailto:")?o("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(n="mailto:"+n),a()}):t.settings.link_assume_external_targets&&!/^\w+:/i.test(n)||!t.settings.link_assume_external_targets&&/^\s*www\./i.test(n)?o("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(n="http://"+n),a()}):a():t.execCommand("unlink")},onClose:function(t){parent.tree&&(parent.tree.ca="",clearTimeout(checkModxTreeUpdateInterval))}});var x=document.querySelector("#link-search"),b={};autoComplt.enable(x,{hintsFetcher:function(t,e){b={};var n=new XMLHttpRequest,o=encodeURI(tinymce4_baseUrl+"tinymce/plugins/modxlink/search.php?q="+t);n.open("GET",o),n.onload=function(){if(200===n.status){for(var t=JSON.parse(n.responseText),i=[],l=0;l',e.classes.add("has-open"),'
          '+t+"
          "}}))}); diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/content.inline.min.css b/assets/plugins/tinymce4/tinymce/skins/darkness/content.inline.min.css new file mode 100644 index 00000000..7b45d339 --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/content.inline.min.css @@ -0,0 +1 @@ +.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}.mce-content-body{line-height:1.3} \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/content.min.css b/assets/plugins/tinymce4/tinymce/skins/darkness/content.min.css new file mode 100644 index 00000000..25085d7c --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/content.min.css @@ -0,0 +1,2 @@ +body{border-color: #414449;background-color:#202329;color:#bbb;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2} +a{color: #3481bc;} \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/content.mobile.min.css b/assets/plugins/tinymce4/tinymce/skins/darkness/content.mobile.min.css new file mode 100644 index 00000000..e2fbaffa --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/content.mobile.min.css @@ -0,0 +1,20 @@ +.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { + position: absolute; + display: inline-block; + /* Note: this file is used inside the content, so isn't part of theming */ + background-color: green; + opacity: 0.5; +} + +body { + -webkit-text-size-adjust: none; +} + +body img { + /* this is related to the content margin */ + max-width: 96vw; +} + +body table img { + max-width: 95%; +} \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-mobile.woff b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-mobile.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e3be038a607cb7c2544ed8ae3d6621f77bf4c38 GIT binary patch literal 4624 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.ttf b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 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 literal 0 HcmV?d00001 diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.eot b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..f99c13f32f5c968849f08a3d8a399157bfb0cccb GIT binary patch literal 17572 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 S4xrR19F>Jx9kYDL=l=i@ywbP; literal 0 HcmV?d00001 diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.svg b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.svg new file mode 100644 index 00000000..5727cea4 --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.svg @@ -0,0 +1,131 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.ttf b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..16536bfd7a292e7090b9d4e0ae61061da9bc042f GIT binary patch literal 17408 zcmdsed3+pKo#%U1eW)dMt6P0kt97_r?e3O!v|4JFTDB#*Y}xXmC|2zFh=~(9w&DXH z@)bgc%oH|bf|&#_*9_SNi*Yh!0s%e?WH%x6nc4xe1Do*4hs`p;Ojtpd41$CYp8%7< zs!RL*y{eX4vK-Ns>n%b&QBjq``@%_j4P5!UD zFaL}&-T>EgaNp@kr283@#^6^RJo?_d@2`An0P)?7^?&@(#J&Snov{F8gRdjM_Ye}? zpL6swwq`lv%MTqpbMMck(EAbJg!X=O^u+#s-<|l$t&FYhNB-=wefLhX2iYeWTi1tp z{P@0O6IX5xIT1(u{KDjk(`PVFJVVoz&t!R)Ut-9YJ|(??l#f_G{{_o)58~wy$FLVa z8e_k_S2pGhrpa)~q_rqLaS@>2$Tc9(@?}w~fjM{->FZF>$t0x3r(34g*Q#Fgz1H?K zK2tGMH4~T#&os`o%(TvQ%&0R1Gizt|{rt(FfBqM}zxeFyM_zyN^_Sl`@`mxo?|ymj zTybtr^cJ6H)2*+u*SxQ_{*28q(MD*dVJ0ow$jz*rS%Ws7KpU!P+GlIe)jBZ0 z^7)Ga{Tp7Kam=QstSyPL!b;KfLi_KWhLxT(Fd&0DSOo(-@k9W>d?1NH9>KgK>$AFp znM~KYUSyi2ji|CQ%Vd2Hi83<{uBq^~IYY*e1+jx&XeX29$wad&90*17iSAxC(35sI zaV4qZ6%4tMmquDI@*+w&-^9c62Oo-#CCqrDvoj%0Cpr@wWQTM`c1d6LxQlVO$K&SH zjtYm#x%9h-qR5|}5=F-oV-d+EUy&U0?9)_C9(Q{m#vo0__Ady3tbZ2O|VQEJe*UW?al&uO>A%iH5(bkwN%ZyBRC>xH)%V`*e1 zU(8v0Bn4|yBAxY zDJZUp9qUbJoB$5-Pd29kG-?l(vHp30EC4p-DgcH7!rc*sQQj&^5LPO0l|*5yyj%XG z=384DwYexB^Zn-g$)D32TW)P0@Z}?`<1O2hEzRz=Yu(K)$?Yxi)seh!p!k|AP*oN6 zRo7KjH&$0yxSTG3RaKp@I$CYTA5N)i3XXRpUR77^i&j+yP^v=YN2`5xRaJfw|3A%1 zjkD7
          qE0fV3qg3i>lG;3uYEKk_jlWwzK&8|i)pG_^o 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 N%EGLUS-#`*e*qFO!Ds*g literal 0 HcmV?d00001 diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.woff b/assets/plugins/tinymce4/tinymce/skins/darkness/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..74b50f4c3001da7fdfffd8638213dcf1a396da78 GIT binary patch literal 17484 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 C+YCGa literal 0 HcmV?d00001 diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/img/loader.gif b/assets/plugins/tinymce4/tinymce/skins/darkness/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/img/object.gif b/assets/plugins/tinymce4/tinymce/skins/darkness/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#ccc;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1;transform:scale(1)}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#bbb} \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/skin.min.css b/assets/plugins/tinymce4/tinymce/skins/darkness/skin.min.css new file mode 100644 index 00000000..e246cef7 --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}/*# sourceMappingURL=skin.min.css.map */ \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/darkness/skin.mobile.min.css b/assets/plugins/tinymce4/tinymce/skins/darkness/skin.mobile.min.css new file mode 100644 index 00000000..e55a2c40 --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/darkness/skin.mobile.min.css @@ -0,0 +1,2 @@ +.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{-webkit-box-sizing:initial;box-sizing:initial;line-height:1;margin:0;padding:0;border:0;outline:0;text-shadow:none;float:none;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent}.tinymce-mobile-icon-arrow-back:before{content:"\e5cd"}.tinymce-mobile-icon-image:before{content:"\e412"}.tinymce-mobile-icon-cancel-circle:before{content:"\e5c9"}.tinymce-mobile-icon-full-dot:before{content:"\e061"}.tinymce-mobile-icon-align-center:before{content:"\e234"}.tinymce-mobile-icon-align-left:before{content:"\e236"}.tinymce-mobile-icon-align-right:before{content:"\e237"}.tinymce-mobile-icon-bold:before{content:"\e238"}.tinymce-mobile-icon-italic:before{content:"\e23f"}.tinymce-mobile-icon-unordered-list:before{content:"\e241"}.tinymce-mobile-icon-ordered-list:before{content:"\e242"}.tinymce-mobile-icon-font-size:before{content:"\e245"}.tinymce-mobile-icon-underline:before{content:"\e249"}.tinymce-mobile-icon-link:before{content:"\e157"}.tinymce-mobile-icon-unlink:before{content:"\eca2"}.tinymce-mobile-icon-color:before{content:"\e891"}.tinymce-mobile-icon-previous:before{content:"\e314"}.tinymce-mobile-icon-next:before{content:"\e315"}.tinymce-mobile-icon-large-font:before,.tinymce-mobile-icon-style-formats:before{content:"\e264"}.tinymce-mobile-icon-undo:before{content:"\e166"}.tinymce-mobile-icon-redo:before{content:"\e15a"}.tinymce-mobile-icon-removeformat:before{content:"\e239"}.tinymce-mobile-icon-small-font:before{content:"\e906"}.tinymce-mobile-icon-readonly-back:before,.tinymce-mobile-format-matches:after{content:"\e5ca"}.tinymce-mobile-icon-small-heading:before{content:"small"}.tinymce-mobile-icon-large-heading:before{content:"large"}.tinymce-mobile-icon-small-heading:before,.tinymce-mobile-icon-large-heading:before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon:before{content:"\e254"}.tinymce-mobile-icon-back:before{content:"\e5c4"}.tinymce-mobile-icon-heading:before{content:"Headings";font-family:sans-serif;font-weight:bold;font-size:80%}.tinymce-mobile-icon-h1:before{content:"H1";font-weight:bold}.tinymce-mobile-icon-h2:before{content:"H2";font-weight:bold}.tinymce-mobile-icon-h3:before{content:"H3";font-weight:bold}.tinymce-mobile-icon-edit:before{content:url(../icons/tinymce-logo2.svg);width:2em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;width:100%;height:100%;top:0;background:rgba(51,51,51,0.5)}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-border-radius:50%;border-radius:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-family:sans-serif;font-size:1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{-webkit-border-radius:50%;border-radius:50%;width:2.1em;height:2.1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{-webkit-border-radius:50%;border-radius:50%;width:2.1em;height:2.1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;color:#4682B4;background-color:white}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon:before{font-family:'tinymce-mobile';content:"\e900"}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{position:fixed;top:0;bottom:0;left:0;right:0;border:none;background:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:-webkit-box !important;display:-webkit-flex !important;display:-ms-flexbox !important;display:flex !important;height:auto !important;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#eceff1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;z-index:1;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;height:2.5em;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#4682B4;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-left:2px;margin-right:2px;height:80%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#455a64;color:#b1bec6}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-top:.4em;padding-bottom:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:relative;width:100%;min-height:1.5em;padding-left:0;padding-right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{-webkit-transition:left cubic-bezier(.4, 0, 1, 1) .15s;transition:left cubic-bezier(.4, 0, 1, 1) .15s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position:absolute;right:0;color:#888;font-size:.6em;font-weight:bold;background:inherit;-webkit-border-radius:50%;border-radius:50%;border:none;-webkit-align-self:center;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%;padding-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next:before{padding-left:.5em;padding-right:.5em;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-weight:bold}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled:before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{margin:0 2px;font-size:10px;line-height:10px;padding-top:3px;color:#b1bec6}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;padding:.28em 0;margin-left:10%;margin-right:10%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading:before{margin-right:.9em;margin-left:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading:before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{margin-left:0;margin-right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-top:.3em;margin-bottom:.3em;background:#b1bec6;height:.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-top:.3em;margin-bottom:.3em;background:-webkit-gradient(linear, left top, right top, color-stop(0, #f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00));background:-webkit-linear-gradient(left, #f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);background:linear-gradient(to right, #f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);height:.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:black;width:1.2em;height:.2em;margin-top:.3em;margin-bottom:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:white;width:1.2em;height:.2em;margin-top:.3em;margin-bottom:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position:absolute;height:.5em;width:.5em;left:-10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto;top:0;bottom:0;-webkit-transition:border 120ms cubic-bezier(.39, .58, .57, 1);transition:border 120ms cubic-bezier(.39, .58, .57, 1);background-color:#455a64;background-clip:padding-box;color:#eceff1;border:.5em solid rgba(136,136,136,0);-webkit-border-radius:3em;border-radius:3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,0.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top:.1em;padding-bottom:.1em;padding-left:5px;font-size:.85em;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background:#fff;border:none;-webkit-border-radius:0;border-radius:0;color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input:-ms-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-dropup{background:white;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;overflow:hidden}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{-webkit-transition:height .3s ease-out;transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-styles-menu{overflow:hidden;outline:4px solid black;position:relative;width:100%;font-family:sans-serif}.tinymce-mobile-styles-menu [role="menu"]{height:100%;position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.tinymce-mobile-styles-menu [role="menu"].transitioning{-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out, -webkit-transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{cursor:pointer;padding:1em 1em;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid #ddd;color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon:before{font-family:'tinymce-mobile';content:"\e314";color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu:after{font-family:'tinymce-mobile';content:"\e315";position:absolute;padding-left:1em;padding-right:1em;right:0;color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches:after{font-family:'tinymce-mobile';position:absolute;padding-left:1em;padding-right:1em;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser{border-top:#455a64;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#eceff1;color:#455a64}.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="before"]{-webkit-transform:translate(-100%);transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="current"]{-webkit-transform:translate(0);transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="after"]{-webkit-transform:translate(100%);transform:translate(100%)}@font-face{font-family:'tinymce-mobile';src:url('fonts/tinymce-mobile.woff?8x92w3') format('woff');font-weight:normal;font-style:normal}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:'tinymce-mobile'}.mixin-flex-and-centre{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.mixin-flex-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{overflow:hidden;height:300px}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position:fixed;right:2em;bottom:1em;color:white;background-color:#4682B4;-webkit-border-radius:50%;border-radius:50%;width:2.1em;height:2.1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}input[type="file"]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}} +/*# sourceMappingURL=skin.mobile.css.map */ \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/lightgray/content.min.css b/assets/plugins/tinymce4/tinymce/skins/lightgray/content.min.css index fe9bcdef..0fd2b9c1 100755 --- a/assets/plugins/tinymce4/tinymce/skins/lightgray/content.min.css +++ b/assets/plugins/tinymce4/tinymce/skins/lightgray/content.min.css @@ -1 +1 @@ -body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2} \ No newline at end of file +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2} diff --git a/assets/plugins/tinymce4/tinymce/skins/lightgray/content.mobile.min.css b/assets/plugins/tinymce4/tinymce/skins/lightgray/content.mobile.min.css new file mode 100644 index 00000000..e2fbaffa --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/skins/lightgray/content.mobile.min.css @@ -0,0 +1,20 @@ +.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection { + position: absolute; + display: inline-block; + /* Note: this file is used inside the content, so isn't part of theming */ + background-color: green; + opacity: 0.5; +} + +body { + -webkit-text-size-adjust: none; +} + +body img { + /* this is related to the content margin */ + max-width: 96vw; +} + +body table img { + max-width: 95%; +} \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/skins/lightgray/fonts/tinymce-mobile.woff b/assets/plugins/tinymce4/tinymce/skins/lightgray/fonts/tinymce-mobile.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e3be038a607cb7c2544ed8ae3d6621f77bf4c38 GIT binary patch literal 4624 zcmb7IeQaFC5#QN&AGUL{efE7g{=BM1W-|RaVdWQe^e?BC`eGz4^i8S3PQw?Hhd_eQHxTkckXZB zdzU((wCVGko!Qyh+1c6InRotvZ%+>+hNrBQtrFOI4t*}DZ$7=>Sr=uD3c$ZlKuKBQ z8~ervCczs9SOk2!>AAqrz+v$CC}f1JfYPDSqx->|V$6{ekbe8M#Bh3Gkg?)-Fdi3B zeB$}UFqn*$pv&q7*net~hsUOlfG7Ho2zaowY%JPRytMvu{&xRPm(h_~w##F>vqE&a5-ssH##mlfAk}44^ zXRJKd!Ifw&ce{$Y9BAg5c>e>p_Z;t!=P{izddGWie?aHLdKL3Cn9rG=d2vt;esWqH zoD}uAoi3Z~4+LABvADt+so4~t%VlyIJ{O3tm$NC+(!yenQD%NVr*btG$T3+_WX=LH z#1M2ZNEtrO+-x;l2i>M^5o%GQ@s?N+gw*19H@G~vl3Q5Zf*t6jjW0GOTmAmlWYgSS zJeiEo%~LA-FW|YAd_Em$OE#@dw)y*#@p!UtnWa);V1HY3ZBw!>(3gY{iFFa_c6iW9 zIQ@xck^{xu9_o;UyQH#ba@y?L$xW?8J35?$p1z46ZjIctZ8QCKCa29bMC1-t@pT>S zTUT1WMjQz-75d)5zJxv~@Yd)bY)ejQBx_XQiaMJ z>$5`NO3?L*ND{UQeF8%xl)$_>w9tmQpfEebzedazFeh#~d}suN+vzsqLiW~@TLhoe zk1%xEcxP2ZL)FuoXeYzb-J5goljDxPL2@@#RW)d&X#&6QO5U=04_628@ONSvtgpha zDqqmoVep`A4<+PK$V>K+T}}{8Rj+Q|UAzCtl!Fh)uXJg{x$}HMJH7LcBLzj-r{h;< zzote8Id%pcAyE;87D<8glyaFeq#k)OEDB%yA ze%CeZ!?4TEs#pj+%14DBZHn8jxaF2as6}p3+!6p-&@I>5lbP3&N$svcIF-`0R5(o2 zh7la++|;-euckH44a4BAwB++#-cZ z)kFyC=eUS-4D0t}H8LdZY!JD^sW@F85io)%=8HU)ouhEeo-K_dJ3BV+8fo0JXIjlP zZt0H`0=Yv~I|PpRZ)r5_iAYmY9V=wT@BsoN9<3vftB|}TOH;|yNk_e7(2-?y{&cSK zG=E5Nz^Ko4>KxcbY!Q13!=HBS$lM96_+0y3M1yWTAt2u5C;6MWMXbRN?RI{$eHnAx z&t=-PSjZ>Qe2V2-YGs1YWemAq zVHdG{9V$QvsY~Cgq-L*PZqMPGv|px$)K~3<%+fBtG{oIRPL_7ye$-(`C=tS)^xC}% zue73qiF&{nXJ*>-@668G!`IrAeB;ad09shzt{O?7omLE_X@H|#ozGt&64 zb-&_lLkZI8TzigPZvUr=4g2-8M6M8b9EQLgoPswYg)d)j&%gZHJO!2>(?;I*8d>aG z#oS295Kcq{uD4R2@VEG($}WWiF-6YK)kjqks%o_U{CIAVX2;tX7o|unkew5?Gn3(| zOePS^{$(;Xi4ph;`KO#;k+vaLt8n5@doi+OEvH&?*+3(WgqkT9-$b0fTHm;)r=NmR zJnJ9o>UvNR(JMoIdRBf{%kd}jmZ)b)#4>dnDfq0G(?~S%d zv50QeMR$Kzd*S$AEXdp5Fhqe0Pz zZ!oS2e!i-tWEJ2^YoVo}V7S0tV7CujimbVJtVNb#yB&<-f&xpSb@m2=wBZ|qU-_^; z?C{lk+;tlxk&Sh3Pwh(D7~kNh`O=~TMWuRUu^0=9)`CYEVwhvGWUt4Wd3`6*H)Zs>LLYQcC#*~B78EfTt7RQ*l)b{v zqntLNsC`h&zZCY{x*}gfPU4at;nfileU3>zeyLdO7;;lFIft~ zsm6#wb5Jjtv;_VxleU0<%cQON-O*ywHt`@C4fn-Y83}=|hJPOpN>1H%C#7)9etg_yG)$.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#eceff1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;z-index:1;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;height:2.5em;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#4682B4;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-left:2px;margin-right:2px;height:80%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#455a64;color:#b1bec6}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding-top:.4em;padding-bottom:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:relative;width:100%;min-height:1.5em;padding-left:0;padding-right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{-webkit-transition:left cubic-bezier(.4, 0, 1, 1) .15s;transition:left cubic-bezier(.4, 0, 1, 1) .15s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position:absolute;right:0;color:#888;font-size:.6em;font-weight:bold;background:inherit;-webkit-border-radius:50%;border-radius:50%;border:none;-webkit-align-self:center;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%;padding-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next:before{padding-left:.5em;padding-right:.5em;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-weight:bold}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled:before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{margin:0 2px;font-size:10px;line-height:10px;padding-top:3px;color:#b1bec6}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;padding:.28em 0;margin-left:10%;margin-right:10%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading:before{margin-right:.9em;margin-left:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font:before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading:before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{margin-left:0;margin-right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-top:.3em;margin-bottom:.3em;background:#b1bec6;height:.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-top:.3em;margin-bottom:.3em;background:-webkit-gradient(linear, left top, right top, color-stop(0, #f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(83%, #f0f), to(#f00));background:-webkit-linear-gradient(left, #f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);background:linear-gradient(to right, #f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);height:.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:black;width:1.2em;height:.2em;margin-top:.3em;margin-bottom:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:white;width:1.2em;height:.2em;margin-top:.3em;margin-bottom:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position:absolute;height:.5em;width:.5em;left:-10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto;top:0;bottom:0;-webkit-transition:border 120ms cubic-bezier(.39, .58, .57, 1);transition:border 120ms cubic-bezier(.39, .58, .57, 1);background-color:#455a64;background-clip:padding-box;color:#eceff1;border:.5em solid rgba(136,136,136,0);-webkit-border-radius:3em;border-radius:3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,0.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top:.1em;padding-bottom:.1em;padding-left:5px;font-size:.85em;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background:#fff;border:none;-webkit-border-radius:0;border-radius:0;color:#455a64}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input:-ms-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-dropup{background:white;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;overflow:hidden}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{-webkit-transition:height .3s ease-out;transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tinymce-mobile-styles-menu{overflow:hidden;outline:4px solid black;position:relative;width:100%;font-family:sans-serif}.tinymce-mobile-styles-menu [role="menu"]{height:100%;position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.tinymce-mobile-styles-menu [role="menu"].transitioning{-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out, -webkit-transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{cursor:pointer;padding:1em 1em;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid #ddd;color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon:before{font-family:'tinymce-mobile';content:"\e314";color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu:after{font-family:'tinymce-mobile';content:"\e315";position:absolute;padding-left:1em;padding-right:1em;right:0;color:#455a64}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches:after{font-family:'tinymce-mobile';position:absolute;padding-left:1em;padding-right:1em;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser{border-top:#455a64;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#eceff1;color:#455a64}.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="before"]{-webkit-transform:translate(-100%);transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="current"]{-webkit-transform:translate(0);transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state="after"]{-webkit-transform:translate(100%);transform:translate(100%)}@font-face{font-family:'tinymce-mobile';src:url('fonts/tinymce-mobile.woff?8x92w3') format('woff');font-weight:normal;font-style:normal}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:'tinymce-mobile'}.mixin-flex-and-centre{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.mixin-flex-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{overflow:hidden;height:300px}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position:fixed;right:2em;bottom:1em;color:white;background-color:#4682B4;-webkit-border-radius:50%;border-radius:50%;width:2.1em;height:2.1em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}input[type="file"]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}} +/*# sourceMappingURL=skin.mobile.css.map */ \ No newline at end of file diff --git a/assets/plugins/tinymce4/tinymce/themes/mobile/theme.min.js b/assets/plugins/tinymce4/tinymce/themes/mobile/theme.min.js new file mode 100644 index 00000000..e1fe175f --- /dev/null +++ b/assets/plugins/tinymce4/tinymce/themes/mobile/theme.min.js @@ -0,0 +1,8 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e1)throw d.error("HTML does not have a single root node",a),"HTML must have a single root node";return i(f.childNodes[0])},g=function(a,b){var c=b||e,d=c.createElement(a);return i(d)},h=function(a,b){var c=b||e,d=c.createTextNode(a);return i(d)},i=function(b){if(null===b||void 0===b)throw new c("Node cannot be null or undefined");return{dom:a.constant(b)}},j=function(a,c,d){return b.from(a.dom().elementFromPoint(c,d)).map(i)};return{fromHtml:f,fromTag:g,fromText:h,fromDom:i,fromPoint:j}}),g("1d",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g("2r",["y","z","a","1d","v","1b"],function(a,b,c,d,e,f){var g=d.ELEMENT,h=d.DOCUMENT,i=function(a,b){var c=a.dom();if(c.nodeType!==g)return!1;if(void 0!==c.matches)return c.matches(b);if(void 0!==c.msMatchesSelector)return c.msMatchesSelector(b);if(void 0!==c.webkitMatchesSelector)return c.webkitMatchesSelector(b);if(void 0!==c.mozMatchesSelector)return c.mozMatchesSelector(b);throw new e("Browser lacks native selectors")},j=function(a){return a.nodeType!==g&&a.nodeType!==h||0===a.childElementCount},k=function(b,d){var e=void 0===d?f:d.dom();return j(e)?[]:a.map(e.querySelectorAll(b),c.fromDom)},l=function(a,d){var e=void 0===d?f:d.dom();return j(e)?b.none():b.from(e.querySelector(a)).map(c.fromDom)};return{all:k,is:i,one:l}}),g("1a",["y","6","2q","7","2r"],function(a,b,c,d,e){var f=function(a,b){return a.dom()===b.dom()},g=function(a,b){return a.dom().isEqualNode(b.dom())},h=function(c,d){return a.exists(d,b.curry(f,c))},i=function(a,b){var c=a.dom(),d=b.dom();return c!==d&&c.contains(d)},j=function(a,b){return c.documentPositionContainedBy(a.dom(),b.dom())},k=d.detect().browser,l=k.isIE()?j:i;return{eq:f,isEqualNode:g,member:h,contains:l,is:e.is}}),g("43",["1a"],function(a){var b=function(b,c){return a.eq(b.element(),c.event().target())};return{isSource:b}}),g("2g",["6"],function(a){return{contextmenu:a.constant("contextmenu"),touchstart:a.constant("touchstart"),touchmove:a.constant("touchmove"),touchend:a.constant("touchend"),gesturestart:a.constant("gesturestart"),mousedown:a.constant("mousedown"),mousemove:a.constant("mousemove"),mouseout:a.constant("mouseout"),mouseup:a.constant("mouseup"),mouseover:a.constant("mouseover"),focusin:a.constant("focusin"),keydown:a.constant("keydown"),input:a.constant("input"),change:a.constant("change"),focus:a.constant("focus"),click:a.constant("click"),transitionend:a.constant("transitionend"),selectstart:a.constant("selectstart")}}),g("t",["2g","6","7"],function(a,b,c){var d={tap:b.constant("alloy.tap")};return{focus:b.constant("alloy.focus"),postBlur:b.constant("alloy.blur.post"),receive:b.constant("alloy.receive"),execute:b.constant("alloy.execute"),focusItem:b.constant("alloy.focus.item"),tap:d.tap,tapOrClick:c.detect().deviceType.isTouch()?d.tap:a.click,longpress:b.constant("alloy.longpress"),sandboxClose:b.constant("alloy.sandbox.close"),systemInit:b.constant("alloy.system.init"),windowScroll:b.constant("alloy.system.scroll"),attachedToDom:b.constant("alloy.system.attached"),detachedFromDom:b.constant("alloy.system.detached"),changeTab:b.constant("alloy.change.tab"),dismissTab:b.constant("alloy.dismiss.tab")}}),g("1i",["u","2m"],function(a,b){var c=function(c){if(null===c)return"null";var d=typeof c;return"object"===d&&a.prototype.isPrototypeOf(c)?"array":"object"===d&&b.prototype.isPrototypeOf(c)?"string":d},d=function(a){return function(b){return c(b)===a}};return{isString:d("string"),isObject:d("object"),isArray:d("array"),isNull:d("null"),isBoolean:d("boolean"),isUndefined:d("undefined"),isFunction:d("function"),isNumber:d("number")}}),g("w",["1i","u","v"],function(a,b,c){var d=function(a,b){return b},e=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?g(b,c):c},f=function(a){return function(){for(var d=new b(arguments.length),e=0;e0?g(c.errors):f(c.values,b)},i=function(a){var b=e.partition(a);return b.errors.length>0?g(b.errors):d.value(b.values)};return{consolidateObj:h,consolidateArr:i}}),g("2b",["y","x"],function(a,b){var c=function(b,c){var d={};return a.each(c,function(a){void 0!==b[a]&&b.hasOwnProperty(a)&&(d[a]=b[a])}),d},d=function(b,c){var d={};return a.each(b,function(a){var b=a[c];d[b]=a}),d},e=function(c,d){var e={};return b.each(c,function(b,c){a.contains(d,c)||(e[c]=b)}),e};return{narrow:c,exclude:e,indexOnKey:d}}),g("2c",["z"],function(a){var b=function(b){return function(c){return c.hasOwnProperty(b)?a.from(c[b]):a.none()}},c=function(a,c){return function(d){return b(a)(d).getOr(c)}},d=function(a,c){return b(c)(a)},e=function(a,b){return a.hasOwnProperty(b)&&void 0!==a[b]&&null!==a[b]};return{readOpt:b,readOr:c,readOptFrom:d,hasKey:e}}),g("2d",["y"],function(a){var b=function(a,b){var c={};return c[a]=b,c},c=function(b){var c={};return a.each(b,function(a){c[a.key]=a.value}),c};return{wrap:b,wrapAll:c}}),g("14",["2a","2b","2c","2d"],function(a,b,c,d){var e=function(a,c){return b.narrow(a,c)},f=function(a,c){return b.exclude(a,c)},g=function(a){return c.readOpt(a)},h=function(a,b){return c.readOr(a,b)},i=function(a,b){return c.readOptFrom(a,b)},j=function(a,b){return d.wrap(a,b)},k=function(a){return d.wrapAll(a)},l=function(a,c){return b.indexOnKey(a,c)},m=function(b,c){return a.consolidateObj(b,c)},n=function(a,b){return c.hasKey(a,b)};return{narrow:e,exclude:f,readOpt:g,readOr:h,readOptFrom:i,wrap:j,wrapAll:k,indexOnKey:l,hasKey:n,consolidate:m}}),g("6n",["4m"],function(a){var b=function(){return a.getOrDie("JSON")},c=function(a){return b().parse(a)},d=function(a,c,d){return b().stringify(a,c,d)};return{parse:c,stringify:d}}),g("4f",["y","x","1i","6n"],function(a,b,c,d){var e=function(a){return c.isObject(a)&&b.keys(a).length>100?" removed due to size":d.stringify(a,null,2)},f=function(b){var c=b.length>10?b.slice(0,10).concat([{path:[],getErrorInfo:function(){return"... (only showing first ten failures)"}}]):b;return a.map(c,function(a){return"Failed path: ("+a.path.join(" > ")+")\n"+a.getErrorInfo()})};return{formatObj:e,formatErrors:f}}),g("6l",["4f","48"],function(a,b){var c=function(a,c){return b.error([{path:a,getErrorInfo:c}])},d=function(b,d,e){return c(b,function(){return'Could not find valid *strict* value for "'+d+'" in '+a.formatObj(e)})},e=function(a,b){return c(a,function(){return'Choice schema did not contain choice key: "'+b+'"'})},f=function(b,d,e){return c(b,function(){return'The chosen schema: "'+e+'" did not exist in branches: '+a.formatObj(d)})},g=function(a,b){return c(a,function(){return"There are unsupported fields: ["+b.join(", ")+"] specified"})},h=function(a,b){return c(a,function(){return b})},i=function(a){return"Failed path: ("+a.path.join(" > ")+")\n"+a.getErrorInfo()};return{missingStrict:d,missingKey:e,missingBranch:f,unsupportedFields:g,custom:h,toString:i}}),g("6m",["6k"],function(a){var b=a.generate([{setOf:["validator","valueType"]},{arrOf:["valueType"]},{objOf:["fields"]},{itemOf:["validator"]},{choiceOf:["key","branches"]}]),c=a.generate([{field:["name","presence","type"]},{state:["name"]}]);return{typeAdt:b,fieldAdt:c}}),g("4d",["4c","14","2a","2c","2d","6l","6m","6k","y","6","w","x","z","48","1i"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=h.generate([{field:["key","okey","presence","prop"]},{state:["okey","instantiator"]}]),q=function(a,b){return p.state(a,j.constant(b))},r=function(a){return p.state(a,j.identity)},s=function(a,b,c){return d.readOptFrom(b,c).fold(function(){return f.missingStrict(a,c,b)},n.value)},t=function(a,b,c){var e=d.readOptFrom(a,b).fold(function(){return c(a)},j.identity);return n.value(e)},u=function(a,b){return n.value(d.readOptFrom(a,b))},v=function(a,b,c){var e=d.readOptFrom(a,b).map(function(b){return b===!0?c(a):b});return n.value(e)},w=function(a,b,c,d){return c.fold(function(c,f,g,h){var i=function(b){return h.extract(a.concat([c]),d,b).map(function(a){return e.wrap(f,d(a))})},l=function(b){return b.fold(function(){var a=e.wrap(f,d(m.none()));return n.value(a)},function(b){return h.extract(a.concat([c]),d,b).map(function(a){return e.wrap(f,d(m.some(a)))})})};return function(){return g.fold(function(){return s(a,b,c).bind(i)},function(a){return t(b,c,a).bind(i)},function(){return u(b,c).bind(l)},function(a){return v(b,c,a).bind(l)},function(a){var d=a(b);return t(b,c,j.constant({})).map(function(a){return k.deepMerge(d,a)}).bind(i)})}()},function(a,c){var f=c(b);return n.value(e.wrap(a,d(f)))})},x=function(a,b,d,e){var f=i.map(d,function(c){return w(a,b,c,e)});return c.consolidateObj(f,{})},y=function(a){var b=function(b,c,d){return a(d).fold(function(a){return f.custom(b,a)},n.value)},c=function(){return"val"},d=function(){return g.typeAdt.itemOf(a)};return{extract:b,toString:c,toDsl:d}},z=function(a){var c=l.keys(a);return i.filter(c,function(c){return b.hasKey(a,c)})},A=function(a){var c=B(a),d=i.foldr(a,function(a,c){return c.fold(function(c){return k.deepMerge(a,b.wrap(c,!0))},j.constant(a))},{}),e=function(a,e,g){var h=o.isBoolean(g)?[]:z(g),j=i.filter(h,function(a){return!b.hasKey(d,a)});return 0===j.length?c.extract(a,e,g):f.unsupportedFields(a,j)};return{extract:e,toString:c.toString,toDsl:c.toDsl}},B=function(a){var b=function(b,c,d){return x(b,d,a,c)},c=function(){var b=i.map(a,function(a){return a.fold(function(a,b,c,d){return a+" -> "+d.toString()},function(a,b){return"state("+a+")"})});return"obj{\n"+b.join("\n")+"}"},d=function(){return g.typeAdt.objOf(i.map(a,function(a){return a.fold(function(a,b,c,d){return g.fieldAdt.field(a,c,d)},function(a,b){return g.fieldAdt.state(a)})}))};return{extract:b,toString:c,toDsl:d}},C=function(a){var b=function(b,d,e){var f=i.map(e,function(c,e){return a.extract(b.concat(["["+e+"]"]),d,c)});return c.consolidateArr(f)},d=function(){return"array("+a.toString()+")"},e=function(){return g.typeAdt.arrOf(a)};return{extract:b,toString:d,toDsl:e}},D=function(b,c){var d=function(a,c){return C(y(b)).extract(a,j.identity,c)},e=function(b,e,f){var g=l.keys(f);return d(b,g).bind(function(d){var g=i.map(d,function(b){return p.field(b,b,a.strict(),c)});return B(g).extract(b,e,f)})},f=function(){return"setOf("+c.toString()+")"},h=function(){return g.typeAdt.setOf(b,c)};return{extract:e,toString:f,toDsl:h}},E=y(n.value),F=j.compose(C,B);return{anyValue:j.constant(E),value:y,obj:B,objOnly:A,arr:C,setOf:D,arrOfObj:F,state:p.state,field:p.field,output:q,snapshot:r}}),g("29",["4c","4d","48","1i"],function(a,b,c,d){var e=function(c){return b.field(c,c,a.strict(),b.anyValue())},f=function(c,d){return b.field(c,c,a.strict(),d)},g=function(e){return b.field(e,e,a.strict(),b.value(function(a){return d.isFunction(a)?c.value(a):c.error("Not a function")}))},h=function(d,e){return b.field(d,d,a.asOption(),b.value(function(a){return c.error("The field: "+d+" is forbidden. "+e)}))},i=function(a,b){return f(a,b)},j=function(c,d){return b.field(c,c,a.strict(),b.obj(d))},k=function(c,d){return b.field(c,c,a.strict(),b.arrOfObj(d))},l=function(c){return b.field(c,c,a.asOption(),b.anyValue())},m=function(c,d){return b.field(c,c,a.asOption(),d)},n=function(c,d){return b.field(c,c,a.asOption(),b.obj(d))},o=function(c,d){return b.field(c,c,a.asOption(),b.objOnly(d))},p=function(c,d){return b.field(c,c,a.defaulted(d),b.anyValue())},q=function(c,d,e){return b.field(c,c,a.defaulted(d),e)},r=function(c,d,e){return b.field(c,c,a.defaulted(d),b.obj(e))},s=function(a,c,d,e){return b.field(a,c,d,e)},t=function(a,c){return b.state(a,c)};return{strict:e,strictOf:f,strictObjOf:j,strictArrayOf:i,strictArrayOfObj:k,strictFunction:g,forbid:h,option:l,optionOf:m,optionObjOf:n,optionObjOfOnly:o,defaulted:p,defaultedOf:q,defaultedObjOf:r,field:s,state:t}}),g("4e",["14","6l","4d","6m","x"],function(a,b,c,d,e){var f=function(d,e,f,g,h){var i=a.readOptFrom(g,h);return i.fold(function(){return b.missingBranch(d,g,h)},function(a){return c.obj(a).extract(d.concat(["branch: "+h]),e,f)})},g=function(c,g){var h=function(d,e,h){var i=a.readOptFrom(h,c);return i.fold(function(){return b.missingKey(d,c)},function(a){return f(d,e,h,g,a)})},i=function(){return"chooseOn("+c+"). Possible values: "+e.keys(g)},j=function(){return d.typeAdt.choiceOf(c,g)};return{extract:h,toString:i,toDsl:j}};return{choose:g}}),g("2e",["4e","4d","4f","6","48","v"],function(a,b,c,d,e,f){var g=b.value(e.value),h=function(a){return b.arrOfObj(a)},i=function(){return b.arr(g)},j=b.arr,k=b.obj,l=b.objOnly,m=b.setOf,n=function(a){return b.value(a)},o=function(a,b,c,d){return b.extract([a],c,d).fold(function(a){return e.error({input:d,errors:a})},e.value)},p=function(a,b,c){return o(a,b,d.constant,c)},q=function(a,b,c){return o(a,b,d.identity,c)},r=function(a){return a.fold(function(a){throw new f(u(a))},d.identity)},s=function(a,b,c){return r(q(a,b,c))},t=function(a,b,c){return r(p(a,b,c))},u=function(a){return"Errors: \n"+c.formatErrors(a.errors)+"\n\nInput object: "+c.formatObj(a.input)},v=function(b,c){return a.choose(b,c)};return{anyValue:d.constant(g),arrOfObj:h,arrOf:j,arrOfVal:i,valueOf:n,setOf:m,objOf:k,objOfOnly:l,asStruct:p,asRaw:q,asStructOrDie:t,asRawOrDie:s,getOrDie:r,formatError:u,choose:v}}),g("47",["29","14","2e","1i","y","6n","6","u","v"],function(a,b,c,d,e,f,g,h,i){var j=function(d){if(!b.hasKey(d,"can")&&!b.hasKey(d,"abort")&&!b.hasKey(d,"run"))throw new i("EventHandler defined by: "+f.stringify(d,null,2)+" does not have can, abort, or run!");return c.asRawOrDie("Extracting event.handler",c.objOfOnly([a.defaulted("can",g.constant(!0)),a.defaulted("abort",g.constant(!1)),a.defaulted("run",g.noop)]),d)},k=function(a,b){return function(){var c=h.prototype.slice.call(arguments,0);return e.foldl(a,function(a,d){return a&&b(d).apply(void 0,c)},!0)}},l=function(a,b){ +return function(){var c=h.prototype.slice.call(arguments,0);return e.foldl(a,function(a,d){return a||b(d).apply(void 0,c)},!1)}},m=function(a){return d.isFunction(a)?{can:g.constant(!0),abort:g.constant(!1),run:a}:a},n=function(a){var b=k(a,function(a){return a.can}),c=l(a,function(a){return a.abort}),d=function(){var b=h.prototype.slice.call(arguments,0);e.each(a,function(a){a.run.apply(void 0,b)})};return j({can:b,abort:c,run:d})};return{read:m,fuse:n,nu:j}}),g("3d",["43","2","t","47","14"],function(a,b,c,d,e){var f=e.wrapAll,g=function(a,b){return{key:a,value:d.nu({abort:b})}},h=function(a,b){return{key:a,value:d.nu({can:b})}},i=function(a){return{key:a,value:d.nu({run:function(a,b){b.event().prevent()}})}},j=function(a,b){return{key:a,value:d.nu({run:b})}},k=function(a,b,c){return{key:a,value:d.nu({run:function(a){b.apply(void 0,[a].concat(c))}})}},l=function(a){return function(b){return j(a,b)}},m=function(b){return function(c){return{key:b,value:d.nu({run:function(b,d){a.isSource(b,d)&&c(b,d)}})}}},n=function(a,c){return j(a,function(d,e){d.getSystem().getByUid(c).each(function(c){b.dispatchEvent(c,c.element(),a,e)})})},o=function(a,b,c){var d=b.partUids()[c];return n(a,d)},p=function(a,b){return j(a,function(a,c){a.getSystem().getByDom(c.event().target()).each(function(d){b(a,d,c)})})},q=function(a){return j(a,function(a,b){b.cut()})},r=function(a){return j(a,function(a,b){b.stop()})};return{derive:f,run:j,preventDefault:i,runActionExtra:k,runOnAttached:m(c.attachedToDom()),runOnDetached:m(c.detachedFromDom()),runOnInit:m(c.systemInit()),runOnExecute:l(c.execute()),redirectToUid:n,redirectToPart:o,runWithTarget:p,abort:g,can:h,cutter:q,stopper:r}}),g("4a",["z"],function(a){var b=function(a,b,c){return a},c=function(a,b){return a},d=function(a,b){return a},e=a.none;return{markAsBehaviourApi:b,markAsExtraApi:c,markAsSketchApi:d,getAnnotation:e}}),g("4k",["y","6","u","v"],function(a,b,c,d){return function(){var e=arguments;return function(){for(var f=new c(arguments.length),g=0;g0&&e.unsuppMessage(m);var n={};return a.each(h,function(a){n[a]=b.constant(f[a])}),a.each(i,function(a){n[a]=b.constant(g.prototype.hasOwnProperty.call(f,a)?d.some(f[a]):d.none())}),n}}}),g("2o",["4k","4l"],function(a,b){return{immutable:a,immutableBag:b}}),g("6o",["6n","2o","2m"],function(a,b,c){var d=b.immutableBag(["tag"],["classes","attributes","styles","value","innerHtml","domChildren","defChildren"]),e=function(b){var c=f(b);return a.stringify(c,null,2)},f=function(a){return{tag:a.tag(),classes:a.classes().getOr([]),attributes:a.attributes().getOr({}),styles:a.styles().getOr({}),value:a.value().getOr(""),innerHtml:a.innerHtml().getOr(""),defChildren:a.defChildren().getOr(""),domChildren:a.domChildren().fold(function(){return""},function(a){return 0===a.length?"0 children, but still specified":c(a.length)})}};return{nu:d,defToStr:e,defToRaw:f}}),g("4b",["6o","14","y","x","w","6n","2o"],function(a,b,c,d,e,f,g){var h=["classes","attributes","styles","value","innerHtml","defChildren","domChildren"],i=g.immutableBag([],h),j=function(a){var b={},e=d.keys(a);return c.each(e,function(c){a[c].each(function(a){b[c]=a})}),i(b)},k=function(a){var b=l(a);return f.stringify(b,null,2)},l=function(a){return{classes:a.classes().getOr(""),attributes:a.attributes().getOr(""),styles:a.styles().getOr(""),value:a.value().getOr(""),innerHtml:a.innerHtml().getOr(""),defChildren:a.defChildren().getOr(""),domChildren:a.domChildren().fold(function(){return""},function(a){return 0===a.length?"0 children, but still specified":String(a.length)})}},m=function(a,c,d){return c.fold(function(){return d.fold(function(){return{}},function(c){return b.wrap(a,c)})},function(c){return d.fold(function(){return b.wrap(a,c)},function(c){return b.wrap(a,c)})})},n=function(c,d){var f=e.deepMerge({tag:c.tag(),classes:d.classes().getOr([]).concat(c.classes().getOr([])),attributes:e.merge(c.attributes().getOr({}),d.attributes().getOr({})),styles:e.merge(c.styles().getOr({}),d.styles().getOr({}))},d.innerHtml().or(c.innerHtml()).map(function(a){return b.wrap("innerHtml",a)}).getOr({}),m("domChildren",d.domChildren(),c.domChildren()),m("defChildren",d.defChildren(),c.defChildren()),d.value().or(c.value()).map(function(a){return b.wrap("value",a)}).getOr({}));return a.nu(f)};return{nu:i,derive:j,merge:n,modToStr:k,modToRaw:l}}),g("27",["3d","4a","4b","29","14","2e","6","w","x","z","17","u","16","v"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=function(b,c,d){return a.runOnExecute(function(a){d(a,b,c)})},p=function(b,c,d){return a.runOnInit(function(a,e){d(a,b,c)})},q=function(a,b,c,e,g,h){var i=f.objOfOnly(a),j=d.optionObjOf(b,[d.optionObjOfOnly("config",a)]);return u(i,j,b,c,e,g,h)},r=function(a,b,c,e,f,g){var h=a,i=d.optionObjOf(b,[d.optionOf("config",a)]);return u(h,i,b,c,e,f,g)},s=function(a,c,d){var e=function(b){var e=arguments;return b.config({name:g.constant(a)}).fold(function(){throw new n("We could not find any behaviour configuration for: "+a+". Using API: "+d)},function(a){var d=l.prototype.slice.call(e,1);return c.apply(void 0,[b,a.config,a.state].concat(d))})};return b.markAsBehaviourApi(e,d,c)},t=function(a){return{key:a,value:void 0}},u=function(a,d,l,m,n,o,p){var q=function(a){return e.hasKey(a,l)?a[l]():j.none()},r=i.map(n,function(a,b){return s(l,a,b)}),u=i.map(o,function(a,c){return b.markAsExtraApi(a,c)}),v=h.deepMerge(u,r,{revoke:g.curry(t,l),config:function(b){var c=f.asStructOrDie(l+"-config",a,b);return{key:l,value:{config:c,me:v,configAsRaw:k.cached(function(){return f.asRawOrDie(l+"-config",a,b)}),initialConfig:b,state:p}}},schema:function(){return d},exhibit:function(a,b){return q(a).bind(function(a){return e.readOptFrom(m,"exhibit").map(function(c){return c(b,a.config,a.state)})}).getOr(c.nu({}))},name:function(){return l},handlers:function(a){return q(a).bind(function(a){return e.readOptFrom(m,"events").map(function(b){return b(a.config,a.state)})}).getOr({})}});return v};return{executeEvent:o,loadEvent:p,create:q,createModes:r}}),g("6q",["y","6","x","1i","6p","v"],function(a,b,c,d,e,f){var g=function(a,b){return h(a,b,{validate:d.isFunction,label:"function"})},h=function(b,d,g){if(0===d.length)throw new f("You must specify at least one required field.");return e.validateStrArr("required",d),e.checkDupes(d),function(f){var h=c.keys(f),i=a.forall(d,function(b){return a.contains(h,b)});i||e.reqMessage(d,h),b(d,h);var j=a.filter(d,function(a){return!g.validate(f[a],a)});return j.length>0&&e.invalidTypeMessage(j,g.label),f}},i=function(b,c){var d=a.filter(c,function(c){return!a.contains(b,c)});d.length>0&&e.unsuppMessage(d)},j=b.noop;return{exactly:b.curry(g,i),ensure:b.curry(g,j),ensureWith:b.curry(h,j)}}),g("4g",["6q"],function(a){return a.ensure(["readState"])}),h("1w",Math),g("28",["4g","1w"],function(a,b){var c=function(){return a({readState:function(){return"No State required"}})};return{init:c}}),g("q",["27","28","29","14","2e","6"],function(a,b,c,d,e,f){var g=function(a){return d.wrapAll(a)},h=e.objOfOnly([c.strict("fields"),c.strict("name"),c.defaulted("active",{}),c.defaulted("apis",{}),c.defaulted("extra",{}),c.defaulted("state",b)]),i=function(b){var c=e.asRawOrDie("Creating behaviour: "+b.name,h,b);return a.create(c.fields,c.name,c.active,c.apis,c.extra,c.state)},j=e.objOfOnly([c.strict("branchKey"),c.strict("branches"),c.strict("name"),c.defaulted("active",{}),c.defaulted("apis",{}),c.defaulted("extra",{}),c.defaulted("state",b)]),k=function(b){var c=e.asRawOrDie("Creating behaviour: "+b.name,j,b);return a.createModes(e.choose(c.branchKey,c.branches),c.name,c.active,c.apis,c.extra,c.state)};return{derive:g,revoke:f.constant(void 0),noActive:f.constant({}),noApis:f.constant({}),noExtra:f.constant({}),noState:f.constant(b),create:i,createModes:k}}),g("4h",[],function(){return function(a,b,c){var d=c||!1,e=function(){b(),d=!0},f=function(){a(),d=!1},g=function(){var a=d?f:e;a()},h=function(){return d};return{on:e,off:f,toggle:g,isOn:h}}}),g("b",["1d"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||"#comment"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),g("4i",["1i","y","x","b","v","16"],function(a,b,c,d,e,f){var g=function(b,c,d){if(!(a.isString(d)||a.isBoolean(d)||a.isNumber(d)))throw f.error("Invalid call to Attr.set. Key ",c,":: Value ",d,":: Element ",b),new e("Attribute value was not simple");b.setAttribute(c,d+"")},h=function(a,b,c){g(a.dom(),b,c)},i=function(a,b){var d=a.dom();c.each(b,function(a,b){g(d,b,a)})},j=function(a,b){var c=a.dom().getAttribute(b);return null===c?void 0:c},k=function(a,b){var c=a.dom();return!(!c||!c.hasAttribute)&&c.hasAttribute(b)},l=function(a,b){a.dom().removeAttribute(b)},m=function(a){var b=a.dom().attributes;return void 0===b||null===b||0===b.length},n=function(a){return b.foldl(a.dom().attributes,function(a,b){return a[b.name]=b.value,a},{})},o=function(a,b,c){k(a,c)&&!k(b,c)&&h(b,c,j(a,c))},p=function(a,c,e){d.isElement(a)&&d.isElement(c)&&b.each(e,function(b){o(a,c,b)})};return{clone:n,set:h,setAll:i,get:j,has:k,remove:l,hasNone:m,transfer:p}}),g("6r",["y","4i"],function(a,b){var c=function(a,c){var d=b.get(a,c);return void 0===d||""===d?[]:d.split(" ")},d=function(a,d,e){var f=c(a,d),g=f.concat([e]);b.set(a,d,g.join(" "))},e=function(d,e,f){var g=a.filter(c(d,e),function(a){return a!==f});g.length>0?b.set(d,e,g.join(" ")):b.remove(d,e)};return{read:c,add:d,remove:e}}),g("4j",["y","6r"],function(a,b){var c=function(a){return void 0!==a.dom().classList},d=function(a){return b.read(a,"class")},e=function(a,c){return b.add(a,"class",c)},f=function(a,c){return b.remove(a,"class",c)},g=function(b,c){a.contains(d(b),c)?f(b,c):e(b,c)};return{get:d,add:e,remove:f,toggle:g,supports:c}}),g("2f",["4h","4i","4j"],function(a,b,c){var d=function(a,b){c.supports(a)?a.dom().classList.add(b):c.add(a,b)},e=function(a){var d=c.supports(a)?a.dom().classList:c.get(a);0===d.length&&b.remove(a,"class")},f=function(a,b){if(c.supports(a)){var d=a.dom().classList;d.remove(b)}else c.remove(a,b);e(a)},g=function(a,b){return c.supports(a)?a.dom().classList.toggle(b):c.toggle(a,b)},h=function(b,d){var e=c.supports(b),f=b.dom().classList,g=function(){e?f.remove(d):c.remove(b,d)},h=function(){e?f.add(d):c.add(b,d)};return a(g,h,i(b,d))},i=function(a,b){return c.supports(a)&&a.dom().classList.contains(b)};return{add:d,remove:f,toggle:g,toggler:h,has:i}}),g("r",["2f"],function(a){var b=function(b,c,d){a.remove(b,d),a.add(b,c)},c=function(a,c,d){b(a.element(),c.alpha(),c.omega())},d=function(a,c,d){b(a.element(),c.omega(),c.alpha())},e=function(b,c,d){a.remove(b.element(),c.alpha()),a.remove(b.element(),c.omega())},f=function(b,c,d){return a.has(b.element(),c.alpha())},g=function(b,c,d){return a.has(b.element(),c.omega())};return{toAlpha:c,toOmega:d,isAlpha:f,isOmega:g,clear:e}}),g("s",["29"],function(a){return[a.strict("alpha"),a.strict("omega")]}),g("1",["q","r","s"],function(a,b,c){return a.create({fields:c,name:"swapping",apis:b})}),g("2p",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g("10",["1i","y","6","z","2o","2p","1a","a"],function(a,b,c,d,e,f,g,h){var i=function(a){return h.fromDom(a.dom().ownerDocument)},j=function(a){var b=i(a);return h.fromDom(b.dom().documentElement)},k=function(a){var b=a.dom(),c=b.ownerDocument.defaultView;return h.fromDom(c)},l=function(a){var b=a.dom();return d.from(b.parentNode).map(h.fromDom)},m=function(a){return l(a).bind(function(c){var d=u(c);return b.findIndex(d,function(b){return g.eq(a,b)})})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=function(a){return a.dom().childNodes.length},z=function(a){return a.dom().hasChildNodes()},A=e.immutable("element","offset"),B=function(a,b){var c=u(a);return c.length>0&&b0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g("12",["17","a","b","1b"],function(a,b,c,d){var e=function(a){var b=c.isText(a)?a.dom().parentNode:a.dom();return void 0!==b&&null!==b&&b.ownerDocument.body.contains(b)},f=a.cached(function(){return g(b.fromDom(d))}),g=function(a){var c=a.dom().body;if(null===c||void 0===c)throw"Body is not available yet";return b.fromDom(c)};return{body:f,getBody:g,inBody:e}}),g("3",["2","t","y","z","9","11","12","10"],function(a,b,c,d,e,f,g,h){var i=function(d){a.emit(d,b.detachedFromDom());var e=d.components();c.each(e,i)},j=function(d){var e=d.components();c.each(e,j),a.emit(d,b.attachedToDom())},k=function(a,b){l(a,b,e.append)},l=function(a,b,c){a.getSystem().addToWorld(b),c(a.element(),b.element()),g.inBody(a.element())&&j(b),a.syncComponents()},m=function(a){i(a),f.remove(a.element()),a.getSystem().removeFromWorld(a)},n=function(a){var b=h.parent(a.element()).bind(function(b){return a.getSystem().getByDom(b).fold(d.none,d.some)});m(a),b.each(function(a){a.syncComponents()})},o=function(a){var b=a.components();c.each(b,m),f.empty(a.element()),a.syncComponents()},p=function(a,b){e.append(a,b.element());var d=h.children(b.element());c.each(d,function(a){b.getByDom(a).each(j)})},q=function(a){var b=h.children(a.element());c.each(b,function(b){a.getByDom(b).each(i)}),f.remove(a.element())};return{attach:k,attachWith:l,detach:n,detachChildren:o,attachSystem:p,detachSystem:q}}),g("6s",["y","a","10","1b"],function(a,b,c,d){var e=function(a,e){var f=e||d,g=f.createElement("div");return g.innerHTML=a,c.children(b.fromDom(g))},f=function(c,d){return a.map(c,function(a){return b.fromTag(a,d)})},g=function(c,d){return a.map(c,function(a){return b.fromText(a,d)})},h=function(c){return a.map(c,b.fromDom)};return{fromHtml:e,fromTags:f,fromText:g,fromDom:h}}),g("4n",["a","6s","9","2s","11","10"],function(a,b,c,d,e,f){var g=function(a){return a.dom().innerHTML},h=function(g,h){var i=f.owner(g),j=i.dom(),k=a.fromDom(j.createDocumentFragment()),l=b.fromHtml(h,j);d.append(k,l),e.empty(g),c.append(g,k)},i=function(b){var d=a.fromTag("div"),e=a.fromDom(b.dom().cloneNode(!0));return c.append(d,e),g(d)};return{get:g,set:h,getOuter:i}}),g("4o",["4i","a","9","2s","11","10"],function(a,b,c,d,e,f){var g=function(a,c){return b.fromDom(a.dom().cloneNode(c))},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(c,d){var e=b.fromTag(d),f=a.clone(c);return a.setAll(e,f),e},k=function(a,b){var c=j(a,b),e=f.children(i(a));return d.append(c,e),c},l=function(a,b){var g=j(a,b);c.before(a,g);var h=f.children(a);return d.append(g,h),e.remove(a),g};return{shallow:h,shallowAs:j,deep:i,copy:k,mutate:l}}),g("2t",["4n","4o"],function(a,b){var c=function(c){var d=b.shallow(c);return a.getOuter(d)};return{getHtml:c}}),g("13",["2t"],function(a){var b=function(b){return a.getHtml(b)};return{element:b}}),g("15",["z"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d0&&!d.exists(n,function(b){return a.indexOf(b)>-1})}).getOr(j)}return j},p=function(a,b,c){},q={logEventCut:e.noop,logEventStopped:e.noop,logNoParent:e.noop,logEventNoHandlers:e.noop,logEventResponse:e.noop,write:e.noop},r=function(c,e,f){var g=k&&("*"===m||d.contains(m,c))?function(){var f=[];return{logEventCut:function(a,b,c){f.push({outcome:"cut",target:b,purpose:c})},logEventStopped:function(a,b,c){f.push({outcome:"stopped",target:b,purpose:c})},logNoParent:function(a,b,c){f.push({outcome:"no-parent",target:b,purpose:c})},logEventNoHandlers:function(a,b){f.push({outcome:"no-handlers-left",target:b})},logEventResponse:function(a,b,c){f.push({outcome:"response",purpose:c,target:b})},write:function(){d.contains(["mousemove","mouseover","mouseout",a.systemInit()],c)||h.log(c,{event:c,target:e.dom(),sequence:d.map(f,function(a){return d.contains(["cut","stopped","response"],a.outcome)?"{"+a.purpose+"} "+a.outcome+" at ("+b.element(a.target)+")":a.outcome})})}}}():q,i=f(g);return g.write(),i},s=function(a){var c=function(a){var e=a.spec();return{"(original.spec)":e,"(dom.ref)":a.element().dom(),"(element)":b.element(a.element()),"(initComponents)":d.map(void 0!==e.components?e.components:[],c),"(components)":d.map(a.components(),c),"(bound.events)":f.mapToArray(a.events(),function(a,b){return[b]}).join(", "),"(behaviours)":void 0!==e.behaviours?f.map(e.behaviours,function(b,c){return void 0===b?"--revoked--":{config:b.configAsRaw(),"original-config":b.initialConfig,state:a.readState(c)}}):"none"}};return c(a)},t=function(){return void 0!==window[l]?window[l]:(window[l]={systems:{},lookup:function(a){var d=window[l].systems,e=f.keys(d);return g.findMap(e,function(e){var f=d[e];return f.getByUid(a).toOption().map(function(a){return c.wrap(b.element(a.element()),s(a))})})}},window[l])},u=function(a,b){var c=t();c.systems[a]=b};return{logHandler:p,noLogger:e.constant(q),getTrace:o,monitorEvent:r,isDebugging:e.constant(k),registerInspector:u}}),g("5",[],function(){var a=function(b){var c=b,d=function(){return c},e=function(a){c=a},f=function(){return a(d())};return{get:d,set:e,clone:f}};return a}),g("4p",["1i","z"],function(a,b){return function(c,d,e,f,g){return c(e,f)?b.some(e):a.isFunction(g)&&g(e)?b.none():d(e,f,g)}}),g("2u",["1i","y","6","z","12","1a","a","4p"],function(a,b,c,d,e,f,g,h){var i=function(a){return n(e.body(),a)},j=function(b,e,f){for(var h=b.dom(),i=a.isFunction(f)?f:c.constant(!1);h.parentNode;){h=h.parentNode;var j=g.fromDom(h);if(e(j))return d.some(j);if(i(j))break}return d.none()},k=function(a,b,c){var d=function(a){return b(a)};return h(d,j,a,b,c)},l=function(a,b){var c=a.dom();return c.parentNode?m(g.fromDom(c.parentNode),function(c){return!f.eq(a,c)&&b(c)}):d.none()},m=function(a,d){var e=b.find(a.dom().childNodes,c.compose(d,g.fromDom));return e.map(g.fromDom)},n=function(a,b){var c=function(a){for(var e=0;ed?c:e=c?c:a};return{cycleBy:a,cap:b}}),g("7o",["y","12","10"],function(a,b,c){var d=function(a){return h(b.body(),a)},e=function(b,d,e){return a.filter(c.parents(b,e),d)},f=function(b,d){return a.filter(c.siblings(b),d)},g=function(b,d){return a.filter(c.children(b),d)},h=function(b,d){var e=[];return a.each(c.children(b),function(a){d(a)&&(e=e.concat([a])),e=e.concat(h(a,d))}),e};return{all:d,ancestors:e,siblings:f,children:g,descendants:h}}),g("5l",["7o","2r"],function(a,b){var c=function(a){return b.all(a)},d=function(c,d,e){return a.ancestors(c,function(a){return b.is(a,d)},e)},e=function(c,d){return a.siblings(c,function(a){return b.is(a,d)})},f=function(c,d){return a.children(c,function(a){return b.is(a,d)})},g=function(a,c){return b.all(c,a)};return{all:c,ancestors:d,siblings:e,children:f,descendants:g}}),g("7m",["94","y","z","48","2f","5l","4u","v"],function(a,b,c,d,e,f,g,h){var i=function(a,c,d){var g=f.descendants(a.element(),"."+c.highlightClass());b.each(g,function(b){e.remove(b,c.highlightClass()),a.getSystem().getByDom(b).each(function(b){c.onDehighlight()(a,b)})})},j=function(a,b,c,d){var f=o(a,b,c,d);e.remove(d.element(),b.highlightClass()),f&&b.onDehighlight()(a,d)},k=function(a,b,c,d){var f=o(a,b,c,d);i(a,b,c),e.add(d.element(),b.highlightClass()),f||b.onHighlight()(a,d)},l=function(a,b,c){r(a,b,c).each(function(d){k(a,b,c,d)})},m=function(a,b,c){s(a,b,c).each(function(d){k(a,b,c,d)})},n=function(a,b,c,d){q(a,b,c,d).fold(function(a){throw new h(a)},function(d){k(a,b,c,d)})},o=function(a,b,c,d){return e.has(d.element(),b.highlightClass())},p=function(a,b,c){return g.descendant(a.element(),"."+b.highlightClass()).bind(a.getSystem().getByDom)},q=function(a,b,e,g){var h=f.descendants(a.element(),"."+b.itemClass());return c.from(h[g]).fold(function(){return d.error("No element found with index "+g)},a.getSystem().getByDom)},r=function(a,b,c){return g.descendant(a.element(),"."+b.itemClass()).bind(a.getSystem().getByDom)},s=function(a,b,d){var e=f.descendants(a.element(),"."+b.itemClass()),g=e.length>0?c.some(e[e.length-1]):c.none();return g.bind(a.getSystem().getByDom)},t=function(c,d,g,h){var i=f.descendants(c.element(),"."+d.itemClass()),j=b.findIndex(i,function(a){return e.has(a,d.highlightClass())});return j.bind(function(b){var d=a.cycleBy(b,h,0,i.length-1);return c.getSystem().getByDom(i[d])})},u=function(a,b,c){return t(a,b,c,-1)},v=function(a,b,c){return t(a,b,c,1)};return{dehighlightAll:i,dehighlight:j,highlight:k,highlightFirst:l,highlightLast:m,highlightAt:n,isHighlighted:o,getHighlighted:p,getFirst:r,getLast:s,getPrevious:u,getNext:v}}),g("7n",["4q","29"],function(a,b){return[b.strict("highlightClass"),b.strict("itemClass"),a.onHandler("onHighlight"),a.onHandler("onDehighlight")]}),g("5j",["q","7m","7n","u"],function(a,b,c,d){return a.create({fields:c,name:"highlighting",apis:b})}),g("97",["5j","6","8"],function(a,b,c){var d=function(){var a=function(a){return c.search(a.element())},b=function(a,b){a.getSystem().triggerFocus(b,a.element())};return{get:a,set:b}},e=function(){var c=function(b){return a.getHighlighted(b).map(function(a){return a.element()})},d=function(c,d){c.getSystem().getByDom(d).fold(b.noop,function(b){a.highlight(c,b)})};return{get:c,set:d}};return{dom:d,highlights:e}}),g("8t",["y","6"],function(a,b){var c=function(b){return function(c){return a.contains(b,c.raw().which)}},d=function(b){return function(c){return a.forall(b,function(a){return a(c)})}},e=function(a){return function(b){return b.raw().which===a}},f=function(a){return a.raw().shiftKey===!0};return{inSet:c,and:d,is:e,isShift:f,isNotShift:b.not(f)}}),g("8u",["8t","y"],function(a,b){var c=function(b,c){return{matches:a.is(b),classification:c}},d=function(a,b){return{matches:a,classification:b}},e=function(a,c){var d=b.find(a,function(a){return a.matches(c)});return d.map(function(a){return a.classification})};return{basic:c,rule:d,choose:e}}),g("8r",["3d","2g","t","97","4q","8u","29","w"],function(a,b,c,d,e,f,g,h){var i=function(i,j,k,l,m,n){var o=function(){return i.concat([g.defaulted("focusManager",d.dom()),e.output("handler",r),e.output("state",j)])},p=function(a,b,c,d){var e=k(a,b,c,d);return f.choose(e,b.event()).bind(function(e){return e(a,b,c,d)})},q=function(d,e){var f=l(d,e),g=a.derive(n.map(function(b){return a.run(c.focus(),function(a,c){b(a,d,e,c),c.stop()})}).toArray().concat([a.run(b.keydown(),function(a,b){p(a,b,d,e).each(function(a){b.stop()})})]));return h.deepMerge(f,g)},r={schema:o,processKey:p,toEvents:q,toApis:m};return r};return{typical:i}}),g("8s",["y","1w"],function(a,b){var c=function(b,c,d){var e=a.reverse(b.slice(0,c)),f=a.reverse(b.slice(c+1));return a.find(e.concat(f),d)},d=function(b,c,d){var e=a.reverse(b.slice(0,c));return a.find(e,d)},e=function(b,c,d){var e=b.slice(0,c),f=b.slice(c+1);return a.find(f.concat(e),d)},f=function(b,c,d){var e=b.slice(c+1);return a.find(e,d)};return{cyclePrev:c,cycleNext:e,tryPrev:d,tryNext:f}}),g("57",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),g("39",["1i","y","x","z","4i","12","a","b","57","37","v","16","1k"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error("Invalid call to CSS.set. Property ",c,":: Value ",d,":: Element ",b),new k("CSS value must be a string: "+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=""!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):""},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a){var b={},c=a.dom();if(i.isSupported(c))for(var d=0;dd?b-d:0;return e};return{set:g,get:h,getOuter:i,aggregate:j,max:k}}}),g("8a",["12","39","78"],function(a,b,c){var d=c("height",function(b){return a.inBody(b)?b.dom().getBoundingClientRect().height:b.dom().offsetHeight}),e=function(a,b){d.set(a,b)},f=function(a){return d.get(a)},g=function(a){return d.getOuter(a)},h=function(a,c){var e=["margin-top","border-top-width","padding-top","padding-bottom","border-bottom-width","margin-bottom"],f=d.max(a,c,e);b.set(a,"max-height",f+"px")};return{set:e,get:f,getOuter:g,setMax:h}}),g("6u",["8b","28","4q","8r","13","8s","8t","8u","29","y","6","z","1a","8","5l","4u","8a"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var r=[i.defaulted("selector",'[data-alloy-tabstop="true"]'),i.option("onEscape"),i.option("onEnter"),i.defaulted("firstTabstop",0),i.defaulted("useTabstopAt",k.constant(!0)),i.option("visibilitySelector")],s=function(a,b,c){var d=o.descendants(a.element(),b.selector()),e=j.filter(d,function(a){return t(b,a)}),f=l.from(e[b.firstTabstop()]);f.each(function(b){var c=a.element();a.getSystem().triggerFocus(b,c)})},t=function(a,b){var c=a.visibilitySelector().bind(function(a){return p.closest(b,a)}).getOr(b);return q.get(c)>0},u=function(a,b){return n.search(a.element()).bind(function(a){return p.closest(a,b.selector())})},v=function(a,b,c,d,e){return e(b,c,function(a){return t(d,a)&&d.useTabstopAt(a)}).fold(function(){return l.some(!0)},function(b){var c=a.getSystem(),d=a.element();return c.triggerFocus(b,d),l.some(!0)})},w=function(a,b,c,d){var e=o.descendants(a.element(),c.selector());return u(a,c).bind(function(b){var f=j.findIndex(e,k.curry(m.eq,b));return f.bind(function(b){return v(a,e,b,c,d)})})},x=function(a,b,c,d){return w(a,b,c,f.cyclePrev)},y=function(a,b,c,d){return w(a,b,c,f.cycleNext)},z=function(a,b,c,d){return c.onEnter().bind(function(c){return c(a,b)})},A=function(a,b,c,d){return c.onEscape().bind(function(c){return c(a,b)})},B=k.constant([h.rule(g.and([g.isShift,g.inSet(a.TAB())]),x),h.rule(g.inSet(a.TAB()),y),h.rule(g.inSet(a.ESCAPE()),A),h.rule(g.and([g.isNotShift,g.inSet(a.ENTER())]),z)]),C=k.constant({}),D=k.constant({});return d.typical(r,b.init,B,C,D,l.some(s))}),g("8v",["4i","b"],function(a,b){var c=function(c){return"input"===b.name(c)&&"radio"!==a.get(c,"type")||"textarea"===b.name(c)};return{inside:c}}),g("8w",["8v","8b","2","t","8t","z"],function(a,b,c,d,e,f){var g=function(a,b,e){return c.dispatch(a,e,d.execute()),f.some(!0)},h=function(c,d,h){return a.inside(h)&&e.inSet(b.SPACE())(d.event())?f.none():g(c,d,h)};return{defaultExecute:h}}),g("6v",["8v","8b","28","8r","8w","13","8t","8u","29","6","z"],function(a,b,c,d,e,f,g,h,i,j,k){var l=[i.defaulted("execute",e.defaultExecute),i.defaulted("useSpace",!1),i.defaulted("useEnter",!0),i.defaulted("useDown",!1)],m=function(a,b,c,d){return c.execute()(a,b,a.element())},n=function(c,d,e,f){var i=e.useSpace()&&!a.inside(c.element())?b.SPACE():[],j=e.useEnter()?b.ENTER():[],k=e.useDown()?b.DOWN():[],l=i.concat(j).concat(k);return[h.rule(g.inSet(l),m)]},o=j.constant({}),p=j.constant({});return d.typical(l,c.init,n,o,p,k.none())}),g("4z",["4g","5","6","z"],function(a,b,c,d){var e=function(e){var f=b(d.none()),g=function(a,b){f.set(d.some({numRows:c.constant(a),numColumns:c.constant(b)}))},h=function(){return f.get().map(function(a){return a.numRows()})},i=function(){return f.get().map(function(a){return a.numColumns()})};return a({readState:c.constant({}),setGridSize:g,getNumRows:h,getNumColumns:i})},f=function(a){return a.state()(a)};return{flatgrid:e,init:f}}),g("9y",["39"],function(a){var b=function(a,b){return function(d){return"rtl"===c(d)?b:a}},c=function(b){return"rtl"===a.get(b,"direction")?"rtl":"ltr"};return{onDirection:b,getDirection:c}}),g("8x",["9y"],function(a){var b=function(a){return function(b,c,d,e){var g=a(b.element());return f(g,b,c,d,e)}},c=function(c,d){var e=a.onDirection(c,d);return b(e)},d=function(c,d){var e=a.onDirection(d,c);return b(e)},e=function(a){return function(b,c,d,e){return f(a,b,c,d,e)}},f=function(a,b,c,d,e){var f=d.focusManager().get(b).bind(function(c){return a(b.element(),c,d,e)});return f.map(function(a){return d.focusManager().set(b,a),!0})};return{east:d,west:c,north:e,south:e,move:e}}),g("9z",["y","2o"],function(a,b){var c=b.immutableBag(["index","candidates"],[]),d=function(b,d){return a.findIndex(b,d).map(function(a){return c({index:a,candidates:b})})};return{locate:d}}),g("a0",["6","4h","39"],function(a,b,c){var d=function(d,e,f,g){var h=c.get(d,e);void 0===h&&(h="");var i=h===f?g:f,j=a.curry(c.set,d,e,h),k=a.curry(c.set,d,e,i);return b(j,k,!1)},e=function(a){return d(a,"visibility","hidden","visible")},f=function(a,b){return d(a,"display","none",b)},g=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},h=function(a){var b=a.dom();return!g(b)};return{toggler:e,displayToggler:f,isVisible:h}}),g("8y",["9z","y","6","1a","5l","a0"],function(a,b,c,d,e,f){var g=function(a,b,c){var d=f.isVisible;return h(a,b,c,d)},h=function(g,h,i,j){var k=c.curry(d.eq,h),l=e.descendants(g,i),m=b.filter(l,f.isVisible);return a.locate(m,k)},i=function(a,c){return b.findIndex(a,function(a){return d.eq(c,a)})};return{locateVisible:g,locateIn:h,findIndex:i}}),g("8z",["94","6","z","1w"],function(a,b,c,d){var e=function(a,b,e,f){var g=d.floor(b/e),h=b%e;return f(g,h).bind(function(b){var d=b.row()*e+b.column();return d>=0&&d"}),c.anyValue()),m=b.defaulted("defaults",e.constant({})),n=b.defaulted("overrides",e.constant({})),o=c.objOf([i,j,k,l,m,n]),p=c.objOf([i,j,k,m,n]),q=c.objOf([i,j,k,l,m,n]),r=c.objOf([i,j,k,b.strict("unit"),l,m,n]),s=function(a){return a.fold(g.some,g.none,g.some,g.some)},t=function(a){var b=function(a){return a.name()};return a.fold(b,b,b,b)},u=function(a){return a.fold(e.identity,e.identity,e.identity,e.identity)},v=function(a,b){return function(d){var e=c.asStructOrDie("Converting part type",b,d);return a(e)}};return{required:v(h.required,o),external:v(h.external,p),optional:v(h.optional,q),group:v(h.group,r),asNamedPart:s,name:t,asCommon:u,original:e.constant("entirety")}}),g("72",["14","y","x","w","6n","6","6k","v"],function(a,b,c,d,e,f,g,h){var i="placeholder",j=g.generate([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),k=function(a){return b.contains([i],a)},l=function(b,d,g,i){return b.exists(function(a){return a!==g.owner})?j.single(!0,f.constant(g)):a.readOptFrom(i,g.name).fold(function(){throw new h("Unknown placeholder component: "+g.name+"\nKnown: ["+c.keys(i)+"]\nNamespace: "+b.getOr("none")+"\nSpec: "+e.stringify(g,null,2))},function(a){return a.replace()})},m=function(a,b,c,d){return c.uiType===i?l(a,b,c,d):j.single(!1,f.constant(c))},n=function(c,e,f,g){var h=m(c,e,f,g);return h.fold(function(h,i){var j=i(e,f.config,f.validated),k=a.readOptFrom(j,"components").getOr([]),l=b.bind(k,function(a){return n(c,e,a,g)});return[d.deepMerge(j,{components:l})]},function(a,b){var c=b(e,f.config,f.validated);return c})},o=function(a,c,d,e){return b.bind(d,function(b){return n(a,c,b,e)})},p=function(a,b){var c=!1,d=function(){return c},e=function(){if(c===!0)throw new h("Trying to use the same placeholder more than once: "+a);return c=!0,b},g=function(){return b.fold(function(a,b){return a},function(a,b){return a})};return{name:f.constant(a),required:g,used:d,replace:e}},q=function(a,b,d,f){var g=c.map(f,function(a,b){return p(b,a)}),i=o(a,b,d,g);return c.each(g,function(c){if(c.used()===!1&&c.required())throw new h("Placeholder: "+c.name()+" was not found in components list\nNamespace: "+a.getOr("none")+"\nComponents: "+e.stringify(b.components(),null,2))}),i},r=function(a,b){var c=b;return c.fold(function(b,c){return[c(a)]},function(b,c){return c(a)})};return{single:j.single,multiple:j.multiple,isSubstitute:k,placeholder:f.constant(i),substituteAll:o,substitutePlaces:q,singleReplace:r}}),g("71",["53","72","14","y","6","w"],function(a,b,c,d,e,f){var g=function(a,b,d,e){var g=d;return f.deepMerge(b.defaults()(a,d,e),d,{uid:a.partUids()[b.name()]},b.overrides()(a,d,e),{"debug.sketcher":c.wrap("part-"+b.name(),g)})},h=function(c,h,i){var j={},k={};return d.each(i,function(c){c.fold(function(a){j[a.pname()]=b.single(!0,function(b,c,d){return a.factory().sketch(g(b,a,c,d))})},function(b){var c=h.parts()[b.name()]();k[b.name()]=e.constant(g(h,b,c[a.original()]()))},function(a){j[a.pname()]=b.single(!1,function(b,c,d){return a.factory().sketch(g(b,a,c,d))})},function(a){j[a.pname()]=b.multiple(!0,function(b,c,e){var g=b[a.name()]();return d.map(g,function(c){return a.factory().sketch(f.deepMerge(a.defaults()(b,c),c,a.overrides()(b,c)))})})})}),{internals:e.constant(j),externals:e.constant(k)}};return{subs:h}}),g("52",["4q","71","53","72","4c","29","14","2e","y","6","w","x","z"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(a,b){var d={};return i.each(b,function(b){c.asNamedPart(b).each(function(b){var c=o(a,b.pname());d[b.name()]=function(d){var e=h.asRawOrDie("Part: "+b.name()+" in "+a,h.objOf(b.schema()),d);return k.deepMerge(c,{config:d,validated:e})}})}),d},o=function(a,b){return{uiType:d.placeholder(),owner:a,name:b}},p=function(a,b,c){return{uiType:d.placeholder(),owner:a,name:b,config:c,validated:{}}},q=function(b){return i.bind(b,function(b){return b.fold(m.none,m.some,m.none,m.none).map(function(b){return f.strictObjOf(b.name(),b.schema().concat([a.snapshot(c.original())]))}).toArray()})},r=function(a){return i.map(a,c.name)},s=function(a,c,d){return b.subs(a,c,d)},t=function(a,b,c){return d.substitutePlaces(m.some(a),b,b.components(),c)},u=function(a,b,c){var d=b.partUids()[c];return a.getSystem().getByUid(d).toOption()},v=function(a,b,c){return u(a,b,c).getOrDie("Could not find part: "+c)},w=function(a,b,c){var d={},e=b.partUids(),f=a.getSystem();return i.each(c,function(a){d[a]=f.getByUid(e[a])}),l.map(d,j.constant)},x=function(a,b){var c=a.getSystem();return l.map(b.partUids(),function(a,b){return j.constant(c.getByUid(a))})},y=function(a,b,c){var d={},e=b.partUids(),f=a.getSystem();return i.each(c,function(a){d[a]=f.getByUid(e[a]).getOrDie()}),l.map(d,j.constant)},z=function(a,b){var c=r(b);return g.wrapAll(i.map(c,function(b){return{key:b,value:a+"-"+b}}))},A=function(a){return f.field("partUids","partUids",e.mergeWithThunk(function(b){return z(b.uid,a)}),h.anyValue())};return{generate:n,generateOne:p,schemas:q,names:r,substitutes:s,components:t,defaultUids:z,defaultUidsSchema:A,getAllParts:x,getPart:u,getPartOrDie:v,getParts:w,getPartsOrDie:y}}),g("73",["4q","72","29","14","2e","y","6","w","x","6n","v"],function(a,b,c,d,e,f,g,h,i,j,k){var l=function(e,g,h){var l=void 0!==h?h:"Unknown owner",m=function(){return[a.output("partUids",{})]},n=void 0!==g?g:m();if(0===e.length&&0===n.length)return m();var o=c.strictObjOf("parts",f.flatten([f.map(e,c.strict),f.map(n,function(a){return c.defaulted(a,b.single(!1,function(){throw new k("The optional part: "+a+" was not specified in the config, but it was used in components")}))})])),p=c.state("partUids",function(a){if(!d.hasKey(a,"parts"))throw new k("Part uid definition for owner: "+l+' requires "parts"\nExpected parts: '+e.join(", ")+"\nSpec: "+j.stringify(a,null,2));var b=i.map(a.parts,function(b,c){return d.readOptFrom(b,"uid").getOrThunk(function(){return a.uid+"-"+c})});return b});return[o,p]},m=function(b,d,e,f){var g=d.length>0?[c.strictObjOf("parts",d)]:[];return g.concat([c.strict("uid"),c.defaulted("dom",{}),c.defaulted("components",[]),a.snapshot("originalSpec"),c.defaulted("debug.sketcher",{})]).concat(e)},n=function(a,b,c,d){var f=m(a,d,c);return e.asRawOrDie(a+" [SpecSchema]",e.objOfOnly(f.concat(b)),c)},o=function(a,b,c,d,f){var g=m(a,d,f,c);return e.asStructOrDie(a+" [SpecSchema]",e.objOfOnly(g.concat(b)),c)},p=function(a,b,c){var d=h.deepMerge(b,c);return a(d)},q=function(a,b){return h.deepMerge(a,b)};return{asRawOrDie:n,asStructOrDie:o,addBehaviours:q,getPartsSchema:l,extend:p}}),g("51",["52","30","73","14","w"],function(a,b,c,d,e){var f=function(a,b,f,g){var i=h(g),j=c.asStructOrDie(a,b,i,[],[]);return e.deepMerge(f(j,i),{"debug.sketcher":d.wrap(a,g)})},g=function(b,f,g,i,j){var k=h(j),l=a.schemas(g),m=a.defaultUidsSchema(g),n=c.asStructOrDie(b,f,k,l,[m]),o=a.substitutes(b,n,g),p=a.components(b,n,o.internals());return e.deepMerge(i(n,p,k,o.externals()),{"debug.sketcher":d.wrap(b,j)})},h=function(a){return e.deepMerge({uid:b.generate("uid")},a)};return{supplyUid:h,single:f,composite:g}}),g("34",["50","51","4a","52","53","29","2e","6","w","x"],function(a,b,c,d,e,f,g,h,i,j){var k=g.objOfOnly([f.strict("name"),f.strict("factory"),f.strict("configFields"),f.defaulted("apis",{}),f.defaulted("extraApis",{})]),l=g.objOfOnly([f.strict("name"),f.strict("factory"),f.strict("configFields"),f.strict("partFields"),f.defaulted("apis",{}),f.defaulted("extraApis",{})]),m=function(d){var e=g.asRawOrDie("Sketcher for "+d.name,k,d),f=function(a){return b.single(e.name,e.configFields,e.factory,a)},l=j.map(e.apis,a.makeApi),m=j.map(e.extraApis,function(a,b){return c.markAsExtraApi(a,b)});return i.deepMerge({name:h.constant(e.name),partFields:h.constant([]),configFields:h.constant(e.configFields),sketch:f},l,m)},n=function(e){var f=g.asRawOrDie("Sketcher for "+e.name,l,e),k=function(a){return b.composite(f.name,f.configFields,f.partFields,f.factory,a)},m=d.generate(f.name,f.partFields),n=j.map(f.apis,a.makeApi),o=j.map(f.extraApis,function(a,b){return c.markAsExtraApi(a,b)});return i.deepMerge({name:h.constant(f.name),partFields:h.constant(f.partFields),configFields:h.constant(f.configFields),sketch:k,parts:h.constant(m)},n,o)};return{single:m,composite:n}}),g("35",["3d","2","2g","t","y","7"],function(a,b,c,d,e,f){var g=function(g){var h=function(b){return a.run(d.execute(),function(a,c){b(a),c.stop()})},i=function(a,c){c.stop(),b.emitExecute(a)},j=function(a,b){b.cut()},k=f.detect().deviceType.isTouch()?[a.run(d.tap(),i)]:[a.run(c.click(),i),a.run(c.mousedown(),j)];return a.derive(e.flatten([g.map(h).toArray(),k]))};return{events:g}}),g("1n",["q","32","33","34","35","29","w"],function(a,b,c,d,e,f,g){var h=function(d,f){var h=e.events(d.action());return{uid:d.uid(),dom:d.dom(),components:d.components(),events:h,behaviours:g.deepMerge(a.derive([b.config({}),c.config({mode:"execution",useSpace:!0,useEnter:!0})]),d.buttonBehaviours()),domModification:{attributes:{type:"button",role:d.role().getOr("button")}},eventOrder:d.eventOrder()}};return d.single({name:"Button",factory:h,configFields:[f.defaulted("uid",void 0),f.strict("dom"),f.defaulted("components",[]),f.defaulted("buttonBehaviours",{}),f.option("action"),f.option("role"),f.defaulted("eventOrder",{})]})}),g("36",["14","y","w","a","b","4n","10","u"],function(a,b,c,d,e,f,g,h){var i=function(d){var e=void 0!==d.dom().attributes?d.dom().attributes:[];return b.foldl(e,function(b,d){return"class"===d.name?b:c.deepMerge(b,a.wrap(d.name,d.value))},{})},j=function(a){return h.prototype.slice.call(a.dom().classList,0)},k=function(a){var b=d.fromHtml(a),h=g.children(b),k=i(b),l=j(b),m=0===h.length?{}:{innerHtml:f.get(b)};return c.deepMerge({tag:e.name(b),classes:l,attributes:k},m)},l=function(a,b,d){return a.sketch(c.deepMerge({dom:k(b)},d))};return{fromHtml:k,sketch:l}}),g("1o",["36","37","i"],function(a,b,c){var d=function(d){var e=b.supplant(d,{prefix:c.prefix()});return a.fromHtml(e)},e=function(a){ +var b=d(a);return{dom:b}};return{dom:d,spec:e}}),g("l",["q","1g","1m","1n","w","1l","i","1o"],function(a,b,c,d,e,f,g,h){var i=function(a,b){return m(b,function(){a.execCommand(b)},{})},j=function(c){return a.derive([b.config({toggleClass:g.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),f.format(c,function(a,c){var d=c?b.on:b.off;d(a)})])},k=function(a,b){var c=j(b);return m(b,function(){a.execCommand(b)},c)},l=function(a,b,c,d){var e=j(c);return m(b,d,e)},m=function(b,f,g){return d.sketch({dom:h.dom(''),action:f,buttonBehaviours:e.deepMerge(a.derive([c.config({})]),g)})};return{forToolbar:m,forToolbarCommand:i,forToolbarStateAction:l,forToolbarStateCommand:k}}),g("92",["1w"],function(a){var b=function(b,c,d,e){return bd?d:b===c?c-1:a.max(c,b-e)},c=function(b,c,d,e){return b>d?b:bb.right)return f+1;var l=a.min(b.right,a.max(g,b.left))-b.left,m=d(l/b.width*k+c,c-1,f+1),n=a.round(m);return i&&m>=c&&m<=f?e(b,m,c,f,h,j):n};return{reduceBy:b,increaseBy:c,findValueOfX:f}}),g("74",["2","92","6","z","7","1w"],function(a,b,c,d,e,f){var g="slider.change.value",h=e.detect().deviceType.isTouch(),i=function(a){var b=a.event().raw();return h&&void 0!==b.touches&&1===b.touches.length?d.some(b.touches[0]):h&&void 0!==b.touches?d.none():h||void 0===b.clientX?d.none():d.some(b)},j=function(a){var b=i(a);return b.map(function(a){return a.clientX})},k=function(b,c){a.emitWith(b,g,{value:c})},l=function(a,b){k(a,b.min(),d.none())},m=function(a,b){k(a,b.max(),d.none())},n=function(a,b){k(a,b.max()+1,d.none())},o=function(a,b){k(a,b.min()-1,d.none())},p=function(a,c,d,e){var f=b.findValueOfX(c,d.min(),d.max(),e,d.stepSize(),d.snapToGrid(),d.snapStart());k(a,f)},q=function(a,b,c,d){return j(d).map(function(d){return p(a,c,b,d),d})},r=function(a,c){var e=b.reduceBy(c.value().get(),c.min(),c.max(),c.stepSize());k(a,e,d.none())},s=function(a,c){var e=b.increaseBy(c.value().get(),c.min(),c.max(),c.stepSize());k(a,e,d.none())};return{setXFromEvent:q,setToLedge:o,setToRedge:n,moveLeftFromRedge:m,moveRightFromLedge:l,moveLeft:r,moveRight:s,changeEvent:c.constant(g)}}),g("54",["q","32","33","3d","2g","53","74","29","5","6","z","7"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=l.detect(),n=m.deviceType.isTouch(),o=function(a,b){return f.optional({name:""+a+"-edge",overrides:function(a){var c=d.derive([d.runActionExtra(e.touchstart(),b,[a])]),f=d.derive([d.runActionExtra(e.mousedown(),b,[a]),d.runActionExtra(e.mousemove(),function(a,c){c.mouseIsDown().get()&&b(a,c)},[a])]);return{events:n?c:f}}})},p=o("left",g.setToLedge),q=o("right",g.setToRedge),r=f.required({name:"thumb",defaults:j.constant({dom:{styles:{position:"absolute"}}}),overrides:function(a){return{events:d.derive([d.redirectToPart(e.touchstart(),a,"spectrum"),d.redirectToPart(e.touchmove(),a,"spectrum"),d.redirectToPart(e.touchend(),a,"spectrum")])}}}),s=f.required({schema:[h.state("mouseIsDown",function(){return i(!1)})],name:"spectrum",overrides:function(f){var h=function(a,b){var c=a.element().dom().getBoundingClientRect();g.setXFromEvent(a,f,c,b)},i=d.derive([d.run(e.touchstart(),h),d.run(e.touchmove(),h)]),j=d.derive([d.run(e.mousedown(),h),d.run(e.mousemove(),function(a,b){f.mouseIsDown().get()&&h(a,b)})]);return{behaviours:a.derive(n?[]:[c.config({mode:"special",onLeft:function(a){return g.moveLeft(a,f),k.some(!0)},onRight:function(a){return g.moveRight(a,f),k.some(!0)}}),b.config({})]),events:n?i:j}}});return[p,q,r,s]}),g("55",["29","5","6","7"],function(a,b,c,d){var e=d.detect().deviceType.isTouch();return[a.strict("min"),a.strict("max"),a.defaulted("stepSize",1),a.defaulted("onChange",c.noop),a.defaulted("onInit",c.noop),a.defaulted("onDragStart",c.noop),a.defaulted("onDragEnd",c.noop),a.defaulted("snapToGrid",!1),a.option("snapStart"),a.strict("getInitialValue"),a.defaulted("sliderBehaviours",{}),a.state("value",function(a){return b(a.min)})].concat(e?[]:[a.state("mouseIsDown",function(){return b(!1)})])}),g("5b",[],function(){var a=function(a,b,c){b.store().manager().onLoad(a,b,c)},b=function(a,b,c){b.store().manager().onUnload(a,b,c)},c=function(a,b,c,d){b.store().manager().setValue(a,b,c,d)},d=function(a,b,c){return b.store().manager().getValue(a,b,c)};return{onLoad:a,onUnload:b,setValue:c,getValue:d}}),g("5a",["3d","27","5b"],function(a,b,c){var d=function(d,e){var f=d.resetOnDom()?[a.runOnAttached(function(a,b){c.onLoad(a,d,e)}),a.runOnDetached(function(a,b){c.onUnload(a,d,e)})]:[b.loadEvent(d,e,c.onLoad)];return a.derive(f)};return{events:d}}),g("5d",["4g","5"],function(a,b){var c=function(){var c=b(null),d=function(){return{mode:"memory",value:c.get()}},e=function(){return null===c.get()},f=function(){c.set(null)};return a({set:c.set,get:c.get,isNotSet:e,clear:f,readState:d})},d=function(){var b=function(){};return a({readState:b})},e=function(){var c=b({}),d=function(){return{mode:"dataset",dataset:c.get()}};return a({readState:d,set:c.set,get:c.get})},f=function(a){return a.store().manager().state(a)};return{memory:c,dataset:e,manual:d,init:f}}),g("75",["5d","4q","29","14","6"],function(a,b,c,d,e){var f=function(a,b,c,d){b.store().getDataKey();c.set({}),b.store().setData()(a,d),b.onSetValue()(a,d)},g=function(a,b,c){var e=b.store().getDataKey()(a),f=c.get();return d.readOptFrom(f,e).fold(function(){return b.store().getFallbackEntry()(e)},function(a){return a})},h=function(a,b,c){b.store().initialValue().each(function(d){f(a,b,c,d)})},i=function(a,b,c){c.set({})};return[c.option("initialValue"),c.strict("getFallbackEntry"),c.strict("getDataKey"),c.strict("setData"),b.output("manager",{setValue:f,getValue:g,onLoad:h,onUnload:i,state:a.dataset})]}),g("76",["28","4q","29","6"],function(a,b,c,d){var e=function(a,b,c){return b.store().getValue()(a)},f=function(a,b,c,d){b.store().setValue()(a,d),b.onSetValue()(a,d)},g=function(a,b,c){b.store().initialValue().each(function(c){b.store().setValue()(a,c)})};return[c.strict("getValue"),c.defaulted("setValue",d.noop),c.option("initialValue"),b.output("manager",{setValue:f,getValue:e,onLoad:g,onUnload:d.noop,state:a.init})]}),g("77",["5d","4q","29"],function(a,b,c){var d=function(a,b,c,d){c.set(d),b.onSetValue()(a,d)},e=function(a,b,c){return c.get()},f=function(a,b,c){b.store().initialValue().each(function(a){c.isNotSet()&&c.set(a)})},g=function(a,b,c){c.clear()};return[c.option("initialValue"),b.output("manager",{setValue:d,getValue:e,onLoad:f,onUnload:g,state:a.memory})]}),g("5c",["75","76","77","4q","29","2e"],function(a,b,c,d,e,f){return[e.defaultedOf("store",{mode:"memory"},f.choose("mode",{memory:c,manual:b,dataset:a})),d.onHandler("onSetValue"),e.defaulted("resetOnDom",!1)]}),g("3g",["q","5a","5b","5c","5d"],function(a,b,c,d,e){var f=a.create({fields:d,name:"representing",active:b,apis:c,extra:{setValueFrom:function(a,b){var c=f.getValue(b);f.setValue(a,c)}},state:e});return f}),g("5m",["39","78"],function(a,b){var c=b("width",function(a){return a.dom().offsetWidth}),d=function(a,b){c.set(a,b)},e=function(a){return c.get(a)},f=function(a){return c.getOuter(a)},g=function(b,d){var e=["margin-left","border-left-width","padding-left","padding-right","border-right-width","margin-right"],f=c.max(b,d,e);a.set(b,"max-width",f+"px")};return{set:d,get:e,getOuter:f,setMax:g}}),g("56",["q","33","3g","3d","2g","52","74","y","6","w","z","7","39","5m"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=l.detect().deviceType.isTouch(),p=function(l,p,q,r){var s=l.max()-l.min(),t=function(a){var b=a.element().dom().getBoundingClientRect();return(b.left+b.right)/2},u=function(a){return f.getPartOrDie(a,l,"thumb")},v=function(a,b,c){var d=c.value().get();return dc.max()?f.getPart(a,c,"right-edge").fold(function(){return b.width},function(a){return t(a)-b.left}):(c.value().get()-c.min())/s*b.width},w=function(a){var b=f.getPartOrDie(a,l,"spectrum"),c=b.element().dom().getBoundingClientRect(),d=a.element().dom().getBoundingClientRect(),e=v(a,c,l);return c.left-d.left+e},x=function(a){var b=w(a),c=u(a),d=n.get(c.element())/2;m.set(c.element(),"left",b-d+"px")},y=function(a,b){var c=l.value().get(),d=u(a);return c!==b||m.getRaw(d.element(),"left").isNone()?(l.value().set(b),x(a),l.onChange()(a,d,b),k.some(!0)):k.none()},z=function(a){y(a,l.min(),k.none())},A=function(a){y(a,l.max(),k.none())},B=o?[d.run(e.touchstart(),function(a,b){l.onDragStart()(a,u(a))}),d.run(e.touchend(),function(a,b){l.onDragEnd()(a,u(a))})]:[d.run(e.mousedown(),function(a,b){b.stop(),l.onDragStart()(a,u(a)),l.mouseIsDown().set(!0)}),d.run(e.mouseup(),function(a,b){l.onDragEnd()(a,u(a)),l.mouseIsDown().set(!1)})];return{uid:l.uid(),dom:l.dom(),components:p,behaviours:j.deepMerge(a.derive(h.flatten([o?[]:[b.config({mode:"special",focusIn:function(a){return f.getPart(a,l,"spectrum").map(b.focusIn).map(i.constant(!0))}})],[c.config({store:{mode:"manual",getValue:function(a){return l.value().get()}}})]])),l.sliderBehaviours()),events:d.derive([d.run(g.changeEvent(),function(a,b){y(a,b.event().value())}),d.runOnAttached(function(a,b){l.value().set(l.getInitialValue()());var c=u(a);x(a),l.onInit()(a,c,l.value().get())})].concat(B)),apis:{resetToMin:z,resetToMax:A,refresh:x},domModification:{styles:{position:"relative"}}}};return{sketch:p}}),g("38",["34","54","55","56","1w"],function(a,b,c,d,e){return a.composite({name:"Slider",configFields:c,partFields:b,factory:d.sketch,apis:{resetToMin:function(a,b){a.resetToMin(b)},resetToMax:function(a,b){a.resetToMax(b)},refresh:function(a,b){a.refresh(b)}}})}),g("3a",["l"],function(a){var b=function(b,c,d){return a.forToolbar(c,function(){var a=d();b.setContextToolbar([{label:c+" group",items:a}])},{})};return{button:b}}),g("1p",["q","1f","1g","38","39","1l","i","3a","1o"],function(a,b,c,d,e,f,g,h,i){var j=-1,k=function(b){var h=function(a){return a<0?"black":a>360?"white":"hsl("+a+", 100%, 50%)"},j=function(a,b,c){var d=h(c);e.set(b.element(),"background-color",d)},k=function(a,c,d){var f=h(d);e.set(c.element(),"background-color",f),b.onChange(a,c,f)};return d.sketch({dom:i.dom('

          '),components:[d.parts()["left-edge"](i.spec('
          ')),d.parts().spectrum({dom:i.dom('
          '),components:[i.spec('
          ')],behaviours:a.derive([c.config({toggleClass:g.resolve("thumb-active")})])}),d.parts()["right-edge"](i.spec('
          ')),d.parts().thumb({dom:i.dom('
          '),behaviours:a.derive([c.config({toggleClass:g.resolve("thumb-active")})])})],onChange:k,onDragStart:function(a,b){c.on(b)},onDragEnd:function(a,b){c.off(b)},onInit:j,stepSize:10,min:0,max:360,getInitialValue:b.getInitialValue,sliderBehaviours:a.derive([f.orientation(d.refresh)])})},l=function(a){return[k(a)]},m=function(a,b){var c={onChange:function(a,c,d){b.undoManager.transact(function(){b.formatter.apply("forecolor",{value:d}),b.nodeChanged()})},getInitialValue:function(){return j}};return h.button(a,"color",function(){return l(c)})};return{makeItems:l,sketch:m}}),g("3b",["q","1f","1g","38","29","2e","1l","i","1o"],function(a,b,c,d,e,f,g,h,i){var j=f.objOfOnly([e.strict("getInitialValue"),e.strict("onChange"),e.strict("category"),e.strict("sizes")]),k=function(b){var e=f.asRawOrDie("SizeSlider",j,b),k=function(a){return a>=0&&a'),components:[i.spec('
          ')]}),d.parts().thumb({dom:i.dom('
          '),behaviours:a.derive([c.config({toggleClass:h.resolve("thumb-active")})])})]})};return{sketch:k}}),g("58",["1i","6","z","a"],function(a,b,c,d){var e=function(e,f,g){for(var h=e.dom(),i=a.isFunction(g)?g:b.constant(!1);h.parentNode;){h=h.parentNode;var j=d.fromDom(h),k=f(j);if(k.isSome())return k;if(i(j))break}return c.none()},f=function(a,b,d){var f=b(a);return f.orThunk(function(){return d(a)?c.none():e(a,b,d)})};return{ancestor:e,closest:f}}),g("3c",["y","6","z","1a","a","b","39","58","10"],function(a,b,c,d,e,f,g,h,i){var j=["9px","10px","11px","12px","14px","16px","18px","20px","24px","32px","36px"],k="medium",l=2,m=function(a){return c.from(j[a])},n=function(b){return a.findIndex(j,function(a){return a===b})},o=function(a,b){var d=f.isElement(b)?c.some(b):i.parent(b);return d.map(function(b){var c=h.closest(b,function(a){return g.getRaw(a,"font-size")},a);return c.getOrThunk(function(){return g.get(b,"font-size")})}).getOr("")},p=function(b){var c=b.selection.getStart(),f=e.fromDom(c),g=e.fromDom(b.getBody()),h=function(a){return d.eq(g,a)},i=o(h,f);return a.find(j,function(a){return i===a}).getOr(k)},q=function(a,b){var c=p(a);c!==b&&a.execCommand("fontSize",!1,b)},r=function(a){var b=p(a);return n(b).getOr(l)},s=function(a,b){m(b).each(function(b){q(a,b)})};return{candidates:b.constant(j),get:r,apply:s}}),g("1q",["3b","3a","3c","1o"],function(a,b,c,d){var e=c.candidates(),f=function(b){return a.sketch({onChange:b.onChange,sizes:e,category:"font",getInitialValue:b.getInitialValue})},g=function(a){return[d.spec(''),f(a),d.spec('')]},h=function(a,d){var e={onChange:function(a){c.apply(d,a)},getInitialValue:function(){return c.get(d)}};return b.button(a,"font-size",function(){return g(e)})};return{makeItems:g,sketch:h}});g("79",[],function(){function a(a,b){return e(document.createElement("canvas"),a,b)}function b(b){var d,e;return d=a(b.width,b.height),e=c(d),e.drawImage(b,0,0),d}function c(a){return a.getContext("2d")}function d(a){var b=null;try{b=a.getContext("webgl")||a.getContext("experimental-webgl")}catch(a){}return b||(b=null),b}function e(a,b,c){return a.width=b,a.height=c,a}return{create:a,clone:b,resize:e,get2dContext:c,get3dContext:d}});g("7a",[],function(){function a(a){return a.naturalWidth||a.width}function b(a){return a.naturalHeight||a.height}return{getWidth:a,getHeight:b}}),g("7b",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof b)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(b){return void a.reject(b)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"==typeof b||"function"==typeof b)){var c=b.then;if("function"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(a){e.call(this,a)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a'),components:[g.asSpec()],action:function(a){var b=g.get(a);b.element().dom().click()}})};return{sketch:k}}),g("5e",[],function(){var a=function(a){return a.dom().textContent},b=function(a,b){a.dom().textContent=b};return{get:a,set:b}}),g("3h",["6","z","a","4i","5e","4u"],function(a,b,c,d,e,f){var g=function(a){return a.length>0},h=function(a){return void 0===a||null===a?"":a},i=function(a){var c=a.selection.getContent({format:"text"});return{url:"",text:c,title:"",target:"",link:b.none()}},j=function(a){var c=e.get(a),f=d.get(a,"href"),g=d.get(a,"title"),i=d.get(a,"target");return{url:h(f),text:c!==f?h(c):"",title:h(g),target:h(i),link:b.some(a)}},k=function(a){return q(a).fold(function(){return i(a)},function(a){return j(a)})},l=function(a){var b=d.get(a,"href"),c=e.get(a);return b===c},m=function(a,c,d){return d.text.filter(g).fold(function(){return l(a)?b.some(c):b.none()},b.some)},n=function(b,c){var d=c.link.bind(a.identity);d.each(function(a){b.execCommand("unlink")})},o=function(a,b){var c={};return c.href=a,b.title.filter(g).each(function(a){c.title=a}),b.target.filter(g).each(function(a){c.target=a}),c},p=function(b,c){c.url.filter(g).fold(function(){n(b,c)},function(f){var h=o(f,c),i=c.link.bind(a.identity);i.fold(function(){var a=c.text.filter(g).getOr(f);b.insertContent(b.dom.createHTML("a",h,b.dom.encode(a)))},function(a){var b=m(a,f,c);d.setAll(a,h),b.each(function(b){e.set(a,b)})})})},q=function(a){var b=c.fromDom(a.selection.getStart());return f.closest(b,"a")};return{getInfo:k,applyInfo:p,query:q}}),g("3u",["q","3d","29","6"],function(a,b,c,d){var e=function(e,f){var g=b.derive(f);return a.create({fields:[c.strict("enabled")],name:e,active:{events:d.constant(g)}})},f=function(b,c){var f=e(b,c);return{key:b,value:{config:{},me:f,configAsRaw:d.constant({}),initialConfig:{},state:a.noState()}}};return{events:e,config:f}}),g("7g",[],function(){var a=function(a,b,c){return b.find()(a)};return{getCurrent:a}}),g("7h",["29"],function(a){return[a.strict("find")]}),g("5f",["q","7g","7h"],function(a,b,c){return a.create({fields:c,name:"composing",apis:b})}),g("3v",["34","29","w"],function(a,b,c){var d=function(a,b){return{uid:a.uid(),dom:c.deepMerge({tag:"div",attributes:{role:"presentation"}},a.dom()),components:a.components(),behaviours:a.containerBehaviours(),events:a.events(),domModification:a.domModification(),eventOrder:a.eventOrder()}};return a.single({name:"Container",factory:d,configFields:[b.defaulted("components",[]),b.defaulted("containerBehaviours",{}),b.defaulted("events",{}),b.defaulted("domModification",{}),b.defaulted("eventOrder",{})]})}),g("5g",["q","5f","3g","3d","34","29","z"],function(a,b,c,d,e,f,g){var h=function(e,f){return{uid:e.uid(),dom:e.dom(),behaviours:a.derive([c.config({store:{mode:"memory",initialValue:e.getInitialValue()()}}),b.config({find:g.some})]),events:d.derive([d.runOnAttached(function(a,b){c.setValue(a,e.getInitialValue()())})])}};return e.single({name:"DataField",factory:h,configFields:[f.strict("uid"),f.strict("dom"),f.strict("getInitialValue")]})}),g("87",["4b","14"],function(a,b){var c=function(c,d){return a.nu({attributes:b.wrapAll([{key:d.tabAttr(),value:"true"}])})};return{exhibit:c}}),g("88",["29"],function(a){return[a.defaulted("tabAttr","data-alloy-tabstop")]}),g("64",["q","87","88"],function(a,b,c){return a.create({fields:c,name:"tabstopping",active:b})}),g("93",["v"],function(a){var b=function(a){return a.dom().value},c=function(b,c){if(void 0===c)throw new a("Value.set was undefined");b.dom().value=c};return{set:c,get:b}}),g("7i",["q","32","3g","64","4q","29","14","6","w","93"],function(a,b,c,d,e,f,g,h,i,j){var k=[f.option("data"),f.defaulted("inputAttributes",{}),f.defaulted("inputStyles",{}),f.defaulted("type","input"),f.defaulted("tag","input"),e.onHandler("onSetValue"),f.defaulted("styles",{}),f.option("placeholder"),f.defaulted("eventOrder",{}),f.defaulted("hasTabstop",!0),f.defaulted("inputBehaviours",{}),f.defaulted("selectOnFocus",!0)],l=function(e){return i.deepMerge(a.derive([c.config({store:{mode:"manual",initialValue:e.data().getOr(void 0),getValue:function(a){return j.get(a.element())},setValue:function(a,b){var c=j.get(a.element());c!==b&&j.set(a.element(),b)}},onSetValue:e.onSetValue()}),b.config({onFocus:e.selectOnFocus()===!1?h.noop:function(a){var b=a.element(),c=j.get(b);b.dom().setSelectionRange(0,c.length)}}),e.hasTabstop()?d.config({}):d.revoke()]),e.inputBehaviours())},m=function(a){return{tag:a.tag(),attributes:i.deepMerge(g.wrapAll([{key:"type",value:a.type()}].concat(a.placeholder().map(function(a){return{key:"placeholder",value:a}}).toArray())),a.inputAttributes()),styles:a.inputStyles()}};return{schema:h.constant(k),behaviours:l,dom:m}}),g("5h",["34","7i"],function(a,b){var c=function(a,c){return{uid:a.uid(),dom:b.dom(a),components:[],behaviours:b.behaviours(a),eventOrder:a.eventOrder()}};return a.single({name:"Input",configFields:b.schema(),factory:c})}),g("3i",["3u","q","5f","3g","1g","1h","3d","2","2g","1n","3v","5g","5h","z","i","1o"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q="input-clearing",r=function(l,r){var s=f.record(m.sketch({placeholder:r,onSetValue:function(a,b){h.emit(a,i.input())},inputBehaviours:b.derive([c.config({find:n.some})]),selectOnFocus:!1})),t=f.record(j.sketch({dom:p.dom(''),action:function(a){var b=s.get(a);d.setValue(b,"")}}));return{name:l,spec:k.sketch({dom:p.dom('
          '),components:[s.asSpec(),t.asSpec()],containerBehaviours:b.derive([e.config({toggleClass:o.resolve("input-container-empty")}),c.config({find:function(a){return n.some(s.get(a))}}),a.config(q,[g.run(i.input(),function(a){var b=s.get(a),c=d.getValue(b),f=c.length>0?e.off:e.on;f(a)})])])})}},s=function(a){return{name:a,spec:l.sketch({dom:{tag:"span",styles:{display:"none"}},getInitialValue:function(){return n.none()}})}};return{field:r,hidden:s}}),g("7k",["y","4i","2f","b"],function(a,b,c,d){var e=["input","button","textarea"],f=function(a,b,c){b.disabled()&&n(a,b,c)},g=function(b){return a.contains(e,d.name(b.element()))},h=function(a){return b.has(a.element(),"disabled")},i=function(a){b.set(a.element(),"disabled","disabled")},j=function(a){b.remove(a.element(),"disabled")},k=function(a){return"true"===b.get(a.element(),"aria-disabled")},l=function(a){b.set(a.element(),"aria-disabled","true")},m=function(a){b.set(a.element(),"aria-disabled","false")},n=function(a,b,d){b.disableClass().each(function(b){c.add(a.element(),b)});var e=g(a)?i:l;e(a)},o=function(a,b,d){b.disableClass().each(function(b){c.remove(a.element(),b)});var e=g(a)?j:m;e(a)},p=function(a){return g(a)?h(a):k(a)};return{enable:o,disable:n,isDisabled:p,onLoad:f}}),g("7j",["3d","t","27","7k","4b","y"],function(a,b,c,d,e,f){var g=function(a,b,c){return e.nu({classes:b.disabled()?b.disableClass().map(f.pure).getOr([]):[]})},h=function(e,f){return a.derive([a.abort(b.execute(),function(a,b){return d.isDisabled(a,e,f)}),c.loadEvent(e,f,d.onLoad)])};return{exhibit:g,events:h}}),g("7l",["29"],function(a){return[a.defaulted("disabled",!1),a.option("disableClass")]}),g("5i",["q","7j","7k","7l"],function(a,b,c,d){return a.create({fields:d,name:"disabling",active:b,apis:c})}),g("5k",["q","5f","3g","51","52","53","29","y","w","x"],function(a,b,c,d,e,f,g,h,i,j){var k="form",l=[g.defaulted("formBehaviours",{})],m=function(a){return""},n=function(a){var b=function(){var a=[],b=function(b,c){return a.push(b),e.generateOne(k,m(b),c)};return{field:b,record:function(){return a}}}(),c=a(b),g=b.record(),i=h.map(g,function(a){return f.required({name:a,pname:m(a)})});return d.composite(k,l,i,o,c)},o=function(d,f,g){return i.deepMerge({"debug.sketcher":{Form:g},uid:d.uid(),dom:d.dom(),components:f,behaviours:i.deepMerge(a.derive([c.config({store:{mode:"manual",getValue:function(a){var f=e.getAllParts(a,d);return j.map(f,function(a,d){return a().bind(b.getCurrent).map(c.getValue)})},setValue:function(a,f){j.each(f,function(f,g){e.getPart(a,d,g).each(function(a){b.getCurrent(a).each(function(a){c.setValue(a,f)})})})}}})]),d.formBehaviours())})};return{sketch:n}}),g("1z",["z","5"],function(a,b){var c=function(c){var d=b(a.none()),e=function(){d.get().each(c)},f=function(){e(),d.set(a.none())},g=function(b){e(),d.set(a.some(b))},h=function(){return d.get().isSome()};return{clear:f,isSet:h,set:g}},d=function(){return c(function(a){a.destroy()})},e=function(){return c(function(a){a.unbind()})},f=function(){var c=b(a.none()),d=function(){c.get().each(function(a){a.destroy()})},e=function(){d(),c.set(a.none())},f=function(b){d(),c.set(a.some(b))},g=function(a){c.get().each(a)},h=function(){return c.get().isSome()};return{clear:e,isSet:h,set:f,run:g}},g=function(){var c=b(a.none()),d=function(){c.set(a.none())},e=function(b){c.set(a.some(b))},f=function(a){c.get().each(a)},g=function(){return c.get().isSome()};return{clear:d,set:e,isSet:g,on:f}};return{destroyable:d,unbindable:e,api:f,value:g}}),g("5n",[],function(){var a=1,b=-1,c=0,d=function(a){return{xValue:a,points:[]}},e=function(c,d){if(d===c.xValue)return c;var e=d-c.xValue>0?a:b,f={direction:e,xValue:d},g=function(){if(0===c.points.length)return[];var a=c.points[c.points.length-1];return a.direction===e?c.points.slice(0,c.points.length-1):c.points}();return{xValue:d,points:g.concat([f])}},f=function(d){if(0===d.points.length)return c;var e=d.points[0].direction,f=d.points[d.points.length-1].direction;return e===b&&f===b?b:e===a&&f==a?a:c};return{init:d,move:e,complete:f}}),g("3j",["3u","q","5i","5j","33","1f","3g","1h","3d","2","2g","1n","3v","5k","29","2e","y","5","z","1z","39","5l","4u","5m","1l","5n","i","1o"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B){var C=function(f){var C="navigateEvent",D="serializer-wrapper-events",E="form-events",F=p.objOf([o.strict("fields"),o.defaulted("maxFieldIndex",f.fields.length-1),o.strict("onExecute"),o.strict("getInitialValue"),o.state("state",function(){return{dialogSwipeState:t.value(),currentScreen:r(0)}})]),G=p.asRawOrDie("SerialisedDialog",F,f),H=function(a,d,e){return l.sketch({dom:B.dom(''),action:function(b){j.emitWith(b,C,{direction:a})},buttonBehaviours:b.derive([c.config({disableClass:A.resolve("toolbar-navigation-disabled"),disabled:!e})])})},I=function(a,b){w.descendant(a.element(),"."+A.resolve("serialised-dialog-chain")).each(function(a){u.set(a,"left",-G.state.currentScreen.get()*b.width+"px")})},J=function(a,b){var c=v.descendants(a.element(),"."+A.resolve("serialised-dialog-screen"));w.descendant(a.element(),"."+A.resolve("serialised-dialog-chain")).each(function(a){G.state.currentScreen.get()+b>=0&&G.state.currentScreen.get()+b'),components:[m.sketch({dom:B.dom('
          '),components:q.map(G.fields,function(a,b){return b<=G.maxFieldIndex?m.sketch({dom:B.dom('
          '),components:q.flatten([[H(-1,"previous",b>0)],[c.field(a.name,a.spec)],[H(1,"next",b'),behaviours:b.derive([d.config({highlightClass:A.resolve("dot-active"),itemClass:A.resolve("dot-item")})]),components:q.bind(G.fields,function(a,b){return b<=G.maxFieldIndex?[B.spec('
          ')]:[]})});return{dom:B.dom('
          '),components:[M.asSpec(),N.asSpec()],behaviours:b.derive([e.config({mode:"special",focusIn:function(a){var b=M.get(a);e.focusIn(b)}}),a.config(D,[i.run(k.touchstart(),function(a,b){G.state.dialogSwipeState.set(z.init(b.event().raw().touches[0].clientX))}),i.run(k.touchmove(),function(a,b){G.state.dialogSwipeState.on(function(a){b.event().prevent(),G.state.dialogSwipeState.set(z.move(a,b.event().raw().touches[0].clientX))})}),i.run(k.touchend(),function(a){G.state.dialogSwipeState.on(function(b){var c=M.get(a),d=-1*z.complete(b);J(c,d)})})])])}};return{sketch:C}}),g("3k",["6","7"],function(a,b){var c=b.detect(),d=function(a,b){var c=b.selection.getRng();a(),b.selection.setRng(c)},e=function(b,e){var f=c.os.isAndroid()?d:a.apply;f(e,b)};return{forAndroid:e}}),g("1s",["3g","z","17","3h","l","3i","3j","3k"],function(a,b,c,d,e,f,g,h){var i=c.cached(function(c,e){return[{label:"the link group",items:[g.sketch({fields:[f.field("url","Type or paste URL"),f.field("text","Link text"),f.field("title","Link title"),f.field("target","Link target"),f.hidden("link")],maxFieldIndex:["url","text","title","target"].length-1,getInitialValue:function(){return b.some(d.getInfo(e))},onExecute:function(b){var f=a.getValue(b);d.applyInfo(e,f),c.restoreToolbar(),e.focus()}})]}]}),j=function(a,b){return e.forToolbarStateAction(b,"link","link",function(){var c=i(a,b);a.setContextToolbar(c),h.forAndroid(b,function(){a.focusToolbar()}),d.query(b).each(function(a){b.selection.select(a.dom())})})};return{sketch:j}}),g("3l",[],function(){return[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}]}),g("7q",["14","6","z","4i","2f"],function(a,b,c,d,e){var f=function(c,d,e,f){return a.readOptFrom(d.routes(),f.start()).map(b.apply).bind(function(c){return a.readOptFrom(c,f.destination()).map(b.apply)})},g=function(a,b,c){var d=k(a,b,c);return d.bind(function(d){return h(a,b,c,d)})},h=function(a,c,d,e){return f(a,c,d,e).bind(function(a){return a.transition().map(function(c){return{transition:b.constant(c),route:b.constant(a)}})})},i=function(a,b,c){g(a,b,c).each(function(c){var f=c.transition();e.remove(a.element(),f.transitionClass()),d.remove(a.element(),b.destinationAttr())})},j=function(a,c,e,f){return{start:b.constant(d.get(a.element(),c.stateAttr())),destination:b.constant(f)}},k=function(a,e,f){var g=a.element();return d.has(g,e.destinationAttr())?c.some({start:b.constant(d.get(a.element(),e.stateAttr())),destination:b.constant(d.get(a.element(),e.destinationAttr()))}):c.none()},l=function(a,b,c,e){i(a,b,c),d.has(a.element(),b.stateAttr())&&d.get(a.element(),b.stateAttr())!==e&&b.onFinish()(a,e),d.set(a.element(),b.stateAttr(),e)},m=function(a,b,c,e){d.has(a.element(),b.destinationAttr())&&(d.set(a.element(),b.stateAttr(),d.get(a.element(),b.destinationAttr())),d.remove(a.element(),b.destinationAttr()))},n=function(a,b,c,f){m(a,b,c,f);var g=j(a,b,c,f);h(a,b,c,g).fold(function(){l(a,b,c,f)},function(g){i(a,b,c);var h=g.transition();e.add(a.element(),h.transitionClass()),d.set(a.element(),b.destinationAttr(),f)})},o=function(a,b,e){var f=a.element();return d.has(f,b.stateAttr())?c.some(d.get(f,b.stateAttr())):c.none()};return{findRoute:f,disableTransition:i,getCurrentRoute:k,jumpTo:l,progressTo:n,getState:o}}),g("7p",["3d","2g","7q"],function(a,b,c){var d=function(d,e){return a.derive([a.run(b.transitionend(),function(a,b){var f=b.event().raw();c.getCurrentRoute(a,d,e).each(function(b){c.findRoute(a,d,e,b).each(function(g){g.transition().each(function(g){f.propertyName===g.property()&&(c.jumpTo(a,d,e,b.destination()),d.onTransition()(a,b))})})})}),a.runOnAttached(function(a,b){c.jumpTo(a,d,e,d.initialState())})])};return{events:d}}),g("7r",["4q","29","2e","48"],function(a,b,c,d){return[b.defaulted("destinationAttr","data-transitioning-destination"),b.defaulted("stateAttr","data-transitioning-state"),b.strict("initialState"),a.onHandler("onTransition"),a.onHandler("onFinish"),b.strictOf("routes",c.setOf(d.value,c.setOf(d.value,c.objOfOnly([b.optionObjOfOnly("transition",[b.strict("property"),b.strict("transitionClass")])]))))]}),g("5o",["q","7p","7q","7r","14","x"],function(a,b,c,d,e,f){var g=function(a){var b={};return f.each(a,function(a,c){var d=c.split("<->");b[d[0]]=e.wrap(d[1],a),b[d[1]]=e.wrap(d[0],a)}),b},h=function(a,b,c){return e.wrapAll([{key:a,value:e.wrap(b,c)},{key:b,value:e.wrap(a,c)}])},i=function(a,b,c,d){return e.wrapAll([{key:a,value:e.wrapAll([{key:b,value:d},{key:c,value:d}])},{key:b,value:e.wrapAll([{key:a,value:d},{key:c,value:d}])},{key:c,value:e.wrapAll([{key:a,value:d},{key:b,value:d}])}])};return a.create({fields:d,name:"transitioning",active:b,apis:c,extra:{createRoutes:g,createBistate:h,createTristate:i}})}),g("7t",["28","4c","29","2e","y","6","x","6n","v"],function(a,b,c,d,e,f,g,h,i){var j=function(j,k){var l=e.map(k,function(e){return c.field(e.name(),e.name(),b.asOption(),d.objOf([c.strict("config"),c.defaulted("state",a)]))}),m=d.asStruct("component.behaviours",d.objOf(l),j.behaviours).fold(function(a){throw new i(d.formatError(a)+"\nComplete spec:\n"+h.stringify(j,null,2))},f.identity);return{list:k,data:g.map(m,function(a){var b=a();return f.constant(b.map(function(a){return{config:a.config(),state:a.state().init(a.config())}}))})}},k=function(a){return a.list},l=function(a){return a.data};return{generateFrom:j,getBehaviours:k,getData:l}}),g("7s",["7t","14","y","x","v"],function(a,b,c,d,e){var f=function(a){var e=b.readOptFrom(a,"behaviours").getOr({}),f=c.filter(d.keys(e),function(a){return void 0!==e[a]});return c.map(f,function(b){return a.behaviours[b].me})},g=function(b,c){return a.generateFrom(b,c)},h=function(a){var b=f(a);return g(a,b)};return{generate:h,generateFrom:g}}),g("5q",["6q"],function(a){return a.exactly(["getSystem","config","spec","connect","disconnect","element","syncComponents","readState","components","events"])}),g("6a",["6q"],function(a){return a.exactly(["debugInfo","triggerFocus","triggerEvent","triggerEscape","addToWorld","removeFromWorld","addToGui","removeFromGui","build","getByUid","getByDom","broadcast","broadcastOn"])}),g("5r",["6a","13","6","v"],function(a,b,c,d){return function(e){var f=function(a){return function(){throw new d("The component must be in a context to send: "+a+"\n"+b.element(e().element())+" is not in context.")}};return a({debugInfo:c.constant("fake"),triggerEvent:f("triggerEvent"),triggerFocus:f("triggerFocus"),triggerEscape:f("triggerEscape"),build:f("build"),addToWorld:f("addToWorld"),removeFromWorld:f("removeFromWorld"),addToGui:f("addToGui"),removeFromGui:f("removeFromGui"),getByUid:f("getByUid"),getByDom:f("getByDom"),broadcast:f("broadcast"),broadcastOn:f("broadcastOn")})}}),g("95",["14","x"],function(a,b){var c=function(c,d){var e={};return b.each(c,function(c,f){b.each(c,function(b,c){var g=a.readOr(c,[])(e);e[c]=g.concat([d(f,b)])})}),e};return{byInnerKey:c}}),g("7u",["95","4b","14","y","x","w","6n","6","48"],function(a,b,c,d,e,f,g,h,i){var j=function(a,b){return{name:h.constant(a),modification:b}},k=function(a,b){var e=d.bind(a,function(a){return a.modification().getOr([])});return i.value(c.wrap(b,e))},l=function(a,b,e){return a.length>1?i.error('Multiple behaviours have tried to change DOM "'+b+'". The guilty behaviours are: '+g.stringify(d.map(a,function(a){return a.name()}))+". At this stage, this is not supported. Future releases might provide strategies for resolving this."):0===a.length?i.value({}):i.value(a[0].modification().fold(function(){return{}},function(a){return c.wrap(b,a)}))},m=function(a,b,c,e){return i.error("Mulitple behaviours have tried to change the _"+b+'_ "'+a+'". The guilty behaviours are: '+g.stringify(d.bind(e,function(a){return void 0!==a.modification().getOr({})[b]?[a.name()]:[]}),null,2)+". This is not currently supported.")},n=function(a,b){var f=d.foldl(a,function(d,f){var g=f.modification().getOr({});return d.bind(function(d){var f=e.mapToArray(g,function(e,f){return void 0!==d[f]?m(b,f,g,a):i.value(c.wrap(f,e))});return c.consolidate(f,d)})},i.value({}));return f.map(function(a){return c.wrap(b,a)})},o={classes:k,attributes:n,styles:n,domChildren:l,defChildren:l,innerHtml:l,value:l},p=function(g,h,k,l){var m=f.deepMerge({},h);d.each(k,function(a){m[a.name()]=a.exhibit(g,l)});var n=a.byInnerKey(m,j),p=e.map(n,function(a,b){return d.bind(a,function(a){return a.modification().fold(function(){return[]},function(b){return[a]})})}),q=e.mapToArray(p,function(a,b){return c.readOptFrom(o,b).fold(function(){return i.error("Unknown field type: "+b)},function(c){return c(a,b)})}),r=c.consolidate(q,{});return r.map(b.nu)};return{combine:p}}),g("96",["6n","48","v"],function(a,b,c){var d=function(d,e,f,g){var h=f.slice(0);try{var i=h.sort(function(b,f){var h=b[e](),i=f[e](),j=g.indexOf(h),k=g.indexOf(i);if(j===-1)throw new c("The ordering for "+d+" does not have an entry for "+h+".\nOrder specified: "+a.stringify(g,null,2));if(k===-1)throw new c("The ordering for "+d+" does not have an entry for "+i+".\nOrder specified: "+a.stringify(g,null,2));return j1?f.filter(b,function(b){return f.contains(a,function(a){return a.name()===b})}).join(" > "):a[0].name();return e.wrap(c,d.nu(h,i))})});return e.consolidate(c,{})};return{combine:q}}),g("7w",["4q","6o","4b","4s","4c","29","14","2e","y","6","w","v"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(b){return h.asStruct("custom.definition",h.objOfOnly([f.field("dom","dom",e.strict(),h.objOfOnly([f.strict("tag"),f.defaulted("styles",{}),f.defaulted("classes",[]),f.defaulted("attributes",{}),f.option("value"),f.option("innerHtml")])),f.strict("components"),f.strict("uid"),f.defaulted("events",{}),f.defaulted("apis",j.constant({})),f.field("eventOrder","eventOrder",e.mergeWith({"alloy.execute":["disabling","alloy.base.behaviour","toggling"],"alloy.focus":["alloy.base.behaviour","keying","focusing"],"alloy.system.init":["alloy.base.behaviour","disabling","toggling","representing"],input:["alloy.base.behaviour","representing","streaming","invalidating"],"alloy.system.detached":["alloy.base.behaviour","representing"]}),h.anyValue()),f.option("domModification"),a.snapshot("originalSpec"),f.defaulted("debug.sketcher","unknown")]),b)},n=function(a){return g.wrap(d.idAttr(),a.uid())},o=function(a){var c={tag:a.dom().tag(),classes:a.dom().classes(),attributes:k.deepMerge(n(a),a.dom().attributes()),styles:a.dom().styles(),domChildren:i.map(a.components(),function(a){return a.element()})};return b.nu(k.deepMerge(c,a.dom().innerHtml().map(function(a){return g.wrap("innerHtml",a)}).getOr({}),a.dom().value().map(function(a){return g.wrap("value",a)}).getOr({})))},p=function(a){return a.domModification().fold(function(){return c.nu({})},c.nu)},q=function(a){return a.apis()},r=function(a){return a.events()};return{toInfo:m,toDefinition:o,toModification:p,toApis:q,toEvents:r}}),g("89",["y","2f","4j","u"],function(a,b,c,d){var e=function(c,d){a.each(d,function(a){b.add(c,a)})},f=function(c,d){a.each(d,function(a){b.remove(c,a)})},g=function(c,d){a.each(d,function(a){b.toggle(c,a)})},h=function(c,d){return a.forall(d,function(a){return b.has(c,a)})},i=function(c,d){return a.exists(d,function(a){return b.has(c,a)})},j=function(a){for(var b=a.dom().classList,c=new d(b.length),e=0;e1?f.some(a.slice(1)):f.none()})},r=function(a){return b.readOptFrom(j.get(),a)},s=function(a){return b.readOptFrom(i.get(),a)},t=function(a){var b=l.get()(i.get());return c.difference(d.keys(b),a)},u=function(){return k.get().bind(s)},v=function(){return i.get()};return{setContents:o,expand:p,refresh:r,collapse:q,lookupMenu:s,otherMenus:t,getPrimary:u,getMenus:v,clear:m,isClear:n}}}),g("80",["8v","q","5f","5j","33","1y","3g","3q","3d","2","t","97","5u","9d","9b","9c","14","y","6","w","x","z","15","12","2f","89","4u"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A){var B=function(s,B){var C=function(a,b){return u.map(b,function(b,c){var d=m.sketch(t.deepMerge(b,{value:c,items:b.items,markers:q.narrow(B.markers,["item","selectedItem"]),fakeFocus:s.fakeFocus(),onHighlight:s.onHighlight(),focusManager:s.fakeFocus()?l.highlights():l.dom()}));return a.getSystem().build(d)})},D=n(),E=function(a){var b=C(a,s.data().menus());return D.setContents(s.data().primary(),b,s.data().expansions(),function(b){return G(a,b)}),D.getPrimary()},F=function(a){return g.getValue(a).value},G=function(a,b){return u.map(s.data().menus(),function(a,b){return r.bind(a.items,function(a){return"separator"===a.type?[]:[a.data.value]})})},H=function(a,b){d.highlight(a,b),d.getHighlighted(b).orThunk(function(){return d.getFirst(b)}).each(function(b){j.dispatch(a,b.element(),k.focusItem())})},I=function(a,b){return w.cat(r.map(b,a.lookupMenu))},J=function(a,b,c){return v.from(c[0]).bind(b.lookupMenu).map(function(d){var e=I(b,c.slice(1));r.each(e,function(a){y.add(a.element(),s.markers().backgroundMenu())}),x.inBody(d.element())||f.append(a,h.premade(d)),z.remove(d.element(),[s.markers().backgroundMenu()]),H(a,d);var g=I(b,b.otherMenus(c));return r.each(g,function(b){z.remove(b.element(),[s.markers().backgroundMenu()]),s.stayInDom()||f.remove(a,b)}),d})},K=function(a,b){var c=F(b);return D.expand(c).bind(function(c){return v.from(c[0]).bind(D.lookupMenu).each(function(c){x.inBody(c.element())||f.append(a,h.premade(c)),s.onOpenSubmenu()(a,b,c),d.highlightFirst(c)}),J(a,D,c)})},L=function(a,b){var c=F(b);return D.collapse(c).bind(function(c){return J(a,D,c).map(function(c){return s.onCollapseMenu()(a,b,c),c})})},M=function(a,b){var c=F(b);return D.refresh(c).bind(function(b){return J(a,D,b)})},N=function(b,c){return a.inside(c.element())?v.none():K(b,c)},O=function(b,c){return a.inside(c.element())?v.none():L(b,c)},P=function(a,b){return L(a,b).orThunk(function(){return s.onEscape()(a,b)})},Q=function(a){return function(b,c){return A.closest(c.getSource(),"."+s.markers().item()).bind(function(c){return b.getSystem().getByDom(c).bind(function(c){return a(b,c)})})}},R=i.derive([i.run(p.focus(),function(a,b){var c=b.event().menu();d.highlight(a,c)}),i.runOnExecute(function(a,b){var c=b.event().target();return a.getSystem().getByDom(c).bind(function(b){var c=F(b);return 0===c.indexOf("collapse-item")?L(a,b):K(a,b).orThunk(function(){return s.onExecute()(a,b)})})}),i.runOnAttached(function(a,b){E(a).each(function(b){f.append(a,h.premade(b)),s.openImmediately()&&(H(a,b),s.onOpenMenu()(a,b))})})].concat(s.navigateOnHover()?[i.run(o.hover(),function(a,b){var c=b.event().item();M(a,c),K(a,c),s.onHover()(a,c)})]:[])),S=function(a){d.getHighlighted(a).each(function(b){d.getHighlighted(b).each(function(b){L(a,b)})})};return{uid:s.uid(),dom:s.dom(),behaviours:t.deepMerge(b.derive([e.config({mode:"special",onRight:Q(N),onLeft:Q(O),onEscape:Q(P),focusIn:function(a,b){D.getPrimary().each(function(b){j.dispatch(a,b.element(),k.focusItem())})}}),d.config({highlightClass:s.markers().selectedMenu(),itemClass:s.markers().menu()}),c.config({find:function(a){return d.getHighlighted(a)}}),f.config({})]),s.tmenuBehaviours()),eventOrder:s.eventOrder(),apis:{collapseMenu:S},events:R}};return{make:B,collapseItem:s.constant("collapse-item")}}),g("5v",["34","4q","80","29","14","3f"],function(a,b,c,d,e,f){var g=function(a,b,c){return{primary:a,menus:b,expansions:c}},h=function(a,b){return{primary:a,menus:e.wrap(a,b),expansions:{}}},i=function(a){return{value:f.generate(c.collapseItem()),text:a}};return a.single({name:"TieredMenu",configFields:[b.onStrictKeyboardHandler("onExecute"),b.onStrictKeyboardHandler("onEscape"),b.onStrictHandler("onOpenMenu"),b.onStrictHandler("onOpenSubmenu"),b.onHandler("onCollapseMenu"),d.defaulted("openImmediately",!0),d.strictObjOf("data",[d.strict("primary"),d.strict("menus"),d.strict("expansions")]),d.defaulted("fakeFocus",!1),b.onHandler("onHighlight"),b.onHandler("onHover"),b.tieredMenuMarkers(),d.strict("dom"),d.defaulted("navigateOnHover",!0),d.defaulted("stayInDom",!1),d.defaulted("tmenuBehaviours",{}),d.defaulted("eventOrder",{})],apis:{collapseMenu:function(a,b){a.collapseMenu(b)}},factory:c.make,extraApis:{tieredData:g,singleData:h,collapseItem:i}})}),g("3z",["6","2f","i"],function(a,b,c){var d=c.resolve("scrollable"),e=function(a){b.add(a,d)},f=function(a){b.remove(a,d)};return{register:e,deregister:f,scrollable:a.constant(d)}}),g("3m",["3u","q","3g","1g","5o","3q","1h","3d","1n","5u","5v","14","y","w","x","39","4u","5m","1l","i","3z"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){var v=function(a){return l.readOptFrom(a,"format").getOr(a.title)},w=function(a,b){var c=y("Styles",[].concat(m.map(a.items,function(b){return x(v(b),b.title,b.isSelected(),b.getPreview(),l.hasKey(a.expansions,v(b)))})),b,!1),d=o.map(a.menus,function(c,d){var e=m.map(c,function(b){ +return x(v(b),b.title,void 0!==b.isSelected&&b.isSelected(),void 0!==b.getPreview?b.getPreview():"",l.hasKey(a.expansions,v(b)))});return y(d,e,b,!0)}),e=n.deepMerge(d,l.wrap("styles",c)),f=k.tieredData("styles",e,a.expansions);return{tmenu:f}},x=function(a,c,e,f,g){return{data:{value:a,text:c},type:"item",dom:{tag:"div",classes:g?[t.resolve("styles-item-is-menu")]:[]},toggling:{toggleOnExecute:!1,toggleClass:t.resolve("format-matches"),selected:e},itemBehaviours:b.derive(g?[]:[s.format(a,function(a,b){var c=b?d.on:d.off;c(a)})]),components:[{dom:{tag:"div",attributes:{style:f},innerHtml:c}}]}},y=function(c,d,g,l){return{value:c,dom:{tag:"div"},components:[i.sketch({dom:{tag:"div",classes:[t.resolve("styles-collapser")]},components:l?[{dom:{tag:"span",classes:[t.resolve("styles-collapse-icon")]}},f.text(c)]:[f.text(c)],action:function(a){if(l){var b=g().get(a);k.collapseMenu(b)}}}),{dom:{tag:"div",classes:[t.resolve("styles-menu-items-container")]},components:[j.parts().items({})],behaviours:b.derive([a.config("adhoc-scrollable-menu",[h.runOnAttached(function(a,b){p.set(a.element(),"overflow-y","auto"),p.set(a.element(),"-webkit-overflow-scrolling","touch"),u.register(a.element())}),h.runOnDetached(function(a){p.remove(a.element(),"overflow-y"),p.remove(a.element(),"-webkit-overflow-scrolling"),u.deregister(a.element())})])])}],items:d,menuBehaviours:b.derive([e.config({initialState:"after",routes:e.createTristate("before","current","after",{transition:{property:"transform",transitionClass:"transitioning"}})})])}},z=function(a){var b=w(a.formats,function(){return d}),d=g.record(k.sketch({dom:{tag:"div",classes:[t.resolve("styles-menu")]},components:[],fakeFocus:!0,stayInDom:!0,onExecute:function(b,d){var e=c.getValue(d);a.handle(d,e.value)},onEscape:function(){},onOpenMenu:function(a,b){var c=r.get(a.element());r.set(b.element(),c),e.jumpTo(b,"current")},onOpenSubmenu:function(a,b,c){var d=r.get(a.element()),f=q.ancestor(b.element(),'[role="menu"]').getOrDie("hacky"),g=a.getSystem().getByDom(f).getOrDie();r.set(c.element(),d),e.progressTo(g,"before"),e.jumpTo(c,"after"),e.progressTo(c,"current")},onCollapseMenu:function(a,b,c){var d=q.ancestor(b.element(),'[role="menu"]').getOrDie("hacky"),f=a.getSystem().getByDom(d).getOrDie();e.progressTo(f,"after"),e.progressTo(c,"current")},navigateOnHover:!1,openImmediately:!0,data:b.tmenu,markers:{backgroundMenu:t.resolve("styles-background-menu"),menu:t.resolve("styles-menu"),selectedMenu:t.resolve("styles-selected-menu"),item:t.resolve("styles-item"),selectedItem:t.resolve("styles-selected-item")}}));return d.asSpec()};return{sketch:z}}),g("3n",["14","y","w"],function(a,b,c){var d=function(b){var d=c.deepMerge(a.exclude(b,["items"]),{menu:!0}),e=f(b.items,b.title),g=c.deepMerge(e.menus,a.wrap(b.title,e.items)),h=c.deepMerge(e.expansions,a.wrap(b.title,b.title));return{item:d,menus:g,expansions:h}},e=function(b){return a.hasKey(b,"items")?d(b):{item:b,menus:{},expansions:{}}},f=function(a){return b.foldr(a,function(a,b){var d=e(b);return{menus:c.deepMerge(a.menus,d.menus),items:[d.item].concat(a.items),expansions:c.deepMerge(a.expansions,d.expansions)}},{menus:{},expansions:{},items:[]})};return{expand:f}}),g("1t",["1g","14","y","6","3f","w","3l","3m","3n"],function(a,b,c,d,e,f,g,h,i){var j=function(a,h){var i=function(b){return function(){return a.formatter.match(b)}},j=function(b){return function(){var c=a.formatter.getCssText(b);return c}},k=function(a){return f.deepMerge(a,{isSelected:i(a.format),getPreview:j(a.format)})},l=function(a){return f.deepMerge(a,{isSelected:d.constant(!1),getPreview:d.constant("")})},m=function(b){var c=e.generate(b.title),d=f.deepMerge(b,{format:c,isSelected:i(c),getPreview:j(c)});return a.formatter.register(c,d),d},n=b.readOptFrom(h,"style_formats").getOr(g),o=function(a){return c.map(a,function(a){if(b.hasKey(a,"items")){var c=o(a.items);return f.deepMerge(l(a),{items:c})}return b.hasKey(a,"format")?k(a):m(a)})};return o(n)},k=function(a,d){var e=function(d){return c.bind(d,function(c){if(void 0!==c.items){var d=e(c.items);return d.length>0?[c]:[]}var f=!b.hasKey(c,"format")||a.formatter.canApply(c.format);return f?[c]:[]})},f=e(d);return i.expand(f)},l=function(b,c,d){var e=k(b,c);return h.sketch({formats:e,handle:function(c,e){b.undoManager.transact(function(){a.isOn(c)?b.formatter.remove(e):b.formatter.apply(e)}),d()}})};return{register:j,ui:l}}),g("h",["q","1f","1g","1h","14","y","6","z","1i","1j","1k","1l","g","i","l","1p","1q","1r","1s","1t"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){var u=["undo","bold","italic","link","image","bullist","styleselect"],v=function(a){var b=a.replace(/\|/g," ").trim();return b.length>0?b.split(/\s+/):[]},w=function(a){return f.bind(a,function(a){return i.isArray(a)?w(a):v(a)})},x=function(a){var b=void 0!==a.toolbar?a.toolbar:u;return i.isArray(b)?w(b):v(b)},y=function(d,f){var g=function(a){return function(){return o.forToolbarCommand(f,a)}},i=function(a){return function(){return o.forToolbarStateCommand(f,a)}},j=function(a,b,c){return function(){return o.forToolbarStateAction(f,a,b,c)}},k=g("undo"),u=g("redo"),v=i("bold"),w=i("italic"),x=i("underline"),y=g("removeformat"),z=function(){return s.sketch(d,f)},A=j("unlink","link",function(){f.execCommand("unlink",null,!1)}),B=function(){return r.sketch(f)},C=j("unordered-list","ul",function(){f.execCommand("InsertUnorderedList",null,!1)}),D=j("ordered-list","ol",function(){f.execCommand("InsertOrderedList",null,!1)}),E=function(){return q.sketch(d,f)},F=function(){return p.sketch(d,f)},G=t.register(f,f.settings),H=function(){return t.ui(f,G,function(){f.fire("scrollIntoView")})},I=function(){return o.forToolbar("style-formats",function(a){f.fire("toReading"),d.dropup().appear(H,c.on,a)},a.derive([c.config({toggleClass:n.resolve("toolbar-button-selected"),toggleOnExecute:!1,aria:{mode:"pressed"}}),b.config({channels:e.wrapAll([l.receive(m.orientationChanged(),c.off),l.receive(m.dropupDismissed(),c.off)])})]))},J=function(a,b){return{isSupported:function(){return a.forall(function(a){return e.hasKey(f.buttons,a)})},sketch:b}};return{undo:J(h.none(),k),redo:J(h.none(),u),bold:J(h.none(),v),italic:J(h.none(),w),underline:J(h.none(),x),removeformat:J(h.none(),y),link:J(h.none(),z),unlink:J(h.none(),A),image:J(h.none(),B),bullist:J(h.some("bullist"),C),numlist:J(h.some("numlist"),D),fontsizeselect:J(h.none(),E),forecolor:J(h.none(),F),styleselect:J(h.none(),I)}},z=function(a,b){var c=x(a),d={};return f.bind(c,function(a){var c=!e.hasKey(d,a)&&e.hasKey(b,a)&&b[a].isSupported()?[b[a].sketch()]:[];return d[a]=!0,c})};return{identify:x,setup:y,detect:z}}),g("3o",["6","a"],function(a,b){var c=function(b,c,d,e,f,g,h){return{target:a.constant(b),x:a.constant(c),y:a.constant(d),stop:e,prevent:f,kill:g,raw:a.constant(h)}},d=function(d,e){return function(f){if(d(f)){var g=b.fromDom(f.target),h=function(){f.stopPropagation()},i=function(){f.preventDefault()},j=a.compose(i,h),k=c(g,f.clientX,f.clientY,h,i,j,f);e(k)}}},e=function(b,c,e,f,g){var i=d(e,f);return b.dom().addEventListener(c,i,g),{unbind:a.curry(h,b,c,i,g)}},f=function(a,b,c,d){return e(a,b,c,d,!1)},g=function(a,b,c,d){return e(a,b,c,d,!0)},h=function(a,b,c,d){a.dom().removeEventListener(b,c,d)};return{bind:f,capture:g}}),g("1u",["6","3o"],function(a,b){var c=a.constant(!0),d=function(a,d,e){return b.bind(a,d,c,e)},e=function(a,d,e){return b.capture(a,d,c,e)};return{bind:d,capture:e}}),h("1v",clearInterval),h("1x",setInterval),g("j",["6","z","7","1u","a","1v","1w","1x"],function(a,b,c,d,e,f,g,h){var i=50,j=1e3/i,k=function(b){var c=b.matchMedia("(orientation: portrait)").matches;return{isPortrait:a.constant(c)}},l=function(a){var b=c.detect().os.isiOS(),d=k(a).isPortrait();return b&&!d?a.screen.height:a.screen.width},m=function(a,c){var g=e.fromDom(a),l=null,m=function(){f(l);var b=k(a);c.onChange(b),o(function(){c.onReady(b)})},n=d.bind(g,"orientationchange",m),o=function(c){f(l);var d=a.innerHeight,e=0;l=h(function(){d!==a.innerHeight?(f(l),c(b.some(a.innerHeight))):e>j&&(f(l),c(b.none())),e++},i)},p=function(){n.unbind()};return{onAdjustment:o,destroy:p}};return{get:k,onChange:m,getActualWidth:l}}),h("86",clearTimeout),g("9e",["86","1j"],function(a,b){return function(c,d){var e=null,f=function(){var a=arguments;e=b(function(){c.apply(null,a),e=null},d)},g=function(){null!==e&&(a(e),e=null)};return{cancel:g,schedule:f}}}),g("8c",["9e","2g","t","14","5","6","z","1a","1w"],function(a,b,c,d,e,f,g,h,i){var j=5,k=400,l=function(a){return void 0===a.raw().touches||1!==a.raw().touches.length?g.none():g.some(a.raw().touches[0])},m=function(a,b){var c=i.abs(a.clientX-b.x()),d=i.abs(a.clientY-b.y());return c>j||d>j},n=function(i){var j=e(g.none()),n=a(function(a){j.set(g.none()),i.triggerEvent(c.longpress(),a)},k),o=function(a){return l(a).each(function(b){n.cancel();var c={x:f.constant(b.clientX),y:f.constant(b.clientY),target:a.target};n.schedule(c),j.set(g.some(c))}),g.none()},p=function(a){return n.cancel(),l(a).each(function(a){j.get().each(function(b){m(a,b)&&j.set(g.none())})}),g.none()},q=function(a){n.cancel();var b=function(b){return h.eq(b.target(),a.target())};return j.get().filter(b).map(function(b){return i.triggerEvent(c.tap(),a)})},r=d.wrapAll([{key:b.touchstart(),value:o},{key:b.touchmove(),value:p},{key:b.touchend(),value:q}]),s=function(a,b){return d.readOptFrom(r,b).bind(function(b){return b(a)})};return{fireIfReady:s}};return{monitor:n}}),g("81",["8c","1u"],function(a,b){var c=function(c){var d=a.monitor({triggerEvent:function(a,b){c.onTapContent(b)}}),e=function(){return b.bind(c.body(),"touchend",function(a){d.fireIfReady(a,"touchend")})},f=function(){return b.bind(c.body(),"touchmove",function(a){d.fireIfReady(a,"touchmove")})},g=function(a){d.fireIfReady(a,"touchstart")};return{fireTouchstart:g,onTouchend:e,onTouchmove:f}};return{monitor:c}}),g("5x",["1g","y","6","7","1a","8","1u","a","b","10","81"],function(a,b,c,d,e,f,g,h,i,j,k){var l=d.detect().os.version.major>=6,m=function(d,m,n){var o=k.monitor(d),p=j.owner(m),q=function(a){return!e.eq(a.start(),a.finish())||a.soffset()!==a.foffset()},r=function(){return f.active(p).filter(function(a){return"input"===i.name(a)}).exists(function(a){return a.dom().selectionStart!==a.dom().selectionEnd})},s=function(){var b=d.doc().dom().hasFocus()&&d.getSelection().exists(q);n.getByDom(m).each((b||r())===!0?a.on:a.off)},t=[g.bind(d.body(),"touchstart",function(a){d.onTouchContent(),o.fireTouchstart(a)}),o.onTouchmove(),o.onTouchend(),g.bind(m,"touchstart",function(a){d.onTouchToolstrip()}),d.onToReading(function(){f.blur(d.body())}),d.onToEditing(c.noop),d.onScrollToCursor(function(a){a.preventDefault(),d.getCursorBox().each(function(a){var b=d.win(),c=a.top()>b.innerHeight||a.bottom()>b.innerHeight,e=c?a.bottom()-b.innerHeight+50:0;0!==e&&b.scrollTo(b.pageXOffset,b.pageYOffset+e)})})].concat(l===!0?[]:[g.bind(h.fromDom(d.win()),"blur",function(){n.getByDom(m).each(a.off)}),g.bind(p,"select",s),g.bind(d.doc(),"selectionchange",s)]),u=function(){b.each(t,function(a){a.unbind()})};return{destroy:u}};return{initEvents:m}}),g("82",["y","6","8","a","b","1j"],function(a,b,c,d,e,f){var g=function(){return function(a){f(function(){a()},0)}},h=function(f){f.focus();var h=d.fromDom(f.document.body),i=c.active().exists(function(b){return a.contains(["input","textarea"],e.name(b))}),j=i?g(h):b.apply;j(function(){c.active().each(c.blur),c.focus(h)})};return{resume:h}}),h("9f",isNaN),h("8h",parseInt),g("83",["4i","9f","8h"],function(a,b,c){var d=function(d,e){var f=c(a.get(d,e),10);return b(f)?0:f};return{safeParse:d}}),g("aa",["7","z","v"],function(a,b,c){return function(d,e){var f=function(a){if(!d(a))throw new c("Can only get "+e+" value of a "+e+" node");return j(a).getOr("")},g=function(a){try{return h(a)}catch(a){return b.none()}},h=function(a){return d(a)?b.from(a.dom().nodeValue):b.none()},i=a.detect().browser,j=i.isIE()&&10===i.version.major?g:h,k=function(a,b){if(!d(a))throw new c("Can only set raw "+e+" value of a "+e+" node");a.dom().nodeValue=b};return{get:f,getOption:j,set:k}}}),g("a3",["b","aa"],function(a,b){var c=b(a.isText,"text"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("9g",["y","b","a3","10"],function(a,b,c,d){var e=function(a){return"img"===b.name(a)?1:c.getOption(a).fold(function(){return d.children(a).length},function(a){return a.length})},f=function(a,b){return e(a)===b},g=function(a,b){return 0===b},h="\xa0",i=function(a){return c.getOption(a).filter(function(a){return 0!==a.trim().length||a.indexOf(h)>-1}).isSome()},j=["img","br"],k=function(c){var d=i(c);return d||a.contains(j,b.name(c))};return{getEnd:e,isEnd:f,isStart:g,isCursorPosition:k}}),g("a4",["6k","6"],function(a,b){var c=a.generate([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),d=function(a,b,c,d){return a.fold(b,c,d)},e=function(a){return a.fold(b.identity,b.identity,b.identity)};return{before:c.before,on:c.on,after:c.after,cata:d,getStart:e}}),g("9h",["6k","2o","a","10","a4"],function(a,b,c,d,e){var f=a.generate([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),g=b.immutable("start","soffset","finish","foffset"),h=function(a){return f.exact(a.start(),a.soffset(),a.finish(),a.foffset())},i=function(a){return a.match({domRange:function(a){return c.fromDom(a.startContainer)},relative:function(a,b){return e.getStart(a)},exact:function(a,b,c,d){return a}})},j=function(a){var b=i(a);return d.defaultView(b)};return{domRange:f.domRange,relative:f.relative,exact:f.exact,exactFromRange:h,range:g,getWin:j}}),g("9i",["1a","a","10"],function(a,b,c){var d=function(a,b,d,e){var f=c.owner(a),g=f.dom().createRange();return g.setStart(a.dom(),b),g.setEnd(d.dom(),e),g},e=function(a,c,e,f){var g=d(a,c,e,f);return b.fromDom(g.commonAncestorContainer)},f=function(b,c,e,f){var g=d(b,c,e,f),h=a.eq(b,e)&&c===f;return g.collapsed&&!h};return{after:f,commonAncestorContainer:e}}),g("9j",["y","a","1b"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g("9k",["6","z","1a","a"],function(a,b,c,d){var e=function(a,b){var c=a.document.createRange();return f(c,b),c},f=function(a,b){a.selectNodeContents(b.dom())},g=function(a,b){return b.compareBoundaryPoints(a.END_TO_START,a)<1&&b.compareBoundaryPoints(a.START_TO_END,a)>-1},h=function(a){return a.document.createRange()},i=function(a,b){b.fold(function(b){a.setStartBefore(b.dom())},function(b,c){a.setStart(b.dom(),c)},function(b){a.setStartAfter(b.dom())})},j=function(a,b){b.fold(function(b){a.setEndBefore(b.dom())},function(b,c){a.setEnd(b.dom(),c)},function(b){a.setEndAfter(b.dom())})},k=function(a,b){o(a),a.insertNode(b.dom())},l=function(a,b,d,e){return c.eq(a,d)&&b===e},m=function(a,b,c){var d=a.document.createRange();return i(d,b),j(d,c),d},n=function(a,b,c,d,e){var f=a.document.createRange();return f.setStart(b.dom(),c),f.setEnd(d.dom(),e),f},o=function(a){a.deleteContents()},p=function(a){var b=a.cloneContents();return d.fromDom(b)},q=function(b){return{left:a.constant(b.left),top:a.constant(b.top),right:a.constant(b.right),bottom:a.constant(b.bottom),width:a.constant(b.width),height:a.constant(b.height)}},r=function(a){var c=a.getClientRects(),d=c.length>0?c[0]:a.getBoundingClientRect();return d.width>0||d.height>0?b.some(d).map(q):b.none()},s=function(a){var c=a.getBoundingClientRect();return c.width>0||c.height>0?b.some(c).map(q):b.none()},t=function(a){return a.toString()};return{create:h,replaceWith:k,selectNodeContents:e,selectNodeContentsUsing:f,isCollapsed:l,relativeToNative:m,exactToNative:n,deleteContents:o,cloneFragment:p,getFirstRect:r,getBounds:s,isWithin:g,toString:t}}),g("9l",["6k","6","z","17","a","9k"],function(a,b,c,d,e,f){var g=a.generate([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),h=function(a,b,c){return b(e.fromDom(c.startContainer),c.startOffset,e.fromDom(c.endContainer),c.endOffset)},i=function(a,e){return e.match({domRange:function(a){return{ltr:b.constant(a),rtl:c.none}},relative:function(b,e){return{ltr:d.cached(function(){return f.relativeToNative(a,b,e)}),rtl:d.cached(function(){return c.some(f.relativeToNative(a,e,b))})}},exact:function(b,e,g,h){return{ltr:d.cached(function(){return f.exactToNative(a,b,e,g,h)}),rtl:d.cached(function(){return c.some(f.exactToNative(a,g,h,b,e))})}}})},j=function(a,b){var c=b.ltr();if(c.collapsed){var d=b.rtl().filter(function(a){return a.collapsed===!1});return d.map(function(a){return g.rtl(e.fromDom(a.endContainer),a.endOffset,e.fromDom(a.startContainer),a.startOffset)}).getOrThunk(function(){return h(a,g.ltr,c)})}return h(a,g.ltr,c)},k=function(a,b){var c=i(a,b);return j(a,c)},l=function(a,b){var c=k(a,b);return c.match({ltr:function(b,c,d,e){var f=a.document.createRange();return f.setStart(b.dom(),c),f.setEnd(d.dom(),e),f},rtl:function(b,c,d,e){var f=a.document.createRange();return f.setStart(d.dom(),e),f.setEnd(b.dom(),c),f}})};return{ltr:g.ltr,rtl:g.rtl,diagnose:k,asLtrRange:l}}),g("ab",["1w"],function(a){var b=function(b,c,d,e,f){if(0===f)return 0;if(c===e)return f-1;for(var g=e,h=1;hi.bottom);else{if(dg)return h-1;g=j}}return 0},c=function(a,b,c){return b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom};return{inRect:c,searchForPoint:b}}),g("ac",["z","15","a3","ab","1w"],function(a,b,c,d,e){var f=function(a,b,e,f,g){var h=function(c){var d=a.dom().createRange();return d.setStart(b.dom(),c),d.collapse(!0),d},i=function(a){var b=h(a);return b.getBoundingClientRect()},j=c.get(b).length,k=d.searchForPoint(i,e,f,g.right,j);return h(k)},g=function(c,e,g,h){var i=c.dom().createRange();i.selectNode(e.dom());var j=i.getClientRects(),k=b.findMap(j,function(b){return d.inRect(b,g,h)?a.some(b):a.none()});return k.map(function(a){return f(c,e,g,h,a)})};return{locate:g}}),g("a5",["z","15","b","10","ab","ac","1w"],function(a,b,c,d,e,f,g){var h=function(c,f,g,h){var j=c.dom().createRange(),k=d.children(f);return b.findMap(k,function(b){return j.selectNode(b.dom()),e.inRect(j.getBoundingClientRect(),g,h)?i(c,b,g,h):a.none()})},i=function(a,b,d,e){var g=c.isText(b)?f.locate:h;return g(a,b,d,e)},j=function(a,b,c,d){var e=a.dom().createRange();e.selectNode(b.dom());var f=e.getBoundingClientRect(),h=g.max(f.left,g.min(f.right,c)),j=g.max(f.top,g.min(f.bottom,d));return i(a,b,h,j)};return{locate:j}}),g("ad",["z","2u","10","9g"],function(a,b,c,d){var e=function(a){return b.descendant(a,d.isCursorPosition)},f=function(a){return g(a,d.isCursorPosition)},g=function(b,d){var e=function(b){for(var f=c.children(b),g=f.length-1;g>=0;g--){var h=f[g];if(d(h))return a.some(h);var i=e(h);if(i.isSome())return i}return a.none()};return e(b)};return{first:e,last:f}}),g("a6",["z","10","ad"],function(a,b,c){var d=!0,e=!1,f=function(a,b){return b-a.left0){var d=b.getRangeAt(0),e=b.getRangeAt(b.rangeCount-1);return a.some(f.range(c.fromDom(d.startContainer),d.startOffset,c.fromDom(e.endContainer),e.endOffset))}return a.none()},t=function(d){var e=c.fromDom(d.anchorNode),g=c.fromDom(d.focusNode);return b.after(e,d.anchorOffset,g,d.focusOffset)?a.some(f.range(c.fromDom(d.anchorNode),d.anchorOffset,c.fromDom(d.focusNode),d.focusOffset)):s(d)},u=function(a,b){var c=g.selectNodeContents(a,b);l(a,c)},v=function(a,b){var d=g.selectNodeContents(a,b);return f.range(c.fromDom(d.startContainer),d.startOffset,c.fromDom(d.endContainer),d.endOffset)},w=function(b){var c=b.getSelection();return c.rangeCount>0?t(c):a.none()},x=function(a){return w(a).map(function(a){return f.exact(a.start(),a.soffset(),a.finish(),a.foffset())})},y=function(a,b){var c=h.asLtrRange(a,b);return g.getFirstRect(c)},z=function(a,b){var c=h.asLtrRange(a,b);return g.getBounds(c)},A=function(a,b,c){return i.fromPoint(a,b,c)},B=function(a,b){var c=h.asLtrRange(a,b);return g.toString(c)},C=function(a){var b=a.getSelection();b.removeAllRanges()},D=function(a,b){var c=h.asLtrRange(a,b);return g.cloneFragment(c)},E=function(a,b,c){var e=h.asLtrRange(a,b),f=d.fromElements(c,a.document);g.replaceWith(e,f)},F=function(a,b){var c=h.asLtrRange(a,b);g.deleteContents(c)};return{setExact:p,getExact:w,get:x,setRelative:q,toNative:r,setToElement:u,clear:C,clone:D,replace:E,deleteAt:F,forElement:v,getFirstRect:y,getBounds:z,getAtPoint:A,findWithin:n,getAsString:B}}),g("84",["y","6","a","10","9g","9h","85"],function(a,b,c,d,e,f,g){var h=2,i=function(a){return{left:a.left,top:a.top,right:a.right,bottom:a.bottom,width:b.constant(h),height:a.height}},j=function(a){return{left:b.constant(a.left),top:b.constant(a.top),right:b.constant(a.right),bottom:b.constant(a.bottom),width:b.constant(a.width),height:b.constant(a.height)}},k=function(b){if(b.collapsed){var h=c.fromDom(b.startContainer);return d.parent(h).bind(function(c){var d=f.exact(h,b.startOffset,c,e.getEnd(c)),j=g.getFirstRect(b.startContainer.ownerDocument.defaultView,d);return j.map(i).map(a.pure)}).getOr([])}return a.map(b.getClientRects(),j)},l=function(a){var b=a.getSelection();return void 0!==b&&b.rangeCount>0?k(b.getRangeAt(0)):[]};return{getRectangles:l}}),g("5y",["6","z","1u","a","4i","1w","82","i","83","84"],function(a,b,c,d,e,f,g,h,i,j){var k=50,l="data-"+h.resolve("last-outer-height"),m=function(a,b){e.set(a,l,b)},n=function(a){return i.safeParse(a,l)},o=function(b){return{top:a.constant(b.top()),bottom:a.constant(b.top()+b.height())}},p=function(a){var c=j.getRectangles(a);return c.length>0?b.some(c[0]).map(o):b.none()},q=function(a,c){var d=n(c),e=a.innerHeight;return d>e?b.some(d-e):b.none()},r=function(a,b,c){var d=b.top()>a.innerHeight||b.bottom()>a.innerHeight;return d?f.min(c,b.bottom()-a.innerHeight+k):0},s=function(a,b){var e=d.fromDom(b.document.body),f=function(){g.resume(b)},h=c.bind(d.fromDom(a),"resize",function(){q(a,e).each(function(a){p(b).each(function(c){var d=r(b,c,a);0!==d&&b.scrollTo(b.pageXOffset,b.pageYOffset+d)})}),m(e,a.innerHeight)});m(e,a.innerHeight);var i=function(){h.unbind()};return{toEditing:f,destroy:i}};return{setup:s}}),g("5z",["6","z","1a","1u","a","85"],function(a,b,c,d,e,f){var g=function(a){return b.some(e.fromDom(a.dom().contentWindow.document.body))},h=function(a){return b.some(e.fromDom(a.dom().contentWindow.document))},i=function(a){return b.from(a.dom().contentWindow)},j=function(a){var b=i(a);return b.bind(f.getExact)},k=function(a){return a.getFrame()},l=function(a,b){return function(c){var d=c[a].getOrThunk(function(){var a=k(c);return function(){return b(a)}});return d()}},m=function(a,b,c,e){return a[c].getOrThunk(function(){return function(a){return d.bind(b,e,a)}})},n=function(b){return{left:a.constant(b.left),top:a.constant(b.top),right:a.constant(b.right),bottom:a.constant(b.bottom),width:a.constant(b.width),height:a.constant(b.height)}},o=function(d){var l=k(d),o=function(a){var d=function(a){return c.eq(a.start(),a.finish())&&a.soffset()===a.foffset()},e=function(a){var c=a.start().dom().getBoundingClientRect();return c.width>0||c.height>0?b.some(c).map(n):b.none()};return f.getExact(a).filter(d).bind(e)};return g(l).bind(function(b){return h(l).bind(function(c){return i(l).map(function(g){var h=e.fromDom(c.dom().documentElement),i=d.getCursorBox.getOrThunk(function(){return function(){return f.get(g).bind(function(a){return f.getFirstRect(g,a).orThunk(function(){return o(g)})})}}),k=d.setSelection.getOrThunk(function(){return function(a,b,c,d){f.setExact(g,a,b,c,d)}}),n=d.clearSelection.getOrThunk(function(){return function(){f.clear(g)}});return{body:a.constant(b),doc:a.constant(c),win:a.constant(g),html:a.constant(h),getSelection:a.curry(j,l),setSelection:k,clearSelection:n,frame:a.constant(l),onKeyup:m(d,c,"onKeyup","keyup"),onNodeChanged:m(d,c,"onNodeChanged","selectionchange"),onDomChanged:d.onDomChanged,onScrollToCursor:d.onScrollToCursor,onScrollToElement:d.onScrollToElement,onToReading:d.onToReading,onToEditing:d.onToEditing,onToolbarScrollStart:d.onToolbarScrollStart,onTouchContent:d.onTouchContent,onTapContent:d.onTapContent,onTouchToolstrip:d.onTouchToolstrip,getCursorBox:i}})})})};return{getBody:l("getBody",g),getDoc:l("getDoc",h),getWin:l("getWin",i),getSelection:l("getSelection",j),getFrame:k,getActiveApi:o}}),g("60",["y","7","4i","39","5l"],function(a,b,c,d,e){var f="data-ephox-mobile-fullscreen-style",g="display:none!important;",h="position:absolute!important;",i="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;",j="background-color:rgb(255,255,255)!important;",k=b.detect().os.isAndroid(),l=function(a){var b=d.get(a,"background-color");return void 0!==b&&""!==b?"background-color:"+b+"!important":j},m=function(b,d){var j=function(a){var b=e.siblings(a,"*");return b},m=function(a){return function(b){var d=c.get(b,"style"),e=void 0===d?"no-styles":d.trim();e!==a&&(c.set(b,f,e),c.set(b,"style",a))}},n=e.ancestors(b,"*"),o=a.bind(n,j),p=l(d);a.each(o,m(g)),a.each(n,m(h+i+p));var q=k===!0?"":h;m(q+i+p)(b)},n=function(){var b=e.all("["+f+"]");a.each(b,function(a){var b=c.get(a,f);"no-styles"!==b?c.set(a,"style",b):c.remove(a,"style"),c.remove(a,f)})};return{clobberStyles:m,restoreStyles:n}}),g("61",["9","a","4i","4u"],function(a,b,c,d){var e=function(){var e=d.first("head").getOrDie(),f=function(){var d=b.fromTag("meta");return c.set(d,"name","viewport"),a.append(e,d),d},g=d.first('meta[name="viewport"]').getOrThunk(f),h=c.get(g,"content"),i=function(){c.set(g,"content","width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0")},j=function(){void 0!==h&&null!==h&&h.length>0?c.set(g,"content",h):c.set(g,"content","user-scalable=yes")};return{maximize:i,restore:j}};return{tag:e}}),g("3r",["1z","2f","5x","5y","5z","60","i","61"],function(a,b,c,d,e,f,g,h){var i=function(i,j){var k=h.tag(),l=a.api(),m=a.api(),n=function(){j.hide(),b.add(i.container,g.resolve("fullscreen-maximized")),b.add(i.container,g.resolve("android-maximized")),k.maximize(),b.add(i.body,g.resolve("android-scroll-reload")),l.set(d.setup(i.win,e.getWin(i.editor).getOrDie("no"))),e.getActiveApi(i.editor).each(function(a){f.clobberStyles(i.container,a.body()),m.set(c.initEvents(a,i.toolstrip,i.alloy))})},o=function(){k.restore(),j.show(),b.remove(i.container,g.resolve("fullscreen-maximized")),b.remove(i.container,g.resolve("android-maximized")),f.restoreStyles(),b.remove(i.body,g.resolve("android-scroll-reload")),m.clear(),l.clear()};return{enter:n,exit:o}};return{create:i}}),g("3s",["29","2e","6","a","10","1k"],function(a,b,c,d,e,f){return b.objOf([a.strictObjOf("editor",[a.strict("getFrame"),a.option("getBody"),a.option("getDoc"),a.option("getWin"),a.option("getSelection"),a.option("setSelection"),a.option("clearSelection"),a.option("cursorSaver"),a.option("onKeyup"),a.option("onNodeChanged"),a.option("getCursorBox"),a.strict("onDomChanged"),a.defaulted("onTouchContent",c.noop),a.defaulted("onTapContent",c.noop),a.defaulted("onTouchToolstrip",c.noop),a.defaulted("onScrollToCursor",c.constant({unbind:c.noop})),a.defaulted("onScrollToElement",c.constant({unbind:c.noop})),a.defaulted("onToEditing",c.constant({unbind:c.noop})),a.defaulted("onToReading",c.constant({unbind:c.noop})),a.defaulted("onToolbarScrollStart",c.identity)]),a.strict("socket"),a.strict("toolstrip"),a.strict("dropup"),a.strict("toolbar"),a.strict("container"),a.strict("alloy"),a.state("win",function(a){return e.owner(a.socket).dom().defaultView}),a.state("body",function(a){return d.fromDom(a.socket.dom().ownerDocument.body)}),a.defaulted("translate",c.identity),a.defaulted("setReadOnly",c.noop)])}),g("62",["86","1j"],function(a,b){var c=function(c,d){var e=null,f=null,g=function(){null!==e&&(a(e),e=null,f=null)},h=function(){f=arguments,null===e&&(e=b(function(){c.apply(null,f),e=null,f=null},d))};return{cancel:g,throttle:h}},d=function(c,d){var e=null,f=function(){null!==e&&(a(e),e=null)},g=function(){var a=arguments;null===e&&(e=b(function(){c.apply(null,a),e=null,a=null},d))};return{cancel:f,throttle:g}},e=function(c,d){var e=null,f=function(){null!==e&&(a(e),e=null)},g=function(){var f=arguments;null!==e&&a(e),e=b(function(){c.apply(null,f),e=null,f=null},d)};return{cancel:f,throttle:g}};return{adaptable:c,first:d,last:e}}),g("3t",["q","1g","1h","1n","3v","62","1j","i","1o"],function(a,b,c,d,e,f,g,h,i){var j=function(g,j){var k=c.record(e.sketch({dom:i.dom(''),containerBehaviours:a.derive([b.config({toggleClass:h.resolve("mask-tap-icon-selected"),toggleOnExecute:!1})])})),l=f.first(g,200);return e.sketch({dom:i.dom('
          '),components:[e.sketch({dom:i.dom('
          '), +components:[d.sketch({dom:i.dom('
          '),components:[k.asSpec()],action:function(a){l.throttle()},buttonBehaviours:a.derive([b.config({toggleClass:h.resolve("mask-tap-icon-selected")})])})]})]})};return{sketch:j}}),g("20",["3q","2e","6","9","39","3r","3s","3t"],function(a,b,c,d,e,f,g,h){var i=function(i){var j=b.asRawOrDie("Getting AndroidWebapp schema",g,i);e.set(j.toolstrip,"width","100%");var k=function(){j.setReadOnly(!0),n.enter()},l=a.build(h.sketch(k,j.translate));j.alloy.add(l);var m={show:function(){j.alloy.add(l)},hide:function(){j.alloy.remove(l)}};d.append(j.container,l.element());var n=f.create(j,m);return{setReadOnly:j.setReadOnly,refreshStructure:c.noop,enter:n.enter,exit:n.exit,destroy:c.noop}};return{produce:i}}),g("63",["q","1y","4q","53","29","6"],function(a,b,c,d,e,f){var g=[e.defaulted("shell",!0),e.defaulted("toolbarBehaviours",{})],h=function(c){return{behaviours:a.derive([b.config({})])}},i=[d.optional({name:"groups",overrides:h})];return{name:f.constant("Toolbar"),schema:f.constant(g),parts:f.constant(i)}}),g("3w",["q","1y","34","52","63","w","z","16","v"],function(a,b,c,d,e,f,g,h,i){var j=function(c,e,j,k){var l=function(a,c){m(a).fold(function(){throw h.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new i("Toolbar was defined to not be a shell, but no groups container was specified in components")},function(a){b.set(a,c)})},m=function(a){return c.shell()?g.some(a):d.getPart(a,c,"groups")},n=c.shell()?{behaviours:[b.config({})],components:[]}:{behaviours:[],components:e};return{uid:c.uid(),dom:c.dom(),components:n.components,behaviours:f.deepMerge(a.derive(n.behaviours),c.toolbarBehaviours()),apis:{setGroups:l},domModification:{attributes:{role:"group"}}}};return c.composite({name:"Toolbar",configFields:e.schema(),partFields:e.parts(),factory:j,apis:{setGroups:function(a,b,c){a.setGroups(b,c)}}})}),g("65",["4q","53","29","6"],function(a,b,c,d){var e=[c.strict("items"),a.markers(["itemClass"]),c.defaulted("hasTabstop",!0),c.defaulted("tgroupBehaviours",{})],f=[b.group({name:"items",unit:"item",overrides:function(a){return{domModification:{classes:[a.markers().itemClass()]}}}})];return{name:d.constant("ToolbarGroup"),schema:d.constant(e),parts:d.constant(f)}}),g("3x",["q","33","64","34","65","w","v"],function(a,b,c,d,e,f,g){var h=function(d,e,g,h){return f.deepMerge({dom:{attributes:{role:"toolbar"}}},{uid:d.uid(),dom:d.dom(),components:e,behaviours:f.deepMerge(a.derive([b.config({mode:"flow",selector:"."+d.markers().itemClass()}),d.hasTabstop()?c.config({}):c.revoke()]),d.tgroupBehaviours()),"debug.sketcher":g["debug.sketcher"]})};return d.composite({name:"ToolbarGroup",configFields:e.schema(),partFields:e.parts(),factory:h})}),g("3y",["6","1u","4i","4u","i"],function(a,b,c,d,e){var f="data-"+e.resolve("horizontal-scroll"),g=function(a){a.dom().scrollTop=1;var b=0!==a.dom().scrollTop;return a.dom().scrollTop=0,b},h=function(a){a.dom().scrollLeft=1;var b=0!==a.dom().scrollLeft;return a.dom().scrollLeft=0,b},i=function(a){return a.dom().scrollTop>0||g(a)},j=function(a){return a.dom().scrollLeft>0||h(a)},k=function(a){c.set(a,f,"true")},l=function(a){return"true"===c.get(a,f)?j:i},m=function(c,e){return b.bind(c,"touchmove",function(b){d.closest(b.target(),e).filter(l).fold(function(){b.raw().preventDefault()},a.noop)})};return{exclusive:m,markAsHorizontal:k}}),g("21",["3u","q","33","1g","3q","3d","3v","3w","3x","y","5","6","39","3y","i","3z","1o"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){return function(){var r=function(c){var d=c.scrollable===!0?"${prefix}-toolbar-scrollable-group":"";return{dom:q.dom('
          '),tgroupBehaviours:b.derive([a.config("adhoc-scrollable-toolbar",c.scrollable===!0?[f.runOnInit(function(a,b){m.set(a.element(),"overflow-x","auto"),n.markAsHorizontal(a.element()),p.register(a.element())})]:[])]),components:[g.sketch({components:[i.parts().items({})]})],markers:{itemClass:o.resolve("toolbar-group-item")},items:c.items}},s=e.build(h.sketch({dom:q.dom('
          '),components:[h.parts().groups({})],toolbarBehaviours:b.derive([d.config({toggleClass:o.resolve("context-toolbar"),toggleOnExecute:!1,aria:{mode:"none"}}),c.config({mode:"cyclic"})]),shell:!0})),t=e.build(g.sketch({dom:{classes:[o.resolve("toolstrip")]},components:[e.premade(s)],containerBehaviours:b.derive([d.config({toggleClass:o.resolve("android-selection-context-toolbar"),toggleOnExecute:!1})])})),u=function(){h.setGroups(s,v.get()),d.off(s)},v=k([]),w=function(a){v.set(a),u()},x=function(a){return j.map(a,l.compose(i.sketch,r))},y=function(){h.refresh(s)},z=function(a){d.on(s),h.setGroups(s,a)},A=function(){d.isOn(s)&&u()},B=function(){c.focusIn(s)};return{wrapper:l.constant(t),toolbar:l.constant(s),createGroups:x,setGroups:w,setContextToolbar:z,restoreToolbar:A,refresh:y,focus:B}}}),g("22",["q","1y","1","3q","1n","3v","6","2f","i","1o"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a){return d.build(e.sketch({dom:j.dom('
          '),action:function(){a.run(function(a){a.setReadOnly(!1)})}}))},l=function(){return d.build(f.sketch({dom:j.dom('
          '),components:[],containerBehaviours:a.derive([b.config({})])}))},m=function(a,c){b.append(a,d.premade(c))},n=function(a,c){b.remove(a,c)},o=function(a,b,d,e){var f=d===!0?c.toAlpha:c.toOmega;f(e);var g=d?m:n;g(a,b)};return{makeEditSwitch:k,makeSocket:l,updateMode:o}}),g("67",["2f","89","39"],function(a,b,c){var d=function(a,b){return b.getAnimationRoot().fold(function(){return a.element()},function(b){return b(a)})},e=function(a){return a.dimension().property()},f=function(a,b){return a.dimension().getDimension()(b)},g=function(a,c){var e=d(a,c);b.remove(e,[c.shrinkingClass(),c.growingClass()])},h=function(b,d){a.remove(b.element(),d.openClass()),a.add(b.element(),d.closedClass()),c.set(b.element(),e(d),"0px"),c.reflow(b.element())},i=function(a,b){j(a,b);var c=f(b,a.element());return h(a,b),c},j=function(b,d){a.remove(b.element(),d.closedClass()),a.add(b.element(),d.openClass()),c.remove(b.element(),e(d))},k=function(a,b,d){d.setCollapsed(),c.set(a.element(),e(b),f(b,a.element())),c.reflow(a.element()),g(a,b),h(a,b),b.onStartShrink()(a),b.onShrunk()(a)},l=function(b,g,i){i.setCollapsed(),c.set(b.element(),e(g),f(g,b.element())),c.reflow(b.element());var j=d(b,g);a.add(j,g.shrinkingClass()),h(b,g),g.onStartShrink()(b)},m=function(b,f,g){var h=i(b,f),k=d(b,f);a.add(k,f.growingClass()),j(b,f),c.set(b.element(),e(f),h),g.setExpanded(),f.onStartGrow()(b)},n=function(a,b,c){c.isExpanded()||m(a,b,c)},o=function(a,b,c){c.isExpanded()&&l(a,b,c)},p=function(a,b,c){c.isExpanded()&&k(a,b,c)},q=function(a,b,c){return c.isExpanded()},r=function(a,b,c){return c.isCollapsed()},s=function(b,c,e){var f=d(b,c);return a.has(f,c.growingClass())===!0},t=function(b,c,e){var f=d(b,c);return a.has(f,c.shrinkingClass())===!0},u=function(a,b,c){return s(a,b,c)===!0||t(a,b,c)===!0},v=function(a,b,c){var d=c.isExpanded()?l:m;d(a,b,c)};return{grow:n,shrink:o,immediateShrink:p,hasGrown:q,hasShrunk:r,isGrowing:s,isShrinking:t,isTransitioning:u,toggleGrow:v,disableTransitions:g}}),g("66",["3d","2g","67","4b","14","39"],function(a,b,c,d,e,f){var g=function(a,b){var c=b.expanded();return c?d.nu({classes:[b.openClass()],styles:{}}):d.nu({classes:[b.closedClass()],styles:e.wrap(b.dimension().property(),"0px")})},h=function(d,e){return a.derive([a.run(b.transitionend(),function(a,b){var g=b.event().raw();if(g.propertyName===d.dimension().property()){c.disableTransitions(a,d,e),e.isExpanded()&&f.remove(a.element(),d.dimension().property());var h=e.isExpanded()?d.onGrown():d.onShrunk();h(a,b)}})])};return{exhibit:g,events:h}}),g("68",["4q","29","2e","8a","5m"],function(a,b,c,d,e){return[b.strict("closedClass"),b.strict("openClass"),b.strict("shrinkingClass"),b.strict("growingClass"),b.option("getAnimationRoot"),a.onHandler("onShrunk"),a.onHandler("onStartShrink"),a.onHandler("onGrown"),a.onHandler("onStartGrow"),b.defaulted("expanded",!1),b.strictOf("dimension",c.choose("property",{width:[a.output("property","width"),a.output("getDimension",function(a){return e.get(a)+"px"})],height:[a.output("property","height"),a.output("getDimension",function(a){return d.get(a)+"px"})]}))]}),g("69",["4g","5","6"],function(a,b,c){var d=function(d){var e=b(d.expanded()),f=function(){return"expanded: "+e.get()};return a({isExpanded:function(){return e.get()===!0},isCollapsed:function(){return e.get()===!1},setCollapsed:c.curry(e.set,!1),setExpanded:c.curry(e.set,!0),readState:f})};return{init:d}}),g("40",["q","66","67","68","69"],function(a,b,c,d,e){return a.create({fields:d,name:"sliding",active:b,apis:c,state:e})}),g("23",["q","1y","40","3q","3v","6","1k","1l","i"],function(a,b,c,d,e,f,g,h,i){var j=function(j,k){var l=d.build(e.sketch({dom:{tag:"div",classes:i.resolve("dropup")},components:[],containerBehaviours:a.derive([b.config({}),c.config({closedClass:i.resolve("dropup-closed"),openClass:i.resolve("dropup-open"),shrinkingClass:i.resolve("dropup-shrinking"),growingClass:i.resolve("dropup-growing"),dimension:{property:"height"},onShrunk:function(a){j(),k(),b.set(a,[])},onGrown:function(a){j(),k()}}),h.orientation(function(a,b){n(f.noop)})])})),m=function(a,d,e){c.hasShrunk(l)===!0&&c.isTransitioning(l)===!1&&g.requestAnimationFrame(function(){d(e),b.set(l,[a()]),c.grow(l)})},n=function(a){g.requestAnimationFrame(function(){a(),c.shrink(l)})};return{appear:m,disappear:n,component:f.constant(l),element:l.element}};return{build:j}}),g("6c",["8b","t","8c","29","2e","y","7","1u","b","10","1j"],function(a,b,c,d,e,f,g,h,i,j,k){var l=function(b){return b.raw().which===a.BACKSPACE()[0]&&!f.contains(["input","textarea"],i.name(b.target()))},m=g.detect().browser.isFirefox(),n=e.objOfOnly([d.strictFunction("triggerEvent"),d.strictFunction("broadcastEvent"),d.defaulted("stopBackspace",!0)]),o=function(a,b){return m?h.capture(a,"focus",b):h.bind(a,"focusin",b)},p=function(a,b){return m?h.capture(a,"blur",b):h.bind(a,"focusout",b)},q=function(a,d){var i=e.asRawOrDie("Getting GUI events settings",n,d),m=g.detect().deviceType.isTouch()?["touchstart","touchmove","touchend","gesturestart"]:["mousedown","mouseup","mouseover","mousemove","mouseout","click"],q=c.monitor(i),r=f.map(m.concat(["selectstart","input","contextmenu","change","transitionend","dragstart","dragover","drop"]),function(b){return h.bind(a,b,function(a){q.fireIfReady(a,b).each(function(b){b&&a.kill()});var c=i.triggerEvent(b,a);c&&a.kill()})}),s=h.bind(a,"keydown",function(a){var b=i.triggerEvent("keydown",a);b?a.kill():i.stopBackspace===!0&&l(a)&&a.prevent()}),t=o(a,function(a){var b=i.triggerEvent("focusin",a);b&&a.kill()}),u=p(a,function(a){var c=i.triggerEvent("focusout",a);c&&a.kill(),k(function(){i.triggerEvent(b.postBlur(),a)},0)}),v=j.defaultView(a),w=h.bind(v,"scroll",function(a){var c=i.broadcastEvent(b.windowScroll(),a);c&&a.kill()}),x=function(){f.each(r,function(a){a.unbind()}),s.unbind(),t.unbind(),u.unbind(),w.unbind()};return{unbind:x}};return{setup:q}}),g("8d",["14","5"],function(a,b){var c=function(c,d){var e=a.readOptFrom(c,"target").map(function(a){return a()}).getOr(d);return b(e)};return{derive:c}}),g("8e",["5","6","v"],function(a,b,c){var d=function(c,d){var e=a(!1),f=a(!1),g=function(){e.set(!0)},h=function(){f.set(!0)};return{stop:g,cut:h,isStopped:e.get,isCut:f.get,event:b.constant(c),setSource:d.set,getSource:d.get}},e=function(d){var e=a(!1),f=function(){e.set(!0)};return{stop:f,cut:b.noop,isStopped:e.get,isCut:b.constant(!1),event:b.constant(d),setTarget:b.die(new c("Cannot set target of a broadcasted event")),getTarget:b.die(new c("Cannot get target of a broadcasted event"))}},f=function(b,c){var e=a(c);return d(b,e)};return{fromSource:d,fromExternal:e,fromTarget:f}}),g("6d",["6b","8d","8e","6k","y","10","v"],function(a,b,c,d,e,f,g){var h=d.generate([{stopped:[]},{resume:["element"]},{complete:[]}]),i=function(b,d,e,g,i,j){var k=b(d,g),l=c.fromSource(e,i);return k.fold(function(){return j.logEventNoHandlers(d,g),h.complete()},function(b){var c=b.descHandler(),e=a.getHandler(c);return e(l),l.isStopped()?(j.logEventStopped(d,b.element(),c.purpose()),h.stopped()):l.isCut()?(j.logEventCut(d,b.element(),c.purpose()),h.complete()):f.parent(b.element()).fold(function(){return j.logNoParent(d,b.element(),c.purpose()),h.complete()},function(a){return j.logEventResponse(d,b.element(),c.purpose()),h.resume(a)})})},j=function(a,b,c,d,e,f){return i(a,b,c,d,e,f).fold(function(){return!0},function(d){return j(a,b,c,d,e,f)},function(){return!1})},k=function(a,c,d,e,f){var g=b.derive(d,e);return i(a,c,d,e,g,f)},l=function(b,d,f){var g=c.fromExternal(d);return e.each(b,function(b){var c=b.descHandler(),d=a.getHandler(c);d(g)}),g.isStopped()},m=function(a,b,c,d){var e=c.target();return n(a,b,c,e,d)},n=function(a,c,d,e,f){var g=b.derive(d,e);return j(a,c,d,e,g,f)};return{triggerHandler:k,triggerUntilStopped:m,triggerOnUntilStopped:n,broadcast:l}}),g("9p",["2u"],function(a){var b=function(b,c,d){var e=a.closest(b,function(a){return c(a).isSome()},d);return e.bind(c)};return{closest:b}}),g("8f",["9p","6b","30","14","6","x","z","2o","16"],function(a,b,c,d,e,f,g,h,i){var j=h.immutable("element","descHandler"),k=function(a,b){return{id:e.constant(a),descHandler:e.constant(b)}};return function(){var e={},h=function(a,c,d){f.each(d,function(d,f){var g=void 0!==e[f]?e[f]:{};g[c]=b.curryArgs(d,a),e[f]=g})},i=function(a,b){return c.read(b).fold(function(a){return g.none()},function(c){var e=d.readOpt(c);return a.bind(e).map(function(a){return j(b,a)})})},l=function(a){return d.readOptFrom(e,a).map(function(a){return f.mapToArray(a,function(a,b){return k(b,a)})}).getOr([])},m=function(b,c,f){var g=d.readOpt(c),h=g(e);return a.closest(f,function(a){return i(h,a)},b)},n=function(a){f.each(e,function(b,c){b.hasOwnProperty(a)&&delete b[a]})};return{registerId:h,unregisterId:n,filterByType:l,find:m}}}),g("6e",["8f","13","30","14","12","v"],function(a,b,c,d,e,f){return function(){var g=a(),h={},i=function(a){var b=a.element();return c.read(b).fold(function(){return c.write("uid-",a.element())},function(a){return a})},j=function(a,c){var d=h[c];if(d!==a)throw new f('The tagId "'+c+'" is already used by: '+b.element(d.element())+"\nCannot use it for: "+b.element(a.element())+"\nThe conflicting element is"+(e.inBody(d.element())?" ":" not ")+"already in the DOM");l(a)},k=function(a){var b=i(a);d.hasKey(h,b)&&j(a,b);var c=[a];g.registerId(c,b,a.events()),h[b]=a},l=function(a){c.read(a.element()).each(function(a){h[a]=void 0,g.unregisterId(a)})},m=function(a){return g.filterByType(a)},n=function(a,b,c){return g.find(a,b,c)},o=function(a){return d.readOpt(a)(h)};return{find:n,filter:m,register:k,unregister:l,getById:o}}}),g("41",["3q","t","3","6a","3v","4","6b","6c","6d","13","6e","30","y","6","48","1a","8","9","11","b","2f","10","v"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){var x=function(){var b=a.build(e.sketch({dom:{tag:"div"}}));return y(b)},y=function(e){var j=function(a){return v.parent(e.element()).fold(function(){return!0},function(b){return p.eq(a,b)})},r=k(),u=function(a,b){return r.find(j,a,b)},x=h.setup(e.element(),{triggerEvent:function(a,b){return f.monitorEvent(a,b.target(),function(c){return i.triggerUntilStopped(u,a,b,c)})},broadcastEvent:function(a,b){var c=r.filter(a);return i.broadcast(c,b)}}),y=d({debugInfo:n.constant("real"),triggerEvent:function(a,b,c){f.monitorEvent(a,b,function(d){i.triggerOnUntilStopped(u,a,c,b,d)})},triggerFocus:function(a,c){l.read(a).fold(function(){q.focus(a)},function(d){f.monitorEvent(b.focus(),a,function(d){i.triggerHandler(u,b.focus(),{originator:n.constant(c),target:n.constant(a)},a,d)})})},triggerEscape:function(a,b){y.triggerEvent("keydown",a.element(),b.event())},getByUid:function(a){return H(a)},getByDom:function(a){return I(a)},build:a.build,addToGui:function(a){B(a)},removeFromGui:function(a){C(a)},addToWorld:function(a){z(a)},removeFromWorld:function(a){A(a)},broadcast:function(a){F(a)},broadcastOn:function(a,b){G(a,b)}}),z=function(a){a.connect(y),t.isText(a.element())||(r.register(a),m.each(a.components(),z),y.triggerEvent(b.systemInit(),a.element(),{target:n.constant(a.element())}))},A=function(a){t.isText(a.element())||(m.each(a.components(),A),r.unregister(a)),a.disconnect()},B=function(a){c.attach(e,a)},C=function(a){c.detach(a)},D=function(){x.unbind(),s.remove(e.element())},E=function(a){var c=r.filter(b.receive());m.each(c,function(b){var c=b.descHandler(),d=g.getHandler(c);d(a)})},F=function(a){E({universal:n.constant(!0),data:n.constant(a)})},G=function(a,b){E({universal:n.constant(!1),channels:n.constant(a),data:n.constant(b)})},H=function(a){return r.getById(a).fold(function(){return o.error(new w('Could not find component with uid: "'+a+'" in system.'))},o.value)},I=function(a){return l.read(a).bind(H)};return z(e),{root:n.constant(e),element:e.element,destroy:D,add:B,remove:C,getByUid:H,getByDom:I,addToWorld:z,removeFromWorld:A,broadcast:F,broadcastOn:G}};return{create:x,takeover:y}}),g("24",["q","1","3q","41","3v","6","i"],function(a,b,c,d,e,f,g){var h=f.constant(g.resolve("readonly-mode")),i=f.constant(g.resolve("edit-mode"));return function(f){var j=c.build(e.sketch({dom:{classes:[g.resolve("outer-container")].concat(f.classes)},containerBehaviours:a.derive([b.config({alpha:h(),omega:i()})])}));return d.takeover(j)}}),g("k",["1y","1","6","1z","20","i","21","22","23","24"],function(a,b,c,d,e,f,g,h,i,j){return function(b){var k=j({classes:[f.resolve("android-container")]}),l=g(),m=d.api(),n=h.makeEditSwitch(m),o=h.makeSocket(),p=i.build(c.noop,b);k.add(l.wrapper()),k.add(o),k.add(p.component());var q=function(a){var b=l.createGroups(a);l.setGroups(b)},r=function(a){var b=l.createGroups(a);l.setContextToolbar(b)},s=function(){l.focus()},t=function(){l.restoreToolbar()},u=function(a){m.set(e.produce(a))},v=function(){m.run(function(b){b.exit(),a.remove(o,n)})},w=function(a){h.updateMode(o,n,a,k.root())};return{system:c.constant(k),element:k.element,init:u,exit:v,setToolbarGroups:q,setContextToolbar:r,focusToolbar:s,restoreToolbar:t,updateMode:w,socket:c.constant(o),dropup:c.constant(p)}}}),g("9q",["6"],function(a){var b=function(c,d){var e=function(a,e){return b(c+a,d+e)};return{left:a.constant(c),top:a.constant(d),translate:e}};return b}),g("9r",["6","1a","a","b","2u","1b"],function(a,b,c,d,e,f){var g=function(d,g){var h=g||c.fromDom(f.documentElement);return e.ancestor(d,a.curry(b.eq,h)).isSome()},h=function(a){var b=a.dom();return b===b.window?a:d.isDocument(a)?b.defaultView||b.parentWindow:null};return{attached:g,windowOf:h}}),g("8g",["9q","9r","a"],function(a,b,c){var d=function(b){var c=b.getBoundingClientRect();return a(c.left,c.top)},e=function(a,b){return void 0!==a?a:void 0!==b?b:0},f=function(a){var d=a.dom().ownerDocument,f=d.body,g=b.windowOf(c.fromDom(d)),i=d.documentElement,j=e(g.pageYOffset,i.scrollTop),k=e(g.pageXOffset,i.scrollLeft),l=e(i.clientTop,f.clientTop),m=e(i.clientLeft,f.clientLeft);return h(a).translate(k-m,j-l)},g=function(b){var c=b.dom();return a(c.offsetLeft,c.offsetTop)},h=function(e){var f=e.dom(),g=f.ownerDocument,h=g.body,i=c.fromDom(g.documentElement);return h===f?a(h.offsetLeft,h.offsetTop):b.attached(e,i)?d(f):a(0,0)};return{absolute:f,relative:g,viewport:h}}),g("6f",["8c","y","62","1a","1u","8a","8g","81"],function(a,b,c,d,e,f,g,h){var i=function(a,i,j,k,l){var m=function(){i.run(function(a){a.highlightSelection()})},n=function(){i.run(function(a){a.refreshSelection()})},o=function(a,b){var c=a-k.dom().scrollTop;i.run(function(a){a.scrollIntoView(c,c+b)})},p=function(a){var b=g.absolute(a).top(),c=f.get(a);o(i,k,b,c)},q=function(){a.getCursorBox().each(function(a){o(a.top(),a.height())})},r=function(){i.run(function(a){a.clearSelection()})},s=function(){r(),z.throttle()},t=function(){q(a,i,k),i.run(function(a){a.syncHeight()})},u=function(){var b=f.get(j);i.run(function(a){a.setViewportOffset(b)}),n(i),t(a,i,k)},v=function(){i.run(function(a){a.toEditing()})},w=function(){i.run(function(a){a.toReading()})},x=function(a){i.run(function(b){b.onToolbarTouch(a)})},y=h.monitor(a),z=c.last(t,300),A=[a.onKeyup(s),a.onNodeChanged(n),a.onDomChanged(z.throttle),a.onDomChanged(n),a.onScrollToCursor(function(a){a.preventDefault(),z.throttle()}),a.onScrollToElement(function(a){p(a.element())}),a.onToEditing(v),a.onToReading(w),e.bind(a.doc(),"touchend",function(b){d.eq(a.html(),b.target())||d.eq(a.body(),b.target())}),e.bind(j,"transitionend",function(a){"height"===a.raw().propertyName&&u()}),e.capture(j,"touchstart",function(b){m(),x(b),a.onTouchToolstrip()}),e.bind(a.body(),"touchstart",function(b){r(),a.onTouchContent(),y.fireTouchstart(b)}),y.onTouchmove(),y.onTouchend(),e.bind(a.body(),"click",function(a){a.kill()}),e.bind(j,"touchmove",function(){a.onToolbarScrollStart()})],B=function(){b.each(A,function(a){a.unbind()})};return{destroy:B}};return{initEvents:i}}),g("9s",["8","1j"],function(a,b){var c=function(c){var d=c.dom().selectionStart,e=c.dom().selectionEnd,f=c.dom().selectionDirection;b(function(){c.dom().setSelectionRange(d,e,f),a.focus(c)},50)},d=function(a){var b=a.getSelection();if(b.rangeCount>0){var c=b.getRangeAt(0),d=a.document.createRange();d.setStart(c.startContainer,c.startOffset),d.setEnd(c.endContainer,c.endOffset),b.removeAllRanges(),b.addRange(d)}};return{refreshInput:c,refresh:d}}),g("8p",["1a","8","a","9s"],function(a,b,c,d){var e=function(e,f){b.active().each(function(c){a.eq(c,f)||b.blur(c)}),e.focus(),b.focus(c.fromDom(e.document.body)),d.refresh(e)};return{resume:e}}),g("8i",["y","9","2s","11","1u","a","2f","89","39","10","8p","i","84"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(n,o){var p=n.document,q=f.fromTag("div");g.add(q,l.resolve("unfocused-selections")),b.append(f.fromDom(p.documentElement),q);var r=e.bind(q,"touchstart",function(a){a.prevent(),k.resume(n,o),u()}),s=function(a){var b=f.fromTag("span");return h.add(b,[l.resolve("layer-editor"),l.resolve("unfocused-selection")]),i.setAll(b,{left:a.left()+"px",top:a.top()+"px",width:a.width()+"px",height:a.height()+"px"}),b},t=function(){u();var b=m.getRectangles(n),d=a.map(b,s);c.append(q,d)},u=function(){d.empty(q)},v=function(){r.unbind(),d.remove(q)},w=function(){return j.children(q).length>0};return{update:t,isActive:w,destroy:v,clear:u}}}),g("9w",["y","z","1j"],function(a,b,c){var d=function(e){var f=b.none(),g=[],h=function(a){return d(function(b){i(function(c){b(a(c))})})},i=function(a){k()?m(a):g.push(a)},j=function(a){f=b.some(a),l(g),g=[]},k=function(){return f.isSome()},l=function(b){a.each(b,m)},m=function(a){f.each(function(b){c(function(){a(b)},0)})};return e(j),{get:i,map:h,isReady:k}},e=function(a){return d(function(b){b(a)})};return{nu:d,pure:e}}),g("a7",["u","1j"],function(a,b){var c=function(c){return function(){var d=a.prototype.slice.call(arguments),e=this;b(function(){c.apply(e,d)},0)}};return{bounce:c}}),g("9t",["9w","a7"],function(a,b){var c=function(d){var e=function(a){d(b.bounce(a))},f=function(a){return c(function(b){e(function(c){var d=a(c);b(d)})})},g=function(a){return c(function(b){e(function(c){a(c).get(b)})})},h=function(a){return c(function(b){e(function(c){a.get(b)})})},i=function(){return a.nu(e)};return{map:f,bind:g,anonBind:h,toLazy:i,get:e}},d=function(a){return c(function(b){b(a)})};return{nu:c,pure:d}}),g("9u",["z","1v","1w","1x"],function(a,b,c,d){var e=function(b,d,e){return c.abs(b-d)<=e?a.none():bc.abs(d-g))&&(b(a),m(g))}})},k)};return{animate:f}};return{create:f,adjust:e}}),g("a8",["z","15"],function(a,b){var c=function(c,d){var e=[{width:320,height:480,keyboard:{portrait:300,landscape:240}},{width:320,height:568,keyboard:{portrait:300,landscape:240}},{width:375,height:667,keyboard:{portrait:305,landscape:240}},{width:414,height:736,keyboard:{portrait:320,landscape:240}},{width:768,height:1024,keyboard:{portrait:320,landscape:400}},{width:1024,height:1366,keyboard:{portrait:380,landscape:460}}];return b.findMap(e,function(b){return c<=b.width&&d<=b.height?a.some(b.keyboard):a.none()}).getOr({portrait:d/5,landscape:c/4})};return{findDevice:c}}),g("9v",["39","10","8a","a8","j"],function(a,b,c,d,e){var f=function(a){return d.findDevice(a.screen.width,a.screen.height)},g=function(a){var b=e.get(a).isPortrait(),c=f(a),d=b?c.portrait:c.landscape,g=b?a.screen.height:a.screen.width;return g-a.innerHeight>d?0:d},h=function(a,d){var e=b.owner(a).dom().defaultView,f=c.get(a)+c.get(d),h=g(e);return f-h},i=function(b,d,e){var f=h(d,e),g=c.get(d)+c.get(e)-f;a.set(b,"padding-bottom",g+"px")};return{getGreenzone:h,updatePadding:i}}),g("8n",["6k","y","6","4i","39","5l","10","8a","9v","i","3z","83"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=a.generate([{fixed:["element","property","offsetY"]},{scroller:["element","offsetY"]}]),n="data-"+j.resolve("position-y-fixed"),o="data-"+j.resolve("y-property"),p="data-"+j.resolve("scrolling"),q="data-"+j.resolve("last-window-height"),r=function(a){return l.safeParse(a,n)},s=function(a){return d.get(a,o)},t=function(a){return l.safeParse(a,q)},u=function(a,b){var c=s(a);return m.fixed(a,c,b)},v=function(a,b){return m.scroller(a,b)},w=function(a){var b=r(a),c="true"===d.get(a,p)?v:u;return c(a,b)},x=function(a){var c=f.descendants(a,"["+n+"]");return b.map(c,w)},y=function(a){var b=d.get(a,"style");e.setAll(a,{position:"absolute",top:"0px"}),d.set(a,n,"0px"),d.set(a,o,"top");var c=function(){d.set(a,"style",b||""),d.remove(a,n),d.remove(a,o)};return{restore:c}},z=function(a,b,c){var f=d.get(c,"style");k.register(c),e.setAll(c,{position:"absolute",height:b+"px",width:"100%",top:a+"px"}),d.set(c,n,a+"px"),d.set(c,p,"true"),d.set(c,o,"top");var g=function(){k.deregister(c),d.set(c,"style",f||""),d.remove(c,n),d.remove(c,p),d.remove(c,o)};return{restore:g}},A=function(a,b,c){var f=d.get(a,"style");e.setAll(a,{position:"absolute",bottom:"0px"}),d.set(a,n,"0px"),d.set(a,o,"bottom");var g=function(){d.set(a,"style",f||""),d.remove(a,n),d.remove(a,o)};return{restore:g}},B=function(a,b,c){var e=g.owner(a).dom().defaultView,f=e.innerHeight;return d.set(a,q,f+"px"),f-b-c},C=function(a,b,f,j){var k=g.owner(a).dom().defaultView,l=y(f),m=h.get(f),o=h.get(j),p=B(a,m,o),q=z(m,p,a),r=A(j,m,p),s=!0,u=function(){s=!1,l.restore(),q.restore(),r.restore()},v=function(){var b=k.innerHeight,c=t(a);return b>c},w=function(){if(s){var c=h.get(f),g=h.get(j),k=B(a,c,g);d.set(a,n,c+"px"),e.set(a,"height",k+"px"),e.set(j,"bottom",-(c+k+g)+"px"),i.updatePadding(b,a,j)}},x=function(b){var c=b+"px";d.set(a,n,c),w()};return i.updatePadding(b,a,j),{setViewportOffset:x,isExpanding:v,isShrinking:c.not(v),refresh:w,restore:u}};return{findFixtures:x,takeover:C,getYFixedData:r}}),g("8j",["6","9t","4i","89","39","10","1w","9u","8n","i","83"],function(a,b,c,d,e,f,g,h,i,j,k){var l=h.create(),m=15,n=10,o=10,p="data-"+j.resolve("last-scroll-top"),q=function(a){var b=e.getRaw(a,"top").getOr(0);return parseInt(b,10)},r=function(a){return parseInt(a.dom().scrollTop,10)},s=function(c,d,f){return b.nu(function(b){var g=a.curry(r,c),h=function(a){c.dom().scrollTop=a,e.set(c,"top",q(c)+m+"px")},i=function(){c.dom().scrollTop=d,e.set(c,"top",f+"px"),b(d)};l.animate(g,d,m,h,i,o)})},t=function(d,e){return b.nu(function(b){var f=a.curry(r,d);c.set(d,p,f());var h=function(a,b){var e=k.safeParse(d,p);e!==d.dom().scrollTop?b(d.dom().scrollTop):(d.dom().scrollTop=a,c.set(d,p,a))},i=function(){d.dom().scrollTop=e,c.set(d,p,e),b(e)},j=g.abs(e-f()),m=g.ceil(j/n);l.animate(f,e,m,h,i,o)})},u=function(c,d){return b.nu(function(b){var f=a.curry(q,c),h=function(a){e.set(c,"top",a+"px")},i=function(){h(d),b(d)},j=g.abs(d-f()),k=g.ceil(j/n);l.animate(f,d,k,h,i,o)})},v=function(a,b){var c=b+i.getYFixedData(a)+"px";e.set(a,"top",c)},w=function(a,c,d){var e=f.owner(a).dom().defaultView;return b.nu(function(b){v(a,d),v(c,d),e.scrollTo(0,d),b(d)})};return{moveScrollAndTop:s,moveOnlyScroll:t,moveOnlyTop:u,moveWindowScroll:w}}),g("8k",["5","9w"],function(a,b){return function(c){var d=a(b.pure({})),e=function(a){var e=b.nu(function(b){return c(a).get(b)});d.set(e)},f=function(a){d.get().get(function(){a()})};return{start:e,idle:f}}}),g("8l",["6","8h","8j","9v","9s"],function(a,b,c,d,e){var f=function(b,f,g,h,i){var j=d.getGreenzone(f,g),k=a.curry(e.refresh,b);h>j||i>j?c.moveOnlyScroll(f,f.dom().scrollTop-j+i).get(k):h<0&&c.moveOnlyScroll(f,f.dom().scrollTop+h).get(k)};return{scrollIntoView:f}}),g("a9",["y"],function(a){var b=function(b,c){return c(function(c){var d=[],e=0,f=function(a){return function(f){d[a]=f,e++,e>=b.length&&c(d)}};0===b.length?c([]):a.each(b,function(a,b){a.get(f(b))})})};return{par:b}}),g("9x",["y","9t","a9"],function(a,b,c){var d=function(a){return c.par(a,b.nu)},e=function(b,c){var e=a.map(b,c);return d(e)},f=function(a,b){return function(c){return b(c).bind(a)}};return{par:d,mapM:e,compose:f}}),g("8m",["y","9t","9x","39","8j","8n"],function(a,b,c,d,e,f){var g=function(a,c,e,f){var g=e+f;return d.set(a,c,g+"px"),b.pure(f)},h=function(a,b,c){var f=b+c,g=d.getRaw(a,"top").getOr(c),h=f-parseInt(g,10),i=a.dom().scrollTop+h;return e.moveScrollAndTop(a,i,f)},i=function(a,b){return a.fold(function(a,c,d){return g(a,c,b,d)},function(a,c){return h(a,b,c)})},j=function(b,d){var e=f.findFixtures(b),g=a.map(e,function(a){return i(a,d)});return c.par(g)};return{updatePositions:j}}),g("8o",["8","9","11","a","39"],function(a,b,c,d,e){var f=function(f,g){var h=d.fromTag("input");e.setAll(h,{opacity:"0",position:"absolute",top:"-1000px",left:"-1000px"}),b.append(f,h),a.focus(h),g(h),c.remove(h)};return{input:f}}),g("6g",["6","z","62","8","1u","12","a","39","1v","86","16","1w","8h","1x","1j","8i","8j","8k","8l","8m","8n","j","8o","84"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){var y=5,z=function(d,f,h,i,j,k){var l=r(function(a){return q.moveWindowScroll(d,f,a)}),m=function(){var c=x.getRectangles(k);return b.from(c[0]).bind(function(c){var d=c.top()-f.dom().scrollTop,e=d>i.innerHeight+y||d<-y;return e?b.some({top:a.constant(d),bottom:a.constant(d+c.height())}):b.none()})},n=c.last(function(){l.idle(function(){t.updatePositions(h,i.pageYOffset).get(function(){var a=m();a.each(function(a){f.dom().scrollTop=f.dom().scrollTop+a.top()}),l.start(0),j.refresh()})})},1e3),o=e.bind(g.fromDom(i),"scroll",function(){i.pageYOffset<0||n.throttle()});return t.updatePositions(h,i.pageYOffset).get(a.identity),{unbind:o.unbind}},A=function(b){var c=b.cWin(),i=b.ceBody(),j=b.socket(),k=b.toolstrip(),l=b.toolbar(),m=b.contentElement(),n=b.keyboardType(),o=b.outerWindow(),r=b.dropup(),t=u.takeover(j,i,k,r),x=n(b.outerBody(),c,f.body(),m,k,l),y=function(){x.toEditing(),I()},A=function(){x.toReading()},B=function(a){x.onToolbarTouch(a)},C=v.onChange(o,{onChange:a.noop,onReady:t.refresh});C.onAdjustment(function(){t.refresh()});var D=e.bind(g.fromDom(o),"resize",function(){t.isExpanding()&&t.refresh()}),E=z(k,j,b.outerBody(),o,t,c),F=p(c,m),G=function(){F.isActive()&&F.update()},H=function(){F.update()},I=function(){F.clear()},J=function(a,b){s.scrollIntoView(c,j,r,a,b)},K=function(){h.set(m,"height",m.dom().contentWindow.document.body.scrollHeight+"px")},L=function(b){t.setViewportOffset(b),q.moveOnlyTop(j,b).get(a.identity)},M=function(){t.restore(),C.destroy(),E.unbind(),D.unbind(),x.destroy(),F.destroy(),w.input(f.body(),d.blur)};return{toEditing:y,toReading:A,onToolbarTouch:B,refreshSelection:G,clearSelection:I,highlightSelection:H,scrollIntoView:J,updateToolbarPadding:a.noop,setViewportOffset:L,syncHeight:K,refreshStructure:t.refresh,destroy:M}};return{setup:A}}),g("6h",["y","6","8","1u","12","b","8p","8o"],function(a,b,c,d,e,f,g,h){ +var i=function(b,e,i,j){var k=function(){g.resume(e,j)},l=function(){h.input(b,c.blur)},m=d.bind(i,"keydown",function(b){a.contains(["input","textarea"],f.name(b.target()))||k()}),n=function(){},o=function(){m.unbind()};return{toReading:l,toEditing:k,onToolbarTouch:n,destroy:o}},j=function(a,d,e,f){var h=function(){c.blur(f)},i=function(){h()},j=function(){h()},k=function(){g.resume(d,f)};return{toReading:j,toEditing:k,onToolbarTouch:i,destroy:b.noop}};return{stubborn:i,timid:j}}),g("42",["6","1z","2o","8","a","2f","39","1b","6f","6g","5z","3y","6h","60","i","3z","61"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var r=function(r,s){var t=q.tag(),u=b.value(),v=b.value(),w=b.api(),x=b.api(),y=function(){s.hide();var b=e.fromDom(h);k.getActiveApi(r.editor).each(function(e){u.set({socketHeight:g.getRaw(r.socket,"height"),iframeHeight:g.getRaw(e.frame(),"height"),outerScroll:h.body.scrollTop}),v.set({exclusives:l.exclusive(b,"."+p.scrollable())}),f.add(r.container,o.resolve("fullscreen-maximized")),n.clobberStyles(r.container,e.body()),t.maximize(),g.set(r.socket,"overflow","scroll"),g.set(r.socket,"-webkit-overflow-scrolling","touch"),d.focus(e.body());var k=c.immutableBag(["cWin","ceBody","socket","toolstrip","toolbar","dropup","contentElement","cursor","keyboardType","isScrolling","outerWindow","outerBody"],[]);w.set(j.setup(k({cWin:e.win(),ceBody:e.body(),socket:r.socket,toolstrip:r.toolstrip,toolbar:r.toolbar,dropup:r.dropup.element(),contentElement:e.frame(),cursor:a.noop,outerBody:r.body,outerWindow:r.win,keyboardType:m.stubborn,isScrolling:function(){return v.get().exists(function(a){return a.socket.isScrolling()})}}))),w.run(function(a){a.syncHeight()}),x.set(i.initEvents(e,w,r.toolstrip,r.socket,r.dropup))})},z=function(){t.restore(),x.clear(),w.clear(),s.show(),u.on(function(a){a.socketHeight.each(function(a){g.set(r.socket,"height",a)}),a.iframeHeight.each(function(a){g.set(r.editor.getFrame(),"height",a)}),h.body.scrollTop=a.scrollTop}),u.clear(),v.on(function(a){a.exclusives.unbind()}),v.clear(),f.remove(r.container,o.resolve("fullscreen-maximized")),n.restoreStyles(),p.deregister(r.toolbar),g.remove(r.socket,"overflow"),g.remove(r.socket,"-webkit-overflow-scrolling"),d.blur(r.editor.getFrame()),k.getActiveApi(r.editor).each(function(a){a.clearSelection()})},A=function(){w.run(function(a){a.refreshStructure()})};return{enter:y,refreshStructure:A,exit:z}};return{create:r}}),g("25",["3q","2e","6","39","3s","42","3t"],function(a,b,c,d,e,f,g){var h=function(h){var i=b.asRawOrDie("Getting IosWebapp schema",e,h);d.set(i.toolstrip,"width","100%"),d.set(i.container,"position","relative");var j=function(){i.setReadOnly(!0),m.enter()},k=a.build(g.sketch(j,i.translate));i.alloy.add(k);var l={show:function(){i.alloy.add(k)},hide:function(){i.alloy.remove(k)}},m=f.create(i,l);return{setReadOnly:i.setReadOnly,refreshStructure:m.refreshStructure,enter:m.enter,exit:m.exit,destroy:c.noop}};return{produce:h}}),g("m",["1y","6","1z","25","i","21","22","23","24"],function(a,b,c,d,e,f,g,h,i){return function(j){var k=i({classes:[e.resolve("ios-container")]}),l=f(),m=c.api(),n=g.makeEditSwitch(m),o=g.makeSocket(),p=h.build(function(){m.run(function(a){a.refreshStructure()})},j);k.add(l.wrapper()),k.add(o),k.add(p.component());var q=function(a){var b=l.createGroups(a);l.setGroups(b)},r=function(a){var b=l.createGroups(a);l.setContextToolbar(b)},s=function(){l.focus()},t=function(){l.restoreToolbar()},u=function(a){m.set(d.produce(a))},v=function(){m.run(function(b){a.remove(o,n),b.exit()})},w=function(a){g.updateMode(o,n,a,k.root())};return{system:b.constant(k),element:k.element,init:u,exit:v,setToolbarGroups:q,setContextToolbar:r,focusToolbar:s,restoreToolbar:t,updateMode:w,socket:b.constant(o),dropup:b.constant(p)}}}),g("26",["1e"],function(a){return a("tinymce.EditorManager")}),g("n",["14","26"],function(a,b){var c=function(c){var d=a.readOptFrom(c.settings,"skin_url").fold(function(){return b.baseURL+"/skins/lightgray"},function(a){return a});return{content:d+"/content.mobile.min.css",ui:d+"/skin.mobile.min.css"}};return{derive:c}}),g("o",["y","6","x","g"],function(a,b,c,d){var e=["x-small","small","medium","large","x-large"],f=function(a,b,c){a.system().broadcastOn([d.formatChanged()],{command:b,state:c})},g=function(b,d){var e=c.keys(d.formatter.get());a.each(e,function(a){d.formatter.formatChanged(a,function(c){f(b,a,c)})}),a.each(["ul","ol"],function(a){d.selection.selectorChanged(a,function(c,d){f(b,a,c)})})};return{init:g,fontSizes:b.constant(e)}}),g("p",[],function(){var a=function(a){var b=function(){a._skinLoaded=!0,a.fire("SkinLoaded")};return function(){a.initialized?b():a.on("init",b)}};return{fireSkinLoaded:a}}),g("0",["1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y){var z=f.constant("toReading"),A=f.constant("toEditing");return l.add("mobile",function(l){var B=function(B){var C=w.derive(l);o.isSkinDisabled(l)===!1?(l.contentCSS.push(C.content),m.DOM.styleSheetLoader.load(C.ui,y.fireSkinLoaded(l))):y.fireSkinLoaded(l)();var D=function(){l.fire("scrollIntoView")},E=j.fromTag("div"),F=g.detect().os.isAndroid()?t(D):v(D),G=j.fromDom(B.targetNode);i.after(G,E),c.attachSystem(E,F.system());var H=function(a){return h.search(a).bind(function(a){return F.system().getByDom(a).toOption()})},I=B.targetNode.ownerDocument.defaultView,J=s.onChange(I,{onChange:function(){var a=F.system();a.broadcastOn([p.orientationChanged()],{width:s.getActualWidth(I)})},onReady:f.noop}),K=function(a,b,c){c===!1&&l.selection.collapse(),F.setToolbarGroups(c?a.get():b.get()),l.setMode(c===!0?"readonly":"design"),l.fire(c===!0?z():A()),F.updateMode(c)},L=function(a,b){return l.on(a,b),{unbind:function(){l.off(a)}}};return l.on("init",function(){F.init({editor:{getFrame:function(){return j.fromDom(l.contentAreaContainer.querySelector("iframe"))},onDomChanged:function(){return{unbind:f.noop}},onToReading:function(a){return L(z(),a)},onToEditing:function(a){return L(A(),a)},onScrollToCursor:function(a){l.on("scrollIntoView",function(b){a(b)});var b=function(){l.off("scrollIntoView"),J.destroy()};return{unbind:b}},onTouchToolstrip:function(){c()},onTouchContent:function(){var a=j.fromDom(l.editorContainer.querySelector("."+r.resolve("toolbar")));H(a).each(b.emitExecute),F.restoreToolbar(),c()},onTapContent:function(b){var c=b.target();if("img"===k.name(c))l.selection.select(c.dom()),b.kill();else if("a"===k.name(c)){var d=F.system().getByDom(j.fromDom(l.editorContainer));d.each(function(b){a.isAlpha(b)&&n.openLink(c.dom())})}}},container:j.fromDom(l.editorContainer),socket:j.fromDom(l.contentAreaContainer),toolstrip:j.fromDom(l.editorContainer.querySelector("."+r.resolve("toolstrip"))),toolbar:j.fromDom(l.editorContainer.querySelector("."+r.resolve("toolbar"))),dropup:F.dropup(),alloy:F.system(),translate:f.noop,setReadOnly:function(a){K(w,v,a)}});var c=function(){F.dropup().disappear(function(){F.system().broadcastOn([p.dropupDismissed()],{})})};d.registerInspector("remove this",F.system());var g={label:"The first group",scrollable:!1,items:[u.forToolbar("back",function(){l.selection.collapse(),F.exit()},{})]},h={label:"Back to read only",scrollable:!1,items:[u.forToolbar("readonly-back",function(){K(w,v,!0)},{})]},i={label:"The read only mode group",scrollable:!0,items:[]},m=q.setup(F,l),o=q.detect(l.settings,m),s={label:"the action group",scrollable:!0,items:o},t={label:"The extra group",scrollable:!1,items:[]},v=e([h,s,t]),w=e([g,i,t]);x.init(F,l)}),{iframeContainer:F.socket().element().dom(),editorContainer:F.element().dom()}};return{getNotificationManagerImpl:function(){return{open:f.identity,close:f.noop,reposition:f.noop,getArgs:f.identity}},renderUI:B}}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html b/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html index dc78e6b3..18ce03f2 100755 --- a/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html +++ b/assets/plugins/tinymce4/tpl/tpl.tinymce4.config.html @@ -1,26 +1,26 @@ - \ No newline at end of file diff --git a/assets/plugins/updater/plugin.updater.php b/assets/plugins/updater/plugin.updater.php index b6242ca5..c18a665b 100755 --- a/assets/plugins/updater/plugin.updater.php +++ b/assets/plugins/updater/plugin.updater.php @@ -23,6 +23,7 @@ $version = isset($version) ? $version : 'evolution-cms/evolution'; $type = isset($type) ? $type : 'tags'; $showButton = isset($showButton) ? $showButton : 'AdminOnly'; +$result = ''; if ($role != 1 && $wdgVisibility == 'AdminOnly') { @@ -207,15 +208,19 @@ switch ($_GET['q']) { case $_SESSION['updatelink']: $currentVersion = $modx->getVersionData(); - $commit = $_GET['sha']; + $commit = isset($_GET['sha']) ? $_GET['sha'] : ''; if ($_SESSION['updateversion'] != $currentVersion['version'] || (isset($commit) && $type == 'commits')) { file_put_contents(MODX_BASE_PATH . 'update.php', 'errors[] = array("ERROR:Download", $e->getMessage()); @@ -257,9 +262,8 @@ function removeFolder($path) return; } - $it = new RecursiveDirectoryIterator($dir); - $files = new RecursiveIteratorIterator($it, - RecursiveIteratorIterator::CHILD_FIRST); + $it = new RecursiveDirectoryIterator($dir); + $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $file) { if ($file->getFilename() === "." || $file->getFilename() === "..") { continue; @@ -273,10 +277,12 @@ function removeFolder($path) rmdir($dir); } -function copyFolder($src, $dest) -{ - $path = realpath($src); - $dest = realpath($dest); +function copyFolder( + $src, + $dest +) { + $path = realpath($src); + $dest = realpath($dest); $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach ($objects as $name => $object) { @@ -287,13 +293,15 @@ function copyFolder($src, $dest) } if (is_writable($dest . $startsAt) and $object->isFile()) { - copy((string) $name, $dest . $startsAt . DIRECTORY_SEPARATOR . basename($name)); + copy((string)$name, $dest . $startsAt . DIRECTORY_SEPARATOR . basename($name)); } } } -function mmkDir($folder, $perm = 0777) -{ +function mmkDir( + $folder, + $perm = 0777 +) { if (!is_dir($folder)) { mkdir($folder, $perm); } @@ -301,7 +309,7 @@ function mmkDir($folder, $perm = 0777) $version = "' . $version . '"; -downloadFile("https://github.com/".$version."/archive/" . $_GET["version"] . ".zip", "evo.zip"); +downloadFile("https://github.com/" . $version . "/archive/" . $_GET["version"] . ".zip", "evo.zip"); $zip = new ZipArchive; $res = $zip->open(__DIR__ . "/evo.zip"); $zip->extractTo(__DIR__ . "/temp"); @@ -321,24 +329,26 @@ function mmkDir($folder, $perm = 0777) unlink(__DIR__ . "/temp/" . $dir . "/ht.access"); unlink(__DIR__ . "/temp/" . $dir . "/README.md"); unlink(__DIR__ . "/temp/" . $dir . "/sample-robots.txt"); +unlink(__DIR__ . "/temp/" . $dir . "/composer.json"); - -if(is_file(__DIR__ . "/assets/cache/siteManager.php")){ +if (is_file(__DIR__ . "/assets/cache/siteManager.php")) { unlink(__DIR__ . "/temp/" . $dir . "/assets/cache/siteManager.php"); include_once(__DIR__ . "/assets/cache/siteManager.php"); - if(!defined("MGR_DIR")){ define("MGR_DIR","manager"); } - if(MGR_DIR != "manager"){ - mmkDir(__DIR__."/temp/".$dir."/".MGR_DIR); - copyFolder(__DIR__."/temp/".$dir."/manager", __DIR__."/temp/".$dir."/".MGR_DIR); - removeFolder(__DIR__."/temp/".$dir."/manager"); - } + if (!defined("MGR_DIR")) { + define("MGR_DIR", "manager"); + } + if (MGR_DIR != "manager") { + mmkDir(__DIR__ . "/temp/" . $dir . "/" . MGR_DIR); + copyFolder(__DIR__ . "/temp/" . $dir . "/manager", __DIR__ . "/temp/" . $dir . "/" . MGR_DIR); + removeFolder(__DIR__ . "/temp/" . $dir . "/manager"); + } // echo __DIR__."/temp/".$dir."/".MGR_DIR; } -copyFolder(__DIR__."/temp/".$dir, __DIR__."/"); -removeFolder(__DIR__."/temp"); -unlink(__DIR__."/evo.zip"); -unlink(__DIR__."/update.php"); +copyFolder(__DIR__ . "/temp/" . $dir, __DIR__ . "/"); +removeFolder(__DIR__ . "/temp"); +unlink(__DIR__ . "/evo.zip"); +unlink(__DIR__ . "/update.php"); header("Location: ' . constant('MODX_SITE_URL') . 'install/index.php?action=mode");'); if ($result === false){ echo 'Update failed: cannot write to ' . MODX_BASE_PATH . 'update.php'; diff --git a/assets/snippets/DocLister/core/DocLister.abstract.php b/assets/snippets/DocLister/core/DocLister.abstract.php index 5929f92c..09f9bbce 100644 --- a/assets/snippets/DocLister/core/DocLister.abstract.php +++ b/assets/snippets/DocLister/core/DocLister.abstract.php @@ -48,14 +48,14 @@ abstract class DocLister * @var DocumentParser * @access protected */ - protected $modx = null; + protected $modx; /** * Шаблонизатор чанков * @var DLTemplate * @access protected */ - protected $DLTemplate = null; + protected $DLTemplate; /** * Массив загруженных экстендеров @@ -133,7 +133,7 @@ abstract class DocLister * @var DLdebug|xNop * @access public */ - public $debug = null; + public $debug; /** * Массив дополнительно подключаемых таблиц с псевдонимами @@ -160,7 +160,8 @@ abstract class DocLister /** @var string имя шаблона обертки для записей */ public $ownerTPL = ''; - public $FS = null; + /** @var \Helpers\FS */ + public $FS; /** @var string результатирующая строка которая была последний раз сгенирирована * вызовами методов DocLister::render и DocLister::getJSON */ @@ -175,16 +176,21 @@ abstract class DocLister protected $alias = ''; /** @var null|paginate_DL_Extender */ - protected $extPaginate = null; + protected $extPaginate; /** @var null|Helpers\Config */ - public $config = null; + public $config; + + /** + * @var cache_DL_Extender + */ + protected $extCache; /** * Конструктор контроллеров DocLister * * @param DocumentParser $modx объект DocumentParser - основной класс MODX - * @param array $cfg массив параметров сниппета + * @param mixed $cfg массив параметров сниппета * @param int $startTime время запуска сниппета * @throws Exception */ @@ -202,7 +208,7 @@ public function __construct($modx, $cfg = array(), $startTime = null) $this->modx = $modx; $this->setDebug(1); - if (!is_array($cfg) || empty($cfg)) { + if (! is_array($cfg) || empty($cfg)) { $cfg = $this->modx->Event->params; } } else { @@ -283,8 +289,7 @@ public function __construct($modx, $cfg = array(), $startTime = null) if ($ext = $this->getCFGDef('templateExtension')) { $DLTemplate->setTemplateExtension($ext); } - $DLTemplate->setTwigTemplateVars(array('DocLister' => $this)); - $this->DLTemplate = $DLTemplate; + $this->DLTemplate = $DLTemplate->setTemplateData(array('DocLister' => $this)); } /** @@ -307,7 +312,7 @@ public function smartSplit($str) break; case ')': $open--; - if ($open == 0) { + if ($open === 0) { $res[] = $cur . ')'; $cur = ''; } else { @@ -319,7 +324,7 @@ public function smartSplit($str) $cur .= $e; break; case ';': - if ($open == 0) { + if ($open === 0) { $res[] = $cur; $cur = ''; } else { @@ -331,11 +336,11 @@ public function smartSplit($str) } } $cur = preg_replace("/(\))$/u", '', $cur); - if ($cur != '') { + if ($cur !== '') { $res[] = $cur; } - return $res; + return array_reverse($res); } /** @@ -420,7 +425,7 @@ public function getTable($name, $alias = '') $this->_table[$name] = $this->modx->getFullTableName($name); } $table = $this->_table[$name]; - if (!empty($alias) && is_scalar($alias)) { + if (! empty($alias) && is_scalar($alias)) { $table .= " as `" . $alias . "`"; } @@ -964,8 +969,8 @@ public function parseChunk($name, $data = array(), $parseDocumentSource = false) 2, array('html', null) ); - - $out = $this->DLTemplate->parseChunk($name, $data, $parseDocumentSource); + $disablePHx = $this->getCFGDef('disablePHx', 0); + $out = $this->DLTemplate->parseChunk($name, $data, $parseDocumentSource, (bool)$disablePHx); $out = $this->parseLang($out); if (empty($out)) { $this->debug->debug("Empty chunk: " . $this->debug->dumpData($name), '', 2); @@ -1001,7 +1006,8 @@ public function renderWrap($data) { $out = $data; $docs = count($this->_docs) - $this->skippedDocs; - if ((($this->getCFGDef("noneWrapOuter", "1") && $docs == 0) || $docs > 0) && !empty($this->ownerTPL)) { + $wrap = $this->getCFGDef('prepareWrap'); + if ((($this->getCFGDef("noneWrapOuter", "1") && $docs == 0) || $docs > 0) && !empty($this->ownerTPL) || !empty($wrap)) { $this->debug->debug("", "renderWrapTPL", 2); $parse = true; $plh = array($this->getCFGDef("sysKey", "dl") . ".wrap" => $data); @@ -1018,7 +1024,7 @@ public function renderWrap($data) 'nameParam' => 'prepareWrap', 'return' => 'placeholders' )); - if (is_bool($params) && $params === false) { + if ($params === false) { $out = $data; $parse = false; } @@ -1635,7 +1641,7 @@ protected function getFilters($filter_string) { $this->debug->debug("getFilters: " . $this->debug->dumpData($filter_string), 'getFilter', 1); // the filter parameter tells us, which filters can be used in this query - $filter_string = trim($filter_string, ' ;'); + $filter_string = ltrim(trim($filter_string, ';')); if (!$filter_string) { return; } @@ -1647,10 +1653,19 @@ protected function getFilters($filter_string) $logic_op_found = true; $subfilters = mb_substr($filter_string, strlen($op) + 1, mb_strlen($filter_string, "UTF-8"), "UTF-8"); $subfilters = $this->smartSplit($subfilters); - foreach ($subfilters as $subfilter) { - $subfilter = $this->getFilters(trim($subfilter)); + $lastFilter = ''; + foreach ($subfilters as $filter) { + /** + * С правой стороны не выполняется trim, т.к. там находятся значения. А они могу быть чувствительны к пробелам + */ + $subfilter = $this->getFilters(ltrim($filter) . ltrim($lastFilter)); if (!$subfilter) { - continue; + $lastFilter = explode(';', $filter, 2); + $subfilter = isset($lastFilter[1]) ? $this->getFilters($lastFilter[1]) : ''; + $lastFilter = $lastFilter[0]; + if (!$subfilter) { + continue; + } } if ($subfilter['join']) { $joins[] = $subfilter['join']; @@ -1659,8 +1674,8 @@ protected function getFilters($filter_string) $wheres[] = $subfilter['where']; } } - $output['join'] = !empty($joins) ? implode(' ', $joins) : ''; - $output['where'] = !empty($wheres) ? '(' . implode($sql, $wheres) . ')' : ''; + $output['join'] = !empty($joins) ? implode(' ', array_reverse($joins)) : ''; + $output['where'] = !empty($wheres) ? '(' . implode($sql, array_reverse($wheres)) . ')' : ''; } } @@ -1671,7 +1686,8 @@ protected function getFilters($filter_string) $output = false; } else { $output['join'] = $filter->get_join(); - $output['where'] = stripslashes($filter->get_where()); + $output['where'] = $filter->get_where(); + } } $this->debug->debug('getFilter'); diff --git a/assets/snippets/DocLister/core/controller/onetable.php b/assets/snippets/DocLister/core/controller/onetable.php index a05c8b3b..1c681457 100644 --- a/assets/snippets/DocLister/core/controller/onetable.php +++ b/assets/snippets/DocLister/core/controller/onetable.php @@ -27,12 +27,18 @@ class onetableDocLister extends DocLister protected $parentField = 'parent'; /** - * @absctract + * Экземпляр экстендера пагинации + * @var null|paginate_DL_Extender + */ + protected $extPaginate = null; + + /** + * @abstract */ public function getDocs($tvlist = '') { - if ($this->checkExtender('paginate')) { - $this->extender['paginate']->init($this); + if ($this->extPaginate = $this->getExtender('paginate')) { + $this->extPaginate->init($this); } $type = $this->getCFGDef('idType', 'parents'); $this->_docs = ($type == 'parents') ? $this->getChildrenList() : $this->getDocList(); @@ -121,7 +127,7 @@ public function _render($tpl = '') 'data' => $item, 'nameParam' => 'prepare' )); - if (is_bool($item) && $item === false) { + if ($item === false) { $this->skippedDocs++; continue; } @@ -200,7 +206,7 @@ public function getJSON($data, $fields, $array = array()) if ($extPrepare) { $row = $extPrepare->init($this, array('data' => $row)); - if (is_bool($row) && $row === false) { + if ($row === false) { continue; } } @@ -244,7 +250,7 @@ protected function getDocList() $limit = $this->LimitSQL($this->getCFGDef('queryLimit', 0)); $fields = $this->getCFGDef('selectFields', '*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $sort = $this->SortOrderSQL($this->getPK()); $rs = $this->dbQuery("SELECT {$fields} FROM {$from} {$where} {$group} {$sort} {$limit}"); @@ -312,7 +318,7 @@ protected function getChildrenList() $where = ''; } $fields = $this->getCFGDef('selectFields', '*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $sort = $this->SortOrderSQL($this->getPK()); $limit = $this->LimitSQL($this->getCFGDef('queryLimit', 0)); if ($sanitarInIDs != "''" || $this->getCFGDef('ignoreEmpty', '0')) { @@ -350,32 +356,30 @@ public function getChildrenCount() $where = array(); } if ($sanitarInIDs != "''") { - if ($sanitarInIDs != "''") { - switch ($this->getCFGDef('idType', 'parents')) { - case 'parents': - switch ($this->getCFGDef('showParent', '0')) { - case '-1': - $tmpWhere = "{$this->getParentField()} IN ({$sanitarInIDs})"; - break; - case 0: - $tmpWhere = "{$this->getParentField()} IN ({$sanitarInIDs}) AND {$this->getPK()} NOT IN({$sanitarInIDs})"; - break; - case 1: - default: - $tmpWhere = "({$this->getParentField()} IN ({$sanitarInIDs}) OR {$this->getPK()} IN({$sanitarInIDs}))"; - break; - } - if (($addDocs = $this->getCFGDef('documents', '')) != '') { - $addDocs = $this->sanitarIn($this->cleanIDs($addDocs)); - $where[] = "((" . $tmpWhere . ") OR {$this->getPK()} IN({$addDocs}))"; - } else { - $where[] = $tmpWhere; - } - break; - case 'documents': - $where[] = "{$this->getPK()} IN({$sanitarInIDs})"; - break; - } + switch ($this->getCFGDef('idType', 'parents')) { + case 'parents': + switch ($this->getCFGDef('showParent', '0')) { + case '-1': + $tmpWhere = "{$this->getParentField()} IN ({$sanitarInIDs})"; + break; + case 0: + $tmpWhere = "{$this->getParentField()} IN ({$sanitarInIDs}) AND {$this->getPK()} NOT IN({$sanitarInIDs})"; + break; + case 1: + default: + $tmpWhere = "({$this->getParentField()} IN ({$sanitarInIDs}) OR {$this->getPK()} IN({$sanitarInIDs}))"; + break; + } + if (($addDocs = $this->getCFGDef('documents', '')) != '') { + $addDocs = $this->sanitarIn($this->cleanIDs($addDocs)); + $where[] = "((" . $tmpWhere . ") OR {$this->getPK()} IN({$addDocs}))"; + } else { + $where[] = $tmpWhere; + } + break; + case 'documents': + $where[] = "{$this->getPK()} IN({$sanitarInIDs})"; + break; } } if (!empty($where)) { @@ -387,7 +391,7 @@ public function getChildrenCount() $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $maxDocs = $this->getCFGDef('maxDocs', 0); $limit = $maxDocs > 0 ? $this->LimitSQL($this->getCFGDef('maxDocs', 0)) : ''; - $rs = ("SELECT count(*) FROM (SELECT count(*) FROM {$from} {$where} {$group} {$limit}) as `tmp`"); + $rs = $this->dbQuery("SELECT count(*) FROM (SELECT count(*) FROM {$from} {$where} {$group} {$limit}) as `tmp`"); $out = $this->modx->db->getValue($rs); } diff --git a/assets/snippets/DocLister/core/controller/shopkeeper.php b/assets/snippets/DocLister/core/controller/shopkeeper.php old mode 100755 new mode 100644 index 74ea9d2c..97faf303 --- a/assets/snippets/DocLister/core/controller/shopkeeper.php +++ b/assets/snippets/DocLister/core/controller/shopkeeper.php @@ -108,7 +108,7 @@ public function _render($tpl = '') 'data' => $item, 'nameParam' => 'prepare' )); - if (is_bool($item) && $item === false) { + if ($item === false) { $this->skippedDocs++; continue; } @@ -136,7 +136,7 @@ public function _render($tpl = '') } /** - * @absctract + * @abstract */ public function getChildrenCount() { @@ -199,11 +199,14 @@ public function getChildrenCount() if (trim($where) == 'WHERE') { $where = ''; } - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $maxDocs = $this->getCFGDef('maxDocs', 0); $limit = $maxDocs > 0 ? $this->LimitSQL($this->getCFGDef('maxDocs', 0)) : ''; - $rs = $this->dbQuery("SELECT count(*) FROM (SELECT count(*) FROM {$from} {$where} {$group} {$limit}) as `tmp`"); + $subQuery = trim(implode(' ', array( + 'SELECT', 'count(*)', 'FROM', $from, $where, $group, $limit + ))); + $rs = $this->dbQuery("SELECT count(*) FROM ({$subQuery}) as `tmp`"); $out = $this->modx->db->getValue($rs); } @@ -247,7 +250,7 @@ protected function getDocList() $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $sort = $this->SortOrderSQL("c.createdon"); list($tbl_site_content, $sort) = $this->injectSortByTV($tbl_site_content . ' ' . $this->_filters['join'], $sort); @@ -356,7 +359,7 @@ protected function getChildrenList() $where = ''; } $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); if ($sanitarInIDs != "''" || $this->getCFGDef('ignoreEmpty', '0')) { $rs = $this->dbQuery("SELECT {$fields} FROM " . $from . " " . $where . " " . $group . " " . diff --git a/assets/snippets/DocLister/core/controller/site_content.php b/assets/snippets/DocLister/core/controller/site_content.php index dc826dad..84e25721 100644 --- a/assets/snippets/DocLister/core/controller/site_content.php +++ b/assets/snippets/DocLister/core/controller/site_content.php @@ -43,7 +43,7 @@ public function __construct($modx, $cfg = array(), $startTime = null) } /** - * @absctract + * @abstract */ public function getDocs($tvlist = '') { @@ -53,6 +53,14 @@ public function getDocs($tvlist = '') $this->extTV->getAllTV_Name(); + /** + * @var $multiCategories multicategories_DL_Extender + */ + $multiCategories = $this->getCFGDef('multiCategories', 0) ? $this->getExtender('multicategories', true) : null; + if ($multiCategories) { + $multiCategories->init($this); + } + /** * @var $extJotCount jotcount_DL_Extender */ @@ -178,7 +186,7 @@ public function _render($tpl = '') 'data' => $item, 'nameParam' => 'prepare' )); - if (is_bool($item) && $item === false) { + if ($item === false) { $this->skippedDocs++; continue; } @@ -281,7 +289,7 @@ public function getJSON($data, $fields, $array = array()) if ($extPrepare) { $row = $extPrepare->init($this, array('data' => $row)); - if (is_bool($row) && $row === false) { + if ($row === false) { continue; } } @@ -364,7 +372,7 @@ public function getChildrenCount() if (trim($where) == 'WHERE') { $where = ''; } - $group = $this->getGroupSQL($this->getCFGDef('groupBy', 'c.id')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $q_true = $q_true ? $q_true : $group != ''; if ($q_true) { @@ -419,7 +427,7 @@ protected function getDocList() $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); $sort = $this->SortOrderSQL("if(c.pub_date=0,c.createdon,c.pub_date)"); list($tbl_site_content, $sort) = $this->injectSortByTV( $tbl_site_content . ' ' . $this->_filters['join'], @@ -543,7 +551,7 @@ protected function getChildrenList() $where = ''; } $fields = $this->getCFGDef('selectFields', 'c.*'); - $group = $this->getGroupSQL($this->getCFGDef('groupBy', '')); + $group = $this->getGroupSQL($this->getCFGDef('groupBy', $this->getPK())); if ($sanitarInIDs != "''" || $this->getCFGDef('ignoreEmpty', '0')) { $rs = $this->dbQuery("SELECT {$fields} FROM " . $from . " " . $where . " " . diff --git a/assets/snippets/DocLister/core/controller/site_content_menu.php b/assets/snippets/DocLister/core/controller/site_content_menu.php index 479997b0..53c20a27 100644 --- a/assets/snippets/DocLister/core/controller/site_content_menu.php +++ b/assets/snippets/DocLister/core/controller/site_content_menu.php @@ -94,7 +94,8 @@ public function _getChildren() } $this->config->setConfig(array('hideSubMenus' => 1)); } - $this->levels = $this->extCache->load('menudata'); + $key = 'menudata' . $maxDepth; + $this->levels = $this->extCache->load($key); if ($this->levels === false) { $this->levels = array(); $currentLevel = &$this->currentLevel; @@ -143,7 +144,7 @@ public function _getChildren() $this->IDs = array_keys($docs); $this->AddTable = array(); } - $this->extCache->save($this->levels, 'menudata'); + $this->extCache->save($this->levels, $key); } } @@ -334,7 +335,7 @@ public function _render($tpl = '') 'data' => $data, 'nameParam' => 'prepare' )); - if (is_bool($data) && $data === false) { + if ($data === false) { continue; } } @@ -634,7 +635,7 @@ public function getJSON($data, $fields, $array = array()) 'data' => $data, 'nameParam' => 'prepare' )); - if (is_bool($data) && $data === false) { + if ($data === false) { continue; } } diff --git a/assets/snippets/DocLister/core/controller/site_content_tags.php b/assets/snippets/DocLister/core/controller/site_content_tags.php index 8803171a..98c5e5bb 100644 --- a/assets/snippets/DocLister/core/controller/site_content_tags.php +++ b/assets/snippets/DocLister/core/controller/site_content_tags.php @@ -33,7 +33,7 @@ public function __construct($modx, $cfg = array(), $startTime = null) } /** - * @absctract + * @abstract */ public function getUrl($id = 0) { diff --git a/assets/snippets/DocLister/core/extender/e.extender.inc b/assets/snippets/DocLister/core/extender/e.extender.inc index b49eb2ec..6b85deac 100755 --- a/assets/snippets/DocLister/core/extender/e.extender.inc +++ b/assets/snippets/DocLister/core/extender/e.extender.inc @@ -1,42 +1,42 @@ - - */ -class e_DL_Extender extends extDocLister -{ - /** - * @return mixed - */ - protected function run() - { - $out = $this->getCFGDef('data', array()); - if (($eFields = $this->DocLister->getCFGDef('e', 'title')) != '') { - if (is_scalar($eFields)) { - $eFields = explode(",", $eFields); - } - $sanitarTagsFields = array(); - if ($sanitarTags = $this->DocLister->getCFGDef('sanitarTags',0)) { - if (is_numeric($sanitarTags) && is_array($eFields)) { - $sanitarTagsFields = $eFields; - } elseif (is_scalar($sanitarTags)) { - $sanitarTagsFields = explode(",", $sanitarTags); - } - } - if (is_array($eFields)) { - foreach ($eFields as $field) { - $val = APIHelpers::getkey($out, $field, ''); - if (in_array($field, $sanitarTagsFields)) $val = APIHelpers::sanitarTag($val); - $out['e.' . $field] = APIHelpers::e($val); - } - } - } - - return $out; - } -} + + */ +class e_DL_Extender extends extDocLister +{ + /** + * @return mixed + */ + protected function run() + { + $out = $this->getCFGDef('data', array()); + if (($eFields = $this->DocLister->getCFGDef('e', 'title')) != '') { + if (is_scalar($eFields)) { + $eFields = explode(",", $eFields); + } + $sanitarTagsFields = array(); + if ($sanitarTags = $this->DocLister->getCFGDef('sanitarTags',0)) { + if (is_numeric($sanitarTags) && is_array($eFields)) { + $sanitarTagsFields = $eFields; + } elseif (is_scalar($sanitarTags)) { + $sanitarTagsFields = explode(",", $sanitarTags); + } + } + if (is_array($eFields)) { + foreach ($eFields as $field) { + $val = APIHelpers::getkey($out, $field, ''); + if (in_array($field, $sanitarTagsFields)) $val = APIHelpers::sanitarTag($val); + $out['e.' . $field] = APIHelpers::e($val); + } + } + } + + return $out; + } +} diff --git a/assets/snippets/DocLister/core/extender/multicategories.extender.inc b/assets/snippets/DocLister/core/extender/multicategories.extender.inc new file mode 100644 index 00000000..25d2ce74 --- /dev/null +++ b/assets/snippets/DocLister/core/extender/multicategories.extender.inc @@ -0,0 +1,35 @@ + + */ +class multicategories_DL_Extender extends extDocLister +{ + + /** + * @return bool + */ + protected function run() + { + if ($this->DocLister->getCFGDef('idType', 'parents') == 'parents') { + $ids = $this->DocLister->getIDs(); + if ($ids) { + $ids = implode(',', $ids); + $q = $this->DocLister->dbQuery("SELECT `doc` FROM {$this->modx->getFullTableName('site_content_categories')} WHERE `category` IN ({$ids})"); + $docs = $this->modx->db->getColumn('doc', $q); + if ($docs) { + $docs = implode(',', $docs); + $documents = $this->DocLister->getCFGDef('documents', ''); + $this->DocLister->config->setConfig(array( + "documents" => $documents . ',' . $docs + )); + } + } + }; + + return true; + } +} diff --git a/assets/snippets/DocLister/core/extender/paginate.extender.inc b/assets/snippets/DocLister/core/extender/paginate.extender.inc index e08761fb..b69f8ed4 100755 --- a/assets/snippets/DocLister/core/extender/paginate.extender.inc +++ b/assets/snippets/DocLister/core/extender/paginate.extender.inc @@ -1,318 +1,318 @@ - - * @see http://mis-algoritmos.com/2007/05/27/digg-style-pagination-class - */ -include_once(MODX_BASE_PATH . "assets/snippets/DocLister/lib/DLpaginate.class.php"); -include_once(MODX_BASE_PATH . "assets/snippets/DocLister/lib/DLpaginateReversed.class.php"); - -/** - * Class paginate_DL_Extender - */ -class paginate_DL_Extender extends extDocLister -{ - /** - * @var bool - */ - protected $lang = true; - protected $reverse = false; - protected $count = 0; - /** - * @var array - */ - private $_pages = array(); - - /** - * Call method - * - * @return int total pages - */ - protected function run() - { - if (($paginate = $this->DocLister->getCFGDef('paginate', '')) == '') { - $this->DocLister->config->setConfig(array('start' => 0)); - } - $this->reverse = $this->DocLister->getCFGDef('reversePagination', 0); - $pages = $this->getListPages($paginate, 'total'); - $display = $this->DocLister->getCFGDef('display', 0); - switch ($paginate) { - case 'offset': - $requestName = $this->getRequestName('start'); - $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) > 1) ? intval($_GET[$requestName]) : 0; - $this->_pages['current'] = ceil($start / $display) + 1; - if ($this->reverse && $this->_pages['current'] > 1) { - $offset = $pages * $display - $this->count; - $start -= $offset; - } - $this->DocLister->config->setConfig(array('start' => $start)); - break; - case 'pages': - default: - $paginate = 'pages'; - $requestName = $this->getRequestName('page'); - if ( - isset($_GET[$requestName]) - && !$this->DocLister->getCFGDef('noRedirect', 0) - ) { - if ((!$this->reverse && (intval($_GET[$requestName]) <= 1 || intval($_GET[$requestName]) > $pages)) || ($this->reverse && (intval($_GET[$requestName]) >= $pages || intval($_GET[$requestName]) < 1))) { - $this->modx->sendRedirect($this->getUrl()); - } - } - if ($this->reverse) { - $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) <= $pages) ? ($pages - intval($_GET[$requestName])) : 0; - $this->_pages['current'] = $start + 1; - $offset = $pages * $display - $this->count; - if ($this->_pages['current'] > 1) { - $this->DocLister->config->setConfig(array('start' => $start * $display - $offset)); - } else { - $display = $display - $offset; - $this->DocLister->config->setConfig(array('display' => $display)); - } - } else { - $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) > 1) ? (intval($_GET[$requestName]) - 1) : 0; - $this->_pages['current'] = $start + 1; - $this->DocLister->config->setConfig(array('start' => $start * $display)); - } - - - break; - } - - if ($this->reverse) { - $currentPage = $pages + 1 - $this->currentPage(); - $diff = $currentPage == $this->totalPage() ? 0 : $display * $pages - $this->count; - $from = ($this->currentPage() - 1) * $display + 1 - $diff; - $to = $currentPage == $this->totalPage() ? $display : $from - 1 + $display; - } else { - $currentPage = $this->currentPage(); - $from = ($this->currentPage() - 1) * $display + 1; - $to = $currentPage == $this->totalPage() ? $this->count : $from - 1 + $display; - } - $this->DocLister->toPlaceholders($currentPage, 1, "current"); - $this->DocLister->toPlaceholders($from, 1, "from"); - $this->DocLister->toPlaceholders($to, 1, "to"); - $this->DocLister->toPlaceholders($this->renderPages($paginate), 1, "pages"); - $this->DocLister->toPlaceholders(($this->currentPage() == 1 ? 1 : 0), 1, - "isstart"); //[+isstart+] – is start page - $this->DocLister->toPlaceholders(($this->currentPage() == $pages ? 1 : 0), 1, - "isstop"); //[+isstop+] – is end page - $this->DocLister->toPlaceholders($pages, 1, "totalPages"); // [+totalPages+] - total page. - $limit = $this->DocLister->getCFGDef('maxDocs', 0); - if ($limit > 0 && !$this->reverse) { - switch ($paginate) { - case 'offset': - $offset = $start; - break; - case 'pages': - default: - $offset = $start * $display; - break; - } - if (($offset + $display) > $limit) { - $this->DocLister->config->setConfig(array('display' => $limit - $offset)); - } - } - - return $pages; - } - - /** - * Get information about pagination (current, total or all in array) - * - * @param string $paginate Mode paginate. Empty string if no paginate - * @param string $name What information is interested - * @return string|array information about pagination - * - * @todo Set always placeholder count document. Not only pagination - */ - protected function getListPages($paginate, $name = '') - { - if ($paginate == '') { - $this->_pages['total'] = 1; - } else { - $addTables = $this->DocLister->AddTable; - $tmp = $this->count = (int)$this->DocLister->getChildrenCount(); - $this->DocLister->AddTable = $addTables; - - $display = $this->DocLister->getCFGDef('display', 0); - $this->_pages['total'] = ceil($tmp / $display); - if ($this->currentPage() <= $this->totalPage() || $this->totalPage() == 0 || $this->DocLister->getCFGDef('noRedirect', - 0) - ) { - $this->DocLister->toPlaceholders($tmp, 1, "count"); - } else { - $this->modx->sendRedirect($this->getUrl()); - } - } - - return APIHelpers::getkey($this->_pages, $name, $this->_pages); - } - - /** - * Номер текущей страницы - * @return int - */ - public function currentPage() - { - return (int)APIHelpers::getkey($this->_pages, 'current', 1); - } - - /** - * Общее число страниц - * @return int - */ - public function totalPage() - { - return (int)APIHelpers::getkey($this->_pages, 'total', 1); - } - - /** - * Общее число документов - * @return int - */ - public function totalDocs() - { - return $this->count; - } - - /** - * @param string $mode - * @return string - */ - private function renderPages($mode = '') - { - $currentPage = $this->currentPage(); - $p = $this->reverse ? new DLpaginateReversed : new DLpaginate; - $p->nextT = $this->DocLister->getChunkByParam('TplNextP', '@CODE:[%paginate.next%] >'); - $p->prevT = $this->DocLister->getChunkByParam('TplPrevP', '@CODE:< [%paginate.prev%]'); - $p->firstT = $this->DocLister->getChunkByParam('TplFirstP'); - $p->lastT = $this->DocLister->getChunkByParam('TplLastP'); - $p->numberT = $this->DocLister->getChunkByParam('TplPage', - '@CODE:[+num+]'); - $p->currentT = $this->DocLister->getChunkByParam('TplCurrentPage', '@CODE:[+num+]'); - $p->dotsT = $this->DocLister->getChunkByParam('TplDotsPage', '@CODE:...'); - $p->prevI = ''; - $p->nextI = ''; - $p->firstI = ''; - $p->lastI = ''; - if ($this->DocLister->getCFGDef("PrevNextAlwaysShow", 0) == '1') { - $p->nextI = $this->DocLister->getChunkByParam('TplNextI', '@CODE:[%paginate.next%] >'); - $p->prevI = $this->DocLister->getChunkByParam('TplPrevI', '@CODE:< [%paginate.prev%]'); - $p->firstI = $this->DocLister->getChunkByParam('TplFirstI'); - $p->lastI = $this->DocLister->getChunkByParam('TplLastI'); - } - $p->changeClass($this->DocLister->getCFGDef('PaginateClass', $p->className)); - $p->mainTpl = $this->DocLister->getChunkByParam('TplWrapPaginate', - '@CODE:
          [+wrap+]
          '); - $p->Items($this->totalPage()); - $p->limit($this->DocLister->getCFGDef("pageLimit", 1)); //show page count - $p->adjacents($this->DocLister->getCFGDef("pageAdjacents", 4)); - $p->target($this->getUrl()); - $p->currentPage($currentPage); - - switch (true) { - case ($mode == 'offset' && $this->totalPage() > 1): - $display = $this->DocLister->getCFGDef('display', 0); - $offset = $this->reverse ? $this->totalPage() * $display - $this->count : 0; - if ($currentPage == 1) { - $this->DocLister->config->setConfig(array('display'=>$display - $offset)); - } - $p->setMode('offset', array( - 'display' => $display - ))->parameterName($this->getRequestName('start')); - break; - case ($mode == 'pages' && $this->totalPage() > 1): - $p->parameterName($this->getRequestName('page')); - break; - } - if ($this->DocLister->getCFGDef('paginationMeta', 0)) { - $nextPage = $prevPage = 0; - if ($this->reverse) { - $currentPage = $this->totalPage() + 1 - $currentPage; - } - if ($currentPage > 1) { - $prevPage = $currentPage - 1; - } - if ($currentPage < $this->totalPage()) { - $nextPage = $currentPage + 1; - } - if ($nextPage) { - $this->modx->regClientStartupHTMLBlock(''); - } - if ($prevPage) { - $this->modx->regClientStartupHTMLBlock(''); - } - } - - return $p->getOutput(); - } - - /** - * @param string $requestName - * @return array|string - */ - public function getUrl($requestName = '') - { - $url = $this->DocLister->getUrl(); - $params = parse_url($url, PHP_URL_QUERY); - parse_str(html_entity_decode($params), $params); - if ($requestName == '') { - switch ($this->DocLister->getCFGDef('paginate', '')) { - case 'offset': - $requestName = 'start'; - $url = $this->buildUrl($url, $requestName, $params); - break; - case 'pages': - default: - $requestName = 'page'; - $call = $this->DocLister->getCFGDef('makePaginateUrl', ''); - if ((is_object($call) && ($call instanceof Closure)) || is_callable($call)) { - $url = call_user_func($call, compact('url', 'params'), $this->modx, $this->DocLister, $this); - } else { - $url = $this->buildUrl($url, $requestName, $params); - } - break; - } - } - - - return $url; - } - - /** - * @param $url - * @param $requestName - * @param $params - * @return array|string - */ - public function buildUrl($url, $requestName, $params) - { - if ($requestName != '' && is_array($params)) { - $q = http_build_query(array_merge($params, array($this->getRequestName($requestName) => null))); - $url = explode("?", $url, 2); - $url = $url[0]; - if (!empty($q)) { - $url .= "?" . $q; - } - } - - return $url; - } - - /** - * Имя REQUEST переменной в пагинаторе - * - * @param string $name основное имя REQUEST переменной в пагинаторе - * @return string - */ - public function getRequestName($name) - { - $id = $this->DocLister->getCFGDef('id', ''); - - return (($id != '') ? ($id . "_") : "") . $name; - } -} + + * @see http://mis-algoritmos.com/2007/05/27/digg-style-pagination-class + */ +include_once(MODX_BASE_PATH . "assets/snippets/DocLister/lib/DLpaginate.class.php"); +include_once(MODX_BASE_PATH . "assets/snippets/DocLister/lib/DLpaginateReversed.class.php"); + +/** + * Class paginate_DL_Extender + */ +class paginate_DL_Extender extends extDocLister +{ + /** + * @var bool + */ + protected $lang = true; + protected $reverse = false; + protected $count = 0; + /** + * @var array + */ + private $_pages = array(); + + /** + * Call method + * + * @return int total pages + */ + protected function run() + { + if (($paginate = $this->DocLister->getCFGDef('paginate', '')) == '') { + $this->DocLister->config->setConfig(array('start' => 0)); + } + $this->reverse = $this->DocLister->getCFGDef('reversePagination', 0); + $pages = $this->getListPages($paginate, 'total'); + $display = $this->DocLister->getCFGDef('display', 0); + switch ($paginate) { + case 'offset': + $requestName = $this->getRequestName('start'); + $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) > 1) ? intval($_GET[$requestName]) : 0; + $this->_pages['current'] = ceil($start / $display) + 1; + if ($this->reverse && $this->_pages['current'] > 1) { + $offset = $pages * $display - $this->count; + $start -= $offset; + } + $this->DocLister->config->setConfig(array('start' => $start)); + break; + case 'pages': + default: + $paginate = 'pages'; + $requestName = $this->getRequestName('page'); + if ( + isset($_GET[$requestName]) + && !$this->DocLister->getCFGDef('noRedirect', 0) + ) { + if ((!$this->reverse && (intval($_GET[$requestName]) <= 1 || intval($_GET[$requestName]) > $pages)) || ($this->reverse && (intval($_GET[$requestName]) >= $pages || intval($_GET[$requestName]) < 1))) { + $this->modx->sendRedirect($this->getUrl()); + } + } + if ($this->reverse) { + $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) <= $pages) ? ($pages - intval($_GET[$requestName])) : 0; + $this->_pages['current'] = $start + 1; + $offset = $pages * $display - $this->count; + if ($this->_pages['current'] > 1) { + $this->DocLister->config->setConfig(array('start' => $start * $display - $offset)); + } else { + $display = $display - $offset; + $this->DocLister->config->setConfig(array('display' => $display)); + } + } else { + $start = (isset($_GET[$requestName]) && intval($_GET[$requestName]) > 1) ? (intval($_GET[$requestName]) - 1) : 0; + $this->_pages['current'] = $start + 1; + $this->DocLister->config->setConfig(array('start' => $start * $display)); + } + + + break; + } + + if ($this->reverse) { + $currentPage = $pages + 1 - $this->currentPage(); + $diff = $currentPage == $this->totalPage() ? 0 : $display * $pages - $this->count; + $from = ($this->currentPage() - 1) * $display + 1 - $diff; + $to = $currentPage == $this->totalPage() ? $display : $from - 1 + $display; + } else { + $currentPage = $this->currentPage(); + $from = ($this->currentPage() - 1) * $display + 1; + $to = $currentPage == $this->totalPage() ? $this->count : $from - 1 + $display; + } + $this->DocLister->toPlaceholders($currentPage, 1, "current"); + $this->DocLister->toPlaceholders($from, 1, "from"); + $this->DocLister->toPlaceholders($to, 1, "to"); + $this->DocLister->toPlaceholders($this->renderPages($paginate), 1, "pages"); + $this->DocLister->toPlaceholders(($this->currentPage() == 1 ? 1 : 0), 1, + "isstart"); //[+isstart+] – is start page + $this->DocLister->toPlaceholders(($this->currentPage() == $pages ? 1 : 0), 1, + "isstop"); //[+isstop+] – is end page + $this->DocLister->toPlaceholders($pages, 1, "totalPages"); // [+totalPages+] - total page. + $limit = $this->DocLister->getCFGDef('maxDocs', 0); + if ($limit > 0 && !$this->reverse) { + switch ($paginate) { + case 'offset': + $offset = $start; + break; + case 'pages': + default: + $offset = $start * $display; + break; + } + if (($offset + $display) > $limit) { + $this->DocLister->config->setConfig(array('display' => $limit - $offset)); + } + } + + return $pages; + } + + /** + * Get information about pagination (current, total or all in array) + * + * @param string $paginate Mode paginate. Empty string if no paginate + * @param string $name What information is interested + * @return string|array information about pagination + * + * @todo Set always placeholder count document. Not only pagination + */ + protected function getListPages($paginate, $name = '') + { + if ($paginate == '') { + $this->_pages['total'] = 1; + } else { + $addTables = $this->DocLister->AddTable; + $tmp = $this->count = (int)$this->DocLister->getChildrenCount(); + $this->DocLister->AddTable = $addTables; + + $display = $this->DocLister->getCFGDef('display', 0); + $this->_pages['total'] = ceil($tmp / $display); + if ($this->currentPage() <= $this->totalPage() || $this->totalPage() == 0 || $this->DocLister->getCFGDef('noRedirect', + 0) + ) { + $this->DocLister->toPlaceholders($tmp, 1, "count"); + } else { + $this->modx->sendRedirect($this->getUrl()); + } + } + + return APIHelpers::getkey($this->_pages, $name, $this->_pages); + } + + /** + * Номер текущей страницы + * @return int + */ + public function currentPage() + { + return (int)APIHelpers::getkey($this->_pages, 'current', 1); + } + + /** + * Общее число страниц + * @return int + */ + public function totalPage() + { + return (int)APIHelpers::getkey($this->_pages, 'total', 1); + } + + /** + * Общее число документов + * @return int + */ + public function totalDocs() + { + return $this->count; + } + + /** + * @param string $mode + * @return string + */ + private function renderPages($mode = '') + { + $currentPage = $this->currentPage(); + $p = $this->reverse ? new DLpaginateReversed : new DLpaginate; + $p->nextT = $this->DocLister->getChunkByParam('TplNextP', '@CODE:[%paginate.next%] >'); + $p->prevT = $this->DocLister->getChunkByParam('TplPrevP', '@CODE:< [%paginate.prev%]'); + $p->firstT = $this->DocLister->getChunkByParam('TplFirstP'); + $p->lastT = $this->DocLister->getChunkByParam('TplLastP'); + $p->numberT = $this->DocLister->getChunkByParam('TplPage', + '@CODE:[+num+]'); + $p->currentT = $this->DocLister->getChunkByParam('TplCurrentPage', '@CODE:[+num+]'); + $p->dotsT = $this->DocLister->getChunkByParam('TplDotsPage', '@CODE:...'); + $p->prevI = ''; + $p->nextI = ''; + $p->firstI = ''; + $p->lastI = ''; + if ($this->DocLister->getCFGDef("PrevNextAlwaysShow", 0) == '1') { + $p->nextI = $this->DocLister->getChunkByParam('TplNextI', '@CODE:[%paginate.next%] >'); + $p->prevI = $this->DocLister->getChunkByParam('TplPrevI', '@CODE:< [%paginate.prev%]'); + $p->firstI = $this->DocLister->getChunkByParam('TplFirstI'); + $p->lastI = $this->DocLister->getChunkByParam('TplLastI'); + } + $p->changeClass($this->DocLister->getCFGDef('PaginateClass', $p->className)); + $p->mainTpl = $this->DocLister->getChunkByParam('TplWrapPaginate', + '@CODE:
          [+wrap+]
          '); + $p->Items($this->totalPage()); + $p->limit($this->DocLister->getCFGDef("pageLimit", 1)); //show page count + $p->adjacents($this->DocLister->getCFGDef("pageAdjacents", 4)); + $p->target($this->getUrl()); + $p->currentPage($currentPage); + + switch (true) { + case ($mode == 'offset' && $this->totalPage() > 1): + $display = $this->DocLister->getCFGDef('display', 0); + $offset = $this->reverse ? $this->totalPage() * $display - $this->count : 0; + if ($currentPage == 1) { + $this->DocLister->config->setConfig(array('display'=>$display - $offset)); + } + $p->setMode('offset', array( + 'display' => $display + ))->parameterName($this->getRequestName('start')); + break; + case ($mode == 'pages' && $this->totalPage() > 1): + $p->parameterName($this->getRequestName('page')); + break; + } + if ($this->DocLister->getCFGDef('paginationMeta', 0)) { + $nextPage = $prevPage = 0; + if ($this->reverse) { + $currentPage = $this->totalPage() + 1 - $currentPage; + } + if ($currentPage > 1) { + $prevPage = $currentPage - 1; + } + if ($currentPage < $this->totalPage()) { + $nextPage = $currentPage + 1; + } + if ($nextPage) { + $this->modx->regClientStartupHTMLBlock(''); + } + if ($prevPage) { + $this->modx->regClientStartupHTMLBlock(''); + } + } + + return $p->getOutput(); + } + + /** + * @param string $requestName + * @return array|string + */ + public function getUrl($requestName = '') + { + $url = $this->DocLister->getUrl(); + $params = parse_url($url, PHP_URL_QUERY); + parse_str(html_entity_decode($params), $params); + if ($requestName == '') { + switch ($this->DocLister->getCFGDef('paginate', '')) { + case 'offset': + $requestName = 'start'; + $url = $this->buildUrl($url, $requestName, $params); + break; + case 'pages': + default: + $requestName = 'page'; + $call = $this->DocLister->getCFGDef('makePaginateUrl', ''); + if ((is_object($call) && ($call instanceof Closure)) || is_callable($call)) { + $url = call_user_func($call, compact('url', 'params'), $this->modx, $this->DocLister, $this); + } else { + $url = $this->buildUrl($url, $requestName, $params); + } + break; + } + } + + + return $url; + } + + /** + * @param $url + * @param $requestName + * @param $params + * @return array|string + */ + public function buildUrl($url, $requestName, $params) + { + if ($requestName != '' && is_array($params)) { + $q = http_build_query(array_merge($params, array($this->getRequestName($requestName) => null))); + $url = explode("?", $url, 2); + $url = $url[0]; + if (!empty($q)) { + $url .= "?" . $q; + } + } + + return $url; + } + + /** + * Имя REQUEST переменной в пагинаторе + * + * @param string $name основное имя REQUEST переменной в пагинаторе + * @return string + */ + public function getRequestName($name) + { + $id = $this->DocLister->getCFGDef('id', ''); + + return (($id != '') ? ($id . "_") : "") . $name; + } +} diff --git a/assets/snippets/DocLister/core/extender/prepare.extender.inc b/assets/snippets/DocLister/core/extender/prepare.extender.inc index 3c3c6a1e..272907cc 100644 --- a/assets/snippets/DocLister/core/extender/prepare.extender.inc +++ b/assets/snippets/DocLister/core/extender/prepare.extender.inc @@ -42,15 +42,18 @@ class prepare_DL_Extender extends extDocLister if (($prepare = $this->DocLister->getCFGDef($nameParam, '')) != '') { $params = $this->getParams($out); if (is_scalar($prepare)) { - $names = explode(",", $prepare); - foreach ($names as $item) { + $prepare = array_map('trim', explode(',', $prepare)); + } else if (!is_array($prepare) || is_callable($prepare)) { + $prepare = [$prepare]; + } + + if (!empty($prepare)) { + foreach ($prepare as $item) { $params['data'] = $this->callPrepare($item, $params); if ($params['data'] === false) { break; } } - } else { - $params['data'] = $this->callPrepare($prepare, $params); } $out = $params['data']; } @@ -98,7 +101,7 @@ class prepare_DL_Extender extends extDocLister case is_array($data): $out = $data; break; - case ($data === '' || (is_bool($data) && $data === false)): + case ($data === '' || $data === false): $out = false; break; case is_string($data): diff --git a/assets/snippets/DocLister/core/extender/summary.extender.inc b/assets/snippets/DocLister/core/extender/summary.extender.inc index 218c3e43..f31c97fe 100755 --- a/assets/snippets/DocLister/core/extender/summary.extender.inc +++ b/assets/snippets/DocLister/core/extender/summary.extender.inc @@ -1,27 +1,27 @@ - - */ -class summary_DL_Extender extends extDocLister -{ - - /** - * @return mixed - */ - protected function run() - { - if (!empty($this->_cfg['action']) && !empty($this->_cfg['content'])) { - include_once(MODX_BASE_PATH . 'assets/lib/class.summary.php'); - $summary = new SummaryText($this->_cfg['content'], $this->_cfg['action'], - $this->getCFGDef('breakSummary', null)); - $summary->setCut($this->getCFGDef('cutSummary', '')); - $this->_cfg['content'] = $summary->run($this->getCFGDef('dotSummary', 0)); - } - - return $this->_cfg['content']; - } + + */ +class summary_DL_Extender extends extDocLister +{ + + /** + * @return mixed + */ + protected function run() + { + if (!empty($this->_cfg['action']) && !empty($this->_cfg['content'])) { + include_once(MODX_BASE_PATH . 'assets/lib/class.summary.php'); + $summary = new SummaryText($this->_cfg['content'], $this->_cfg['action'], + $this->getCFGDef('breakSummary', null)); + $summary->setCut($this->getCFGDef('cutSummary', '')); + $this->_cfg['content'] = $summary->run($this->getCFGDef('dotSummary', 0)); + } + + return $this->_cfg['content']; + } } \ No newline at end of file diff --git a/assets/snippets/DocLister/core/extender/tv.extender.inc b/assets/snippets/DocLister/core/extender/tv.extender.inc index 5390a447..89d166c4 100644 --- a/assets/snippets/DocLister/core/extender/tv.extender.inc +++ b/assets/snippets/DocLister/core/extender/tv.extender.inc @@ -88,13 +88,15 @@ class tv_DL_Extender extends extDocLister if ($this->modx->_TVnames === false) { $this->modx->_TVnames = array(); $from = $this->DocLister->getTable('site_tmplvars'); - $rs = $this->DocLister->dbQuery("SELECT `id`, `name`, `default_text`, `type` FROM {$from}"); + $rs = $this->DocLister->dbQuery("SELECT `id`, `name`, `default_text`, `type`, `display`, `display_params` FROM {$from}"); while ($item = $this->modx->db->getRow($rs)) { $this->modx->_TVnames[$item['name']] = array( - "id" => $item['id'], - "type" => $item['type'], - "default" => $item['default_text'] + 'id' => $item['id'], + 'type' => $item['type'], + 'default' => $item['default_text'], + 'display' => $item['display'], + 'display_params' => $item['display_params'] ); } $this->saveToCache($this->modx->_TVnames, '_TVnames'); @@ -138,8 +140,8 @@ class tv_DL_Extender extends extDocLister $TVkeys = array_keys($tvDef); foreach ($out as $itemid => $item) { foreach ($TVkeys as $name) { - if (!isset($out[$itemid][$name])) { - $out[$itemid][$name] = $tvDef[$name]; + if (!isset($out[$itemid][$name]) || $out[$itemid][$name] === '' || is_null($out[$itemid][$name])) { + $out[$itemid][$name] = $tvDef[$name]['default']; } if (in_array($name, $renderTV) || $renderTV == array("*")) { $out[$itemid][$name] = $this->renderTV($itemid, $name, $out[$itemid][$name], $tvDef[$name]); @@ -240,7 +242,7 @@ class tv_DL_Extender extends extDocLister $out = array(); foreach ($tvId as $id) { $name = $tvs[$id]; - $out[$this->_TVprefix . $name] = $this->modx->_TVnames[$name]['default']; + $out[$this->_TVprefix . $name] = $this->modx->_TVnames[$name]; } return $out; diff --git a/assets/snippets/DocLister/core/filter/private.filter.php b/assets/snippets/DocLister/core/filter/private.filter.php index ef1e3ed7..1063530f 100644 --- a/assets/snippets/DocLister/core/filter/private.filter.php +++ b/assets/snippets/DocLister/core/filter/private.filter.php @@ -23,7 +23,7 @@ public function __construct() * @param string $filter * @return bool */ - public function parseFilter($filter) + protected function parseFilter($filter) { return true; } diff --git a/assets/snippets/DocLister/core/filter/tv.filter.php b/assets/snippets/DocLister/core/filter/tv.filter.php index 76726462..51437877 100644 --- a/assets/snippets/DocLister/core/filter/tv.filter.php +++ b/assets/snippets/DocLister/core/filter/tv.filter.php @@ -54,8 +54,8 @@ protected function parseFilter($filter) $this->tv_id = $tmp[0]; } if (!$this->tv_id) { - $tvid = $this->modx->db->query("SELECT id FROM " . $this->DocLister->getTable('site_tmplvars') . " WHERE `name` = '" . $this->modx->db->escape($this->field) . "'"); - $this->tv_id = intval($this->modx->db->getValue($tvid)); + $tvid = $this->DocLister->dbQuery("SELECT id FROM " . $this->DocLister->getTable('site_tmplvars') . " WHERE `name` = '" . $this->modx->db->escape($this->field) . "'"); + $this->tv_id = (int)$this->modx->db->getValue($tvid); } if (!$this->tv_id) { diff --git a/assets/snippets/DocLister/core/filterDocLister.abstract.php b/assets/snippets/DocLister/core/filterDocLister.abstract.php index f1851577..01a3231c 100644 --- a/assets/snippets/DocLister/core/filterDocLister.abstract.php +++ b/assets/snippets/DocLister/core/filterDocLister.abstract.php @@ -142,7 +142,13 @@ protected function build_sql_where($table_alias, $field, $operator, $value) case '!=': case 'no': case 'isnot': - $output .= " != '" . $this->modx->db->escape($value) . "'"; + $output = '(' . $output . " != '" . $this->modx->db->escape($value) . "' OR " . $output . ' IS NULL)'; + break; + case 'isnull': + $output .= ' IS NULL'; + break; + case 'isnotnull': + $output .= ' IS NOT NULL'; break; case '>': case 'gt': @@ -191,7 +197,9 @@ protected function build_sql_where($table_alias, $field, $operator, $value) * искомый $word = " когда". С trim найдем "...мне некогда..." и "...тут когда-то..."; * Без trim будт обнаружено только "...тут когда-то..." */ - $word_arr[] = $this->DocLister->LikeEscape($output, $word); + if (($likeWord = $this->DocLister->LikeEscape($output, $word)) !== '') { + $word_arr[] = $likeWord; + } } if (!empty($word_arr)) { $output = '(' . implode(' OR ', $word_arr) . ')'; @@ -199,11 +207,25 @@ protected function build_sql_where($table_alias, $field, $operator, $value) $output = ''; } break; + case 'containsAll': + $words = explode($this->DocLister->getCFGDef('filter_delimiter', ','), $value); + $word_arr = array(); + foreach ($words as $word) { + if (($likeWord = $this->DocLister->LikeEscape($output, $word)) !== '') { + $word_arr[] = $likeWord; + } + } + if (!empty($word_arr)) { + $output = '(' . implode(' AND ', $word_arr) . ')'; + } else { + $output = ''; + } + break; case 'in': $output .= ' IN(' . $this->DocLister->sanitarIn($value, ',', true) . ')'; break; case 'notin': - $output .= ' NOT IN(' . $this->DocLister->sanitarIn($value, ',', true) . ')'; + $output = '(' . $output . ' NOT IN(' . $this->DocLister->sanitarIn($value, ',', true) . ') OR ' . $output . ' IS NULL)'; break; default: $output = ''; diff --git a/assets/snippets/DocLister/core/lang/english/paginate.inc.php b/assets/snippets/DocLister/core/lang/english/paginate.inc.php old mode 100755 new mode 100644 index b07423d7..d504bae5 --- a/assets/snippets/DocLister/core/lang/english/paginate.inc.php +++ b/assets/snippets/DocLister/core/lang/english/paginate.inc.php @@ -3,8 +3,6 @@ die('What are you doing? Get out of here!'); } -setlocale(LC_ALL, 'ru_RU.UTF-8'); - $_lang = array(); $_lang['next'] = 'Next'; $_lang['prev'] = 'Prev'; diff --git a/assets/snippets/DocLister/lib/DLTemplate.class.php b/assets/snippets/DocLister/lib/DLTemplate.class.php index c8bb66eb..94bad4b0 100644 --- a/assets/snippets/DocLister/lib/DLTemplate.class.php +++ b/assets/snippets/DocLister/lib/DLTemplate.class.php @@ -26,13 +26,14 @@ class DLTemplate /** * @var null|Twig_Environment twig object */ - protected $twig = null; + protected $twig; protected $twigEnabled = false; + protected $bladeEnabled = false; - protected $twigTemplateVars = array(); + protected $templateData = array(); - public $phx = null; + public $phx; /** * gets the instance via lazy initialization (created on first usage) @@ -76,19 +77,24 @@ private function __wakeup() { } + public function getTemplatePath() + { + return $this->templatePath; + } + /** * Задает относительный путь к папке с шаблонами * - * @param $path + * @param string $path + * @param bool $supRoot * @return $this */ - public function setTemplatePath($path) + public function setTemplatePath($path, $supRoot = false) { $path = trim($path); - $path = preg_replace(array( - '/\.*[\/|\\\]/i', - '/[\/|\\\]+/i' - ), array('/', '/'), $path); + if ($supRoot === false) { + $path = $this->cleanPath($path); + } if (!empty($path)) { $this->templatePath = $path; @@ -97,6 +103,20 @@ public function setTemplatePath($path) return $this; } + /** + * @param string $path + * @return string + */ + protected function cleanPath($path) + { + return preg_replace(array('/\.*[\/|\\\]/i', '/[\/|\\\]+/i'), array('/', '/'), $path); + } + + public function getTemplateExtension() + { + return $this->templateExtension; + } + /** * Задает расширение файла с шаблоном * @@ -105,7 +125,8 @@ public function setTemplatePath($path) */ public function setTemplateExtension($ext) { - $ext = trim($ext, ". \t\n\r\0\x0B"); + $ext = $this->cleanPath(trim($ext, ". \t\n\r\0\x0B")); + if (!empty($ext)) { $this->templateExtension = $ext; } @@ -114,20 +135,32 @@ public function setTemplateExtension($ext) } /** - * Additional data for twig templates + * Additional data for external templates * * @param array $data * @return $this */ - public function setTwigTemplateVars($data = array()) + public function setTemplateData($data = array()) { if (is_array($data)) { - $this->twigTemplateVars = $data; + $this->templateData = $data; } return $this; } + /** + * @param array $data + * @return array + */ + public function getTemplateData($data = array()) + { + $plh = $this->templateData; + $plh['data'] = $data; + $plh['modx'] = $this->modx; + return $plh; + } + /** * Сохранение данных в массив плейсхолдеров * @@ -158,7 +191,9 @@ public function toPlaceholders($data, $set = 0, $key = 'contentPlaceholder', $pr public function getChunk($name) { $tpl = ''; + $ext = null; $this->twigEnabled = substr($name, 0, 3) == '@T_'; + $this->bladeEnabled = substr($name, 0, 3) == '@B_';//(0 === strpos($name, '@B_')); if ($name != '' && !isset($this->modx->chunkCache[$name])) { $mode = (preg_match( '/^((@[A-Z_]+)[:]{0,1})(.*)/Asu', @@ -168,31 +203,24 @@ public function getChunk($name) $subTmp = (isset($tmp[3])) ? trim($tmp[3]) : null; if ($this->twigEnabled) { $mode = '@' . substr($mode, 3); + } elseif ($this->bladeEnabled) { + $mode = '@' . substr($mode, 3); + $ext = $this->getTemplateExtension(); + $this->setTemplateExtension('blade.php'); } switch ($mode) { case '@FILE': if ($subTmp != '') { $real = realpath(MODX_BASE_PATH . $this->templatePath); - $path = realpath(MODX_BASE_PATH . $this->templatePath . preg_replace(array( - '/\.*[\/|\\\]/i', - '/[\/|\\\]+/i' - ), array('/', '/'), $subTmp) . '.' . $this->templateExtension); - $fname = explode(".", $path); - if ($real == substr( - $path, - 0, - strlen($real) - ) && end($fname) == $this->templateExtension && file_exists($path) + $path = realpath(MODX_BASE_PATH . $this->templatePath . $this->cleanPath($subTmp) . '.' . $this->templateExtension); + if (basename($path, '.' . $this->templateExtension) !== '' && + 0 === strpos($path, $real) && + file_exists($path) ) { $tpl = file_get_contents($path); } } break; - case '@CHUNK': - if ($subTmp != '') { - $tpl = $this->modx->getChunk($subTmp); - } - break; case '@INLINE': case '@TPL': case '@CODE': @@ -237,13 +265,41 @@ public function getChunk($name) case '@TEMPLATE': $tpl = $this->getTemplate($subTmp); break; + case '@CHUNK': + $tpl = $this->getBaseChunk($subTmp); + break; default: - $tpl = $this->modx->getChunk($name); + $tpl = $this->getBaseChunk($name); } $this->modx->chunkCache[$name] = $tpl; } else { - if ($name != '') { - $tpl = $this->modx->getChunk($name); + $tpl = $this->getBaseChunk($name); + } + + if($ext !== null) { + $this->setTemplateExtension($ext); + } + return $tpl; + } + + protected function getBaseChunk($name) + { + if (empty($name)) { + return null; + } + + if (isset ($this->modx->chunkCache[$name])) { + $tpl = $this->modx->chunkCache[$name]; + } else { + $table = $this->modx->getFullTableName('site_htmlsnippets'); + $query = $this->modx->db->query( + "SELECT `snippet` FROM " . $table . " WHERE `name`='" . $this->modx->db->escape($name) . "' AND `disabled`=0" + ); + if ($this->modx->db->getRecordCount($query) == 1) { + $row = $this->modx->db->getRow($query); + $tpl = $row['snippet']; + } else { + $tpl = null; } } @@ -328,30 +384,30 @@ public function getTemplate($id) * @param bool $parseDocumentSource render html template via DocumentParser::parseDocumentSource() * @return string html template with data without placeholders */ - public function parseChunk($name, $data = array(), $parseDocumentSource = false) + public function parseChunk($name, $data = array(), $parseDocumentSource = false, $disablePHx = false) { $out = $this->getChunk($name); - if ($this->twigEnabled && ($out != '') && ($twig = $this->getTwig($name, $out))) { - $plh = $this->twigTemplateVars; - $plh['data'] = $data; - $plh['modx'] = $this->modx; - $out = $twig->render(md5($name), $plh); - } else { - if (is_array($data) && ($out != '')) { + switch (true) { + case $this->twigEnabled && $out !== '' && ($twig = $this->getTwig($name, $out)): + $out = $twig->render(md5($name), $this->getTemplateData($data)); + break; + case $this->bladeEnabled && $out !== '' && ($blade = $this->getBlade($name, $out)): + $out = $blade->with($this->getTemplateData($data))->render(); + break; + case is_array($data) && ($out != ''): if (preg_match("/\[\+[A-Z0-9\.\_\-]+\+\]/is", $out)) { $item = $this->renameKeyArr($data, '[', ']', '+'); $out = str_replace(array_keys($item), array_values($item), $out); } - if (preg_match("/:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?/is", $out)) { + if (!$disablePHx && preg_match("/:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?/is", $out)) { if (is_null($this->phx) || !($this->phx instanceof DLphx)) { $this->phx = $this->createPHx(0, 1000); } $this->phx->placeholders = array(); $this->setPHxPlaceholders($data); $out = $this->phx->Parse($out); - $out = $this->cleanPHx($out); } - } + break; } if ($parseDocumentSource) { $out = $this->parseDocumentSource($out); @@ -405,6 +461,34 @@ protected function getTwig($name, $tpl) return $twig; } + /** + * Return clone of blade + * + * @param string $name + * @param string $tpl + * @return Illuminate\View\Factory + */ + protected function getBlade($name, $tpl) + { + $out = null; + try { + /** + * Illuminate\View\Factory $blade + */ + $blade = $this->modx->blade; + $cache = md5($name). '-'. sha1($tpl); + $path = MODX_BASE_PATH . '/assets/cache/blade/' . $cache . '.blade.php'; + if (! file_exists($path)) { + file_put_contents($path, $tpl); + } + $out = $blade->make('cache::' . $cache); + } catch (\Exception $exception) { + $this->modx->messageQuit($exception->getMessage()); + } + + return $out; + } + /** * * @param string $string diff --git a/assets/snippets/DocLister/lib/DLphx.class.php b/assets/snippets/DocLister/lib/DLphx.class.php index 71a1a369..1a0b96c1 100644 --- a/assets/snippets/DocLister/lib/DLphx.class.php +++ b/assets/snippets/DocLister/lib/DLphx.class.php @@ -1,829 +1,829 @@ - array(), - 'ui' => array(), - 'mo' => array() - ); - public $safetags = array( - array('~(?modx = $modx; - $this->user["mgrid"] = isset($_SESSION['mgrInternalKey']) ? intval($_SESSION['mgrInternalKey']) : 0; - $this->user["usrid"] = isset($_SESSION['webInternalKey']) ? intval($_SESSION['webInternalKey']) : 0; - $this->user["id"] = ($this->user["usrid"] > 0) ? (-$this->user["usrid"]) : $this->user["mgrid"]; - - $this->debug = (bool)$debug; - - $this->maxPasses = ($maxpass != '') ? $maxpass : 50; - - $this->modx->setPlaceholder("phx", "&_PHX_INTERNAL_&"); - if (function_exists('mb_internal_encoding')) { - mb_internal_encoding($this->modx->config['modx_charset']); - } - } - - // Plugin event hook for MODx - public function OnParseDocument() - { - // Get document output from MODx - $template = $this->modx->documentOutput; - // To the parse cave .. let's go! *insert batman tune here* - $template = $this->Parse($template); - // Set processed document output in MODx - $this->modx->documentOutput = $template; - } - - // Parser: Preparation, cleaning and checkup - - /** - * @param string $template - * @return mixed|string - */ - public function Parse($template = '') - { - // If we already reached max passes don't get at it again. - if ($this->curPass == $this->maxPasses) { - return $template; - } - // Set template pre-process hash - $st = md5($template); - // Replace non-call characters in the template: [, ] - $template = preg_replace($this->safetags[0], $this->safetags[1], $template); - // To the parse mobile.. let's go! *insert batman tune here* - $template = $this->ParseValues($template); - // clean up unused placeholders that have modifiers attached (MODx can't clean them) - preg_match_all('~(?:=`[^`@]*?)(\[\+([^:\+\[\]]+)([^\[\]]*?)\+\])~s', $template, $matches); - if ($matches[0]) { - $template = str_replace($matches[1], '', $template); - $this->Log("Cleaning unsolved tags: \n" . implode("\n", $matches[2])); - } - // Restore non-call characters in the template: [, ] - $template = str_replace($this->safetags[1], $this->safetags[2], $template); - // Set template post-process hash - $et = md5($template); - // If template has changed, parse it once more... - if ($st != $et) { - $template = $this->Parse($template); - } - // Write an event log if debugging is enabled and there is something to log - if ($this->debug && $this->debugLog) { - $this->modx->logEvent($this->curPass, 1, $this->createEventLog(), $this->name . ' ' . $this->version); - $this->debugLog = false; - } - - // Return the processed template - return $template; - } - - // Parser: Tag detection and replacements - - /** - * @param string $template - * @return mixed|string - */ - public function ParseValues($template = '') - { - $this->curPass = $this->curPass + 1; - $st = md5($template); - - $this->LogPass(); - - // MODX Chunks - if (preg_match_all('~(?Log('MODX Chunks -> Merging all chunk tags'); - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - for ($i = 0; $i < $count; $i++) { - $var_search[] = $matches[0][$i]; - $input = $matches[1][$i]; - $this->Log('MODX Chunk: ' . $input); - $input = $this->modx->mergeChunkContent('{{' . $input . '}}'); - $var_replace[] = $this->Filter($input, $matches[2][$i]); - } - $template = str_replace($var_search, $var_replace, $template); - } - - // MODx Snippets - //if ( preg_match_all('~\[(\[|!)([^\[]*?)(!|\])\]~s',$template, $matches)) { - if (preg_match_all('~(?Log("MODx Snippet -> " . $snippet); - - // Let MODx evaluate snippet - $replace = $this->modx->evalSnippets("[[" . $snippet . "]]"); - $this->LogSnippet($replace); - - // Replace values - $var_search[] = $matches[0][$i]; - $var_replace[] = $replace; - } - $template = str_replace($var_search, $var_replace, $template); - } - - // PHx / MODx Tags - if (preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $template, $matches)) { - //$matches[0] // Complete string that's need to be replaced - //$matches[1] // Type - //$matches[2] // The placeholder(s) - //$matches[3] // The modifiers - //$matches[4] // Type (end character) - - $count = count($matches[0]); - $var_search = array(); - $var_replace = array(); - for ($i = 0; $i < $count; $i++) { - $input = $matches[2][$i]; - $modifiers = $matches[3][$i]; - $var_search[] = $matches[0][$i]; - switch ($matches[1][$i]) { - // Document / Template Variable eXtended - case "*": - $this->Log("MODx TV/DV: " . $input); - $input = $this->modx->mergeDocumentContent("[*" . $input . "*]"); - $replace = $this->Filter($input, $modifiers); - break; - // MODx Setting eXtended - case "(": - $this->Log("MODx Setting variable: " . $input); - $input = $this->modx->mergeSettingsContent("[(" . $input . ")]"); - $replace = $this->Filter($input, $modifiers); - break; - // MODx Placeholder eXtended - default: - $this->Log("MODx / PHx placeholder variable: " . $input); - // Check if placeholder is set - if (!array_key_exists($input, $this->placeholders) && !array_key_exists( - $input, - $this->modx->placeholders - ) - ) { - // not set so try again later. - $input = ''; - } else { - // is set, get value and run filter - $input = $this->getPHxVariable($input); - } - $replace = $this->Filter($input, $modifiers); - break; - } - $var_replace[] = $replace; - } - $template = str_replace($var_search, $var_replace, $template); - } - $et = md5($template); // Post-process template hash - - // Log an event if this was the maximum pass - if ($this->curPass == $this->maxPasses) { - $this->Log("Max passes reached. infinite loop protection so exiting.\n If you need the extra passes set the max passes to the highest count of nested tags in your template."); - } - // If this pass is not at maximum passes and the template hash is not the same, get at it again. - if (($this->curPass < $this->maxPasses) && ($st != $et)) { - $template = $this->ParseValues($template); - } - - return $template; - } - - // Parser: modifier detection and eXtended processing if needed - - /** - * @param $input - * @param $modifiers - * @return mixed|null|string - */ - public function Filter($input, $modifiers) - { - $output = $input; - $this->Log(" |--- Input = '" . $output . "'"); - if (preg_match_all('~:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?~s', $modifiers, $matches)) { - $modifier_cmd = $matches[1]; // modifier command - $modifier_value = $matches[2]; // modifier value - $count = count($modifier_cmd); - $condition = array(); - for ($i = 0; $i < $count; $i++) { - $output = trim($output); - $this->Log(" |--- Modifier = '" . $modifier_cmd[$i] . "'"); - if ($modifier_value[$i] != '') { - $this->Log(" |--- Options = '" . $modifier_value[$i] . "'"); - } - switch ($modifier_cmd[$i]) { - ##### Conditional Modifiers - case "input": - case "if": - $output = $modifier_value[$i]; - break; - case "equals": - case "is": - case "eq": - $condition[] = intval(($output == $modifier_value[$i])); - break; - case "empty": - $condition[] = intval(empty($output)); - break; - case "notequals": - case "isnot": - case "isnt": - case "ne": - $condition[] = intval(($output != $modifier_value[$i])); - break; - case "isgreaterthan": - case "isgt": - case "eg": - $condition[] = intval(($output >= $modifier_value[$i])); - break; - case "islowerthan": - case "islt": - case "el": - $condition[] = intval(($output <= $modifier_value[$i])); - break; - case "greaterthan": - case "gt": - $condition[] = intval(($output > $modifier_value[$i])); - break; - case "lowerthan": - case "lt": - $condition[] = intval(($output < $modifier_value[$i])); - break; - case "isinrole": - case "ir": - case "memberof": - case "mo": // Is Member Of (same as inrole but this one can be stringed as a conditional) - if ($output == "&_PHX_INTERNAL_&") { - $output = $this->user["id"]; - } - $grps = ($this->strlen($modifier_value[$i]) > 0) ? explode(",", $modifier_value[$i]) : array(); - $condition[] = intval($this->isMemberOfWebGroupByUserId($output, $grps)); - break; - case "or": - $condition[] = "||"; - break; - case "and": - $condition[] = "&&"; - break; - case "show": - $conditional = implode(' ', $condition); - $isvalid = intval($this->runCode($conditional)); - if (!$isvalid) { - $output = null; - } - break; - case "then": - $conditional = implode(' ', $condition); - $isvalid = intval($this->runCode($conditional)); - if ($isvalid) { - $output = $modifier_value[$i]; - } else { - $output = null; - } - break; - case "else": - $conditional = implode(' ', $condition); - $isvalid = intval($this->runCode($conditional)); - if (!$isvalid) { - $output = $modifier_value[$i]; - } - break; - case "select": - $raw = explode("&", $modifier_value[$i]); - $map = array(); - $count = count($raw); - for ($m = 0; $m < $count; $m++) { - $mi = explode("=", $raw[$m]); - $map[$mi[0]] = $mi[1]; - } - $output = $map[$output]; - break; - ##### End of Conditional Modifiers - - ##### String Modifiers - case "default": - $output = ($output === '') ? $modifier_value[0] : $output; - break; - case "lcase": - case "strtolower": - $output = $this->strtolower($output); - break; - case "ucase": - case "strtoupper": - $output = $this->strtoupper($output); - break; - case "ucfirst": - $output = $this->ucfirst($output); - break; - case "lcfirst": - $output = $this->lcfirst($output); - break; - case "ucwords": - $output = $this->ucwords($output); - break; - case "htmlent": - case "htmlentities": - $output = htmlentities($output, ENT_QUOTES, $this->modx->config['modx_charset']); - break; - case "html_entity_decode": - $output = html_entity_decode($output, ENT_QUOTES, $this->modx->config['modx_charset']); - break; - case "esc": - $output = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", APIHelpers::e($output)); - $output = str_replace(array("[", "]", "`"), array("[", "]", "`"), $output); - break; - case "strip": - $output = preg_replace("~([\n\r\t\s]+)~", " ", $output); - break; - case "notags": - case "strip_tags": - $output = strip_tags($output); - break; - case "length": - case "len": - case "strlen": - $output = $this->strlen($output); - break; - case "reverse": - case "strrev": - $output = $this->strrev($output); - break; - case "wordwrap": // default: 70 - $wrapat = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 70; - $output = preg_replace_callback("@(\b\w+\b)@", function ($m) use ($wrapat) { - return wordwrap($m[1], $wrapat, ' ', 1); - }, $output); - break; - case "limit": // default: 100 - $limit = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 100; - $output = $this->substr($output, 0, $limit); - break; - case "str_shuffle": - case "shuffle": - $output = $this->str_shuffle($output); - break; - case "str_word_count": - case "word_count": - case "wordcount": - $output = $this->str_word_count($output); - break; - - ##### Special functions - case "math": - $filter = preg_replace("~([a-zA-Z\n\r\t\s])~", "", $modifier_value[$i]); - $filter = str_replace("?", $output, $filter); - $output = eval("return " . $filter . ";"); - break; - case "isnotempty": - if (!empty($output)) { - $output = $modifier_value[$i]; - } - break; - case "isempty": - case "ifempty": - if (empty($output)) { - $output = $modifier_value[$i]; - } - break; - case "nl2br": - $output = nl2br($output); - break; - case "date": - $output = strftime($modifier_value[$i], (int)$output); - break; - case "set": - $c = $i + 1; - if ($count > $c && $modifier_cmd[$c] == "value") { - $output = preg_replace("~([^a-zA-Z0-9])~", "", $modifier_value[$i]); - } - break; - case "value": - if ($i > 0 && $modifier_cmd[$i - 1] == "set") { - $this->modx->SetPlaceholder("phx." . $output, $modifier_value[$i]); - } - $output = null; - break; - case "md5": - $output = md5($output); - break; - case "userinfo": - if ($output == "&_PHX_INTERNAL_&") { - $output = $this->user["id"]; - } - $output = $this->ModUser($output, $modifier_value[$i]); - break; - case "inrole": // deprecated - if ($output == "&_PHX_INTERNAL_&") { - $output = $this->user["id"]; - } - $grps = ($this->strlen($modifier_value[$i]) > 0) ? explode(",", $modifier_value[$i]) : array(); - $output = intval($this->isMemberOfWebGroupByUserId($output, $grps)); - break; - - // If we haven't yet found the modifier, let's look elsewhere - default: - $snippet = ''; - // modified by Anton Kuzmin (23.06.2010) // - $snippetName = 'phx:' . $modifier_cmd[$i]; - if (isset($this->modx->snippetCache[$snippetName])) { - $snippet = $this->modx->snippetCache[$snippetName]; - } else { -// not in cache so let's check the db - $sql = "SELECT snippet FROM " . $this->modx->getFullTableName("site_snippets") . " WHERE " . $this->modx->getFullTableName("site_snippets") . ".name='" . $this->modx->db->escape($snippetName) . "';"; - $result = $this->modx->db->query($sql); - if ($this->modx->db->getRecordCount($result) == 1) { - $row = $this->modx->db->getRow($result); - $snippet = $this->modx->snippetCache[$row['name']] = $row['snippet']; - $this->Log(" |--- DB -> Custom Modifier"); - } else { - if ($this->modx->db->getRecordCount($result) == 0) { -// If snippet not found, look in the modifiers folder - $filename = $this->modx->config['rb_base_dir'] . 'plugins/phx/modifiers/' . $modifier_cmd[$i] . '.phx.php'; - if (@file_exists($filename)) { - $file_contents = @file_get_contents($filename); - $file_contents = str_replace('<' . '?php', '', $file_contents); - $file_contents = str_replace('?' . '>', '', $file_contents); - $file_contents = str_replace('modx->snippetCache[$snippetName] = $file_contents; - $this->modx->snippetCache[$snippetName . 'Props'] = ''; - $this->Log(" |--- File ($filename) -> Custom Modifier"); - } else { - $this->Log(" |--- PHX Error: {$modifier_cmd[$i]} could not be found"); - } - } - } - } - if (!empty($snippet)) { - $output = $this->modx->runSnippet($snippetName, array( - 'input' => $output, - 'output' => $output, - 'options' => $modifier_value[$i] - )); - } else { - $output = ''; - } - break; - } - if (count($condition)) { - $this->Log(" |--- Condition = '" . $condition[count($condition) - 1] . "'"); - } - $this->Log(" |--- Output = '" . $output . "'"); - } - } - - return $output; - } - - /** - * @param string $code - * @return mixed - */ - private function runCode($code) - { - return eval("return (" . $code . ");"); - } - - // Event logging (debug) - - /** - * @return string - */ - public function createEventLog() - { - $out = ''; - if (!empty($this->console)) { - $console = implode("\n", $this->console); - $this->console = array(); - - $out = '
          ' . $console . '
          '; - } - - return $out; - } - - // Returns a cleaned string escaping the HTML and special MODx characters - - /** - * @param $string - * @return array|mixed|string - */ - public function LogClean($string) - { - $string = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", $string); - $string = APIHelpers::sanitarTag($string); - - return $string; - } - - // Simple log entry - - /** - * @param $string - */ - public function Log($string) - { - if ($this->debug) { - $this->debugLog = true; - $this->console[] = (count($this->console) + 1 - $this->curPass) . " [" . strftime( - "%H:%M:%S", - time() - ) . "] " . $this->LogClean($string); - } - } - - // Log snippet output - - /** - * @param $string - */ - public function LogSnippet($string) - { - if ($this->debug) { - $this->debugLog = true; - $this->console[] = (count($this->console) + 1 - $this->curPass) . " [" . strftime( - "%H:%M:%S", - time() - ) . "] " . " |--- Returns:
          " . $this->LogClean($string) . "
          "; - } - } - - // Log pass - public function LogPass() - { - $this->console[] = "
          Pass " . $this->curPass . "
          "; - } - - // Log pass - - /** - * @param $string - */ - public function LogSource($string) - { - $this->console[] = "
          Source:
          " . $this->LogClean($string); - } - - // Returns the specified field from the user record - // positive userid = manager, negative integer = webuser - -/** - * @param $userid - * @param $field - * @return mixed - */ - public function ModUser($userid, $field) - { - if (!array_key_exists($userid, $this->cache["ui"])) { - if (intval($userid) < 0) { - $user = $this->modx->getWebUserInfo(-($userid)); - } else { - $user = $this->modx->getUserInfo($userid); - } - $this->cache["ui"][$userid] = $user; - } else { - $user = $this->cache["ui"][$userid]; - } - - return $user[$field]; - } - - // Returns true if the user id is in one the specified webgroups - - /** - * @param int $userid - * @param array $groupNames - * @return bool - */ - public function isMemberOfWebGroupByUserId($userid = 0, $groupNames = array()) - { - $userid = (int)$userid; - // if $groupNames is not an array return false - if (!is_array($groupNames)) { - return false; - } - - // if the user id is a negative number make it positive - if (intval($userid) < 0) { - $userid = -($userid); - } - - // Creates an array with all webgroups the user id is in - if (!array_key_exists($userid, $this->cache["mo"])) { - $tbl = $this->modx->getFullTableName("webgroup_names"); - $tbl2 = $this->modx->getFullTableName("web_groups"); - $sql = "SELECT `wgn`.`name` FROM {$tbl} `wgn` INNER JOIN {$tbl2} `wg` ON `wg`.`webgroup`=`wgn`.`id` AND `wg`.`webuser`={$userid}"; - $this->cache["mo"][$userid] = $grpNames = $this->modx->db->getColumn("name", $sql); - } else { - $grpNames = $this->cache["mo"][$userid]; - } - // Check if a supplied group matches a webgroup from the array we just created - foreach ($groupNames as $k => $v) { - if (in_array(trim($v), $grpNames)) { - return true; - } - } - - // If we get here the above logic did not find a match, so return false - return false; - } - - // Returns the value of a PHx/MODx placeholder. - - /** - * @param $name - * @return mixed|string - */ - public function getPHxVariable($name) - { - // Check if this variable is created by PHx - if (array_key_exists($name, $this->placeholders)) { - // Return the value from PHx - return $this->placeholders[$name]; - } else { - // Return the value from MODx - return $this->modx->getPlaceholder($name); - } - } - - // Sets a placeholder variable which can only be access by PHx - - /** - * @param $name - * @param $value - */ - public function setPHxVariable($name, $value) - { - if ($name != "phx") { - $this->placeholders[$name] = $value; - } - } - - //mbstring - - /** - * @param $str - * @param $s - * @param null $l - * @return string - */ - public function substr($str, $s, $l = null) - { - if (function_exists('mb_substr')) { - return mb_substr($str, $s, $l); - } - - return substr($str, $s, $l); - } - - /** - * @param $str - * @return int - */ - public function strlen($str) - { - if (function_exists('mb_strlen')) { - return mb_strlen($str); - } - - return strlen($str); - } - - /** - * @param $str - * @return string - */ - public function strtolower($str) - { - if (function_exists('mb_strtolower')) { - return mb_strtolower($str); - } - - return strtolower($str); - } - - /** - * @param $str - * @return string - */ - public function strtoupper($str) - { - if (function_exists('mb_strtoupper')) { - return mb_strtoupper($str); - } - - return strtoupper($str); - } - - /** - * @param $str - * @return string - */ - public function ucfirst($str) - { - if (function_exists('mb_strtoupper') && function_exists('mb_substr') && function_exists('mb_strlen')) { - return mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str)); - } - - return ucfirst($str); - } - - /** - * @param $str - * @return string - */ - public function lcfirst($str) - { - if (function_exists('mb_strtolower') && function_exists('mb_substr') && function_exists('mb_strlen')) { - return mb_strtolower(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str)); - } - - return lcfirst($str); - } - - /** - * @param $str - * @return string - */ - public function ucwords($str) - { - if (function_exists('mb_convert_case')) { - return mb_convert_case($str, MB_CASE_TITLE); - } - - return ucwords($str); - } - - /** - * @param $str - * @return string - */ - public function strrev($str) - { - preg_match_all('/./us', $str, $ar); - - return implode(array_reverse($ar[0])); - } - - /** - * @param $str - * @return string - */ - public function str_shuffle($str) - { - preg_match_all('/./us', $str, $ar); - shuffle($ar[0]); - - return implode($ar[0]); - } - - /** - * @param $str - * @return int - */ - public function str_word_count($str) - { - return count(preg_split('~[^\p{L}\p{N}\']+~u', $str)); - } -} + array(), + 'ui' => array(), + 'mo' => array() + ); + public $safetags = array( + array('~(?modx = $modx; + $this->user["mgrid"] = isset($_SESSION['mgrInternalKey']) ? intval($_SESSION['mgrInternalKey']) : 0; + $this->user["usrid"] = isset($_SESSION['webInternalKey']) ? intval($_SESSION['webInternalKey']) : 0; + $this->user["id"] = ($this->user["usrid"] > 0) ? (-$this->user["usrid"]) : $this->user["mgrid"]; + + $this->debug = (bool)$debug; + + $this->maxPasses = ($maxpass != '') ? $maxpass : 50; + + $this->modx->setPlaceholder("phx", "&_PHX_INTERNAL_&"); + if (function_exists('mb_internal_encoding')) { + mb_internal_encoding($this->modx->config['modx_charset']); + } + } + + // Plugin event hook for MODx + public function OnParseDocument() + { + // Get document output from MODx + $template = $this->modx->documentOutput; + // To the parse cave .. let's go! *insert batman tune here* + $template = $this->Parse($template); + // Set processed document output in MODx + $this->modx->documentOutput = $template; + } + + // Parser: Preparation, cleaning and checkup + + /** + * @param string $template + * @return mixed|string + */ + public function Parse($template = '') + { + // If we already reached max passes don't get at it again. + if ($this->curPass == $this->maxPasses) { + return $template; + } + // Set template pre-process hash + $st = md5($template); + // Replace non-call characters in the template: [, ] + $template = preg_replace($this->safetags[0], $this->safetags[1], $template); + // To the parse mobile.. let's go! *insert batman tune here* + $template = $this->ParseValues($template); + // clean up unused placeholders that have modifiers attached (MODx can't clean them) + preg_match_all('~(?:=`[^`@]*?)(\[\+([^:\+\[\]]+)([^\[\]]*?)\+\])~s', $template, $matches); + if ($matches[0]) { + $template = str_replace($matches[1], '', $template); + $this->Log("Cleaning unsolved tags: \n" . implode("\n", $matches[2])); + } + // Restore non-call characters in the template: [, ] + $template = str_replace($this->safetags[1], $this->safetags[2], $template); + // Set template post-process hash + $et = md5($template); + // If template has changed, parse it once more... + if ($st != $et) { + $template = $this->Parse($template); + } + // Write an event log if debugging is enabled and there is something to log + if ($this->debug && $this->debugLog) { + $this->modx->logEvent($this->curPass, 1, $this->createEventLog(), $this->name . ' ' . $this->version); + $this->debugLog = false; + } + + // Return the processed template + return $template; + } + + // Parser: Tag detection and replacements + + /** + * @param string $template + * @return mixed|string + */ + public function ParseValues($template = '') + { + $this->curPass = $this->curPass + 1; + $st = md5($template); + + $this->LogPass(); + // MODX Chunks + if (preg_match_all('~(?Log('MODX Chunks -> Merging all chunk tags'); + $count = count($matches[0]); + $var_search = array(); + $var_replace = array(); + for ($i = 0; $i < $count; $i++) { + $var_search[] = $matches[0][$i]; + $input = $matches[1][$i]; + $this->Log('MODX Chunk: ' . $input); + $input = $this->modx->mergeChunkContent('{{' . $input . '}}'); + $var_replace[] = $this->Filter($input, $matches[2][$i]); + } + $template = str_replace($var_search, $var_replace, $template); + } + + // MODx Snippets + //if ( preg_match_all('~\[(\[|!)([^\[]*?)(!|\])\]~s',$template, $matches)) { + if (preg_match_all('~(?Log("MODx Snippet -> " . $snippet); + + // Let MODx evaluate snippet + $replace = $this->modx->evalSnippets("[[" . $snippet . "]]"); + $this->LogSnippet($replace); + + // Replace values + $var_search[] = $matches[0][$i]; + $var_replace[] = $replace; + } + $template = str_replace($var_search, $var_replace, $template); + } + + // PHx / MODx Tags + if (preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $template, $matches)) { + //$matches[0] // Complete string that's need to be replaced + //$matches[1] // Type + //$matches[2] // The placeholder(s) + //$matches[3] // The modifiers + //$matches[4] // Type (end character) + + $count = count($matches[0]); + $var_search = array(); + $var_replace = array(); + for ($i = 0; $i < $count; $i++) { + $input = $matches[2][$i]; + $modifiers = $matches[3][$i]; + if(empty($modifiers)) continue; + $var_search[] = $matches[0][$i]; + switch ($matches[1][$i]) { + // Document / Template Variable eXtended + case "*": + $this->Log("MODx TV/DV: " . $input); + $input = $this->modx->mergeDocumentContent("[*" . $input . "*]"); + $replace = $this->Filter($input, $modifiers); + break; + // MODx Setting eXtended + case "(": + $this->Log("MODx Setting variable: " . $input); + $input = $this->modx->mergeSettingsContent("[(" . $input . ")]"); + $replace = $this->Filter($input, $modifiers); + break; + // MODx Placeholder eXtended + default: + $this->Log("MODx / PHx placeholder variable: " . $input); + // Check if placeholder is set + if (!array_key_exists($input, $this->placeholders) && !array_key_exists( + $input, + $this->modx->placeholders + ) + ) { + // not set so try again later. + $input = ''; + } else { + // is set, get value and run filter + $input = $this->getPHxVariable($input); + } + $replace = $this->Filter($input, $modifiers); + break; + } + $var_replace[] = $replace; + } + $template = str_replace($var_search, $var_replace, $template); + } + $et = md5($template); // Post-process template hash + + // Log an event if this was the maximum pass + if ($this->curPass == $this->maxPasses) { + $this->Log("Max passes reached. infinite loop protection so exiting.\n If you need the extra passes set the max passes to the highest count of nested tags in your template."); + } + // If this pass is not at maximum passes and the template hash is not the same, get at it again. + if (($this->curPass < $this->maxPasses) && ($st != $et)) { + $template = $this->ParseValues($template); + } + + return $template; + } + + // Parser: modifier detection and eXtended processing if needed + + /** + * @param $input + * @param $modifiers + * @return mixed|null|string + */ + public function Filter($input, $modifiers) + { + $output = $input; + $this->Log(" |--- Input = '" . $output . "'"); + if (preg_match_all('~:([^:=]+)(?:=`(.*?)`(?=:[^:=]+|$))?~s', $modifiers, $matches)) { + $modifier_cmd = $matches[1]; // modifier command + $modifier_value = $matches[2]; // modifier value + $count = count($modifier_cmd); + $condition = array(); + for ($i = 0; $i < $count; $i++) { + $output = trim($output); + $this->Log(" |--- Modifier = '" . $modifier_cmd[$i] . "'"); + if ($modifier_value[$i] != '') { + $this->Log(" |--- Options = '" . $modifier_value[$i] . "'"); + } + switch ($modifier_cmd[$i]) { + ##### Conditional Modifiers + case "input": + case "if": + $output = $modifier_value[$i]; + break; + case "equals": + case "is": + case "eq": + $condition[] = intval(($output == $modifier_value[$i])); + break; + case "empty": + $condition[] = intval(empty($output)); + break; + case "notequals": + case "isnot": + case "isnt": + case "ne": + $condition[] = intval(($output != $modifier_value[$i])); + break; + case "isgreaterthan": + case "isgt": + case "eg": + $condition[] = intval(($output >= $modifier_value[$i])); + break; + case "islowerthan": + case "islt": + case "el": + $condition[] = intval(($output <= $modifier_value[$i])); + break; + case "greaterthan": + case "gt": + $condition[] = intval(($output > $modifier_value[$i])); + break; + case "lowerthan": + case "lt": + $condition[] = intval(($output < $modifier_value[$i])); + break; + case "isinrole": + case "ir": + case "memberof": + case "mo": // Is Member Of (same as inrole but this one can be stringed as a conditional) + if ($output == "&_PHX_INTERNAL_&") { + $output = $this->user["id"]; + } + $grps = ($this->strlen($modifier_value[$i]) > 0) ? explode(",", $modifier_value[$i]) : array(); + $condition[] = intval($this->isMemberOfWebGroupByUserId($output, $grps)); + break; + case "or": + $condition[] = "||"; + break; + case "and": + $condition[] = "&&"; + break; + case "show": + $conditional = implode(' ', $condition); + $isvalid = intval($this->runCode($conditional)); + if (!$isvalid) { + $output = null; + } + break; + case "then": + $conditional = implode(' ', $condition); + $isvalid = intval($this->runCode($conditional)); + if ($isvalid) { + $output = $modifier_value[$i]; + } else { + $output = null; + } + break; + case "else": + $conditional = implode(' ', $condition); + $isvalid = intval($this->runCode($conditional)); + if (!$isvalid) { + $output = $modifier_value[$i]; + } + break; + case "select": + $raw = explode("&", $modifier_value[$i]); + $map = array(); + $count = count($raw); + for ($m = 0; $m < $count; $m++) { + $mi = explode("=", $raw[$m]); + $map[$mi[0]] = $mi[1]; + } + $output = $map[$output]; + break; + ##### End of Conditional Modifiers + + ##### String Modifiers + case "default": + $output = ($output === '') ? $modifier_value[0] : $output; + break; + case "lcase": + case "strtolower": + $output = $this->strtolower($output); + break; + case "ucase": + case "strtoupper": + $output = $this->strtoupper($output); + break; + case "ucfirst": + $output = $this->ucfirst($output); + break; + case "lcfirst": + $output = $this->lcfirst($output); + break; + case "ucwords": + $output = $this->ucwords($output); + break; + case "htmlent": + case "htmlentities": + $output = htmlentities($output, ENT_QUOTES, $this->modx->config['modx_charset']); + break; + case "html_entity_decode": + $output = html_entity_decode($output, ENT_QUOTES, $this->modx->config['modx_charset']); + break; + case "esc": + $output = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", APIHelpers::e($output)); + $output = str_replace(array("[", "]", "`"), array("[", "]", "`"), $output); + break; + case "strip": + $output = preg_replace("~([\n\r\t\s]+)~", " ", $output); + break; + case "notags": + case "strip_tags": + $output = strip_tags($output); + break; + case "length": + case "len": + case "strlen": + $output = $this->strlen($output); + break; + case "reverse": + case "strrev": + $output = $this->strrev($output); + break; + case "wordwrap": // default: 70 + $wrapat = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 70; + $output = preg_replace_callback("@(\b\w+\b)@", function ($m) use ($wrapat) { + return wordwrap($m[1], $wrapat, ' ', 1); + }, $output); + break; + case "limit": // default: 100 + $limit = intval($modifier_value[$i]) ? intval($modifier_value[$i]) : 100; + $output = $this->substr($output, 0, $limit); + break; + case "str_shuffle": + case "shuffle": + $output = $this->str_shuffle($output); + break; + case "str_word_count": + case "word_count": + case "wordcount": + $output = $this->str_word_count($output); + break; + + ##### Special functions + case "math": + $filter = preg_replace("~([a-zA-Z\n\r\t\s])~", "", $modifier_value[$i]); + $filter = str_replace("?", $output, $filter); + $output = eval("return " . $filter . ";"); + break; + case "isnotempty": + if (!empty($output)) { + $output = $modifier_value[$i]; + } + break; + case "isempty": + case "ifempty": + if (empty($output)) { + $output = $modifier_value[$i]; + } + break; + case "nl2br": + $output = nl2br($output); + break; + case "date": + $output = strftime($modifier_value[$i], (int)$output); + break; + case "set": + $c = $i + 1; + if ($count > $c && $modifier_cmd[$c] == "value") { + $output = preg_replace("~([^a-zA-Z0-9])~", "", $modifier_value[$i]); + } + break; + case "value": + if ($i > 0 && $modifier_cmd[$i - 1] == "set") { + $this->modx->SetPlaceholder("phx." . $output, $modifier_value[$i]); + } + $output = null; + break; + case "md5": + $output = md5($output); + break; + case "userinfo": + if ($output == "&_PHX_INTERNAL_&") { + $output = $this->user["id"]; + } + $output = $this->ModUser($output, $modifier_value[$i]); + break; + case "inrole": // deprecated + if ($output == "&_PHX_INTERNAL_&") { + $output = $this->user["id"]; + } + $grps = ($this->strlen($modifier_value[$i]) > 0) ? explode(",", $modifier_value[$i]) : array(); + $output = intval($this->isMemberOfWebGroupByUserId($output, $grps)); + break; + + // If we haven't yet found the modifier, let's look elsewhere + default: + $snippet = ''; + // modified by Anton Kuzmin (23.06.2010) // + $snippetName = 'phx:' . $modifier_cmd[$i]; + if (isset($this->modx->snippetCache[$snippetName])) { + $snippet = $this->modx->snippetCache[$snippetName]; + } else { +// not in cache so let's check the db + $sql = "SELECT snippet FROM " . $this->modx->getFullTableName("site_snippets") . " WHERE " . $this->modx->getFullTableName("site_snippets") . ".name='" . $this->modx->db->escape($snippetName) . "';"; + $result = $this->modx->db->query($sql); + if ($this->modx->db->getRecordCount($result) == 1) { + $row = $this->modx->db->getRow($result); + $snippet = $this->modx->snippetCache[$row['name']] = $row['snippet']; + $this->Log(" |--- DB -> Custom Modifier"); + } else { + if ($this->modx->db->getRecordCount($result) == 0) { +// If snippet not found, look in the modifiers folder + $filename = $this->modx->config['rb_base_dir'] . 'plugins/phx/modifiers/' . $modifier_cmd[$i] . '.phx.php'; + if (@file_exists($filename)) { + $file_contents = @file_get_contents($filename); + $file_contents = str_replace('<' . '?php', '', $file_contents); + $file_contents = str_replace('?' . '>', '', $file_contents); + $file_contents = str_replace('modx->snippetCache[$snippetName] = $file_contents; + $this->modx->snippetCache[$snippetName . 'Props'] = ''; + $this->Log(" |--- File ($filename) -> Custom Modifier"); + } else { + $this->Log(" |--- PHX Error: {$modifier_cmd[$i]} could not be found"); + } + } + } + } + if (!empty($snippet)) { + $output = $this->modx->runSnippet($snippetName, array( + 'input' => $output, + 'output' => $output, + 'options' => $modifier_value[$i] + )); + } else { + $output = ''; + } + break; + } + if (count($condition)) { + $this->Log(" |--- Condition = '" . $condition[count($condition) - 1] . "'"); + } + $this->Log(" |--- Output = '" . $output . "'"); + } + } + + return $output; + } + + /** + * @param string $code + * @return mixed + */ + private function runCode($code) + { + return eval("return (" . $code . ");"); + } + + // Event logging (debug) + + /** + * @return string + */ + public function createEventLog() + { + $out = ''; + if (!empty($this->console)) { + $console = implode("\n", $this->console); + $this->console = array(); + + $out = '
          ' . $console . '
          '; + } + + return $out; + } + + // Returns a cleaned string escaping the HTML and special MODx characters + + /** + * @param $string + * @return array|mixed|string + */ + public function LogClean($string) + { + $string = preg_replace("/&(#[0-9]+|[a-z]+);/i", "&$1;", $string); + $string = APIHelpers::sanitarTag($string); + + return $string; + } + + // Simple log entry + + /** + * @param $string + */ + public function Log($string) + { + if ($this->debug) { + $this->debugLog = true; + $this->console[] = (count($this->console) + 1 - $this->curPass) . " [" . strftime( + "%H:%M:%S", + time() + ) . "] " . $this->LogClean($string); + } + } + + // Log snippet output + + /** + * @param $string + */ + public function LogSnippet($string) + { + if ($this->debug) { + $this->debugLog = true; + $this->console[] = (count($this->console) + 1 - $this->curPass) . " [" . strftime( + "%H:%M:%S", + time() + ) . "] " . " |--- Returns:
          " . $this->LogClean($string) . "
          "; + } + } + + // Log pass + public function LogPass() + { + $this->console[] = "
          Pass " . $this->curPass . "
          "; + } + + // Log pass + + /** + * @param $string + */ + public function LogSource($string) + { + $this->console[] = "
          Source:
          " . $this->LogClean($string); + } + + // Returns the specified field from the user record + // positive userid = manager, negative integer = webuser + +/** + * @param $userid + * @param $field + * @return mixed + */ + public function ModUser($userid, $field) + { + if (!array_key_exists($userid, $this->cache["ui"])) { + if (intval($userid) < 0) { + $user = $this->modx->getWebUserInfo(-($userid)); + } else { + $user = $this->modx->getUserInfo($userid); + } + $this->cache["ui"][$userid] = $user; + } else { + $user = $this->cache["ui"][$userid]; + } + + return $user[$field]; + } + + // Returns true if the user id is in one the specified webgroups + + /** + * @param int $userid + * @param array $groupNames + * @return bool + */ + public function isMemberOfWebGroupByUserId($userid = 0, $groupNames = array()) + { + $userid = (int)$userid; + // if $groupNames is not an array return false + if (!is_array($groupNames)) { + return false; + } + + // if the user id is a negative number make it positive + if (intval($userid) < 0) { + $userid = -($userid); + } + + // Creates an array with all webgroups the user id is in + if (!array_key_exists($userid, $this->cache["mo"])) { + $tbl = $this->modx->getFullTableName("webgroup_names"); + $tbl2 = $this->modx->getFullTableName("web_groups"); + $sql = "SELECT `wgn`.`name` FROM {$tbl} `wgn` INNER JOIN {$tbl2} `wg` ON `wg`.`webgroup`=`wgn`.`id` AND `wg`.`webuser`={$userid}"; + $this->cache["mo"][$userid] = $grpNames = $this->modx->db->getColumn("name", $sql); + } else { + $grpNames = $this->cache["mo"][$userid]; + } + // Check if a supplied group matches a webgroup from the array we just created + foreach ($groupNames as $k => $v) { + if (in_array(trim($v), $grpNames)) { + return true; + } + } + + // If we get here the above logic did not find a match, so return false + return false; + } + + // Returns the value of a PHx/MODx placeholder. + + /** + * @param $name + * @return mixed|string + */ + public function getPHxVariable($name) + { + // Check if this variable is created by PHx + if (array_key_exists($name, $this->placeholders)) { + // Return the value from PHx + return $this->placeholders[$name]; + } else { + // Return the value from MODx + return $this->modx->getPlaceholder($name); + } + } + + // Sets a placeholder variable which can only be access by PHx + + /** + * @param $name + * @param $value + */ + public function setPHxVariable($name, $value) + { + if ($name != "phx") { + $this->placeholders[$name] = $value; + } + } + + //mbstring + + /** + * @param $str + * @param $s + * @param null $l + * @return string + */ + public function substr($str, $s, $l = null) + { + if (function_exists('mb_substr')) { + return mb_substr($str, $s, $l); + } + + return substr($str, $s, $l); + } + + /** + * @param $str + * @return int + */ + public function strlen($str) + { + if (function_exists('mb_strlen')) { + return mb_strlen($str); + } + + return strlen($str); + } + + /** + * @param $str + * @return string + */ + public function strtolower($str) + { + if (function_exists('mb_strtolower')) { + return mb_strtolower($str); + } + + return strtolower($str); + } + + /** + * @param $str + * @return string + */ + public function strtoupper($str) + { + if (function_exists('mb_strtoupper')) { + return mb_strtoupper($str); + } + + return strtoupper($str); + } + + /** + * @param $str + * @return string + */ + public function ucfirst($str) + { + if (function_exists('mb_strtoupper') && function_exists('mb_substr') && function_exists('mb_strlen')) { + return mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str)); + } + + return ucfirst($str); + } + + /** + * @param $str + * @return string + */ + public function lcfirst($str) + { + if (function_exists('mb_strtolower') && function_exists('mb_substr') && function_exists('mb_strlen')) { + return mb_strtolower(mb_substr($str, 0, 1)) . mb_substr($str, 1, mb_strlen($str)); + } + + return lcfirst($str); + } + + /** + * @param $str + * @return string + */ + public function ucwords($str) + { + if (function_exists('mb_convert_case')) { + return mb_convert_case($str, MB_CASE_TITLE); + } + + return ucwords($str); + } + + /** + * @param $str + * @return string + */ + public function strrev($str) + { + preg_match_all('/./us', $str, $ar); + + return implode(array_reverse($ar[0])); + } + + /** + * @param $str + * @return string + */ + public function str_shuffle($str) + { + preg_match_all('/./us', $str, $ar); + shuffle($ar[0]); + + return implode($ar[0]); + } + + /** + * @param $str + * @return int + */ + public function str_word_count($str) + { + return count(preg_split('~[^\p{L}\p{N}\']+~u', $str)); + } +} diff --git a/assets/snippets/DocLister/snippet.DLBuildMenu.php b/assets/snippets/DocLister/snippet.DLBuildMenu.php deleted file mode 100755 index 2027976b..00000000 --- a/assets/snippets/DocLister/snippet.DLBuildMenu.php +++ /dev/null @@ -1,104 +0,0 @@ -event->params; -if ( ! is_array($p)) { - $p = array(); -} - -if ( isset( $p['config'] ) ) { - require_once MODX_BASE_PATH . 'assets/lib/Helpers/Config.php'; - - $helper = new \Helpers\Config( $p ); - $helper->setPath( '/assets/snippets/DocLister/' ); - $helper->loadConfig( $p['config'] ); - - $p = array_merge( $helper->getConfig(), $p ); -} - -/** Текущий уровень вложенности */ -$p['currentDepth'] = $currentDepth = \APIhelpers::getkey($p, 'currentDepth', 1); - - -/** Основной шаблон обертка */ -$p['TplMainOwner'] = \APIhelpers::getkey($p, 'TplMainOwner', - '@CODE:' -); - -/** Шаблон обертка для вложенных уровней */ -$p['TplSubOwner'] = \APIhelpers::getkey($p, 'TplSubOwner', - '@CODE:' -); - -/** - * TplOwnerN Шаблон обертка для N уровня вложенности - * TplMainOwner Основной шабон обертка - * TplSubOwner Шаблон обертка для вложенных уровней - */ -$currentOwnerTpl = \APIhelpers::getkey($p, 'TplOwner' . $currentDepth); -if (empty($currentOwnerTpl)) { - $currentOwnerTpl = \APIhelpers::getkey($p, (($currentDepth == 1) ? 'TplMainOwner' : 'TplSubOwner')); -} - - -/** Основной шаблон для каждого пункта меню всех уровней */ -$p['TplOneItem'] = $currentTpl = \APIhelpers::getkey($p, 'TplOneItem', - '@CODE:' -); - -/** - * TplDepthN Шаблон пункта меню вложенности N - * TplNoChildrenDepthN Шаблон пункта меню вложенности N без дочерних элементов - * noChildrenRowTPL Общий шаблон пункта меню без дочерних элементов - */ -$currentTpl = \APIhelpers::getkey($p, 'TplDepth' . $currentDepth, $currentTpl); -$currentNoChildrenTpl = \APIhelpers::getkey($p, 'TplNoChildrenDepth' . $currentDepth); -if (empty($currentNoChildrenTpl)) { - $currentNoChildrenTpl = \APIhelpers::getkey($p, 'noChildrenRowTPL', $currentTpl); -} - - -/** Условия выборки документов для всех уровней */ -$p['addWhereList'] = $currentWhere = \APIhelpers::getkey($p, 'addWhereList', 'c.hidemenu = 0'); -/** addWhereListN Условия выборки документов N уровня */ -$currentWhere = \APIhelpers::getkey($p, 'addWhereList' . $currentDepth, $currentWhere); - -$p['orderBy'] = $currentOrderBy = \APIhelpers::getkey($p, 'orderBy', 'menuindex ASC, id ASC'); -/** orderByN Условия сортировки документов N уровня */ -$currentOrderBy = \APIhelpers::getkey($p, 'orderBy' . $currentDepth, $currentOrderBy); - - -$p['tvList'] = $currentTvList = \APIhelpers::getkey($p, 'tvList'); -$currentTvList = \APIhelpers::getkey($p, 'tvList' . $currentDepth, $currentTvList); -/** - * Получение prepare сниппетов из параметров BeforePrepare и AfterPrepare - * для совмещения с обязательным вызовом DLFixedPrepare::buildMenu метода - */ -$prepare = \APIhelpers::getkey($p, 'BeforePrepare', ''); -$prepare = explode(",", $prepare); -$prepare[] = 'DLFixedPrepare::buildMenu'; -$prepare[] = \APIhelpers::getkey($p, 'AfterPrepare', ''); -$p['prepare'] = trim(implode(",", $prepare), ','); - -return $modx->runSnippet('DocLister', array_merge(array( - 'idType' => 'parents', - 'parents' => \APIhelpers::getkey($p, 'parents', 0), - ), $p, array( - 'params' => $p, - 'tpl' => $currentTpl, - 'ownerTPL' => $currentOwnerTpl, - 'mainRowTpl' => $currentTpl, - 'noChildrenRowTPL' => $currentNoChildrenTpl, - 'noneWrapOuter' => '0', - 'addWhereList' => $currentWhere, - 'orderBy' => $currentOrderBy - )) -); diff --git a/assets/snippets/DocLister/snippet.DLMenu.php b/assets/snippets/DocLister/snippet.DLMenu.php index 0bae536d..41d658e2 100644 --- a/assets/snippets/DocLister/snippet.DLMenu.php +++ b/assets/snippets/DocLister/snippet.DLMenu.php @@ -7,6 +7,9 @@ } if (!isset($params['sortBy'])) { $params['sortBy'] = 'c.menuindex'; + if (isset($params['sortType1']) && $params['sortType1'] === 'doclist') { + $params['sortBy1'] = 'c.id'; + } } if (!isset($params['sortDir'])) { $params['sortDir'] = 'ASC'; diff --git a/assets/snippets/FormLister/__autoload.php b/assets/snippets/FormLister/__autoload.php index 3195891a..a294bdc0 100755 --- a/assets/snippets/FormLister/__autoload.php +++ b/assets/snippets/FormLister/__autoload.php @@ -19,6 +19,7 @@ function autoloade366e6fef0b0abb40d30844d932018e7($class) { 'FormLister\\DeleteContent' => '/core/controller/DeleteContent.php', 'FormLister\\DeleteUser' => '/core/controller/DeleteUser.php', 'FormLister\\FileValidator' => '/lib/FileValidator.php', + 'FormLister\\Filters' => '/lib/Filters.php', 'FormLister\\Form' => '/core/controller/Form.php', 'FormLister\\Login' => '/core/controller/Login.php', 'FormLister\\MailChimp' => '/core/controller/MailChimp.php', diff --git a/assets/snippets/FormLister/core/FormLister.abstract.php b/assets/snippets/FormLister/core/FormLister.abstract.php index 8d491bbc..a1aced99 100644 --- a/assets/snippets/FormLister/core/FormLister.abstract.php +++ b/assets/snippets/FormLister/core/FormLister.abstract.php @@ -105,7 +105,7 @@ abstract class Core * @param \DocumentParser $modx * @param array $cfg */ - public function __construct(\DocumentParser $modx, $cfg = array()) + public function __construct (\DocumentParser $modx, $cfg = array()) { $this->modx = $modx; $this->config = new Config(); @@ -122,7 +122,7 @@ public function __construct(\DocumentParser $modx, $cfg = array()) } $this->lexicon = new Lexicon($modx, array( 'langDir' => 'assets/snippets/FormLister/core/lang/', - 'lang' => $this->getCFGDef('lang', $this->modx->config['manager_language']) + 'lang' => $this->getCFGDef('lang', $this->modx->getConfig('manager_language')) )); $this->DLTemplate = \DLTemplate::getInstance($modx); $this->DLTemplate->setTemplatePath($this->getCFGDef('templatePath')); @@ -148,11 +148,11 @@ public function __construct(\DocumentParser $modx, $cfg = array()) * Установка шаблона формы * Загрузка капчи */ - public function initForm() + public function initForm () { $lexicon = $this->getCFGDef('lexicon'); $langDir = $this->getCFGDef('langDir', 'assets/snippets/FormLister/core/lang/'); - $lang = $this->getCFGDef('lang', $this->modx->config['manager_language']); + $lang = $this->getCFGDef('lang', $this->modx->getConfig('manager_language')); if ($lexicon) { $_lexicon = $this->config->loadArray($lexicon); if (isset($_lexicon[0])) { @@ -173,10 +173,11 @@ public function initForm() $this->emptyFormControls = array_merge( $this->emptyFormControls, $this->config->loadArray($this->getCFGDef('emptyFormControls'), - '' - )); - $this->setRequestParams(); - $this->setExternalFields($this->getCFGDef('defaultsSources', 'array')); + '' + )); + $this->setRequestParams() + ->setExternalFields($this->getCFGDef('defaultsSources', 'array')) + ->sanitizeForm(); $this->renderTpl = $this->getCFGDef('formTpl'); //Шаблон по умолчанию $this->initCaptcha(); $this->runPrepare('prepare'); @@ -190,7 +191,7 @@ public function initForm() * @param string $arrayParam название параметра с данными * @return $this */ - public function setExternalFields($sources = 'array', $arrayParam = 'defaults') + public function setExternalFields ($sources = 'array', $arrayParam = 'defaults') { $keepDefaults = $this->getCFGDef('keepDefaults', 0); $submitted = $this->isSubmitted(); @@ -333,7 +334,7 @@ public function setExternalFields($sources = 'array', $arrayParam = 'defaults') /** * Сохранение массива $_REQUEST */ - public function setRequestParams() + public function setRequestParams () { $this->removeGpc($this->_rq); $this->setFields($this->_rq); @@ -356,7 +357,7 @@ public function setRequestParams() * @param array $forbiddenFields * @return array */ - public function filterFields($fields = array(), $allowedFields = array(), $forbiddenFields = array()) + public function filterFields ($fields = array(), $allowedFields = array(), $forbiddenFields = array()) { $out = array(); foreach ($fields as $key => $value) { @@ -375,9 +376,10 @@ public function filterFields($fields = array(), $allowedFields = array(), $forbi /** * @return bool */ - public function isSubmitted() + public function isSubmitted () { - $out = $this->formid && ($this->getField('formid') === $this->formid); + $enableSubmit = !$this->getCFGDef('disableSubmit', 0); + $out = $this->formid && ($this->getField('formid') === $this->formid) && $enableSubmit; return $out; } @@ -389,7 +391,7 @@ public function isSubmitted() * @param mixed $def значение по умолчанию, если в конфиге нет искомого параметра * @return mixed значение из конфига */ - public function getCFGDef($name, $def = null) + public function getCFGDef ($name, $def = null) { return $this->config->getCFGDef($name, $def); } @@ -402,7 +404,7 @@ public function getCFGDef($name, $def = null) * * @return string */ - public function render() + public function render () { if ($this->isSubmitted()) { $this->validateForm(); @@ -423,7 +425,7 @@ public function render() * @param bool $convertArraysToStrings * @return array */ - public function prerenderForm($convertArraysToStrings = false) + public function prerenderForm ($convertArraysToStrings = false) { if (empty($this->plhCache) || !$convertArraysToStrings) { $this->plhCache = array_merge( @@ -445,7 +447,7 @@ public function prerenderForm($convertArraysToStrings = false) * * @return null|string */ - public function renderForm() + public function renderForm () { $api = (int)$this->getCFGDef('api', 0); $data = $this->getFormData(); @@ -458,7 +460,8 @@ public function renderForm() if ($api == 1) { $out = $data; } else { - $plh = $this->getCFGDef('skipPrerender', 0) ? $this->getFormData('fields') : $this->prerenderForm($this->getFormStatus()); + $plh = $this->getCFGDef('skipPrerender', + 0) ? $this->getFormData('fields') : $this->prerenderForm($this->getFormStatus()); $this->log('Render output', array('template' => $this->renderTpl, 'data' => $plh)); $form = $this->parseChunk($this->renderTpl, $plh); if (!$api) { @@ -483,7 +486,7 @@ public function renderForm() * @param string $prefix добавляет префикс к имени поля * @return $this */ - public function setFields($fields = array(), $prefix = '') + public function setFields ($fields = array(), $prefix = '') { foreach ($fields as $key => $value) { if (is_int($key)) { @@ -498,11 +501,39 @@ public function setFields($fields = array(), $prefix = '') return $this; } + /** + * Обработка значений по предопределенным правилам + * @return $this + */ + public function sanitizeForm () + { + $filterer = $this->getCFGDef('filterer', '\FormLister\Filters'); + $filterer = $this->loadModel($filterer, '', array()); + $filterSet = $this->config->loadArray($this->getCFGDef('filters', ''), ''); + foreach ($filterSet as $field => $filters) { + $value = $this->getField($field); + if (!is_array($filters)) { + $filters = array($filters); + } + foreach ($filters as $filter) { + if (method_exists($filterer, $filter)) { + $value = call_user_func( + array($filterer, $filter), + $value + ); + } + } + $this->setField($field, $value); + } + + return $this; + } + /** * Возвращает результат проверки формы * @return bool */ - public function validateForm() + public function validateForm () { $validator = $this->getCFGDef('validator', '\FormLister\Validator'); $validator = $this->loadModel($validator, '', array()); @@ -528,7 +559,7 @@ public function validateForm() * @param array $fields * @return bool|array */ - public function validate($validator, $rules, $fields) + public function validate ($validator, $rules, $fields) { if (empty($rules) || is_null($validator)) { return true; @@ -604,7 +635,7 @@ public function validate($validator, $rules, $fields) * @param string $section * @return array */ - public function getFormData($section = '') + public function getFormData ($section = '') { if ($section && isset($this->formData[$section])) { $out = $this->formData[$section]; @@ -620,7 +651,7 @@ public function getFormData($section = '') * @param bool $status * @return $this */ - public function setFormStatus($status) + public function setFormStatus ($status) { $this->formData['status'] = (bool)$status; @@ -631,7 +662,7 @@ public function setFormStatus($status) * Возращвет статус формы * @return bool */ - public function getFormStatus() + public function getFormStatus () { return $this->formData['status']; } @@ -642,18 +673,28 @@ public function getFormStatus() * @param mixed $default * @return mixed */ - public function getField($field, $default = '') + public function getField ($field, $default = '') { return \APIhelpers::getkey($this->formData['fields'], $field, $default); } + /** + * Проверяет существование поля в formData + * @param string $field + * @return bool + */ + public function fieldExists ($field) + { + return is_scalar($field) && isset($this->formData['fields'][$field]); + } + /** * Сохраняет значение поля в formData * @param string $field имя поля * @param $value * @return $this */ - public function setField($field, $value) + public function setField ($field, $value) { if ($value !== '' || $this->getCFGDef('allowEmptyFields', 1)) { $this->formData['fields'][$field] = $value; @@ -668,7 +709,7 @@ public function setField($field, $value) * @param $value * @return $this */ - public function setPlaceholder($placeholder, $value) + public function setPlaceholder ($placeholder, $value) { $this->placeholders[$placeholder] = $value; $this->plhCache = array(); @@ -680,7 +721,7 @@ public function setPlaceholder($placeholder, $value) * @param $placeholder * @return mixed */ - public function getPlaceholder($placeholder) + public function getPlaceholder ($placeholder) { return \APIhelpers::getkey($this->placeholders, $placeholder); } @@ -690,10 +731,11 @@ public function getPlaceholder($placeholder) * @param string $field * @return $this */ - public function unsetField($field) + public function unsetField ($field) { if (isset($this->formData['fields'][$field])) { unset($this->formData['fields'][$field]); + $this->plhCache = array(); } return $this; @@ -706,7 +748,7 @@ public function unsetField($field) * @param string $message сообщение об ошибке * @return $this */ - public function addError($field, $type, $message) + public function addError ($field, $type, $message) { if ($this->lexicon->isReady()) { $message = $this->lexicon->parseLang($message); @@ -721,13 +763,14 @@ public function addError($field, $type, $message) * @param string $message * @return $this */ - public function addMessage($message = '') + public function addMessage ($message = '') { if ($message) { if ($this->lexicon->isReady()) { $message = $this->lexicon->parseLang($message); } $this->formData['messages'][] = $message; + $this->plhCache = array(); } return $this; @@ -740,7 +783,7 @@ public function addMessage($message = '') * @param bool $split преобразование массивов в строки * @return array */ - public function fieldsToPlaceholders($fields = array(), $suffix = '', $split = false) + public function fieldsToPlaceholders ($fields = array(), $suffix = '', $split = false) { $plh = array(); if (is_array($fields)) { @@ -788,7 +831,7 @@ public function fieldsToPlaceholders($fields = array(), $suffix = '', $split = f * Готовит сообщения об ошибках для вывода в шаблон * @return array */ - public function errorsToPlaceholders() + public function errorsToPlaceholders () { $plh = array(); foreach ($this->getFormData('errors') as $field => $error) { @@ -812,7 +855,7 @@ public function errorsToPlaceholders() * Обработка чекбоксов, селектов, радио-кнопок перед выводом в шаблон * @return array */ - public function controlsToPlaceholders() + public function controlsToPlaceholders () { $plh = array(); $formControls = $this->config->loadArray($this->getCFGDef('formControls')); @@ -839,7 +882,7 @@ public function controlsToPlaceholders() * @param string $param * @return array|mixed|\xNop */ - public function getValidationRules($param = 'rules') + public function getValidationRules ($param = 'rules') { $rules = $this->getCFGDef($param); if (empty($rules)) { @@ -859,7 +902,7 @@ public function getValidationRules($param = 'rules') * Готовит сообщения из formData для вывода в шаблон * @return string */ - public function renderMessages() + public function renderMessages () { $out = ''; $wrapper = $this->getCFGDef('messagesTpl', '@CODE:
          [+messages+]
          '); @@ -910,7 +953,7 @@ public function renderMessages() * @param string $splitter * @return string */ - public function renderMessagesGroup($messages, $wrapper, $splitter) + public function renderMessagesGroup ($messages, $wrapper, $splitter) { $out = ''; if (is_array($messages) && !empty($messages)) { @@ -928,17 +971,22 @@ public function renderMessagesGroup($messages, $wrapper, $splitter) * @param bool $parseDocumentSource * @return string */ - public function parseChunk($name, $data, $parseDocumentSource = false) + public function parseChunk ($name, $data, $parseDocumentSource = false) { $parseDocumentSource = $parseDocumentSource || $this->getCFGDef('parseDocumentSource', 0); $rewriteUrls = $this->getCFGDef('rewriteUrls', 1); - $this->DLTemplate->setTwigTemplateVars(array( - 'FormLister' => $this, - 'errors' => $this->getFormData('errors'), - 'messages' => $this->getFormData('messages'), - 'plh' => $this->placeholders - ) + $templateData = array( + 'FormLister' => $this, + 'errors' => $this->getFormData('errors'), + 'messages' => $this->getFormData('messages'), + 'plh' => $this->placeholders ); + /* TODO remove in further versions*/ + if (method_exists($this->DLTemplate, 'setTwigTemplateVars')) { + $this->DLTemplate->setTwigTemplateVars($templateData); + } else { + $this->DLTemplate->setTemplateData($templateData); + } $out = $this->DLTemplate->parseChunk($name, $data, $parseDocumentSource); if ($this->lexicon->isReady()) { $out = $this->lexicon->parseLang($out); @@ -959,7 +1007,7 @@ public function parseChunk($name, $data, $parseDocumentSource = false) /** * Загружает класс капчи */ - public function initCaptcha() + public function initCaptcha () { if ($captcha = $this->getCFGDef('captcha')) { $captcha = preg_replace('/[^a-zA-Z]/', '', $captcha); @@ -990,7 +1038,7 @@ public function initCaptcha() /** * @return \DocumentParser|null */ - public function getMODX() + public function getMODX () { return $this->modx; } @@ -998,7 +1046,7 @@ public function getMODX() /** * @return mixed|string */ - public function getFormId() + public function getFormId () { return $this->formid; } @@ -1006,7 +1054,7 @@ public function getFormId() /** * @return bool */ - public function isValid() + public function isValid () { $this->setValid(!count($this->getFormData('errors'))); @@ -1018,7 +1066,7 @@ public function isValid() * @param string $paramName * @return $this */ - public function runPrepare($paramName = 'prepare') + public function runPrepare ($paramName = 'prepare') { if (($prepare = $this->getCFGDef($paramName)) != '') { $names = $this->config->loadArray($prepare); @@ -1041,7 +1089,7 @@ public function runPrepare($paramName = 'prepare') * @param array $params * @return $this */ - public function callPrepare($name, $params = array()) + public function callPrepare ($name, $params = array()) { if (!empty($name)) { if ((is_object($name) && ($name instanceof \Closure)) || is_callable($name)) { @@ -1062,7 +1110,7 @@ public function callPrepare($name, $params = array()) * @param string $param имя параметра с id документа для редиректа * @param array $_query */ - public function redirect($param = 'redirectTo', $_query = array()) + public function redirect ($param = 'redirectTo', $_query = array()) { if ($redirect = $this->getCFGDef($param, 0)) { $redirect = $this->config->loadArray($redirect); @@ -1080,7 +1128,7 @@ public function redirect($param = 'redirectTo', $_query = array()) if (isset($redirect['header'])) { $header = $redirect['header']; } - $page = isset($redirect['page']) ? $redirect['page'] : $this->modx->config['site_start']; + $page = isset($redirect['page']) ? $redirect['page'] : $this->modx->getConfig('site_start'); } if (is_numeric($page)) { $redirect = $this->modx->makeUrl($page, '', $query, 'full'); @@ -1097,10 +1145,13 @@ public function redirect($param = 'redirectTo', $_query = array()) * @param $url * @param $header */ - public function sendRedirect($url, $header = 'HTTP/1.1 307 Temporary Redirect') + public function sendRedirect ($url, $header = 'HTTP/1.1 307 Temporary Redirect') { if (!$this->getCFGDef('api', 0)) { $header = $header ? $header : 'HTTP/1.1 307 Temporary Redirect'; + if (!is_null($this->debug)) { + $this->debug->saveLog(); + } $this->modx->sendRedirect($url, 0, 'REDIRECT_HEADER', $header); } } @@ -1110,13 +1161,13 @@ public function sendRedirect($url, $header = 'HTTP/1.1 307 Temporary Redirect') * * @return mixed */ - abstract public function process(); + abstract public function process (); /** * @param boolean $valid * @return Core */ - public function setValid($valid) + public function setValid ($valid) { $this->valid &= $valid; @@ -1127,7 +1178,7 @@ public function setValid($valid) * @param array $files * @return Core */ - public function setFiles($files) + public function setFiles ($files) { if (is_array($files)) { $this->formData['files'] = $files; @@ -1141,7 +1192,7 @@ public function setFiles($files) * @param array $data * @return Core */ - public function log($message, $data = array()) + public function log ($message, $data = array()) { if (!is_null($this->debug)) { $this->debug->log($message, $data); @@ -1155,7 +1206,7 @@ public function log($message, $data = array()) * @param string $path * @return object */ - public function loadModel($model, $path = '', $init = '') + public function loadModel ($model, $path = '', $init = '') { $out = null; if (!class_exists($model) && $path && $this->fs->checkFile($path)) { @@ -1177,7 +1228,7 @@ public function loadModel($model, $path = '', $init = '') * @param bool $flag * @return array */ - public function filesToArray(array $_files, array $allowed, $flag = true) + public function filesToArray (array $_files, array $allowed, $flag = true) { $files = array(); foreach ($_files as $name => $file) { @@ -1213,7 +1264,7 @@ public function filesToArray(array $_files, array $allowed, $flag = true) * @param string $field * @return array */ - public function getErrorMessage($field) + public function getErrorMessage ($field) { $out = array(); if (!empty($field) && isset($this->formData['errors'][$field]) && is_array($this->formData['errors'][$field])) { @@ -1226,7 +1277,7 @@ public function getErrorMessage($field) /** * @return string */ - protected function setGpcSeed() + protected function setGpcSeed () { $this->gpc_seed = 'sanitize_seed_' . base_convert(md5(realpath(MODX_MANAGER_PATH . 'includes/protect.inc.php')), 16, 36); @@ -1241,7 +1292,7 @@ protected function setGpcSeed() * @param int $count * @return mixed */ - protected function removeGpc(&$target, $count = 0) + protected function removeGpc (&$target, $count = 0) { $removeFields = $this->getRemoveGpcFields(); foreach ($target as $key => $value) { @@ -1269,7 +1320,7 @@ protected function removeGpc(&$target, $count = 0) /** * @return array */ - public function getRemoveGpcFields() + public function getRemoveGpcFields () { $out = $this->gpc_fields; if (($removeGpc = $this->getCFGDef('removeGpc', 0)) && empty($out)) { diff --git a/assets/snippets/FormLister/core/controller/Form.php b/assets/snippets/FormLister/core/controller/Form.php index ab296be2..00dc42c3 100644 --- a/assets/snippets/FormLister/core/controller/Form.php +++ b/assets/snippets/FormLister/core/controller/Form.php @@ -37,8 +37,8 @@ public function __construct(\DocumentParser $modx, array $cfg = array()) $this->mailConfig = array( 'isHtml' => $this->getCFGDef('isHtml', 1), 'to' => $this->getCFGDef('to'), - 'from' => $this->getCFGDef('from', $this->modx->config['emailsender']), - 'fromName' => $this->getCFGDef('fromName', $this->modx->config['site_name']), + 'from' => $this->getCFGDef('from', $this->modx->getConfig('emailsender')), + 'fromName' => $this->getCFGDef('fromName', $this->modx->getConfig('site_name')), 'subject' => $this->getCFGDef('subject'), 'replyTo' => $this->getCFGDef('replyTo'), 'cc' => $this->getCFGDef('cc'), @@ -175,7 +175,7 @@ public function validateForm() */ public function renderReport($tplParam = 'reportTpl') { - $tpl = $this->getCFGDef($tplParam); + $tpl = $this->getCFGDef($tplParam, 'reportTpl'); if (empty($tpl) && $tplParam == 'reportTpl') { $tpl = '@CODE:'; foreach ($this->getFormData('fields') as $key => $value) { @@ -306,27 +306,24 @@ public function sendReport() public function sendAutosender() { $to = $this->getCFGDef('autosender'); - if (empty($to)) { - $out = true; - } else { - $config = $this->getMailSendConfig($to, 'autosenderFromName', 'autoSubject'); - $asConfig = $this->config->loadArray($this->getCFGDef('autoMailConfig')); - if (!empty($asConfig) && is_array($asConfig)) { - $asConfig = $this->parseMailerParams($asConfig); - $config = array_merge($config, $asConfig); - } - $mailer = new Mailer($this->modx, $config); - $report = $this->renderReport('automessageTpl'); - $out = $mailer->send($report); - $this->log( - 'Mail autosender report', - array( - 'report' => $report, - 'mailer_config' => $mailer->config, - 'result' => $out - ) - ); + + $config = $this->getMailSendConfig($to, 'autosenderFromName', 'autoSubject'); + $asConfig = $this->config->loadArray($this->getCFGDef('autoMailConfig')); + if (!empty($asConfig) && is_array($asConfig)) { + $asConfig = $this->parseMailerParams($asConfig); + $config = array_merge($config, $asConfig); } + $mailer = new Mailer($this->modx, $config); + $report = $this->renderReport('automessageTpl'); + $out = empty($to) ? true : $mailer->send($report); + $this->log( + 'Mail autosender report', + array( + 'report' => $report, + 'mailer_config' => $mailer->config, + 'result' => $out + ) + ); return $out; } @@ -338,30 +335,27 @@ public function sendAutosender() public function sendCCSender() { $to = $this->getField($this->getCFGDef('ccSenderField', 'email')); - if (empty($to)) { - $out = true; - } else { - if ($this->getCFGDef('ccSender', 0)) { - $config = $this->getMailSendConfig($to, 'ccSenderFromName', 'ccSubject'); - $ccConfig = $this->config->loadArray($this->getCFGDef('ccMailConfig')); - if (!empty($ccConfig) && is_array($ccConfig)) { - $ccConfig = $this->parseMailerParams($ccConfig); - $config = array_merge($config, $ccConfig); - } - $mailer = new Mailer($this->modx, $config); - $report = $this->renderReport('ccSenderTpl'); - $out = $mailer->send($report); - $this->log( - 'Mail CC report', - array( - 'report' => $report, - 'mailer_config' => $mailer->config, - 'result' => $out - ) - ); - } else { - $out = true; + + if ($this->getCFGDef('ccSender', 0)) { + $config = $this->getMailSendConfig($to, 'ccSenderFromName', 'ccSubject'); + $ccConfig = $this->config->loadArray($this->getCFGDef('ccMailConfig')); + if (!empty($ccConfig) && is_array($ccConfig)) { + $ccConfig = $this->parseMailerParams($ccConfig); + $config = array_merge($config, $ccConfig); } + $mailer = new Mailer($this->modx, $config); + $report = $this->renderReport('ccSenderTpl'); + $out = empty($to) ? true : $mailer->send($report); + $this->log( + 'Mail CC report', + array( + 'report' => $report, + 'mailer_config' => $mailer->config, + 'result' => $out + ) + ); + } else { + $out = true; } return $out; @@ -448,7 +442,7 @@ public function getMailSendConfig($to, $fromParam, $subjectParam = 'subject') array( 'subject' => $subject, 'to' => $to, - 'fromName' => $this->getCFGDef($fromParam, $this->modx->config['site_name']) + 'fromName' => $this->getCFGDef($fromParam, $this->modx->getConfig('site_name')) ) ); $out = $this->parseMailerParams($out); diff --git a/assets/snippets/FormLister/core/controller/Login.php b/assets/snippets/FormLister/core/controller/Login.php old mode 100755 new mode 100644 index 5885c42c..1a46203f --- a/assets/snippets/FormLister/core/controller/Login.php +++ b/assets/snippets/FormLister/core/controller/Login.php @@ -27,7 +27,7 @@ public function __construct(\DocumentParser $modx, $cfg = array()) if (0 === strpos($requestUri, MODX_BASE_URL)) { $requestUri = substr($requestUri, strlen(MODX_BASE_URL)); } - $this->requestUri = $this->modx->config['site_url'] . $requestUri; + $this->requestUri = $this->modx->getConfig('site_url') . $requestUri; $this->context = $this->getCFGDef('context', 'web'); $lang = $this->lexicon->loadLang('login'); if ($lang) { @@ -63,9 +63,7 @@ public function process() return; } $login = $this->getField($this->getCFGDef('loginField', 'username')); - if (is_scalar($login)) { - $login = mb_strtolower($login); - } else { + if (!is_scalar($login)) { $login = ''; } $password = $this->getField($this->getCFGDef('passwordField', 'password')); @@ -95,8 +93,8 @@ public function process() $loginCookie = $this->getCFGDef('cookieName', 'WebLoginPE'); $this->user->authUser($login, $remember, $loginCookie, true); $this->setFormStatus(true); - if (isset($this->modx->documentIdentifier) && $this->modx->documentIdentifier == $this->modx->config['unauthorized_page']) { - $uaPage = $this->modx->makeUrl($this->modx->config['unauthorized_page'], "", "", "full"); + if (isset($this->modx->documentIdentifier) && $this->modx->documentIdentifier == $this->modx->getConfig('unauthorized_page')) { + $uaPage = $this->modx->makeUrl($this->modx->getConfig('unauthorized_page'), "", "", "full"); $requested = explode('?', $this->requestUri); if (array_shift($requested) != $uaPage) { $this->setField('redirectTo', $this->requestUri); diff --git a/assets/snippets/FormLister/core/controller/Profile.php b/assets/snippets/FormLister/core/controller/Profile.php index 2a35891d..30ed90b5 100644 --- a/assets/snippets/FormLister/core/controller/Profile.php +++ b/assets/snippets/FormLister/core/controller/Profile.php @@ -92,8 +92,9 @@ public static function uniqueEmail($fl, $value) { $result = true; if (is_scalar($value) && !is_null($fl->user) && ($fl->user->get("email") !== $value)) { - $fl->user->set('email', mb_strtolower($value)); - $result = $fl->user->checkUnique('web_user_attributes', 'email', 'internalKey'); + $user = clone($fl->user); + $user->set('email', $value); + $result = $user->checkUnique('web_user_attributes', 'email', 'internalKey'); } return $result; @@ -108,8 +109,9 @@ public static function uniqueUsername($fl, $value) { $result = true; if (is_scalar($value) && !is_null($fl->user) && ($fl->user->get("email") !== $value)) { - $fl->user->set('username', mb_strtolower($value)); - $result = $fl->user->checkUnique('web_users', 'username'); + $user = clone($fl->user); + $user->set('username', $value); + $result = $user->checkUnique('web_users', 'username'); } return $result; @@ -144,10 +146,10 @@ public function process() } $fields = $this->filterFields($this->getFormData('fields'), $this->allowedFields, $this->forbiddenFields); if (isset($fields['username'])) { - $fields['username'] = is_scalar($fields['username']) ? mb_strtolower($fields['username']) : ''; + $fields['username'] = is_scalar($fields['username']) ? $fields['username'] : ''; } if (isset($fields['email'])) { - $fields['email'] = is_scalar($fields['username']) ? mb_strtolower($fields['email']) : ''; + $fields['email'] = is_scalar($fields['email']) ? $fields['email'] : ''; } $result = $this->user->fromArray($fields)->save(true); $this->log('Update profile', array('data' => $fields, 'result' => $result, 'log' => $this->user->getLog())); diff --git a/assets/snippets/FormLister/core/controller/Register.php b/assets/snippets/FormLister/core/controller/Register.php index 7413c0af..7f2a0cd8 100644 --- a/assets/snippets/FormLister/core/controller/Register.php +++ b/assets/snippets/FormLister/core/controller/Register.php @@ -73,7 +73,7 @@ public static function uniqueEmail($fl, $value) { $result = true; if (is_scalar($value) && !is_null($fl->user)) { - $fl->user->set('email', mb_strtolower($value)); + $fl->user->set('email', $value); $result = $fl->user->checkUnique('web_user_attributes', 'email', 'internalKey'); } @@ -91,7 +91,7 @@ public static function uniqueUsername($fl, $value) { $result = true; if (is_scalar($value) && !is_null($fl->user)) { - $fl->user->set('username', mb_strtolower($value)); + $fl->user->set('username', $value); $result = $fl->user->checkUnique('web_users', 'username'); } @@ -131,8 +131,8 @@ public function process() if ($checkActivation) { $fields['logincount'] = -1; } - $fields['username'] = is_scalar($fields['username']) ? mb_strtolower($fields['username']) : ''; - $fields['email'] = is_scalar($fields['email']) ? mb_strtolower($fields['email']) : ''; + $fields['username'] = is_scalar($fields['username']) ? $fields['username'] : ''; + $fields['email'] = is_scalar($fields['email']) ? $fields['email'] : ''; $this->user->create($fields); $this->addWebUserToGroups(0, $this->config->loadArray($this->getCFGDef('userGroups'))); $result = $this->user->save(true); @@ -152,7 +152,7 @@ public function process() $uidName => $result, 'hash' => $hash )); - $url = $this->getCFGDef('activateTo', $this->modx->config['site_start']); + $url = $this->getCFGDef('activateTo', $this->modx->getConfig('site_start')); $this->setField( 'activate.url', $this->modx->makeUrl($url, '', $query, 'full') diff --git a/assets/snippets/FormLister/core/controller/Reminder.php b/assets/snippets/FormLister/core/controller/Reminder.php old mode 100755 new mode 100644 index 796ca44f..37a64a94 --- a/assets/snippets/FormLister/core/controller/Reminder.php +++ b/assets/snippets/FormLister/core/controller/Reminder.php @@ -136,7 +136,7 @@ public function process() $uid = $this->getField($this->userField); if ($hash = $this->getUserHash($uid)) { $this->setFields($this->user->toArray()); - $url = $this->getCFGDef('resetTo', isset($this->modx->documentIdentifier) && $this->modx->documentIdentifier > 0 ? $this->modx->documentIdentifier : $this->config['site_start']); + $url = $this->getCFGDef('resetTo', isset($this->modx->documentIdentifier) && $this->modx->documentIdentifier > 0 ? $this->modx->documentIdentifier : $this->modx->getConfig('site_start')); $uidName = $this->getCFGDef('uidName', $this->uidField); $this->setField('reset.url', $this->modx->makeUrl($url, "", http_build_query(array($uidName => $this->getField($this->uidField), diff --git a/assets/snippets/FormLister/core/lang/italian/activate.inc.php b/assets/snippets/FormLister/core/lang/italian/activate.inc.php new file mode 100644 index 00000000..03bf1443 --- /dev/null +++ b/assets/snippets/FormLister/core/lang/italian/activate.inc.php @@ -0,0 +1,17 @@ +[+activate.url+]'; +$_lang['activate.no_activation'] = 'Questo account utente non ha bisogno di attivazione o non può essere attivato.'; +$_lang['activate.update_failed'] = 'Impossibile procedere.'; +$_lang['activate.default_successTpl'] = '@CODE:Il link per attivare il tuo account è stato inviato via mail.'; +$_lang['activate.default_resetSuccessTpl'] = '@CODE:Il tuo account è attivato.'; + +return $_lang; diff --git a/assets/snippets/FormLister/core/lang/italian/content.inc.php b/assets/snippets/FormLister/core/lang/italian/content.inc.php new file mode 100644 index 00000000..d603ddde --- /dev/null +++ b/assets/snippets/FormLister/core/lang/italian/content.inc.php @@ -0,0 +1,20 @@ +[+reset.url+]'; +$_lang['reminder.users_only'] = 'Solo gli utenti registrati possono ripristinare le password.'; +$_lang['reminder.update_failed'] = 'Impossibile procedere.'; +$_lang['reminder.default_successTpl'] = '@CODE:Il link per ripristinare la password è stato inviato per posta.'; +$_lang['reminder.default_resetSuccessTpl'] = '@CODE:La nuova password è stata inviata via mail.'; + +return $_lang; diff --git a/assets/snippets/FormLister/docs/en/010_Controllers.md b/assets/snippets/FormLister/docs/en/010_Controllers.md deleted file mode 100755 index dac73a67..00000000 --- a/assets/snippets/FormLister/docs/en/010_Controllers.md +++ /dev/null @@ -1,50 +0,0 @@ -## Controllers -Controller is the class extending \FormLister\Core base class, which perfoms: - -- loading classes to validate data and generate captcha; -- processing form data (form data here is the value of formData property, not only of $_REQUEST array); -- processing form template and success template. - -The way it works: - -1. Data are loaded from form. -2. Data are loaded from external sources. -3. Snippets are called to process data. -4. Data validation if it's received from form; -3. Snippets are called to process data again. -6. Final processing - if data came from form and passed validation successfully. -7. Output. - -Final processing is done by controller's process() method. Result flag has to be set with setFormStatus() method after successful processing, then fill renderTpl property with template to output processing results. - -These are some base controllers, feel free to extend them: - -### Form -Sends e-mail using form data. - -### Login -Authorizes users. - -### Register -Creates users and sends needed notifications. - -### Activate -Processes a special link to confirm user registration or sends it via e-mail. - -### DeleteUser -Allows users to delete their profiles. It requests password to confirm. - -### Profile -Allows users to edit their profiles. - -### Reminder -Helps users to remind their passwords. - -### Content -Allows to create and edit resources with MODxAPI classes. - -### DeleteContent -Allows users to delete resources they created. - -### MailChimp -Adds users to MailChimp mailing lists. It's provided as example of \FormLister\Core class extension. diff --git a/assets/snippets/FormLister/docs/en/020_Parameters.md b/assets/snippets/FormLister/docs/en/020_Parameters.md deleted file mode 100755 index c48d8988..00000000 --- a/assets/snippets/FormLister/docs/en/020_Parameters.md +++ /dev/null @@ -1,298 +0,0 @@ -## General parameters - -These parameters are processed by FormLister core class. Controllers can change parameters purposes. - -## Settings -### controller -Sets the class to process data. - -Possible values - php-file name without extension which contains controller class. - -Default value - Form. - -### dir -Folder where controller class is located. - -Default value - assets/snippets/FormLister/core/controller/ - -### formid -The name of the form, required parameter. - -Form needs to have a hidden field named "formid" and its value has to be the same as parameter value. The form means to be sent, if there is a key named "formid" in the $_REQUEST array and its value is equal to the parameter value. - -### formMethod -Possible values - post, get or request. - -Default value - post. - -### config -Loads parameters from json file. - -Possible values - filename:folder, several values are separated by the semicolon. - -#### Example -myparams:core - loads parameters from assets/snippets/FormLister/config/core/myparams.json file; -myparams - loads parameters from assets/snippets/FormLister/config/custom/myparams.json file; myparams:/assets/myfolder - loads parameters from assets/myfolder/myparams.json file. - -Default value - none. - -### api -The way of output. - -Possible values: - -- 0: html only; -- 1: json array with form data; -- 2: json array with form data and html. - -### apiFormat -Output format. - -Possible value - json or array. - -Defaut value - json. - -### debug -Enables debug mode. Debug data is sent to MODX events log. - -Possible values - 0, 1. - -Default value - 0. - -### saveObject -Saves FormLister object to placeholder, so other snippets can use it. The object is saved only if form processing is finished successfully. - -Possible values - placeholder name. - -Default value - none. - -### removeGpc -Restores data sanitized by MODX as it contains {{, [[ and so on. MODX tags will be sanitized in output. - -Default value - 0, 1 or field names comma separated. - -Default value - 0. - -## Data sources -### defaultsSources -Allows to load data from external sources, to pre-fill form fields, for example. External data are loaded only before initial form output and ignored after form is sent. This behaviour can be changed with "keepDefaults" parameter. - -Possible values: sources, semicolon separated. The order of loading data matches the sources order in parameter. - -The source can be set as "name:key:prefix". Prefix is added to field name, if set - for example, config.site_name. - -Possible sources: - -- array: json or php array, its values are defined by the parameter named "defaults"; -- param:parameter name:prefix - the same as the "array" source but you can specify any snippet parameter, not only "defaults"; -- session:array key:prefix - loads data from $_SESSION[array key]; -- plh:keys, comma separated:prefix - loads data from $modx->placeholders property; -- aplh:placeholder name:prefix - loads data from an array stored in placeholder; -- config:prefix- loads data from MODX configuration; -- cookie:keys, comma separated:префикс - loads data from the $_COOKIE array; -- MODxAPI class name:key:prefix - a key is the argument of edit() method, the class has to be loaded before snippet call; -- document:prefix - loads current document data from modResource model. It needs no key; -- user:key:prefix - load authorized user data from modUsers model. User type is provided by key value (web or mgr). - -Default value - array. - -### defaults -Data for the "array" source. - -Possible values: json or php array. - -### keepDefaults -Allows to load external data after the form is sent. If fields list is specified, then only these fields will be loaded. - -Possible values: 1, 0; field names, comma separated. - -Default value - 0. - -### allowEmptyFields -Allows to set fields with empty values. - -Possible values - 0 or 1. - -Default value - 1. - -## Form Controls -### formControls -The list of fields hold by form controls (selects, checkboxes, radio buttons). It needs to determine their state. - -Possible values - field names, comma separated. - -Default value - none. - -### emptyFormControls -This parameter allows to solve the problem of unchecked checkboxes, as they are excluded from fields array during form submission: if there's no needed element in the $_REQUEST array, then it's set according to this parameter. The problem is actual mostly for MODxAPI classes usage, because MODxAPI requires to list changed fields in fromArray() method. But it's possible to use it in common forms to set the value of unchecked checkbox in templates. - -Possible values - an array: -``` -&emptyFormControls=`{ - "mycheckbox" : "No", - "published" : 0 -}` -``` - -## Data Processing -### prepare, prepareProcess, prepareAfterProcess -It's similar to the "prepare" parameter of DocLister. - -Snippets defined in the "prepare" parameter are run after form data loaded, "prepareProcess" - after validation is passed successfully, "prepareAfterProcess" - after form processing is finished. Controller object is available in prepare-snippets via $FormLister variable, while $data array contains the values of form fields. Additional $name variable allows to determine the parameter initiated snippet call; so you can use one snippet for all cases. Use controller methods (setField, setFields etc.) to change form data in prepare-snippets. - -Possible values - snippet names, anonymous functions, static methods of loaded classes. - -Default value - none. - -## Validation -### validator -Class name to validate data. Is has to be loaded before snippet call. - -Default value - \FormLister\Validator. - -### rules -Validation rules array. - -Default value - none. - -## Templates -### formTpl -Form template. It needs to have the required field named "formid" with the same value as "formid" parameter's one. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. - -### arraySplitter - -The separator to convert arrays to strings. - -Default value - semicolon. - -### {field}.arraySplitter -The separator to convert arrays to strings, but for particular {field}. Example: groups.arraySplitter - the separator for the field named "groups". - -If not set, then the "arraySplitter" parameter is used. - -### errorTpl -Template for validation messages. - -Possible values - template name, according to DocLister templating rules. - -Default value: -``` -@CODE:
          [+message+]
          -``` - -### requiredClass, errorClass -Class name for empty required fields and wrong filled fields. - -Default value - required and error accordingly. - -### {field}.requiredClass, {field}.errorClass -Allows to set classes mentioned above for particular fields. - -If not set, then "requiredClass", "errorClass" parameters are used. - -### messagesTpl -Template for controller messages. It outputs message groups (messages, required, error). - -Possible values - template name, according to DocLister templating rules. - -Default value: -``` -@CODE:
          [+messages+]
          -``` - -### messagesOuterTpl -Wrapper template for controller message groups. - -Possible values - template name, according to DocLister templating rules. - -Default value - -``` -@CODE: [+messages+] -``` - -### messagesRequiredOuterTpl -Wrapper template for the "required" message group. - -Possible values - template name, according to DocLister templating rules. - -Default value: -``` -@CODE: [+messages+] -``` - -### messagesErrorOuterTpl -Wrapper template for the "error" message group. - -Possible values - template name, according to DocLister templating rules. - -Default value: -``` -@CODE: [+messages+] -``` - -### messagesSplitter, messagesRequiredSplitter, messagesErrorSplitter -Messages separator in groups. - -Possible values - string. - -Default value: -``` -
          -``` - -### removeEmptyPlaceholders -Removes placeholders without values from templates. - -Possible values - 0 or 1. - -Default value - 1. - -### parseDocumentSource -Enables MODX-parser for output post-processing. - -Possible values - 0 or 1. - -Default value - 0. - -### rewriteUrls -Allows to parse links in templates if the "parseDocumentSource" parameter is off. - -Possible values - 0 or 1. - -Default value - 0. - -### skipPrerender -Allows to skip some form fields processing (sanitizing values, converting arrays to strings, error messages rendering). Set to 1, if you do not use MODX templates. - -Possible values - 0 or 1. - -Default value - 0. - -### templatePath, templateExtension -Sets template files folder and template files extension. These parameters are needed to use with EvoTwig plugin. - -Default value - none. - -## Redirect after finish -### redirectTo -Target page id to redirect if form is processed successfully. There's no redirect in api-mode, but absolute url for target page is saved in form data as "redirectTo" field. - -Instead of target page id, you can specify an array with additional options: -``` -&redirectTo=`{ - "page":10, - "query":{ - "foo":"bar" - }, - "header":"HTTP/1.1 307 Temporary Redirect" -}` -``` -The "page" key is the target page id, the "query" array contains get-parameters to pass, the "header" key can be used to set redirect header. - -Possible values - number or array. - -Default value - none. diff --git a/assets/snippets/FormLister/docs/en/030_Data_Validation.md b/assets/snippets/FormLister/docs/en/030_Data_Validation.md deleted file mode 100755 index eee9c956..00000000 --- a/assets/snippets/FormLister/docs/en/030_Data_Validation.md +++ /dev/null @@ -1,132 +0,0 @@ -## Data validation - -Validator applies validation rules to field values one by one, if error occures then the record is added to form errors array and further form procession is interrupted. - -Validation is passed successfully if there are no records in form errors array. - -### Validation rules -Validation rules are described as an array. Field name is the array key, and array value contains the rules array. Validation rule is the method of validator class. The key of rules array is the rule name (the name of validation method), its value is either error message string, or an array with rule description. This array contains needed values in the key named "params" and an error message in the key named "message". - -Use exclamation mark for rule denial: "!numeric" - the field passes validation if its value is not numeric. - -If you need to validate only not empty fields, then set exclamation mark before field name to ignore rules if the field is empty. - -``` -{ - "field 1": { - "rule 1" : "error message", - "rule 2" : "error message" - }, - "field 2": { - "rule 1" : "error message", - "rule 2" : { - "params" : value, - "message" : "error message" - } - }, - "!field 3":{ - "rule 1" : "error message" - } -} -``` -\FormLister\Validator base class has the following rules: - -- required: field value is not empty; -- date: field value is a date in defined format; -- min: field value length is greater or equal to defined; -- max: field value length is less or equal to defined; -- greater: field value is greater than defined; -- less: field value is less than defined; -- between: field value is in the range; -- equals: field value is equals to defined; -- in: field value is in defined array; -- alpha: field value contains only letters; -- numeric: field value contains only digits; -- alphaNumeric: field value contains only letters and digits; -- slug: field value is an url slug; -- decimal: field value is a decimal number; -- phone: field value is a phone number; -- matches: field value matches regular expression; -- url: field value is an url; -- email: field value is an e-mail address; -- length: field value length is equal to defined; -- minLength: field value length is greater or equal to defined; -- maxLength: field value length is less or equal to defined; -- lengthBetween: field value length is in the range; -- minCount: array size is greater than defined; -- maxCount: array size is less than defined; -- countBetween: array size is in the range. - -If several values are needed for the rule, then pass them as an array: -``` -&rules=`{ - "field" : { - "lengthBetween" : { - "params" : [10,20], - "message" : "Длина должна быть от 10 до 20" - } - } -}` -``` - -If the rule requires an array (the "in" rule and other), then you should specify this array in the following way: -``` -&rules=`{ - "field" : { - "in" : { - "params" : [ [10,20,30] ], - "message" : "field value should be equal to 10, 20 or 30" - } - } -}` -``` - -It needs to pass an array to validator method as single argument. - -It's possible to use anonymous functions or static methods of loaded classes: -``` -&rules=`{ - "myfield":{ - "required":"Required field", - "custom":{ - "function":"\\Namespace\\Classname::myCustomRule", - "params":[10,20,30], - "message":"Custom check failed" - } - } -}` -``` - -Validation method should accept controller object as the first argument, field value as the second argument, parameters from the "params" key of the rule description as other arguments: -``` -public static function myCustomRule($fl,$value,$a,$b,$c) { - $result = $fl->getField('field1') == $a && $fl->getField('field2') == $b && $value == $c; - return $result; -} -``` -The rule above will be passed if the field1 value is 10, the field2 value is 20, and the value of the the field which the rule is applied to is equal to 30. - -Validator method returns true if the rule is passed, false or error message if not (so it's possible not to use the "message" key for custom rules). - -Example contains the "сustom" rule name, but it can be any if it's not in validator class. So you can use several custom rules. - -### Validation results -Error data are stored as an array and can be obtained with getFormData('errors') method call: -``` -{ - "field 1": { - "failed rule" : "error message" - }, - "field 2": { - "failed rule" : "error message" - } -} -``` -This array is filled with addError(field name, rule name, error message) method. So, it's possible to affect final result adding records to this array manually. You can also call setValid(false) method to decline failed validation. - -Each field validation result can be output in template with [+field name.error+] placeholder. Total results can be output with [+form.messages+] placholder set by messagesTpl parameter. You can use the following placeholders on its part: - -- [+required+] - messages about empty required fields; -- [+errors+] - messages about wrong filled fields. - -Use getErrorMessage(field name) method to get validation error messages for any field. diff --git a/assets/snippets/FormLister/docs/en/035_Captcha_Usage.md b/assets/snippets/FormLister/docs/en/035_Captcha_Usage.md deleted file mode 100755 index 8286070d..00000000 --- a/assets/snippets/FormLister/docs/en/035_Captcha_Usage.md +++ /dev/null @@ -1,43 +0,0 @@ -## Captcha usage - -FormLister can use modified MODX captcha and Google Recaptcha by default. - -Set the "captcha" parameter value with the name of captcha files folder (located at assets/snippets/FormLister/lib/captcha/) to enable it: -``` -&captcha=`modxCaptcha` -``` - -The parameter named "captchaParams" contains an array of captcha settings. For example: -``` -&captchaParams=`{ -"width":200, -"height":120 -}` -``` - -The field name to get captcha value from user is defined by the "captchaField" parameter ("vericode" by default). Validation rule for this field is created automatically. - -To output captcha in form template use [+captcha+] placeholder. - -### modxCaptcha - -Settings: -* width and height - width and height of a captcha image (100 and 60 by default); -* inline - output format. If it's 1, then [+captcha+] placeholder contains an image in base64-format. If it's 0, then placeholder contains the link to connector.php file, which generates captcha image. Default value - 1; -* connectorDir - path to the folder containing connector.php file, if "inline" parameter is set to 0. Default value - assets/snippets/FormLister/lib/captcha/modxCaptcha/; -* errorEmptyCode - error message, if user doesn't enter captcha. -* errorCodeFailed - error message, if user enters wrong value. - -### reCaptcha - -Uses Google reCAPTCHA V2. Include the following script in page tempalate to use it: -``` - -``` - -The value of "captchaField" parameter should be set to "g-recaptcha-response" (see [documentation](https://developers.google.com/recaptcha/docs/verify)). - -Settings: -* secretKey, siteKey - keys to access reCAPTCHA api; -* size, theme, badge, callback, expired_callback, tabIndex, type - see. [documentation](https://developers.google.com/recaptcha/docs/display#render_param); -* errorCodeFailed - error message if captcha validation failed. diff --git a/assets/snippets/FormLister/docs/en/040_Data_Output.md b/assets/snippets/FormLister/docs/en/040_Data_Output.md deleted file mode 100755 index 4a98a819..00000000 --- a/assets/snippets/FormLister/docs/en/040_Data_Output.md +++ /dev/null @@ -1,59 +0,0 @@ -## Data output - -Data are sanitized, arrays are converted to strings to be output in templates. Special placeholders are set for form controls. "Field name" below is the raw field name, without brackets for array fields. - -Raw field value (or placeholder): -[+field name+] - -Sanitized field value (array fields are converted to strings): -``` -[+field name.value+] -``` -Example: -``` -[+comment.value+] //The value of a field named "comment". It may be a scalar value of the real input or textarea or any other form element, but it can be set with PHP as well. -``` - -Setting checkbox: -``` -[+c.field name.field value+] -``` -Example: -``` -[+c.agree.Yes+] //It outputs "checked" if a single checkbox named "agree" contains "Yes" value. -[+c.district.West+] //Same but for one checkbox from an array of two checkboxes named "district[]" -[+c.district.East+] //Same but for one checkbox from an array of two checkboxes named "district[]" -``` - - -Setting select or radio-button: -``` -[+s.field name.field value+] -``` -Example: -``` -[+s.country.Russia+] //It outputs "selected" if a single option of select named "country" is selected and its value is "Russia". See example for checkboxes if you need to use select with multiple options available to choose. -``` - -Class for empty required field: -[+field name.requiredСlass+] - -Class for wrong filled field: -[+field value.errorClass+] - -Alternative classes output: -[+field value.class+] -[+field value.classnames+] - -Validation error message: -[+field name.error+] - -Controller messages output: -[+form.messages+] - -There are 3 possible types of messages in the [+form.messages+] placeholder: failed the "required" rule fields, wrong filled fields, any messages set by addMessage() method. The last ones are output by default, see the "messagesTpl" parameter description. - -Lexicon entries: -[%lexicon keys%] - -If EvoTwig plugin is used then template variables are available: FormLister (controller object), errors (formData['errors'] array), messages (formData['messages'] array), data (formData['fields'] array). diff --git a/assets/snippets/FormLister/docs/en/050_Mail_Sending.md b/assets/snippets/FormLister/docs/en/050_Mail_Sending.md deleted file mode 100755 index e1109d77..00000000 --- a/assets/snippets/FormLister/docs/en/050_Mail_Sending.md +++ /dev/null @@ -1,239 +0,0 @@ -## Sending e-mail - -Form controller allows to send form data via e-mail. - -## Mailer parameters -### parseMailerParams -Allows to use form data in mail sending parameters (&to=\`[+user.email.value+]\` etc.). - -Possible values - 1, 0. - -Default value - 0. - -### isHtml -Allows to send e-mail in html format. - -Possible values - 1, 0. - -Default value - 1. - -### to -Receiver's address. If it's not set then the mail is not sent, but form procession is finished successfully. - -Possible values - e-mail address. - -Default value - none. - -### from -Sender's address. - -Possible values - e-mail address. - -Default value - the "emailsender" configuration parameter value. - -### fromName -Sender's name. - -Possible values - string. - -Default value - the "site_name" configuration parameter value. - -### replyTo -ReplyTo header. - -Possible values - e-mail address. - -Default value - none. - -### cc -Cс header. - -Possible values - e-mail address. - -Default value - none. - -### bcc -Bcc header. - -Possible values - e-mail address. - -Default value - none. - -### noemail -If it's set, then the mail isn't sent, but supposed to be sent successfully. - -Possible values - 1, 0. - -Default value - 0. - -### ignoreMailerResult -If it's set, the mail is sent and supposed to be sent successfully. - -Possible values - 1, 0. - -Default value - 0. - -### subject, ccSubject, autoSubject -Letter subject. - -Possible values - string. - -Default value - none. - -### subjectTpl, ccSubjectTpl, autoSubjectTpl -Letter subject template. - -Possible values - template name, according to DocLister templating rules. - -Default value - the "subject" parameter value ("ccSubject", "autoSubject"). - -### autosender -Address to send additional letter. - -Possible values - e-mail address. - -Default value - none. - -### autosenderFromName -The name of the additional letter sender. - -Possible values - string. - -Default value - the "site_name" configuration parameter value. - -### ccSender -If it's set then the receiver's address is defined by the value of form field. - -Possible values - 1, 0. - -Default value - 0. - -### ccSenderField -Field name containing e-mail address. - -Possible values - field name. - -Default value - email. - -### ccSenderFromName -Sender's name for the mail sent to the form field defined address. - -Possible values - string. - -Default value - none. - -## ccMailConfig -Allows to redefine mail sending parameters for the letters to the address taken from the form field ((isHtml, from, fromName, subject, replyTo, cc, bcc, noemail)). - -Possible values - json or php array. - -Default value - none. - -## autoMailConfig -Allows to redefine mail sending parameters for the additional letters (isHtml, from, fromName, subject, replyTo, cc, bcc, noemail). - -Possible values - json or php array. - -Default value - none. - -## Submit protection -### protectSubmit -Prevents submission of the form with the same data again. - -Possible values - 1, 0 or fields list to check if the form is unique. Required fields are used by default. - -Default value - 1. - -### submitLimit -Prevents sending mail too often. - -Possible values - number of seconds between form submits. - -Default value - 60. - -## Templates -### reportTpl -The main template of the letter. - -Possible values - template name, according to DocLister templating rules. - -Default value - the list of fields and their values. - -### automessageTpl -Template of the additional letter. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. - -### ccSenderTpl -Template of the letter sent to the user defined address. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. - -### successTpl -Success message template. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. - -## Sending files -### attachments -Field names to store files. Single file fields (name="field" type="file") and multiple file fields as simple arrays (name="field[]" type="file" multiple) are supported. - -Default value - none. - -### attachFiles -Allows to send any files. - -Possible values - array: -``` -&attachFiles=`{ -"field ":{ - "filepath":"assets/images/logo.png", - "filename":"logo.png" -}, -"field 2":[ - { - "filepath":"assets/images/file1.jpg", - "filename":"report.jpg" - }, - { - "filepath":"assets/images/file2.jpg", - "filename":"report2.jpg" - } -] -}` -``` -### deleteAttachments -Allows to delete attachment files if the mail is sent successfully. - -Possible values - 0 or 1. - -Default value - 0. - -### fileValidator -Class name to validate files. This class has to be loaded before snippet call. - -Default value - \FormLister\FileValidator - -### fileRules -Validation rules (see "Data validation" chapter). Default validator has the following rules: - -- required: files are loaded successfully; -- optional: returns true even if files were not submitted (it makes file field not required); -- allowed: file extension is in defined array; -- images: file extension is jpg, jpeg, gif, png, bmp; -- minSize: file size in kilobytes is greater than defined; -- maxSize: file size in kilobytes is less than defined; -- sizeBetween: file size in kilobytes is in the range; -- minCount: files count is greater than defined; -- maxCount: files count is less than defined; -- countBetween: files count is in the range; - -There's no sense to use the "!field name" construction in file validation rules, because the value of the file field can not be empty, so use the "optional" rule instead. - -There's the [+attachments.value+] placeholder available in reportTpl template, it contains the list of attached files. To output particular file field use the [+field name.value+] placeholder. Files are sent only in letters with reportTpl template. diff --git a/assets/snippets/FormLister/docs/en/060_Authorizing_Users.md b/assets/snippets/FormLister/docs/en/060_Authorizing_Users.md deleted file mode 100755 index 1ce2b379..00000000 --- a/assets/snippets/FormLister/docs/en/060_Authorizing_Users.md +++ /dev/null @@ -1,132 +0,0 @@ -## Authorizing users - -Login controller authorizes registered users using special MODxAPI class to manage them. Users are identified by their names or e-mails (username and email database fields), but it's possible to use alternative ways with "OnWebAuthentication" event. Plugin named "userHelper" performs some related operations: it counts login attempts, registers last login time, checks auto login cookie, blocks users after some unsuccessful tries, logs out users. - -## Controller parameters - -### model -Class to manage users. - -Possible values - class name. - -Default value - \modUsers - -### modelPath -Path to the class to manage users. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modUsers.php - -### loginField -Field to identify user. - -Possible values - field name. - -Default value - username. - -### passwordField -Password field. - -Possible values - field name. - -Default value - password. - -### rememberField -Field to remember user. If the field value is equal to true, then a special auto login cookie will be set after successful authorization. Cookie name and its lifetime is defined by the "cookieName" and "cookieLifetime" parameters. - -It's possible to set the "rememberme" field in the "defaults" parameter, to enable it by default: -``` -&defaults=`{"rememberme":1}` -``` - -Possible values - field name. - -Default value - rememberme. - -### checkActivation -Enables check for the profile activation (see "Activating user profiles"). - -Possible values - 0 or 1. - -Default value - 1. - -### context -Authorization context. - -Possible values - mgr or web. - -Default value - web. - -### cookieName -Cookie name to store auto login parameters. - -Default value - WebLoginPE. - -### cookieLifetime -Autologin cookie life time. - -Possible values - the number of seconds since last login. - -Default value - 157680000 (5 years). - -### redirectTo -Redirects user after successful authorization. - -Possible values - target page id or array. - -Default value - none. - -### exitTo -Redirects already authorized user. - -Possible values - target page id or array. - -Default value - none. - -### successTpl -Success message template. User data can be used there. - -Possible values - template name, according to DocLister templating rules. - -Default value - lexicon entry with the key [%login.default_successTpl%] - -### skipTpl -Outputs message if user is already authorized. - -Possible values - template name, according to DocLister templating rules. - -Default value - lexicon entry with the key [%login.default_skipTpl%] - -## userHelper plugin parameters -### logoutKey -GET-parameter name to catch for user logout request. For example, http://sitename.ru/page.html?logout. - -Default value - logout. - -### cookieName -Cookie name to store autologin parameters. - -Default value - WebLoginPE. - -### cookieLifetime -Autologin cookie life time. - -Possible values - number of seconds since last login. - -Default value - 157680000 (5 years). - -### maxFails -Number of unsuccessful login attempts before the block. - -Possible values - number greater than 0. - -Default value - 3. - -### blockTime -Time to block. - -Possible values - number of seconds since last login attempt. - -Default value - 3600 (1 hour). - diff --git a/assets/snippets/FormLister/docs/en/070_Registering_Users.md b/assets/snippets/FormLister/docs/en/070_Registering_Users.md deleted file mode 100755 index 45eda88a..00000000 --- a/assets/snippets/FormLister/docs/en/070_Registering_Users.md +++ /dev/null @@ -1,138 +0,0 @@ -## Регистрация пользователей - -Register controller allows to register users, add them to user groups and send notifications. It extends Form controller, so you can use all its parameters to send letters during registration. - -Field names should be the same as [modUsers](http://docs.evolution-cms.com/Extras/Snippets/DocLister/MODxAPI) model's ones. - -If there's no "username" field in the form, then its value will be the value of the "email" field. So it's possible to register users only by e-mail. - -If there's no "password" field, then its value will be created automatically. So, the registration adds up to specify e-mail only. - -If there's the "repeatPassword" field in the form and validation rules are set for the "password" and "repeatPassword" fields, then the "equals" rule will be corrected to check if the "password" field matches the "repeatPassword" field: -: -``` -"repeatPassword":{ - "required":"Enter password one more time", - "equals":{ - "params" : "This key is not needed because it will be set by Register controller", - "message":"Passwords don't match" - } -} -``` - -Registration need to check if the "username" and "email" fields are unique. Controller provides rules needed: -``` -&rules=`{ - "username":{ - "required":"Enter user name", - "alphaNumeric":"Only letters and digits are allowed", - "custom":{ - "function":"\\FormLister\\Register::uniqueUsername", - "message":"You cannot use this name" - } - }, - "email":{ - "required":"Enter e-mail", - "email":"Wrong e-mail", - "custom":{ - "function":"\\FormLister\\Register::uniqueEmail", - "message":"You cannot use this e-mail" - } - } -}` -``` -All model fields for the new record are available in templates. Additional field "user.password" with given password is set. - -## Parameters -### model -Class to manage users. - -Possible values - class name. - -Default value - \modUsers - -### modelPath -Path to the class to manage users. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modUsers.php - -### allowedFields -Fields allowed to process, other fields are ignored. The "username", "email" and "password" fields are enabled always. - -If not set, then all fields are allowed. - -Possible value - field names, comma separated. - -Default value - none. - -### forbiddenFields -Fields forbidden to process. The "username", "email" and "password" fields will be removed from the list of forbidden fields. - -Possible value - field names, comma separated. - -Default value - none. - -### userGroups -Adds registered user to user group. - -Possible values - group names, comma separated (or an array). - -Default value - none. - -### checkActivation -Enables the check for user profile activation (see "Activating user profiles"). The "activate.url" field will be set, which contains link to a page with FormLister call to activate user profile. - -Possible values - 1 or 0. - -Default value - 0. - -### activateTo -If profile activation check is enabled, then you have to specify the id of the page with FormLister call to activate user profile. - -Possible values - page id. - -Default value - the value of $modx->config['site_start']. - -### preparePostProcess -Allows to process data after saving new user. - -Possible values - snippet names, anonymous functions, static methods of loaded classes. - -Default value - none. - -### redirectTo -Redirects user after successful registration. - -Possible values - target page id or array. - -Default value - none. - -### exitTo -Redirects authorized user. - -Possible values - target page id or array. - -Default value - none. - -### skipTpl -Outputs message if user is authorized. - -Possible values - template name, according to DocLister templating rules. - -Default value - register lexicon entry with the key [%register.default_skipTpl%]. - -### successTpl -Success message template. - -Possible values - template name, according to DocLister templating rules. - -Default value - register lexicon entry with the key [%register.default_successTpl%] - -### passwordLength -Password length (if the password needs to be created automatically). - -Possible values - number of characters greater than 6. - -Default value - 6. diff --git a/assets/snippets/FormLister/docs/en/075_Activating_User_Profiles.md b/assets/snippets/FormLister/docs/en/075_Activating_User_Profiles.md deleted file mode 100755 index 38558536..00000000 --- a/assets/snippets/FormLister/docs/en/075_Activating_User_Profiles.md +++ /dev/null @@ -1,77 +0,0 @@ -## Activating user profiles - -Activate controller activates user profile, so it's possible to request registration confirmation by following the special link in the letter sent after the registration. - -If the user hasn't received this letter, then he can request this letter again. - -User profile assumes to be inactivated if the "logincount" field value is -1. - -Snippet calls to register and authorize users should have the "checkActivation" parameter enabled. - -If user creates password himself during registration, then this password needs to be requested to send a letter with the activation link. Or the new password will be created, because if user hasn't received the letter containing generated password after registration, then he cannot know this password - -All model fields are available in templates. Additional field "user.password" with raw password value is set as well as the "activate.url" field with activation link. - -## Parameters -### model -Class to manage users. - -Possible values - class name. - -Default value - \modUsers - -### modelPath -Path to the class to manage users. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modUsers.php - -### redirectTo -Redirects user after successful activation. - -Possible values - target page id or array. - -Default value - none. - -### exitTo -Redirects authorized user. - -Possible values - target page id or array. - -Default value - none. - -### skipTpl -Outputs message if user is authorized. - -Possible values - template name, according to DocLister templating rules. - -Default value - activate lexicon entry with the key [%activate.default_skipTpl%]. - -### reportTpl -Letter template containing profile activation data. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. - -### successTpl -Message template if e-mail with activation data is sent successfully. - -Possible values - template name, according to DocLister templating rules. - -Default value - activate lexicon entry with the key [%activate.default_successTpl%] - -### activateSuccessTpl -Message template if activation is finished successfully. - -Possible values - template name, according to DocLister templating rules. - -Default value - activate lexicon entry with the key [+activate.default_activateSuccessTpl+] - -### passwordLength -Password length. - -Possible values - number of characters greater than 6. - -Default value - 6. diff --git a/assets/snippets/FormLister/docs/en/080_Editing_User_Profiles.md b/assets/snippets/FormLister/docs/en/080_Editing_User_Profiles.md deleted file mode 100755 index f5f3be6d..00000000 --- a/assets/snippets/FormLister/docs/en/080_Editing_User_Profiles.md +++ /dev/null @@ -1,98 +0,0 @@ -## Editing user profile - -Profile controller allow authorized users to change their profiles, as well as passwords. - -E-mail should be checked for uniqueness with controller's special rule: -``` -&rules=`{ - "email":{ - "required":"Enter e-mail", - "email":"Wrong e-mail", - "custom":{ - "function":"\\FormLister\\Profile::uniqueEmail", - "message":"You cannot use this e-mail" - } - } -}` -``` -The same for the "username" field: -``` -&rules=`{ - "username":{ - "required":"Enter user name", - "alphaNumeric":"Only letters and digits are allowed", - "custom":{ - "function":"\\FormLister\\Profile::uniqueUsername", - "message":"You cannot use this name" - } - } -}` -``` - -If the "password" field is empty, then the password will stay unchanged.If the password is changed then user needs to be authorized again. The new password is stored in the "user.password" field. - -## Parameters -### model -Class to manage users. - -Possible values - class name. - -Default value - \modUsers - -### modelPath -Path to the class to manage users. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modUsers.php - -### allowedFields -Fields allowed to process, other fields are ignored. If password is changed, then the "password" field will be added to the list. If no value is set to the "username" field then, it this field be set with the "e-mail" field value. The "username" will be allowed in this case. - -If not set, then all fields are allowed. - -Possible value - field names, comma separated. - -Default value - none. - -### forbiddenFields -Fields forbidden to process. The "password" and "username" fields are processed the same way as for the "allowedFields" parameter. - -Possible value - field names, comma separated. - -Default value - none. - -### preparePostProcess -Allows to process data after saving user data. - -Possible values - snippet names, anonymous functions, static methods of loaded classes. - -Default value - none. - -### redirectTo -Redirects user after successful profile update. - -Possible values - target page id or array. - -Default value - none. - -### exitTo -Redirects non authorized user. - -Possible values - target page id or array. - -Default value - none. - -### skipTpl -Outputs message if user is not authorized. - -Possible values - template name, according to DocLister templating rules. - -Default value - profile lexicon entry with the key [%profile.default_skipTpl%]. - -### successTpl -Success message template. - -Possible values - template name, according to DocLister templating rules. - -Default value - none. diff --git a/assets/snippets/FormLister/docs/en/085_Deleting_Users_Profiles.md b/assets/snippets/FormLister/docs/en/085_Deleting_Users_Profiles.md deleted file mode 100755 index bfe40414..00000000 --- a/assets/snippets/FormLister/docs/en/085_Deleting_Users_Profiles.md +++ /dev/null @@ -1,50 +0,0 @@ -## Удаление профиля пользователя - -Контроллер DeleteUser позволяет авторизованным пользователям удалять свои профили. Для подтверждения действия пользователю необходимо ввести свой пароль. - -Расширяет Form. - -В шаблонах доступны поля модели для удаляемой записи. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### redirectTo -Перенаправляет пользователя на указанную страницу после сохранения профиля. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для неавторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteUser с ключом [+deleteUser.default_skipTpl+] - -### successTpl -Шаблон сообщения об успешном удалении профиля. Если не задан, то генерируется сообщение об успешном сохранении формы. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. diff --git a/assets/snippets/FormLister/docs/en/090_Reminding_Passwords.md b/assets/snippets/FormLister/docs/en/090_Reminding_Passwords.md deleted file mode 100755 index e9b507dd..00000000 --- a/assets/snippets/FormLister/docs/en/090_Reminding_Passwords.md +++ /dev/null @@ -1,143 +0,0 @@ -## Восстановление паролей пользователями - -Контроллер Reminder позволяет web-пользователям восстанавливать забытые пароли. Расширяет контроллер Form. - -Восстановление паролей происходит по следующей схеме: - -- пользователь вводит в форме свой идентификатор (им может быть имя пользователя или email); -- пользователь получает письмо, в котором содержится ссылка для восстановления; -- при переходе по ссылке пользователь получает возможность ввести новый пароль либо пароль будет сгенерирован автоматически; -- пользователю отправляется письмо с новым паролем и показыается сообщение (в сообщении можно также вывести новый пароль). - -Параметр to перезаписывается значением email пользователя. Обязательно должен быть задан параметр resetTo. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### hashField -Имя поля для хранения хэша данных пользователя. - -Значение по умолчанию - hash. - -### userField -Имя поля для хранения идентификатора пользователя (имя пользователя или email). - -Значение по умолчанию - email. - -### uidField -Имя поля, которое используется для идентификации пользователя при переходе по ссылке. - -Значение по умолчанию - id. - -### exitTo -Перенаправляет авторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### resetTo -Страница, на которую будет указывать ссылка для восстановления паролей. Обязательный параметр. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - id документа, в котором вызван контроллер. - -### redirectTo -Перенаправляет на указанную страницу после успешного восстановления пароля. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для авторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_skipTpl+]. - -### formTpl -Шаблон формы для ввода идентификатора пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### resetTpl -Шаблон формы для ввода нового пароля. Если параметр не задан, то пароль будет сгенерирован автоматически. - -Поля для ввода паролей должны называться password и repeatPassword. В форме должны также присутствовать скрытые поля с именами из параметров uidField и hashField. Значение для поля hashField задается через плейсхолдер [+user.hash+]. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### successTpl -Шаблон сообщения об успешной отправке письма со ссылкой для восстановления пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.). - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_successTpl+]. - -### resetSuccessTpl -Шаблон сообщения об успешном восстановлении пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_resetSuccessTpl+]. - -### reportTpl -Шаблон письма со ссылкой для восстановления пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). Ссылка для восстановлени пароля в письме задается через плейсхолдер [+reset.url+] - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_reportTpl+].. - -### resetReportTpl -Шаблон письма об успешном восстановлении пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). Если не задан, то письмо пользователю отправляться не будет. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### rules -Правила валидации для формы идентификации пользователя. - -Возможные значения - см. раздел "Валидация данных". - -Значение по умолчанию - пусто. - -### resetRules -Правила валидации для формы установки нового пароля. Если заданы правила валидации для полей password и repeatPassword, то при наличии для поля repeatPassword правила equals, оно будет автоматически скорректировано для проверки равенства значений полей password и repeatPassword: -``` -"repeatPassword":{ - "required":"Введите пароль еще раз", - "equals":{ - "params" : "Этот ключ в описании правила можно не задавать, он будет сформирован контроллером автоматически", - "message":"Пароли не совпадают" - } -} -``` -Возможные значения - см. раздел "Валидация данных". - -Значение по умолчанию - пусто. - -### passwordLength -Длина пароля (если создается автоматически). - -Возможные значения - число символов больше 6. - -Значение по умолчанию - 6. diff --git a/assets/snippets/FormLister/docs/en/100_Creating_And_Editing_User_Documents.md b/assets/snippets/FormLister/docs/en/100_Creating_And_Editing_User_Documents.md deleted file mode 100755 index d383e93f..00000000 --- a/assets/snippets/FormLister/docs/en/100_Creating_And_Editing_User_Documents.md +++ /dev/null @@ -1,166 +0,0 @@ -## Создание и редактирование документов пользователями - -Контроллер Content позволяет web-пользователям создавать и редактировать записи в таблицах MODxAPI. Расширяет контроллер Form, что позволяет отправлять письма после создания записи. При редактировании записей отправка почты отключена, при необходимости ее можно реализовать с помощью плагинов на событие сохранения (OnDocFormSave и т.п.). - -Данные формы передаются в объект MODxAPI как есть, соответственно разработчику нужно заботиться об их корректности самостоятельно. - -При редактировании записей можно запретить изменение отдельных полей, используя параметр keepDefaults. - -При создании новой записи вызывается событие OnMakeDocUrl, в которое передается id записи и массив data со значениями полей записи. Это позволяет вернуть ссылку на созданную запись, она будет доступна через плейсхолдер [+content.url+]. Ссылку можно использовать в письме c уведомлением о создании новой записи. - -Также можно использовать данные авторизованного пользователя, доступны через плейсхолдеры [+user.fullname+], [+user.email+] и т.д. - -## Параметры -### model -Класс MODxAPI. - -Возможные значения - имя класса MODxAPI. - -Значение по умолчанию - \modResource. - -### modelPath -Путь к файлу класса, если класс не загружается заранее. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modResource.php. - -### userModel -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### userModelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### onlyUsers -Разрешить добавление записей только для зарегистрированных пользователей. - -Возможные значения - 0, 1. - -Значение по умолчанию - 1. - -### userGroups -Группы пользователей, которым разрешено добавлять или изменять записи. - -Возможные значения - список групп через точку с запятой. - -Значение по умолчанию - пусто (разрешены любые группы). - -### onlyOwners -Разрешает редактирование записей только их авторами. Автор определяется по полю, указанному в параметре ownerField. - -Возможные значения - 0, 1. - -Значение по умолчанию - 1. - -### ownerField -Имя поля, определяющего владельца записи. Если работать с документами modResource, то это будет имя tv-параметра (в Evo не предусмотрено создание записей веб-пользователями). - -Возможные значения - имя поля. - -Значение по умолчанию - aid. - -### idField -Имя ключа массива $_REQUEST, по которому определяется id редактируемой записи. Если ключ не задан, то контроллер вызывается в режиме создания записей. Информацию о режиме контроллера можно получить с помощью метода getMode. - -В форме редактирования нужно предусмотреть скрытое поле с именем параметра, в котором будет сохраняться id записи. - -Значение по умолчанию - id. - -### contentFields -Задает сопоставление полей MODxAPI и полей формы. Можно не задавать, если имена полей совпадают. Если параметр не задан, то ограничить список передаваемых в модель полей можно с помощью параметров allowedFields и forbiddenFields. - -Возможные значения - массив вида: -``` -&contentFields=`{ - "поле MODxAPI":"поле формы", - "поле MODxAPI":"поле формы" -} -` -``` -Значение по умолчанию - пусто. - -### clearCache -Очищать кэш после сохранения записи. - -Возможные значения - 0, 1. - -Значение по умолчанию - 0. - -### redirectTo -Перенаправляет пользователя на указанную страницу после сохранения новой записи. В режиме редактирования не используется. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### editAfterCreate -Переправляет пользователя на страницу для редактирования созданной записи. Страница указывается в параметре redirectTo. - -Возможные значения - 1 или 0. - -Значение по умолчанию - 0. - -### editTpl -Шаблон формы для редактирования документа. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - значение параметра formTpl. - -### badOwnerTpl -Шаблон сообщения о том, что пользователь не является автором документа. Только режим редактирования. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+edit.default_badOwnerTpl+]. - -### badGroupTpl, badGroupEditTpl -Шаблон сообщения о том, что пользователь не входит в группу пользователей которым разрешено создавать и редактировать документы. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом -[+create.default_badGroupTpl+] или [+edit.default_badGroupTpl+]. - -### badRecordTpl -Шаблон сообщения о том, что пользователь не может редактировать запись: например, запись не существует. Только режим редактирования. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+edit.default_badRecordTpl+]. - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl, skipEditTpl -Шаблон сообщения для неавторизованного пользователя. Для режима редактирования - skipEditTpl. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+create.default_skipTpl+] (edit.default_skipEditTpl). - -### successTpl -Шаблон сообщения об успешном сохранении новой записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+create.default_successTpl+] - -### editSuccessTpl -Шаблон сообщения об успешном обновлении записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. diff --git a/assets/snippets/FormLister/docs/en/105_Deleting_User_Documents.md b/assets/snippets/FormLister/docs/en/105_Deleting_User_Documents.md deleted file mode 100755 index a83245f7..00000000 --- a/assets/snippets/FormLister/docs/en/105_Deleting_User_Documents.md +++ /dev/null @@ -1,97 +0,0 @@ -## Deleting user documents - -DeleteContent controller allows authorized users to delete documents they created. - -It extends Form controller. - -Model fields are available in templates with the "user" prefix (user.fullname, user.email etc.). - -## Parameters -### model -MODxAPI class to manage documents or other type of records. - -Possible values - MODxAPI class name. - -Default value - \modResource. - -### modelPath -Path to the MODxAPI class. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modResource.php. - -### userModel -Class to manage users. - -Possible values - class name. - -Default value - \modUsers - -### userModelPath -Path to the class to manage users. - -Possible values - relative file path. - -Default value - assets/lib/MODxAPI/modUsers.php - -### ownerField -Field name to get the record owner. For the modResource class it can be the name of a tv-parameter (because web users can not create documents in Evo). - -Possible values - field name. - -Default value - aid. - -### idField -$_REQUEST array key to get the id of the record to be deleted. - -Default value - id. - -### redirectTo -Redirects user after successful operation. - -Possible values - target page id or array. - -Default value - none. - -### badOwnerTpl -Outputs message if user is not the record owner. - -Possible values - template name, according to DocLister templating rules. - -Default value - deleteContent lexicon entry with the key [%deleteContent.default_badOwnerTpl%]. - -### badRecordTpl -Outputs message if user can not delete record (it doesn't exists, for example). - -Possible values - template name, according to DocLister templating rules. - -Default value - deleteContent lexicon entry with the key [%deleteContent.default_badRecordTpl%]. - -### skipTpl -Outputs message if user is not authorized. - -Possible values - template name, according to DocLister templating rules. - -Default value - deleteContent lexicon entry with the key [%deleteContent.default_skipTpl%]. - -### successTpl -Success message template. - -Possible values - template name, according to DocLister templating rules. - -Default value - deleteContent lexicon entry with the key [%deleteContent.default_successTpl%] - -### exitTo -Redirects non authorized user. - -Possible values - target page id or array. - -Default value - none. - -### badRecordTo -Redirects if record can not be deleted. - -Possible values - target page id or array. - -Default value - none. diff --git a/assets/snippets/FormLister/docs/en/110_Lexicons.md b/assets/snippets/FormLister/docs/en/110_Lexicons.md deleted file mode 100755 index 30affe0c..00000000 --- a/assets/snippets/FormLister/docs/en/110_Lexicons.md +++ /dev/null @@ -1,32 +0,0 @@ -## Lexicons - -To use lexicons you should create a file named "lexicon name.inc.php" in a folder named as full language name (russian-UTF8, english etc.): -``` - -``` -Parameters to load lexicons are: - -* langDir - lexicon folder path; -* lang - lexicon language (the "manager_language" configuration parameter value by default); -* lexicon - lexicon names, comma separated. Or specify an array of values right here: -``` -&lexicon=`{ - "english":{ - "test":"Test lexicon value", - "foo":"Another lexicon value", - "bar":"And one more value" - }, - "russian-UTF8":{ - "test":"Проверка", - "foo":"Еще проверка", - "bar":"И еще" - } -}` -``` - -After that you can use the [%key%] placeholders to output lexicon entries. EvoBabel lexicons are supported as well. diff --git "a/assets/snippets/FormLister/docs/examples/ru/001_\320\237\321\200\320\276\321\201\321\202\320\260\321\217_\321\204\320\276\321\200\320\274\320\260.md" "b/assets/snippets/FormLister/docs/examples/ru/001_\320\237\321\200\320\276\321\201\321\202\320\260\321\217_\321\204\320\276\321\200\320\274\320\260.md" deleted file mode 100755 index 55bbb1ca..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/001_\320\237\321\200\320\276\321\201\321\202\320\260\321\217_\321\204\320\276\321\200\320\274\320\260.md" +++ /dev/null @@ -1,91 +0,0 @@ -## Простая форма -``` -[!FormLister? -&formid=`basic` -&rules=` -{ - "name":{ - "required":"Обязательно введите имя", - "matches":{ - "params":"\/^[\\pL\\s\\-']++$\/uD", - "message":"Введите имя правильно" - } - }, - "email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" - }, - "phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" - }, - "message":{ - "required":"Обязательно введите сообщение", - "minLength":{ - "params":10, - "message":"Сообщение должно быть не менее 10 символов" - } - } -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - -
          - - [+name.error+] -
          -
          -
          - -
          - - [+email.error+] -
          -
          -
          - -
          - - [+phone.error+] -
          -
          - -
          - -
          - - [+message.error+] -
          -
          - [+form.messages+] -
          -
          - -
          -
          -
          -
          -
          -
          ` -&to=`test@test.com` -&ccSender=`1` -&ccSenderField=`email` -&ccSenderTpl=`@CODE:Спасибо за обращение, [+name.value+]` -&reportTpl=`@CODE: -

          Имя: [+name.value+]

          -

          Телефон: [+phone.value+]

          -

          Email: [+email.value+]

          -

          Сообщение: [+message:strip_tags:nl2br+]

          -` -&errorClass=` has-error` -&requiredClass=` has-warning` -&subject=`Новое сообщение` -&messagesOuterTpl=`@CODE:` -&errorTpl=`@CODE:[+message+]` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/002_\320\255\320\273\320\265\320\274\320\265\320\275\321\202\321\213_\321\203\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\321\217.md" "b/assets/snippets/FormLister/docs/examples/ru/002_\320\255\320\273\320\265\320\274\320\265\320\275\321\202\321\213_\321\203\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\321\217.md" deleted file mode 100755 index f3df8d9e..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/002_\320\255\320\273\320\265\320\274\320\265\320\275\321\202\321\213_\321\203\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\321\217.md" +++ /dev/null @@ -1,140 +0,0 @@ -## Форма с элементами управления -``` -[!FormLister? -&formid=`advanced` -&rules=`{ -"name":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email" -}, -"phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" -}, -"message":{ - "required":"Обращение не может быть пустым", - "minLength":{ - "params":100, - "message":"Должно быть не менее 100 символов" - } -}, -"agree":{ - "required":"Вы не можете отправить обращение, если не согласны с правилами" -}, -"products":{ - "minCount":{ - "params": 2, - "message": "Выберите минимум 2 продукта" - } -} -}` -&defaults=`{ -"topic":"Жалоба" -}` -&formControls=`topic,agree,department,products` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+name.error+] -
          -
          -
          -
          - - - [+email.error+] -
          -
          -
          -
          - - - [+phone.error+] -
          -
          -
          -
          - - -
          -
          - -
          -
          - - -
          -
          - -
          - -
          -
          - -
          -
          - -
          - [+products.error+] -
          -
          - - - [+message.error+] -
          -
          - - [+agree.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&to=`test@test.com` -&subjectTpl=`@CODE: [+topic.value+] в [+department.value+]` -&reportTpl=`@CODE: -

          Имя: [+name.value+]

          -

          Телефон: [+phone.value+]

          -

          Email: [+email.value+]

          -

          Продукты: [+products.value+]

          -

          Сообщение: [+message:strip_tags:nl2br+]

          -` -&errorClass=` has-error` -&requiredClass=` has-warning` -&subject=`Новое сообщение` -&messagesOuterTpl=`@CODE:` -&errorTpl=`@CODE:[+message+]` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/003_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\321\204\320\260\320\270\314\206\320\273\320\276\320\262.md" "b/assets/snippets/FormLister/docs/examples/ru/003_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\321\204\320\260\320\270\314\206\320\273\320\276\320\262.md" deleted file mode 100755 index 006527c2..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/003_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\321\204\320\260\320\270\314\206\320\273\320\276\320\262.md" +++ /dev/null @@ -1,118 +0,0 @@ -## Отправка файлов -``` -[!FormLister? -&formid=`basic` -&rules=`{ -"name":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"message":{ - "required":"Обязательно введите сообщение" -} -}` -&attachments=`first,second` -&attachFiles=`{"userfile":{"filepath":"assets/images/logo.png","filename":"logo.png"}}` -&fileRules=`{ -"first":{ - "required":"Приложите документ", - "allowed":{ - "params": [ ["doc","docx","pdf"] ], - "message": "Разрешены только документы Word и Pdf" - }, - "maxSize" : { - "params": 100, - "message": "Размер файла не должен превышать 100 кб" - } -}, -"second":{ - "required":"Приложите 2 картинки", - "maxSize" : { - "params": 1024, - "message": "Размер файла не должен превышать 1 мб" - }, - "allowed": { - "params": [ ["jpg","jpeg","png","gif"] ], - "message" : "Разрешены только картинки" - }, - "maxCount":{ - "params" : 4, - "message" : "Не больше 4 картинок" - }, - "minCount":{ - "params" : 2, - "message" : "Не меньше 2 картинок" - } -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - -
          - - [+name.error+] -
          -
          -
          - -
          - - [+email.error+] -
          -
          -
          - -
          - - [+message.error+] -
          -
          -
          - -
          - - [+first.error+] -
          -
          -
          - -
          - - [+second.error+] -
          -
          - [+form.messages+] -
          -
          - -
          -
          -
          -
          -
          -
          ` -&to=`test@test.com` -&reportTpl=`@CODE: -

          Имя: [+name.value+]

          -

          Email: [+email.value+]

          -

          Сообщение: [+message:strip_tags:nl2br+]

          -

          Документы:[+first.value+]

          -

          Картинки:[+second.value+]

          -

          Доп.:[+userfile.value+] -

          Вложения: [+attachments.value+]

          -` -&errorClass=` has-error` -&requiredClass=` has-warning` -&subject=`Новое сообщение` -&messagesOuterTpl=`@CODE:` -&errorTpl=`@CODE:[+message+]` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/004_\320\244\320\276\321\200\320\274\320\260_\321\201_\320\272\320\260\320\277\321\207\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/examples/ru/004_\320\244\320\276\321\200\320\274\320\260_\321\201_\320\272\320\260\320\277\321\207\320\265\320\270\314\206.md" deleted file mode 100755 index ccebc32a..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/004_\320\244\320\276\321\200\320\274\320\260_\321\201_\320\272\320\260\320\277\321\207\320\265\320\270\314\206.md" +++ /dev/null @@ -1,85 +0,0 @@ -## Форма с капчей -``` -[!FormLister? -&formid=`basic` -&rules=`{ -"name":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" -}, -"message":{ - "required":"Обязательно введите сообщение", - "minLength":{ - "params":100, - "message":"Сообщение должно быть не менее 100 символов" - } -} -}` -&captcha=`modxCaptcha` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - -
          - - [+name.error+] -
          -
          -
          - -
          - - [+email.error+] -
          -
          -
          - -
          - - [+phone.error+] -
          -
          - -
          - -
          - - [+message.error+] -
          -
          - [+form.messages+] -
          - -
          -
          Введите число
          - - [+vericode.error+] -
          -
          -
          -
          - -
          -
          -
          -
          -
          -
          ` -&errorClass=` has-error` -&requiredClass=` has-warning` -&subject=`Новое сообщение` -&messagesOuterTpl=`@CODE:` -&errorTpl=`@CODE:[+message+]` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/005_\320\222\321\213\320\262\320\276\320\264_\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\270\314\206.md" "b/assets/snippets/FormLister/docs/examples/ru/005_\320\222\321\213\320\262\320\276\320\264_\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\270\314\206.md" deleted file mode 100755 index 82c02997..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/005_\320\222\321\213\320\262\320\276\320\264_\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\270\314\206.md" +++ /dev/null @@ -1,74 +0,0 @@ -## Вывод сообщений -``` -[!FormLister? -&formid=`basic` -&rules=`{ -"name":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер телефона правильно" -}, -"message":{ - "required":"Обязательно введите сообщение", - "minLength":{ - "params":100, - "message":"Сообщение должно быть не менее 100 символов" - } -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - -
          - -
          -
          -
          - -
          - -
          -
          -
          - -
          - -
          -
          - -
          - -
          - -
          -
          - [+form.messages+] -
          -
          - -
          -
          -
          -
          -
          -
          ` -&messagesTpl=`@CODE:
          [+required+][+errors+][+messages+]
          ` -&messagesRequiredOuterTpl=`@CODE:
          Вы не заполнили обязательные поля
          [+messages+]
          ` -&messagesErrorOuterTpl=`@CODE:
          Некоторые поля заполнены неверно
          [+messages+]
          ` -&messagesOuterTpl=`@CODE:
          [+messages+]
          ` -&errorClass=` has-error` -&requiredClass=` has-warning` -&errorTpl=`@CODE:[+message+]` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/006_\320\224\320\262\320\260_\320\275\320\260\320\261\320\276\321\200\320\260_\320\277\320\276\320\273\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/examples/ru/006_\320\224\320\262\320\260_\320\275\320\260\320\261\320\276\321\200\320\260_\320\277\320\276\320\273\320\265\320\270\314\206.md" deleted file mode 100755 index 73a7ab63..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/006_\320\224\320\262\320\260_\320\275\320\260\320\261\320\276\321\200\320\260_\320\277\320\276\320\273\320\265\320\270\314\206.md" +++ /dev/null @@ -1,148 +0,0 @@ -## Два набора полей -В зависимости от значения поля type используются разные правила валидации и шаблоны письма. - -### Вызов FormLister -``` -[!FormLister? -&formid=`basic` -&rules=`{ -"name":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" -} -}` -&entRules=`{ -"entname":{ - "required":"Обязательно введите имя" -}, -"entemail":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"entphone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" -}, -"entaddress":{ - "required":"Обязательно введите адрес" -} -}` -&formControls=`type` -&defaults=`{"type":"Физическое лицо"}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - -
          -

          Заполняется только физлицами

          -
          - - - - [+name.error+] - -
          -
          -
          -
          - - - - [+email.error+] - -
          -
          -
          -
          - - - - [+phone.error+] - -
          -
          -
          -

          Заполняется только юрлицами

          -
          - - - [+entname.error+] - -
          -
          -
          -
          - - - [+entemail.error+] -
          -
          -
          -
          - - - [+entphone.error+] -
          -
          -
          -
          - - - [+entaddress.error+] - -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&to=`test@test.com` -&subjectTpl=`@CODE:[+type.value+]` -&reportTpl=`@CODE: -

          Имя: [+name.value+]

          -

          Телефон: [+phone.value+]

          -

          Email: [+email.value+]

          -` -&reportEntTpl=`@CODE: -

          Название предприятия: [+entname.value+]

          -

          Телефон: [+entphone.value+]

          -

          Email: [+entemail.value+]

          -

          Юридический адрес: [+entaddress.value+]

          -` -&prepare=`typeSelector` -&errorClass=` has-error` -&requiredClass=` has-warning` -&messagesOuterTpl=`@CODE:` -&errorTpl=`@CODE:[+message+]` -!] -``` -### Prepare-сниппет typeSelector -``` -if ($FormLister->getField('type') == 'Юридическое лицо') { - $FormLister->config->setConfig(array( - 'rules'=>$FormLister->getCFGDef('entRules'), - 'reportTpl'=>$FormLister->getCFGDef('reportEntTpl') - )); -} else { - $FormLister->setField('type','Физическое лицо'); -} -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/007_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/assets/snippets/FormLister/docs/examples/ru/007_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" deleted file mode 100755 index 00010188..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/007_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" +++ /dev/null @@ -1,48 +0,0 @@ -## Авторизация -``` -[!FormLister? -&formid=`login` -&controller=`Login` -&loginField=`email` -&rules=`{ -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"password":{ - "required":"Обязательно введите пароль" -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+email.error+] -
          -
          - - - [+password.error+] -
          - [+form.messages+] -
          - -
          - -
          -
          -
          -
          ` -&messagesOuterTpl=`@CODE:` -&skipTpl=`@CODE:
          Вы уже авторизованы.
          ` -&successTpl=`@CODE:
          Привет, [+fullname+]!
          ` -&errorTpl=`@CODE:[+message+]` -&errorClass=` has-error` -&requiredClass=` has-warning` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/008_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217.md" "b/assets/snippets/FormLister/docs/examples/ru/008_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217.md" deleted file mode 100755 index 45611089..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/008_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217.md" +++ /dev/null @@ -1,98 +0,0 @@ -## Регистрация пользователей - -При регистрации пользователь добавляется в группу opt. Отправляется два письма - менеджеру и пользователю. Пользователь должен подтвердить регистрацию, перейдя по ссылке из письма (см. Активация учетных записей). - -``` -[!FormLister? -&formid=`register` -&controller=`Register` -&userGroups=`opt` -&checkActivation=`1` -&activateTo=`1514` -&rules=`{ -"fullname":{ - "required":"Обязательно введите имя" -}, -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -}, -"password":{ - "required":"Обязательно введите пароль", - "minLength":{ - "params":6, - "message":"В пароле должно быть больше 6 символов" - } -}, -"repeatPassword":{ - "required":"Повторите пароль", - "equals":{ - "message":"Пароли не совпадают" - } -}, -"agree":{ - "required":"Для регистрации вы должны принять правила" -} -}` -&allowedFields=`fullname` -&formControls=`agree` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+fullname.error+] -
          -
          - - - [+email.error+] -
          -
          -
          -
          - - - [+password.error+] -
          -
          -
          -
          - - - [+repeatPassword.error+] -
          -
          -
          -
          - - [+agree.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&to=`info@sitename.ru` -&reportTpl=`@CODE:Новый пользователь [+fullname.value+] ([+id.value+])` -&ccSender=`1` -&ccSenderField=`email` -&ccSenderTpl=`@CODE:Привет [+fullname.value+]. Для активации учетной записи нужно перейти по ссылке [+activate.url+]` -&subject=`Регистрация на сайте [(site_name)]` -&messagesOuterTpl=`@CODE:` -&successTpl=`@CODE:
          Поздравляем с успешной регистрацией, [+fullname.value+]! После активации вы можете авторизоваться на сайте. Если вы не получили письмо для активации учетной записи, запросите его еще раз.
          ` -&errorTpl=`@CODE:[+message+]` -&errorClass=` has-error` -&requiredClass=` has-warning` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/009_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\320\276\320\270\314\206_\320\267\320\260\320\277\320\270\321\201\320\270.md" "b/assets/snippets/FormLister/docs/examples/ru/009_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\320\276\320\270\314\206_\320\267\320\260\320\277\320\270\321\201\320\270.md" deleted file mode 100644 index 4b5d8555..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/009_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\320\276\320\270\314\206_\320\267\320\260\320\277\320\270\321\201\320\270.md" +++ /dev/null @@ -1,42 +0,0 @@ -## Активация учетной записи -``` -[!FormLister? -&controller=`Activate` -&formid=`activate` -&protectSubmit=`0` -&rules=`{ -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+email.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&messagesOuterTpl=`@CODE:` -&successTpl=`@CODE:
          На указанный вами при регистрации email отправлено письмо с дальнейшими инструкциями!
          ` -&subject=`Активация учетной записи` -&reportTpl=`@CODE:

          Для активации учетной записи перейдите по ссылке [+activate.url+]

          ` -&activateReportTpl=`@CODE:

          Здравствуйте, [+fullname.value+]!

          Ваша учетная запись успешно активирована.

          ` -&activateSuccessTpl=`@CODE:
          Ваша учетная запись успешно активирована!
          ` -&errorTpl=`@CODE:[+message+]` -&errorClass=` has-error` -&requiredClass=` has-warning` -!] -``` diff --git "a/assets/snippets/FormLister/docs/examples/ru/010_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/examples/ru/010_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206.md" deleted file mode 100644 index 27d4a54f..00000000 --- "a/assets/snippets/FormLister/docs/examples/ru/010_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206.md" +++ /dev/null @@ -1,131 +0,0 @@ -## Восстановление паролей -### Вариант 1 -Пароль генерируется автоматически и отправляется в письме. -``` -[!FormLister? -&controller=`Reminder` -&formid=`remind` -&rules=`{ -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+email.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&messagesOuterTpl=`@CODE:` -&successTpl=`@CODE:
          На указанный вами при регистрации email отправлено письмо с дальнейшими инструкциями!
          ` -&subject=`Восстановление пароля` -&resetTo=`38` -&reportTpl=`@CODE:

          Для восстановления пароля перейдите по ссылке [+reset.url+]

          ` -&resetReportTpl=`@CODE:

          Здравствуйте, [+fullname.value+]!

          Ваш новый пароль: [+newpassword+]

          ` -&resetSuccessTpl=`@CODE:
          На указанный вами при регистрации email отправлено письмо с новым паролем!
          ` -&errorTpl=`@CODE:[+message+]` -&errorClass=` has-error` -&requiredClass=` has-warning` -!] -``` - -### Вариант 2 -Пользователь вводит новый пароль. -``` -[!FormLister? -&controller=`Reminder` -&formid=`remind` -&rules=`{ -"email":{ - "required":"Обязательно введите email", - "email":"Введите email правильно" -} -}` -&resetRules=`{ -"password":{ - "required":"Обязательно введите пароль", - "minLength":{ - "params":6, - "message":"В пароле должно быть больше 6 символов" - } -}, -"repeatPassword":{ - "required":"Повторите пароль", - "equals":{ - "message":"Пароли не совпадают" - } -} -}` -&formTpl=`@CODE: -
          -
          -
          -
          - -
          - - - [+email.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          ` -&resetTpl=`@CODE: -
          -
          -
          -
          - - - -
          - - - [+password.error+] -
          -
          - - - [+repeatPassword.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -
          -
          -` -&uidName=`uid` -&messagesOuterTpl=`@CODE:` -&successTpl=`@CODE:
          На указанный вами при регистрации email отправлено письмо с дальнейшими инструкциями!
          ` -&subject=`Восстановление пароля` -&reportTpl=`@CODE:

          Для восстановления пароля перейдите по ссылке [+reset.url+]

          ` -&resetReportTpl=`@CODE:

          Здравствуйте, [+fullname.value+]!

          Ваш новый пароль: [+newpassword+]

          ` -&resetSuccessTpl=`@CODE:Готово!` -&resetTo=`12` -&errorTpl=`@CODE:[+message+]` -&errorClass=` has-error` -&requiredClass=` has-warning` -!] -``` diff --git a/assets/snippets/FormLister/docs/history.md b/assets/snippets/FormLister/docs/history.md deleted file mode 100755 index 1791a2f0..00000000 --- a/assets/snippets/FormLister/docs/history.md +++ /dev/null @@ -1,191 +0,0 @@ -## History -### 1.7.18 -* [Enhancement] Dutch, Polish, English-Britain, German lexicons. -* [Refactor] Экранирование значений массива до преобразования массива в строку в методе fieldsToPlaceholders - -### 1.7.17 -* [Refactor] Мультибайтовые функции. - -### 1.7.16 -* [Fix] Ошибка с полями username и email при их отсутствии (Profile). -* [Enhancement] В метод getField можно передать значение по умолчанию (Core). -* [Refactor] Оптимизация обработки чанков (Core). - -### 1.7.15 -* [Enhancement] Отдельные настройки почты для писем ccSender и automessage в параметрах ccMailConfig и autoMailConfig (Form). -* [Refactor] Проверка типа входящих данных (Validator). -* [Refactor] Изменен метод renderForm (Core). -* [Enhancement] Параметр apiFormat для формата вывода данных (json или просто массив) (Core). -* [Fix] В валидаторе файлов неправильно обрабатывалась ситуация, когда файлы отправляются одним массивом из нескольких полей (Form). -* [Enhancement] Разлогинивание удаленных и заблокированных пользователей (userHelper). - -### 1.7.14 -* [Refactor] Упрощение параметра parseMailerParams. - -### 1.7.13 -* [Enhancement] Параметр parseMailerParams для обработки плейсхолдеров в параметрах отправки почты, по умолчанию отключен (Form). -* [Fix] Некорректная загрузка пользовательских лексиконов из файлов (Core, Lexicon). -* [Fix] Параметр debug со значением 0 не отключал отладку (Core). - -### 1.7.12 -* [Enhancement] Возможность указывать имя параметра с id пользователя в ссылках (Reminder, Activate). -* [Refactor] Имя пользователя и E-mail принудительно приводятся в нижний регистр (Login, Register, Profile). -* [Fix] Неверное значение по умолчанию параметра resetTo (Reminder). -* [Fix] Неверное значение по умолчанию параметра activateTo (Activate). -* [Fix] Ошибка при расчете хэша для активации учетной записи (Register, Activate). - -### 1.7.11 -* [Fix] Предупреждения в PHP 7 (Core). -* [Enhancement] Вывод сообщений в лог при проблемах с параметрами rules, fileRules и contentFields (Core, Content). -* [Refactor] Обработка языковых плейсхолдеров в сообщениях (Core). -* [Enhancement] Из prepare-сниппетов можно возвращать массив значений полей, который будет передан в метод setFields (Core). - -### 1.7.10 -* [Enhancement] Возможность использовать плейсхолдеры с данными пользователя в шаблоне skipTpl (Login, Activate, Register, Reminder). -* [Fix] Неверное определение страницы для редиректа (Login). - -### 1.7.9 -* [Fix] Исправления ошибок. - -### 1.7.8 -* [Refactor] Переименованы файлы документации. -* [Refactor] Параметр removeEmptyPlaceholders по умолчанию включен (Core). -* [Refactor] Параметр rewriteUrls по умолчанию включен (Core). -* [Refactor] Плейсхолдеры ошибок [+field.error+] не устанавливаются, если нет сообщения об ошибке (Core). -* [Enhancement] Плейсхолдеры [+field.class+] (включает class="") и [+field.classname+] (не включает class="") (Core). -* [Refactor] Параметр lexicon может содержать или имена файлов (без расширения) через запятую или массив с языковыми строками (Lexicon). - -### 1.7.7 -* [Enhancement] Возможность указывать разный subject для разных типов писем (Form). - -### 1.7.6 -* [Fix] Исправления ошибок. - -### 1.7.5 -* [Fix] $this->modx вместо $modx в сниппете. - -### 1.7.4 -* [Fix] Ошибка в лексиконе (Form). -* [Refactor] Версии PHP ниже 5.6 не поддерживаются (Core). - -### 1.7.3 -* [Refactor] Подключать __autoload.php, если не задан другой загрузчик. -* [Fix] Ошибка в обработке параметра редиректа (Core). - -### 1.7.2 -* [Enhancement] Параметр &context в контроллере Login для поддержки модели modManagers (Login). -* [Fix] Ошибка в обработке параметра редиректа (Core). - -### 1.7.1 -* [Enhancement] Сниппет записывает в лог, если не задан параметр formid или не удалось загрузить класс контроллера. -* [Refactor] Плагин userHelper по умолчанию отключен. -* [Refactor] По умолчанию загружается лексикон english. -* [Fix] Ошибка в формате даты для лексикона english/form. - -### 1.7.0 -* [Refactor] Изменен метод loadModel, добавлена возможность указывать параметры, передаваемые в конструктор модели (Core). -* [Fix] Ошибка в лексиконе контроллера DeleteContent. -* [Fix] Создание записей анонимными пользователями если &onlyUsers=`0` (Content). -* [Refactor] Убраны include/require, для загрузки классов подключается файл assets/snippets/FormLister/__autoload.php. Модели MODxAPI загружаются этим же загрузчиком. -* [Refactor] Создание записи в логе, если не удалось сохранить данные (Content). -* [Refactor] Изменена обработка поля для запоминания авторизации: теперь время для автологина задается в параметре cookieLifetime (по умолчанию 5 лет, в секундах), а не значением поля (Login). -* [Refactor] Имя куки для автологина можно задать с помощью параметра cookieName, по умолчанию WebLoginPE (Login). -* [Refactor] В контроллере Login сначала проверяется, активирована ли учетная запись, а потом уже возможность авторизации (Login). -* [Enhancement] Блокировка пользователей после определенного числа неудачных попыток авторизации в плагине userHelper. - -### 1.6.2 -* [Fix] Неверное объявление метода в классах капчи. - -### 1.6.1 -* [Refactor] Переделан автологин в плагине userHelper. - -### 1.6.0 -* [Enhancement] Параметр rewriteUrls для обработки ссылок в шаблонах. Игнорируется, если задан параметр parseDocumentSource (Core). -* [Enhancement] Если страница с вызовом контроллера Login указана в конфигурации, как страница "Доступ запрещен", то после успешной авторизации будет произведен редирект на запрашиваемую страницу (Login). -* [Enhancement] Новый параметр ignoreMailerResult (Form). -* [Fix] Неправильная проверка уникальности username в контроллере Profile. -* [Refactor] Для добавления пользователей в группы используется метод из modUsers (Register). -* [Refactor] Введенный пользователем пароль сохраняется в поле user.password (Register). -* [Refactor] Контроллеры Register, Profile и Content загружают данные из моделей после успешного выполнения; после этого можно выполнить сниппеты из параметра preparePostProcess. Сделано это потому что плагины на сохранение или сами модели могут менять данные. -* [Enhancement] Восстановление данных, испорченных в protect.inc.php. Если параметр removeGpc равен 1, то очищены будут все входящие поля. Можно указать в параметре имена полей через запятую. При выводе обработанных полей будут экранироваться тэги MODX (Core). -* [Refactor] В prepare-сниппеты передается переменная name с названием параметра в котором задан сниппет. Можно использовать один сниппет для всех случаев (Core). -* [Enhancement] Контроллер DeleteUser для удаления пользователей c запросом пароля. -* [Enhancement] Контроллер DeleteContent для удаления записей MODxAPI. -* [Enhancement] Контроллер Activate для активации учетных записей. -* [Enhancement] Контроллеры Register и Login могут работать с активацией учетных записей. -* [Enhancement] Вывод параметров data-badge и data-callback для рекапчи (ReCaptchaWrapper). -* [Enhancement] Параметр deleteAttachments для удаления файлов после отправки письма (Form). -* [Enhancement] Сохранение имен файлов в поля формы (Form). -* [Enhancement] Отправка файлов не из формы. Список файлов задается массивом в параметре attachFiles: {"field":{"filepath":"assets/images/logo.png","filename":"logo.png"}} (Form). -* [Refactor] Можно не задавать параметр contentFields, в этом случае в модель будут переданы поля формы (Content). -* [Refactor] Корректная обработка полей lastlogin и thislogin в плагине userHelper. -* [Fix] Неверно выбирался шаблон при восстановлении паролей (Reminder). -* [Enhancement] Дополнительная обработка чанков парсером MODX c помощью параметра parseDocumentSource (Core). -* [Enhancement] Возможность вырезать необработанные плейсхолдеры из чанков с помощью параметра removeEmptyPlaceholders (Core). -* [Enhancement] Параметр removeEmptyPlaceholders для удаления необработанных плейсхолдеров из чанков (возможные значения 0,1; по умолчанию - 0) (Core). -* [Fix] Из-за неправильной обработки параметра defaultsSources не загружались поля в контроллере Profile (Core). -* [Fix] Метод filterFields не учитывал значение параметра allowEmptyFields (Core). - -### 1.5.1 -Исправления ошибок. - -###1.5.0 -* [Refactor] Переделана загрузка внешних параметров с учетом того, что не все источники могут содержать массив: добавлен источник aplh для загрузки массива значений из плейсхолдера MODX, в источнике cookie можно указать несколько имен кук через запятую. Добавлен источник user для загрузки данных авторизованного веб-пользователя (user:web) или менеджера (user:mgr) (Core). Добавлен источник document для загрузки данных текущего или указанного документа. -* [Refactor] Валидация капчи вынесена в класс капчи (Core). -* [Refactor] Параметры капчи задаются массивом, там же указываются сообщения об ошибках (Core). -* [Refactor] Валидация капчи происходит в классе капчи. (Core). -* [Enhancement] reCaptcha2. -* [Enhancement] smsCaptcha. -* [Enhancement] Поддержка Twig: в шаблон передаются переменные FormLister, data, errors, messages. Добавлен метод getErrorMessage для получения в шаблоне сообщений об ошибках для указанного поля (Core). -* [Enhancement] Параметры редиректа можно задавать в виде массива с ключами page (id страницы), query (массив параметров запроса) и header (заголовок) (Core). -* [Enhancement] Если задан параметр redirectTo и параметр editAfterCreate равен 1, то в параметры редиректа будет добавлен идентификатор созданного документа (Core, Content). -* [Fix] Плагин userHelper теперь перенаправляет пользователя на текущую страницу без ?logout в ссылке. -* [Fix] Сопоставление имен полей формы и модели в параметре contentFields неправильно работало в режиме редактирования, если имена различались (Content). -* [Refactor] Пользовательские функции валидации могут вместо false возвращать сообщение об ошибке (Core). - -### 1.4.1 -* [Refactor] Больше рандома в modxCaptcha. - -### 1.4.0 -* [Refactor] Класс modxCaptchaWrapper больше не привязан к FormLister (Core, modxCaptchaWrapper). -* [Enhancement] Убрано принудительное отключение параметров submitLimit и protectSubmit (Content). -* [Refactor] Изменен алгоритм загрузки пользовательских лексиконов. Теперь в параметре lexicon можно указывать как имя файла, так и сразу массив c языковыми записями (Core, Lexicon). -* [Refactor] Загрузка полей отправленной формы происходит не из $_REQUEST, а согласно параметру formMethod (значение по умолчанию - 'post') (Core). -* [Enhancement] Метод loadArray можно использовать для обработки строк с разделителем (по умолчанию - ',') (Config). -* [Enhancement] Если значение параметра submitLimit меньше 60, то оно не пересчитывается в минуты (Form). - -### 1.3.0 -* [Enhancement] Поддержка события OnBeforeWebLogin. В плагине можно реализовать процедуру авторизации независимую от модели; установку полей и шаблона сообщения об успешной авторизации нужно также производить в плагине. Плагин должен вернуть true в случае успешной авторизации, иначе будет выполнена авторизация методами модели (Login). - -### 1.2.1 -* [Refactor] Метод isArray теперь protected (FileValidator). - -### 1.2.0 -* [Refactor] Переделан пропуск полей при преобразовании в плейсхолдеры. Теперь плейсхолдеры отделены от полей формы, для работы с ними следует использовать методы setPlaceholder и getPlaceholder. Выводятся через [+placeholder+]. -* [Bug] Сниппеты, указанные в prepareProcess, выполнялись независимо от результатов валидации. -* [Refactor] Изменена логика обработки правил валидации. Теперь все правила, которых нет в валидаторе, обрабатываются как custom. Это позволяет применять сразу несколько таких правил. -* [Enhancement] Возможность применять правила валидации только для заполненных полей. -* [Refactor] Информация о файлах размещается в массиве formData c помощью метода setFiles (Core, Form). -* [Refactor] Объект FS теперь публичный. -* [Refactor] Контроллер Profile наследуется от Form, а не от Core. - -### 1.1.0 -* [Refactor] Метод filesToArray перемещен в Core. -* [Enhancement] Возможность загрузки произвольных моделей в контроллерах, которые используют MODxAPI. Новые параметры - model и modelPath. -* [Refactor] Метод для загрузки моделей MODxAPI. -* [Enhancement] Возможность загружать произвольные модели MODxAPI в контроллерах. -* [Enhancement] Новое правило валидации - date, проверяет является ли значение поля датой в указанном формате (Validator). -* [Enhancement] Возможность пропускать поля при преобразовании в плейсхолдеры (Core). - -### 1.0.2 -* [Enhancement] Убрано значение по умолчанию свойства allowedFields в контроллерах Register и Profile. - -### 1.0.1 -* [Enhancement] Новое правило валидации файлов - optional, аналог правила required но выполняется также, если файл не загружен пользователем (FileValidator). -* [Enhancement] Правила валидации файлов allowed, minSize, sizeBetween считаются выполненными, если файл не загружен пользователем (код ошибки 4). Решает проблему с файловыми полями, для которых не задано правило required (FileValidator). -* [Bug] К письму прикреплялись не загруженные пользователем файлы, теперь прикрепляются только успешно загруженные (код ошибки 0) (Form). -* [Fix] Параметры из файлов перезаписывали параметры сниппета (Core). -* [Bug] Конфиг из файла не добавлялся в общий массив настроек (Helpers/Config). - -### 1.0.0 -Public release. diff --git "a/assets/snippets/FormLister/docs/ru/010_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213.md" "b/assets/snippets/FormLister/docs/ru/010_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213.md" deleted file mode 100755 index e566b9da..00000000 --- "a/assets/snippets/FormLister/docs/ru/010_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213.md" +++ /dev/null @@ -1,50 +0,0 @@ -## Контроллеры -Контроллер представляет собой класс, унаследованный от базового класса \FormLister\Core, который реализует: - -- загрузку классов для валидации и генерации капчи; -- работу с данными (под данными здесь и далее подразумеваются значения свойства formData, то есть не только значения массива $_REQUEST); -- работу с шаблоном формы и шаблоном успешной обработки. - -Схема работы: - -1. Загрузка данных из формы -2. Загрузка данных из внешних источников -3. Вызов сниппетов для обработки данных. -4. Валидация данных - если получены данные из формы; -3. Вызов сниппетов для обработки данных. -6. Итоговая обработка - если получены данные из формы и пройдена валидация. -7. Вывод. - -Итоговая обработка формы происходит в методе process() контроллера. После успешной обработки необходимо установить флаг результа обработки формы с помощью метода setFormStatus(), а также и указать в свойстве renderTpl шаблон для вывода информации с результатами обработки. - -Ниже перечислены базовые контроллеры. - -### Контроллер Form -Отправляет письма с данными формы. - -### Контроллер Login -Авторизует пользователя в контексте web. - -### Контроллер Register -Создает web-пользователя и отправляет соответствующие письма. - -### Контроллер Activate -Обрабатывает ссылку из письма с подтверждением регистрации или отправляет такое письмо. - -### Контроллер DeleteUser -Позволяет пользователям удалять свои учетные записи. Для подтверждения запрашивает пароль. - -### Контроллер Profile -Предназначен для редактирования данных web-пользователя. - -### Контроллер Reminder -Предназначен для восстановления паролей web-пользователями. - -### Контроллер Content -Позволяет создавать и изменять записи с помощью классов MODxAPI. - -### Контроллер DeleteContent -Позволяет пользователям удалять созданные ими записи. - -### Контроллер MailChimp -Добавляет пользователей в список рассылки сервиса MailChimp. Добавлен как пример расширения базового класса \FormLister\Core. diff --git "a/assets/snippets/FormLister/docs/ru/020_\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.md" "b/assets/snippets/FormLister/docs/ru/020_\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.md" deleted file mode 100755 index 19d7add8..00000000 --- "a/assets/snippets/FormLister/docs/ru/020_\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.md" +++ /dev/null @@ -1,298 +0,0 @@ -## Общие параметры - -Эти параметры обрабатываются базовым классом FormLister. В контроллерах некоторые общие параметры могут иметь другое назначение. - -## Настройки -### controller -Задает класс для обработки данных. - -Возможные значения - имя php-файла с классом без расширения. - -Значение по умолчанию - Form. - -### dir -Папка в которой находится класс контроллера. - -Значение по умолчанию - assets/snippets/FormLister/core/controller/ - -### formid -Имя формы, обязательный параметр. - -В шаблоне формы обязательно должно быть скрытое поле с именем formid и значением, указанным в параметре. Форма считается отправленной, если в массиве $_REQUEST присутствует ключ с именем параметра, а его значение соответствует значению параметра. - -### formMethod -Возможные значения - post, get или request. - -Значение по умолчанию - post. - -### config -Загрузка параметров в формате json из файла. - -Возможные значения - имяфайла:папка, несколько значений разделяются точкой с запятой. - -#### Пример -myparams:core - загрузить параметры из файла assets/snippets/FormLister/config/core/myparams.json; myparams - загрузить параметры из файла assets/snippets/FormLister/config/custom/myparams.json; myparams:/assets/myfolder - загрузить параметры из файла assets/myfolder/myparams.json. - -Значение по умолчанию - пусто. - -### api -Определяет, в каком виде будут выводиться данные. - -Возможные значения: - -- 0: только html; -- 1: json-массив с данными формы; -- 2: json-массив с данными формы и html. - -### apiFormat -Формат вывода данных для api-режимов. - -Возможные значения - json, array. - -Значение по умолчанию - json. - -### debug -Режим отладки. Вывод записывается в лог MODX. - -Возможные значения - 0, 1. - -Значение по умолчанию - 0. - -### saveObject -Сохраняет объект класса FormLister в плейсхолдер, который можно использовать в других сниппетах. Объект сохраняется только при успешной обработке формы. - -Возможные значения - имя плейсхолдера. - -Значение по умолчанию - пусто. - -### removeGpc -Убирает экранирование данных, которое выполняет MODX для символов {{, [[ и т.д. При этом экранируются тэги MODX при выводе. - -Возножные значения - 0, 1 или имена полей через запятую. - -Значение по умолчанию - 0. - -## Источники данных -### defaultsSources -Позволяет загружать дополнительные данные из внешних источников, например, для предварительного заполнения полей формы. По умолчанию внешние данные загружаются только при начальном выводе формы и не загружаются после отправки формы Это поведение может быть изменено с помощью параметра keepDefaults. - -Возможные значения: список источников, разделенных точкой с запятой. Загрузка данных производится в том порядке, в котором они указаны в списке. - -Источник может задаваться в формате "имя:ключ:префикс". Префикс, если указан, добавляется c точкой к имени поля - например, config.site_name. - -Возможные значения: - -- array: json или php-массив, значения задаются параметром defaults; -- param:имя параметра:префикс - значения задаются значением параметра из вызова сниппета (аналогично array, только значение задается не параметром defaults, а произвольным, также можно указать префикс); -- session:ключ массива:префикс - значения загружаются из массива $_SESSION; -- plh:ключи через запятую:префикс - загружаются значения из массива $modx->placeholders; -- aplh:имя плейсхолдера:префикс - загружаются значения из плейсхолдера, содержащего массив; -- config:префикс - загружаются значения из конфигурации MODX; -- cookie:ключи через запятую:префикс - загружаются значения из массива $_COOKIE; -- имя класса MODxAPI:ключ:префикс - ключ является аргументом метода edit(), класс должен быть заранее загружен; -- document:префикс - загружает данные из модели modResource для документа, в котором вызван сниппет. Ключ не указывается; -- user:ключ:префикс - загружает данные из модели modUsers для авторизованного пользователя. Тип пользователя уточняется в ключе (web или mgr). - -Значение по умолчанию - array. - -### defaults -Данные для источника array. - -Возможные значения: массив значений по умолчанию, в формате json или php. - -### keepDefaults -Позволяет повторно загружать данные из внешних источников после отправки формы. Если в параметре указан список полей, то загружены будут только указанные поля. - -Возможные значения: 1, 0, имена полей, разделенные запятой. - -Значение по умолчанию - 0. - -### allowEmptyFields -Разрешает задавать поля с пустыми значениями. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 1. - -## Элементы управления -### formControls -Список полей с управляющими элементами формы (списки, чекбоксы, радио-кнопки). Необходимо для отслеживания состояния элементов. - -Возможные значения - имена полей, разделенные запятой. - -Значение по умолчанию - пусто. - -### emptyFormControls - -Этот параметр позволяет решить проблему неотмеченных чекбоксов, которые не включаются в массив полей при отправке формы: если в $_REQUEST отсутствует нужный элемент, то он создается согласно данному параметру. Необходимость в таком параметре возникла в связи с тем, что MODxAPI требует явно указывать изменяемые поля в методе fromArray(). Но можно использовать и в обычных формах, чтобы подставить в шаблон значение неотмеченного чекбокса. - -Возможные значения - массив: -``` -&emptyFormControls=`{ - "mycheckbox" : "Нет", - "published" : 0 -}` -``` - -## Обработка данных -### prepare, prepareProcess, prepareAfterProcess -Аналогично параметру prepare в DocLister. - -Сниппеты из параметра prepare выполняются после загрузки данных в форму, сниппеты из параметра prepareProcess - после прохождения валидации, сниппеты из параметра prepareAfterProcess - после успешного выполнения обработки. В сниппетах через переменную $FormLister доступен объект контроллера, а через массив $data - значения полей формы. Также доступна переменная $name, которая задержит имя параметра из которого взят сниппет (prepare, prepareProcess и т.д.); это позволяет использовать один и тот же сниппет для разных случаев. Для изменения данных следует использовать в prepare-сниппетах методы контроллера (setField, setFields и т.д.) - -Возможные значения - имена сниппетов, анонимные функции, статические методы загруженных классов. - -Значение по умолчанию - пусто. - -## Валидация -### validator -Имя класса для валидации данных. Класс должен быть предварительно загружен. - -Значение по умолчанию - \FormLister\Validator. - -### rules -Массив с правилами валидации. - -Значение по умолчанию - пусто. - -## Шаблоны -### formTpl -Шаблон формы. В шаблоне формы обязательно должно быть поле с именем formid и значением, указанным в параметре formid. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### arraySplitter - -Разделитель для преобразования массивов в строку. - -Значение по умолчанию - точка с запятой. - -### {field}.arraySplitter -Разделитель для преобразования массивов в строку, но для отдельного поля {field}. Например: groups.arraySplitter - разделитель для массива из поля groups. - -Если не задано, то используется значение параметра arraySplitter. - -### errorTpl -Шаблон для вывода сообщений валидатора. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию: -``` -@CODE:
          [+message+]
          -``` - -### requiredClass, errorClass -Имена классов для обозначения незаполненных (required) и неверно заполенных (error) полей. - -Значение по умолчанию - required и error соответственно. - -### {field}.requiredClass, {field}.errorClass -Позволяет задавать указанные выше классы для конкретных полей. - -По умолчанию используются значения параметров requiredClass и errorClass. - -### messagesTpl -Шаблон сообщений обработчика формы. В шаблоне выводятся группы сообщений (messages, required, error). - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию: -``` -@CODE:
          [+messages+]
          -``` - -### messagesOuterTpl -Шаблон-обертка для группы произвольных сообщений. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - -``` -@CODE: [+messages+] -``` - -### messagesRequiredOuterTpl -Шаблон-обертка для группы сообщений о незаполненных полях. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию: -``` -@CODE: [+messages+] -``` - -### messagesErrorOuterTpl -Шаблон-обертка для группы сообщений о неверно заполненных полях. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию: -``` -@CODE: [+messages+] -``` - -### messagesSplitter, messagesRequiredSplitter, messagesErrorSplitter -Разделитель сообщений в группе. - -Возможные значения - произвольная строка. - -Значение по умолчанию: -``` -
          -``` - -### removeEmptyPlaceholders -Удаляет из шаблонов незаполненные прейслхолдеры. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 1. - -### parseDocumentSource -Обрабатывает чанки MODX-парсером. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 0. - -### rewriteUrls -Если параметр parseDocumentSource отключен, то парсит ссылки в шаблонах. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 0. - -### skipPrerender -Позволяет отключить предварительную обработку полей формы (экранирование значений, преобразование массивов в строки, установка сообщений об ошибках). Можно включить, если для вывода не используется парсер MODX. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 0. - -### templatePath, templateExtension -Путь к папке с файлами шаблонов и расширение файлов шаблонов. Эти параметры необходимо задавать при использовании плагина EvoTwig. - -Значение по умолчанию - пусто. - -## Перенаправление после обработки -### redirectTo -Id страницы, на которую нужно выполнить перенаправление после успешной обработки формы. В api-режиме перенаправление не выполняется, но в массиве данных формы сохраняется абсолютная ссылка на целевую страницу (поле "redirectTo"). - -Вместо числа можно указывать массив: -``` -&redirectTo=`{ - "page":10, - "query":{ - "foo":"bar" - }, - "header":"HTTP/1.1 307 Temporary Redirect" -}` -``` -Ключ page задает id станицы, в массиве query можно передать дополнительные get-параметры, значением ключа header может быть текст заголовка для перенаправления. - -Возможные значения - число или массив. - -Значение по умолчанию - пусто. diff --git "a/assets/snippets/FormLister/docs/ru/030_\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\321\217_\320\264\320\260\320\275\320\275\321\213\321\205.md" "b/assets/snippets/FormLister/docs/ru/030_\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\321\217_\320\264\320\260\320\275\320\275\321\213\321\205.md" deleted file mode 100755 index 9efb7da8..00000000 --- "a/assets/snippets/FormLister/docs/ru/030_\320\222\320\260\320\273\320\270\320\264\320\260\321\206\320\270\321\217_\320\264\320\260\320\275\320\275\321\213\321\205.md" +++ /dev/null @@ -1,132 +0,0 @@ -## Валидация данных - -При валидации данных валидатор последовательно применяет к значению поля заданные правила, при возникновении ошибки в массив данных об ошибках добавляется запись и дальнейшая обработка формы прекращается. - -Валидация считается пройденной, если в массиве данных об ошибках отсутствуют записи. - -### Правила валидации -Список правил задается в виде массива. Ключом является имя поля, а значением - массив правил валидации. Правило валидации является методом класса-валидатора. В массиве правил ключом является имя правила (название метода валидации), значением может быть либо строка с сообщением об ошибке валидации правила, или же массив с описанием. В этом массиве в ключе params задаются необходимые для валидации значения, а в ключе message задается строка с сообщением об ошибке. - -Можно также использовать отрицание правил, если добавить перед именем правила восклицательный знак: "!numeric" - поле пройдет валидацию, если его значение не является числом. - -Если нужно реализовать проверку только заполненных полей, то перед именем поля в списке правил нужно добавить восклицательный знак. В этом случае если значение поля пустое, правила будут проигнорированы. - -``` -{ - "имя поля 1": { - "правило 1" : "сообщение об ошибке", - "правило 2" : "сообщение об ошибке" - }, - "имя поля 2": { - "правило 1" : "сообщение об ошибке", - "правило 2" : { - "params" : значение, - "message" : "сообщение об ошибке" - } - }, - "!имя поля 3":{ - "правило 1" : "сообщение об ошибке" - } -} -``` -Стандартным классом валидации (\FormLister\Validator) предусмотрены правила: - -- required: поле заполнено; -- date: значение поля является датой в заданном формате; -- min: значение поля больше заданного или равно ему; -- max: значение поля меньше заданного или равно ему; -- greater: значение поля строго меньше заданного; -- less: значение поля строго больше заданного; -- between: значение поля входит в диапазон; -- equals: значение поля равно заданному; -- in: значение поля входит в заданный массив значений; -- alpha: значение поля содержит только буквы; -- numeric: значение поля содержит только цифры; -- alphaNumeric: значение поля содержит только буквы и цифры; -- slug: значение поля является частью url; -- decimal: значение поля является десятичным числом; -- phone: значение поля является номером телефона; -- matches: значение поля удовлетворяет регулярному выражению; -- url: значение поля является ссылкой; -- email: значение поля является email-адресом; -- length: длина значения поля равна заданному; -- minLength: длина значения поля больше заданного или равна ему; -- maxLength: длина значения поля меньше заданного или равна ему; -- lengthBetween: длина значения поля входит в диапазон; -- minCount: размер массива больше заданного; -- maxCount: размер массива меньше заданного; -- countBetween: размер массива входит в диапазон. - -Если требуется задать два значения для правила, то их следует задавать как массив: -``` -&rules=`{ - "field" : { - "lengthBetween" : { - "params" : [10,20], - "message" : "Длина должна быть от 10 до 20" - } - } -}` -``` - -Для правила in (и других правил, использующих массив) массив значений следует задавать следующим образом: -``` -&rules=`{ - "field" : { - "in" : { - "params" : [ [10,20,30] ], - "message" : "Значение поля field должно быть равно 10, 20 или 30" - } - } -}` -``` - -Это нужно, чтобы массив был передан в функцию одним аргументом. - -Предусмотрена также возможность использовать для валидации функции или статические методы загруженного класса: -``` -&rules=`{ - "myfield":{ - "required":"Required field", - "custom":{ - "function":"\\Namespace\\Classname::myCustomRule", - "params":[10,20,30], - "message":"Custom check failed" - } - } -}` -``` - -Метод должен принимать первым аргументом экземпляр контроллера из которого вызывается правило, вторым аргументом - значение проверяемого поля, далее - параметры передаваемые в ключе описания params: -``` -public static function myCustomRule($fl,$value,$a,$b,$c) { - $result = $fl->getField('field1') == $a && $fl->getField('field2') == $b && $value == $c; - return $result; -} -``` -В примере правило будет пройдено, если значение поля field1 = 10, значение поля field2 = 20, а значение поля, к которму применяется правило, = 30. - -Метод должен вернуть true, false или текст сообщения об ошибке (в этом случае можно не указывать message в списке правил). - -В примере используется название правила "сustom", но можно использовать любое название правила, которого нет в классе валидации. Таким образом можно использовать несколько правил данного типа. - -### Результаты валидации -Данные об ошибках хранятся в виде массива и могут быть получены вызовом метода getFormData('errors'): -``` -{ - "имя поля 1": { - "имя нарушенного правила" : "сообщение об ошибке" - }, - "имя поля 2": { - "имя нарушенного правила" : "сообщение об ошибке" - } -} -``` -Для добавления данных в этот массив используется метод addError(имя поля, имя правила, сообщение об ошибке). Таким образом, можно влиять на итоговый результат валидации, вручную добавляя записи в этот массив. Можно также объявить валидацию непройденной по умолчанию, вызвав метод setValid(false). - -В шаблонах результаты валидации для каждого поля выводятся с помощью плейсхолдера [+имя поля.error+]. Общий результат может быть выведен в плейсхолдер [+form.messages+], который задается шаблоном messagesTpl. В свою очередь, в этом шаблоне можно использовать плейсхолдеры: - -- [+required+] - сообщения о незаполенных полях; -- [+errors+] - сообщения о неверно заполненных полях. - -Получить сообщения об ошибках для определенного поля можно с помощью метода getErrorMessage(имя поля). diff --git "a/assets/snippets/FormLister/docs/ru/035_\320\230\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\260\320\277\321\207\320\270.md" "b/assets/snippets/FormLister/docs/ru/035_\320\230\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\260\320\277\321\207\320\270.md" deleted file mode 100755 index 99f61a25..00000000 --- "a/assets/snippets/FormLister/docs/ru/035_\320\230\321\201\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\320\275\320\270\320\265_\320\272\320\260\320\277\321\207\320\270.md" +++ /dev/null @@ -1,175 +0,0 @@ -## Использование капчи - -По умолчанию FormLister может использовать модицифированную капчу MODX и Google Recaptcha. Также в наличии SmsCaptcha - для отправки формы необходимо ввести код, полученный в смс-сообщении (отправку сообщения необходимо реализовывать отдельно). - -Для подключения необходимо указать имя папки с файлами капчи (папки находятся в assets/snippets/FormLister/lib/captcha/) в параметре &captcha. - -В параметре &captchaParams задаются в виде массива настройки капчи. Например: -``` -&captchaParams=`{ -"width":200, -"height":120 -}` -``` - -Имя поля, в которое пользователь вводит значение капчи, задается параметром captchaField (по умолчанию - vericode). Правило валидации для этого поля создается автоматически. - -Капча выводится в шаблоне формы с помощью плейсхолдера [+captcha+]. - -### modxCaptcha - -Модификация стандартной капчи MODX. - -Настройки: -* width и height - ширина и высота картинки с капчей (значение по умолчанию - 100 и 60); -* inline - формат вывода. Если значение параметра равно 1, то в плейсхолдер [+captcha+] выводится картинка в base64-формате. Если 0, то выводится ссылка на файл connector.php, генерирующий картинку. Значение по умолчанию - 1; -* connectorDir - путь к папке с файлом connector.php, если параметр inline равен 0. Значение по умолчанию - assets/snippets/FormLister/lib/captcha/modxCaptcha/; -* errorEmptyCode - текст сообщения об ошибке, если поле со значением капчи не заполнено. Значение по умолчанию - "Введите проверочный код"; -* errorCodeFailed - текст сообщения об ошибке, если введено неверное значение капчи. Значение по умолчанию - "Неверный проверочный код" - -### reCaptcha - -Капча Google reCAPTCHA V2. На странице с формой должен быть подключен скрипт: -``` - -``` - -Значение параметра captchaField должно быть "g-recaptcha-response" (см. [документацию](https://developers.google.com/recaptcha/docs/verify)). - -Настройки: -* secretKey, siteKey - ключи для доступа к api reCAPTCHA; -* size, theme, badge, callback, expired_callback, tabIndex, type - см. [документацию](https://developers.google.com/recaptcha/docs/display#render_param); -* errorCodeFailed - текст сообщения об ошибке, если пользователь не прошел проверку. Значение по умолчанию - "Вы не прошли проверку" - -### smsCaptcha - -Настройки: -* codeLifeTime - срок действия введенного кода, секунд. Если пользователь попытается ввести код до истечения срока, то будет выведено сообщение errorCodeUsed. Значение по умолчанию - 86400 (сутки); -* errorEmptyCode - сообщение об ошибке, если пользователь получил, но не ввел код. Значение по умолчанию - "Введите код авторизации"; -* errorCodeRequired - сообщение об ошибке, если пользователь не запросил код. Значение по умолчанию - "Получите код авторизации"; -* errorCodeFailed - сообщение об ошибке, если пользователь ввел неверный код авторизации. Значение по умолчанию - "Неверный код авторизации"; -* errorCodeExpired - сообщение об ошибке, если пользователь не ввел полученный код в течение заданного времени. Значение по умолчанию - "Код авторизации истек, получите новый"; -* errorCodeUsed - сообщение об ошибке, если пользователь уже вводил код для текущей формы. Значение по умолчанию - "Код авторизации уже использовался". - -Чтобы использовать эту капчу необходимо предварительно создать таблицу в базе данных: -``` -createTable(); -``` - -Для отправки кода необходимо создать отдельную форму и указать в параметре prepareProcess сниппет: - ``` -setValid(false); - $FormLister->addError('phone','phone','Неверный номер телефона'); -} else { - //загружаем класс для работы с таблицей - $sms = $FormLister->loadModel('SmsModel','assets/snippets/FormLister/lib/captcha/smsCaptcha/model.php'); - $flag = false; - //проверяем, есть ли в таблице запись для заданного номера и идентификатора формы - $data = $sms->getData('+'.$rawPhone,$formid); - if ($data->getID()) { - //если есть и код не истек - if ($sms->get('expires') > time()) { - //смотрим, использован ли код - if ($sms->get('active')) { - $FormLister->addMessage('Вы уже использовали код.'); - } else { - $FormLister->addMessage('Код уже был отправлен. Подождите несколько минут прежде чем запросить новый.'); - } - //если код истек, то удаляем запись и разрешаем выдать новый - } else { - $sms->delete($sms->getID()); - $flag = true; - } - } else { - $flag = true; - } - //если можно выдать новый код - if ($flag) { - $code = mt_rand(1000,9999); - - //здесь отправляется смс и результат помещается в переменную $result - /** - * - */ - $result = array('status'=>true); - - //проверяем отправлена ли смс - if (is_array($result) && $result['status']) { - //создаем запись в таблице, время жизни кода - 3 минуты - $result = $sms->create()->fromArray(array( - 'phone'=>('+'.$rawPhone), - 'formid'=>$formid, - 'expires'=>(time() + 60*3), - 'ip'=> \APIhelpers::getUserIP(), - 'code'=>$code - ))->save(); - //если получилось записать, то сохраняем в сессию номер телефона - if ($result) { - $_SESSION[$session_key] = '+'.$rawPhone; - } else { - $FormLister->setValid(false); - $FormLister->addMessage('Не удалось отправить смс'); - } - } else { - //если нельзя выдать код, то запрещаем дальнейшую обработку формы - $FormLister->setValid(false); - } -} -?> -``` - -Полностью вызов FormLister: -``` -[!FormLister? -&formid=`code` -&submitLimit=`0` -&protectSubmit=`0` -&rules=`{ -"phone":{ - "required":"Обязательно введите номер телефона", - "phone":"Введите номер правильно" -} -}` -&prepareProcess=`setSmsCaptcha` -&captcha=`modxCaptcha` -&formTpl=`@CODE: -
          -
          -
          -
          - - -
          - -
          - - [+phone.error+] -
          -
          -[+form.messages+] -
          -
          - -
          -
          - - - [+vericode.error+] -
          -
          -
          -
          ` -&successTpl=`@CODE:Код авторизации отправлен на номер [+phone.value+]. Срок действия кода - 3 минуты.` -!] -``` diff --git "a/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264_\320\264\320\260\320\275\320\275\321\213\321\205.md" "b/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264_\320\264\320\260\320\275\320\275\321\213\321\205.md" deleted file mode 100755 index 8dc1af8c..00000000 --- "a/assets/snippets/FormLister/docs/ru/040_\320\222\321\213\320\262\320\276\320\264_\320\264\320\260\320\275\320\275\321\213\321\205.md" +++ /dev/null @@ -1,40 +0,0 @@ -## Вывод данных - -Для вывода в шаблоны данные экранируются, а массивы преобразовываются в строки. Кроме этого, для элементов управления устанавливаются специальные плейсхолдеры. - -Вывод неэкранированного значения поля: -[+имя поля+] - -Вывод значения поля: -``` -[+имя поля.value+] -``` - -Установка чекбокса: -``` -[+c.имя поля.значение поля+] -``` - -Установка выпадающего списка или радио-кнопки: -``` -[+s.имя поля.значение поля+] -``` - -Установка класса для незаполненного поля: -[+имя поля.requiredСlass+] - -Установка класса для неверно заполненного поля: -[+имя поля.errorClass+] - -Вывод сообщения об ошибке валидации: -[+имя поля.error+] - -Вывод сообщений обработчика: -[+form.messages+] - -В плейсхолдер [+form.messages+] могут выводиться три типа сообщений: нарушения правила required, нарушения остальных правил, произвольные сообщения, которые задаются методом addMessage. По умолчанию выводятся только последние, см. описание параметра messagesTpl. - -Вывод значений из лексиконов: -[%ключ лексикона%] - -При использовании плагина EvoTwig в шаблонах доступны переменные FormLister (объект контроллера), errors (массив formData['errors']), messages (массив formData['messages']). diff --git "a/assets/snippets/FormLister/docs/ru/050_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\320\277\320\270\321\201\320\265\320\274.md" "b/assets/snippets/FormLister/docs/ru/050_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\320\277\320\270\321\201\320\265\320\274.md" deleted file mode 100644 index c0506883..00000000 --- "a/assets/snippets/FormLister/docs/ru/050_\320\236\321\202\320\277\321\200\320\260\320\262\320\272\320\260_\320\277\320\270\321\201\320\265\320\274.md" +++ /dev/null @@ -1,237 +0,0 @@ -## Отправка писем - -Контроллер Form позволяет отправлять данные формы в письме. - -## Параметры отправки почты -### parseMailerParams -Разрешает использовать данные формы в параметрах отправки почты (&to=\`@CODE:[+user.email.value+]\` и т.п.). - -Возможные значения - 1, 0. - -Значение по умолчанию - 0. - -### isHtml -Разрешает отправлять письмо в формате html. Проверка корректности кода письма возлагается на разработчика. - -Возможные значения - 1, 0. - -Значение по умолчанию - 1. - -### to -Адрес получателя. Если не указан, то письмо не отправляется, но считается успешно отправленным. - -Возможные значения - email-адрес. - -Значение по умолчанию - пусто. - -### from -Возможные значения - email-адрес. - -Значение по умолчанию - параметр конфигурации emailsender. - -### fromName -Имя отправителя. - -Возможное значение - строка. - -Значение по умолчанию - параметр конфигурации site_name. - -### replyTo -Заголовок replyTo. - -Возможные значения - email-адрес. - -Значение по умолчанию - пусто. - -### cc -Заголовок сс. - -Возможные значения - email-адрес. - -Значение по умолчанию - пусто. - -### bcc -Заголовок bcc. - -Возможные значения - email-адрес. - -Значение по умолчанию - пусто. - -### noemail -Если параметр задан, то письмо не отправляется, но считается успешно отправленным. - -Возможные значения - 1, 0. - -Значение по умолчанию - 0. - -### ignoreMailerResult -Если параметр задан, то письмо отправляется, но результат отправки игнорируется. - -Возможные значения - 1, 0. - -Значение по умолчанию - 0. - -### subject, ccSubject, autoSubject -Тема письма. - -Возможные значения - строка. - -Значение по умолчанию - пусто. - -### subjectTpl, ccSubjectTpl, autoSubjectTpl -Шаблон темы письма. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - значение параметра subject (ccSubject, autoSubject). - -### autosender -Адрес на который отправляется дополнительное письмо. - -Возможные значения - email-адрес. - -Значение по умолчанию - пусто. - -### autosenderFromName -Имя отправителя дополнительного письма. - -Возможные значения - строка. - -Значение по умолчанию - параметр конфигурации site_name. - -### ccSender -Если параметр задан, то на адрес указанный в поле формы отправляется письмо. - -Возможные значения - 1, 0. - -Значение по умолчанию - 0. - -### ccSenderField -Имя поля, в котором хранится адрес получателя. - -Возможные значения - имя поля формы. - -Значение по умолчанию - email. - -### ccSenderFromName -Имя отправителя письма на заданный в поле формы адрес. - -Возможные значения - строка. - -Значение по умолчанию - не указано. - -## ccMailConfig -Позволяет переопределить параметры отправки для писем, отправляемых по адресу из формы (isHtml, from, fromName, subject, replyTo, cc, bcc, noemail). - -Возможные значения - json или php массив. - -Значение по умолчанию - не указано. - -## autoMailConfig -Позволяет переопределить параметры отправки для дополнительно отправляемых писем (isHtml, from, fromName, subject, replyTo, cc, bcc, noemail). - -Возможные значения - json или php массив. - -Значение по умолчанию - не указано. - -## Защита от повторной отправки -### protectSubmit -Защита от повторной отправки письма. - -Возможные значения - 1, 0 или список полей, по которым определяется уникальность письма. Если список не задан, то используются поля, обязательные для заполнения. - -Значение по умолчанию - 1. - -### submitLimit -Защита от частой отправки писем. - -Значение - число секунд между повторной отправкой. - -Значение по умолчанию - 60. - -## Шаблоны -### reportTpl -Основной шаблон письма. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - список полей и их значений. - -### automessageTpl -Шаблон дополнительного письма. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### ccSenderTpl -Шаблон письма на заданный в поле формы адрес. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### successTpl -Шаблон сообщения об успешной отправке писем. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -## Отправка файлов -### attachments -Имена полей, в которых хранятся файлы. Поддерживаются только поля с одним файлом (name="field" type="file") и поля с одномерным массивом файлов (name="field[]" type="file" multiple). - -Значение по умолчанию - пусто. - -### attachFiles -Позволяет отправить произвольные файлы. - -Возможные значения - массив: -``` -&attachFiles=`{ -"имя поля1":{ - "filepath":"assets/images/logo.png", - "filename":"logo.png" -}, -"имя поля2":[ - { - "filepath":"assets/images/file1.jpg", - "filename":"отчет.jpg" - }, - { - "filepath":"assets/images/file2.jpg", - "filename":"отчет2.jpg" - } -] -}` -``` -### deleteAttachments -Позволяет удалить файлы вложений после успешной отправки. - -Возможные значения - 0 или 1. - -Значение по умолчанию - 0. - -### fileValidator -Имя класса для валидации файлов. Если задано, то класс должен быть загружен заранее. - -Значение по умолчанию - \FormLister\FileValidator - -### fileRules -Правила валидации (см. раздел "Валидация данных"). Стандартный валидатор поддерживает правила: - -- required: файлы успешно отправлены; -- optional: аналогично required, но выполняется и в том случае, если пользователь не загружал файлы (то есть поле с файлами не является обязательным); -- allowed: расширение файла входит в заданный массив; -- images: расширение файла jpg, jpeg, gif, png, bmp; -- minSize: размер файла в килобайтах больше заданного; -- maxSize: размер файла в килобайтах меньше заданного; -- sizeBetween: размер файла в килобайтах входит в диапазон; -- minCount: количество файлов больше заданного; -- maxCount: количество файлов меньше заданного; -- countBetween: количество файлов входит в диапазон. - -Использовать конструкцию "!имя поля" в правилах валидации файлов нет смысла, так как значение поля с файлом не будет пустым, даже если файл не загружен. Следует использовать правило optional. - -В шаблоне письма reportTpl доступен плейсхолдер [+attachments.value+] со списком всех приложенных к письму файлов. Можно также вывести по отдельности: [+имя поля.value+]. Файлы отправляются только в письме c шаблоном reportTpl. diff --git "a/assets/snippets/FormLister/docs/ru/060_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/ru/060_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" deleted file mode 100755 index 8a120340..00000000 --- "a/assets/snippets/FormLister/docs/ru/060_\320\220\320\262\321\202\320\276\321\200\320\270\320\267\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" +++ /dev/null @@ -1,204 +0,0 @@ -## Авторизация пользователей - -Авторизация пользователей в `FormLister` осуществляется с использованием контроллера `Login`. - -### Выбор поля для авторизации - -Поле для авторизации задается в параметре `loginField` и должно быть **уникальным** для каждого веб-пользователя. - -Авторизация может осуществляться: -* по **базовым** полям средствами класса `modUsers`: `id`, `username` и `email` -* по любому **другому полю** из учетной записи (с помощью плагина для события `OnWebAuthentication`) - - -Дополнительное использование плагина [userHelper](https://github.com/evolution-cms/evolution/blob/develop/assets/snippets/FormLister/plugin.userHelper.php) позволяет: - -* вести учет количества логинов -* определить время последней авторизации -* реализовать автологин и выход из учетной записи -* блокировать пользователей после определенного количества неудачных попыток авторизации - -Перед использованием плагина `userHelper` убедитесь что он включен: - -![Не забудьте включить userHelper](https://habrastorage.org/web/dbc/1e2/abd/dbc1e2abd8664a548f4eca254187fb60.png) - -## Пример вызова FormLister для авторизации веб-пользователей - -```javascript -[!FormLister? -&formid=`login` -&controller=`Login` -&loginField=`email` -&passwordField=`password` -&rules=`{ - "email":{ - "required":"Обязательно введите email" - } - }, - "password":{ - "required":"Обязательно введите пароль", - "minLength":{ - "params":6, - "message":"В пароле должно быть больше 6 символов" - } - }, -}` -&allowedFields=`email,password` -&formTpl=`@CODE: -
          -
          - -
          - - - [+email.error+] -
          -
          - - - [+password.error+] -
          - [+form.messages+] -
          - -
          -
          -
          -` -&messagesOuterTpl=`@CODE:` -&successTpl=`@CODE:
          Поздравляем с успешной авторизацией, [+fullname.value+]!
          ` -&errorTpl=`@CODE:
          [+message+]
          ` -&requiredClass=` has-error` -&errorClass=` has-error` -&requiredClass=` has-error` -!] -``` - -## Параметры контроллера - -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### loginField -Поле, содержащее имя пользователя. - -Возможные значения - имя поля. - -Значение по умолчанию - username. - -### passwordField -Поле, содержащее пароль пользователя. - -Возможные значения - имя поля. - -Значение по умолчанию - password. - -### rememberField -Поле для запоминания пользователя. Если значение поля приводится к true, то при успешной авторизации будет установлена кука с параметрами автологина. Имя куки и ее время жизни задаются параметрами cookieName и cookieLifetime. - -Можно также задать поле rememberme в параметре defaults, чтобы запоминание происходило без участия пользователя: -``` -&defaults=`{"rememberme":1}` -``` - -Возможные значения - имя поля. - -Значение по умолчанию - rememberme. - -### checkActivation -Включает проверку активации учетной записи пользователя (см. "Активация учетных записей"). - -Возможные значения - 0 или 1. - -Значение по умолчанию - 1. - -### context -Контекст авторизации. - -Возможные значения - mgr или web. - -Значение по умолчанию - web. - -### cookieName -Имя куки для хранения параметров автологина. - -Значение по умолчанию - WebLoginPE. - -### cookieLifetime -Время жизни вышеуказанной куки. - -Возможные значения - число секунд с момента последнего логина. - -Значение по умолчанию - 157680000 (5 лет). - -### redirectTo -Перенаправляет пользователя на страницу c указанным id после авторизации. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет уже авторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### successTpl -Шаблон сообщения об успешной авторизации. В шаблоне можно использовать данные пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Login с ключом [+login.default_successTpl+] - -### skipTpl -Шаблон сообщения о том, что пользователь уже авторизован. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Login с ключом [+login.default_skipTpl+] - -## Параметры плагина userHelper -### logoutKey -Имя GET-параметра для запуска выхода из учетной записи. Если в ссылке на страницу сайта указан параметр с соответствующим именем (например, http://sitename.ru/page.html?logout), будет произведен выход из учетной записи. - -Значение по умолчанию - logout. - -### cookieName -Имя куки для хранения параметров автологина. - -Значение по умолчанию - WebLoginPE. - -### cookieLifetime -Время жизни вышеуказанной куки. - -Возможные значения - число секунд с момента последнего логина. - -Значение по умолчанию - 157680000 (5 лет). - -### maxFails -Количество попыток для ввода учетных данных. - -Возможные значения - число больше 0. - -Значение по умолчанию - 3. - -### blockTime -Время блокировки пользователя. - -Возможные значения - число секунд с момента последнего логина. - -Значение по умолчанию - 3600 (1 час). - diff --git "a/assets/snippets/FormLister/docs/ru/070_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/ru/070_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" deleted file mode 100755 index 97e0de13..00000000 --- "a/assets/snippets/FormLister/docs/ru/070_\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\270\314\206.md" +++ /dev/null @@ -1,142 +0,0 @@ -## Регистрация пользователей - -Контроллер Register позволяет регистрировать пользователей в заданные группы и отправлять уведомления о регистрации. Контроллер является расширением контроллера Form, соответственно можно использовать соответствующие параметры для отправки писем при регистрации. - -Имена полей в форме должны соответствовать полям модели [modUsers](http://docs.evolution-cms.com/Extras/Snippets/DocLister/MODxAPI). - -Если в форме не задано поле username, то ему присваивается значение поля email. Таким образом можно регистрировать пользователей только по email. - -Если в форме не задано поле password, то значение поля генерируется автоматически. То есть регистрацию пользователя можно свести к указанию email. - -При регистрации с паролем, в форме может присутствовать поле repeatPassword. Если заданы правила валидации для полей password и repeatPassword, то при наличии для поля repeatPassword правила equals, оно будет автоматически скорректировано для проверки равенства значений полей password и repeatPassword: -``` -"repeatPassword":{ - "required":"Введите пароль еще раз", - "equals":{ - "params" : "Этот ключ в описании правила можно не задавать, он будет сформирован контроллером автоматически", - "message":"Пароли не совпадают" - } -} -``` - -При регистрации следует проверять уникальность имени пользователя и email. В контроллере предусмотрены соответствующие правила: -``` -&rules=`{ - "username":{ - "required":"Введите имя пользователя", - "alphaNumeric":"Только буквы и цифры", - "custom":{ - "function":"\\FormLister\\Register::uniqueUsername", - "message":"Имя уже занято" - } - }, - "email":{ - "required":"Введите email", - "email":"Неверный email", - "custom":{ - "function":"\\FormLister\\Register::uniqueEmail", - "message":"Этот email уже использует другой пользователь" - } - } -}` -``` -В шаблонах доступны все поля модели для созданной записи. Дополнительно задается поле user.password с незашифрованным паролем. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### allowedFields -Разрешенные для обработки поля. Поля, не указанные в списке, игнорируются. Поля username, email и password всегда разрешены. - -Если не задано, то разрешены все поля. - -Возможные значения - имена полей формы, разделенные запятой. - -Значение по умолчанию - пусто. - -### forbiddenFields -Запрещенные для обработки поля. Поля, указанные в списке, игнорируются. Поля username, email и password удаляются из списка запрещенных. - -Возможные значения - имена полей формы, разделенные запятой. - -Значение по умолчанию - пусто. - -### userGroups -Добавляет зарегистрированного пользователя в указанные группы. - -Возможные значения - имена групп, разделенные запятой (если имена содержат запятую в названии, то можно задать значение параметра массивом). - -Значение по умолчанию - пусто. - -### checkActivation -Включает проверку активации учетной записи пользователя (см. "Активация учетных записей"). При этом после сохранения записи будет установлено поле activate.url, содержащее ссылку на страницу с вызовом сниппета для активации учетной записи. - -Возможные значения - 1 или 0. - -Значение по умолчанию - 0. - -### activateTo -Если включена проверка активации, то в этом параметре необходимо указать id страницы, на которой вызывается сниппет для активации. - -Возможные значения - id страницы. - -Значение по умолчанию - значение $modx->config['site_start']. - -### uidName -Имя GET-параметра в ссылке для восстановления пароля, который содержит id пользователя. - -Значение по умолчанию - primary key для таблицы с пользователями. - -### preparePostProcess -Позволяет выполнить обработку данных после сохранения. - -Возможные значения - имена сниппетов, анонимные функции, статические методы загруженных классов. - -Значение по умолчанию - пусто. - -### redirectTo -Перенаправляет пользователя на указанную страницу после регистрации. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет уже авторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для уже авторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Register с ключом [+register.default_skipTpl+] - -### successTpl -Шаблон сообщения об успешной регистрации. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Register с ключом [+register.default_successTpl+] - -### passwordLength -Длина пароля (если создается автоматически). - -Возможные значения - число символов больше 6. - -Значение по умолчанию - 6. diff --git "a/assets/snippets/FormLister/docs/ru/075_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\321\213\321\205_\320\267\320\260\320\277\320\270\321\201\320\265\320\270\314\206.md" "b/assets/snippets/FormLister/docs/ru/075_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\321\213\321\205_\320\267\320\260\320\277\320\270\321\201\320\265\320\270\314\206.md" deleted file mode 100755 index ee220f68..00000000 --- "a/assets/snippets/FormLister/docs/ru/075_\320\220\320\272\321\202\320\270\320\262\320\260\321\206\320\270\321\217_\321\203\321\207\320\265\321\202\320\275\321\213\321\205_\320\267\320\260\320\277\320\270\321\201\320\265\320\270\314\206.md" +++ /dev/null @@ -1,89 +0,0 @@ -## Активация учетных записей - -Контроллер Activate реализует активацию учетных записей. Таким образом появляется возможность требовать у пользователя подтверждение учетной записи путем перехода по специальной ссылке из письма, отправленного при регистрации. - -Если по какой-то причине пользователь не получил письмо, то c помощью контроллера Activate он может запросить его повторную отправку. - -Учетная запись пользователя считается неактивированной если в поле logincount записано -1. - -В вызовах сниппета для регистрации и авторизации пользователей должен присутствовать параметр &checkActivation=`1`. - -Поэтому если при регистрации пользователь указывал пароль самостоятельно, то обязательно нужно запрашивать пароль для отправки письма со ссылкой для активации. Иначе будет генерироваться новый пароль, потому что раз пользователь запрашивает письмо для активации вручную, значит письмо после регистрации он не получил и не знает созданный при регистрации пароль. - -В шаблонах доступны все поля модели для обрабатываемой записи. В шаблоне reportTpl задается поле user.password с незашифрованным паролем и поле activate.url со ссылкой для активации. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### uidName -Имя GET-параметра в ссылке для активации, который содержит id пользователя. - -Значение по умолчанию - primary key для таблицы с пользователями. - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### redirectTo -Перенаправляет пользователя на указанную страницу после активации. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет авторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для авторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Register с ключом [+register.default_skipTpl+] - -### reportTpl -Шаблон письма с информацией для активации учетной записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### reportTpl -Шаблон письма с информацией для активации учетной записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### successTpl -Шаблон сообщения об успешной отправке письма с данными для активации. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Activate с ключом [+activate.default_successTpl+] - -### activateSuccessTpl -Шаблон сообщения об успешной активации. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Activate с ключом [+activate.default_activateSuccessTpl+] - -### passwordLength -Длина создаваемого пароля. - -Возможные значения - число символов больше 6. - -Значение по умолчанию - 6. diff --git "a/assets/snippets/FormLister/docs/ru/080_\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" "b/assets/snippets/FormLister/docs/ru/080_\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" deleted file mode 100755 index 1a6d503c..00000000 --- "a/assets/snippets/FormLister/docs/ru/080_\320\240\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" +++ /dev/null @@ -1,99 +0,0 @@ -## Редактирование профиля пользователя - -Контроллер Profile позволяет авторизованным пользователям редактировать свои профили, в том числе менять пароль. - -При изменении профиля следует проверять уникальность email. В контроллере предусмотрено соответствующее правило: -``` -&rules=`{ - "email":{ - "required":"Введите email", - "email":"Неверный email", - "custom":{ - "function":"\\FormLister\\Profile::uniqueEmail", - "message":"Этот email уже использует другой пользователь" - } - } -}` -``` -Аналогично с полем username: -``` -&rules=`{ - "username":{ - "required":"Введите имя пользователя", - "alphaNumeric":"Только буквы и цифры", - "custom":{ - "function":"\\FormLister\\Profile::uniqueUsername", - "message":"Имя уже занято" - } - } -}` -``` - -Если поле с паролем пустое, то пароль остается прежний. После изменения пароля пользователь должен авторизоваться с новым паролем. Новый пароль сохраняется в поле user.password. - - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### allowedFields -Разрешенные для обработки поля. Поля, не указанные в списке, игнорируются. Если пользователь меняет пароль, то в разрешенные поля добавляется поле password. Если у пользователей совпадают поля e-mail и username, то при изменении e-mail будет изменено и поле username, если значение этого поля не задано. В этом случае поле username будет добавлено в список разрешенных. - -Если не задано, то разрешены все поля. - -Возможные значения - имена полей формы, разделенные запятой. - -Значение по умолчанию - пусто. - -### forbiddenFields -Запрещенные для обработки поля. Поля, указанные в списке, игнорируются. Поля password и username исключаются из списка по аналогии с allowedFields. - -Возможные значения - имена полей формы, разделенные запятой. - -Значение по умолчанию - пусто. - -### preparePostProcess -Позволяет выполнить обработку данных после сохранения. - -Возможные значения - имена сниппетов, анонимные функции, статические методы загруженных классов. - -Значение по умолчанию - пусто. - -### redirectTo -Перенаправляет пользователя на указанную страницу после сохранения профиля. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для неавторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Profile с ключом [+profile.default_skipTpl+] - -### successTpl -Шаблон сообщения об успешном обновлении профиля. Если не задан, то генерируется сообщение об успешном сохранении формы. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. diff --git "a/assets/snippets/FormLister/docs/ru/085_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" "b/assets/snippets/FormLister/docs/ru/085_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" deleted file mode 100755 index bfe40414..00000000 --- "a/assets/snippets/FormLister/docs/ru/085_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\277\321\200\320\276\321\204\320\270\320\273\321\217_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.md" +++ /dev/null @@ -1,50 +0,0 @@ -## Удаление профиля пользователя - -Контроллер DeleteUser позволяет авторизованным пользователям удалять свои профили. Для подтверждения действия пользователю необходимо ввести свой пароль. - -Расширяет Form. - -В шаблонах доступны поля модели для удаляемой записи. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### redirectTo -Перенаправляет пользователя на указанную страницу после сохранения профиля. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для неавторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteUser с ключом [+deleteUser.default_skipTpl+] - -### successTpl -Шаблон сообщения об успешном удалении профиля. Если не задан, то генерируется сообщение об успешном сохранении формы. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. diff --git "a/assets/snippets/FormLister/docs/ru/090_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" "b/assets/snippets/FormLister/docs/ru/090_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" deleted file mode 100755 index 6a4c1382..00000000 --- "a/assets/snippets/FormLister/docs/ru/090_\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265_\320\277\320\260\321\200\320\276\320\273\320\265\320\270\314\206_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" +++ /dev/null @@ -1,148 +0,0 @@ -## Восстановление паролей пользователями - -Контроллер Reminder позволяет web-пользователям восстанавливать забытые пароли. Расширяет контроллер Form. - -Восстановление паролей происходит по следующей схеме: - -- пользователь вводит в форме свой идентификатор (им может быть имя пользователя или email); -- пользователь получает письмо, в котором содержится ссылка для восстановления; -- при переходе по ссылке пользователь получает возможность ввести новый пароль либо пароль будет сгенерирован автоматически; -- пользователю отправляется письмо с новым паролем и показыается сообщение (в сообщении можно также вывести новый пароль). - -Параметр to перезаписывается значением email пользователя. Обязательно должен быть задан параметр resetTo. - -## Параметры -### model -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### modelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### hashField -Имя поля для хранения хэша данных пользователя. - -Значение по умолчанию - hash. - -### userField -Имя поля для хранения уникального идентификатора пользователя (имя пользователя или email). - -Значение по умолчанию - email. - -### uidField -Имя поля, которое содержит числовой идентификатор пользователя (Primary Key в таблице БД). - -Значение по умолчанию - id. - -### uidName -Имя GET-параметра в ссылке для восстановления пароля, который содержит id пользователя. - -Значение по умолчанию - значение параметра uidField. - -### exitTo -Перенаправляет авторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### resetTo -Страница, на которую будет указывать ссылка для восстановления паролей. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - id документа, в котором вызван контроллер. - -### redirectTo -Перенаправляет на указанную страницу после успешного восстановления пароля. - -Возможные значения - id целевой страницы. - -Значение по умолчанию - пусто. - -### skipTpl -Шаблон сообщения для авторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_skipTpl+]. - -### formTpl -Шаблон формы для ввода идентификатора пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### resetTpl -Шаблон формы для ввода нового пароля. Если параметр не задан, то пароль будет сгенерирован автоматически. - -Поля для ввода паролей должны называться password и repeatPassword. В форме должны также присутствовать скрытые поля с именами из параметров uidField и hashField. Значение для поля hashField задается через плейсхолдер [+user.hash+], а для поля uidField - [+user.id+]. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### successTpl -Шаблон сообщения об успешной отправке письма со ссылкой для восстановления пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.). - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_successTpl+]. - -### resetSuccessTpl -Шаблон сообщения об успешном восстановлении пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_resetSuccessTpl+]. - -### reportTpl -Шаблон письма со ссылкой для восстановления пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). Ссылка для восстановлени пароля в письме задается через плейсхолдер [+reset.url+] - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Reminder с ключом [+reminder.default_reportTpl+].. - -### resetReportTpl -Шаблон письма об успешном восстановлении пароля. В шаблоне можно выводить плейсхолдеры с данными пользователя (username, email и т.д.), а также новый пароль (newpassword). Если не задан, то письмо пользователю отправляться не будет. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. - -### rules -Правила валидации для формы идентификации пользователя. - -Возможные значения - см. раздел "Валидация данных". - -Значение по умолчанию - пусто. - -### resetRules -Правила валидации для формы установки нового пароля. Если заданы правила валидации для полей password и repeatPassword, то при наличии для поля repeatPassword правила equals, оно будет автоматически скорректировано для проверки равенства значений полей password и repeatPassword: -``` -"repeatPassword":{ - "required":"Введите пароль еще раз", - "equals":{ - "params" : "Этот ключ в описании правила можно не задавать, он будет сформирован контроллером автоматически", - "message":"Пароли не совпадают" - } -} -``` -Возможные значения - см. раздел "Валидация данных". - -Значение по умолчанию - пусто. - -### passwordLength -Длина пароля (если создается автоматически). - -Возможные значения - число символов больше 6. - -Значение по умолчанию - 6. diff --git "a/assets/snippets/FormLister/docs/ru/100_\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265_\320\270_\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" "b/assets/snippets/FormLister/docs/ru/100_\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265_\320\270_\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" deleted file mode 100755 index d383e93f..00000000 --- "a/assets/snippets/FormLister/docs/ru/100_\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265_\320\270_\321\200\320\265\320\264\320\260\320\272\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" +++ /dev/null @@ -1,166 +0,0 @@ -## Создание и редактирование документов пользователями - -Контроллер Content позволяет web-пользователям создавать и редактировать записи в таблицах MODxAPI. Расширяет контроллер Form, что позволяет отправлять письма после создания записи. При редактировании записей отправка почты отключена, при необходимости ее можно реализовать с помощью плагинов на событие сохранения (OnDocFormSave и т.п.). - -Данные формы передаются в объект MODxAPI как есть, соответственно разработчику нужно заботиться об их корректности самостоятельно. - -При редактировании записей можно запретить изменение отдельных полей, используя параметр keepDefaults. - -При создании новой записи вызывается событие OnMakeDocUrl, в которое передается id записи и массив data со значениями полей записи. Это позволяет вернуть ссылку на созданную запись, она будет доступна через плейсхолдер [+content.url+]. Ссылку можно использовать в письме c уведомлением о создании новой записи. - -Также можно использовать данные авторизованного пользователя, доступны через плейсхолдеры [+user.fullname+], [+user.email+] и т.д. - -## Параметры -### model -Класс MODxAPI. - -Возможные значения - имя класса MODxAPI. - -Значение по умолчанию - \modResource. - -### modelPath -Путь к файлу класса, если класс не загружается заранее. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modResource.php. - -### userModel -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### userModelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### onlyUsers -Разрешить добавление записей только для зарегистрированных пользователей. - -Возможные значения - 0, 1. - -Значение по умолчанию - 1. - -### userGroups -Группы пользователей, которым разрешено добавлять или изменять записи. - -Возможные значения - список групп через точку с запятой. - -Значение по умолчанию - пусто (разрешены любые группы). - -### onlyOwners -Разрешает редактирование записей только их авторами. Автор определяется по полю, указанному в параметре ownerField. - -Возможные значения - 0, 1. - -Значение по умолчанию - 1. - -### ownerField -Имя поля, определяющего владельца записи. Если работать с документами modResource, то это будет имя tv-параметра (в Evo не предусмотрено создание записей веб-пользователями). - -Возможные значения - имя поля. - -Значение по умолчанию - aid. - -### idField -Имя ключа массива $_REQUEST, по которому определяется id редактируемой записи. Если ключ не задан, то контроллер вызывается в режиме создания записей. Информацию о режиме контроллера можно получить с помощью метода getMode. - -В форме редактирования нужно предусмотреть скрытое поле с именем параметра, в котором будет сохраняться id записи. - -Значение по умолчанию - id. - -### contentFields -Задает сопоставление полей MODxAPI и полей формы. Можно не задавать, если имена полей совпадают. Если параметр не задан, то ограничить список передаваемых в модель полей можно с помощью параметров allowedFields и forbiddenFields. - -Возможные значения - массив вида: -``` -&contentFields=`{ - "поле MODxAPI":"поле формы", - "поле MODxAPI":"поле формы" -} -` -``` -Значение по умолчанию - пусто. - -### clearCache -Очищать кэш после сохранения записи. - -Возможные значения - 0, 1. - -Значение по умолчанию - 0. - -### redirectTo -Перенаправляет пользователя на указанную страницу после сохранения новой записи. В режиме редактирования не используется. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### editAfterCreate -Переправляет пользователя на страницу для редактирования созданной записи. Страница указывается в параметре redirectTo. - -Возможные значения - 1 или 0. - -Значение по умолчанию - 0. - -### editTpl -Шаблон формы для редактирования документа. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - значение параметра formTpl. - -### badOwnerTpl -Шаблон сообщения о том, что пользователь не является автором документа. Только режим редактирования. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+edit.default_badOwnerTpl+]. - -### badGroupTpl, badGroupEditTpl -Шаблон сообщения о том, что пользователь не входит в группу пользователей которым разрешено создавать и редактировать документы. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом -[+create.default_badGroupTpl+] или [+edit.default_badGroupTpl+]. - -### badRecordTpl -Шаблон сообщения о том, что пользователь не может редактировать запись: например, запись не существует. Только режим редактирования. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+edit.default_badRecordTpl+]. - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### skipTpl, skipEditTpl -Шаблон сообщения для неавторизованного пользователя. Для режима редактирования - skipEditTpl. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+create.default_skipTpl+] (edit.default_skipEditTpl). - -### successTpl -Шаблон сообщения об успешном сохранении новой записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона Content с ключом [+create.default_successTpl+] - -### editSuccessTpl -Шаблон сообщения об успешном обновлении записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - пусто. diff --git "a/assets/snippets/FormLister/docs/ru/105_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" "b/assets/snippets/FormLister/docs/ru/105_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" deleted file mode 100755 index 7cddeb4a..00000000 --- "a/assets/snippets/FormLister/docs/ru/105_\320\243\320\264\320\260\320\273\320\265\320\275\320\270\320\265_\320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\276\320\262_\320\277\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217\320\274\320\270.md" +++ /dev/null @@ -1,97 +0,0 @@ -## Удаление профиля пользователя - -Контроллер DeleteContent позволяет авторизованным пользователям удалять созданные ими документы. - -Расширяет Form. - -В шаблонах доступны поля модели для удаляемой записи. Информация о пользователе доступна в полях с префиксом user (user.fullname, user.email и т.д.) - -## Параметры -### model -Класс MODxAPI. - -Возможные значения - имя класса MODxAPI. - -Значение по умолчанию - \modResource. - -### modelPath -Путь к файлу класса, если класс не загружается заранее. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modResource.php. - -### userModel -Класс для работы с пользователями. - -Возможные значения - имя класса. - -Значение по умолчанию - \modUsers - -### userModelPath -Путь к файлу класса для работы с пользователями. - -Возможные значения - относительный путь к файлу. - -Значение по умолчанию - assets/lib/MODxAPI/modUsers.php - -### ownerField -Имя поля, определяющего владельца записи. Если работать с документами modResource, то это будет имя tv-параметра (в Evo не предусмотрено создание записей веб-пользователями). - -Возможные значения - имя поля. - -Значение по умолчанию - aid. - -### idField -Имя ключа массива $_REQUEST, по которому определяется id удаляемой записи. - -Значение по умолчанию - id. - -### redirectTo -Перенаправляет пользователя на указанную страницу после удаления записи. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### badOwnerTpl -Шаблон сообщения о том, что пользователь не является автором документа. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteContent с ключом [+deleteContent.default_badOwnerTpl+]. - -### badRecordTpl -Шаблон сообщения о том, что пользователь не может удалить запись: например, запись не существует. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteContent с ключом [+deleteContent.default_badRecordTpl+]. - -### skipTpl -Шаблон сообщения для неавторизованного пользователя. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteContent с ключом [+deleteContent.default_skipTpl+]. - -### successTpl -Шаблон сообщения об успешном сохранении новой записи. - -Возможные значения - имя шаблона, указанное по правилам задания шаблонов в DocLister. - -Значение по умолчанию - запись из лексикона deleteContent с ключом [+deleteContent.default_successTpl+] - -### exitTo -Перенаправляет неавторизованного пользователя на указанную страницу. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. - -### badRecordTo -Перенаправление, если невозможно удалить запись. - -Возможные значения - id целевой страницы или массив. - -Значение по умолчанию - пусто. diff --git "a/assets/snippets/FormLister/docs/ru/110_\320\233\320\265\320\272\321\201\320\270\320\272\320\276\320\275\321\213.md" "b/assets/snippets/FormLister/docs/ru/110_\320\233\320\265\320\272\321\201\320\270\320\272\320\276\320\275\321\213.md" deleted file mode 100755 index c9edeba8..00000000 --- "a/assets/snippets/FormLister/docs/ru/110_\320\233\320\265\320\272\321\201\320\270\320\272\320\276\320\275\321\213.md" +++ /dev/null @@ -1,32 +0,0 @@ -## Лексиконы - -Для использования лексиконов необходимо создать папку с полным названием языка (russian-UTF8, english и т.д.), в ней создать файл название_лексикона.inc.php: -``` - -``` -Для загрузки лексиконов при вызове сниппета следует указать параметры: - -* langDir - путь к папке с лексиконами; -* lang - язык лексикона (если не указано, то используется параметр конфигурации manager_language); -* lexicon - название лексикона, можно указать несколько названий через запятую. Также можно задать значения непосредственно в параметре: -``` -&lexicon=`{ - "english":{ - "test":"Test lexicon value", - "foo":"Another lexicon value", - "bar":"And one more value" - }, - "russian-UTF8":{ - "test":"Проверка", - "foo":"Еще проверка", - "bar":"И еще" - } -}` -``` - -После этого в шаблонах можно использовать плейсхолдеры [%ключ%] для подстановки значений из загруженных языковых файлов. Кроме того поддерживаются лексиконы компонента EvoBabel. \ No newline at end of file diff --git a/assets/snippets/FormLister/lib/FileValidator.php b/assets/snippets/FormLister/lib/FileValidator.php old mode 100755 new mode 100644 index 9be57b50..315a459c --- a/assets/snippets/FormLister/lib/FileValidator.php +++ b/assets/snippets/FormLister/lib/FileValidator.php @@ -11,9 +11,9 @@ class FileValidator * @param $value * @return bool */ - public function required($value) + public static function required($value) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -31,9 +31,9 @@ public function required($value) * @param $value * @return bool */ - public function optional($value) + public static function optional($value) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -56,9 +56,9 @@ public function optional($value) * @param $allowed * @return bool */ - public function allowed($value, $allowed) + public static function allowed($value, $allowed) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -66,7 +66,7 @@ public function allowed($value, $allowed) if ($file['error'] === 4) { $flag = true; } else { - $ext = strtolower(array_pop(explode('.', $file['name']))); + $ext = strtolower(substr(strrchr($file['name'], '.'), 1)); $flag = in_array($ext, $allowed); if (!$flag) { break; @@ -81,9 +81,9 @@ public function allowed($value, $allowed) * @param $value * @return bool */ - public function images($value) + public static function images($value) { - return $this->allowed($value, array("jpg", "jpeg", "png", "gif", "bmp")); + return self::allowed($value, array("jpg", "jpeg", "png", "gif", "bmp")); } /** @@ -91,9 +91,9 @@ public function images($value) * @param $max * @return bool */ - public function maxSize($value, $max) + public static function maxSize($value, $max) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -113,9 +113,9 @@ public function maxSize($value, $max) * @param $min * @return bool */ - public function minSize($value, $min) + public static function minSize($value, $min) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -140,9 +140,9 @@ public function minSize($value, $min) * @param $max * @return bool */ - public function sizeBetween($value, $min, $max) + public static function sizeBetween($value, $min, $max) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } $flag = false; @@ -166,13 +166,13 @@ public function sizeBetween($value, $min, $max) * @param $max * @return bool */ - public function maxCount($value, $max) + public static function maxCount($value, $max) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } - return $this->getCount($value) < $max; + return self::getCount($value) < $max; } /** @@ -180,13 +180,13 @@ public function maxCount($value, $max) * @param $min * @return bool */ - public function minCount($value, $min) + public static function minCount($value, $min) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } - return $this->getCount($value) > $min; + return self::getCount($value) > $min; } /** @@ -195,20 +195,20 @@ public function minCount($value, $min) * @param $max * @return bool */ - public function countBetween($value, $min, $max) + public static function countBetween($value, $min, $max) { - if (!$this->isArray($value)) { + if (!self::isArray($value)) { $value = array($value); } - return $this->getCount($value) > $min && $this->getCount($value) < $max; + return self::getCount($value) > $min && self::getCount($value) < $max; } /** * @param $value * @return bool */ - protected function isArray($value) + protected static function isArray($value) { return isset($value[0]); } @@ -217,7 +217,7 @@ protected function isArray($value) * @param $value * @return int */ - protected function getCount($value) + protected static function getCount($value) { $out = 0; foreach ($value as $file) { diff --git a/assets/snippets/FormLister/lib/Filters.php b/assets/snippets/FormLister/lib/Filters.php new file mode 100644 index 00000000..d5b56a7e --- /dev/null +++ b/assets/snippets/FormLister/lib/Filters.php @@ -0,0 +1,173 @@ +cfg, 'langDir', 'lang/') : MODX_BASE_PATH . $langDir; if (empty($lang)) { - $lang = \APIhelpers::getkey($this->cfg, 'lang', $this->modx->config['manager_language']); + $lang = \APIhelpers::getkey($this->cfg, 'lang', $this->modx->getConfig('manager_language')); } if (is_scalar($name) && !empty($name)) { @@ -70,7 +70,7 @@ private function loadLangFile($name = 'core', $lang = '', $langDir = '') */ public function fromArray($lang) { - $language = \APIhelpers::getkey($this->cfg, 'lang', $this->modx->config['manager_language']); + $language = \APIhelpers::getkey($this->cfg, 'lang', $this->modx->getConfig('manager_language')); if (is_array($lang) && isset($lang[$language])) { $this->_lang = array_merge($this->_lang, $lang[$language]); } diff --git a/assets/snippets/FormLister/lib/Validator.php b/assets/snippets/FormLister/lib/Validator.php old mode 100755 new mode 100644 index 20094239..6103622c --- a/assets/snippets/FormLister/lib/Validator.php +++ b/assets/snippets/FormLister/lib/Validator.php @@ -10,7 +10,7 @@ class Validator * @param $value * @return bool */ - public function required($value) { + public static function required($value) { return !in_array($value, array(null, ''), true); } @@ -19,7 +19,7 @@ public function required($value) { * @param $format * @return bool */ - public function date($value, $format) { + public static function date($value, $format) { if (!is_scalar($value)) { return false; } @@ -32,7 +32,7 @@ public function date($value, $format) { * @param $min * @return bool */ - public function min($value, $min) + public static function min($value, $min) { return is_scalar($value) && $value >= $min; } @@ -42,7 +42,7 @@ public function min($value, $min) * @param $max * @return bool */ - public function max($value, $max) + public static function max($value, $max) { return is_scalar($value) && $value <= $max; } @@ -52,7 +52,7 @@ public function max($value, $max) * @param $min * @return bool */ - public function greater($value, $min) + public static function greater($value, $min) { return is_scalar($value) && $value > $min; } @@ -62,7 +62,7 @@ public function greater($value, $min) * @param $max * @return bool */ - public function less($value, $max) + public static function less($value, $max) { return is_scalar($value) && $value < $max; } @@ -73,7 +73,7 @@ public function less($value, $max) * @param $max * @return bool */ - public function between($value, $min, $max) + public static function between($value, $min, $max) { return (is_scalar($value) && $value >= $min && $value <= $max); } @@ -83,7 +83,7 @@ public function between($value, $min, $max) * @param $allowed * @return bool */ - public function equals($value, $allowed) + public static function equals($value, $allowed) { return is_scalar($value) && $value === $allowed; } @@ -93,7 +93,7 @@ public function equals($value, $allowed) * @param array $allowed * @return bool */ - public function in($value, $allowed) + public static function in($value, $allowed) { return is_scalar($value) && in_array($value, $allowed, true); } @@ -102,7 +102,7 @@ public function in($value, $allowed) * @param $value * @return bool */ - public function alpha($value) + public static function alpha($value) { return (bool) is_scalar($value) && preg_match('/^\pL++$/uD', $value); } @@ -111,7 +111,7 @@ public function alpha($value) * @param $value * @return bool */ - public function numeric($value) + public static function numeric($value) { return (bool) is_scalar($value) && preg_match('#^[0-9]*$#',$value); } @@ -120,7 +120,7 @@ public function numeric($value) * @param $value * @return bool */ - public function alphaNumeric($value) + public static function alphaNumeric($value) { return (bool) is_scalar($value) && preg_match('/^[\pL\pN]++$/uD', $value); } @@ -129,7 +129,7 @@ public function alphaNumeric($value) * @param $value * @return bool */ - public function slug($value) + public static function slug($value) { return (bool) is_scalar($value) && preg_match('/^[\pL\pN\-\_]++$/uD', $value); } @@ -138,7 +138,7 @@ public function slug($value) * @param $value * @return bool */ - public function decimal($value) + public static function decimal($value) { return (bool) is_scalar($value) && preg_match('/^[0-9]+(?:\.[0-9]+)?$/D', $value); } @@ -148,7 +148,7 @@ public function decimal($value) * @param $value * @return bool */ - public function phone($value) + public static function phone($value) { return (bool) is_scalar($value) && preg_match('#^[0-9\(\)\+ \-]*$#',$value); } @@ -158,7 +158,7 @@ public function phone($value) * @param $regexp * @return bool */ - public function matches($value,$regexp) + public static function matches($value,$regexp) { return (bool) is_scalar($value) && preg_match($regexp,$value); } @@ -167,7 +167,7 @@ public function matches($value,$regexp) * @param $value * @return bool */ - public function url($value) + public static function url($value) { return (bool) is_scalar($value) && preg_match( '~^ @@ -184,7 +184,7 @@ public function url($value) * @param $value * @return bool */ - public function email($value) + public static function email($value) { return (bool) is_scalar($value) && preg_match( '/^ @@ -203,9 +203,9 @@ public function email($value) * @param $length * @return bool */ - public function length($value, $length) + public static function length($value, $length) { - return $this->getLength($value) === $length; + return self::getLength($value) === $length; } /** @@ -213,9 +213,9 @@ public function length($value, $length) * @param $minLength * @return bool */ - public function minLength($value, $minLength) + public static function minLength($value, $minLength) { - return $this->getLength($value) >= $minLength; + return self::getLength($value) >= $minLength; } /** @@ -223,9 +223,9 @@ public function minLength($value, $minLength) * @param $maxLength * @return bool */ - public function maxLength($value, $maxLength) + public static function maxLength($value, $maxLength) { - return $this->getLength($value) <= $maxLength; + return self::getLength($value) <= $maxLength; } /** @@ -234,12 +234,12 @@ public function maxLength($value, $maxLength) * @param $maxLength * @return bool */ - public function lengthBetween($value, $minLength, $maxLength) + public static function lengthBetween($value, $minLength, $maxLength) { if (!is_scalar($value)) { return false; } - $length = $this->getLength($value); + $length = self::getLength($value); return ($length >= $minLength && $length <= $maxLength); } @@ -249,7 +249,7 @@ public function lengthBetween($value, $minLength, $maxLength) * @param $minSize * @return bool */ - public function minCount($value, $minSize) { + public static function minCount($value, $minSize) { return is_array($value) && count($value) >= $minSize; } @@ -258,7 +258,7 @@ public function minCount($value, $minSize) { * @param $maxSize * @return bool */ - public function maxCount($value, $maxSize) { + public static function maxCount($value, $maxSize) { return is_array($value) && count($value) <= $maxSize; } @@ -268,7 +268,7 @@ public function maxCount($value, $maxSize) { * @param $maxSize * @return bool */ - public function countBetween($value, $minSize, $maxSize) { + public static function countBetween($value, $minSize, $maxSize) { return (is_array($value) && count($value) >= $minSize && count($value) <= $maxSize); } @@ -276,7 +276,7 @@ public function countBetween($value, $minSize, $maxSize) { * @param $string * @return int */ - protected function getLength($string) + protected static function getLength($string) { return strlen(utf8_decode($string)); } diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/connector.php b/assets/snippets/FormLister/lib/captcha/modxCaptcha/connector.php old mode 100755 new mode 100644 index 0348084c..f7db0129 --- a/assets/snippets/FormLister/lib/captcha/modxCaptcha/connector.php +++ b/assets/snippets/FormLister/lib/captcha/modxCaptcha/connector.php @@ -6,7 +6,7 @@ if (empty ($modx->config)) { $modx->getSettings(); } -if(strstr($_SERVER['HTTP_REFERER'],$modx->config['site_url']) === false || !isset($_REQUEST['formid'])) throw new Exception('Wrong captcha request'); +if(strstr($_SERVER['HTTP_REFERER'],$modx->getConfig('site_url')) === false || !isset($_REQUEST['formid'])) throw new Exception('Wrong captcha request'); $formid = (string) $_REQUEST['formid']; include_once ('modxCaptcha.php'); $width = isset($_REQUEST['w']) ? (int) $_REQUEST['w'] : 200; diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/modxCaptcha.php b/assets/snippets/FormLister/lib/captcha/modxCaptcha/modxCaptcha.php old mode 100755 new mode 100644 index 18652988..e2c79eb6 --- a/assets/snippets/FormLister/lib/captcha/modxCaptcha/modxCaptcha.php +++ b/assets/snippets/FormLister/lib/captcha/modxCaptcha/modxCaptcha.php @@ -11,9 +11,9 @@ class ModxCaptcha protected $modx = null; /* path to font directory*/ - protected $dir_font = "ttf/"; + protected $dir_font = "/ttf/"; /* path to background image directory*/ - protected $dir_noise = "noises/"; + protected $dir_noise = "/noises/"; public $word = ""; protected $im = null; protected $im_width = 0; @@ -28,8 +28,8 @@ class ModxCaptcha public function __construct(DocumentParser $modx, $width = 200, $height = 160) { $this->modx = $modx; - $this->dir_font = MODX_MANAGER_PATH . 'includes/' . $this->dir_font; - $this->dir_noise = MODX_MANAGER_PATH . 'includes/' . $this->dir_noise; + $this->dir_font = __DIR__ . $this->dir_font; + $this->dir_noise = __DIR__ . $this->dir_noise; $this->im_width = $width; $this->im_height = $height; $this->word = $this->pickWord(); @@ -64,7 +64,7 @@ public function pickWord() { // set default words $words = "MODX,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote"; - $words = $this->modx->config['captcha_words'] ? $this->modx->config['captcha_words'] : $words; + $words = $this->modx->getConfig('captcha_words') ? $this->modx->getConfig('captcha_words') : $words; $words = str_replace(array(' ', ',,'), array('', ','), $words); $arr_words = explode(',', $words); diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/index.html b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/index.html new file mode 100644 index 00000000..cfb7d0fe --- /dev/null +++ b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/index.html @@ -0,0 +1,2 @@ +

          Unauthorized access

          +You're not allowed to access file folder \ No newline at end of file diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise1.jpg b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59a06d65cde4d8c9a353435fa7e7f1fe1d9e516a GIT binary patch literal 9393 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 C#jeHx literal 0 HcmV?d00001 diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise2.jpg b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22c6759d9e4b4d552ad1d5510f59632ed8d8528c GIT binary patch literal 10565 zcmY*a60MF+DAQ)=n><>TzpaTGa z*Z*7>073;@cWXOOE2L;qK!p<|%`2N;+b{{u`+EG%p+EKD36 zTwEL+{QnCSG&D2}bPOC!OdJ9{96SOd!hawl`kzVvZSeoU^?!N)YdsGEfY|@!O`xFw z0jNL}G$6|JD4_J8J`5BTlz%$^3k(!AbWAK%01gTO?f(q?oB1Ef!~hg@6f{&c%zwhs zF#eHH{}C`qfTWlJ5VH`Opn@U`IhL-Ko;Ac%m?A7(NuM>#X&>= zxA*_7h5`VhlAtjQDxm9HT|&Z2TR}pk7^%Z^J6C#bifNu?;Vk6OYXE#Slz)2BfB-qb zW1%~uu9h`HvbBlc--ME^WPWwVo%|WlPbfUxj6|4sc6as)TvCgVH^MvkifOl@)L}0Xt@z-4=fK#N z9cDW*Il{d}JSUC9&5>;HPm<>!t|xA0dTduC5{th?m!}z0nXK*-e!n@7)~?O)=IfvP!R6ij~4q^m=A^%r)m^HZeLip)RJ$ z>|<5ySlN@unCne`U1oz5pkVvhp^Fo@uC(>ZXd(oKLW;gW{f|4O^_rZC(73d_*g|PD z0J0SJWyIHE3VTdO+C=*Cz?)NI3CsQ)AQ>Tx}q5urk@KIX-h$BMqA%#;cf#@f7%4&*0(>RuQD`1kI0OuY@zF zcQ&V1$5g#R={VEVk;-yuQ`xNI>znnBfWJW_>Cb>8)5Lb)+8J}xP8T^&aZ2W2xWs}& zUxL^=&FBo1SA-|_#bzo}Ddajv^S!4BMk7PbC?-0Q4BucjS2qdA9`@%dCHFx%N=^46 z8^$l4Zz)dyn$~SrrV_9z*lTj#Wn&3jj6wXBr`Lxr zyed-gg{^c|TZ1zCU2M=|jDrN&kfeQwG(E1kJ;hNyyA~9bJ4kp|Kg7xNhLK;V4~ihv zp^X_zm0?yq&`Toox9QSRc0AEDvHfHyor>)i()-t~6;#rFhg8`CdNIylSFdc$gg&V? z&JWseg&$N#aLV(FRD@Q{J4H2RX;gNxrJ<5Mbd8PLB`5RIyTjk(2{P@i{w`e_Sd4?C z&&)L(jJcT*Q!Gily6|*Q0jRWK@=squ?~}I7dXLuU6FzGP2IS}Uf6((};jlG}cT6_< zj5C?bvs6_|xG_+5#*Mp6sv#BAWESMz`#g7lykxXU3U^OB%_E)VIX!6;;a_Q8%ilrO8N*kzSRcpdk{#i?8zRNjH zSI`Nad9iOT*D3pVE3f{t^Dl2_k%D z@P5l1CV%L+R5UXrjE9VAFu26w>OlGpCl^Ph{J-oB@oRd8ONw08du}WaRD}B28U;%H z@~$;f{Tlu@XmgiRrlTi8e6*?{R@ZvsHuEdqkI`u}7n^oLxa%`O^RX}qWbEG`0m}5e z24w`UB6@}PqJjGY+Fa^(M+fax)VI2?6yx~B*@i)anjeQB}G>UygFv7oC0W zU??`g6P@t=g&q_RdP)DL+ul$Oi+63+rizX>zmlq^rT+Z>?JLM`kZ&Mw?y9Qr7h5X9?7rIT;0lomFvl+ zYNm$XNf8;Xy(z@g+TGX1!OW?m%eyZMpv?i9okl7)Ywntsy=N1D2K2Bi)Oc3$2G;wf z+5A4Sqbn4;1=2N1>=j-A646RISw9>N;Jx5|bXD_EcQKT9dg?7p(LJG4_{H}Ex$D_) zJkGuL^YVC4*y02uIU{O$I%;pFXyWWfNGCG70rOaK6%z%Hp3UdwYJxQjtyD}Tiini< zd#B}TVi#@3u9@Qv7Wl(NRw29d_UHOoT3=daHRI@i$O8 zbyRnFJLWI#zMHJ+6&Nss%l((Alc}Sz@a1>gM#f9%OSJoTi1JMz`;s5|6ae76z1!eJ zWoF8Xs56MZh4Zy(vd{yAR=|J=gki}S(`{C-e8L`1v^=2~ILgPc~aPiC9@fWmq@F{pK zx3mx)dp=t{TXic3Ivq2@eLV~s|E+s%QlR(nXZI?ttL8^>5mj>OG0Hc}f2BAyUXT49 zSh8kk`SF|QEE6J~n+BS!ZiO6I+7WuMQR~qplNvU4U07P-JfMSJliiM!2ETVyF(*g! z$+}PbB7GGlFPR@DY&!;tl$W2RX4`Ixw5H!3ml?r=e=A2oRy`+S!JGmoGWi5BYYDDY zktJ3WBhFto%{hHm-e$}rww0coS?M)=rMd{3vsjM`K_hD?H6Arc8vyEYbi<+Zq(&;^T}BlqL)mIy<*!Gi@s^8uR)NVE6$#yJ`L z#`#Dy@~8@OsBMD&dS6wKGAxqez%+2{qC`1!+>m=&dRrKId~OAKp<26{ZA{Lmi*^of zPNf6q1O2~5NFH7~ECj2plKAY)R*2z&Hd?{emrC9Kwb%XxgS0b)m_Z-4Y_8%s7OY$? zFWg5qp`;F~BoB6F6f4EP8kHG=F_j_Y=|=YFJq1l0+|wr{a$VS#WI*w2AqAnBwpm{- zQ{XLCbvAr;_VnOLOZQ5$Bf(fi=IaIQ^uvW%J8i>~@HKXU`07gNcx9?{c`gz1)SAje zHT4+)^tDf20B zRgpFFzHjaCmp|#6yUwyd;K1~<&cLX+%Pm~z8Zj6hjgJ~QWqowr6H81p1qVXPuwxM` z_4Q)Qr}8kCj&TrEL%FciOkUMlVByNgSMtFrlzlijm7A`bn#_ro( zj-?0Iqg5K>J)Z$wwbn&m6;smh+1msQAp`9I=qnQ4;gFN1lodAuI2sO)RfNq?rM^_* zEJ(l!4n+t{Lo`o;V@u4>E)%HM-$PYYUQfB`Td3gLRzb+^Xx3cuATx(q<_^ZAH`ZI; z!F#t?iB9#5^O9{^@rkG`>#KyP{&@<2Hu-x+y75*!1%!Zzv4JA@bcO!kBvr!X8>c4v9inr|yQm zc4gKIN6~R^k%Ne`N~e`}T+UA z!Lh~%2@|_5{%->Q-QqC`iE8YRY z2|?GXh+Sx2EQMjM&slYMnM685^mVJJ5ti)4BFvTyR*zu2fna(}Evwdx6Fm+Z1hx!Y%bX~j!@ z*xu^|NolZJzE?8H?D$Sz2;XeTL%hb+fH%xVWPBw5<~aA@mJc>UeG1Y{dSQr!4@RgInUtN7VvNLN(l^csi!6qYmcDHe?oYeC16vs{hM#tVWC|C_rCavjdVn8-;HW23FDU?=!uTM+dG23SRsHYldZ+lEiejjy`2%> z@wH< z1g`f+^nm)D1M$)8ru4l1-!hlU)m=x577f{o~%4`5Xc(z_E!xTMVYs^{xYn zd5sbK9twg9@vYAQlBbaDcqZjce`j8hCrf$F?rU4-D=JZv;IemoBUV*kwa)Sh@K8gMTeraqde5Hk5Lig~_T~u&3 zWZq4-O~8~c!m{7@L+1^VDX`aNEwfj15rn5lCET5R<-489Nk+&rY2$gHH4{N%-74gj z#?cG4+>ux)g`zpNto=-#5CWdx__y8It;*h(;>b_Lje>2|zGV3p*L?CjNVAnnDUka8 zrEp8s4mIr)x<>9>0seBS#~X7T0CN_t?jM07PVJb1Lt~rlu?0ksn|RQdYt~*YlwZN- zSwj_yFGeKxPyNNbcuvNa-EmJYJ&;?n)6=f=`MSL_wkxxxju2t4!2XbOqAy9Gg45S?Zga?hg^w$u`P8i z7PtCFU(#S(G(|1%i|cF+$V`zlvt(#nup@3D$6lO1EZ2ZPb=jyf!6TdfgFWJ$It^ye z5}JeOL>qbh^y&MWK8cbi;$o0KSIAcim_zfTUr>_A`Q(G6c?PK+YquS3Qo*3CL`MT2 zHUMn{TWz<;Y_LCsQk&Rr*z+Ae+F=6$IF?MleAF>BVX_0>F7LB9a7fpF$lr{Q*N=Yp5)I`*+^hP5$s*+s2dTs88QR)NCX2;QrM_ z``v+AabL?*cqwcEhbx$ex{|0q+&~f;H27hA z1#+B~acA09bc`%(mx9*wDW_7+{AG3EPj=Q_@QuA1>l|U^Om&9eDb?d#eX{PlWWghY zkMC@*7#4J9bGk4%jrGbKcBQsB`GB)_Jfs&#ji>)(FqiXqE6y0!C@eJN>^bzyjt{kckGcBS_% zzSGH_{S5bq-KHsby+jvi z4Mj?~kP@Kx%)lrQm0rsl#LBnigfdvk~uSp0(=~aA)CBGnyiqAuc64o+cjE!lG*@7$hD7+dU00nb@_Yqk8gia5%Gf3#Djl8SU6$ zd3FRaO=H(qI1I;|j9zrvyk+bP`RI-FIiO+wCW(52tpS(NLd##mgd>h1@cx^b$_QA0 zI9+JIS87Ai(wgioJ!+%p=`*00q)~V4h3j$MoxD#_pu{skkgVO5v9wKY1m^oxyX>}f z_icgZ*dMBPul*9YVpGnpbVywZlSWf^H56eZa7_Xq)gthsSS7j8@gTZRZf~MZCCMM% zuEMZxHR&w;^|osAWB!1h*->0HE217-a#aZhi96(YuU79aVkzI^I${bYnA>fH z50^(tc1a|>KK;Rx5}<7`Ubgb3!{>wO%xGsOVb$<`1h?LZz%w9a!N!?kWT9=;`vTUa z(EWilLv2dH>Wt71l7nO^kF;|PcSSE7|6S|d zsOx}lb*Gg}WBh*k`oyHb#m0sWV6|^W@a&Lw2!u^x@BUF5IGFuq=KLB}1qqrET4`DN4BW^|3UJ_1$h=DOyj)E7J2b@n_~Z&?92 zQ$AJ3&4$=b@sv$wefB|`fwaRqZF{Y}m7|$ltJpsYa9h@8WQB8aF2Zff(sm;@o86QS z#ECP<65J;+(VCI7JR7s~nHFuN{cNXja*5RxU%)jmQNpBG9pPf^pVg`m}@(kmY_4k%zW*?Xv(26 zm|tKkkkorBK8tR+8v~ngu2s+?fY^t?&*p%ADl){=$-R! zyi$_#rO0et2w{4q^n7ogxRKQ@_XShPug-^Q6veh=*J%CyJC-r3l3jA>~$I^5;jd4D1*)8YjzKn1jZaD zl#dI7)w%L1{cXkNy3QCH8+Kv#KdF{-U%48%fv94hN{A^#ZL%VpVkyD1a0XA)SMhEN z9FGNj<>vFMoX{)RxWT3Am_}`H8=z$1Z-F!p?ugSg`#16E>9C8JzgWWXnvlck!25%i{5eUeH-0|S1bZWp8?AiZeT1<1wJmzEoG{9`n*|` z^3d1sUxi+%H|6yc9BM}QBeG;&?LFH=ZI)23Fi6H!EA~V?&~H*KI{a;MSz=#)3yP_d zE3sD#A-cZxb)P)Mh<=SWgn`OEw%h0DxXdifs-I0>g@U2MZBftrTmQ@NlkOG+(1;^X zp3cw3b1&F6qVcFF#n~PVJ}F(~0+T^>DL2ngu?R@i%g!F4Op{H@g5ehQ2G0Pu9AEx4 zO70@uJjaDOH4*!~xDB<|#cz&LtGAdScxYs3$yZ zm#-h0Ai=CrW8>3u9%dZcy%fJKiW0*H!c)Nhxbi@TV7trzpnS=TEKm__`Tnifr@K$bT;ei5jmo zYSg;E238Dj?8`6u2kdGsvz zgNZUMAQ9EDR_r4!YHax7BAE9d5eMe<#=D4e@Azqqy`@x`znf_KlNc6 zvA12Ae096O?VjI;G}pmaDTCfoDsO0*eZJ&+-}wwU%SLMV-#v0}CW5L1*Qv5YT|ml_-da+~#4Y*-g`Pyk zmH|jO(e!#!UEjX2{7vgxBP3dPLT@_L`{Vnf8>^j^m{|7m^ju%k2P)&lE96=x09-8g z7R*5X%Yz`?gPC$Cy%(Cm?jlK>$)}n#kzs$f9#oEs3IiEvO?3~f97_kA7Tnw>{a&p1 zt?kmL(@Ut+?+rZbAsdqlE%|+DD_G#aebRL-u^rx>u7Wnd2=-3>9vhMn|d)W3m7g)w*~~p3a#Pb1YS*bZ`^UXPa)4+-@Ez< z_t|MG08q6{J_*L|L}&Qgkq9U# zzJCTV$w!LnWF4uktdGU8%TI)=P+^Y6EM6bv^$eA7Yy5bzw^Xu!{0uNG&)U!HwtK0W zv^v7{HmMy7W*YsRQtZzn7n5+-stfi+e`9Tr_iGQTUE7Oc*TuBHQ zcIT43c@*h{EENheIrdfr$G1ett9+zp{>!#&E^E{Kk;D!6d;^%9Ra}<&vdYW?zqvAC z*ZYLvvkC6ozE5XD#gyyc>CWcQklDikS(avBTW?b{5)n`8iX1s(SZ4*=y#LXi6%@uEp8fjOfCf7#R};aIDoL z)qXs6)7hfiHk8mMjA4kP{=!Z^P4PC4fOT5YU_1!HkrnUl^zLgA=H(s5g~ z^f*P9H8~<}`M#xtiCh(}v|n^(AL3OCkjX6BE_0&vT8~(2A5-J0sJ*X+WxSX;h<@?E zJ9WQc_F|fxBeYeYWBD4!Ry$iI#;=?;9G@t)9v;b#DHV&u(HcN0V%?_GAJ`^GXC2N{ zq$-?T88P$H&VaiPzgvZG)koIbbri-zw~p}WL@J_qHIx^8cozwxc(+l1Cekc_AnLsV z-I768-1gUrGZ0&rU-aFS3NeWp_Wwp#>SyNLfTAs~v~z1-sKaHU9}}>gvJ>AJjy0zm z@9Ff4S=3OS^(~b6)4GQ2vlE>6_Lli39XVphYNN&1nZ7Z-rux-=Ht_%@o*nD5$2pJayvmjSEkCk^7ibDVgx@=j- zp(o0Ick`Y3>KDJ5L9uB9<`~!4*R7UfW+!-IE_sfNWPtQx{SqK6aXmz$nL5l7bU{Sl z7!7^FmhLgCVv=^}oO*a1Wmi0Qf7{V5j*reJWGzG!L<|q#1AJ2=b(>amFdYh;&!qjU zo7wl!1#$Bqc?bGChi=!ndDJ2W)~*Qc(W3*{!$(gNI!+}`%?LO4nyTP3+c~~(mq><) zUW%us(`ZKFd+buu^ihe7wTX;&ziHDxKa33A?wvMB4&M)oHRjPk#DPwT5zODulvQnU z>`Fd@iT_X6o-pr9dm%w?iYI?T*V3 z38RcQM=_ZOU*gnGfy(%-+Yux#w;QA-Me#$?c0abYYR)a^pvF4qZ=uvt)DMW$_bxsP znUx?R?N=>3Pnxc{$9{{i%}BRO8pmn5*vu~Irx)lJ`m_5jLR1I+6yp%ybHHI)w1lfQ z_)Wu^gY&l08rL6{K)>m($H$MkKcvu7ZOt|}Ut~9Jpt7r^ri7rYNgZa#T@{I*W+%Tk zc%3myWONMbWb}1?g?|_631geLfR%d%|J_O0SErT?AybyqF`%i81@7cWj$9XKB<7vP zPI?!4tKJ>jTI~JyJ~1s+2BWh&CB3Teo2gss#j%$~PaJ1(dgJYC>N-x375b3@3vDP& z=F6a+5W-npxpx6VF98ar3N0n+DUqm;N1BCX*T0ZRz<-^6e9E?>*p+ESqLt}Wj_cJR z<}Td)=tf*i^bnxJSJ;0jmOxLdJZ~{mQgM!oq5H10+IDv)T@s;QDR{){%Ff6`jTzxs z^(b#brrF8ApgeE9nVwQOP#r(v*jQ6lUy8fS(o&g@5s|MG9=2O(+dYY*+Jz=11*b6p`5ujRj)2QX4 zXjBh!LSV`p9?X}gp?dd+Xep%UQ?$jO;r7EA^XHT9)n zMo67bE+e)*S#|@hFltb?HC3$G(gSJh7sW}3V0su0#X_cZe>C4iAQbVzJ+R<`f%i*s zskgS~zXTdHM_&q;>i;It%)b2Nm47kry|(6Plodd2bG0k?ncuAN&NXw`b^}1(`St4NKv7BK5$u;g;qhwueG+yCFvgU6E8*}8&QV;cNwW5urW{bO+eeY~llyJSb}XxIdhSfL2)eE-|0 zOwa7{drwBeB9BS^dAd`3hB5Sqpi_7F3|I_dS1nRPP)meHea!cW2Z?Xdu%!ww2^hk=CpsBMeN>v zAaxMUo;+$PXDP7b+4~+>rgWX7tm9`buaE@~{X(R;Y<}_KnVg{so{#db^&$O3urBS3 z*v@Nauv6)oz#B?ld!b0wd4DF`2|lM2+d30#BPQlR6YK5vP8T)mK2paS=NFRTmwe~y zLhMsw@?uFsd!Gg?TiheV0rM;Z4w3r*4)u7@5b7E&jt0E9+MVK5Wp5o3ymQa@M%`&p z6uawem;H>J+d<1Zj;Ys&=Al)N+ciCdf|55*FCmmxt%dk#v_pg7&D9@GQ*A&R^{L|^O}61N=E90 zbk{)*G_fj8v#*v%N<9zTw}KG+S5(lMaVfQGDecvneIE=1b5#0$JSL-%!yINyiN}~v zbg!f`nV(=6LHszzQH{HDQf31|cQ(rt(X|dG5-^-JYiXX0_zs(hqz}@n%m_o}*~F>C z*4@Bw}xXMnaXI;zsnX0jsj+Dwm&&hPkiiA5wncWPSJJK+_}9J`hH d`i3JKrN@ua9_eaYPt+GrpJMiNQI?-q{~sPf1`z-N literal 0 HcmV?d00001 diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise3.jpg b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d26d3ae23e58798a57906ac2ef75fc99973e2ff GIT binary patch literal 6924 zcmZ{G1ymfow(j6AgB2-Iyg-5CPK&$4;80v=aHl^G#TlT3Lvf1B;Lzd@g~7GJK#}4U zDSA2QzI)d?Z@u?rtt9(PcJ`O7tere9K5YPqRTPvJ04S&cfX#COJRJgna^BX?{s0sJ zIsgFBdZvy6gwi&yR<;0}?q>$&X$24gK>c5!J@?SipKCO94D^2i0~6!lz{JGD!p6eF z#KFPE#lgYH!9uslaaK}AQ!L4Ef7 z?|3MvKr{wk67=Wk?x6+sJ=2V&P?=3WE3#9a2L7{@!d@n8W{jt006rSZvtl$L;2q$u zDPx=yxG^=W;JL%dkr6ZnsT}jE$cule{4d;9cuY*#U8O z=&3LPYA zMPmL`=VqkWXt$(pHu`SGPWf;IgLXlq#Cj$4_H{Q0hd2cCx#(VaNtBJXBA0&+I)pi) zf)JaG@My#3IK)kG%Y0Wa^15(`)GaQ*gPes6I$sR;U7n_B;{QXvtn$xGu4PT{eDZGT>oB`p@1B(7@p%W z+A~MWa`Lf@^aU0-B$JU<;|T!db)VT8*~-&6mXo1k_*h7zaY}<%T+Jo727H@fH27W1 zr!16-mEZOqEj7MGwk;$2E>X19!H}QNly8!>x$Iq#*wNhTYfLuSNTruz4?h(dude$! zOW#;T5j*X0X^7xU3+fQ2vs=|p^B)?YhZjNa^BT{SUB{0$C%j9nro2y# zkW-CX7uR%as&9VW>HoE@NQj(9b+REQYS<#DnsuzM1=kvz?={VT-O^UoW!*W449KuM zMXbidK(R3>%y_Ku2L{hifMDv+!8;X4RUIh<)9#Fy6WB&P-U@@2FHB*=Y!n)L!#-FjYA)4U+y{O6SYE+Z(5b5#g7SSY><%odnJx1|vH0={;tk$jYMRF!C@z=HgxBJZJ1O;p%S=K?!_PEI~FMsi^+^FnpwuesJH^OjhT z<-MCPD)kO8SgY+b8~!QSs7%ZjvuYrYBaT#_kgKB7p&~OJEQNnn(3Nf$#3y9|Vz1~h zemOwI;4+EQ4588RsL@z(POw%8+Mwe^16@Bhvo}f$CN`7z_1KKQ;N6)OQ(&mKmHKkz znmyX%pYjOC=+A^YC**4^O>xsC4K;+FSg9t|aDO&8ZHgW*tj~A%g#-=WrBbDjDag5i zKy(7qqd{SxF;b41TVHm#q|&W_IY9cJ&nF7LZLJtKdMWiQod+l+6i7vtu|uqaxwYQo zoCu?e#`#@Nv_rl2Xf-Fr*uphOdm*xvFadUf%U{P)G0NCiLtm7l+)Y9^b(P$BGb{D?4I)JyKfBUJxVG@&;0-2MjWT!T z70}J2AP<(DmfJfuvlgLm+r66&P%E2jQaX%eJF(Y;rU99#t^I>hymFI0-uV?z0KX79 zua1*g(@zm+ly+D66B8kQ-K%_VR5{-$ECOD}v~r9LQeI66wb1Ryi~XUeiF$vjr8?tA zHn9c5{bZ7IYs=_^hZBmjz9K)8P}M&qn#{FZ+~O>uh`oHL-#aVay7NiD4~C2A(U0A2JfY=O(q<+Au-nhq@=y zcgOnTf$VRpeQ#)zWAZ&vU_6(>NBB|12JC2Y1(TlsbtK!PKKi>S||q|dFUOLGSwXKZ1LvQHRex-IGW6V;sOKK z;fgiOHfnZ^6cpZ!{OAZ90~N)OwtjVl+vP|^P8Mj23%KL3qUz1#TRk!=R;eN2r(1A- z#OL!dHUqc=9$zil?rt2hv^ld*u!)u_;5*Pec9orfDaG(-iv9Q!v>wPc*Hrc>K?=!g zuNx~cXyK-4bNbb!JW~fdRM>(T6Dsi=p6bby7*V%g&1MEes;h~{OFET5O0u}p2O6z> zcSX8S9XtUHETrkl9@PUn+Ogf6Q|DUar2ZOS(VEUwrY4e2SY@Es$?n8CuL4NuK!HWq zPBZKB##4pAHGlPq&8J;(T%G%R9~|!$a8Qh_h{&Y#yMQ}c*C#~L)3&D*l~#hKD%cuq zgx$UpAbkleB?ngOwcFU38`QVG1vu@7z&iIy69%0AsU#a~q*mH+ROvVjG%6SM`Um(? zIM#|gQ0NzVEhKj^jj4oV(|8wg;dRfRTwqe#y)G|uKG0Pk%wOZ>xg{OpP@07AI$B;) z)5gU8!#-Ext_C@$0ovGE`z6Shzq0|(>v264Ff>w6TeY+H8;3I8g_%pU#s?B_REjZ0 zByJFsz~G4Ut8}mSm~i9kzoaFd7aR18*-306*k}9#%Sq##V>GQ$DUJqDPV?W(1ji-A zi3EK9bF;*}2TgK9af1FzpGJ$L9=J?|)rGmNkJvq!N8{eHaWXXbYRC>Ny&^x~kRoNjJZvW^YJ z)_r@VSQU1F>Uu;}hycnLPH5vzP{c^Vm;k zI~+VyXUR}R%kAikt;Z}c9}54DKv97Pqs)7`AR@9ncdrkqzp}zhq<*xlnCTCuR2ZF6 zr!ugr*|+NuU$#xf>vM53FluMup{qHXXDwTqK90^P4Xwzh^LZ6SRb4Pp-d#G{$c#@G zq)@BAvT84Gu=!G2t!Bu6aSdA^`b8d*DOizZ)5Hr;VBRXJefX>d!>#hF uIgqjM? zltbG4s~SE=!oA-}EaB+DkXfi)LJX#*^(ISI20l z{wS;1C^(1`8P@ZdK}bohkPt@^}sQ(;5O0xu-tRRs5%)boUAK$N-a|;>gOIdkp$7+adA^AweV^B-5kJLO{ z<}?k6z)}ygd6>VS0QqfhejJ1OUZ9VzP{(jVDoU+i{bCIQb7)8)3WmB1&0r^C8pDpc zq;Ydew1y&o1i9syR2VqlZs&~@PR@U~YmVe#-jdl4SDjK|AjzmdO+2RZhF*C$uGTpzjf=G&@)(rJs!hIwWDj5<^_w@ADsAL{#9Nd`dnV0lfbBT0OHS_csIxH{c!z_!6e0F?(grfl0l7@Kb zF7-oRV%KJqm^lBqe8?)k20a?7s(iMfuEk8O1m%+uI%7a5Ag>XO$lQp(#seNL$%5qR zqC!9&j-rI$R>vGaw<8NJnj098xvc|M!L2P7-ys5;d9{j3FS_ToCBB0n-laz8M+|r0 zy4>SuJcOMC&OR=xS=*N?C!{RC@W~6?yJWZez8`zpCov&H>H``c1v}X@6Rxf*W=g!w zxNwE6L}PLCrQsrqcqs95)c8vRHPVE!p}=JuV|W9nGk@axB1v7g^T$%U(Q$VFKgfb8 zmVp+_ZMs)8IG8ACPk;;=z{)p~)njymR<2o1zE>UwGb3j{x^4w<`-KV#Y?@iRWMo+L#*MdLI3X)v zQe97Cy|yoI4}HLD^_E;i`iD^pB9^386EN^w-n5&~V=x!9uUHZtYOB8`3^ZgB*kyY{ zc)Bbptty{)RI1jP{-Mv=Dk8V*t%p?R@QQe_`>;)Wg_adAUio4@5>7++asX-Q?%)9gxG-{b%q(y|( zAK}W?_dl!^b$#G2K?89+)~q9-_a>^X<8sYZEwzz;nL*M#gON4W%f%HS?yc0hi1e&K zWXCz;OKB_NXwEjfR;T-pJlp4mvc$IZRF&H7h-BvP;U-aqvWM4QIeZD)2Zz@{(2mJh zg6*0#*>C9ThnBa#a*o32d^x^%RCSo|CWto)o4@|1fW3KQJs? zN)neCf{~y#FA~%Ztj1O&kz*Fzza;)$G0Rc!9kdrKdDPT0RScu7^?i5V{%0%NU1&K@ zOe42G@Golm>+KT?DM5;xlY)?{Jpy+85;8pt$JnEp=zWrTU|s&QrLVWrv?eYO_#NTJ z0%uKy-ud_*fxm845(yuF-@TVy20|1!bM{S7t|8{Xo}_?B{#85&c9Vkm#LNuxE+?+D!CfdD{N=k7~%d?tM8rQaYV$_e{PcM zUiOg>W%rD-)j5~y?Ww27>%% zkFf7{#Yt(QePui;F%+qc3LcocJ1h-%3n8HM4@7vam(E2-Rb@x)8M$k%yGpBkyxA$3 z+s5^}EXY^#PQ_s+3Ru>iuft-1qljAcbicUBfYu}f!R(_VoHeeWniryPS|$wmJ*|AH zt*0?)Z|>8A!Vzlio8H#aVW=$NH+vm(bAJQ4+8a#_IE-6T2}}$;1P!J`<3DS?t!^TU zG;a@1og2&N&IP;j7kehfkkVr^Q@++yawmZg#)puXQ=mCuW8W&|+ZBGWF8}|ZDQZv@ zE2~LARpB5v{(zbi*M!zJGTmKY99uk$WzNx5SSMFfEUg>4^gm0;L#arum15Yf_7E`T zB7ITiyw)<(0;%LyB{a(m4bvrE5cf=|$0ZQxG!ct0s3ZH{xewNu z=1fhhwRw0i$OTdkDZ|x;l_0QVsSw;>hTd&fOpkp@z7zGFotw$vS6AnF?=b@+XP!BJ z0wfj@b@0kU#L{Py1vf|A(;mi)^b^pcIsT!p0+$ad+tn+on__;!EXFJdnFh>;OwqAK ztpCmAy|%g5j7fKK&>YLOctk+COUPD5MFI&C`|%(V{?lc*C8?vQ_CTo+y5M75hMXgCv&F~i>Q}gx_EAsM z0rNF8TVW=rQ{#|JN(5^ys3(+&s)7VmW0L~=%HwLHS${P)<;NtYRL4O>rIWbC`f z>6VkUhhXyG5cSjP^RyhcR9M=HF|U(3dQNt6LdR&vch%p*%y7lcwV8#_pZ=Q%awo($Gv~Fm_);-mXAtCeUb9^OZ@=_)o z0JqMOzgDVw3>64A&{|uNEOe@e36`OMtG<~U6;Dvh%N_LJ(|rOold~JWhNEiPo%z4? zAZ+o(D;`qz{xl1rsY1%YyI95#gDieJ)m3y|niUfwPK*ynh5Ua&S=EB3l+I3{PcqeT$zvwBn*xm5fIWjm-eaT&9ei%TU)D~Qpm46GDD8J{Bqy4ayJ7V#blQuu3*9OE_ zQW8I5ZzRRXLZd_LRC2?vJsi-w`r7CPk&-Sb^-C0+!AHehdaoHUlgl<=>tf1u!tidC zkXq)tL*ztRLY#=8p)b2XS;6@Aj~y8c!1RHl?CfPItoJ8)V{ueo^}r!7u@ zCqZ=#a*^}6=8I5k=D2FJBxr7!X-c4+fCEhj?Y-8A2jQiR))g2x4+ae>z4vL&2j0q; z{v;iYc~e64ANu_WR2L5Tc>-meylZ+_yo-N-hPsY_Q5aILY{;az$IidKvS8b+!>fqL zGxAodY5fEzC&NM{q`^i#wrnvQ72d0$PT0n%pHCx)ox{iAi`|!Rzq*6cIBO54!nBdT z6sy*$jm?kZEU1?L9zQczMahLnrNZk7@gMV`+^ICN#h|s>_dbtvv^{Jz*=z31R@eB% zuhfFLH%4!q@s1ypLa>6>uh}YROd`C{L<8U9@V^xu!ObtLtx zy?9vVv+{^{XSll`JsB0$f1DUqMBIrDed(oj{h4z0oa8d)X-UlwOJm#o6zLsm$5*eF2}LINxKQG2ea zqqDJ;7B4YK0>Iv$M(r^KC6R>(>wR zz2CB9n=hKz>?y;%9^%4Al?GKZR)|3eXm3q=A`ndgc2;|IWC2j&K%URGEBe452-RzFd9Abo?7! zpUK;pI==+)KGLMkSeG*Nx|Nrsta{O_!dE=C~`>BYKe0pw!SLiVynf}Ln=R-t5 ep4_a+`EGe)Nrv!T`Flq#>SSs(YV_czrT+q%v%cp5 literal 0 HcmV?d00001 diff --git a/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise4.jpg b/assets/snippets/FormLister/lib/captcha/modxCaptcha/noises/noise4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d103cf3dd0437104398c104d0af7bec13b7446 GIT binary patch literal 8259 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 literal 0 HcmV?d00001 diff --git a/assets/snippets/FormLister/lib/captcha/reCaptcha/wrapper.php b/assets/snippets/FormLister/lib/captcha/reCaptcha/wrapper.php old mode 100755 new mode 100644 index e1b05b4b..5e584590 --- a/assets/snippets/FormLister/lib/captcha/reCaptcha/wrapper.php +++ b/assets/snippets/FormLister/lib/captcha/reCaptcha/wrapper.php @@ -44,7 +44,7 @@ public function getPlaceholder() { $siteKey = \APIhelpers::getkey($this->cfg, 'siteKey'); $type = \APIhelpers::getkey($this->cfg, 'type', 'image'); - $size = \APIhelpers::getkey($this->cfg, 'tabindex', 0); + $size = \APIhelpers::getkey($this->cfg, 'size', 'normal'); $tabindex = \APIhelpers::getkey($this->cfg, 'tabindex', 0); $theme = \APIhelpers::getkey($this->cfg, 'theme', 'light'); $id = \APIhelpers::getkey($this->cfg, 'id'); diff --git a/assets/snippets/FormLister/plugin.userHelper.php b/assets/snippets/FormLister/plugin.userHelper.php index 3b646abd..a94f058f 100644 --- a/assets/snippets/FormLister/plugin.userHelper.php +++ b/assets/snippets/FormLister/plugin.userHelper.php @@ -7,7 +7,7 @@ */ $e = $modx->event; include_once(MODX_BASE_PATH . 'assets/lib/MODxAPI/modUsers.php'); -if ($e->name == 'OnWebAuthentication') { +if ($e->name == 'OnWebAuthentication' && isset($userObj)) { /** * @var modUsers $userObj */ @@ -21,7 +21,7 @@ $userObj->save(); } } -if ($e->name == 'OnWebLogin') { +if ($e->name == 'OnWebLogin' && isset($userObj)) { if (!$userObj->get('lastlogin')) { $userObj->set('lastlogin', time()); } else { @@ -38,9 +38,15 @@ if ($e->name == 'OnWebPageInit' || $e->name == 'OnPageNotFound') { $user = new \modUsers($modx); if ($uid = $modx->getLoginUserID('web')) { + if ($trackWebUserActivity == 'Yes') { + $sid = $modx->sid = session_id(); + $pageId = (int)$modx->documentIdentifier; + $q = $modx->db->query("REPLACE INTO {$modx->getFullTableName('active_users')} (`sid`, `internalKey`, `username`, `lasthit`, `action`, `id`) values('{$sid}',-{$uid}, '{$_SESSION['webShortname']}', '{$modx->time}', 998, {$pageId})"); + $modx->updateValidatedUserSession(); + } if (isset($_REQUEST[$logoutKey])) { $user->logOut($cookieName, true); - $page = $modx->config['site_url'] . (isset($_REQUEST['q']) ? $_REQUEST['q'] : ''); + $page = $modx->getConfig('site_url') . (isset($_REQUEST['q']) ? $_REQUEST['q'] : ''); $query = $_GET; unset($query[$logoutKey], $query['q']); if ($query) { diff --git a/assets/snippets/docinfo/snippet.docinfo.php b/assets/snippets/docinfo/snippet.docinfo.php index d843a3ed..7d6b355d 100755 --- a/assets/snippets/docinfo/snippet.docinfo.php +++ b/assets/snippets/docinfo/snippet.docinfo.php @@ -3,39 +3,69 @@ * DocInfo * * @category parser - * @version 0.3 + * @version 0.4.1 * @license GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.html * @param string $field Значение какого поля необходимо достать * @param int $docid ID документа + * @param int $templid ID шаблона документа + * @param int $limit Максимальная глубина вложенности для поиска по шаблону документа * @param int $tv является ли поле TV параметром (0 - нет || 1 - да) * @param int $render Преобразовывать ли значение TV параметра в соответствии с его визуальным компонентом * @return string Значение поля документа или его TV параметра * @author akool, Agel_Nash * - * @TODO getTemplateVarOutput не применяет визуальный компонент к TV параметрам у которых значение совпадает со значением по умолчанию - * + * @TODO getTemplateVarOutput не применяет визуальный компонент к TV параметрам у которых значение совпадает со + * значением по умолчанию + * * @example -* [[DocInfo? &docid=`15` &field=`pagetitle`]] -* [[DocInfo? &docid=`10` &field=`tvname`]] -* [[DocInfo? &docid=`3` &field=`tvname` &render=`1`]] -*/ -if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');} -$default_field = array('type','contentType','pagetitle','longtitle','description','alias','link_attributes','published','pub_date','unpub_date','parent','isfolder','introtext','content','richtext','template','menuindex','searchable','cacheable','createdon','createdby','editedon','editedby','deleted','deletedon','deletedby','publishedon','publishedby','menutitle','donthit','privateweb','privatemgr','content_dispo','hidemenu','alias_visible'); -$docid = (isset($docid) && (int)$docid>0) ? (int)$docid : $modx->documentIdentifier; + * [[DocInfo? &docid=`15` &field=`pagetitle`]] + * [[DocInfo? &docid=`10` &field=`tvname`]] + * [[DocInfo? &docid=`3` &field=`tvname` &render=`1`]] + * [[DocInfo? &docid=`3` &templid=`2` &field=`tvname` &limit=`2`]] + */ +if (!defined('MODX_BASE_PATH')) { + die('What are you doing? Get out of here!'); +} +$default_field = array( + 'type', 'contentType', 'pagetitle', 'longtitle', 'description', 'alias', 'link_attributes', 'published', 'pub_date', + 'unpub_date', 'parent', 'isfolder', 'introtext', 'content', 'richtext', 'template', 'menuindex', 'searchable', + 'cacheable', 'createdon', 'createdby', 'editedon', 'editedby', 'deleted', 'deletedon', 'deletedby', 'publishedon', + 'publishedby', 'menutitle', 'donthit', 'privateweb', 'privatemgr', 'content_dispo', 'hidemenu', 'alias_visible' +); +$docid = (isset($docid) && (int)$docid > 0) ? (int)$docid : $modx->documentIdentifier; +$templid = isset($templid) ? (int)$templid : null; +$doc = array(); +if ($templid !== null && $templid >= 0) { + $doc['parent'] = $docid; + $limit = (isset($limit) && (int)$limit >= 0) ? (int)$limit : 10; + do { + $doc = $modx->getDocument($doc['parent'], 'id, parent, template'); + if ($doc === false) { + return ''; + } + if ($doc['template'] == (int)$templid) { + $docid = $doc['id']; + } + $limit--; + } while ($doc['template'] != (int)$templid && (int)$doc['parent'] > 0 && $limit >= 0); + if ($doc['template'] != (int)$templid) { + return ''; + } +} $field = (isset($field)) ? $field : 'pagetitle'; -$render = (isset($render)) ? $render : 0; +$render = (isset($render)) ? (bool)$render : false; $output = ''; if (in_array($field, $default_field)) { - $doc = $modx->getPageInfo($docid,'1',$field); + $doc = $modx->getPageInfo($docid, '1', $field); $output = $doc[$field]; -}else{ - if(isset($render) && 1==$render){ +} else { + if (isset($render) && true === $render) { $tv = $modx->getTemplateVarOutput($field, $docid); $output = $tv[$field]; - }else{ - $tv = $modx->getTemplateVar($field,'*',$docid); - $output = ($tv['value']!='') ? $tv['value'] : $tv['defaultText']; + } else { + $tv = $modx->getTemplateVar($field, '*', $docid); + $output = ($tv['value'] != '') ? $tv['value'] : $tv['defaultText']; } } + return $output; -?> \ No newline at end of file diff --git a/assets/snippets/phpthumb/phpthumb.bmp.php b/assets/snippets/phpthumb/phpthumb.bmp.php index 82d9ba39..241d2ba9 100755 --- a/assets/snippets/phpthumb/phpthumb.bmp.php +++ b/assets/snippets/phpthumb/phpthumb.bmp.php @@ -20,11 +20,7 @@ class phpthumb_bmp { - function __construct() { - return true; - } - - function phpthumb_bmp2gd(&$BMPdata, $truecolor=true) { + public function phpthumb_bmp2gd(&$BMPdata, $truecolor=true) { $ThisFileInfo = array(); if ($this->getid3_bmp($BMPdata, $ThisFileInfo, true, true)) { $gd = $this->PlotPixelsGD($ThisFileInfo['bmp'], $truecolor); @@ -33,7 +29,7 @@ function phpthumb_bmp2gd(&$BMPdata, $truecolor=true) { return false; } - function phpthumb_bmpfile2gd($filename, $truecolor=true) { + public function phpthumb_bmpfile2gd($filename, $truecolor=true) { if ($fp = @fopen($filename, 'rb')) { $BMPdata = fread($fp, filesize($filename)); fclose($fp); @@ -42,9 +38,9 @@ function phpthumb_bmpfile2gd($filename, $truecolor=true) { return false; } - function GD2BMPstring(&$gd_image) { - $imageX = ImageSX($gd_image); - $imageY = ImageSY($gd_image); + public function GD2BMPstring(&$gd_image) { + $imageX = imagesx($gd_image); + $imageY = imagesy($gd_image); $BMP = ''; for ($y = ($imageY - 1); $y >= 0; $y--) { @@ -83,13 +79,13 @@ function GD2BMPstring(&$gd_image) { return $BITMAPFILEHEADER.$BITMAPINFOHEADER.$BMP; } - function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractData=false) { + public function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractData=false) { - // shortcuts - $ThisFileInfo['bmp']['header']['raw'] = array(); - $thisfile_bmp = &$ThisFileInfo['bmp']; - $thisfile_bmp_header = &$thisfile_bmp['header']; - $thisfile_bmp_header_raw = &$thisfile_bmp_header['raw']; + // shortcuts + $ThisFileInfo['bmp']['header']['raw'] = array(); + $thisfile_bmp = &$ThisFileInfo['bmp']; + $thisfile_bmp_header = &$thisfile_bmp['header']; + $thisfile_bmp_header_raw = &$thisfile_bmp_header['raw']; // BITMAPFILEHEADER [14 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_62uq.asp // all versions @@ -108,7 +104,7 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa $offset += 2; if ($thisfile_bmp_header_raw['identifier'] != 'BM') { - $ThisFileInfo['error'][] = 'Expecting "BM" at offset '.intval(@$ThisFileInfo['avdataoffset']).', found "'.$thisfile_bmp_header_raw['identifier'].'"'; + $ThisFileInfo['error'][] = 'Expecting "BM" at offset '. (int) (@$ThisFileInfo[ 'avdataoffset']) .', found "'. $thisfile_bmp_header_raw[ 'identifier'].'"'; unset($ThisFileInfo['fileformat']); unset($ThisFileInfo['bmp']); return false; @@ -252,9 +248,9 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // DWORD biClrUsed; // DWORD biClrImportant; - $thisfile_bmp_header_raw['width'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4), true); + $thisfile_bmp_header_raw['width'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; - $thisfile_bmp_header_raw['height'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4), true); + $thisfile_bmp_header_raw['height'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; $thisfile_bmp_header_raw['planes'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 2)); $offset += 2; @@ -264,9 +260,9 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa $offset += 4; $thisfile_bmp_header_raw['bmp_data_size'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; - $thisfile_bmp_header_raw['resolution_h'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4), true); + $thisfile_bmp_header_raw['resolution_h'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; - $thisfile_bmp_header_raw['resolution_v'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4), true); + $thisfile_bmp_header_raw['resolution_v'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; $thisfile_bmp_header_raw['colors_used'] = $this->LittleEndian2Int(substr($BMPheader, $offset, 4)); $offset += 4; @@ -368,21 +364,21 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // BYTE rgbGreen; // BYTE rgbRed; // BYTE rgbReserved; - $blue = $this->LittleEndian2Int(substr($BMPpalette, $paletteoffset++, 1)); - $green = $this->LittleEndian2Int(substr($BMPpalette, $paletteoffset++, 1)); - $red = $this->LittleEndian2Int(substr($BMPpalette, $paletteoffset++, 1)); + $blue = $this->LittleEndian2Int($BMPpalette[ $paletteoffset++ ]); + $green = $this->LittleEndian2Int($BMPpalette[ $paletteoffset++ ]); + $red = $this->LittleEndian2Int($BMPpalette[ $paletteoffset++ ]); if (($thisfile_bmp['type_os'] == 'OS/2') && ($thisfile_bmp['type_version'] == 1)) { // no padding byte } else { $paletteoffset++; // padding byte } - $thisfile_bmp['palette'][$i] = (($red << 16) | ($green << 8) | ($blue)); + $thisfile_bmp['palette'][$i] = (($red << 16) | ($green << 8) | $blue); } } } if ($ExtractData) { - $RowByteLength = ceil(($thisfile_bmp_header_raw['width'] * ($thisfile_bmp_header_raw['bits_per_pixel'] / 8)) / 4) * 4; // round up to nearest DWORD boundry + $RowByteLength = ceil(($thisfile_bmp_header_raw['width'] * ($thisfile_bmp_header_raw['bits_per_pixel'] / 8)) / 4) * 4; // round up to nearest DWORD boundary $BMPpixelData = substr($BMPdata, $thisfile_bmp_header_raw['data_offset'], $thisfile_bmp_header_raw['height'] * $RowByteLength); $overalloffset = $thisfile_bmp_header_raw['data_offset'] + ($thisfile_bmp_header_raw['height'] * $RowByteLength); @@ -481,8 +477,8 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa case 8: $pixelcounter = 0; while ($pixeldataoffset < strlen($BMPpixelData)) { - $firstbyte = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); - $secondbyte = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $firstbyte = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); + $secondbyte = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); if ($firstbyte == 0) { // escaped/absolute mode - the first byte of the pair can be set to zero to @@ -503,8 +499,8 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // delta - The 2 bytes following the escape contain unsigned values // indicating the horizontal and vertical offsets of the next pixel // from the current position. - $colincrement = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); - $rowincrement = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $colincrement = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); + $rowincrement = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); $col = ($pixelcounter % $thisfile_bmp_header_raw['width']) + $colincrement; $row = ($thisfile_bmp_header_raw['height'] - 1 - (($pixelcounter - $col) / $thisfile_bmp_header_raw['width'])) - $rowincrement; $pixelcounter = ($row * $thisfile_bmp_header_raw['width']) + $col; @@ -516,7 +512,7 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // number of bytes that follow, each of which contains the color index // of a single pixel. Each run must be aligned on a word boundary. for ($i = 0; $i < $secondbyte; $i++) { - $paletteindex = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $paletteindex = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); $col = $pixelcounter % $thisfile_bmp_header_raw['width']; $row = $thisfile_bmp_header_raw['height'] - 1 - (($pixelcounter - $col) / $thisfile_bmp_header_raw['width']); $thisfile_bmp['data'][$row][$col] = $thisfile_bmp['palette'][$paletteindex]; @@ -557,8 +553,8 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa case 4: $pixelcounter = 0; while ($pixeldataoffset < strlen($BMPpixelData)) { - $firstbyte = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); - $secondbyte = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $firstbyte = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); + $secondbyte = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); if ($firstbyte == 0) { // escaped/absolute mode - the first byte of the pair can be set to zero to @@ -579,8 +575,8 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // delta - The 2 bytes following the escape contain unsigned values // indicating the horizontal and vertical offsets of the next pixel // from the current position. - $colincrement = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); - $rowincrement = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $colincrement = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); + $rowincrement = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); $col = ($pixelcounter % $thisfile_bmp_header_raw['width']) + $colincrement; $row = ($thisfile_bmp_header_raw['height'] - 1 - (($pixelcounter - $col) / $thisfile_bmp_header_raw['width'])) - $rowincrement; $pixelcounter = ($row * $thisfile_bmp_header_raw['width']) + $col; @@ -591,9 +587,9 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa // of color indexes that follow. Subsequent bytes contain color indexes in their // high- and low-order 4 bits, one color index for each pixel. In absolute mode, // each run must be aligned on a word boundary. - unset($paletteindexes); - for ($i = 0; $i < ceil($secondbyte / 2); $i++) { - $paletteindexbyte = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset++, 1)); + $paletteindexes = array(); + for ($i = 0, $iMax = ceil($secondbyte / 2); $i < $iMax; $i++) { + $paletteindexbyte = $this->LittleEndian2Int($BMPpixelData[ $pixeldataoffset++ ]); $paletteindexes[] = ($paletteindexbyte & 0xF0) >> 4; $paletteindexes[] = ($paletteindexbyte & 0x0F); } @@ -625,7 +621,7 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa for ($i = 0; $i < $firstbyte; $i++) { $col = $pixelcounter % $thisfile_bmp_header_raw['width']; $row = $thisfile_bmp_header_raw['height'] - 1 - (($pixelcounter - $col) / $thisfile_bmp_header_raw['width']); - $thisfile_bmp['data'][$row][$col] = $thisfile_bmp['palette'][$paletteindexes[($i % 2)]]; + $thisfile_bmp['data'][$row][$col] = $thisfile_bmp['palette'][ $paletteindexes[ $i % 2 ]]; $pixelcounter++; } @@ -665,10 +661,10 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa $pixelvalue = $this->LittleEndian2Int(substr($BMPpixelData, $pixeldataoffset, $thisfile_bmp_header_raw['bits_per_pixel'] / 8)); $pixeldataoffset += $thisfile_bmp_header_raw['bits_per_pixel'] / 8; - $red = intval(round(((($pixelvalue & $thisfile_bmp_header_raw['red_mask']) >> $redshift) / ($thisfile_bmp_header_raw['red_mask'] >> $redshift)) * 255)); - $green = intval(round(((($pixelvalue & $thisfile_bmp_header_raw['green_mask']) >> $greenshift) / ($thisfile_bmp_header_raw['green_mask'] >> $greenshift)) * 255)); - $blue = intval(round(((($pixelvalue & $thisfile_bmp_header_raw['blue_mask']) >> $blueshift) / ($thisfile_bmp_header_raw['blue_mask'] >> $blueshift)) * 255)); - $thisfile_bmp['data'][$row][$col] = (($red << 16) | ($green << 8) | ($blue)); + $red = (int) round(((($pixelvalue & $thisfile_bmp_header_raw[ 'red_mask']) >> $redshift) / ($thisfile_bmp_header_raw[ 'red_mask'] >> $redshift)) * 255); + $green = (int) round(((($pixelvalue & $thisfile_bmp_header_raw[ 'green_mask']) >> $greenshift) / ($thisfile_bmp_header_raw[ 'green_mask'] >> $greenshift)) * 255); + $blue = (int) round(((($pixelvalue & $thisfile_bmp_header_raw[ 'blue_mask']) >> $blueshift) / ($thisfile_bmp_header_raw[ 'blue_mask'] >> $blueshift)) * 255); + $thisfile_bmp['data'][$row][$col] = (($red << 16) | ($green << 8) | $blue); } while (($pixeldataoffset % 4) != 0) { // lines are padded to nearest DWORD @@ -693,36 +689,36 @@ function getid3_bmp(&$BMPdata, &$ThisFileInfo, $ExtractPalette=false, $ExtractDa return true; } - function IntColor2RGB($color) { + public function IntColor2RGB($color) { $red = ($color & 0x00FF0000) >> 16; $green = ($color & 0x0000FF00) >> 8; $blue = ($color & 0x000000FF); return array($red, $green, $blue); } - function PlotPixelsGD(&$BMPdata, $truecolor=true) { + public function PlotPixelsGD(&$BMPdata, $truecolor=true) { $imagewidth = $BMPdata['header']['raw']['width']; $imageheight = $BMPdata['header']['raw']['height']; if ($truecolor) { - $gd = @ImageCreateTrueColor($imagewidth, $imageheight); + $gd = @imagecreatetruecolor($imagewidth, $imageheight); } else { - $gd = @ImageCreate($imagewidth, $imageheight); + $gd = @imagecreate($imagewidth, $imageheight); if (!empty($BMPdata['palette'])) { // create GD palette from BMP palette foreach ($BMPdata['palette'] as $dummy => $color) { list($r, $g, $b) = $this->IntColor2RGB($color); - ImageColorAllocate($gd, $r, $g, $b); + imagecolorallocate($gd, $r, $g, $b); } } else { // create 216-color websafe palette for ($r = 0x00; $r <= 0xFF; $r += 0x33) { for ($g = 0x00; $g <= 0xFF; $g += 0x33) { for ($b = 0x00; $b <= 0xFF; $b += 0x33) { - ImageColorAllocate($gd, $r, $g, $b); + imagecolorallocate($gd, $r, $g, $b); } } } @@ -740,40 +736,38 @@ function PlotPixelsGD(&$BMPdata, $truecolor=true) { foreach ($colarray as $col => $color) { list($red, $green, $blue) = $this->IntColor2RGB($color); if ($truecolor) { - $pixelcolor = ImageColorAllocate($gd, $red, $green, $blue); + $pixelcolor = imagecolorallocate($gd, $red, $green, $blue); } else { - $pixelcolor = ImageColorClosest($gd, $red, $green, $blue); + $pixelcolor = imagecolorclosest($gd, $red, $green, $blue); } - ImageSetPixel($gd, $col, $row, $pixelcolor); + imagesetpixel($gd, $col, $row, $pixelcolor); } } return $gd; } - function PlotBMP(&$BMPinfo) { + public function PlotBMP(&$BMPinfo) { $starttime = time(); if (!isset($BMPinfo['bmp']['data']) || !is_array($BMPinfo['bmp']['data'])) { echo 'ERROR: no pixel data
          '; return false; } if (!phpthumb_functions::FunctionIsDisabled('set_time_limit')) { - set_time_limit(intval(round($BMPinfo['resolution_x'] * $BMPinfo['resolution_y'] / 10000))); + set_time_limit((int) round($BMPinfo[ 'resolution_x'] * $BMPinfo[ 'resolution_y'] / 10000)); } $im = $this->PlotPixelsGD($BMPinfo['bmp']); if (headers_sent()) { echo 'plotted '.($BMPinfo['resolution_x'] * $BMPinfo['resolution_y']).' pixels in '.(time() - $starttime).' seconds
          '; - ImageDestroy($im); + imagedestroy($im); exit; - } else { - header('Content-Type: image/png'); - ImagePNG($im); - ImageDestroy($im); - return true; } - return false; + header('Content-Type: image/png'); + imagepng($im); + imagedestroy($im); + return true; } - function BMPcompressionWindowsLookup($compressionid) { + public function BMPcompressionWindowsLookup($compressionid) { static $BMPcompressionWindowsLookup = array( 0 => 'BI_RGB', 1 => 'BI_RLE8', @@ -785,7 +779,7 @@ function BMPcompressionWindowsLookup($compressionid) { return (isset($BMPcompressionWindowsLookup[$compressionid]) ? $BMPcompressionWindowsLookup[$compressionid] : 'invalid'); } - function BMPcompressionOS2Lookup($compressionid) { + public function BMPcompressionOS2Lookup($compressionid) { static $BMPcompressionOS2Lookup = array( 0 => 'BI_RGB', 1 => 'BI_RLE8', @@ -799,7 +793,7 @@ function BMPcompressionOS2Lookup($compressionid) { // from getid3.lib.php - function trunc($floatnumber) { + public function trunc($floatnumber) { // truncates a floating-point number at the decimal point // returns int (if possible, otherwise float) if ($floatnumber >= 1) { @@ -815,21 +809,21 @@ function trunc($floatnumber) { return $truncatednumber; } - function LittleEndian2Int($byteword) { + public function LittleEndian2Int($byteword) { $intvalue = 0; $byteword = strrev($byteword); $bytewordlen = strlen($byteword); for ($i = 0; $i < $bytewordlen; $i++) { - $intvalue += ord($byteword{$i}) * pow(256, ($bytewordlen - 1 - $i)); + $intvalue += ord($byteword{$i}) * pow(256, $bytewordlen - 1 - $i); } return $intvalue; } - function BigEndian2Int($byteword) { + public function BigEndian2Int($byteword) { return $this->LittleEndian2Int(strrev($byteword)); } - function BigEndian2Bin($byteword) { + public function BigEndian2Bin($byteword) { $binvalue = ''; $bytewordlen = strlen($byteword); for ($i = 0; $i < $bytewordlen; $i++) { @@ -838,12 +832,12 @@ function BigEndian2Bin($byteword) { return $binvalue; } - function FixedPoint2_30($rawdata) { + public function FixedPoint2_30($rawdata) { $binarystring = $this->BigEndian2Bin($rawdata); return $this->Bin2Dec(substr($binarystring, 0, 2)) + (float) ($this->Bin2Dec(substr($binarystring, 2, 30)) / 1073741824); } - function Bin2Dec($binstring, $signed=false) { + public function Bin2Dec($binstring, $signed=false) { $signmult = 1; if ($signed) { if ($binstring{0} == '1') { @@ -852,13 +846,13 @@ function Bin2Dec($binstring, $signed=false) { $binstring = substr($binstring, 1); } $decvalue = 0; - for ($i = 0; $i < strlen($binstring); $i++) { - $decvalue += ((int) substr($binstring, strlen($binstring) - $i - 1, 1)) * pow(2, $i); + for ($i = 0, $iMax = strlen($binstring); $i < $iMax; $i++) { + $decvalue += ((int) $binstring[ strlen($binstring) - $i - 1 ]) * pow(2, $i); } return $this->CastAsInt($decvalue * $signmult); } - function CastAsInt($floatnum) { + public function CastAsInt($floatnum) { // convert to float if not already $floatnum = (float) $floatnum; @@ -874,5 +868,3 @@ function CastAsInt($floatnum) { } } - -?> \ No newline at end of file diff --git a/assets/snippets/phpthumb/phpthumb.class.php b/assets/snippets/phpthumb/phpthumb.class.php index 41f0eb87..337b3282 100755 --- a/assets/snippets/phpthumb/phpthumb.class.php +++ b/assets/snippets/phpthumb/phpthumb.class.php @@ -10,9 +10,9 @@ ////////////////////////////////////////////////////////////// ob_start(); -if (!include_once(dirname(__FILE__) . '/phpthumb.functions.php')) { +if (!include_once __DIR__ .'/phpthumb.functions.php' ) { ob_end_flush(); - die('failed to include_once("'.realpath(dirname(__FILE__).'/phpthumb.functions.php').'")'); + die('failed to include_once("'. __DIR__ .'/phpthumb.functions.php")'); } ob_end_clean(); @@ -21,44 +21,44 @@ class phpthumb { // public: // START PARAMETERS (for object mode and phpThumb.php) // See phpthumb.readme.txt for descriptions of what each of these values are - var $src = null; // SouRCe filename - var $new = null; // NEW image (phpThumb.php only) - var $w = null; // Width - var $h = null; // Height - var $wp = null; // Width (Portrait Images Only) - var $hp = null; // Height (Portrait Images Only) - var $wl = null; // Width (Landscape Images Only) - var $hl = null; // Height (Landscape Images Only) - var $ws = null; // Width (Square Images Only) - var $hs = null; // Height (Square Images Only) - var $f = null; // output image Format - var $q = 75; // jpeg output Quality - var $sx = null; // Source crop top-left X position - var $sy = null; // Source crop top-left Y position - var $sw = null; // Source crop Width - var $sh = null; // Source crop Height - var $zc = null; // Zoom Crop - var $bc = null; // Border Color - var $bg = null; // BackGround color - var $fltr = array(); // FiLTeRs - var $goto = null; // GO TO url after processing - var $err = null; // default ERRor image filename - var $xto = null; // extract eXif Thumbnail Only - var $ra = null; // Rotate by Angle - var $ar = null; // Auto Rotate - var $aoe = null; // Allow Output Enlargement - var $far = null; // Fixed Aspect Ratio - var $iar = null; // Ignore Aspect Ratio - var $maxb = null; // MAXimum Bytes - var $down = null; // DOWNload thumbnail filename - var $md5s = null; // MD5 hash of Source image - var $sfn = 0; // Source Frame Number - var $dpi = 150; // Dots Per Inch for vector source formats - var $sia = null; // Save Image As filename - - var $file = null; // >>>deprecated, DO NOT USE, will be removed in future versions<<< - - var $phpThumbDebug = null; + public $src = null; // SouRCe filename + public $new = null; // NEW image (phpThumb.php only) + public $w = null; // Width + public $h = null; // Height + public $wp = null; // Width (Portrait Images Only) + public $hp = null; // Height (Portrait Images Only) + public $wl = null; // Width (Landscape Images Only) + public $hl = null; // Height (Landscape Images Only) + public $ws = null; // Width (Square Images Only) + public $hs = null; // Height (Square Images Only) + public $f = null; // output image Format + public $q = 75; // jpeg output Quality + public $sx = null; // Source crop top-left X position + public $sy = null; // Source crop top-left Y position + public $sw = null; // Source crop Width + public $sh = null; // Source crop Height + public $zc = null; // Zoom Crop + public $bc = null; // Border Color + public $bg = null; // BackGround color + public $fltr = array(); // FiLTeRs + public $goto = null; // GO TO url after processing + public $err = null; // default ERRor image filename + public $xto = null; // extract eXif Thumbnail Only + public $ra = null; // Rotate by Angle + public $ar = null; // Auto Rotate + public $aoe = null; // Allow Output Enlargement + public $far = null; // Fixed Aspect Ratio + public $iar = null; // Ignore Aspect Ratio + public $maxb = null; // MAXimum Bytes + public $down = null; // DOWNload thumbnail filename + public $md5s = null; // MD5 hash of Source image + public $sfn = 0; // Source Frame Number + public $dpi = 150; // Dots Per Inch for vector source formats + public $sia = null; // Save Image As filename + + public $file = null; // >>>deprecated, DO NOT USE, will be removed in future versions<<< + + public $phpThumbDebug = null; // END PARAMETERS @@ -67,158 +67,181 @@ class phpthumb { // See phpThumb.config.php for descriptions of what each of these settings do // * Directory Configuration - var $config_cache_directory = null; - var $config_cache_directory_depth = 0; - var $config_cache_disable_warning = true; - var $config_cache_source_enabled = false; - var $config_cache_source_directory = null; - var $config_temp_directory = null; - var $config_document_root = null; + public $config_cache_directory = null; + public $config_cache_directory_depth = 0; + public $config_cache_disable_warning = true; + public $config_cache_source_enabled = false; + public $config_cache_source_directory = null; + public $config_temp_directory = null; + public $config_document_root = null; // * Default output configuration: - var $config_output_format = 'jpeg'; - var $config_output_maxwidth = 0; - var $config_output_maxheight = 0; - var $config_output_interlace = true; + public $config_output_format = 'jpeg'; + public $config_output_maxwidth = 0; + public $config_output_maxheight = 0; + public $config_output_interlace = true; // * Error message configuration - var $config_error_image_width = 400; - var $config_error_image_height = 100; - var $config_error_message_image_default = ''; - var $config_error_bgcolor = 'CCCCFF'; - var $config_error_textcolor = 'FF0000'; - var $config_error_fontsize = 1; - var $config_error_die_on_error = false; - var $config_error_silent_die_on_error = false; - var $config_error_die_on_source_failure = true; + public $config_error_image_width = 400; + public $config_error_image_height = 100; + public $config_error_message_image_default = ''; + public $config_error_bgcolor = 'CCCCFF'; + public $config_error_textcolor = 'FF0000'; + public $config_error_fontsize = 1; + public $config_error_die_on_error = false; + public $config_error_silent_die_on_error = false; + public $config_error_die_on_source_failure = true; // * Anti-Hotlink Configuration: - var $config_nohotlink_enabled = true; - var $config_nohotlink_valid_domains = array(); - var $config_nohotlink_erase_image = true; - var $config_nohotlink_text_message = 'Off-server thumbnailing is not allowed'; + public $config_nohotlink_enabled = true; + public $config_nohotlink_valid_domains = array(); + public $config_nohotlink_erase_image = true; + public $config_nohotlink_text_message = 'Off-server thumbnailing is not allowed'; // * Off-server Linking Configuration: - var $config_nooffsitelink_enabled = false; - var $config_nooffsitelink_valid_domains = array(); - var $config_nooffsitelink_require_refer = false; - var $config_nooffsitelink_erase_image = true; - var $config_nooffsitelink_watermark_src = ''; - var $config_nooffsitelink_text_message = 'Off-server linking is not allowed'; + public $config_nooffsitelink_enabled = false; + public $config_nooffsitelink_valid_domains = array(); + public $config_nooffsitelink_require_refer = false; + public $config_nooffsitelink_erase_image = true; + public $config_nooffsitelink_watermark_src = ''; + public $config_nooffsitelink_text_message = 'Off-server linking is not allowed'; // * Border & Background default colors - var $config_border_hexcolor = '000000'; - var $config_background_hexcolor = 'FFFFFF'; + public $config_border_hexcolor = '000000'; + public $config_background_hexcolor = 'FFFFFF'; // * TrueType Fonts - var $config_ttf_directory = './fonts'; + public $config_ttf_directory = './fonts'; - var $config_max_source_pixels = null; - var $config_use_exif_thumbnail_for_speed = false; - var $allow_local_http_src = false; + public $config_max_source_pixels = null; + public $config_use_exif_thumbnail_for_speed = false; + public $config_allow_local_http_src = false; - var $config_imagemagick_path = null; - var $config_prefer_imagemagick = true; - var $config_imagemagick_use_thumbnail = true; + public $config_imagemagick_path = null; + public $config_prefer_imagemagick = true; + public $config_imagemagick_use_thumbnail = true; - var $config_cache_maxage = null; - var $config_cache_maxsize = null; - var $config_cache_maxfiles = null; - var $config_cache_source_filemtime_ignore_local = false; - var $config_cache_source_filemtime_ignore_remote = true; - var $config_cache_default_only_suffix = false; - var $config_cache_force_passthru = true; - var $config_cache_prefix = ''; // default value set in the constructor below + public $config_cache_maxage = null; + public $config_cache_maxsize = null; + public $config_cache_maxfiles = null; + public $config_cache_source_filemtime_ignore_local = false; + public $config_cache_source_filemtime_ignore_remote = true; + public $config_cache_default_only_suffix = false; + public $config_cache_force_passthru = true; + public $config_cache_prefix = ''; // default value set in the constructor below // * MySQL - var $config_mysql_query = null; - var $config_mysql_hostname = null; - var $config_mysql_username = null; - var $config_mysql_password = null; - var $config_mysql_database = null; + public $config_mysql_extension = null; + public $config_mysql_query = null; + public $config_mysql_hostname = null; + public $config_mysql_username = null; + public $config_mysql_password = null; + public $config_mysql_database = null; // * Security - var $config_high_security_enabled = true; - var $config_high_security_password = null; - var $config_high_security_url_separator = '&'; - var $config_disable_debug = true; - var $config_allow_src_above_docroot = false; - var $config_allow_src_above_phpthumb = true; - var $config_auto_allow_symlinks = true; // allow symlink target directories without explicitly whitelisting them - var $config_additional_allowed_dirs = array(); // additional directories to allow source images to be read from + public $config_high_security_enabled = true; + public $config_high_security_password = null; + public $config_high_security_url_separator = '&'; + public $config_disable_debug = true; + public $config_allow_src_above_docroot = false; + public $config_allow_src_above_phpthumb = true; + public $config_auto_allow_symlinks = true; // allow symlink target directories without explicitly whitelisting them + public $config_additional_allowed_dirs = array(); // additional directories to allow source images to be read from + public $config_file_create_mask = 0755; + public $config_dir_create_mask = 0755; // * HTTP fopen - var $config_http_fopen_timeout = 10; - var $config_http_follow_redirect = true; + public $config_http_fopen_timeout = 10; + public $config_http_follow_redirect = true; // * Compatability - var $config_disable_pathinfo_parsing = false; - var $config_disable_imagecopyresampled = false; - var $config_disable_onlycreateable_passthru = false; + public $config_disable_pathinfo_parsing = false; + public $config_disable_imagecopyresampled = false; + public $config_disable_onlycreateable_passthru = false; + public $config_disable_realpath = false; - var $config_http_user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7'; + public $config_http_user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7'; // END CONFIGURATION OPTIONS // public: error messages (read-only; persistant) - var $debugmessages = array(); - var $debugtiming = array(); - var $fatalerror = null; + public $debugmessages = array(); + public $debugtiming = array(); + public $fatalerror = null; // private: (should not be modified directly) - var $thumbnailQuality = 75; - var $thumbnailFormat = null; + public $thumbnailQuality = 75; + public $thumbnailFormat = null; - var $sourceFilename = null; - var $rawImageData = null; - var $IMresizedData = null; - var $outputImageData = null; + public $sourceFilename = null; + public $rawImageData = null; + public $IMresizedData = null; + public $outputImageData = null; - var $useRawIMoutput = false; + public $useRawIMoutput = false; - var $gdimg_output = null; - var $gdimg_source = null; + public $gdimg_output = null; + public $gdimg_source = null; - var $getimagesizeinfo = null; + public $getimagesizeinfo = null; - var $source_width = null; - var $source_height = null; + public $source_width = null; + public $source_height = null; - var $thumbnailCropX = null; - var $thumbnailCropY = null; - var $thumbnailCropW = null; - var $thumbnailCropH = null; + public $thumbnailCropX = null; + public $thumbnailCropY = null; + public $thumbnailCropW = null; + public $thumbnailCropH = null; - var $exif_thumbnail_width = null; - var $exif_thumbnail_height = null; - var $exif_thumbnail_type = null; - var $exif_thumbnail_data = null; - var $exif_raw_data = null; + public $exif_thumbnail_width = null; + public $exif_thumbnail_height = null; + public $exif_thumbnail_type = null; + public $exif_thumbnail_data = null; + public $exif_raw_data = null; - var $thumbnail_width = null; - var $thumbnail_height = null; - var $thumbnail_image_width = null; - var $thumbnail_image_height = null; + public $thumbnail_width = null; + public $thumbnail_height = null; + public $thumbnail_image_width = null; + public $thumbnail_image_height = null; - var $tempFilesToDelete = array(); - var $cache_filename = null; + public $tempFilesToDelete = array(); + public $cache_filename = null; - var $AlphaCapableFormats = array('png', 'ico', 'gif'); - var $is_alpha = false; + public $AlphaCapableFormats = array( 'png', 'ico', 'gif'); + public $is_alpha = false; - var $iswindows = null; - var $issafemode = null; + public $iswindows = null; + public $issafemode = null; + public $php_memory_limit = null; - var $phpthumb_version = '1.7.13-201406261000'; + public $phpthumb_version = '1.7.15-201810050741'; ////////////////////////////////////////////////////////////////////// // public: constructor - function __construct() { + public function __construct() { + $this->phpThumb(); + } + + public function phpThumb() { $this->DebugTimingMessage('phpThumb() constructor', __FILE__, __LINE__); $this->DebugMessage('phpThumb() v'.$this->phpthumb_version, __FILE__, __LINE__); - $this->config_max_source_pixels = round(max(intval(ini_get('memory_limit')), intval(get_cfg_var('memory_limit'))) * 1048576 * 0.20); // 20% of memory_limit + + foreach (array(ini_get('memory_limit'), get_cfg_var('memory_limit')) as $php_config_memory_limit) { + if ('' !== $php_config_memory_limit) { + if (strtoupper($php_config_memory_limit[ strlen($php_config_memory_limit) - 1 ]) == 'G') { // PHP memory limit expressed in Gigabytes + $php_config_memory_limit = (int) substr($php_config_memory_limit, 0, -1) * 1073741824; + } elseif (strtoupper($php_config_memory_limit[ strlen($php_config_memory_limit) - 1 ]) == 'M') { // PHP memory limit expressed in Megabytes + $php_config_memory_limit = (int) substr($php_config_memory_limit, 0, -1) * 1048576; + } + $this->php_memory_limit = max($this->php_memory_limit, $php_config_memory_limit); + } + } + if ($this->php_memory_limit > 0) { // could be "-1" for "no limit" + $this->config_max_source_pixels = round($this->php_memory_limit * 0.20); // 20% of memory_limit + } + $this->iswindows = (bool) (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); $this->issafemode = (bool) preg_match('#(1|ON)#i', ini_get('safe_mode')); $this->config_document_root = (!empty($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : $this->config_document_root); @@ -226,23 +249,23 @@ function __construct() { $this->purgeTempFiles(); // purge existing temp files if re-initializing object - $php_sapi_name = strtolower(function_exists('php_sapi_name') ? php_sapi_name() : ''); + $php_sapi_name = strtolower(function_exists('php_sapi_name') ? PHP_SAPI : ''); if ($php_sapi_name == 'cli') { $this->config_allow_src_above_docroot = true; } if (!$this->config_disable_debug) { // if debug mode is enabled, force phpThumbDebug output, do not allow normal thumbnails to be generated - $this->phpThumbDebug = (is_null($this->phpThumbDebug) ? 9 : max(1, intval($this->phpThumbDebug))); + $this->phpThumbDebug = (null === $this->phpThumbDebug ? 9 : max(1, (int) $this->phpThumbDebug)); } } - function __destruct() { + public function __destruct() { $this->purgeTempFiles(); } // public: - function purgeTempFiles() { + public function purgeTempFiles() { foreach ($this->tempFilesToDelete as $tempFileToDelete) { if (file_exists($tempFileToDelete)) { $this->DebugMessage('Deleting temp file "'.$tempFileToDelete.'"', __FILE__, __LINE__); @@ -254,12 +277,12 @@ function purgeTempFiles() { } // public: - function setSourceFilename($sourceFilename) { + public function setSourceFilename($sourceFilename) { //$this->resetObject(); //$this->rawImageData = null; $this->sourceFilename = $sourceFilename; $this->src = $sourceFilename; - if (is_null($this->config_output_format)) { + if (null === $this->config_output_format) { $sourceFileExtension = strtolower(substr(strrchr($sourceFilename, '.'), 1)); if (preg_match('#^[a-z]{3,4}$#', $sourceFileExtension)) { $this->config_output_format = $sourceFileExtension; @@ -273,7 +296,7 @@ function setSourceFilename($sourceFilename) { } // public: - function setSourceData($rawImageData, $sourceFilename='') { + public function setSourceData($rawImageData, $sourceFilename='') { //$this->resetObject(); //$this->sourceFilename = null; $this->rawImageData = $rawImageData; @@ -297,14 +320,14 @@ function setSourceData($rawImageData, $sourceFilename='') { } // public: - function setSourceImageResource($gdimg) { + public function setSourceImageResource($gdimg) { //$this->resetObject(); $this->gdimg_source = $gdimg; return true; } // public: - function setParameter($param, $value) { + public function setParameter($param, $value) { if ($param == 'src') { $this->setSourceFilename($this->ResolveFilenameToAbsolute($value)); } elseif (@is_array($this->$param)) { @@ -322,7 +345,7 @@ function setParameter($param, $value) { } // public: - function getParameter($param) { + public function getParameter($param) { //if (property_exists('phpThumb', $param)) { return $this->$param; //} @@ -332,7 +355,7 @@ function getParameter($param) { // public: - function GenerateThumbnail() { + public function GenerateThumbnail() { $this->setOutputFormat(); $this->phpThumbDebug('8a'); @@ -401,8 +424,8 @@ function GenerateThumbnail() { ); $this->DebugMessage('memory_get_usage() after copy-resize = '.(function_exists('memory_get_usage') ? @memory_get_usage() : 'n/a'), __FILE__, __LINE__); - ImageDestroy($this->gdimg_source); - $this->DebugMessage('memory_get_usage() after ImageDestroy = '.(function_exists('memory_get_usage') ? @memory_get_usage() : 'n/a'), __FILE__, __LINE__); + imagedestroy($this->gdimg_source); + $this->DebugMessage('memory_get_usage() after imagedestroy = '.(function_exists('memory_get_usage') ? @memory_get_usage() : 'n/a'), __FILE__, __LINE__); $this->phpThumbDebug('8i'); $this->AntiOffsiteLinking(); @@ -420,7 +443,7 @@ function GenerateThumbnail() { // public: - function RenderOutput() { + public function RenderOutput() { if (!$this->useRawIMoutput && !is_resource($this->gdimg_output)) { $this->DebugMessage('RenderOutput() failed because !is_resource($this->gdimg_output)', __FILE__, __LINE__); return false; @@ -436,61 +459,84 @@ function RenderOutput() { } $builtin_formats = array(); - if (function_exists('ImageTypes')) { - $imagetypes = ImageTypes(); + if (function_exists('imagetypes')) { + $imagetypes = imagetypes(); $builtin_formats['wbmp'] = (bool) ($imagetypes & IMG_WBMP); $builtin_formats['jpg'] = (bool) ($imagetypes & IMG_JPG); $builtin_formats['gif'] = (bool) ($imagetypes & IMG_GIF); $builtin_formats['png'] = (bool) ($imagetypes & IMG_PNG); } - $this->DebugMessage('RenderOutput() attempting Image'.strtoupper(@$this->thumbnailFormat).'($this->gdimg_output)', __FILE__, __LINE__); + + $this->DebugMessage('imageinterlace($this->gdimg_output, '. (int) $this->config_output_interlace .')', __FILE__, __LINE__); + imageinterlace($this->gdimg_output, (int) $this->config_output_interlace); + + $this->DebugMessage('RenderOutput() attempting image'.strtolower(@$this->thumbnailFormat).'($this->gdimg_output)', __FILE__, __LINE__); ob_start(); switch ($this->thumbnailFormat) { case 'wbmp': - if (!@$builtin_formats['wbmp']) { + if (empty($builtin_formats['wbmp'])) { $this->DebugMessage('GD does not have required built-in support for WBMP output', __FILE__, __LINE__); ob_end_clean(); return false; } - ImageJPEG($this->gdimg_output, null, $this->thumbnailQuality); + imagejpeg($this->gdimg_output, null, $this->thumbnailQuality); $this->outputImageData = ob_get_contents(); break; case 'jpeg': case 'jpg': // should be "jpeg" not "jpg" but just in case... - if (!@$builtin_formats['jpg']) { + if (empty($builtin_formats['jpg'])) { $this->DebugMessage('GD does not have required built-in support for JPEG output', __FILE__, __LINE__); ob_end_clean(); return false; } - ImageJPEG($this->gdimg_output, null, $this->thumbnailQuality); + imagejpeg($this->gdimg_output, null, $this->thumbnailQuality); $this->outputImageData = ob_get_contents(); break; case 'png': - if (!@$builtin_formats['png']) { + if (empty($builtin_formats['png'])) { $this->DebugMessage('GD does not have required built-in support for PNG output', __FILE__, __LINE__); ob_end_clean(); return false; } - ImagePNG($this->gdimg_output); + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.1.2', '>=')) { + // https://github.com/JamesHeinrich/phpThumb/issues/24 + + /* http://php.net/manual/en/function.imagepng.php: + from php source (gd.h): + 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all, + :: 1 is FASTEST but produces larger files, 9 provides the best + :: compression (smallest files) but takes a long time to compress, and + :: -1 selects the default compiled into the zlib library. + Conclusion: Based on the Zlib manual (http://www.zlib.net/manual.html) the default compression level is set to 6. + */ + if (($this->thumbnailQuality >= -1) && ($this->thumbnailQuality <= 9)) { + $PNGquality = $this->thumbnailQuality; + } else { + $this->DebugMessage('Specified thumbnailQuality "'.$this->thumbnailQuality.'" is outside the accepted range (0-9, or -1). Using 6 as default value.', __FILE__, __LINE__); + $PNGquality = 6; + } + imagepng($this->gdimg_output, null, $PNGquality); + } else { + imagepng($this->gdimg_output); + } $this->outputImageData = ob_get_contents(); break; case 'gif': - if (!@$builtin_formats['gif']) { + if (empty($builtin_formats['gif'])) { $this->DebugMessage('GD does not have required built-in support for GIF output', __FILE__, __LINE__); ob_end_clean(); return false; } - ImageGIF($this->gdimg_output); + imagegif($this->gdimg_output); $this->outputImageData = ob_get_contents(); break; case 'bmp': - $ImageOutFunction = '"builtin BMP output"'; - if (!@include_once(dirname(__FILE__).'/phpthumb.bmp.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.bmp.php" which is required for BMP format output', __FILE__, __LINE__); + if (!@include_once __DIR__ .'/phpthumb.bmp.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.bmp.php" which is required for BMP format output', __FILE__, __LINE__); ob_end_clean(); return false; } @@ -500,9 +546,8 @@ function RenderOutput() { break; case 'ico': - $ImageOutFunction = '"builtin ICO output"'; - if (!@include_once(dirname(__FILE__) . '/phpthumb.ico.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.ico.php" which is required for ICO format output', __FILE__, __LINE__); + if (!@include_once __DIR__ .'/phpthumb.ico.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.ico.php" which is required for ICO format output', __FILE__, __LINE__); ob_end_clean(); return false; } @@ -529,7 +574,7 @@ function RenderOutput() { // public: - function RenderToFile($filename) { + public function RenderToFile($filename) { if (preg_match('#^[a-z0-9]+://#i', $filename)) { $this->DebugMessage('RenderToFile() failed because $filename ('.$filename.') is a URL', __FILE__, __LINE__); return false; @@ -551,6 +596,7 @@ function RenderToFile($filename) { if ($this->RenderOutput()) { if (file_put_contents($renderfilename, $this->outputImageData)) { + @chmod($renderfilename, $this->getParameter('config_file_create_mask')); $this->DebugMessage('RenderToFile('.$renderfilename.') succeeded', __FILE__, __LINE__); return true; } @@ -565,7 +611,7 @@ function RenderToFile($filename) { // public: - function OutputThumbnail() { + public function OutputThumbnail() { $this->purgeTempFiles(); if (!$this->useRawIMoutput && !is_resource($this->gdimg_output)) { @@ -574,7 +620,6 @@ function OutputThumbnail() { } if (headers_sent()) { return $this->ErrorImage('OutputThumbnail() failed - headers already sent'); - exit; } $downloadfilename = phpthumb_functions::SanitizeFilename(is_string($this->sia) ? $this->sia : ($this->down ? $this->down : 'phpThumb_generated_thumbnail'.'.'.$this->thumbnailFormat)); @@ -592,8 +637,8 @@ function OutputThumbnail() { } else { - $this->DebugMessage('ImageInterlace($this->gdimg_output, '.intval($this->config_output_interlace).')', __FILE__, __LINE__); - ImageInterlace($this->gdimg_output, intval($this->config_output_interlace)); + $this->DebugMessage('imageinterlace($this->gdimg_output, '. (int) $this->config_output_interlace .')', __FILE__, __LINE__); + imageinterlace($this->gdimg_output, (int) $this->config_output_interlace); switch ($this->thumbnailFormat) { case 'jpeg': header('Content-Type: '.phpthumb_functions::ImageTypeToMIMEtype($this->thumbnailFormat)); @@ -609,8 +654,8 @@ function OutputThumbnail() { break; case 'bmp': - if (!@include_once(dirname(__FILE__).'/phpthumb.bmp.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.bmp.php" which is required for BMP format output', __FILE__, __LINE__); + if (!@include_once __DIR__ .'/phpthumb.bmp.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.bmp.php" which is required for BMP format output', __FILE__, __LINE__); return false; } $phpthumb_bmp = new phpthumb_bmp(); @@ -630,8 +675,8 @@ function OutputThumbnail() { break; case 'ico': - if (!@include_once(dirname(__FILE__) . '/phpthumb.ico.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.ico.php" which is required for ICO format output', __FILE__, __LINE__); + if (!@include_once __DIR__ .'/phpthumb.ico.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.ico.php" which is required for ICO format output', __FILE__, __LINE__); return false; } $phpthumb_ico = new phpthumb_ico(); @@ -663,8 +708,8 @@ function OutputThumbnail() { // public: - function CleanUpCacheDirectory() { - $this->DebugMessage('CleanUpCacheDirectory() set to purge ('.(is_null($this->config_cache_maxage) ? 'NULL' : number_format($this->config_cache_maxage / 86400, 1)).' days; '.(is_null($this->config_cache_maxsize) ? 'NULL' : number_format($this->config_cache_maxsize / 1048576, 2)).' MB; '.(is_null($this->config_cache_maxfiles) ? 'NULL' : number_format($this->config_cache_maxfiles)).' files)', __FILE__, __LINE__); + public function CleanUpCacheDirectory() { + $this->DebugMessage('CleanUpCacheDirectory() set to purge ('.(null === $this->config_cache_maxage ? 'NULL' : number_format($this->config_cache_maxage / 86400, 1)).' days; '.(null === $this->config_cache_maxsize ? 'NULL' : number_format($this->config_cache_maxsize / 1048576, 2)).' MB; '.(null === $this->config_cache_maxfiles ? 'NULL' : number_format($this->config_cache_maxfiles)).' files)', __FILE__, __LINE__); if (!is_writable($this->config_cache_directory)) { $this->DebugMessage('CleanUpCacheDirectory() skipped because "'.$this->config_cache_directory.'" is not writable', __FILE__, __LINE__); @@ -795,9 +840,9 @@ function CleanUpCacheDirectory() { $empty_dirs = array(); foreach ($AllFilesInCacheDirectory as $fullfilename) { if (is_dir($fullfilename)) { - $empty_dirs[realpath($fullfilename)] = 1; + $empty_dirs[$this->realPathSafe($fullfilename)] = 1; } else { - unset($empty_dirs[realpath(dirname($fullfilename))]); + unset($empty_dirs[$this->realPathSafe(dirname($fullfilename))]); } } krsort($empty_dirs); @@ -820,7 +865,7 @@ function CleanUpCacheDirectory() { ////////////////////////////////////////////////////////////////////// // private: re-initializator (call between rendering multiple images with one object) - function resetObject() { + public function resetObject() { $class_vars = get_class_vars(get_class($this)); foreach ($class_vars as $key => $value) { // do not clobber debug or config info @@ -834,7 +879,7 @@ function resetObject() { ////////////////////////////////////////////////////////////////////// - function ResolveSource() { + public function ResolveSource() { if (is_resource($this->gdimg_source)) { $this->DebugMessage('ResolveSource() exiting because is_resource($this->gdimg_source)', __FILE__, __LINE__); return true; @@ -873,7 +918,7 @@ function ResolveSource() { } - function setOutputFormat() { + public function setOutputFormat() { static $alreadyCalled = false; if ($this->thumbnailFormat && $alreadyCalled) { return true; @@ -882,18 +927,18 @@ function setOutputFormat() { $AvailableImageOutputFormats = array(); $AvailableImageOutputFormats[] = 'text'; - if (@is_readable(dirname(__FILE__).'/phpthumb.ico.php')) { + if (@is_readable( __DIR__ .'/phpthumb.ico.php')) { $AvailableImageOutputFormats[] = 'ico'; } - if (@is_readable(dirname(__FILE__).'/phpthumb.bmp.php')) { + if (@is_readable( __DIR__ .'/phpthumb.bmp.php')) { $AvailableImageOutputFormats[] = 'bmp'; } $this->thumbnailFormat = 'ico'; // Set default output format based on what image types are available - if (function_exists('ImageTypes')) { - $imagetypes = ImageTypes(); + if (function_exists('imagetypes')) { + $imagetypes = imagetypes(); if ($imagetypes & IMG_WBMP) { $this->thumbnailFormat = 'wbmp'; $AvailableImageOutputFormats[] = 'wbmp'; @@ -911,8 +956,7 @@ function setOutputFormat() { $AvailableImageOutputFormats[] = 'jpeg'; } } else { - //return $this->ErrorImage('ImageTypes() does not exist - GD support might not be enabled?'); - $this->DebugMessage('ImageTypes() does not exist - GD support might not be enabled?', __FILE__, __LINE__); + $this->DebugMessage('imagetypes() does not exist - GD support might not be enabled?', __FILE__, __LINE__); } if ($this->ImageMagickVersion()) { $IMformats = array('jpeg', 'png', 'gif', 'bmp', 'ico', 'wbmp'); @@ -938,7 +982,7 @@ function setOutputFormat() { } elseif ($this->config_output_format) { $this->DebugMessage('$this->thumbnailFormat staying as "'.$this->thumbnailFormat.'" because $this->config_output_format ('.strtolower($this->config_output_format).') is not in $AvailableImageOutputFormats', __FILE__, __LINE__); } - if ($this->f && (phpthumb_functions::CaseInsensitiveInArray($this->f, $AvailableImageOutputFormats))) { + if ($this->f && phpthumb_functions::CaseInsensitiveInArray($this->f, $AvailableImageOutputFormats) ) { // override output format if $this->f is set and that format is available $this->DebugMessage('$this->thumbnailFormat set to $this->f "'.strtolower($this->f).'"', __FILE__, __LINE__); $this->thumbnailFormat = strtolower($this->f); @@ -949,17 +993,17 @@ function setOutputFormat() { // for JPEG images, quality 1 (worst) to 99 (best) // quality < 25 is nasty, with not much size savings - not recommended // problems with 100 - invalid JPEG? - $this->thumbnailQuality = max(1, min(99, ($this->q ? intval($this->q) : 75))); + $this->thumbnailQuality = max(1, min(99, ($this->q ? (int) $this->q : 75))); $this->DebugMessage('$this->thumbnailQuality set to "'.$this->thumbnailQuality.'"', __FILE__, __LINE__); return true; } - function setCacheDirectory() { + public function setCacheDirectory() { // resolve cache directory to absolute pathname $this->DebugMessage('setCacheDirectory() starting with config_cache_directory = "'.$this->config_cache_directory.'"', __FILE__, __LINE__); - if (substr($this->config_cache_directory, 0, 1) == '.') { + if ($this->config_cache_directory[ 0 ] == '.') { if (preg_match('#^(f|ht)tps?\://#i', $this->src)) { if (!$this->config_cache_disable_warning) { $this->ErrorImage('$this->config_cache_directory ('.$this->config_cache_directory.') cannot be used for remote images. Adjust "cache_directory" or "cache_disable_warning" in phpThumb.config.php'); @@ -978,15 +1022,15 @@ function setCacheDirectory() { $this->config_cache_directory = str_replace('/', DIRECTORY_SEPARATOR, $this->config_cache_directory); } if ($this->config_cache_directory) { - $real_cache_path = realpath($this->config_cache_directory); + $real_cache_path = $this->realPathSafe($this->config_cache_directory); if (!$real_cache_path) { - $this->DebugMessage('realpath($this->config_cache_directory) failed for "'.$this->config_cache_directory.'"', __FILE__, __LINE__); + $this->DebugMessage('$this->realPathSafe($this->config_cache_directory) failed for "'.$this->config_cache_directory.'"', __FILE__, __LINE__); if (!is_dir($this->config_cache_directory)) { $this->DebugMessage('!is_dir('.$this->config_cache_directory.')', __FILE__, __LINE__); } } if ($real_cache_path) { - $this->DebugMessage('setting config_cache_directory to realpath('.$this->config_cache_directory.') = "'.$real_cache_path.'"', __FILE__, __LINE__); + $this->DebugMessage('setting config_cache_directory to $this->realPathSafe('.$this->config_cache_directory.') = "'.$real_cache_path.'"', __FILE__, __LINE__); $this->config_cache_directory = $real_cache_path; } } @@ -1011,17 +1055,17 @@ function setCacheDirectory() { /* Takes the array of path segments up to now, and the next segment (maybe a modifier: empty, . or ..) Applies it, adding or removing from $segments as a result. Returns nothing. */ // http://support.silisoftware.com/phpBB3/viewtopic.php?t=961 - function applyPathSegment(&$segments, $segment) { + public function applyPathSegment(&$segments, $segment) { if ($segment == '.') { return; // always remove } if ($segment == '') { $test = array_pop($segments); - if (is_null($test)) { + if (null === $test) { $segments[] = $segment; // keep the first empty block } elseif ($test == '') { $test = array_pop($segments); - if (is_null($test)) { + if (null === $test) { $segments[] = $test; $segments[] = $segment; // keep the second one too } else { // put both back and ignore segment @@ -1034,7 +1078,7 @@ function applyPathSegment(&$segments, $segment) { } else { if ($segment == '..') { $test = array_pop($segments); - if (is_null($test)) { + if (null === $test) { $segments[] = $segment; } elseif ($test == '..') { $segments[] = $test; @@ -1052,7 +1096,7 @@ function applyPathSegment(&$segments, $segment) { /* Takes array of path components, normalizes it: removes empty slots and '.', collapses '..' and folder names. Returns array. */ // http://support.silisoftware.com/phpBB3/viewtopic.php?t=961 - function normalizePath($segments) { + public function normalizePath($segments) { $parts = array(); foreach ($segments as $segment) { $this->applyPathSegment($parts, $segment); @@ -1062,10 +1106,10 @@ function normalizePath($segments) { /* True if the provided path points (without resolving symbolic links) into one of the allowed directories. */ // http://support.silisoftware.com/phpBB3/viewtopic.php?t=961 - function matchPath($path, $allowed_dirs) { + public function matchPath($path, $allowed_dirs) { if (!empty($allowed_dirs)) { foreach ($allowed_dirs as $one_dir) { - if (preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', realpath($one_dir))).'#', $path)) { + if (preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', $this->realPathSafe($one_dir))).'#', $path)) { return true; } } @@ -1075,15 +1119,15 @@ function matchPath($path, $allowed_dirs) { /* True if the provided path points inside one of open_basedirs (or if open_basedirs are disabled) */ // http://support.silisoftware.com/phpBB3/viewtopic.php?t=961 - function isInOpenBasedir($path) { + public function isInOpenBasedir($path) { static $open_basedirs = null; - if (is_null($open_basedirs)) { + if (null === $open_basedirs) { $ini_text = ini_get('open_basedir'); $this->DebugMessage('open_basedir: "'.$ini_text.'"', __FILE__, __LINE__); $open_basedirs = array(); if (strlen($ini_text) > 0) { foreach (preg_split('#[;:]#', $ini_text) as $key => $value) { - $open_basedirs[$key] = realpath($value); + $open_basedirs[$key] = $this->realPathSafe($value); } } } @@ -1092,19 +1136,19 @@ function isInOpenBasedir($path) { /* Resolves all symlinks in $path, checking that each continuous part ends in an allowed zone. Returns null, if any component leads outside of allowed zone. */ // http://support.silisoftware.com/phpBB3/viewtopic.php?t=961 - function resolvePath($path, $allowed_dirs) { + public function resolvePath($path, $allowed_dirs) { $this->DebugMessage('resolvePath: '.$path.' (allowed_dirs: '.print_r($allowed_dirs, true).')', __FILE__, __LINE__); // add base path to the top of the list if (!$this->config_allow_src_above_docroot) { - array_unshift($allowed_dirs, realpath($this->config_document_root)); + array_unshift($allowed_dirs, $this->realPathSafe($this->config_document_root)); } else { if (!$this->config_allow_src_above_phpthumb) { - array_unshift($allowed_dirs, realpath(dirname(__FILE__))); + array_unshift($allowed_dirs, $this->realPathSafe( __DIR__ )); } else { // no checks are needed, offload the work to realpath and forget about it - $this->DebugMessage('resolvePath: checks disabled, returning '.realpath($path), __FILE__, __LINE__); - return realpath($path); + $this->DebugMessage('resolvePath: checks disabled, returning '.$this->realPathSafe($path), __FILE__, __LINE__); + return $this->realPathSafe($path); } } if ($path == '') { @@ -1118,8 +1162,8 @@ function resolvePath($path, $allowed_dirs) { // do not use "cleaner" foreach version of this loop as later code relies on both $segments and $i // http://support.silisoftware.com/phpBB3/viewtopic.php?t=964 $segments = explode(DIRECTORY_SEPARATOR, $path); - for ($i = 0; $i < count($segments); $i++) { - $this->applyPathSegment($parts, $segments[$i]); + for ($i = 0, $iMax = count($segments); $i < $iMax; $i++) { + $this->applyPathSegment($parts, $segments[$i]); $thispart = implode(DIRECTORY_SEPARATOR, $parts); if ($this->isInOpenBasedir($thispart)) { if (is_link($thispart)) { @@ -1162,7 +1206,46 @@ function resolvePath($path, $allowed_dirs) { return $path; } - function ResolveFilenameToAbsolute($filename) { + + public function realPathSafe($filename) { + // http://php.net/manual/en/function.realpath.php -- "Note: The running script must have executable permissions on all directories in the hierarchy, otherwise realpath() will return FALSE" + // realPathSafe() provides a reasonable facsimile of realpath() but does not resolve symbolic links, nor does it check that the file/path actually exists + if (!$this->config_disable_realpath) { + return realpath($filename); + } + + // http://stackoverflow.com/questions/21421569 + $newfilename = preg_replace('#[\\/]+#', DIRECTORY_SEPARATOR, $filename); + if (!preg_match('#^'.DIRECTORY_SEPARATOR.'#', $newfilename)) { + $newfilename = __DIR__ .DIRECTORY_SEPARATOR.$newfilename; + } + do { + $beforeloop = $newfilename; + + // Replace all sequences of more than one / with a single one [[ If you're working on a system that treats // at the start of a path as special, make sure you replace multiple / characters at the start with two of them. This is the only place where POSIX allows (but does not mandate) special handling for multiples, in all other cases, multiple / characters are equivalent to a single one.]] + $newfilename = preg_replace('#'.DIRECTORY_SEPARATOR.'+#', DIRECTORY_SEPARATOR, $newfilename); + + // Replace all occurrences of /./ with / + $newfilename = preg_replace('#'.DIRECTORY_SEPARATOR.'\\.'.DIRECTORY_SEPARATOR.'#', DIRECTORY_SEPARATOR, $newfilename); + + // Remove ./ if at the start + $newfilename = preg_replace('#^\\.'.DIRECTORY_SEPARATOR.'#', '', $newfilename); + + // Remove /. if at the end + $newfilename = preg_replace('#'.DIRECTORY_SEPARATOR.'\\.$#', '', $newfilename); + + // Replace /anything/../ with / + $newfilename = preg_replace('#'.DIRECTORY_SEPARATOR.'[^'.DIRECTORY_SEPARATOR.']+'.DIRECTORY_SEPARATOR.'\\.\\.'.DIRECTORY_SEPARATOR.'#', DIRECTORY_SEPARATOR, $newfilename); + + // Remove /anything/.. if at the end + $newfilename = preg_replace('#'.DIRECTORY_SEPARATOR.'[^'.DIRECTORY_SEPARATOR.']+'.DIRECTORY_SEPARATOR.'\\.\\.$#', '', $newfilename); + + } while ($newfilename != $beforeloop); + return $newfilename; + } + + + public function ResolveFilenameToAbsolute($filename) { if (empty($filename)) { return false; } @@ -1198,11 +1281,11 @@ function ResolveFilenameToAbsolute($filename) { if ($ApacheLookupURIarray = phpthumb_functions::ApacheLookupURIarray($filename)) { $AbsoluteFilename = $ApacheLookupURIarray['filename']; } else { - $AbsoluteFilename = realpath($filename); + $AbsoluteFilename = $this->realPathSafe($filename); if (@is_readable($AbsoluteFilename)) { - $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.$filename.'", but the correct filename ('.$AbsoluteFilename.') seems to have been resolved with realpath($filename)', __FILE__, __LINE__); + $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.$filename.'", but the correct filename ('.$AbsoluteFilename.') seems to have been resolved with $this->realPathSafe($filename)', __FILE__, __LINE__); } elseif (is_dir(dirname($AbsoluteFilename))) { - $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname($filename).'", but the correct directory ('.dirname($AbsoluteFilename).') seems to have been resolved with realpath(.)', __FILE__, __LINE__); + $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname($filename).'", but the correct directory ('.dirname($AbsoluteFilename).') seems to have been resolved with $this->realPathSafe(.)', __FILE__, __LINE__); } else { return $this->ErrorImage('phpthumb_functions::ApacheLookupURIarray() failed for "'.$filename.'". This has been known to fail on Apache2 - try using the absolute filename for the source image (ex: "/home/user/httpdocs/image.jpg" instead of "/~user/image.jpg")'); } @@ -1224,17 +1307,17 @@ function ResolveFilenameToAbsolute($filename) { } else { // relative to current directory (any OS) - $AbsoluteFilename = dirname(__FILE__).DIRECTORY_SEPARATOR.preg_replace('#[/\\\\]#', DIRECTORY_SEPARATOR, $filename); + $AbsoluteFilename = __DIR__ .DIRECTORY_SEPARATOR.preg_replace('#[/\\\\]#', DIRECTORY_SEPARATOR, $filename); if (substr(dirname(@$_SERVER['PHP_SELF']), 0, 2) == '/~') { if ($ApacheLookupURIarray = phpthumb_functions::ApacheLookupURIarray(dirname(@$_SERVER['PHP_SELF']))) { $AbsoluteFilename = $ApacheLookupURIarray['filename'].DIRECTORY_SEPARATOR.$filename; } else { - $AbsoluteFilename = realpath('.').DIRECTORY_SEPARATOR.$filename; + $AbsoluteFilename = $this->realPathSafe('.').DIRECTORY_SEPARATOR.$filename; if (@is_readable($AbsoluteFilename)) { - $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname(@$_SERVER['PHP_SELF']).'", but the correct filename ('.$AbsoluteFilename.') seems to have been resolved with realpath(.)/$filename', __FILE__, __LINE__); + $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname(@$_SERVER['PHP_SELF']).'", but the correct filename ('.$AbsoluteFilename.') seems to have been resolved with $this->realPathSafe(.)/$filename', __FILE__, __LINE__); } elseif (is_dir(dirname($AbsoluteFilename))) { - $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname(@$_SERVER['PHP_SELF']).'", but the correct directory ('.dirname($AbsoluteFilename).') seems to have been resolved with realpath(.)', __FILE__, __LINE__); + $this->DebugMessage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname(@$_SERVER['PHP_SELF']).'", but the correct directory ('.dirname($AbsoluteFilename).') seems to have been resolved with $this->realPathSafe(.)', __FILE__, __LINE__); } else { return $this->ErrorImage('phpthumb_functions::ApacheLookupURIarray() failed for "'.dirname(@$_SERVER['PHP_SELF']).'". This has been known to fail on Apache2 - try using the absolute filename for the source image'); } @@ -1248,41 +1331,41 @@ function ResolveFilenameToAbsolute($filename) { $this->DebugMessage('is_link()==true, changing "'.$AbsoluteFilename.'" to "'.readlink($AbsoluteFilename).'"', __FILE__, __LINE__); $AbsoluteFilename = readlink($AbsoluteFilename); } - if (realpath($AbsoluteFilename)) { - $AbsoluteFilename = realpath($AbsoluteFilename); + if ($this->realPathSafe($AbsoluteFilename)) { + $AbsoluteFilename = $this->realPathSafe($AbsoluteFilename); } */ if ($this->iswindows) { - $AbsoluteFilename = preg_replace('#^'.preg_quote(realpath($this->config_document_root)).'#i', realpath($this->config_document_root), $AbsoluteFilename); + $AbsoluteFilename = preg_replace('#^'.preg_quote($this->realPathSafe($this->config_document_root)).'#i', str_replace('\\', '\\\\', $this->realPathSafe($this->config_document_root)), $AbsoluteFilename); $AbsoluteFilename = str_replace(DIRECTORY_SEPARATOR, '/', $AbsoluteFilename); } - $AbsoluteFilename = $this->resolvePath($AbsoluteFilename, $this->config_additional_allowed_dirs); - if (!$this->config_allow_src_above_docroot && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', realpath($this->config_document_root))).'#', $AbsoluteFilename)) { - $this->DebugMessage('!$this->config_allow_src_above_docroot therefore setting "'.$AbsoluteFilename.'" (outside "'.realpath($this->config_document_root).'") to null', __FILE__, __LINE__); + $resolvedAbsoluteFilename = $this->resolvePath($AbsoluteFilename, $this->config_additional_allowed_dirs); + if (!$this->config_allow_src_above_docroot && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', $this->realPathSafe($this->config_document_root))).'#', $resolvedAbsoluteFilename)) { + $this->DebugMessage('!$this->config_allow_src_above_docroot therefore setting "'.$AbsoluteFilename.'" (outside "'.$this->realPathSafe($this->config_document_root).'") to null', __FILE__, __LINE__); return false; } - if (!$this->config_allow_src_above_phpthumb && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', dirname(__FILE__))).'#', $AbsoluteFilename)) { - $this->DebugMessage('!$this->config_allow_src_above_phpthumb therefore setting "'.$AbsoluteFilename.'" (outside "'.dirname(__FILE__).'") to null', __FILE__, __LINE__); + if (!$this->config_allow_src_above_phpthumb && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', __DIR__ )).'#', $resolvedAbsoluteFilename)) { + $this->DebugMessage('!$this->config_allow_src_above_phpthumb therefore setting "'.$AbsoluteFilename.'" (outside "'. __DIR__ .'") to null', __FILE__, __LINE__); return false; } - return $AbsoluteFilename; + return $resolvedAbsoluteFilename; } - function file_exists_ignoreopenbasedir($filename, $cached=true) { + public function file_exists_ignoreopenbasedir($filename, $cached=true) { static $open_basedirs = null; static $file_exists_cache = array(); if (!$cached || !isset($file_exists_cache[$filename])) { - if (is_null($open_basedirs)) { + if (null === $open_basedirs) { $open_basedirs = preg_split('#[;:]#', ini_get('open_basedir')); } if (empty($open_basedirs) || in_array(dirname($filename), $open_basedirs)) { $file_exists_cache[$filename] = file_exists($filename); } elseif ($this->iswindows) { - $ls_filename = trim(phpthumb_functions::SafeExec('dir '.$this->customEscapeshellarg($filename))); - $file_exists_cache[$filename] = !preg_match('#File Not Found#i', $ls_filename); + $ls_filename = trim(phpthumb_functions::SafeExec('dir /b '.phpthumb_functions::escapeshellarg_replacement($filename))); + $file_exists_cache[$filename] = ($ls_filename == basename($filename)); // command dir /b return only filename without path } else { - $ls_filename = trim(phpthumb_functions::SafeExec('ls '.$this->customEscapeshellarg($filename))); + $ls_filename = trim(phpthumb_functions::SafeExec('ls '.phpthumb_functions::escapeshellarg_replacement($filename))); $file_exists_cache[$filename] = ($ls_filename == $filename); } } @@ -1290,9 +1373,9 @@ function file_exists_ignoreopenbasedir($filename, $cached=true) { } - function ImageMagickWhichConvert() { + public function ImageMagickWhichConvert() { static $WhichConvert = null; - if (is_null($WhichConvert)) { + if (null === $WhichConvert) { if ($this->iswindows) { $WhichConvert = false; } else { @@ -1302,6 +1385,7 @@ function ImageMagickWhichConvert() { } else { $WhichConvert = trim(phpthumb_functions::SafeExec('which convert')); @file_put_contents($IMwhichConvertCacheFilename, $WhichConvert); + @chmod($IMwhichConvertCacheFilename, $this->getParameter('config_file_create_mask')); } } } @@ -1309,9 +1393,9 @@ function ImageMagickWhichConvert() { } - function ImageMagickCommandlineBase() { + public function ImageMagickCommandlineBase() { static $commandline = null; - if (is_null($commandline)) { + if (null === $commandline) { if ($this->issafemode) { $commandline = ''; return $commandline; @@ -1322,28 +1406,28 @@ function ImageMagickCommandlineBase() { return $commandline; } - $commandline = (!is_null($this->config_imagemagick_path) ? $this->config_imagemagick_path : ''); + $commandline = (null !== $this->config_imagemagick_path ? $this->config_imagemagick_path : ''); - if ($this->config_imagemagick_path && ($this->config_imagemagick_path != realpath($this->config_imagemagick_path))) { - if (@is_executable(realpath($this->config_imagemagick_path))) { - $this->DebugMessage('Changing $this->config_imagemagick_path ('.$this->config_imagemagick_path.') to realpath($this->config_imagemagick_path) ('.realpath($this->config_imagemagick_path).')', __FILE__, __LINE__); - $this->config_imagemagick_path = realpath($this->config_imagemagick_path); + if ($this->config_imagemagick_path && ($this->config_imagemagick_path != $this->realPathSafe($this->config_imagemagick_path))) { + if (@is_executable($this->realPathSafe($this->config_imagemagick_path))) { + $this->DebugMessage('Changing $this->config_imagemagick_path ('.$this->config_imagemagick_path.') to $this->realPathSafe($this->config_imagemagick_path) ('.$this->realPathSafe($this->config_imagemagick_path).')', __FILE__, __LINE__); + $this->config_imagemagick_path = $this->realPathSafe($this->config_imagemagick_path); } else { - $this->DebugMessage('Leaving $this->config_imagemagick_path as ('.$this->config_imagemagick_path.') because !is_execuatable(realpath($this->config_imagemagick_path)) ('.realpath($this->config_imagemagick_path).')', __FILE__, __LINE__); + $this->DebugMessage('Leaving $this->config_imagemagick_path as ('.$this->config_imagemagick_path.') because !is_execuatable($this->realPathSafe($this->config_imagemagick_path)) ('.$this->realPathSafe($this->config_imagemagick_path).')', __FILE__, __LINE__); } } - $this->DebugMessage(' file_exists('.$this->config_imagemagick_path.') = '.intval( @file_exists($this->config_imagemagick_path)), __FILE__, __LINE__); - $this->DebugMessage('file_exists_ignoreopenbasedir('.$this->config_imagemagick_path.') = '.intval($this->file_exists_ignoreopenbasedir($this->config_imagemagick_path)), __FILE__, __LINE__); - $this->DebugMessage(' is_file('.$this->config_imagemagick_path.') = '.intval( @is_file($this->config_imagemagick_path)), __FILE__, __LINE__); - $this->DebugMessage(' is_executable('.$this->config_imagemagick_path.') = '.intval( @is_executable($this->config_imagemagick_path)), __FILE__, __LINE__); + $this->DebugMessage(' file_exists('.$this->config_imagemagick_path.') = '. (int) (@file_exists($this->config_imagemagick_path)), __FILE__, __LINE__); + $this->DebugMessage('file_exists_ignoreopenbasedir('.$this->config_imagemagick_path.') = '. (int) $this->file_exists_ignoreopenbasedir($this->config_imagemagick_path), __FILE__, __LINE__); + $this->DebugMessage(' is_file('.$this->config_imagemagick_path.') = '. (int) (@is_file($this->config_imagemagick_path)), __FILE__, __LINE__); + $this->DebugMessage(' is_executable('.$this->config_imagemagick_path.') = '. (int) (@is_executable($this->config_imagemagick_path)), __FILE__, __LINE__); if ($this->file_exists_ignoreopenbasedir($this->config_imagemagick_path)) { $this->DebugMessage('using ImageMagick path from $this->config_imagemagick_path ('.$this->config_imagemagick_path.')', __FILE__, __LINE__); if ($this->iswindows) { - $commandline = substr($this->config_imagemagick_path, 0, 2).' && cd '.$this->customEscapeshellarg(str_replace('/', DIRECTORY_SEPARATOR, substr(dirname($this->config_imagemagick_path), 2))).' && '.$this->customEscapeshellarg(basename($this->config_imagemagick_path)); + $commandline = substr($this->config_imagemagick_path, 0, 2).' && cd '.phpthumb_functions::escapeshellarg_replacement(str_replace('/', DIRECTORY_SEPARATOR, substr(dirname($this->config_imagemagick_path), 2))).' && '.phpthumb_functions::escapeshellarg_replacement(basename($this->config_imagemagick_path)); } else { - $commandline = $this->customEscapeshellarg($this->config_imagemagick_path); + $commandline = phpthumb_functions::escapeshellarg_replacement($this->config_imagemagick_path); } } else { @@ -1374,14 +1458,15 @@ function ImageMagickCommandlineBase() { } @file_put_contents($IMcommandlineBaseCacheFilename, $commandline); + @chmod($IMcommandlineBaseCacheFilename, $this->getParameter('config_file_create_mask')); } return $commandline; } - function ImageMagickVersion($returnRAW=false) { + public function ImageMagickVersion($returnRAW=false) { static $versionstring = null; - if (is_null($versionstring)) { + if (null === $versionstring) { $versionstring = array(0=>false, 1=>false); $IMversionCacheFilename = $this->config_cache_directory.DIRECTORY_SEPARATOR.'phpThumbCacheIMversion.txt'; @@ -1394,13 +1479,13 @@ function ImageMagickVersion($returnRAW=false) { } else { $commandline = $this->ImageMagickCommandlineBase(); - $commandline = (!is_null($commandline) ? $commandline : ''); + $commandline = (null !== $commandline ? $commandline : ''); if ($commandline) { $commandline .= ' --version'; $this->DebugMessage('ImageMagick version checked with "'.$commandline.'"', __FILE__, __LINE__); $versionstring[1] = trim(phpthumb_functions::SafeExec($commandline)); - if (preg_match('#^Version: [^0-9]*([ 0-9\\.\\:Q/\\-]+)#i', $versionstring[1], $matches)) { - $versionstring[0] = $matches[1]; + if (preg_match('#^Version: [^\d]*([ 0-9\\.\\:Q/\\-]+)#i', $versionstring[1], $matches)) { + $versionstring[0] = trim($matches[1]); } else { $versionstring[0] = false; $this->DebugMessage('ImageMagick did not return recognized version string ('.$versionstring[1].')', __FILE__, __LINE__); @@ -1409,19 +1494,20 @@ function ImageMagickVersion($returnRAW=false) { } @file_put_contents($IMversionCacheFilename, $versionstring[0]."\n".$versionstring[1]); + @chmod($IMversionCacheFilename, $this->getParameter('config_file_create_mask')); } } - return $versionstring[intval($returnRAW)]; + return $versionstring[ (int) $returnRAW ]; } - function ImageMagickSwitchAvailable($switchname) { + public function ImageMagickSwitchAvailable($switchname) { static $IMoptions = null; - if (is_null($IMoptions)) { + if (null === $IMoptions) { $IMoptions = array(); $commandline = $this->ImageMagickCommandlineBase(); - if (!is_null($commandline)) { + if (null !== $commandline) { $commandline .= ' -help'; $IMhelp_lines = explode("\n", phpthumb_functions::SafeExec($commandline)); foreach ($IMhelp_lines as $line) { @@ -1439,21 +1525,21 @@ function ImageMagickSwitchAvailable($switchname) { break; } } - $this->DebugMessage('ImageMagickSwitchAvailable('.implode(';', $switchname).') = '.intval($allOK).'', __FILE__, __LINE__); + $this->DebugMessage('ImageMagickSwitchAvailable('.implode(';', $switchname).') = '. (int) $allOK .'', __FILE__, __LINE__); } else { $allOK = isset($IMoptions[$switchname]); - $this->DebugMessage('ImageMagickSwitchAvailable('.$switchname.') = '.intval($allOK).'', __FILE__, __LINE__); + $this->DebugMessage('ImageMagickSwitchAvailable('.$switchname.') = '. (int) $allOK .'', __FILE__, __LINE__); } return $allOK; } - function ImageMagickFormatsList() { + public function ImageMagickFormatsList() { static $IMformatsList = null; - if (is_null($IMformatsList)) { + if (null === $IMformatsList) { $IMformatsList = ''; $commandline = $this->ImageMagickCommandlineBase(); - if (!is_null($commandline)) { + if (null !== $commandline) { $commandline = dirname($commandline).DIRECTORY_SEPARATOR.str_replace('convert', 'identify', basename($commandline)); $commandline .= ' -list format'; $IMformatsList = phpthumb_functions::SafeExec($commandline); @@ -1463,9 +1549,9 @@ function ImageMagickFormatsList() { } - function SourceDataToTempFile() { + public function SourceDataToTempFile() { if ($IMtempSourceFilename = $this->phpThumb_tempnam()) { - $IMtempSourceFilename = realpath($IMtempSourceFilename); + $IMtempSourceFilename = $this->realPathSafe($IMtempSourceFilename); ob_start(); $fp_tempfile = fopen($IMtempSourceFilename, 'wb'); $tempfile_open_error = ob_get_contents(); @@ -1473,6 +1559,7 @@ function SourceDataToTempFile() { if ($fp_tempfile) { fwrite($fp_tempfile, $this->rawImageData); fclose($fp_tempfile); + @chmod($IMtempSourceFilename, $this->getParameter('config_file_create_mask')); $this->sourceFilename = $IMtempSourceFilename; $this->DebugMessage('ImageMagickThumbnailToGD() setting $this->sourceFilename to "'.$IMtempSourceFilename.'" from $this->rawImageData ('.strlen($this->rawImageData).' bytes)', __FILE__, __LINE__); } else { @@ -1486,7 +1573,7 @@ function SourceDataToTempFile() { } - function ImageMagickThumbnailToGD() { + public function ImageMagickThumbnailToGD() { // http://www.imagemagick.org/script/command-line-options.php $this->useRawIMoutput = true; @@ -1496,7 +1583,7 @@ function ImageMagickThumbnailToGD() { // $UnAllowedParameters contains options that can only be processed in GD, not ImageMagick // note: 'fltr' *may* need to be processed by GD, but we'll check that in more detail below $UnAllowedParameters = array('xto', 'ar', 'bg', 'bc'); - // 'ra' may be part of this list, if not a multiple of 90� + // 'ra' may be part of this list, if not a multiple of 90 degrees foreach ($UnAllowedParameters as $parameter) { if (isset($this->$parameter)) { $this->DebugMessage('$this->useRawIMoutput=false because "'.$parameter.'" is set', __FILE__, __LINE__); @@ -1506,39 +1593,40 @@ function ImageMagickThumbnailToGD() { } } $this->DebugMessage('$this->useRawIMoutput='.($this->useRawIMoutput ? 'true' : 'false').' after checking $UnAllowedParameters', __FILE__, __LINE__); + $ImageCreateFunction = ''; $outputFormat = $this->thumbnailFormat; if (phpthumb_functions::gd_version()) { if ($this->useRawIMoutput) { switch ($this->thumbnailFormat) { case 'gif': - $ImageCreateFunction = 'ImageCreateFromGIF'; + $ImageCreateFunction = 'imagecreatefromgif'; $this->is_alpha = true; break; case 'png': - $ImageCreateFunction = 'ImageCreateFromPNG'; + $ImageCreateFunction = 'imagecreatefrompng'; $this->is_alpha = true; break; case 'jpg': case 'jpeg': - $ImageCreateFunction = 'ImageCreateFromJPEG'; + $ImageCreateFunction = 'imagecreatefromjpeg'; break; default: $this->DebugMessage('Forcing output to PNG because $this->thumbnailFormat ('.$this->thumbnailFormat.' is not a GD-supported format)', __FILE__, __LINE__); $outputFormat = 'png'; - $ImageCreateFunction = 'ImageCreateFromPNG'; + $ImageCreateFunction = 'imagecreatefrompng'; $this->is_alpha = true; $this->useRawIMoutput = false; break; } if (!function_exists(@$ImageCreateFunction)) { - // ImageMagickThumbnailToGD() depends on ImageCreateFromPNG/ImageCreateFromGIF + // ImageMagickThumbnailToGD() depends on imagecreatefrompng/imagecreatefromgif //$this->DebugMessage('ImageMagickThumbnailToGD() aborting because '.@$ImageCreateFunction.'() is not available', __FILE__, __LINE__); $this->useRawIMoutput = true; //return false; } } else { $outputFormat = 'png'; - $ImageCreateFunction = 'ImageCreateFromPNG'; + $ImageCreateFunction = 'imagecreatefrompng'; $this->is_alpha = true; $this->useRawIMoutput = false; } @@ -1567,8 +1655,9 @@ function ImageMagickThumbnailToGD() { $commandline = $this->ImageMagickCommandlineBase(); if ($commandline) { + $commandline .= ' '.phpthumb_functions::escapeshellarg_replacement(preg_replace('#[/\\\\]#', DIRECTORY_SEPARATOR, $this->sourceFilename).(($outputFormat == 'gif') ? '' : '['. (int) $this->sfn .']')); // [0] means first frame of (GIF) animation, can be ignored if ($IMtempfilename = $this->phpThumb_tempnam()) { - $IMtempfilename = realpath($IMtempfilename); + $IMtempfilename = $this->realPathSafe($IMtempfilename); $IMuseExplicitImageOutputDimensions = false; if ($this->ImageMagickSwitchAvailable('thumbnail') && $this->config_imagemagick_use_thumbnail) { @@ -1577,32 +1666,39 @@ function ImageMagickThumbnailToGD() { $IMresizeParameter = 'resize'; // some (older? around 2002) versions of IM won't accept "-resize 100x" but require "-resize 100x100" - $commandline_test = $this->ImageMagickCommandlineBase().' logo: -resize 1x '.$this->customEscapeshellarg($IMtempfilename).' 2>&1'; + $commandline_test = $this->ImageMagickCommandlineBase().' logo: -resize 1x '.phpthumb_functions::escapeshellarg_replacement($IMtempfilename).' 2>&1'; $IMresult_test = phpthumb_functions::SafeExec($commandline_test); $IMuseExplicitImageOutputDimensions = preg_match('#image dimensions are zero#i', $IMresult_test); - $this->DebugMessage('IMuseExplicitImageOutputDimensions = '.intval($IMuseExplicitImageOutputDimensions), __FILE__, __LINE__); + $this->DebugMessage('IMuseExplicitImageOutputDimensions = '. (int) $IMuseExplicitImageOutputDimensions, __FILE__, __LINE__); if ($fp_im_temp = @fopen($IMtempfilename, 'wb')) { // erase temp image so ImageMagick logo doesn't get output if other processing fails fclose($fp_im_temp); + @chmod($IMtempfilename, $this->getParameter('config_file_create_mask')); } } - if (!is_null($this->dpi) && $this->ImageMagickSwitchAvailable('density')) { - // for raster source formats only (WMF, PDF, etc) - $commandline .= ' -density '.$this->customEscapeshellarg($this->dpi); - } ob_start(); - $getimagesize = GetImageSize($this->sourceFilename); + $getimagesize = getimagesize($this->sourceFilename); $GetImageSizeError = ob_get_contents(); ob_end_clean(); if (is_array($getimagesize)) { - $this->DebugMessage('GetImageSize('.$this->sourceFilename.') SUCCEEDED: '.print_r($getimagesize, true), __FILE__, __LINE__); + $this->DebugMessage('getimagesize('.$this->sourceFilename.') SUCCEEDED: '.print_r($getimagesize, true), __FILE__, __LINE__); } else { - $this->DebugMessage('GetImageSize('.$this->sourceFilename.') FAILED with error "'.$GetImageSizeError.'"', __FILE__, __LINE__); + $this->DebugMessage('getimagesize('.$this->sourceFilename.') FAILED with error "'.$GetImageSizeError.'"', __FILE__, __LINE__); + } + if (null !== $this->dpi && $this->ImageMagickSwitchAvailable('density')) { + // for vector source formats only (WMF, PDF, etc) + if (is_array($getimagesize) && isset($getimagesize[2]) && ($getimagesize[2] == IMAGETYPE_PNG)) { + // explicitly exclude PNG from "-flatten" to make sure transparency is preserved + // https://github.com/JamesHeinrich/phpThumb/issues/65 + } else { + $commandline .= ' -flatten'; + $commandline .= ' -density '.phpthumb_functions::escapeshellarg_replacement($this->dpi); + } } if (is_array($getimagesize)) { - $this->DebugMessage('GetImageSize('.$this->sourceFilename.') returned [w='.$getimagesize[0].';h='.$getimagesize[1].';f='.$getimagesize[2].']', __FILE__, __LINE__); + $this->DebugMessage('getimagesize('.$this->sourceFilename.') returned [w='.$getimagesize[0].';h='.$getimagesize[1].';f='.$getimagesize[2].']', __FILE__, __LINE__); $this->source_width = $getimagesize[0]; $this->source_height = $getimagesize[1]; $this->DebugMessage('source dimensions set to '.$this->source_width.'x'.$this->source_height, __FILE__, __LINE__); @@ -1610,10 +1706,14 @@ function ImageMagickThumbnailToGD() { if (!preg_match('#('.implode('|', $this->AlphaCapableFormats).')#i', $outputFormat)) { // not a transparency-capable format - $commandline .= ' -background '.$this->customEscapeshellarg('#'.($this->bg ? $this->bg : 'FFFFFF')); + $commandline .= ' -background '.phpthumb_functions::escapeshellarg_replacement('#'.($this->bg ? $this->bg : 'FFFFFF')); if ($getimagesize[2] == IMAGETYPE_GIF) { $commandline .= ' -flatten'; } + } else { + if ($getimagesize[2] == IMAGETYPE_PNG && !$this->bg) { + $commandline .= ' -background none'; + } } if ($getimagesize[2] == IMAGETYPE_GIF) { $commandline .= ' -coalesce'; // may be needed for animated GIFs @@ -1624,14 +1724,14 @@ function ImageMagickThumbnailToGD() { $borderThickness = 0; if (!empty($this->fltr)) { foreach ($this->fltr as $key => $value) { - if (preg_match('#^bord\|([0-9]+)#', $value, $matches)) { + if (preg_match('#^bord\|([\d]+)#', $value, $matches)) { $borderThickness = $matches[1]; break; } } } - $wAll = intval(max($this->w, $this->wp, $this->wl, $this->ws)) - (2 * $borderThickness); - $hAll = intval(max($this->h, $this->hp, $this->hl, $this->hs)) - (2 * $borderThickness); + $wAll = (int) max($this->w, $this->wp, $this->wl, $this->ws) - (2 * $borderThickness); + $hAll = (int) max($this->h, $this->hp, $this->hl, $this->hs) - (2 * $borderThickness); $imAR = $this->source_width / $this->source_height; $zcAR = (($wAll && $hAll) ? $wAll / $hAll : 1); $side = phpthumb_functions::nonempty_min($this->source_width, $this->source_height, max($wAll, $hAll)); @@ -1639,7 +1739,11 @@ function ImageMagickThumbnailToGD() { $sideY = phpthumb_functions::nonempty_min( $this->source_height, $hAll, round($wAll / $zcAR)); $thumbnailH = round(max($sideY, ($sideY * $zcAR) / $imAR)); - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg(($IMuseExplicitImageOutputDimensions ? $thumbnailH : '').'x'.$thumbnailH); + if ($this->aoe == 1) { + $commandline .= ' -'.$IMresizeParameter.' "'.$wAll.'x'.$hAll.'^"'; + } else { + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement(($IMuseExplicitImageOutputDimensions ? $thumbnailH : '').'x'.$thumbnailH); + } switch (strtoupper($this->zc)) { case 'T': @@ -1674,9 +1778,9 @@ function ImageMagickThumbnailToGD() { } if (($wAll > 0) && ($hAll > 0)) { - $commandline .= ' -crop '.$this->customEscapeshellarg($wAll.'x'.$hAll.'+0+0'); + $commandline .= ' -crop '.phpthumb_functions::escapeshellarg_replacement($wAll.'x'.$hAll.'+0+0'); } else { - $commandline .= ' -crop '.$this->customEscapeshellarg($side.'x'.$side.'+0+0'); + $commandline .= ' -crop '.phpthumb_functions::escapeshellarg_replacement($side.'x'.$side.'+0+0'); } if ($this->ImageMagickSwitchAvailable('repage')) { $commandline .= ' +repage'; @@ -1695,7 +1799,7 @@ function ImageMagickThumbnailToGD() { // makes 1x1 output // http://trainspotted.com/phpThumb/phpThumb.php?src=/content/CNR/47/CNR-4728-LD-L-20110723-898.jpg&w=100&h=100&far=1&f=png&fltr[]=lvl&sx=0.05&sy=0.25&sw=0.92&sh=0.42 // '/usr/bin/convert' -density 150 -thumbnail 100x100 -contrast-stretch '0.1%' '/var/www/vhosts/trainspotted.com/httpdocs/content/CNR/47/CNR-4728-LD-L-20110723-898.jpg[0]' png:'/var/www/vhosts/trainspotted.com/httpdocs/phpThumb/_cache/pThumbIIUlvj' - $commandline .= ' -crop '.$this->customEscapeshellarg($crop_param); + $commandline .= ' -crop '.phpthumb_functions::escapeshellarg_replacement($crop_param); // this is broken for aoe=1, but unsure how to fix. Send advice to info@silisoftware.com if ($this->w || $this->h) { @@ -1714,19 +1818,29 @@ function ImageMagickThumbnailToGD() { $this->w = ceil($this->h * ($this->source_width / $this->source_height)); } } - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg($this->w.'x'.$this->h); + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement($this->w.'x'.$this->h); } } else { - if ($this->iar && (intval($this->w) > 0) && (intval($this->h) > 0)) { + if ($this->iar && ((int) $this->w > 0) && ((int) $this->h > 0)) { + list($nw, $nh) = phpthumb_functions::TranslateWHbyAngle($this->w, $this->h, $this->ra); $nw = ((round($nw) != 0) ? round($nw) : ''); $nh = ((round($nh) != 0) ? round($nh) : ''); - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg($nw.'x'.$nh.'!'); + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement($nw.'x'.$nh.'!'); + + } elseif ($this->far && ((int) $this->w > 0) && ((int) $this->h > 0)) { + + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement(phpthumb_functions::nonempty_min($this->w, $getimagesize[0]).'x'.phpthumb_functions::nonempty_min($this->h, $getimagesize[1])); + $commandline .= ' -gravity center'; + $commandline .= ' -background '.phpthumb_functions::escapeshellarg_replacement('#'.$this->bg); + $commandline .= ' -extent '.phpthumb_functions::escapeshellarg_replacement($this->w.'x'.$this->h); + } else { - $this->w = ((($this->aoe || $this->far) && $this->w) ? $this->w : ($this->w ? phpthumb_functions::nonempty_min($this->w, $getimagesize[0]) : '')); - $this->h = ((($this->aoe || $this->far) && $this->h) ? $this->h : ($this->h ? phpthumb_functions::nonempty_min($this->h, $getimagesize[1]) : '')); + + $this->w = (($this->aoe && $this->w) ? $this->w : ($this->w ? phpthumb_functions::nonempty_min($this->w, $getimagesize[0]) : '')); + $this->h = (($this->aoe && $this->h) ? $this->h : ($this->h ? phpthumb_functions::nonempty_min($this->h, $getimagesize[1]) : '')); if ($this->w || $this->h) { if ($IMuseExplicitImageOutputDimensions) { if ($this->w && !$this->h) { @@ -1738,39 +1852,40 @@ function ImageMagickThumbnailToGD() { list($nw, $nh) = phpthumb_functions::TranslateWHbyAngle($this->w, $this->h, $this->ra); $nw = ((round($nw) != 0) ? round($nw) : ''); $nh = ((round($nh) != 0) ? round($nh) : ''); - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg($nw.'x'.$nh); + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement($nw.'x'.$nh); } + } } } } else { - $this->DebugMessage('GetImageSize('.$this->sourceFilename.') failed', __FILE__, __LINE__); + $this->DebugMessage('getimagesize('.$this->sourceFilename.') failed', __FILE__, __LINE__); if ($this->w || $this->h) { - $exactDimensionsBang = (($this->iar && (intval($this->w) > 0) && (intval($this->h) > 0)) ? '!' : ''); + $exactDimensionsBang = (($this->iar && ((int) $this->w > 0) && ((int) $this->h > 0)) ? '!' : ''); if ($IMuseExplicitImageOutputDimensions) { // unknown source aspect ratio, just put large number and hope IM figures it out - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg(($this->w ? $this->w : '9999').'x'.($this->h ? $this->h : '9999').$exactDimensionsBang); + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement(($this->w ? $this->w : '9999').'x'.($this->h ? $this->h : '9999').$exactDimensionsBang); } else { - $commandline .= ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg($this->w.'x'.$this->h.$exactDimensionsBang); + $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement($this->w.'x'.$this->h.$exactDimensionsBang); } } } if ($this->ra) { - $this->ra = intval($this->ra); + $this->ra = (int) $this->ra; if ($this->ImageMagickSwitchAvailable('rotate')) { if (!preg_match('#('.implode('|', $this->AlphaCapableFormats).')#i', $outputFormat) || phpthumb_functions::version_compare_replacement($this->ImageMagickVersion(), '6.3.7', '>=')) { $this->DebugMessage('Using ImageMagick rotate', __FILE__, __LINE__); - $commandline .= ' -rotate '.$this->customEscapeshellarg($this->ra); + $commandline .= ' -rotate '.phpthumb_functions::escapeshellarg_replacement($this->ra); if (($this->ra % 90) != 0) { if (preg_match('#('.implode('|', $this->AlphaCapableFormats).')#i', $outputFormat)) { // alpha-capable format $commandline .= ' -background rgba(255,255,255,0)'; } else { - $commandline .= ' -background '.$this->customEscapeshellarg('#'.($this->bg ? $this->bg : 'FFFFFF')); + $commandline .= ' -background '.phpthumb_functions::escapeshellarg_replacement('#'.($this->bg ? $this->bg : 'FFFFFF')); } } $this->ra = 0; @@ -1788,14 +1903,14 @@ function ImageMagickThumbnailToGD() { switch ($command) { case 'brit': if ($this->ImageMagickSwitchAvailable('modulate')) { - $commandline .= ' -modulate '.$this->customEscapeshellarg((100 + intval($parameter)).',100,100'); + $commandline .= ' -modulate '.phpthumb_functions::escapeshellarg_replacement((100 + (int) $parameter).',100,100'); $successfullyProcessedFilters[] = $filterkey; } break; case 'cont': if ($this->ImageMagickSwitchAvailable('contrast')) { - $contDiv10 = round(intval($parameter) / 10); + $contDiv10 = round((int) $parameter / 10); if ($contDiv10 > 0) { $contDiv10 = min($contDiv10, 100); for ($i = 0; $i < $contDiv10; $i++) { @@ -1819,7 +1934,7 @@ function ImageMagickThumbnailToGD() { $commandline .= ' -colorspace GRAY'; $commandline .= ' -modulate 100,0,100'; } else { - $commandline .= ' -modulate '.$this->customEscapeshellarg('100,'.(100 - intval($parameter)).',100'); + $commandline .= ' -modulate '.phpthumb_functions::escapeshellarg_replacement('100,'.(100 - (int) $parameter).',100'); } $successfullyProcessedFilters[] = $filterkey; } @@ -1831,7 +1946,7 @@ function ImageMagickThumbnailToGD() { $commandline .= ' -colorspace GRAY'; $commandline .= ' -modulate 100,0,100'; } else { - $commandline .= ' -modulate '.$this->customEscapeshellarg('100,'.(100 + intval($parameter)).',100'); + $commandline .= ' -modulate '.phpthumb_functions::escapeshellarg_replacement('100,'.(100 + (int) $parameter).',100'); } $successfullyProcessedFilters[] = $filterkey; } @@ -1848,8 +1963,9 @@ function ImageMagickThumbnailToGD() { case 'clr': if ($this->ImageMagickSwitchAvailable(array('fill', 'colorize'))) { @list($amount, $color) = explode('|', $parameter); - $commandline .= ' -fill '.$this->customEscapeshellarg('#'.preg_replace('#[^0-9A-F]#i', '', $color)); - $commandline .= ' -colorize '.$this->customEscapeshellarg(min(max(intval($amount), 0), 100)); + $commandline .= ' -fill '.phpthumb_functions::escapeshellarg_replacement('#'.preg_replace('#[^0-9A-F]#i', '', $color)); + $commandline .= ' -colorize '.phpthumb_functions::escapeshellarg_replacement(min(max((int) $amount, 0), 100)); + $successfullyProcessedFilters[] = $filterkey; } break; @@ -1858,7 +1974,7 @@ function ImageMagickThumbnailToGD() { @list($amount, $color) = explode('|', $parameter); $amount = ($amount ? $amount : 80); if (!$color) { - $commandline .= ' -sepia-tone '.$this->customEscapeshellarg(min(max(intval($amount), 0), 100).'%'); + $commandline .= ' -sepia-tone '.phpthumb_functions::escapeshellarg_replacement(min(max((int) $amount, 0), 100).'%'); $successfullyProcessedFilters[] = $filterkey; } } @@ -1866,10 +1982,10 @@ function ImageMagickThumbnailToGD() { case 'gam': @list($amount) = explode('|', $parameter); - $amount = min(max(floatval($amount), 0.001), 10); + $amount = min(max((float) $amount, 0.001), 10); if (number_format($amount, 3) != '1.000') { if ($this->ImageMagickSwitchAvailable('gamma')) { - $commandline .= ' -gamma '.$this->customEscapeshellarg($amount); + $commandline .= ' -gamma '.phpthumb_functions::escapeshellarg_replacement($amount); $successfullyProcessedFilters[] = $filterkey; } } @@ -1885,7 +2001,7 @@ function ImageMagickThumbnailToGD() { case 'th': @list($amount) = explode('|', $parameter); if ($this->ImageMagickSwitchAvailable(array('threshold', 'dither', 'monochrome'))) { - $commandline .= ' -threshold '.$this->customEscapeshellarg(round(min(max(intval($amount), 0), 255) / 2.55).'%'); + $commandline .= ' -threshold '.phpthumb_functions::escapeshellarg_replacement(round(min(max((int) $amount, 0), 255) / 2.55).'%'); $commandline .= ' -dither'; $commandline .= ' -monochrome'; $successfullyProcessedFilters[] = $filterkey; @@ -1897,7 +2013,7 @@ function ImageMagickThumbnailToGD() { @list($colors, $dither) = explode('|', $parameter); $colors = ($colors ? (int) $colors : 256); $dither = ((strlen($dither) > 0) ? (bool) $dither : true); - $commandline .= ' -colors '.$this->customEscapeshellarg(max($colors, 8)); // ImageMagick will otherwise fail with "cannot quantize to fewer than 8 colors" + $commandline .= ' -colors '.phpthumb_functions::escapeshellarg_replacement(max($colors, 8)); // ImageMagick will otherwise fail with "cannot quantize to fewer than 8 colors" $commandline .= ($dither ? ' -dither' : ' +dither'); $successfullyProcessedFilters[] = $filterkey; } @@ -1918,7 +2034,7 @@ function ImageMagickThumbnailToGD() { case 'edge': if ($this->ImageMagickSwitchAvailable('edge')) { $parameter = (!empty($parameter) ? $parameter : 2); - $commandline .= ' -edge '.$this->customEscapeshellarg(!empty($parameter) ? intval($parameter) : 1); + $commandline .= ' -edge '.phpthumb_functions::escapeshellarg_replacement(!empty($parameter) ? (int) $parameter : 1); $successfullyProcessedFilters[] = $filterkey; } break; @@ -1926,7 +2042,7 @@ function ImageMagickThumbnailToGD() { case 'emb': if ($this->ImageMagickSwitchAvailable(array('emboss', 'negate'))) { $parameter = (!empty($parameter) ? $parameter : 2); - $commandline .= ' -emboss '.$this->customEscapeshellarg(intval($parameter)); + $commandline .= ' -emboss '.phpthumb_functions::escapeshellarg_replacement((int) $parameter); if ($parameter < 2) { $commandline .= ' -negate'; // ImageMagick negates the image for some reason with '-emboss 1'; } @@ -1937,8 +2053,8 @@ function ImageMagickThumbnailToGD() { case 'lvl': @list($band, $method, $threshold) = explode('|', $parameter); $band = ($band ? preg_replace('#[^RGBA\\*]#', '', strtoupper($band)) : '*'); - $method = ((strlen($method) > 0) ? intval($method) : 2); - $threshold = ((strlen($threshold) > 0) ? min(max(floatval($threshold), 0), 100) : 0.1); + $method = ((strlen($method) > 0) ? (int) $method : 2); + $threshold = ((strlen($threshold) > 0) ? min(max((float) $threshold, 0), 100) : 0.1); $band = preg_replace('#[^RGBA\\*]#', '', strtoupper($band)); @@ -1963,10 +2079,10 @@ function ImageMagickThumbnailToGD() { case 2: // ImageMagick "contrast-stretch" if ($this->ImageMagickSwitchAvailable('contrast-stretch')) { if ($band != '*') { - $commandline .= ' -channel '.$this->customEscapeshellarg(strtoupper($band)); + $commandline .= ' -channel '.phpthumb_functions::escapeshellarg_replacement(strtoupper($band)); } $threshold = preg_replace('#[^0-9\\.]#', '', $threshold); // should be unneccesary, but just to be double-sure - //$commandline .= ' -contrast-stretch '.escapeshellarg($threshold.'%'); + //$commandline .= ' -contrast-stretch '.phpthumb_functions::escapeshellarg_replacement($threshold.'%'); $commandline .= ' -contrast-stretch \''.$threshold.'%\''; if ($band != '*') { $commandline .= ' +channel'; @@ -1977,7 +2093,7 @@ function ImageMagickThumbnailToGD() { case 3: // ImageMagick "normalize" if ($this->ImageMagickSwitchAvailable('normalize')) { if ($band != '*') { - $commandline .= ' -channel '.$this->customEscapeshellarg(strtoupper($band)); + $commandline .= ' -channel '.phpthumb_functions::escapeshellarg_replacement(strtoupper($band)); } $commandline .= ' -normalize'; if ($band != '*') { @@ -1999,11 +2115,11 @@ function ImageMagickThumbnailToGD() { case 'wb': if ($this->ImageMagickSwitchAvailable(array('channel', 'contrast-stretch'))) { @list($threshold) = explode('|', $parameter); - $threshold = (!empty($threshold) ? min(max(floatval($threshold), 0), 100) : 0.1); + $threshold = (!empty($threshold) ? min(max((float) $threshold, 0), 100) : 0.1); $threshold = preg_replace('#[^0-9\\.]#', '', $threshold); // should be unneccesary, but just to be double-sure - //$commandline .= ' -channel R -contrast-stretch '.escapeshellarg($threshold.'%'); // doesn't work on Windows because most versions of PHP do not properly - //$commandline .= ' -channel G -contrast-stretch '.escapeshellarg($threshold.'%'); // escape special characters (such as %) and just replace them with spaces - //$commandline .= ' -channel B -contrast-stretch '.escapeshellarg($threshold.'%'); // https://bugs.php.net/bug.php?id=43261 + //$commandline .= ' -channel R -contrast-stretch '.phpthumb_functions::escapeshellarg_replacement($threshold.'%'); // doesn't work on Windows because most versions of PHP do not properly + //$commandline .= ' -channel G -contrast-stretch '.phpthumb_functions::escapeshellarg_replacement($threshold.'%'); // escape special characters (such as %) and just replace them with spaces + //$commandline .= ' -channel B -contrast-stretch '.phpthumb_functions::escapeshellarg_replacement($threshold.'%'); // https://bugs.php.net/bug.php?id=43261 $commandline .= ' -channel R -contrast-stretch \''.$threshold.'%\''; $commandline .= ' -channel G -contrast-stretch \''.$threshold.'%\''; $commandline .= ' -channel B -contrast-stretch \''.$threshold.'%\''; @@ -2015,21 +2131,21 @@ function ImageMagickThumbnailToGD() { case 'blur': if ($this->ImageMagickSwitchAvailable('blur')) { @list($radius) = explode('|', $parameter); - $radius = (!empty($radius) ? min(max(intval($radius), 0), 25) : 1); - $commandline .= ' -blur '.$this->customEscapeshellarg($radius); + $radius = (!empty($radius) ? min(max((int) $radius, 0), 25) : 1); + $commandline .= ' -blur '.phpthumb_functions::escapeshellarg_replacement($radius); $successfullyProcessedFilters[] = $filterkey; } break; case 'gblr': @list($radius) = explode('|', $parameter); - $radius = (!empty($radius) ? min(max(intval($radius), 0), 25) : 1); + $radius = (!empty($radius) ? min(max((int) $radius, 0), 25) : 1); // "-gaussian" changed to "-gaussian-blur" sometime around 2009 if ($this->ImageMagickSwitchAvailable('gaussian-blur')) { - $commandline .= ' -gaussian-blur '.$this->customEscapeshellarg($radius); + $commandline .= ' -gaussian-blur '.phpthumb_functions::escapeshellarg_replacement($radius); $successfullyProcessedFilters[] = $filterkey; } elseif ($this->ImageMagickSwitchAvailable('gaussian')) { - $commandline .= ' -gaussian '.$this->customEscapeshellarg($radius); + $commandline .= ' -gaussian '.phpthumb_functions::escapeshellarg_replacement($radius); $successfullyProcessedFilters[] = $filterkey; } break; @@ -2037,10 +2153,10 @@ function ImageMagickThumbnailToGD() { case 'usm': if ($this->ImageMagickSwitchAvailable('unsharp')) { @list($amount, $radius, $threshold) = explode('|', $parameter); - $amount = ($amount ? min(max(intval($radius), 0), 255) : 80); - $radius = ($radius ? min(max(intval($radius), 0), 10) : 0.5); - $threshold = (strlen($threshold) ? min(max(intval($radius), 0), 50) : 3); - $commandline .= ' -unsharp '.$this->customEscapeshellarg(number_format(($radius * 2) - 1, 2, '.', '').'x1+'.number_format($amount / 100, 2, '.', '').'+'.number_format($threshold / 100, 2, '.', '')); + $amount = ($amount ? min(max((int) $amount, 0), 255) : 80); + $radius = ($radius ? min(max((int) $radius, 0), 10) : 0.5); + $threshold = ('' !== $threshold ? min(max((int) $threshold, 0), 50) : 3); + $commandline .= ' -unsharp '.phpthumb_functions::escapeshellarg_replacement(number_format(($radius * 2) - 1, 2, '.', '').'x1+'.number_format($amount / 100, 2, '.', '').'+'.number_format($threshold / 100, 2, '.', '')); $successfullyProcessedFilters[] = $filterkey; } break; @@ -2049,20 +2165,20 @@ function ImageMagickThumbnailToGD() { if ($this->ImageMagickSwitchAvailable(array('border', 'bordercolor', 'thumbnail', 'crop'))) { if (!$this->zc) { @list($width, $rX, $rY, $color) = explode('|', $parameter); - $width = intval($width); - $rX = intval($rX); - $rY = intval($rY); + $width = (int) $width; + $rX = (int) $rX; + $rY = (int) $rY; if ($width && !$rX && !$rY) { if (!phpthumb_functions::IsHexColor($color)) { $color = ((!empty($this->bc) && phpthumb_functions::IsHexColor($this->bc)) ? $this->bc : '000000'); } - $commandline .= ' -border '.$this->customEscapeshellarg(intval($width)); - $commandline .= ' -bordercolor '.$this->customEscapeshellarg('#'.$color); + $commandline .= ' -border '.phpthumb_functions::escapeshellarg_replacement((int) $width); + $commandline .= ' -bordercolor '.phpthumb_functions::escapeshellarg_replacement('#'.$color); - if (preg_match('# \\-crop "([0-9]+)x([0-9]+)\\+0\\+0" #', $commandline, $matches)) { - $commandline = str_replace(' -crop "'.$matches[1].'x'.$matches[2].'+0+0" ', ' -crop '.$this->customEscapeshellarg(($matches[1] - (2 * $width)).'x'.($matches[2] - (2 * $width)).'+0+0').' ', $commandline); + if (preg_match('# \\-crop "([\d]+)x([\d]+)\\+0\\+0" #', $commandline, $matches)) { + $commandline = str_replace(' -crop "'.$matches[1].'x'.$matches[2].'+0+0" ', ' -crop '.phpthumb_functions::escapeshellarg_replacement(($matches[1] - (2 * $width)).'x'.($matches[2] - (2 * $width)).'+0+0').' ', $commandline); } elseif (preg_match('# \\-'.$IMresizeParameter.' "([0-9]+)x([0-9]+)" #', $commandline, $matches)) { - $commandline = str_replace(' -'.$IMresizeParameter.' "'.$matches[1].'x'.$matches[2].'" ', ' -'.$IMresizeParameter.' '.$this->customEscapeshellarg(($matches[1] - (2 * $width)).'x'.($matches[2] - (2 * $width))).' ', $commandline); + $commandline = str_replace(' -'.$IMresizeParameter.' "'.$matches[1].'x'.$matches[2].'" ', ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement(($matches[1] - (2 * $width)).'x'.($matches[2] - (2 * $width))).' ', $commandline); } $successfullyProcessedFilters[] = $filterkey; } @@ -2136,15 +2252,14 @@ function ImageMagickThumbnailToGD() { if (preg_match('#jpe?g#i', $outputFormat) && $this->q) { if ($this->ImageMagickSwitchAvailable(array('quality', 'interlace'))) { - $commandline .= ' -quality '.$this->customEscapeshellarg($this->thumbnailQuality); + $commandline .= ' -quality '.phpthumb_functions::escapeshellarg_replacement($this->thumbnailQuality); if ($this->config_output_interlace) { // causes weird things with animated GIF... leave for JPEG only $commandline .= ' -interlace line '; // Use Line or Plane to create an interlaced PNG or GIF or progressive JPEG image } } } - $commandline .= ' '.$this->customEscapeshellarg(preg_replace('#[/\\\\]#', DIRECTORY_SEPARATOR, $this->sourceFilename).(($outputFormat == 'gif') ? '' : '['.intval($this->sfn).']')); // [0] means first frame of (GIF) animation, can be ignored - $commandline .= ' '.$outputFormat.':'.$this->customEscapeshellarg($IMtempfilename); + $commandline .= ' '.$outputFormat.':'.phpthumb_functions::escapeshellarg_replacement($IMtempfilename); if (!$this->iswindows) { $commandline .= ' 2>&1'; } @@ -2164,13 +2279,13 @@ function ImageMagickThumbnailToGD() { unset($this->fltr[$filterkey]); } $this->IMresizedData = file_get_contents($IMtempfilename); - $getimagesize_imresized = @GetImageSize($IMtempfilename); - $this->DebugMessage('GetImageSize('.$IMtempfilename.') returned [w='.$getimagesize_imresized[0].';h='.$getimagesize_imresized[1].';f='.$getimagesize_imresized[2].']', __FILE__, __LINE__); + $getimagesize_imresized = @getimagesize($IMtempfilename); + $this->DebugMessage('getimagesize('.$IMtempfilename.') returned [w='.$getimagesize_imresized[0].';h='.$getimagesize_imresized[1].';f='.$getimagesize_imresized[2].']', __FILE__, __LINE__); if (($this->config_max_source_pixels > 0) && (($getimagesize_imresized[0] * $getimagesize_imresized[1]) > $this->config_max_source_pixels)) { $this->DebugMessage('skipping ImageMagickThumbnailToGD::'.$ImageCreateFunction.'() because IM output is too large ('.$getimagesize_imresized[0].'x'.$getimagesize_imresized[0].' = '.($getimagesize_imresized[0] * $getimagesize_imresized[1]).' > '.$this->config_max_source_pixels.')', __FILE__, __LINE__); } elseif (function_exists(@$ImageCreateFunction) && ($this->gdimg_source = @$ImageCreateFunction($IMtempfilename))) { - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); $this->DebugMessage('ImageMagickThumbnailToGD::'.$ImageCreateFunction.'() succeeded, $this->gdimg_source is now ('.$this->source_width.'x'.$this->source_height.')', __FILE__, __LINE__); $this->DebugMessage('ImageMagickThumbnailToGD() returning $this->IMresizedData ('.strlen($this->IMresizedData).' bytes)', __FILE__, __LINE__); } else { @@ -2207,14 +2322,14 @@ function ImageMagickThumbnailToGD() { } - function Rotate() { + public function Rotate() { if ($this->ra || $this->ar) { - if (!function_exists('ImageRotate')) { - $this->DebugMessage('!function_exists(ImageRotate)', __FILE__, __LINE__); + if (!function_exists('imagerotate')) { + $this->DebugMessage('!function_exists(imagerotate)', __FILE__, __LINE__); return false; } - if (!include_once(dirname(__FILE__) . '/phpthumb.filters.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.filters.php" which is required for applying filters ('.implode(';', $this->fltr).')', __FILE__, __LINE__); + if (!include_once __DIR__ .'/phpthumb.filters.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.filters.php" which is required for applying filters ('.implode(';', $this->fltr).')', __FILE__, __LINE__); return false; } @@ -2226,12 +2341,12 @@ function Rotate() { $rotate_angle = 0; if ($this->ra) { - $rotate_angle = floatval($this->ra); + $rotate_angle = (float) $this->ra; } else { if ($this->ar == 'x') { - if (phpthumb_functions::version_compare_replacement(phpversion(), '4.2.0', '>=')) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '4.2.0', '>=')) { if ($this->sourceFilename) { if (function_exists('exif_read_data')) { if ($exif_data = @exif_read_data($this->sourceFilename, 'IFD0')) { @@ -2269,7 +2384,7 @@ function Rotate() { return false; } } else { - $this->DebugMessage('Cannot auto-rotate from EXIF data because PHP is less than v4.2.0 ('.phpversion().')', __FILE__, __LINE__); + $this->DebugMessage('Cannot auto-rotate from EXIF data because PHP is less than v4.2.0 ('. PHP_VERSION .')', __FILE__, __LINE__); return false; } } elseif (($this->ar == 'l') && ($this->source_height > $this->source_width)) { @@ -2286,15 +2401,15 @@ function Rotate() { if ($rotate_angle % 90) { $this->is_alpha = true; } - phpthumb_filters::ImprovedImageRotate($this->gdimg_source, $rotate_angle, $this->config_background_hexcolor, $this->bg); - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + phpthumb_filters::ImprovedImageRotate($this->gdimg_source, $rotate_angle, $this->config_background_hexcolor, $this->bg, $this); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); } return true; } - function FixedAspectRatio() { + public function FixedAspectRatio() { // optional fixed-dimension images (regardless of aspect ratio) if (!$this->far) { @@ -2334,7 +2449,7 @@ function FixedAspectRatio() { } - function OffsiteDomainIsAllowed($hostname, $allowed_domains) { + public function OffsiteDomainIsAllowed($hostname, $allowed_domains) { static $domain_is_allowed = array(); $hostname = strtolower($hostname); if (!isset($domain_is_allowed[$hostname])) { @@ -2359,9 +2474,9 @@ function OffsiteDomainIsAllowed($hostname, $allowed_domains) { } - function AntiOffsiteLinking() { + public function AntiOffsiteLinking() { // Optional anti-offsite hijacking of the thumbnail script - $allow = true; + $allow = true; if ($allow && $this->config_nooffsitelink_enabled && (@$_SERVER['HTTP_REFERER'] || $this->config_nooffsitelink_require_refer)) { $this->DebugMessage('AntiOffsiteLinking() checking $_SERVER[HTTP_REFERER] "'.@$_SERVER['HTTP_REFERER'].'"', __FILE__, __LINE__); foreach ($this->config_nooffsitelink_valid_domains as $key => $valid_domain) { @@ -2371,9 +2486,7 @@ function AntiOffsiteLinking() { } $parsed_url = phpthumb_functions::ParseURLbetter(@$_SERVER['HTTP_REFERER']); if (!$this->OffsiteDomainIsAllowed(@$parsed_url['host'], $this->config_nooffsitelink_valid_domains)) { - $allow = false; - $erase = $this->config_nooffsitelink_erase_image; - $message = $this->config_nooffsitelink_text_message; + $allow = false; //$this->DebugMessage('AntiOffsiteLinking() - "'.@$parsed_url['host'].'" is NOT in $this->config_nooffsitelink_valid_domains ('.implode(';', $this->config_nooffsitelink_valid_domains).')', __FILE__, __LINE__); $this->ErrorImage('AntiOffsiteLinking() - "'.@$parsed_url['host'].'" is NOT in $this->config_nooffsitelink_valid_domains ('.implode(';', $this->config_nooffsitelink_valid_domains).')'); } else { @@ -2387,8 +2500,6 @@ function AntiOffsiteLinking() { if (!$this->OffsiteDomainIsAllowed(@$parsed_url['host'], $this->config_nohotlink_valid_domains)) { // This domain is not allowed $allow = false; - $erase = $this->config_nohotlink_erase_image; - $message = $this->config_nohotlink_text_message; $this->DebugMessage('AntiOffsiteLinking() - "'.$parsed_url['host'].'" is NOT in $this->config_nohotlink_valid_domains ('.implode(';', $this->config_nohotlink_valid_domains).')', __FILE__, __LINE__); } else { $this->DebugMessage('AntiOffsiteLinking() - "'.$parsed_url['host'].'" is in $this->config_nohotlink_valid_domains ('.implode(';', $this->config_nohotlink_valid_domains).')', __FILE__, __LINE__); @@ -2406,17 +2517,17 @@ function AntiOffsiteLinking() { if (!phpthumb_functions::IsHexColor($this->config_error_textcolor)) { return $this->ErrorImage('Invalid hex color string "'.$this->config_error_textcolor.'" for $this->config_error_textcolor'); } - if ($erase) { + if ($this->config_nooffsitelink_erase_image) { - return $this->ErrorImage($message, $this->thumbnail_width, $this->thumbnail_height, $this->config_error_bgcolor, $this->config_error_textcolor, $this->config_error_fontsize); + return $this->ErrorImage($this->config_nooffsitelink_text_message, $this->thumbnail_width, $this->thumbnail_height); } else { $this->config_nooffsitelink_watermark_src = $this->ResolveFilenameToAbsolute($this->config_nooffsitelink_watermark_src); if (is_file($this->config_nooffsitelink_watermark_src)) { - if (!include_once(dirname(__FILE__) . '/phpthumb.filters.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.filters.php" which is required for applying watermark', __FILE__, __LINE__); + if (!include_once __DIR__ .'/phpthumb.filters.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.filters.php" which is required for applying watermark', __FILE__, __LINE__); return false; } $watermark_img = $this->ImageCreateFromStringReplacement(file_get_contents($this->config_nooffsitelink_watermark_src)); @@ -2425,21 +2536,21 @@ function AntiOffsiteLinking() { $opacity = 50; $margin = 5; $phpthumbFilters->WatermarkOverlay($this->gdimg_output, $watermark_img, '*', $opacity, $margin); - ImageDestroy($watermark_img); + imagedestroy($watermark_img); unset($phpthumbFilters); } else { - $nohotlink_text_array = explode("\n", wordwrap($message, floor($this->thumbnail_width / ImageFontWidth($this->config_error_fontsize)), "\n")); + $nohotlink_text_array = explode("\n", wordwrap($this->config_nooffsitelink_text_message, floor($this->thumbnail_width / imagefontwidth($this->config_error_fontsize)), "\n")); $nohotlink_text_color = phpthumb_functions::ImageHexColorAllocate($this->gdimg_output, $this->config_error_textcolor); - $topoffset = round(($this->thumbnail_height - (count($nohotlink_text_array) * ImageFontHeight($this->config_error_fontsize))) / 2); + $topoffset = round(($this->thumbnail_height - (count($nohotlink_text_array) * imagefontheight($this->config_error_fontsize))) / 2); $rowcounter = 0; - $this->DebugMessage('AntiOffsiteLinking() writing '.count($nohotlink_text_array).' lines of text "'.$message.'" (in #'.$this->config_error_textcolor.') on top of image', __FILE__, __LINE__); + $this->DebugMessage('AntiOffsiteLinking() writing '.count($nohotlink_text_array).' lines of text "'.$this->config_nooffsitelink_text_message.'" (in #'.$this->config_error_textcolor.') on top of image', __FILE__, __LINE__); foreach ($nohotlink_text_array as $textline) { - $leftoffset = max(0, round(($this->thumbnail_width - (strlen($textline) * ImageFontWidth($this->config_error_fontsize))) / 2)); - ImageString($this->gdimg_output, $this->config_error_fontsize, $leftoffset, $topoffset + ($rowcounter++ * ImageFontHeight($this->config_error_fontsize)), $textline, $nohotlink_text_color); + $leftoffset = max(0, round(($this->thumbnail_width - (strlen($textline) * imagefontwidth($this->config_error_fontsize))) / 2)); + imagestring($this->gdimg_output, $this->config_error_fontsize, $leftoffset, $topoffset + ($rowcounter++ * imagefontheight($this->config_error_fontsize)), $textline, $nohotlink_text_color); } } @@ -2449,7 +2560,7 @@ function AntiOffsiteLinking() { } - function AlphaChannelFlatten() { + public function AlphaChannelFlatten() { if (!$this->is_alpha) { // image doesn't have alpha transparency, no need to flatten $this->DebugMessage('skipping AlphaChannelFlatten() because !$this->is_alpha', __FILE__, __LINE__); @@ -2465,7 +2576,7 @@ function AlphaChannelFlatten() { case 'gif': // image has alpha transparency, but output as GIF which can handle only single-color transparency - $CurrentImageColorTransparent = ImageColorTransparent($this->gdimg_output); + $CurrentImageColorTransparent = imagecolortransparent($this->gdimg_output); if ($CurrentImageColorTransparent == -1) { // no transparent color defined @@ -2474,53 +2585,53 @@ function AlphaChannelFlatten() { return false; } - if ($img_alpha_mixdown_dither = @ImageCreateTrueColor(ImageSX($this->gdimg_output), ImageSY($this->gdimg_output))) { + if ($img_alpha_mixdown_dither = @imagecreatetruecolor(imagesx($this->gdimg_output), imagesy($this->gdimg_output))) { + $dither_color = array(); for ($i = 0; $i <= 255; $i++) { - $dither_color[$i] = ImageColorAllocate($img_alpha_mixdown_dither, $i, $i, $i); + $dither_color[$i] = imagecolorallocate($img_alpha_mixdown_dither, $i, $i, $i); } // scan through current truecolor image copy alpha channel to temp image as grayscale for ($x = 0; $x < $this->thumbnail_width; $x++) { for ($y = 0; $y < $this->thumbnail_height; $y++) { $PixelColor = phpthumb_functions::GetPixelColor($this->gdimg_output, $x, $y); - ImageSetPixel($img_alpha_mixdown_dither, $x, $y, $dither_color[($PixelColor['alpha'] * 2)]); + imagesetpixel($img_alpha_mixdown_dither, $x, $y, $dither_color[ $PixelColor[ 'alpha'] * 2 ]); } } // dither alpha channel grayscale version down to 2 colors - ImageTrueColorToPalette($img_alpha_mixdown_dither, true, 2); + imagetruecolortopalette($img_alpha_mixdown_dither, true, 2); // reduce color palette to 256-1 colors (leave one palette position for transparent color) - ImageTrueColorToPalette($this->gdimg_output, true, 255); + imagetruecolortopalette($this->gdimg_output, true, 255); // allocate a new color for transparent color index - $TransparentColor = ImageColorAllocate($this->gdimg_output, 1, 254, 253); - ImageColorTransparent($this->gdimg_output, $TransparentColor); + $TransparentColor = imagecolorallocate($this->gdimg_output, 1, 254, 253); + imagecolortransparent($this->gdimg_output, $TransparentColor); // scan through alpha channel image and note pixels with >50% transparency - $TransparentPixels = array(); for ($x = 0; $x < $this->thumbnail_width; $x++) { for ($y = 0; $y < $this->thumbnail_height; $y++) { $AlphaChannelPixel = phpthumb_functions::GetPixelColor($img_alpha_mixdown_dither, $x, $y); if ($AlphaChannelPixel['red'] > 127) { - ImageSetPixel($this->gdimg_output, $x, $y, $TransparentColor); + imagesetpixel($this->gdimg_output, $x, $y, $TransparentColor); } } } - ImageDestroy($img_alpha_mixdown_dither); + imagedestroy($img_alpha_mixdown_dither); $this->DebugMessage('AlphaChannelFlatten() set image to 255+1 colors with transparency for GIF output', __FILE__, __LINE__); return true; } else { - $this->DebugMessage('AlphaChannelFlatten() failed ImageCreate('.ImageSX($this->gdimg_output).', '.ImageSY($this->gdimg_output).')', __FILE__, __LINE__); + $this->DebugMessage('AlphaChannelFlatten() failed imagecreate('.imagesx($this->gdimg_output).', '.imagesy($this->gdimg_output).')', __FILE__, __LINE__); return false; } } else { // a single transparent color already defined, leave as-is - $this->DebugMessage('skipping AlphaChannelFlatten() because ($this->thumbnailFormat == "'.$this->thumbnailFormat.'") and ImageColorTransparent returned "'.$CurrentImageColorTransparent.'"', __FILE__, __LINE__); + $this->DebugMessage('skipping AlphaChannelFlatten() because ($this->thumbnailFormat == "'.$this->thumbnailFormat.'") and imagecolortransparent() returned "'.$CurrentImageColorTransparent.'"', __FILE__, __LINE__); return true; } break; @@ -2534,15 +2645,15 @@ function AlphaChannelFlatten() { return $this->ErrorImage('Invalid hex color string "'.$this->config_background_hexcolor.'" for parameter "bg"'); } $background_color = phpthumb_functions::ImageHexColorAllocate($this->gdimg_output, $this->config_background_hexcolor); - ImageFilledRectangle($gdimg_flatten_temp, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $background_color); - ImageCopy($gdimg_flatten_temp, $this->gdimg_output, 0, 0, 0, 0, $this->thumbnail_width, $this->thumbnail_height); + imagefilledrectangle($gdimg_flatten_temp, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $background_color); + imagecopy($gdimg_flatten_temp, $this->gdimg_output, 0, 0, 0, 0, $this->thumbnail_width, $this->thumbnail_height); - ImageAlphaBlending($this->gdimg_output, true); - ImageSaveAlpha($this->gdimg_output, false); - ImageColorTransparent($this->gdimg_output, -1); - ImageCopy($this->gdimg_output, $gdimg_flatten_temp, 0, 0, 0, 0, $this->thumbnail_width, $this->thumbnail_height); + imagealphablending($this->gdimg_output, true); + imagesavealpha($this->gdimg_output, false); + imagecolortransparent($this->gdimg_output, -1); + imagecopy($this->gdimg_output, $gdimg_flatten_temp, 0, 0, 0, 0, $this->thumbnail_width, $this->thumbnail_height); - ImageDestroy($gdimg_flatten_temp); + imagedestroy($gdimg_flatten_temp); return true; } else { @@ -2552,10 +2663,10 @@ function AlphaChannelFlatten() { } - function ApplyFilters() { + public function ApplyFilters() { if ($this->fltr && is_array($this->fltr)) { - if (!include_once(dirname(__FILE__) . '/phpthumb.filters.php')) { - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.filters.php" which is required for applying filters ('.implode(';', $this->fltr).')', __FILE__, __LINE__); + if (!include_once __DIR__ .'/phpthumb.filters.php' ) { + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.filters.php" which is required for applying filters ('.implode(';', $this->fltr).')', __FILE__, __LINE__); return false; } $phpthumbFilters = new phpthumb_filters(); @@ -2626,7 +2737,7 @@ function ApplyFilters() { break; case 'flip': // Flip - $phpthumbFilters->Flip($this->gdimg_output, (strpos(strtolower($parameter), 'x') !== false), (strpos(strtolower($parameter), 'y') !== false)); + $phpthumbFilters->Flip($this->gdimg_output, strpos(strtolower($parameter), 'x') !== false, strpos(strtolower($parameter), 'y') !== false); break; case 'edge': // EdgeDetect @@ -2645,8 +2756,8 @@ function ApplyFilters() { case 'lvl': // autoLevels @list($band, $method, $threshold) = explode('|', $parameter, 3); $band = ($band ? preg_replace('#[^RGBA\\*]#', '', strtoupper($band)) : '*'); - $method = ((strlen($method) > 0) ? intval($method) : 2); - $threshold = ((strlen($threshold) > 0) ? floatval($threshold) : 0.1); + $method = ((strlen($method) > 0) ? (int) $method : 2); + $threshold = ((strlen($threshold) > 0) ? (float) $threshold : 0.1); $phpthumbFilters->HistogramStretch($this->gdimg_output, $band, $method, $threshold); break; @@ -2668,7 +2779,7 @@ function ApplyFilters() { $alignment = ($alignment ? $alignment : 'BR'); $opacity = ($opacity ? $opacity : 50); $margin_x = ($margin_x ? $margin_x : 5); - $margin_y = $margin_y; // just to note it wasn't forgotten, but let the value always pass unchanged + // $margin_y -- it wasn't forgotten, let the value always pass unchanged $phpthumbFilters->HistogramOverlay($this->gdimg_output, $bands, $colors, $width, $height, $alignment, $opacity, $margin_x, $margin_y); break; @@ -2702,12 +2813,12 @@ function ApplyFilters() { } while (strlen($buffer) > 0); fclose($fp_mask); if ($gdimg_mask = $this->ImageCreateFromStringReplacement($MaskImageData)) { - if ($invert && phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - ImageFilter($gdimg_mask, IMG_FILTER_NEGATE); + if ($invert && phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + imagefilter($gdimg_mask, IMG_FILTER_NEGATE); } $this->is_alpha = true; $phpthumbFilters->ApplyMask($gdimg_mask, $this->gdimg_output); - ImageDestroy($gdimg_mask); + imagedestroy($gdimg_mask); } else { $this->DebugMessage('ImageCreateFromStringReplacement() failed for "'.$mask_filename.'"', __FILE__, __LINE__); } @@ -2716,13 +2827,13 @@ function ApplyFilters() { } break; - case 'elip': // Elipse cropping + case 'elip': // Ellipse cropping if (phpthumb_functions::gd_version() < 2) { - $this->DebugMessage('Skipping Elipse() because gd_version is "'.phpthumb_functions::gd_version().'"', __FILE__, __LINE__); + $this->DebugMessage('Skipping Ellipse() because gd_version is "'.phpthumb_functions::gd_version().'"', __FILE__, __LINE__); return false; } $this->is_alpha = true; - $phpthumbFilters->Elipse($this->gdimg_output); + $phpthumbFilters->Ellipse($this->gdimg_output); break; case 'ric': // RoundedImageCorners @@ -2770,48 +2881,48 @@ function ApplyFilters() { } while (strlen($buffer) > 0); fclose($fp_watermark); if ($img_watermark = $this->ImageCreateFromStringReplacement($WatermarkImageData)) { - if ($margin < 1) { - $resized_x = max(1, ImageSX($this->gdimg_output) - round(2 * (ImageSX($this->gdimg_output) * $margin))); - $resized_y = max(1, ImageSY($this->gdimg_output) - round(2 * (ImageSY($this->gdimg_output) * $margin))); + if (($margin > 0) && ($margin < 1)) { + $resized_x = max(1, imagesx($this->gdimg_output) - round(2 * (imagesx($this->gdimg_output) * $margin))); + $resized_y = max(1, imagesy($this->gdimg_output) - round(2 * (imagesy($this->gdimg_output) * $margin))); } else { - $resized_x = max(1, ImageSX($this->gdimg_output) - round(2 * $margin)); - $resized_y = max(1, ImageSY($this->gdimg_output) - round(2 * $margin)); + $resized_x = max(1, imagesx($this->gdimg_output) - round(2 * $margin)); + $resized_y = max(1, imagesy($this->gdimg_output) - round(2 * $margin)); } if ($underlay) { - if ($img_watermark_resized = phpthumb_functions::ImageCreateFunction(ImageSX($this->gdimg_output), ImageSY($this->gdimg_output))) { - ImageAlphaBlending($img_watermark_resized, false); - ImageSaveAlpha($img_watermark_resized, true); - $this->ImageResizeFunction($img_watermark_resized, $img_watermark, 0, 0, 0, 0, ImageSX($img_watermark_resized), ImageSY($img_watermark_resized), ImageSX($img_watermark), ImageSY($img_watermark)); + if ($img_watermark_resized = phpthumb_functions::ImageCreateFunction(imagesx($this->gdimg_output), imagesy($this->gdimg_output))) { + imagealphablending($img_watermark_resized, false); + imagesavealpha($img_watermark_resized, true); + $this->ImageResizeFunction($img_watermark_resized, $img_watermark, 0, 0, 0, 0, imagesx($img_watermark_resized), imagesy($img_watermark_resized), imagesx($img_watermark), imagesy($img_watermark)); if ($img_source_resized = phpthumb_functions::ImageCreateFunction($resized_x, $resized_y)) { - ImageAlphaBlending($img_source_resized, false); - ImageSaveAlpha($img_source_resized, true); - $this->ImageResizeFunction($img_source_resized, $this->gdimg_output, 0, 0, 0, 0, ImageSX($img_source_resized), ImageSY($img_source_resized), ImageSX($this->gdimg_output), ImageSY($this->gdimg_output)); + imagealphablending($img_source_resized, false); + imagesavealpha($img_source_resized, true); + $this->ImageResizeFunction($img_source_resized, $this->gdimg_output, 0, 0, 0, 0, imagesx($img_source_resized), imagesy($img_source_resized), imagesx($this->gdimg_output), imagesy($this->gdimg_output)); $phpthumbFilters->WatermarkOverlay($img_watermark_resized, $img_source_resized, 'C', $opacity, $margin); - ImageCopy($this->gdimg_output, $img_watermark_resized, 0, 0, 0, 0, ImageSX($this->gdimg_output), ImageSY($this->gdimg_output)); + imagecopy($this->gdimg_output, $img_watermark_resized, 0, 0, 0, 0, imagesx($this->gdimg_output), imagesy($this->gdimg_output)); } else { $this->DebugMessage('phpthumb_functions::ImageCreateFunction('.$resized_x.', '.$resized_y.')', __FILE__, __LINE__); } - ImageDestroy($img_watermark_resized); + imagedestroy($img_watermark_resized); } else { - $this->DebugMessage('phpthumb_functions::ImageCreateFunction('.ImageSX($this->gdimg_output).', '.ImageSY($this->gdimg_output).')', __FILE__, __LINE__); + $this->DebugMessage('phpthumb_functions::ImageCreateFunction('.imagesx($this->gdimg_output).', '.imagesy($this->gdimg_output).')', __FILE__, __LINE__); } } else { // overlay if ($img_watermark_resized = phpthumb_functions::ImageCreateFunction($resized_x, $resized_y)) { - ImageAlphaBlending($img_watermark_resized, false); - ImageSaveAlpha($img_watermark_resized, true); - $this->ImageResizeFunction($img_watermark_resized, $img_watermark, 0, 0, 0, 0, ImageSX($img_watermark_resized), ImageSY($img_watermark_resized), ImageSX($img_watermark), ImageSY($img_watermark)); + imagealphablending($img_watermark_resized, false); + imagesavealpha($img_watermark_resized, true); + $this->ImageResizeFunction($img_watermark_resized, $img_watermark, 0, 0, 0, 0, imagesx($img_watermark_resized), imagesy($img_watermark_resized), imagesx($img_watermark), imagesy($img_watermark)); $phpthumbFilters->WatermarkOverlay($this->gdimg_output, $img_watermark_resized, 'C', $opacity, $margin); - ImageDestroy($img_watermark_resized); + imagedestroy($img_watermark_resized); } else { $this->DebugMessage('phpthumb_functions::ImageCreateFunction('.$resized_x.', '.$resized_y.')', __FILE__, __LINE__); } } - ImageDestroy($img_watermark); + imagedestroy($img_watermark); } else { $this->DebugMessage('ImageCreateFromStringReplacement() failed for "'.$filename.'"', __FILE__, __LINE__); @@ -2825,12 +2936,12 @@ function ApplyFilters() { @list($filename, $alignment, $opacity, $margin['x'], $margin['y'], $rotate_angle) = explode('|', $parameter, 6); // $margin can be pixel margin or percent margin if $alignment is text, or max width/height if $alignment is position like "50x75" $alignment = ($alignment ? $alignment : 'BR'); - $opacity = (strlen($opacity) ? intval($opacity) : 50); - $rotate_angle = (strlen($rotate_angle) ? intval($rotate_angle) : 0); + $opacity = ('' !== $opacity ? (int) $opacity : 50); + $rotate_angle = ('' !== $rotate_angle ? (int) $rotate_angle : 0); if (!preg_match('#^([0-9\\.\\-]*)x([0-9\\.\\-]*)$#i', $alignment, $matches)) { $margins = array('x', 'y'); foreach ($margins as $xy) { - $margin[$xy] = (strlen($margin[$xy]) ? $margin[$xy] : 5); + $margin[$xy] = ('' !== $margin[ $xy ] ? $margin[ $xy] : 5); if (($margin[$xy] > 0) && ($margin[$xy] < 1)) { $margin[$xy] = min(0.499, $margin[$xy]); } elseif (($margin[$xy] > -1) && ($margin[$xy] < 0)) { @@ -2843,31 +2954,31 @@ function ApplyFilters() { if (@is_readable($filename)) { if ($img_watermark = $this->ImageCreateFromFilename($filename)) { if ($rotate_angle !== 0) { - $phpthumbFilters->ImprovedImageRotate($img_watermark, $rotate_angle); + $phpthumbFilters->ImprovedImageRotate($img_watermark, $rotate_angle, 'FFFFFF', null, $this); } if (preg_match('#^([0-9\\.\\-]*)x([0-9\\.\\-]*)$#i', $alignment, $matches)) { - $watermark_max_width = intval($margin['x'] ? $margin['x'] : ImageSX($img_watermark)); - $watermark_max_height = intval($margin['y'] ? $margin['y'] : ImageSY($img_watermark)); - $scale = phpthumb_functions::ScaleToFitInBox(ImageSX($img_watermark), ImageSY($img_watermark), $watermark_max_width, $watermark_max_height, true, true); + $watermark_max_width = (int) ($margin[ 'x'] ? $margin[ 'x'] : imagesx($img_watermark)); + $watermark_max_height = (int) ($margin[ 'y'] ? $margin[ 'y'] : imagesy($img_watermark)); + $scale = phpthumb_functions::ScaleToFitInBox(imagesx($img_watermark), imagesy($img_watermark), $watermark_max_width, $watermark_max_height, true, true); $this->DebugMessage('Scaling watermark by a factor of '.number_format($scale, 4), __FILE__, __LINE__); if (($scale > 1) || ($scale < 1)) { - if ($img_watermark2 = phpthumb_functions::ImageCreateFunction($scale * ImageSX($img_watermark), $scale * ImageSY($img_watermark))) { - ImageAlphaBlending($img_watermark2, false); - ImageSaveAlpha($img_watermark2, true); - $this->ImageResizeFunction($img_watermark2, $img_watermark, 0, 0, 0, 0, ImageSX($img_watermark2), ImageSY($img_watermark2), ImageSX($img_watermark), ImageSY($img_watermark)); + if ($img_watermark2 = phpthumb_functions::ImageCreateFunction($scale * imagesx($img_watermark), $scale * imagesy($img_watermark))) { + imagealphablending($img_watermark2, false); + imagesavealpha($img_watermark2, true); + $this->ImageResizeFunction($img_watermark2, $img_watermark, 0, 0, 0, 0, imagesx($img_watermark2), imagesy($img_watermark2), imagesx($img_watermark), imagesy($img_watermark)); $img_watermark = $img_watermark2; } else { - $this->DebugMessage('ImageCreateFunction('.($scale * ImageSX($img_watermark)).', '.($scale * ImageSX($img_watermark)).') failed', __FILE__, __LINE__); + $this->DebugMessage('ImageCreateFunction('.($scale * imagesx($img_watermark)).', '.($scale * imagesx($img_watermark)).') failed', __FILE__, __LINE__); } } - $watermark_dest_x = round($matches[1] - (ImageSX($img_watermark) / 2)); - $watermark_dest_y = round($matches[2] - (ImageSY($img_watermark) / 2)); + $watermark_dest_x = round($matches[1] - (imagesx($img_watermark) / 2)); + $watermark_dest_y = round($matches[2] - (imagesy($img_watermark) / 2)); $alignment = $watermark_dest_x.'x'.$watermark_dest_y; } $phpthumbFilters->WatermarkOverlay($this->gdimg_output, $img_watermark, $alignment, $opacity, $margin['x'], $margin['y']); - ImageDestroy($img_watermark); + imagedestroy($img_watermark); if (isset($img_watermark2) && is_resource($img_watermark2)) { - ImageDestroy($img_watermark2); + imagedestroy($img_watermark2); } } else { $this->DebugMessage('ImageCreateFromFilename() failed for "'.$filename.'"', __FILE__, __LINE__); @@ -2878,25 +2989,26 @@ function ApplyFilters() { break; case 'wmt': // WaterMarkText - @list($text, $size, $alignment, $hex_color, $ttffont, $opacity, $margin, $angle, $bg_color, $bg_opacity, $fillextend) = explode('|', $parameter, 11); + @list($text, $size, $alignment, $hex_color, $ttffont, $opacity, $margin, $angle, $bg_color, $bg_opacity, $fillextend, $lineheight) = explode('|', $parameter, 12); $text = ($text ? $text : ''); $size = ($size ? $size : 3); $alignment = ($alignment ? $alignment : 'BR'); $hex_color = ($hex_color ? $hex_color : '000000'); $ttffont = ($ttffont ? $ttffont : ''); - $opacity = (strlen($opacity) ? $opacity : 50); - $margin = (strlen($margin) ? $margin : 5); - $angle = (strlen($angle) ? $angle : 0); + $opacity = ('' !== $opacity ? $opacity : 50); + $margin = ('' !== $margin ? $margin : 5); + $angle = ('' !== $angle ? $angle : 0); $bg_color = ($bg_color ? $bg_color : false); $bg_opacity = ($bg_opacity ? $bg_opacity : 0); $fillextend = ($fillextend ? $fillextend : ''); + $lineheight = ($lineheight ? $lineheight : 1.0); if (basename($ttffont) == $ttffont) { - $ttffont = realpath($this->config_ttf_directory.DIRECTORY_SEPARATOR.$ttffont); + $ttffont = $this->realPathSafe($this->config_ttf_directory.DIRECTORY_SEPARATOR.$ttffont); } else { $ttffont = $this->ResolveFilenameToAbsolute($ttffont); } - $phpthumbFilters->WatermarkText($this->gdimg_output, $text, $size, $alignment, $hex_color, $ttffont, $opacity, $margin, $angle, $bg_color, $bg_opacity, $fillextend); + $phpthumbFilters->WatermarkText($this->gdimg_output, $text, $size, $alignment, $hex_color, $ttffont, $opacity, $margin, $angle, $bg_color, $bg_opacity, $fillextend, $lineheight); break; case 'blur': // Blur @@ -2929,15 +3041,15 @@ function ApplyFilters() { @list($amount, $radius, $threshold) = explode('|', $parameter, 3); $amount = ($amount ? $amount : 80); $radius = ($radius ? $radius : 0.5); - $threshold = (strlen($threshold) ? $threshold : 3); + $threshold = ('' !== $threshold ? $threshold : 3); if (phpthumb_functions::gd_version() >= 2.0) { ob_start(); - if (!@include_once(dirname(__FILE__) . '/phpthumb.unsharp.php')) { + if (!@include_once __DIR__ .'/phpthumb.unsharp.php' ) { $include_error = ob_get_contents(); if ($include_error) { - $this->DebugMessage('include_once("'.dirname(__FILE__).'/phpthumb.unsharp.php") generated message: "'.$include_error.'"', __FILE__, __LINE__); + $this->DebugMessage('include_once("'. __DIR__ .'/phpthumb.unsharp.php") generated message: "'.$include_error.'"', __FILE__, __LINE__); } - $this->DebugMessage('Error including "'.dirname(__FILE__).'/phpthumb.unsharp.php" which is required for unsharp masking', __FILE__, __LINE__); + $this->DebugMessage('Error including "'. __DIR__ .'/phpthumb.unsharp.php" which is required for unsharp masking', __FILE__, __LINE__); ob_end_clean(); return false; } @@ -2951,38 +3063,37 @@ function ApplyFilters() { case 'size': // Resize @list($newwidth, $newheight, $stretch) = explode('|', $parameter); - $newwidth = (!$newwidth ? ImageSX($this->gdimg_output) : ((($newwidth > 0) && ($newwidth < 1)) ? round($newwidth * ImageSX($this->gdimg_output)) : round($newwidth))); - $newheight = (!$newheight ? ImageSY($this->gdimg_output) : ((($newheight > 0) && ($newheight < 1)) ? round($newheight * ImageSY($this->gdimg_output)) : round($newheight))); + $newwidth = (!$newwidth ? imagesx($this->gdimg_output) : ((($newwidth > 0) && ($newwidth < 1)) ? round($newwidth * imagesx($this->gdimg_output)) : round($newwidth))); + $newheight = (!$newheight ? imagesy($this->gdimg_output) : ((($newheight > 0) && ($newheight < 1)) ? round($newheight * imagesy($this->gdimg_output)) : round($newheight))); $stretch = ($stretch ? true : false); if ($stretch) { - $scale_x = phpthumb_functions::ScaleToFitInBox(ImageSX($this->gdimg_output), ImageSX($this->gdimg_output), $newwidth, $newwidth, true, true); - $scale_y = phpthumb_functions::ScaleToFitInBox(ImageSY($this->gdimg_output), ImageSY($this->gdimg_output), $newheight, $newheight, true, true); + $scale_x = phpthumb_functions::ScaleToFitInBox(imagesx($this->gdimg_output), imagesx($this->gdimg_output), $newwidth, $newwidth, true, true); + $scale_y = phpthumb_functions::ScaleToFitInBox(imagesy($this->gdimg_output), imagesy($this->gdimg_output), $newheight, $newheight, true, true); } else { - $scale_x = phpthumb_functions::ScaleToFitInBox(ImageSX($this->gdimg_output), ImageSY($this->gdimg_output), $newwidth, $newheight, true, true); + $scale_x = phpthumb_functions::ScaleToFitInBox(imagesx($this->gdimg_output), imagesy($this->gdimg_output), $newwidth, $newheight, true, true); $scale_y = $scale_x; } $this->DebugMessage('Scaling watermark ('.($stretch ? 'with' : 'without').' stretch) by a factor of "'.number_format($scale_x, 4).' x '.number_format($scale_y, 4).'"', __FILE__, __LINE__); if (($scale_x > 1) || ($scale_x < 1) || ($scale_y > 1) || ($scale_y < 1)) { - if ($img_temp = phpthumb_functions::ImageCreateFunction(ImageSX($this->gdimg_output), ImageSY($this->gdimg_output))) { - ImageCopy($img_temp, $this->gdimg_output, 0, 0, 0, 0, ImageSX($this->gdimg_output), ImageSY($this->gdimg_output)); - //ImageDestroy($this->gdimg_output); - if ($this->gdimg_output = phpthumb_functions::ImageCreateFunction($scale_x * ImageSX($img_temp), $scale_y * ImageSY($img_temp))) { - ImageAlphaBlending($this->gdimg_output, false); - ImageSaveAlpha($this->gdimg_output, true); - $this->ImageResizeFunction($this->gdimg_output, $img_temp, 0, 0, 0, 0, ImageSX($this->gdimg_output), ImageSY($this->gdimg_output), ImageSX($img_temp), ImageSY($img_temp)); + if ($img_temp = phpthumb_functions::ImageCreateFunction(imagesx($this->gdimg_output), imagesy($this->gdimg_output))) { + imagecopy($img_temp, $this->gdimg_output, 0, 0, 0, 0, imagesx($this->gdimg_output), imagesy($this->gdimg_output)); + if ($this->gdimg_output = phpthumb_functions::ImageCreateFunction($scale_x * imagesx($img_temp), $scale_y * imagesy($img_temp))) { + imagealphablending($this->gdimg_output, false); + imagesavealpha($this->gdimg_output, true); + $this->ImageResizeFunction($this->gdimg_output, $img_temp, 0, 0, 0, 0, imagesx($this->gdimg_output), imagesy($this->gdimg_output), imagesx($img_temp), imagesy($img_temp)); } else { - $this->DebugMessage('ImageCreateFunction('.($scale_x * ImageSX($img_temp)).', '.($scale_y * ImageSY($img_temp)).') failed', __FILE__, __LINE__); + $this->DebugMessage('ImageCreateFunction('.($scale_x * imagesx($img_temp)).', '.($scale_y * imagesy($img_temp)).') failed', __FILE__, __LINE__); } - ImageDestroy($img_temp); + imagedestroy($img_temp); } else { - $this->DebugMessage('ImageCreateFunction('.ImageSX($this->gdimg_output).', '.ImageSY($this->gdimg_output).') failed', __FILE__, __LINE__); + $this->DebugMessage('ImageCreateFunction('.imagesx($this->gdimg_output).', '.imagesy($this->gdimg_output).') failed', __FILE__, __LINE__); } } break; case 'rot': // ROTate @list($angle, $bgcolor) = explode('|', $parameter, 2); - $phpthumbFilters->ImprovedImageRotate($this->gdimg_output, $angle, $bgcolor); + $phpthumbFilters->ImprovedImageRotate($this->gdimg_output, $angle, $bgcolor, null, $this); break; case 'stc': // Source Transparent Color @@ -2991,14 +3102,14 @@ function ApplyFilters() { $this->DebugMessage('Skipping SourceTransparentColor hex color is invalid ('.$hexcolor.')', __FILE__, __LINE__); return false; } - $min_limit = (strlen($min_limit) ? $min_limit : 5); - $max_limit = (strlen($max_limit) ? $max_limit : 10); + $min_limit = ('' !== $min_limit ? $min_limit : 5); + $max_limit = ('' !== $max_limit ? $max_limit : 10); if ($gdimg_mask = $phpthumbFilters->SourceTransparentColorMask($this->gdimg_output, $hexcolor, $min_limit, $max_limit)) { $this->is_alpha = true; $phpthumbFilters->ApplyMask($gdimg_mask, $this->gdimg_output); - ImageDestroy($gdimg_mask); + imagedestroy($gdimg_mask); } else { - $this->DebugMessage('SourceTransparentColorMask() failed', __FILE__, __LINE__); + $this->DebugMessage('SourceTransparentColorMask() failed for "'.$hexcolor.','.$min_limit.','.$max_limit.'"', __FILE__, __LINE__); } break; } @@ -3009,7 +3120,7 @@ function ApplyFilters() { } - function MaxFileSize() { + public function MaxFileSize() { if (phpthumb_functions::gd_version() < 2) { $this->DebugMessage('Skipping MaxFileSize() because gd_version is "'.phpthumb_functions::gd_version().'"', __FILE__, __LINE__); return false; @@ -3027,38 +3138,33 @@ function MaxFileSize() { if (strlen($imgdata) > $this->maxb) { for ($i = 8; $i >= 1; $i--) { - $tempIMG = ImageCreateTrueColor(ImageSX($this->gdimg_output), ImageSY($this->gdimg_output)); - ImageCopy($tempIMG, $this->gdimg_output, 0, 0, 0, 0, ImageSX($this->gdimg_output), ImageSY($this->gdimg_output)); - ImageTrueColorToPalette($tempIMG, true, pow(2, $i)); + $tempIMG = imagecreatetruecolor(imagesx($this->gdimg_output), imagesy($this->gdimg_output)); + imagecopy($tempIMG, $this->gdimg_output, 0, 0, 0, 0, imagesx($this->gdimg_output), imagesy($this->gdimg_output)); + imagetruecolortopalette($tempIMG, true, pow(2, $i)); ob_start(); $imgRenderFunction($tempIMG); $imgdata = ob_get_contents(); ob_end_clean(); if (strlen($imgdata) <= $this->maxb) { - ImageTrueColorToPalette($this->gdimg_output, true, pow(2, $i)); + imagetruecolortopalette($this->gdimg_output, true, pow(2, $i)); break; } } } - if (strlen($imgdata) > $this->maxb) { - ImageTrueColorToPalette($this->gdimg_output, true, pow(2, $i)); - return false; - } break; case 'jpeg': ob_start(); - ImageJPEG($this->gdimg_output); + imagejpeg($this->gdimg_output); $imgdata = ob_get_contents(); ob_end_clean(); - $OriginalJPEGquality = $this->thumbnailQuality; if (strlen($imgdata) > $this->maxb) { for ($i = 3; $i < 20; $i++) { $q = round(100 * (1 - log10($i / 2))); ob_start(); - ImageJPEG($this->gdimg_output, null, $q); + imagejpeg($this->gdimg_output, null, $q); $imgdata = ob_get_contents(); ob_end_clean(); @@ -3075,14 +3181,13 @@ function MaxFileSize() { default: return false; - break; } } return true; } - function CalculateThumbnailDimensions() { + public function CalculateThumbnailDimensions() { $this->DebugMessage('CalculateThumbnailDimensions() starting with [W,H,sx,sy,sw,sh] initially set to ['.$this->source_width.','.$this->source_height.','.$this->sx.','.$this->sy.','.$this->sw.','.$this->sh.']', __FILE__, __LINE__); //echo $this->source_width.'x'.$this->source_height.'


          '; $this->thumbnailCropX = ($this->sx ? (($this->sx >= 2) ? $this->sx : round($this->sx * $this->source_width)) : 0); @@ -3177,24 +3282,23 @@ function CalculateThumbnailDimensions() { } - function CreateGDoutput() { + public function CreateGDoutput() { $this->CalculateThumbnailDimensions(); - // Create the GD image (either true-color or 256-color, depending on GD version) + // create the GD image (either true-color or 256-color, depending on GD version) $this->gdimg_output = phpthumb_functions::ImageCreateFunction($this->thumbnail_width, $this->thumbnail_height); - // Images that have transparency must have the background filled with the configured 'bg' color - // otherwise the transparent color will appear as black - ImageSaveAlpha($this->gdimg_output, true); + // images that have transparency must have the background filled with the configured 'bg' color otherwise the transparent color will appear as black + imagesavealpha($this->gdimg_output, true); if ($this->is_alpha && phpthumb_functions::gd_version() >= 2) { - ImageAlphaBlending($this->gdimg_output, false); + imagealphablending($this->gdimg_output, false); $output_full_alpha = phpthumb_functions::ImageColorAllocateAlphaSafe($this->gdimg_output, 255, 255, 255, 127); - ImageFilledRectangle($this->gdimg_output, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $output_full_alpha); + imagefilledrectangle($this->gdimg_output, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $output_full_alpha); } else { - $current_transparent_color = ImageColorTransparent($this->gdimg_source); + $current_transparent_color = imagecolortransparent($this->gdimg_source); if ($this->bg || (@$current_transparent_color >= 0)) { $this->config_background_hexcolor = ($this->bg ? $this->bg : $this->config_background_hexcolor); @@ -3202,7 +3306,7 @@ function CreateGDoutput() { return $this->ErrorImage('Invalid hex color string "'.$this->config_background_hexcolor.'" for parameter "bg"'); } $background_color = phpthumb_functions::ImageHexColorAllocate($this->gdimg_output, $this->config_background_hexcolor); - ImageFilledRectangle($this->gdimg_output, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $background_color); + imagefilledrectangle($this->gdimg_output, 0, 0, $this->thumbnail_width, $this->thumbnail_height, $background_color); } @@ -3211,7 +3315,7 @@ function CreateGDoutput() { return true; } - function SetOrientationDependantWidthHeight() { + public function SetOrientationDependantWidthHeight() { $this->DebugMessage('SetOrientationDependantWidthHeight() starting with "'.$this->source_width.'"x"'.$this->source_height.'"', __FILE__, __LINE__); if ($this->source_height > $this->source_width) { // portrait @@ -3228,55 +3332,51 @@ function SetOrientationDependantWidthHeight() { } //$this->w = round($this->w ? $this->w : (($this->h && $this->source_height) ? $this->h * $this->source_width / $this->source_height : $this->w)); //$this->h = round($this->h ? $this->h : (($this->w && $this->source_width) ? $this->w * $this->source_height / $this->source_width : $this->h)); - $this->DebugMessage('SetOrientationDependantWidthHeight() setting w="'.intval($this->w).'", h="'.intval($this->h).'"', __FILE__, __LINE__); + $this->DebugMessage('SetOrientationDependantWidthHeight() setting w="'. (int) $this->w .'", h="'. (int) $this->h .'"', __FILE__, __LINE__); return true; } - function ExtractEXIFgetImageSize() { + public function ExtractEXIFgetImageSize() { $this->DebugMessage('starting ExtractEXIFgetImageSize()', __FILE__, __LINE__); if (preg_match('#^http:#i', $this->src) && !$this->sourceFilename && $this->rawImageData) { - !$this->SourceDataToTempFile(); + $this->SourceDataToTempFile(); } - if (is_null($this->getimagesizeinfo)) { + if (null === $this->getimagesizeinfo) { if ($this->sourceFilename) { - $this->getimagesizeinfo = @GetImageSize($this->sourceFilename); + $this->getimagesizeinfo = @getimagesize($this->sourceFilename); $this->source_width = $this->getimagesizeinfo[0]; $this->source_height = $this->getimagesizeinfo[1]; - $this->DebugMessage('GetImageSize('.$this->sourceFilename.') says image is '.$this->source_width.'x'.$this->source_height, __FILE__, __LINE__); + $this->DebugMessage('getimagesize('.$this->sourceFilename.') says image is '.$this->source_width.'x'.$this->source_height, __FILE__, __LINE__); } else { - $this->DebugMessage('skipping GetImageSize() because $this->sourceFilename is empty', __FILE__, __LINE__); + $this->DebugMessage('skipping getimagesize() because $this->sourceFilename is empty', __FILE__, __LINE__); } } else { - $this->DebugMessage('skipping GetImageSize() because !is_null($this->getimagesizeinfo)', __FILE__, __LINE__); + $this->DebugMessage('skipping getimagesize() because !is_null($this->getimagesizeinfo)', __FILE__, __LINE__); } if (is_resource($this->gdimg_source)) { - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); $this->SetOrientationDependantWidthHeight(); } elseif ($this->rawImageData && !$this->sourceFilename) { if ($this->SourceImageIsTooLarge($this->source_width, $this->source_height)) { - $this->DebugMessage('NOT bypassing EXIF and GetImageSize sections because source image is too large for GD ('.$this->source_width.'x'.$this->source_width.'='.($this->source_width * $this->source_height * 5).'MB)', __FILE__, __LINE__); + $this->DebugMessage('NOT bypassing EXIF and getimagesize sections because source image is too large for GD ('.$this->source_width.'x'.$this->source_width.'='.($this->source_width * $this->source_height * 5).'MB)', __FILE__, __LINE__); } else { - $this->DebugMessage('bypassing EXIF and GetImageSize sections because $this->rawImageData is set, and $this->sourceFilename is not set, and source image is not too large for GD ('.$this->source_width.'x'.$this->source_width.'='.($this->source_width * $this->source_height * 5).'MB)', __FILE__, __LINE__); + $this->DebugMessage('bypassing EXIF and getimagesize sections because $this->rawImageData is set, and $this->sourceFilename is not set, and source image is not too large for GD ('.$this->source_width.'x'.$this->source_width.'='.($this->source_width * $this->source_height * 5).'MB)', __FILE__, __LINE__); } } - if (is_null($this->getimagesizeinfo)) { - $this->getimagesizeinfo = @GetImageSize($this->sourceFilename); - } - if (!empty($this->getimagesizeinfo)) { // great $this->getimagesizeinfo['filesize'] = @filesize($this->sourceFilename); } elseif (!$this->rawImageData) { - $this->DebugMessage('GetImageSize("'.$this->sourceFilename.'") failed', __FILE__, __LINE__); + $this->DebugMessage('getimagesize("'.$this->sourceFilename.'") failed', __FILE__, __LINE__); } if ($this->config_prefer_imagemagick) { @@ -3291,7 +3391,7 @@ function ExtractEXIFgetImageSize() { $this->SetOrientationDependantWidthHeight(); - if (phpthumb_functions::version_compare_replacement(phpversion(), '4.2.0', '>=') && function_exists('exif_read_data')) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '4.2.0', '>=') && function_exists('exif_read_data')) { switch ($this->getimagesizeinfo[2]) { case IMAGETYPE_JPEG: case IMAGETYPE_TIFF_II: @@ -3308,7 +3408,7 @@ function ExtractEXIFgetImageSize() { $this->exif_thumbnail_type = ''; // The parameters width, height and imagetype are available since PHP v4.3.0 - if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.0', '>=')) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '4.3.0', '>=')) { $this->exif_thumbnail_data = @exif_thumbnail($this->sourceFilename, $this->exif_thumbnail_width, $this->exif_thumbnail_height, $this->exif_thumbnail_type); @@ -3322,8 +3422,8 @@ function ExtractEXIFgetImageSize() { if (!$exit_thumbnail_error && $this->exif_thumbnail_data) { if ($gdimg_exif_temp = $this->ImageCreateFromStringReplacement($this->exif_thumbnail_data, false)) { - $this->exif_thumbnail_width = ImageSX($gdimg_exif_temp); - $this->exif_thumbnail_height = ImageSY($gdimg_exif_temp); + $this->exif_thumbnail_width = imagesx($gdimg_exif_temp); + $this->exif_thumbnail_height = imagesy($gdimg_exif_temp); $this->exif_thumbnail_type = 2; // (2 == JPEG) before PHP v4.3.0 only JPEG format EXIF thumbnails are returned unset($gdimg_exif_temp); } else { @@ -3340,7 +3440,7 @@ function ExtractEXIFgetImageSize() { } - $this->DebugMessage('EXIF thumbnail extraction: (size='.strlen($this->exif_thumbnail_data).'; type="'.$this->exif_thumbnail_type.'"; '.intval($this->exif_thumbnail_width).'x'.intval($this->exif_thumbnail_height).')', __FILE__, __LINE__); + $this->DebugMessage('EXIF thumbnail extraction: (size='.strlen($this->exif_thumbnail_data).'; type="'.$this->exif_thumbnail_type.'"; '. (int) $this->exif_thumbnail_width .'x'. (int) $this->exif_thumbnail_height .')', __FILE__, __LINE__); // see if EXIF thumbnail can be used directly with no processing if ($this->config_use_exif_thumbnail_for_speed && $this->exif_thumbnail_data) { @@ -3370,8 +3470,8 @@ function ExtractEXIFgetImageSize() { $this->DebugMessage('setting $this->gdimg_source = $this->ImageCreateFromStringReplacement($this->exif_thumbnail_data)', __FILE__, __LINE__); $this->gdimg_source = $this->ImageCreateFromStringReplacement($this->exif_thumbnail_data); - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); return true; } } @@ -3393,12 +3493,12 @@ function ExtractEXIFgetImageSize() { } - function SetCacheFilename() { - if (!is_null($this->cache_filename)) { + public function SetCacheFilename() { + if (null !== $this->cache_filename) { $this->DebugMessage('$this->cache_filename already set, skipping SetCacheFilename()', __FILE__, __LINE__); return true; } - if (is_null($this->config_cache_directory)) { + if (null === $this->config_cache_directory) { $this->setCacheDirectory(); if (!$this->config_cache_directory) { $this->DebugMessage('SetCacheFilename() failed because $this->config_cache_directory is empty', __FILE__, __LINE__); @@ -3426,7 +3526,6 @@ function SetCacheFilename() { } $this->cache_filename = ''; - $broad_directory_name = ''; if ($this->new) { $broad_directory_name = strtolower(md5($this->new)); $this->cache_filename .= '_new'.$broad_directory_name; @@ -3466,12 +3565,12 @@ function SetCacheFilename() { $FilenameParameters2 = array('h', 'w', 'wl', 'wp', 'ws', 'hp', 'hs', 'xto', 'ra', 'iar', 'aoe', 'maxb', 'sfn', 'dpi'); foreach ($FilenameParameters2 as $key) { if ($this->$key) { - $ParametersString .= '_'.$key.intval($this->$key); + $ParametersString .= '_'.$key. (int) $this->$key; } } if ($this->thumbnailFormat == 'jpeg') { // only JPEG output has variable quality option - $ParametersString .= '_q'.intval($this->thumbnailQuality); + $ParametersString .= '_q'. (int) $this->thumbnailQuality; } $this->DebugMessage('SetCacheFilename() _par set from md5('.$ParametersString.')', __FILE__, __LINE__); $this->cache_filename .= '_par'.strtolower(md5($ParametersString)); @@ -3481,9 +3580,9 @@ function SetCacheFilename() { // do not source image modification date -- // cached image will be used even if file was modified or removed } elseif (!$this->config_cache_source_filemtime_ignore_remote && preg_match('#^(f|ht)tps?\://#i', $this->src)) { - $this->cache_filename .= '_dat'.intval(phpthumb_functions::filedate_remote($this->src)); + $this->cache_filename .= '_dat'. (int) phpthumb_functions::filedate_remote($this->src); } elseif (!$this->config_cache_source_filemtime_ignore_local && $this->src && !$this->rawImageData) { - $this->cache_filename .= '_dat'.intval(@filemtime($this->sourceFilename)); + $this->cache_filename .= '_dat'. (int) (@filemtime($this->sourceFilename)); } $this->cache_filename .= '.'.strtolower($this->thumbnailFormat); @@ -3497,32 +3596,31 @@ function SetCacheFilename() { } - function SourceImageIsTooLarge($width, $height) { + public function SourceImageIsTooLarge($width, $height) { if (!$this->config_max_source_pixels) { return false; } - if (function_exists('memory_get_usage')) { - $available_memory = max(intval(ini_get('memory_limit')), intval(get_cfg_var('memory_limit'))) * 1048576; - $available_memory -= memory_get_usage(); + if ($this->php_memory_limit && function_exists('memory_get_usage')) { + $available_memory = $this->php_memory_limit - memory_get_usage(); return (bool) (($width * $height * 5) > $available_memory); } return (bool) (($width * $height) > $this->config_max_source_pixels); } - function ImageCreateFromFilename($filename) { + public function ImageCreateFromFilename($filename) { // try to create GD image source directly via GD, if possible, - // rather than buffering to memory and creating with ImageCreateFromString + // rather than buffering to memory and creating with imagecreatefromstring $ImageCreateWasAttempted = false; $gd_image = false; $this->DebugMessage('starting ImageCreateFromFilename('.$filename.')', __FILE__, __LINE__); - if ($filename && ($getimagesizeinfo = @GetImageSize($filename))) { + if ($filename && ($getimagesizeinfo = @getimagesize($filename))) { if (!$this->SourceImageIsTooLarge($getimagesizeinfo[0], $getimagesizeinfo[1])) { $ImageCreateFromFunction = array( - 1 => 'ImageCreateFromGIF', - 2 => 'ImageCreateFromJPEG', - 3 => 'ImageCreateFromPNG', - 15 => 'ImageCreateFromWBMP', + 1 => 'imagecreatefromgif', + 2 => 'imagecreatefromjpeg', + 3 => 'imagecreatefrompng', + 15 => 'imagecreatefromwbmp', ); $this->DebugMessage('ImageCreateFromFilename found ($getimagesizeinfo[2]=='.@$getimagesizeinfo[2].')', __FILE__, __LINE__); switch (@$getimagesizeinfo[2]) { @@ -3564,13 +3662,13 @@ function ImageCreateFromFilename($filename) { return false; } } else { - $this->DebugMessage('empty $filename or GetImageSize('.$filename.') failed', __FILE__, __LINE__); + $this->DebugMessage('empty $filename or getimagesize('.$filename.') failed', __FILE__, __LINE__); } if (!$gd_image) { - // cannot create from filename, attempt to create source image with ImageCreateFromString, if possible + // cannot create from filename, attempt to create source image with imagecreatefromstring, if possible if ($ImageCreateWasAttempted) { - $this->DebugMessage(@$ImageCreateFromFunctionName.'() was attempted but FAILED', __FILE__, __LINE__); + $this->DebugMessage($ImageCreateFromFunctionName.'() was attempted but FAILED', __FILE__, __LINE__); } $this->DebugMessage('Populating $rawimagedata', __FILE__, __LINE__); $rawimagedata = ''; @@ -3593,10 +3691,10 @@ function ImageCreateFromFilename($filename) { return $gd_image; } - function SourceImageToGD() { + public function SourceImageToGD() { if (is_resource($this->gdimg_source)) { - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); $this->DebugMessage('skipping SourceImageToGD() because $this->gdimg_source is already a resource ('.$this->source_width.'x'.$this->source_height.')', __FILE__, __LINE__); return true; } @@ -3614,6 +3712,7 @@ function SourceImageToGD() { } else { $this->DebugMessage('ImageMagickThumbnailToGD() failed', __FILE__, __LINE__); } + @chmod($tempnam, $this->getParameter('config_file_create_mask')); } else { $this->DebugMessage('failed to put $this->rawImageData into temp file "'.$tempnam.'"', __FILE__, __LINE__); } @@ -3745,7 +3844,7 @@ function SourceImageToGD() { break; } if ($imageHeader) { - // cannot create image for whatever reason (maybe ImageCreateFromJPEG et al are not available?) + // cannot create image for whatever reason (maybe imagecreatefromjpeg et al are not available?) // and ImageMagick is not available either, no choice but to output original (not resized/modified) data and exit if ($this->config_error_die_on_source_failure) { $errormessages = array(); @@ -3785,9 +3884,9 @@ function SourceImageToGD() { switch (@$this->getimagesizeinfo[2]) { case 6: ob_start(); - if (!@include_once(dirname(__FILE__).'/phpthumb.bmp.php')) { + if (!@include_once __DIR__ .'/phpthumb.bmp.php' ) { ob_end_clean(); - return $this->ErrorImage('include_once('.dirname(__FILE__).'/phpthumb.bmp.php) failed'); + return $this->ErrorImage('include_once('. __DIR__ .'/phpthumb.bmp.php) failed'); } ob_end_clean(); if ($fp = @fopen($this->sourceFilename, 'rb')) { @@ -3798,7 +3897,7 @@ function SourceImageToGD() { fclose($fp); } $phpthumb_bmp = new phpthumb_bmp(); - $this->gdimg_source = $phpthumb_bmp->phpthumb_bmp2gd($this->rawImageData, (phpthumb_functions::gd_version() >= 2.0)); + $this->gdimg_source = $phpthumb_bmp->phpthumb_bmp2gd($this->rawImageData, phpthumb_functions::gd_version() >= 2.0); unset($phpthumb_bmp); if ($this->gdimg_source) { $this->DebugMessage('$phpthumb_bmp->phpthumb_bmp2gd() succeeded', __FILE__, __LINE__); @@ -3821,7 +3920,6 @@ function SourceImageToGD() { } if (!$this->gdimg_source) { - $HeaderFourBytes = ''; if ($this->rawImageData) { $HeaderFourBytes = substr($this->rawImageData, 0, 4); } elseif ($this->sourceFilename) { @@ -3863,14 +3961,14 @@ function SourceImageToGD() { return false; } - $this->source_width = ImageSX($this->gdimg_source); - $this->source_height = ImageSY($this->gdimg_source); + $this->source_width = imagesx($this->gdimg_source); + $this->source_height = imagesy($this->gdimg_source); return true; } - function phpThumbDebugVarDump($var) { - if (is_null($var)) { + public function phpThumbDebugVarDump($var) { + if (null === $var) { return 'NULL'; } elseif (is_bool($var)) { return ($var ? 'TRUE' : 'FALSE'); @@ -3890,7 +3988,7 @@ function phpThumbDebugVarDump($var) { return gettype($var); } - function phpThumbDebug($level='') { + public function phpThumbDebug($level='') { if ($level && ($this->phpThumbDebug !== $level)) { return true; } @@ -3898,14 +3996,14 @@ function phpThumbDebug($level='') { return $this->ErrorImage('phpThumbDebug disabled'); } - $FunctionsExistance = array('exif_thumbnail', 'gd_info', 'image_type_to_mime_type', 'GetImageSize', 'ImageCopyResampled', 'ImageCopyResized', 'ImageCreate', 'ImageCreateFromString', 'ImageCreateTrueColor', 'ImageIsTrueColor', 'ImageRotate', 'ImageTypes', 'version_compare', 'ImageCreateFromGIF', 'ImageCreateFromJPEG', 'ImageCreateFromPNG', 'ImageCreateFromWBMP', 'ImageCreateFromXBM', 'ImageCreateFromXPM', 'ImageCreateFromString', 'ImageCreateFromGD', 'ImageCreateFromGD2', 'ImageCreateFromGD2Part', 'ImageJPEG', 'ImageGIF', 'ImagePNG', 'ImageWBMP'); + $FunctionsExistance = array('exif_thumbnail', 'gd_info', 'image_type_to_mime_type', 'getimagesize', 'imagecopyresampled', 'imagecopyresized', 'imagecreate', 'imagecreatefromstring', 'imagecreatetruecolor', 'imageistruecolor', 'imagerotate', 'imagetypes', 'version_compare', 'imagecreatefromgif', 'imagecreatefromjpeg', 'imagecreatefrompng', 'imagecreatefromwbmp', 'imagecreatefromxbm', 'imagecreatefromxpm', 'imagecreatefromstring', 'imagecreatefromgd', 'imagecreatefromgd2', 'imagecreatefromgd2part', 'imagejpeg', 'imagegif', 'imagepng', 'imagewbmp'); $ParameterNames = array('src', 'new', 'w', 'h', 'f', 'q', 'sx', 'sy', 'sw', 'sh', 'far', 'bg', 'bc', 'file', 'goto', 'err', 'xto', 'ra', 'ar', 'aoe', 'iar', 'maxb'); $ConfigVariableNames = array('document_root', 'temp_directory', 'output_format', 'output_maxwidth', 'output_maxheight', 'error_message_image_default', 'error_bgcolor', 'error_textcolor', 'error_fontsize', 'error_die_on_error', 'error_silent_die_on_error', 'error_die_on_source_failure', 'nohotlink_enabled', 'nohotlink_valid_domains', 'nohotlink_erase_image', 'nohotlink_text_message', 'nooffsitelink_enabled', 'nooffsitelink_valid_domains', 'nooffsitelink_require_refer', 'nooffsitelink_erase_image', 'nooffsitelink_text_message', 'high_security_enabled', 'allow_src_above_docroot', 'allow_src_above_phpthumb', 'max_source_pixels', 'use_exif_thumbnail_for_speed', 'border_hexcolor', 'background_hexcolor', 'ttf_directory', 'disable_pathinfo_parsing', 'disable_imagecopyresampled'); $OtherVariableNames = array('phpThumbDebug', 'thumbnailQuality', 'thumbnailFormat', 'gdimg_output', 'gdimg_source', 'sourceFilename', 'source_width', 'source_height', 'thumbnailCropX', 'thumbnailCropY', 'thumbnailCropW', 'thumbnailCropH', 'exif_thumbnail_width', 'exif_thumbnail_height', 'exif_thumbnail_type', 'thumbnail_width', 'thumbnail_height', 'thumbnail_image_width', 'thumbnail_image_height'); $DebugOutput = array(); $DebugOutput[] = 'phpThumb() version = '.$this->phpthumb_version; - $DebugOutput[] = 'phpversion() = '.@phpversion(); + $DebugOutput[] = 'phpversion() = '.@PHP_VERSION; $DebugOutput[] = 'PHP_OS = '.PHP_OS; $DebugOutput[] = '$_SERVER[SERVER_SOFTWARE] = '.@$_SERVER['SERVER_SOFTWARE']; $DebugOutput[] = '__FILE__ = '.__FILE__; @@ -4033,14 +4131,14 @@ function phpThumbDebug($level='') { return $this->ErrorImage(implode("\n", $DebugOutput), 700, 500, true); } - function FatalError($text) { - if (is_null($this->fatalerror)) { + public function FatalError($text) { + if (null === $this->fatalerror) { $this->fatalerror = $text; } return true; } - function ErrorImage($text, $width=0, $height=0, $forcedisplay=false) { + public function ErrorImage($text, $width=0, $height=0, $forcedisplay=false) { $width = ($width ? $width : $this->config_error_image_width); $height = ($height ? $height : $this->config_error_image_height); @@ -4083,15 +4181,15 @@ function ErrorImage($text, $width=0, $height=0, $forcedisplay=false) { exit; } - $FontWidth = ImageFontWidth($this->config_error_fontsize); - $FontHeight = ImageFontHeight($this->config_error_fontsize); + $FontWidth = imagefontwidth($this->config_error_fontsize); + $FontHeight = imagefontheight($this->config_error_fontsize); $LinesOfText = explode("\n", @wordwrap($text, floor($width / $FontWidth), "\n", true)); $height = max($height, count($LinesOfText) * $FontHeight); $headers_file = ''; $headers_line = ''; - if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.0', '>=') && headers_sent($headers_file, $headers_line)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '4.3.0', '>=') && headers_sent($headers_file, $headers_line)) { echo "\n".'**Headers already sent in file "'.$headers_file.'" on line "'.$headers_line.'", dumping error message as text:**
          '."\n\n".$text."\n".'
          '; @@ -4099,45 +4197,44 @@ function ErrorImage($text, $width=0, $height=0, $forcedisplay=false) { echo "\n".'**Headers already sent, dumping error message as text:**
          '."\n\n".$text."\n".'
          '; - } elseif ($gdimg_error = ImageCreate($width, $height)) { + } elseif ($gdimg_error = imagecreate($width, $height)) { $background_color = phpthumb_functions::ImageHexColorAllocate($gdimg_error, $this->config_error_bgcolor, true); $text_color = phpthumb_functions::ImageHexColorAllocate($gdimg_error, $this->config_error_textcolor, true); - ImageFilledRectangle($gdimg_error, 0, 0, $width, $height, $background_color); + imagefilledrectangle($gdimg_error, 0, 0, $width, $height, $background_color); $lineYoffset = 0; foreach ($LinesOfText as $line) { - ImageString($gdimg_error, $this->config_error_fontsize, 2, $lineYoffset, $line, $text_color); + imagestring($gdimg_error, $this->config_error_fontsize, 2, $lineYoffset, $line, $text_color); $lineYoffset += $FontHeight; } - if (function_exists('ImageTypes')) { - $imagetypes = ImageTypes(); + if (function_exists('imagetypes')) { + $imagetypes = imagetypes(); if ($imagetypes & IMG_PNG) { header('Content-Type: image/png'); - ImagePNG($gdimg_error); + imagepng($gdimg_error); } elseif ($imagetypes & IMG_GIF) { header('Content-Type: image/gif'); - ImageGIF($gdimg_error); + imagegif($gdimg_error); } elseif ($imagetypes & IMG_JPG) { header('Content-Type: image/jpeg'); - ImageJPEG($gdimg_error); + imagejpeg($gdimg_error); } elseif ($imagetypes & IMG_WBMP) { header('Content-Type: image/vnd.wap.wbmp'); - ImageWBMP($gdimg_error); + imagewbmp($gdimg_error); } } - ImageDestroy($gdimg_error); + imagedestroy($gdimg_error); } if (!headers_sent()) { echo "\n".'**Failed to send graphical error image, dumping error message as text:**
          '."\n\n".$text; } exit; - return true; } - function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors=false) { + public function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors=false) { // there are serious bugs in the non-bundled versions of GD which may cause - // PHP to segfault when calling ImageCreateFromString() - avoid if at all possible + // PHP to segfault when calling imagecreatefromstring() - avoid if at all possible // when not using a bundled version of GD2 if (!phpthumb_functions::gd_version()) { if ($DieOnErrors) { @@ -4156,8 +4253,8 @@ function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors=false) { } } if (phpthumb_functions::gd_is_bundled()) { - $this->DebugMessage('ImageCreateFromStringReplacement() calling built-in ImageCreateFromString()', __FILE__, __LINE__); - return @ImageCreateFromString($RawImageData); + $this->DebugMessage('ImageCreateFromStringReplacement() calling built-in imagecreatefromstring()', __FILE__, __LINE__); + return @imagecreatefromstring($RawImageData); } if ($this->issafemode) { $this->DebugMessage('ImageCreateFromStringReplacement() failed: cannot create temp file in SAFE_MODE', __FILE__, __LINE__); @@ -4166,29 +4263,31 @@ function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors=false) { switch (substr($RawImageData, 0, 3)) { case 'GIF': - $ICFSreplacementFunctionName = 'ImageCreateFromGIF'; + $ICFSreplacementFunctionName = 'imagecreatefromgif'; break; case "\xFF\xD8\xFF": - $ICFSreplacementFunctionName = 'ImageCreateFromJPEG'; + $ICFSreplacementFunctionName = 'imagecreatefromjpeg'; break; case "\x89".'PN': - $ICFSreplacementFunctionName = 'ImageCreateFromPNG'; + $ICFSreplacementFunctionName = 'imagecreatefrompng'; break; default: $this->DebugMessage('ImageCreateFromStringReplacement() failed: unknown fileformat signature "'.phpthumb_functions::HexCharDisplay(substr($RawImageData, 0, 3)).'"', __FILE__, __LINE__); return false; break; } + $ErrorMessage = ''; if ($tempnam = $this->phpThumb_tempnam()) { if ($fp_tempnam = @fopen($tempnam, 'wb')) { fwrite($fp_tempnam, $RawImageData); fclose($fp_tempnam); - if (($ICFSreplacementFunctionName == 'ImageCreateFromGIF') && !function_exists($ICFSreplacementFunctionName)) { + @chmod($tempnam, $this->getParameter('config_file_create_mask')); + if (($ICFSreplacementFunctionName == 'imagecreatefromgif') && !function_exists($ICFSreplacementFunctionName)) { - // Need to create from GIF file, but ImageCreateFromGIF does not exist + // Need to create from GIF file, but imagecreatefromgif does not exist ob_start(); - if (!@include_once(dirname(__FILE__) . '/phpthumb.gif.php')) { - $ErrorMessage = 'Failed to include required file "'.dirname(__FILE__).'/phpthumb.gif.php" in '.__FILE__.' on line '.__LINE__; + if (!@include_once __DIR__ .'/phpthumb.gif.php' ) { + $ErrorMessage = 'Failed to include required file "'. __DIR__ .'/phpthumb.gif.php" in '.__FILE__.' on line '.__LINE__; $this->DebugMessage($ErrorMessage, __FILE__, __LINE__); } ob_end_clean(); @@ -4249,49 +4348,47 @@ function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors=false) { return false; } - function ImageResizeFunction(&$dst_im, &$src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH) { + public function ImageResizeFunction(&$dst_im, &$src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH) { $this->DebugMessage('ImageResizeFunction($o, $s, '.$dstX.', '.$dstY.', '.$srcX.', '.$srcY.', '.$dstW.', '.$dstH.', '.$srcW.', '.$srcH.')', __FILE__, __LINE__); if (($dstW == $srcW) && ($dstH == $srcH)) { - return ImageCopy($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH); + return imagecopy($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH); } if (phpthumb_functions::gd_version() >= 2.0) { if ($this->config_disable_imagecopyresampled) { return phpthumb_functions::ImageCopyResampleBicubic($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); } - return ImageCopyResampled($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); + return imagecopyresampled($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); } - return ImageCopyResized($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); + return imagecopyresized($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH); } - function InitializeTempDirSetting() { - $this->config_temp_directory = realpath($this->config_temp_directory ? $this->config_temp_directory : (getenv('TMPDIR') ? getenv('TMPDIR') : getenv('TMP'))); + public function InitializeTempDirSetting() { + $this->config_temp_directory = ($this->config_temp_directory ? $this->config_temp_directory : $this->realPathSafe((function_exists('sys_get_temp_dir') ? sys_get_temp_dir() : ''))); // sys_get_temp_dir added in PHP v5.2.1 + $this->config_temp_directory = ($this->config_temp_directory ? $this->config_temp_directory : $this->realPathSafe(ini_get('upload_tmp_dir'))); + $this->config_temp_directory = ($this->config_temp_directory ? $this->config_temp_directory : $this->realPathSafe(getenv('TMPDIR'))); + $this->config_temp_directory = ($this->config_temp_directory ? $this->config_temp_directory : $this->realPathSafe(getenv('TMP'))); return true; } - function phpThumb_tempnam() { + public function phpThumb_tempnam() { $this->InitializeTempDirSetting(); - $tempnam = realpath(tempnam($this->config_temp_directory, 'pThumb')); + $tempnam = $this->realPathSafe(tempnam($this->config_temp_directory, 'pThumb')); $this->tempFilesToDelete[$tempnam] = $tempnam; $this->DebugMessage('phpThumb_tempnam() returning "'.$tempnam.'"', __FILE__, __LINE__); return $tempnam; } - function DebugMessage($message, $file='', $line='') { + public function DebugMessage($message, $file='', $line='') { $this->debugmessages[] = $message.($file ? ' in file "'.(basename($file) ? basename($file) : $file).'"' : '').($line ? ' on line '.$line : ''); return true; } - function DebugTimingMessage($message, $file='', $line='', $timestamp=0) { + public function DebugTimingMessage($message, $file='', $line='', $timestamp=0) { if (!$timestamp) { $timestamp = array_sum(explode(' ', microtime())); } $this->debugtiming[number_format($timestamp, 6, '.', '')] = ': '.$message.($file ? ' in file "'.(basename($file) ? basename($file) : $file).'"' : '').($line ? ' on line '.$line : ''); return true; } - - function customEscapeshellarg($fileName) - { - $input = str_replace('\'', '\\\'', $fileName); - return '\''.$input.'\''; - } + } diff --git a/assets/snippets/phpthumb/phpthumb.filters.php b/assets/snippets/phpthumb/phpthumb.filters.php index 1b7b194c..0dc589b5 100755 --- a/assets/snippets/phpthumb/phpthumb.filters.php +++ b/assets/snippets/phpthumb/phpthumb.filters.php @@ -11,13 +11,14 @@ class phpthumb_filters { - var $phpThumbObject = null; + /** + * @var phpthumb + */ + + public $phpThumbObject = null; - function __construct() { - return true; - } - function DebugMessage($message, $file='', $line='') { + public function DebugMessage($message, $file='', $line='') { if (is_object($this->phpThumbObject)) { return $this->phpThumbObject->DebugMessage($message, $file, $line); } @@ -25,43 +26,42 @@ function DebugMessage($message, $file='', $line='') { } - public function ApplyMask(&$gdimg_mask, &$gdimg_image) { if (phpthumb_functions::gd_version() < 2) { $this->DebugMessage('Skipping ApplyMask() because gd_version is "'.phpthumb_functions::gd_version().'"', __FILE__, __LINE__); return false; } - if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.2', '>=')) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '4.3.2', '>=')) { $this->DebugMessage('Using alpha ApplyMask() technique', __FILE__, __LINE__); - if ($gdimg_mask_resized = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg_image), ImageSY($gdimg_image))) { + if ($gdimg_mask_resized = phpthumb_functions::ImageCreateFunction(imagesx($gdimg_image), imagesy($gdimg_image))) { - ImageCopyResampled($gdimg_mask_resized, $gdimg_mask, 0, 0, 0, 0, ImageSX($gdimg_image), ImageSY($gdimg_image), ImageSX($gdimg_mask), ImageSY($gdimg_mask)); - if ($gdimg_mask_blendtemp = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg_image), ImageSY($gdimg_image))) { + imagecopyresampled($gdimg_mask_resized, $gdimg_mask, 0, 0, 0, 0, imagesx($gdimg_image), imagesy($gdimg_image), imagesx($gdimg_mask), imagesy($gdimg_mask)); + if ($gdimg_mask_blendtemp = phpthumb_functions::ImageCreateFunction(imagesx($gdimg_image), imagesy($gdimg_image))) { - $color_background = ImageColorAllocate($gdimg_mask_blendtemp, 0, 0, 0); - ImageFilledRectangle($gdimg_mask_blendtemp, 0, 0, ImageSX($gdimg_mask_blendtemp), ImageSY($gdimg_mask_blendtemp), $color_background); - ImageAlphaBlending($gdimg_mask_blendtemp, false); - ImageSaveAlpha($gdimg_mask_blendtemp, true); - for ($x = 0; $x < ImageSX($gdimg_image); $x++) { - for ($y = 0; $y < ImageSY($gdimg_image); $y++) { + $color_background = imagecolorallocate($gdimg_mask_blendtemp, 0, 0, 0); + imagefilledrectangle($gdimg_mask_blendtemp, 0, 0, imagesx($gdimg_mask_blendtemp), imagesy($gdimg_mask_blendtemp), $color_background); + imagealphablending($gdimg_mask_blendtemp, false); + imagesavealpha($gdimg_mask_blendtemp, true); + for ($x = 0, $xMax = imagesx($gdimg_image); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg_image); $y < $yMax; $y++) { //$RealPixel = phpthumb_functions::GetPixelColor($gdimg_mask_blendtemp, $x, $y); $RealPixel = phpthumb_functions::GetPixelColor($gdimg_image, $x, $y); $MaskPixel = phpthumb_functions::GrayscalePixel(phpthumb_functions::GetPixelColor($gdimg_mask_resized, $x, $y)); $MaskAlpha = 127 - (floor($MaskPixel['red'] / 2) * (1 - ($RealPixel['alpha'] / 127))); $newcolor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg_mask_blendtemp, $RealPixel['red'], $RealPixel['green'], $RealPixel['blue'], $MaskAlpha); - ImageSetPixel($gdimg_mask_blendtemp, $x, $y, $newcolor); + imagesetpixel($gdimg_mask_blendtemp, $x, $y, $newcolor); } } - ImageAlphaBlending($gdimg_image, false); - ImageSaveAlpha($gdimg_image, true); - ImageCopy($gdimg_image, $gdimg_mask_blendtemp, 0, 0, 0, 0, ImageSX($gdimg_mask_blendtemp), ImageSY($gdimg_mask_blendtemp)); - ImageDestroy($gdimg_mask_blendtemp); + imagealphablending($gdimg_image, false); + imagesavealpha($gdimg_image, true); + imagecopy($gdimg_image, $gdimg_mask_blendtemp, 0, 0, 0, 0, imagesx($gdimg_mask_blendtemp), imagesy($gdimg_mask_blendtemp)); + imagedestroy($gdimg_mask_blendtemp); } else { $this->DebugMessage('ImageCreateFunction() failed', __FILE__, __LINE__); } - ImageDestroy($gdimg_mask_resized); + imagedestroy($gdimg_mask_resized); } else { $this->DebugMessage('ImageCreateFunction() failed', __FILE__, __LINE__); @@ -69,43 +69,43 @@ public function ApplyMask(&$gdimg_mask, &$gdimg_image) { } else { // alpha merging requires PHP v4.3.2+ - $this->DebugMessage('Skipping ApplyMask() technique because PHP is v"'.phpversion().'"', __FILE__, __LINE__); + $this->DebugMessage('Skipping ApplyMask() technique because PHP is v"'. PHP_VERSION .'"', __FILE__, __LINE__); } return true; } - function Bevel(&$gdimg, $width, $hexcolor1, $hexcolor2) { + public function Bevel(&$gdimg, $width, $hexcolor1, $hexcolor2) { $width = ($width ? $width : 5); $hexcolor1 = ($hexcolor1 ? $hexcolor1 : 'FFFFFF'); $hexcolor2 = ($hexcolor2 ? $hexcolor2 : '000000'); - ImageAlphaBlending($gdimg, true); + imagealphablending($gdimg, true); for ($i = 0; $i < $width; $i++) { $alpha = round(($i / $width) * 127); $color1 = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor1, false, $alpha); $color2 = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor2, false, $alpha); - ImageLine($gdimg, $i, $i + 1, $i, ImageSY($gdimg) - $i - 1, $color1); // left - ImageLine($gdimg, $i, $i , ImageSX($gdimg) - $i, $i , $color1); // top - ImageLine($gdimg, ImageSX($gdimg) - $i, ImageSY($gdimg) - $i - 1, ImageSX($gdimg) - $i, $i + 1, $color2); // right - ImageLine($gdimg, ImageSX($gdimg) - $i, ImageSY($gdimg) - $i , $i, ImageSY($gdimg) - $i , $color2); // bottom + imageline($gdimg, $i, $i + 1, $i, imagesy($gdimg) - $i - 1, $color1); // left + imageline($gdimg, $i, $i , imagesx($gdimg) - $i, $i , $color1); // top + imageline($gdimg, imagesx($gdimg) - $i, imagesy($gdimg) - $i - 1, imagesx($gdimg) - $i, $i + 1, $color2); // right + imageline($gdimg, imagesx($gdimg) - $i, imagesy($gdimg) - $i , $i, imagesy($gdimg) - $i , $color2); // bottom } return true; } public function Blur(&$gdimg, $radius=0.5) { - // Taken from Torstein H?nsi's phpUnsharpMask (see phpthumb.unsharp.php) + // Taken from Torstein Hønsi's phpUnsharpMask (see phpthumb.unsharp.php) $radius = round(max(0, min($radius, 50)) * 2); if (!$radius) { return false; } - $w = ImageSX($gdimg); - $h = ImageSY($gdimg); - if ($imgBlur = ImageCreateTrueColor($w, $h)) { + $w = imagesx($gdimg); + $h = imagesy($gdimg); + if ($imgBlur = imagecreatetruecolor($w, $h)) { // Gaussian blur matrix: // 1 2 1 // 2 4 2 @@ -114,16 +114,16 @@ public function Blur(&$gdimg, $radius=0.5) { // Move copies of the image around one pixel at the time and merge them with weight // according to the matrix. The same matrix is simply repeated for higher radii. for ($i = 0; $i < $radius; $i++) { - ImageCopy ($imgBlur, $gdimg, 0, 0, 1, 1, $w - 1, $h - 1); // up left - ImageCopyMerge($imgBlur, $gdimg, 1, 1, 0, 0, $w, $h, 50.00000); // down right - ImageCopyMerge($imgBlur, $gdimg, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left - ImageCopyMerge($imgBlur, $gdimg, 1, 0, 0, 1, $w, $h - 1, 25.00000); // up right - ImageCopyMerge($imgBlur, $gdimg, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left - ImageCopyMerge($imgBlur, $gdimg, 1, 0, 0, 0, $w, $h, 25.00000); // right - ImageCopyMerge($imgBlur, $gdimg, 0, 0, 0, 1, $w, $h - 1, 20.00000); // up - ImageCopyMerge($imgBlur, $gdimg, 0, 1, 0, 0, $w, $h, 16.666667); // down - ImageCopyMerge($imgBlur, $gdimg, 0, 0, 0, 0, $w, $h, 50.000000); // center - ImageCopy ($gdimg, $imgBlur, 0, 0, 0, 0, $w, $h); + imagecopy ($imgBlur, $gdimg, 0, 0, 1, 1, $w - 1, $h - 1); // up left + imagecopymerge($imgBlur, $gdimg, 1, 1, 0, 0, $w, $h, 50.00000); // down right + imagecopymerge($imgBlur, $gdimg, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left + imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 1, $w, $h - 1, 25.00000); // up right + imagecopymerge($imgBlur, $gdimg, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left + imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 0, $w, $h, 25.00000); // right + imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 1, $w, $h - 1, 20.00000); // up + imagecopymerge($imgBlur, $gdimg, 0, 1, 0, 0, $w, $h, 16.666667); // down + imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 0, $w, $h, 50.000000); // center + imagecopy ($gdimg, $imgBlur, 0, 0, 0, 0, $w, $h); } return true; } @@ -132,24 +132,24 @@ public function Blur(&$gdimg, $radius=0.5) { public function BlurGaussian(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_GAUSSIAN_BLUR)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_GAUSSIAN_BLUR)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_GAUSSIAN_BLUR)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_GAUSSIAN_BLUR)', __FILE__, __LINE__); // fall through and try it the hard way } $this->DebugMessage('FAILED: phpthumb_filters::BlurGaussian($gdimg) [using phpthumb_filters::Blur() instead]', __FILE__, __LINE__); - return phpthumb_filters::Blur($gdimg, 0.5); + return $this->Blur($gdimg, 0.5); } public function BlurSelective(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_SELECTIVE_BLUR)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_SELECTIVE_BLUR)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_SELECTIVE_BLUR)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_SELECTIVE_BLUR)', __FILE__, __LINE__); // fall through and try it the hard way } // currently not implemented "the hard way" @@ -164,24 +164,25 @@ public function Brightness(&$gdimg, $amount=0) { } $amount = max(-255, min(255, $amount)); - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_BRIGHTNESS, $amount)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_BRIGHTNESS, $amount)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_BRIGHTNESS, '.$amount.')', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_BRIGHTNESS, '.$amount.')', __FILE__, __LINE__); // fall through and try it the hard way } $scaling = (255 - abs($amount)) / 255; $baseamount = (($amount > 0) ? $amount : 0); - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); + $NewPixel = array(); foreach ($OriginalPixel as $key => $value) { $NewPixel[$key] = round($baseamount + ($OriginalPixel[$key] * $scaling)); } - $newColor = ImageColorAllocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); - ImageSetPixel($gdimg, $x, $y, $newColor); + $newColor = imagecolorallocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; @@ -194,13 +195,13 @@ public function Contrast(&$gdimg, $amount=0) { } $amount = max(-255, min(255, $amount)); - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - // ImageFilter(IMG_FILTER_CONTRAST) has range +100 to -100 (positive numbers make it darker!) + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + // imagefilter(IMG_FILTER_CONTRAST) has range +100 to -100 (positive numbers make it darker!) $amount = ($amount / 255) * -100; - if (ImageFilter($gdimg, IMG_FILTER_CONTRAST, $amount)) { + if (imagefilter($gdimg, IMG_FILTER_CONTRAST, $amount)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_CONTRAST, '.$amount.')', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_CONTRAST, '.$amount.')', __FILE__, __LINE__); // fall through and try it the hard way } @@ -209,16 +210,18 @@ public function Contrast(&$gdimg, $amount=0) { } else { $scaling = (255 - abs($amount)) / 255; } - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); + $NewPixel = array(); foreach ($OriginalPixel as $key => $value) { $NewPixel[$key] = min(255, max(0, round($OriginalPixel[$key] * $scaling))); } - $newColor = ImageColorAllocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); - ImageSetPixel($gdimg, $x, $y, $newColor); + $newColor = imagecolorallocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); + imagesetpixel($gdimg, $x, $y, $newColor); } } + return true; } @@ -231,39 +234,41 @@ public function Colorize(&$gdimg, $amount, $targetColor) { return true; } - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { if ($targetColor == 'gray') { $targetColor = '808080'; } $r = round($amountPct * hexdec(substr($targetColor, 0, 2))); $g = round($amountPct * hexdec(substr($targetColor, 2, 2))); $b = round($amountPct * hexdec(substr($targetColor, 4, 2))); - if (ImageFilter($gdimg, IMG_FILTER_COLORIZE, $r, $g, $b)) { + if (imagefilter($gdimg, IMG_FILTER_COLORIZE, $r, $g, $b)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_COLORIZE)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_COLORIZE)', __FILE__, __LINE__); // fall through and try it the hard way } // overridden below for grayscale + $TargetPixel = array(); if ($targetColor != 'gray') { $TargetPixel['red'] = hexdec(substr($targetColor, 0, 2)); $TargetPixel['green'] = hexdec(substr($targetColor, 2, 2)); $TargetPixel['blue'] = hexdec(substr($targetColor, 4, 2)); } - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); if ($targetColor == 'gray') { $TargetPixel = phpthumb_functions::GrayscalePixel($OriginalPixel); } + $NewPixel = array(); foreach ($TargetPixel as $key => $value) { $NewPixel[$key] = round(max(0, min(255, ($OriginalPixel[$key] * ((100 - $amount) / 100)) + ($TargetPixel[$key] * $amountPct)))); } //$newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue'], $OriginalPixel['alpha']); - $newColor = ImageColorAllocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); - ImageSetPixel($gdimg, $x, $y, $newColor); + $newColor = imagecolorallocate($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue']); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; @@ -274,8 +279,8 @@ public function Crop(&$gdimg, $left=0, $right=0, $top=0, $bottom=0) { if (!$left && !$right && !$top && !$bottom) { return true; } - $oldW = ImageSX($gdimg); - $oldH = ImageSY($gdimg); + $oldW = imagesx($gdimg); + $oldH = imagesy($gdimg); if (($left > 0) && ($left < 1)) { $left = round($left * $oldW); } if (($right > 0) && ($right < 1)) { $right = round($right * $oldW); } if (($top > 0) && ($top < 1)) { $top = round($top * $oldH); } @@ -285,14 +290,14 @@ public function Crop(&$gdimg, $left=0, $right=0, $top=0, $bottom=0) { $newW = $oldW - $left - $right; $newH = $oldH - $top - $bottom; - if ($imgCropped = ImageCreateTrueColor($newW, $newH)) { - ImageCopy($imgCropped, $gdimg, 0, 0, $left, $top, $newW, $newH); - if ($gdimg = ImageCreateTrueColor($newW, $newH)) { - ImageCopy($gdimg, $imgCropped, 0, 0, 0, 0, $newW, $newH); - ImageDestroy($imgCropped); + if ($imgCropped = imagecreatetruecolor($newW, $newH)) { + imagecopy($imgCropped, $gdimg, 0, 0, $left, $top, $newW, $newH); + if ($gdimg = imagecreatetruecolor($newW, $newH)) { + imagecopy($gdimg, $imgCropped, 0, 0, 0, 0, $newW, $newH); + imagedestroy($imgCropped); return true; } - ImageDestroy($imgCropped); + imagedestroy($imgCropped); } return false; } @@ -302,7 +307,7 @@ public function Desaturate(&$gdimg, $amount, $color='') { if ($amount == 0) { return true; } - return phpthumb_filters::Colorize($gdimg, $amount, (phpthumb_functions::IsHexColor($color) ? $color : 'gray')); + return $this->Colorize($gdimg, $amount, (phpthumb_functions::IsHexColor($color) ? $color : 'gray')); } @@ -325,29 +330,30 @@ public function DropShadow(&$gdimg, $distance, $width, $hexcolor, $angle, $alpha return true; } - $width_shadow = cos(deg2rad($angle)) * ($distance + $width); - $height_shadow = sin(deg2rad($angle)) * ($distance + $width); - - $scaling = min(ImageSX($gdimg) / (ImageSX($gdimg) + abs($width_shadow)), ImageSY($gdimg) / (ImageSY($gdimg) + abs($height_shadow))); + //$width_shadow = cos(deg2rad($angle)) * ($distance + $width); + //$height_shadow = sin(deg2rad($angle)) * ($distance + $width); + //$scaling = min(imagesx($gdimg) / (imagesx($gdimg) + abs($width_shadow)), imagesy($gdimg) / (imagesy($gdimg) + abs($height_shadow))); + $Offset = array(); for ($i = 0; $i < $width; $i++) { $WidthAlpha[$i] = (abs(($width / 2) - $i) / $width); $Offset['x'] = cos(deg2rad($angle)) * ($distance + $i); $Offset['y'] = sin(deg2rad($angle)) * ($distance + $i); } - $tempImageWidth = ImageSX($gdimg) + abs($Offset['x']); - $tempImageHeight = ImageSY($gdimg) + abs($Offset['y']); + $tempImageWidth = imagesx($gdimg) + abs($Offset['x']); + $tempImageHeight = imagesy($gdimg) + abs($Offset['y']); if ($gdimg_dropshadow_temp = phpthumb_functions::ImageCreateFunction($tempImageWidth, $tempImageHeight)) { - ImageAlphaBlending($gdimg_dropshadow_temp, false); - ImageSaveAlpha($gdimg_dropshadow_temp, true); + imagealphablending($gdimg_dropshadow_temp, false); + imagesavealpha($gdimg_dropshadow_temp, true); $transparent1 = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg_dropshadow_temp, 0, 0, 0, 127); - ImageFill($gdimg_dropshadow_temp, 0, 0, $transparent1); + imagefill($gdimg_dropshadow_temp, 0, 0, $transparent1); - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + $PixelMap = array(); + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { $PixelMap[$x][$y] = phpthumb_functions::GetPixelColor($gdimg, $x, $y); } } @@ -358,42 +364,42 @@ public function DropShadow(&$gdimg, $distance, $width, $hexcolor, $angle, $alpha if (!isset($PixelMap[$x][$y]['alpha']) || ($PixelMap[$x][$y]['alpha'] > 0)) { if (isset($PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha']) && ($PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha'] < 127)) { $thisColor = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor, false, $PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha']); - ImageSetPixel($gdimg_dropshadow_temp, $x, $y, $thisColor); + imagesetpixel($gdimg_dropshadow_temp, $x, $y, $thisColor); } } } } } - ImageAlphaBlending($gdimg_dropshadow_temp, true); - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + imagealphablending($gdimg_dropshadow_temp, true); + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { if ($PixelMap[$x][$y]['alpha'] < 127) { $thisColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg_dropshadow_temp, $PixelMap[$x][$y]['red'], $PixelMap[$x][$y]['green'], $PixelMap[$x][$y]['blue'], $PixelMap[$x][$y]['alpha']); - ImageSetPixel($gdimg_dropshadow_temp, $x, $y, $thisColor); + imagesetpixel($gdimg_dropshadow_temp, $x, $y, $thisColor); } } } - ImageSaveAlpha($gdimg, true); - ImageAlphaBlending($gdimg, false); + imagesavealpha($gdimg, true); + imagealphablending($gdimg, false); //$this->is_alpha = true; $transparent2 = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, 0, 0, 0, 127); - ImageFilledRectangle($gdimg, 0, 0, ImageSX($gdimg), ImageSY($gdimg), $transparent2); - ImageCopyResampled($gdimg, $gdimg_dropshadow_temp, 0, 0, 0, 0, ImageSX($gdimg), ImageSY($gdimg), ImageSX($gdimg_dropshadow_temp), ImageSY($gdimg_dropshadow_temp)); + imagefilledrectangle($gdimg, 0, 0, imagesx($gdimg), imagesy($gdimg), $transparent2); + imagecopyresampled($gdimg, $gdimg_dropshadow_temp, 0, 0, 0, 0, imagesx($gdimg), imagesy($gdimg), imagesx($gdimg_dropshadow_temp), imagesy($gdimg_dropshadow_temp)); - ImageDestroy($gdimg_dropshadow_temp); + imagedestroy($gdimg_dropshadow_temp); } return true; } public function EdgeDetect(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_EDGEDETECT)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_EDGEDETECT)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_EDGEDETECT)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_EDGEDETECT)', __FILE__, __LINE__); // fall through and try it the hard way } // currently not implemented "the hard way" @@ -402,39 +408,39 @@ public function EdgeDetect(&$gdimg) { } - public function Elipse($gdimg) { + public function Ellipse($gdimg) { if (phpthumb_functions::gd_version() < 2) { return false; } // generate mask at twice desired resolution and downsample afterwards for easy antialiasing - if ($gdimg_elipsemask_double = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg) * 2, ImageSY($gdimg) * 2)) { - if ($gdimg_elipsemask = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg), ImageSY($gdimg))) { + if ($gdimg_ellipsemask_double = phpthumb_functions::ImageCreateFunction(imagesx($gdimg) * 2, imagesy($gdimg) * 2)) { + if ($gdimg_ellipsemask = phpthumb_functions::ImageCreateFunction(imagesx($gdimg), imagesy($gdimg))) { - $color_transparent = ImageColorAllocate($gdimg_elipsemask_double, 255, 255, 255); - ImageFilledEllipse($gdimg_elipsemask_double, ImageSX($gdimg), ImageSY($gdimg), (ImageSX($gdimg) - 1) * 2, (ImageSY($gdimg) - 1) * 2, $color_transparent); - ImageCopyResampled($gdimg_elipsemask, $gdimg_elipsemask_double, 0, 0, 0, 0, ImageSX($gdimg), ImageSY($gdimg), ImageSX($gdimg) * 2, ImageSY($gdimg) * 2); + $color_transparent = imagecolorallocate($gdimg_ellipsemask_double, 255, 255, 255); + imagefilledellipse($gdimg_ellipsemask_double, imagesx($gdimg), imagesy($gdimg), (imagesx($gdimg) - 1) * 2, (imagesy($gdimg) - 1) * 2, $color_transparent); + imagecopyresampled($gdimg_ellipsemask, $gdimg_ellipsemask_double, 0, 0, 0, 0, imagesx($gdimg), imagesy($gdimg), imagesx($gdimg) * 2, imagesy($gdimg) * 2); - phpthumb_filters::ApplyMask($gdimg_elipsemask, $gdimg); - ImageDestroy($gdimg_elipsemask); + $this->ApplyMask($gdimg_ellipsemask, $gdimg); + imagedestroy($gdimg_ellipsemask); return true; } else { - $this->DebugMessage('$gdimg_elipsemask = phpthumb_functions::ImageCreateFunction() failed', __FILE__, __LINE__); + $this->DebugMessage('$gdimg_ellipsemask = phpthumb_functions::ImageCreateFunction() failed', __FILE__, __LINE__); } - ImageDestroy($gdimg_elipsemask_double); + imagedestroy($gdimg_ellipsemask_double); } else { - $this->DebugMessage('$gdimg_elipsemask_double = phpthumb_functions::ImageCreateFunction() failed', __FILE__, __LINE__); + $this->DebugMessage('$gdimg_ellipsemask_double = phpthumb_functions::ImageCreateFunction() failed', __FILE__, __LINE__); } return false; } public function Emboss(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_EMBOSS)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_EMBOSS)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_EMBOSS)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_EMBOSS)', __FILE__, __LINE__); // fall through and try it the hard way } // currently not implemented "the hard way" @@ -447,20 +453,20 @@ public function Flip(&$gdimg, $x=false, $y=false) { if (!$x && !$y) { return false; } - if ($tempImage = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg), ImageSY($gdimg))) { + if ($tempImage = phpthumb_functions::ImageCreateFunction(imagesx($gdimg), imagesy($gdimg))) { if ($x) { - ImageCopy($tempImage, $gdimg, 0, 0, 0, 0, ImageSX($gdimg), ImageSY($gdimg)); - for ($x = 0; $x < ImageSX($gdimg); $x++) { - ImageCopy($gdimg, $tempImage, ImageSX($gdimg) - 1 - $x, 0, $x, 0, 1, ImageSY($gdimg)); + imagecopy($tempImage, $gdimg, 0, 0, 0, 0, imagesx($gdimg), imagesy($gdimg)); + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + imagecopy($gdimg, $tempImage, imagesx($gdimg) - 1 - $x, 0, $x, 0, 1, imagesy($gdimg)); } } if ($y) { - ImageCopy($tempImage, $gdimg, 0, 0, 0, 0, ImageSX($gdimg), ImageSY($gdimg)); - for ($y = 0; $y < ImageSY($gdimg); $y++) { - ImageCopy($gdimg, $tempImage, 0, ImageSY($gdimg) - 1 - $y, 0, $y, ImageSX($gdimg), 1); + imagecopy($tempImage, $gdimg, 0, 0, 0, 0, imagesx($gdimg), imagesy($gdimg)); + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { + imagecopy($gdimg, $tempImage, 0, imagesy($gdimg) - 1 - $y, 0, $y, imagesx($gdimg), 1); } } - ImageDestroy($tempImage); + imagedestroy($tempImage); } return true; } @@ -478,21 +484,21 @@ public function Frame(&$gdimg, $frame_width, $edge_width, $hexcolor_frame, $hexc $color2 = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor2); for ($i = 0; $i < $edge_width; $i++) { // outer bevel - ImageLine($gdimg, $i, $i, $i, ImageSY($gdimg) - $i, $color1); // left - ImageLine($gdimg, $i, $i, ImageSX($gdimg) - $i, $i, $color1); // top - ImageLine($gdimg, ImageSX($gdimg) - $i, ImageSY($gdimg) - $i, ImageSX($gdimg) - $i, $i, $color2); // right - ImageLine($gdimg, ImageSX($gdimg) - $i, ImageSY($gdimg) - $i, $i, ImageSY($gdimg) - $i, $color2); // bottom + imageline($gdimg, $i, $i, $i, imagesy($gdimg) - $i, $color1); // left + imageline($gdimg, $i, $i, imagesx($gdimg) - $i, $i, $color1); // top + imageline($gdimg, imagesx($gdimg) - $i, imagesy($gdimg) - $i, imagesx($gdimg) - $i, $i, $color2); // right + imageline($gdimg, imagesx($gdimg) - $i, imagesy($gdimg) - $i, $i, imagesy($gdimg) - $i, $color2); // bottom } for ($i = 0; $i < $frame_width; $i++) { // actual frame - ImageRectangle($gdimg, $edge_width + $i, $edge_width + $i, ImageSX($gdimg) - $edge_width - $i, ImageSY($gdimg) - $edge_width - $i, $color_frame); + imagerectangle($gdimg, $edge_width + $i, $edge_width + $i, imagesx($gdimg) - $edge_width - $i, imagesy($gdimg) - $edge_width - $i, $color_frame); } for ($i = 0; $i < $edge_width; $i++) { // inner bevel - ImageLine($gdimg, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, ImageSY($gdimg) - $frame_width - $edge_width - $i, $color2); // left - ImageLine($gdimg, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, ImageSX($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, $color2); // top - ImageLine($gdimg, ImageSX($gdimg) - $frame_width - $edge_width - $i, ImageSY($gdimg) - $frame_width - $edge_width - $i, ImageSX($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, $color1); // right - ImageLine($gdimg, ImageSX($gdimg) - $frame_width - $edge_width - $i, ImageSY($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, ImageSY($gdimg) - $frame_width - $edge_width - $i, $color1); // bottom + imageline($gdimg, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, imagesy($gdimg) - $frame_width - $edge_width - $i, $color2); // left + imageline($gdimg, $frame_width + $edge_width + $i, $frame_width + $edge_width + $i, imagesx($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, $color2); // top + imageline($gdimg, imagesx($gdimg) - $frame_width - $edge_width - $i, imagesy($gdimg) - $frame_width - $edge_width - $i, imagesx($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, $color1); // right + imageline($gdimg, imagesx($gdimg) - $frame_width - $edge_width - $i, imagesy($gdimg) - $frame_width - $edge_width - $i, $frame_width + $edge_width + $i, imagesy($gdimg) - $frame_width - $edge_width - $i, $color1); // bottom } return true; } @@ -502,25 +508,26 @@ public function Gamma(&$gdimg, $amount) { if (number_format($amount, 4) == '1.0000') { return true; } - return ImageGammaCorrect($gdimg, 1.0, $amount); + return imagegammacorrect($gdimg, 1.0, $amount); } public function Grayscale(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_GRAYSCALE)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_GRAYSCALE)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_GRAYSCALE)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_GRAYSCALE)', __FILE__, __LINE__); // fall through and try it the hard way } - return phpthumb_filters::Colorize($gdimg, 100, 'gray'); + return $this->Colorize($gdimg, 100, 'gray'); } public function HistogramAnalysis(&$gdimg, $calculateGray=false) { - $ImageSX = ImageSX($gdimg); - $ImageSY = ImageSY($gdimg); + $ImageSX = imagesx($gdimg); + $ImageSY = imagesy($gdimg); + $Analysis = array(); for ($x = 0; $x < $ImageSX; $x++) { for ($y = 0; $y < $ImageSY; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); @@ -549,9 +556,9 @@ public function HistogramStretch(&$gdimg, $band='*', $method=0, $threshold=0.1) // equivalent of "Auto Contrast" in Adobe Photoshop // method 0 stretches according to RGB colors. Gives a more conservative stretch. // method 1 band stretches according to grayscale which is color-biased (59% green, 30% red, 11% blue). May give a punchier / more aggressive stretch, possibly appearing over-saturated - $Analysis = phpthumb_filters::HistogramAnalysis($gdimg, true); - $keys = array('r'=>'red', 'g'=>'green', 'b'=>'blue', 'a'=>'alpha', '*'=>(($method == 0) ? 'all' : 'gray')); - $band = substr($band, 0, 1); + $Analysis = $this->HistogramAnalysis($gdimg, true); + $keys = array('r'=>'red', 'g'=>'green', 'b'=>'blue', 'a'=>'alpha', '*'=> ($method == 0) ? 'all' : 'gray' ); + $band = $band[ 0 ]; if (!isset($keys[$band])) { return false; } @@ -561,50 +568,47 @@ public function HistogramStretch(&$gdimg, $band='*', $method=0, $threshold=0.1) // pixel in the image could throw off the whole system. Instead, count up/down // from the limit and allow (default = 0.1%) of brightest/darkest // pixels to be clipped to min/max - $threshold = floatval($threshold) / 100; - $clip_threshold = ImageSX($gdimg) * ImageSX($gdimg) * $threshold; - //if ($min >= 0) { - // $range_min = min($min, 255); - //} else { - $countsum = 0; - for ($i = 0; $i <= 255; $i++) { - if ($method == 0) { - $countsum = max(@$Analysis['red'][$i], @$Analysis['green'][$i], @$Analysis['blue'][$i]); - } else { - $countsum += @$Analysis[$key][$i]; - } - if ($countsum >= $clip_threshold) { - $range_min = $i - 1; - break; - } + $threshold = (float) $threshold / 100; + $clip_threshold = imagesx($gdimg) * imagesx($gdimg) * $threshold; + + $countsum = 0; + $range_min = 0; + for ($i = 0; $i <= 255; $i++) { + if ($method == 0) { + $countsum = max(@$Analysis['red'][$i], @$Analysis['green'][$i], @$Analysis['blue'][$i]); + } else { + $countsum += @$Analysis[$key][$i]; } - $range_min = max($range_min, 0); - //} - //if ($max > 0) { - // $range_max = max($max, 255); - //} else { - $countsum = 0; - for ($i = 255; $i >= 0; $i--) { - if ($method == 0) { - $countsum = max(@$Analysis['red'][$i], @$Analysis['green'][$i], @$Analysis['blue'][$i]); - } else { - $countsum += @$Analysis[$key][$i]; - } - if ($countsum >= $clip_threshold) { - $range_max = $i + 1; - break; - } + if ($countsum >= $clip_threshold) { + $range_min = $i - 1; + break; + } + } + $range_min = max($range_min, 0); + + $countsum = 0; + $range_max = 255; + for ($i = 255; $i >= 0; $i--) { + if ($method == 0) { + $countsum = max(@$Analysis['red'][$i], @$Analysis['green'][$i], @$Analysis['blue'][$i]); + } else { + $countsum += @$Analysis[$key][$i]; } - $range_max = min($range_max, 255); - //} + if ($countsum >= $clip_threshold) { + $range_max = $i + 1; + break; + } + } + $range_max = min($range_max, 255); + $range_scale = (($range_max == $range_min) ? 1 : (255 / ($range_max - $range_min))); if (($range_min == 0) && ($range_max == 255)) { - // no adjustment neccesary - don't waste CPU time! + // no adjustment necessary - don't waste CPU time! return true; } - $ImageSX = ImageSX($gdimg); - $ImageSY = ImageSY($gdimg); + $ImageSX = imagesx($gdimg); + $ImageSY = imagesy($gdimg); for ($x = 0; $x < $ImageSX; $x++) { for ($y = 0; $y < $ImageSY; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); @@ -618,7 +622,7 @@ public function HistogramStretch(&$gdimg, $band='*', $method=0, $threshold=0.1) $new[$key] = min(255, max(0, ($OriginalPixel[$key] - $range_min) * $range_scale)); } $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, $new['red'], $new['green'], $new['blue'], $new['alpha']); - ImageSetPixel($gdimg, $x, $y, $newColor); + imagesetpixel($gdimg, $x, $y, $newColor); } } @@ -627,24 +631,24 @@ public function HistogramStretch(&$gdimg, $band='*', $method=0, $threshold=0.1) public function HistogramOverlay(&$gdimg, $bands='*', $colors='', $width=0.25, $height=0.25, $alignment='BR', $opacity=50, $margin_x=5, $margin_y=null) { - $margin_y = (is_null($margin_y) ? $margin_x : $margin_y); + $margin_y = (null === $margin_y ? $margin_x : $margin_y); - $Analysis = phpthumb_filters::HistogramAnalysis($gdimg, true); - $histW = round(($width > 1) ? min($width, ImageSX($gdimg)) : ImageSX($gdimg) * $width); - $histH = round(($width > 1) ? min($width, ImageSX($gdimg)) : ImageSX($gdimg) * $width); - if ($gdHist = ImageCreateTrueColor($histW, $histH)) { + $Analysis = $this->HistogramAnalysis($gdimg, true); + $histW = round(($width > 1) ? min($width, imagesx($gdimg)) : imagesx($gdimg) * $width); + $histH = round(($width > 1) ? min($width, imagesx($gdimg)) : imagesx($gdimg) * $width); + if ($gdHist = imagecreatetruecolor($histW, $histH)) { $color_back = phpthumb_functions::ImageColorAllocateAlphaSafe($gdHist, 0, 0, 0, 127); - ImageFilledRectangle($gdHist, 0, 0, $histW, $histH, $color_back); - ImageAlphaBlending($gdHist, false); - ImageSaveAlpha($gdHist, true); + imagefilledrectangle($gdHist, 0, 0, $histW, $histH, $color_back); + imagealphablending($gdHist, false); + imagesavealpha($gdHist, true); $HistogramTempWidth = 256; $HistogramTempHeight = 100; - if ($gdHistTemp = ImageCreateTrueColor($HistogramTempWidth, $HistogramTempHeight)) { + if ($gdHistTemp = imagecreatetruecolor($HistogramTempWidth, $HistogramTempHeight)) { $color_back_temp = phpthumb_functions::ImageColorAllocateAlphaSafe($gdHistTemp, 255, 0, 255, 127); - ImageAlphaBlending($gdHistTemp, false); - ImageSaveAlpha($gdHistTemp, true); - ImageFilledRectangle($gdHistTemp, 0, 0, ImageSX($gdHistTemp), ImageSY($gdHistTemp), $color_back_temp); + imagealphablending($gdHistTemp, false); + imagesavealpha($gdHistTemp, true); + imagefilledrectangle($gdHistTemp, 0, 0, imagesx($gdHistTemp), imagesy($gdHistTemp), $color_back_temp); $DefaultColors = array('r'=>'FF0000', 'g'=>'00FF00', 'b'=>'0000FF', 'a'=>'999999', '*'=>'FFFFFF'); $Colors = explode(';', $colors); @@ -657,19 +661,19 @@ public function HistogramOverlay(&$gdimg, $bands='*', $colors='', $width=0.25, $ $PeakValue = max($Analysis[$keys[$band]]); $thisColor = phpthumb_functions::ImageHexColorAllocate($gdHistTemp, phpthumb_functions::IsHexColor(@$Colors[$key]) ? $Colors[$key] : $DefaultColors[$band]); for ($x = 0; $x < $HistogramTempWidth; $x++) { - ImageLine($gdHistTemp, $x, $HistogramTempHeight - 1, $x, $HistogramTempHeight - 1 - round(@$Analysis[$keys[$band]][$x] / $PeakValue * $HistogramTempHeight), $thisColor); + imageline($gdHistTemp, $x, $HistogramTempHeight - 1, $x, $HistogramTempHeight - 1 - round(@$Analysis[$keys[$band]][$x] / $PeakValue * $HistogramTempHeight), $thisColor); } - ImageLine($gdHistTemp, 0, $HistogramTempHeight - 1, $HistogramTempWidth - 1, $HistogramTempHeight - 1, $thisColor); - ImageLine($gdHistTemp, 0, $HistogramTempHeight - 2, $HistogramTempWidth - 1, $HistogramTempHeight - 2, $thisColor); + imageline($gdHistTemp, 0, $HistogramTempHeight - 1, $HistogramTempWidth - 1, $HistogramTempHeight - 1, $thisColor); + imageline($gdHistTemp, 0, $HistogramTempHeight - 2, $HistogramTempWidth - 1, $HistogramTempHeight - 2, $thisColor); } - ImageCopyResampled($gdHist, $gdHistTemp, 0, 0, 0, 0, ImageSX($gdHist), ImageSY($gdHist), ImageSX($gdHistTemp), ImageSY($gdHistTemp)); - ImageDestroy($gdHistTemp); + imagecopyresampled($gdHist, $gdHistTemp, 0, 0, 0, 0, imagesx($gdHist), imagesy($gdHist), imagesx($gdHistTemp), imagesy($gdHistTemp)); + imagedestroy($gdHistTemp); } else { return false; } - phpthumb_filters::WatermarkOverlay($gdimg, $gdHist, $alignment, $opacity, $margin_x, $margin_y); - ImageDestroy($gdHist); + $this->WatermarkOverlay($gdimg, $gdHist, $alignment, $opacity, $margin_x, $margin_y); + imagedestroy($gdHist); return true; } return false; @@ -681,68 +685,63 @@ public function ImageBorder(&$gdimg, $border_width, $radius_x, $radius_y, $hexco $radius_x = ($radius_x ? $radius_x : 0); $radius_y = ($radius_y ? $radius_y : 0); - $output_width = ImageSX($gdimg); - $output_height = ImageSY($gdimg); + $output_width = imagesx($gdimg); + $output_height = imagesy($gdimg); list($new_width, $new_height) = phpthumb_functions::ProportionalResize($output_width, $output_height, $output_width - max($border_width * 2, $radius_x), $output_height - max($border_width * 2, $radius_y)); $offset_x = ($radius_x ? $output_width - $new_width - $radius_x : 0); - $offset_y = ($radius_y ? $output_height - $new_height - $radius_y : 0); -//header('Content-Type: image/png'); -//ImagePNG($gdimg); -//exit; if ($gd_border_canvas = phpthumb_functions::ImageCreateFunction($output_width, $output_height)) { - ImageSaveAlpha($gd_border_canvas, true); - ImageAlphaBlending($gd_border_canvas, false); + imagesavealpha($gd_border_canvas, true); + imagealphablending($gd_border_canvas, false); $color_background = phpthumb_functions::ImageColorAllocateAlphaSafe($gd_border_canvas, 255, 255, 255, 127); - ImageFilledRectangle($gd_border_canvas, 0, 0, $output_width, $output_height, $color_background); + imagefilledrectangle($gd_border_canvas, 0, 0, $output_width, $output_height, $color_background); $color_border = phpthumb_functions::ImageHexColorAllocate($gd_border_canvas, (phpthumb_functions::IsHexColor($hexcolor_border) ? $hexcolor_border : '000000')); for ($i = 0; $i < $border_width; $i++) { - ImageLine($gd_border_canvas, floor($offset_x / 2) + $radius_x, $i, $output_width - $radius_x - ceil($offset_x / 2), $i, $color_border); // top - ImageLine($gd_border_canvas, floor($offset_x / 2) + $radius_x, $output_height - 1 - $i, $output_width - $radius_x - ceil($offset_x / 2), $output_height - 1 - $i, $color_border); // bottom - ImageLine($gd_border_canvas, floor($offset_x / 2) + $i, $radius_y, floor($offset_x / 2) + $i, $output_height - $radius_y, $color_border); // left - ImageLine($gd_border_canvas, $output_width - 1 - $i - ceil($offset_x / 2), $radius_y, $output_width - 1 - $i - ceil($offset_x / 2), $output_height - $radius_y, $color_border); // right + imageline($gd_border_canvas, floor($offset_x / 2) + $radius_x, $i, $output_width - $radius_x - ceil($offset_x / 2), $i, $color_border); // top + imageline($gd_border_canvas, floor($offset_x / 2) + $radius_x, $output_height - 1 - $i, $output_width - $radius_x - ceil($offset_x / 2), $output_height - 1 - $i, $color_border); // bottom + imageline($gd_border_canvas, floor($offset_x / 2) + $i, $radius_y, floor($offset_x / 2) + $i, $output_height - $radius_y, $color_border); // left + imageline($gd_border_canvas, $output_width - 1 - $i - ceil($offset_x / 2), $radius_y, $output_width - 1 - $i - ceil($offset_x / 2), $output_height - $radius_y, $color_border); // right } if ($radius_x && $radius_y) { - // PHP bug: ImageArc() with thicknesses > 1 give bad/undesirable/unpredicatable results + // PHP bug: imagearc() with thicknesses > 1 give bad/undesirable/unpredicatable results // Solution: Draw multiple 1px arcs side-by-side. // Problem: parallel arcs give strange/ugly antialiasing problems // Solution: draw non-parallel arcs, from one side of the line thickness at the start angle // to the opposite edge of the line thickness at the terminating angle for ($thickness_offset = 0; $thickness_offset < $border_width; $thickness_offset++) { - ImageArc($gd_border_canvas, floor($offset_x / 2) + 1 + $radius_x, $thickness_offset - 1 + $radius_y, $radius_x * 2, $radius_y * 2, 180, 270, $color_border); // top-left - ImageArc($gd_border_canvas, $output_width - $radius_x - 1 - ceil($offset_x / 2), $thickness_offset - 1 + $radius_y, $radius_x * 2, $radius_y * 2, 270, 360, $color_border); // top-right - ImageArc($gd_border_canvas, $output_width - $radius_x - 1 - ceil($offset_x / 2), $output_height - $thickness_offset - $radius_y, $radius_x * 2, $radius_y * 2, 0, 90, $color_border); // bottom-right - ImageArc($gd_border_canvas, floor($offset_x / 2) + 1 + $radius_x, $output_height - $thickness_offset - $radius_y, $radius_x * 2, $radius_y * 2, 90, 180, $color_border); // bottom-left + imagearc($gd_border_canvas, floor($offset_x / 2) + 1 + $radius_x, $thickness_offset - 1 + $radius_y, $radius_x * 2, $radius_y * 2, 180, 270, $color_border); // top-left + imagearc($gd_border_canvas, $output_width - $radius_x - 1 - ceil($offset_x / 2), $thickness_offset - 1 + $radius_y, $radius_x * 2, $radius_y * 2, 270, 360, $color_border); // top-right + imagearc($gd_border_canvas, $output_width - $radius_x - 1 - ceil($offset_x / 2), $output_height - $thickness_offset - $radius_y, $radius_x * 2, $radius_y * 2, 0, 90, $color_border); // bottom-right + imagearc($gd_border_canvas, floor($offset_x / 2) + 1 + $radius_x, $output_height - $thickness_offset - $radius_y, $radius_x * 2, $radius_y * 2, 90, 180, $color_border); // bottom-left } if ($border_width > 1) { for ($thickness_offset = 0; $thickness_offset < $border_width; $thickness_offset++) { - ImageArc($gd_border_canvas, floor($offset_x / 2) + $thickness_offset + $radius_x, $radius_y, $radius_x * 2, $radius_y * 2, 180, 270, $color_border); // top-left - ImageArc($gd_border_canvas, $output_width - $thickness_offset - $radius_x - 1 - ceil($offset_x / 2), $radius_y, $radius_x * 2, $radius_y * 2, 270, 360, $color_border); // top-right - ImageArc($gd_border_canvas, $output_width - $thickness_offset - $radius_x - 1 - ceil($offset_x / 2), $output_height - $radius_y, $radius_x * 2, $radius_y * 2, 0, 90, $color_border); // bottom-right - ImageArc($gd_border_canvas, floor($offset_x / 2) + $thickness_offset + $radius_x, $output_height - $radius_y, $radius_x * 2, $radius_y * 2, 90, 180, $color_border); // bottom-left + imagearc($gd_border_canvas, floor($offset_x / 2) + $thickness_offset + $radius_x, $radius_y, $radius_x * 2, $radius_y * 2, 180, 270, $color_border); // top-left + imagearc($gd_border_canvas, $output_width - $thickness_offset - $radius_x - 1 - ceil($offset_x / 2), $radius_y, $radius_x * 2, $radius_y * 2, 270, 360, $color_border); // top-right + imagearc($gd_border_canvas, $output_width - $thickness_offset - $radius_x - 1 - ceil($offset_x / 2), $output_height - $radius_y, $radius_x * 2, $radius_y * 2, 0, 90, $color_border); // bottom-right + imagearc($gd_border_canvas, floor($offset_x / 2) + $thickness_offset + $radius_x, $output_height - $radius_y, $radius_x * 2, $radius_y * 2, 90, 180, $color_border); // bottom-left } } } $this->phpThumbObject->ImageResizeFunction($gd_border_canvas, $gdimg, floor(($output_width - $new_width) / 2), round(($output_height - $new_height) / 2), 0, 0, $new_width, $new_height, $output_width, $output_height); - ImageDestroy($gdimg); + imagedestroy($gdimg); $gdimg = phpthumb_functions::ImageCreateFunction($output_width, $output_height); - ImageSaveAlpha($gdimg, true); - ImageAlphaBlending($gdimg, false); + imagesavealpha($gdimg, true); + imagealphablending($gdimg, false); $gdimg_color_background = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, 255, 255, 255, 127); - ImageFilledRectangle($gdimg, 0, 0, $output_width, $output_height, $gdimg_color_background); + imagefilledrectangle($gdimg, 0, 0, $output_width, $output_height, $gdimg_color_background); - ImageCopy($gdimg, $gd_border_canvas, 0, 0, 0, 0, $output_width, $output_height); - //$gdimg = $gd_border_canvas; - ImageDestroy($gd_border_canvas); + imagecopy($gdimg, $gd_border_canvas, 0, 0, 0, 0, $output_width, $output_height); + imagedestroy($gd_border_canvas); return true; @@ -753,11 +752,11 @@ public function ImageBorder(&$gdimg, $border_width, $radius_x, $radius_y, $hexco } - public function ImprovedImageRotate(&$gdimg_source, $rotate_angle=0, $config_background_hexcolor='FFFFFF', $bg=null) { + public static function ImprovedImageRotate(&$gdimg_source, $rotate_angle=0, $config_background_hexcolor='FFFFFF', $bg=null, &$phpThumbObject) { while ($rotate_angle < 0) { $rotate_angle += 360; } - $rotate_angle = $rotate_angle % 360; + $rotate_angle %= 360; if ($rotate_angle != 0) { $background_color = phpthumb_functions::ImageHexColorAllocate($gdimg_source, $config_background_hexcolor); @@ -765,31 +764,33 @@ public function ImprovedImageRotate(&$gdimg_source, $rotate_angle=0, $config_bac if ((phpthumb_functions::gd_version() >= 2) && !$bg && ($rotate_angle % 90)) { //$this->DebugMessage('Using alpha rotate', __FILE__, __LINE__); - if ($gdimg_rotate_mask = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg_source), ImageSY($gdimg_source))) { + if ($gdimg_rotate_mask = phpthumb_functions::ImageCreateFunction(imagesx($gdimg_source), imagesy($gdimg_source))) { + $color_mask = array(); for ($i = 0; $i <= 255; $i++) { - $color_mask[$i] = ImageColorAllocate($gdimg_rotate_mask, $i, $i, $i); + $color_mask[$i] = imagecolorallocate($gdimg_rotate_mask, $i, $i, $i); } - ImageFilledRectangle($gdimg_rotate_mask, 0, 0, ImageSX($gdimg_rotate_mask), ImageSY($gdimg_rotate_mask), $color_mask[255]); - $imageX = ImageSX($gdimg_source); - $imageY = ImageSY($gdimg_source); + imagefilledrectangle($gdimg_rotate_mask, 0, 0, imagesx($gdimg_rotate_mask), imagesy($gdimg_rotate_mask), $color_mask[255]); + $imageX = imagesx($gdimg_source); + $imageY = imagesy($gdimg_source); for ($x = 0; $x < $imageX; $x++) { for ($y = 0; $y < $imageY; $y++) { $pixelcolor = phpthumb_functions::GetPixelColor($gdimg_source, $x, $y); - ImageSetPixel($gdimg_rotate_mask, $x, $y, $color_mask[255 - round($pixelcolor['alpha'] * 255 / 127)]); + imagesetpixel($gdimg_rotate_mask, $x, $y, $color_mask[255 - round($pixelcolor['alpha'] * 255 / 127)]); } } - $gdimg_rotate_mask = ImageRotate($gdimg_rotate_mask, $rotate_angle, $color_mask[0]); - $gdimg_source = ImageRotate($gdimg_source, $rotate_angle, $background_color); + $gdimg_rotate_mask = imagerotate($gdimg_rotate_mask, $rotate_angle, $color_mask[0]); + $gdimg_source = imagerotate($gdimg_source, $rotate_angle, $background_color); - ImageAlphaBlending($gdimg_source, false); - ImageSaveAlpha($gdimg_source, true); + imagealphablending($gdimg_source, false); + imagesavealpha($gdimg_source, true); //$this->is_alpha = true; - $phpThumbFilters = new phpthumb_filters(); - $phpThumbFilters->phpThumbObject = $this; + $phpThumbFilters = new self(); + //$phpThumbFilters->phpThumbObject = $this; + $phpThumbFilters->phpThumbObject = $phpThumbObject; $phpThumbFilters->ApplyMask($gdimg_rotate_mask, $gdimg_source); - ImageDestroy($gdimg_rotate_mask); + imagedestroy($gdimg_rotate_mask); } else { //$this->DebugMessage('ImageCreateFunction() failed', __FILE__, __LINE__); @@ -807,40 +808,40 @@ public function ImprovedImageRotate(&$gdimg_source, $rotate_angle=0, $config_bac //$this->DebugMessage('Using non-alpha rotate because $this->thumbnailFormat is "'.$this->thumbnailFormat.'"', __FILE__, __LINE__); } - if (ImageColorTransparent($gdimg_source) >= 0) { - // ImageRotate() forgets all about an image's transparency and sets the transparent color to black + if (imagecolortransparent($gdimg_source) >= 0) { + // imagerotate() forgets all about an image's transparency and sets the transparent color to black // To compensate, flood-fill the transparent color of the source image with the specified background color first // then rotate and the colors should match - if (!function_exists('ImageIsTrueColor') || !ImageIsTrueColor($gdimg_source)) { + if (!function_exists('imageistruecolor') || !imageistruecolor($gdimg_source)) { // convert paletted image to true-color before rotating to prevent nasty aliasing artifacts - //$this->source_width = ImageSX($gdimg_source); - //$this->source_height = ImageSY($gdimg_source); - $gdimg_newsrc = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg_source), ImageSY($gdimg_source)); + //$this->source_width = imagesx($gdimg_source); + //$this->source_height = imagesy($gdimg_source); + $gdimg_newsrc = phpthumb_functions::ImageCreateFunction(imagesx($gdimg_source), imagesy($gdimg_source)); $background_color = phpthumb_functions::ImageHexColorAllocate($gdimg_newsrc, $config_background_hexcolor); - ImageFilledRectangle($gdimg_newsrc, 0, 0, ImageSX($gdimg_source), ImageSY($gdimg_source), phpthumb_functions::ImageHexColorAllocate($gdimg_newsrc, $config_background_hexcolor)); - ImageCopy($gdimg_newsrc, $gdimg_source, 0, 0, 0, 0, ImageSX($gdimg_source), ImageSY($gdimg_source)); - ImageDestroy($gdimg_source); + imagefilledrectangle($gdimg_newsrc, 0, 0, imagesx($gdimg_source), imagesy($gdimg_source), phpthumb_functions::ImageHexColorAllocate($gdimg_newsrc, $config_background_hexcolor)); + imagecopy($gdimg_newsrc, $gdimg_source, 0, 0, 0, 0, imagesx($gdimg_source), imagesy($gdimg_source)); + imagedestroy($gdimg_source); unset($gdimg_source); $gdimg_source = $gdimg_newsrc; unset($gdimg_newsrc); } else { - ImageColorSet( + imagecolorset( $gdimg_source, - ImageColorTransparent($gdimg_source), + imagecolortransparent($gdimg_source), hexdec(substr($config_background_hexcolor, 0, 2)), hexdec(substr($config_background_hexcolor, 2, 2)), hexdec(substr($config_background_hexcolor, 4, 2))); - ImageColorTransparent($gdimg_source, -1); + imagecolortransparent($gdimg_source, -1); } } - $gdimg_source = ImageRotate($gdimg_source, $rotate_angle, $background_color); + $gdimg_source = imagerotate($gdimg_source, $rotate_angle, $background_color); } } @@ -849,11 +850,11 @@ public function ImprovedImageRotate(&$gdimg_source, $rotate_angle=0, $config_bac public function MeanRemoval(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_MEAN_REMOVAL)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_MEAN_REMOVAL)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_MEAN_REMOVAL)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_MEAN_REMOVAL)', __FILE__, __LINE__); // fall through and try it the hard way } // currently not implemented "the hard way" @@ -863,20 +864,20 @@ public function MeanRemoval(&$gdimg) { public function Negative(&$gdimg) { - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_NEGATE)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_NEGATE)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_NEGATE)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_NEGATE)', __FILE__, __LINE__); // fall through and try it the hard way } - $ImageSX = ImageSX($gdimg); - $ImageSY = ImageSY($gdimg); + $ImageSX = imagesx($gdimg); + $ImageSY = imagesy($gdimg); for ($x = 0; $x < $ImageSX; $x++) { for ($y = 0; $y < $ImageSY; $y++) { $currentPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); - $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, (~$currentPixel['red'] & 0xFF), (~$currentPixel['green'] & 0xFF), (~$currentPixel['blue'] & 0xFF), $currentPixel['alpha']); - ImageSetPixel($gdimg, $x, $y, $newColor); + $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, ~$currentPixel[ 'red'] & 0xFF, ~$currentPixel[ 'green'] & 0xFF, ~$currentPixel[ 'blue'] & 0xFF, $currentPixel[ 'alpha']); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; @@ -885,30 +886,30 @@ public function Negative(&$gdimg) { public function RoundedImageCorners(&$gdimg, $radius_x, $radius_y) { // generate mask at twice desired resolution and downsample afterwards for easy antialiasing - // mask is generated as a white double-size elipse on a triple-size black background and copy-paste-resampled + // mask is generated as a white double-size ellipse on a triple-size black background and copy-paste-resampled // onto a correct-size mask image as 4 corners due to errors when the entire mask is resampled at once (gray edges) if ($gdimg_cornermask_triple = phpthumb_functions::ImageCreateFunction($radius_x * 6, $radius_y * 6)) { - if ($gdimg_cornermask = phpthumb_functions::ImageCreateFunction(ImageSX($gdimg), ImageSY($gdimg))) { + if ($gdimg_cornermask = phpthumb_functions::ImageCreateFunction(imagesx($gdimg), imagesy($gdimg))) { - $color_transparent = ImageColorAllocate($gdimg_cornermask_triple, 255, 255, 255); - ImageFilledEllipse($gdimg_cornermask_triple, $radius_x * 3, $radius_y * 3, $radius_x * 4, $radius_y * 4, $color_transparent); + $color_transparent = imagecolorallocate($gdimg_cornermask_triple, 255, 255, 255); + imagefilledellipse($gdimg_cornermask_triple, $radius_x * 3, $radius_y * 3, $radius_x * 4, $radius_y * 4, $color_transparent); - ImageFilledRectangle($gdimg_cornermask, 0, 0, ImageSX($gdimg), ImageSY($gdimg), $color_transparent); + imagefilledrectangle($gdimg_cornermask, 0, 0, imagesx($gdimg), imagesy($gdimg), $color_transparent); - ImageCopyResampled($gdimg_cornermask, $gdimg_cornermask_triple, 0, 0, $radius_x, $radius_y, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); - ImageCopyResampled($gdimg_cornermask, $gdimg_cornermask_triple, 0, ImageSY($gdimg) - $radius_y, $radius_x, $radius_y * 3, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); - ImageCopyResampled($gdimg_cornermask, $gdimg_cornermask_triple, ImageSX($gdimg) - $radius_x, ImageSY($gdimg) - $radius_y, $radius_x * 3, $radius_y * 3, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); - ImageCopyResampled($gdimg_cornermask, $gdimg_cornermask_triple, ImageSX($gdimg) - $radius_x, 0, $radius_x * 3, $radius_y, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); + imagecopyresampled($gdimg_cornermask, $gdimg_cornermask_triple, 0, 0, $radius_x, $radius_y, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); + imagecopyresampled($gdimg_cornermask, $gdimg_cornermask_triple, 0, imagesy($gdimg) - $radius_y, $radius_x, $radius_y * 3, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); + imagecopyresampled($gdimg_cornermask, $gdimg_cornermask_triple, imagesx($gdimg) - $radius_x, imagesy($gdimg) - $radius_y, $radius_x * 3, $radius_y * 3, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); + imagecopyresampled($gdimg_cornermask, $gdimg_cornermask_triple, imagesx($gdimg) - $radius_x, 0, $radius_x * 3, $radius_y, $radius_x, $radius_y, $radius_x * 2, $radius_y * 2); - phpthumb_filters::ApplyMask($gdimg_cornermask, $gdimg); - ImageDestroy($gdimg_cornermask); + $this->ApplyMask($gdimg_cornermask, $gdimg); + imagedestroy($gdimg_cornermask); $this->DebugMessage('RoundedImageCorners('.$radius_x.', '.$radius_y.') succeeded', __FILE__, __LINE__); return true; } else { - $this->DebugMessage('FAILED: $gdimg_cornermask = phpthumb_functions::ImageCreateFunction('.ImageSX($gdimg).', '.ImageSY($gdimg).')', __FILE__, __LINE__); + $this->DebugMessage('FAILED: $gdimg_cornermask = phpthumb_functions::ImageCreateFunction('.imagesx($gdimg).', '.imagesy($gdimg).')', __FILE__, __LINE__); } - ImageDestroy($gdimg_cornermask_triple); + imagedestroy($gdimg_cornermask_triple); } else { $this->DebugMessage('FAILED: $gdimg_cornermask_triple = phpthumb_functions::ImageCreateFunction('.($radius_x * 6).', '.($radius_y * 6).')', __FILE__, __LINE__); @@ -925,7 +926,7 @@ public function Saturation(&$gdimg, $amount, $color='') { } else { $amount = abs($amount); } - return phpthumb_filters::Desaturate($gdimg, $amount, $color); + return $this->Desaturate($gdimg, $amount, $color); } @@ -938,21 +939,21 @@ public function Sepia(&$gdimg, $amount, $targetColor) { return true; } - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_GRAYSCALE)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_GRAYSCALE)) { $r = round($amountPct * hexdec(substr($targetColor, 0, 2))); $g = round($amountPct * hexdec(substr($targetColor, 2, 2))); $b = round($amountPct * hexdec(substr($targetColor, 4, 2))); - if (ImageFilter($gdimg, IMG_FILTER_COLORIZE, $r, $g, $b)) { + if (imagefilter($gdimg, IMG_FILTER_COLORIZE, $r, $g, $b)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_COLORIZE)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_COLORIZE)', __FILE__, __LINE__); // fall through and try it the hard way } else { - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_GRAYSCALE)', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_GRAYSCALE)', __FILE__, __LINE__); // fall through and try it the hard way } @@ -962,8 +963,8 @@ public function Sepia(&$gdimg, $amount, $targetColor) { $TargetPixel['green'] = hexdec(substr($targetColor, 2, 2)); $TargetPixel['blue'] = hexdec(substr($targetColor, 4, 2)); - $ImageSX = ImageSX($gdimg); - $ImageSY = ImageSY($gdimg); + $ImageSX = imagesx($gdimg); + $ImageSY = imagesy($gdimg); for ($x = 0; $x < $ImageSX; $x++) { for ($y = 0; $y < $ImageSY; $y++) { $OriginalPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); @@ -974,11 +975,12 @@ public function Sepia(&$gdimg, $amount, $targetColor) { // the mid-tones: the lighter and darker areas appear to be closer to B&W." $SepiaAmount = ((128 - abs($GrayPixel['red'] - 128)) / 128) * $amountPct; + $NewPixel = array(); foreach ($TargetPixel as $key => $value) { $NewPixel[$key] = round(max(0, min(255, $GrayPixel[$key] * (1 - $SepiaAmount) + ($TargetPixel[$key] * $SepiaAmount)))); } $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, $NewPixel['red'], $NewPixel['green'], $NewPixel['blue'], $OriginalPixel['alpha']); - ImageSetPixel($gdimg, $x, $y, $newColor); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; @@ -990,11 +992,11 @@ public function Smooth(&$gdimg, $amount=6) { if ($amount == 0) { return true; } - if (phpthumb_functions::version_compare_replacement(phpversion(), '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { - if (ImageFilter($gdimg, IMG_FILTER_SMOOTH, $amount)) { + if (phpthumb_functions::version_compare_replacement(PHP_VERSION, '5.0.0', '>=') && phpthumb_functions::gd_is_bundled()) { + if (imagefilter($gdimg, IMG_FILTER_SMOOTH, $amount)) { return true; } - $this->DebugMessage('FAILED: ImageFilter($gdimg, IMG_FILTER_SMOOTH, '.$amount.')', __FILE__, __LINE__); + $this->DebugMessage('FAILED: imagefilter($gdimg, IMG_FILTER_SMOOTH, '.$amount.')', __FILE__, __LINE__); // fall through and try it the hard way } // currently not implemented "the hard way" @@ -1004,9 +1006,9 @@ public function Smooth(&$gdimg, $amount=6) { public function SourceTransparentColorMask(&$gdimg, $hexcolor, $min_limit=5, $max_limit=10) { - $width = ImageSX($gdimg); - $height = ImageSY($gdimg); - if ($gdimg_mask = ImageCreateTrueColor($width, $height)) { + $width = imagesx($gdimg); + $height = imagesy($gdimg); + if ($gdimg_mask = imagecreatetruecolor($width, $height)) { $R = hexdec(substr($hexcolor, 0, 2)); $G = hexdec(substr($hexcolor, 2, 2)); $B = hexdec(substr($hexcolor, 4, 2)); @@ -1016,9 +1018,9 @@ public function SourceTransparentColorMask(&$gdimg, $hexcolor, $min_limit=5, $ma for ($y = 0; $y < $height; $y++) { $currentPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); $colorDiff = phpthumb_functions::PixelColorDifferencePercent($currentPixel, $targetPixel); - $grayLevel = min($cutoffRange, MAX(0, -$min_limit + $colorDiff)) * (255 / MAX(1, $cutoffRange)); - $newColor = ImageColorAllocate($gdimg_mask, $grayLevel, $grayLevel, $grayLevel); - ImageSetPixel($gdimg_mask, $x, $y, $newColor); + $grayLevel = min($cutoffRange, max(0, -$min_limit + $colorDiff)) * (255 / max(1, $cutoffRange)); + $newColor = imagecolorallocate($gdimg_mask, $grayLevel, $grayLevel, $grayLevel); + imagesetpixel($gdimg_mask, $x, $y, $newColor); } } return $gdimg_mask; @@ -1028,8 +1030,8 @@ public function SourceTransparentColorMask(&$gdimg, $hexcolor, $min_limit=5, $ma public function Threshold(&$gdimg, $cutoff) { - $width = ImageSX($gdimg); - $height = ImageSY($gdimg); + $width = imagesx($gdimg); + $height = imagesy($gdimg); $cutoff = min(255, max(0, ($cutoff ? $cutoff : 128))); for ($x = 0; $x < $width; $x++) { for ($y = 0; $y < $height; $y++) { @@ -1040,7 +1042,7 @@ public function Threshold(&$gdimg, $cutoff) { } else { $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg, 0xFF, 0xFF, 0xFF, $currentPixel['alpha']); } - ImageSetPixel($gdimg, $x, $y, $newColor); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; @@ -1050,22 +1052,22 @@ public function Threshold(&$gdimg, $cutoff) { public function ImageTrueColorToPalette2(&$image, $dither, $ncolors) { // http://www.php.net/manual/en/function.imagetruecolortopalette.php // zmorris at zsculpt dot com (17-Aug-2004 06:58) - $width = ImageSX($image); - $height = ImageSY($image); - $image_copy = ImageCreateTrueColor($width, $height); - //ImageCopyMerge($image_copy, $image, 0, 0, 0, 0, $width, $height, 100); - ImageCopy($image_copy, $image, 0, 0, 0, 0, $width, $height); - ImageTrueColorToPalette($image, $dither, $ncolors); - ImageColorMatch($image_copy, $image); - ImageDestroy($image_copy); + $width = imagesx($image); + $height = imagesy($image); + $image_copy = imagecreatetruecolor($width, $height); + //imagecopymerge($image_copy, $image, 0, 0, 0, 0, $width, $height, 100); + imagecopy($image_copy, $image, 0, 0, 0, 0, $width, $height); + imagetruecolortopalette($image, $dither, $ncolors); + imagecolormatch($image_copy, $image); + imagedestroy($image_copy); return true; } public function ReduceColorDepth(&$gdimg, $colors=256, $dither=true) { $colors = max(min($colors, 256), 2); - // ImageTrueColorToPalette usually makes ugly colors, the replacement is a bit better - //ImageTrueColorToPalette($gdimg, $dither, $colors); - phpthumb_filters::ImageTrueColorToPalette2($gdimg, $dither, $colors); + // imagetruecolortopalette usually makes ugly colors, the replacement is a bit better + //imagetruecolortopalette($gdimg, $dither, $colors); + $this->ImageTrueColorToPalette2($gdimg, $dither, $colors); return true; } @@ -1078,7 +1080,7 @@ public function WhiteBalance(&$gdimg, $targetColor='') { 'blue' => hexdec(substr($targetColor, 4, 2)) ); } else { - $Analysis = phpthumb_filters::HistogramAnalysis($gdimg, false); + $Analysis = $this->HistogramAnalysis($gdimg, false); $targetPixel = array( 'red' => max(array_keys($Analysis['red'])), 'green' => max(array_keys($Analysis['green'])), @@ -1090,8 +1092,8 @@ public function WhiteBalance(&$gdimg, $targetColor='') { $scaleG = $grayValue / $targetPixel['green']; $scaleB = $grayValue / $targetPixel['blue']; - for ($x = 0; $x < ImageSX($gdimg); $x++) { - for ($y = 0; $y < ImageSY($gdimg); $y++) { + for ($x = 0, $xMax = imagesx($gdimg); $x < $xMax; $x++) { + for ($y = 0, $yMax = imagesy($gdimg); $y < $yMax; $y++) { $currentPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); $newColor = phpthumb_functions::ImageColorAllocateAlphaSafe( $gdimg, @@ -1100,29 +1102,30 @@ public function WhiteBalance(&$gdimg, $targetColor='') { max(0, min(255, round($currentPixel['blue'] * $scaleB))), $currentPixel['alpha'] ); - ImageSetPixel($gdimg, $x, $y, $newColor); + imagesetpixel($gdimg, $x, $y, $newColor); } } return true; } - public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000000', $ttffont='', $opacity=100, $margin=5, $angle=0, $bg_color=false, $bg_opacity=0, $fillextend='') { + public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000000', $ttffont='', $opacity=100, $margin=5, $angle=0, $bg_color=false, $bg_opacity=0, $fillextend='', $lineheight=1.0) { // text watermark requested if (!$text) { return false; } - ImageAlphaBlending($gdimg, true); + imagealphablending($gdimg, true); if (preg_match('#^([0-9\\.\\-]*)x([0-9\\.\\-]*)(@[LCR])?$#i', $alignment, $matches)) { - $originOffsetX = intval($matches[1]); - $originOffsetY = intval($matches[2]); + $originOffsetX = (int) $matches[ 1]; + $originOffsetY = (int) $matches[ 2]; $alignment = (@$matches[4] ? $matches[4] : 'L'); $margin = 0; } else { $originOffsetX = 0; $originOffsetY = 0; } + $lineheight = min(100.0, max(0.01, (float) $lineheight)); $metaTextArray = array( '^Fb' => $this->phpThumbObject->getimagesizeinfo['filesize'], @@ -1130,25 +1133,27 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 '^Fm' => round($this->phpThumbObject->getimagesizeinfo['filesize'] / 1048576), '^X' => $this->phpThumbObject->getimagesizeinfo[0], '^Y' => $this->phpThumbObject->getimagesizeinfo[1], - '^x' => ImageSX($gdimg), - '^y' => ImageSY($gdimg), + '^x' => imagesx($gdimg), + '^y' => imagesy($gdimg), '^^' => '^', ); $text = strtr($text, $metaTextArray); - $text = str_replace("\r\n", "\n", $text); - $text = str_replace("\r", "\n", $text); + $text = str_replace(array( + "\r\n", + "\r" + ), "\n", $text); $textlines = explode("\n", $text); $this->DebugMessage('Processing '.count($textlines).' lines of text', __FILE__, __LINE__); if (@is_readable($ttffont) && is_file($ttffont)) { - $opacity = 100 - intval(max(min($opacity, 100), 0)); + $opacity = 100 - (int) max(min($opacity, 100), 0); $letter_color_text = phpthumb_functions::ImageHexColorAllocate($gdimg, $hex_color, false, $opacity * 1.27); $this->DebugMessage('Using TTF font "'.$ttffont.'"', __FILE__, __LINE__); - $TTFbox = ImageTTFbBox($size, $angle, $ttffont, $text); + $TTFbox = imagettfbbox($size, $angle, $ttffont, $text); $min_x = min($TTFbox[0], $TTFbox[2], $TTFbox[4], $TTFbox[6]); $max_x = max($TTFbox[0], $TTFbox[2], $TTFbox[4], $TTFbox[6]); @@ -1160,7 +1165,7 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 //$text_height = round($max_y - $min_y + ($size * 0.5)); $text_height = round($max_y - $min_y); - $TTFboxChar = ImageTTFbBox($size, $angle, $ttffont, 'jH'); + $TTFboxChar = imagettfbbox($size, $angle, $ttffont, 'jH'); $char_min_y = min($TTFboxChar[1], $TTFboxChar[3], $TTFboxChar[5], $TTFboxChar[7]); $char_max_y = max($TTFboxChar[1], $TTFboxChar[3], $TTFboxChar[5], $TTFboxChar[7]); $char_height = round($char_max_y - $char_min_y); @@ -1168,47 +1173,49 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 if ($alignment == '*') { $text_origin_y = $char_height + $margin; - while (($text_origin_y - $text_height) < ImageSY($gdimg)) { + while (($text_origin_y - $text_height) < imagesy($gdimg)) { $text_origin_x = $margin; - while ($text_origin_x < ImageSX($gdimg)) { - ImageTTFtext($gdimg, $size, $angle, $text_origin_x, $text_origin_y, $letter_color_text, $ttffont, $text); + while ($text_origin_x < imagesx($gdimg)) { + imagettftext($gdimg, $size, $angle, $text_origin_x, $text_origin_y, $letter_color_text, $ttffont, $text); $text_origin_x += ($text_width + $margin); } - $text_origin_y += ($text_height + $margin); + $text_origin_y += ($text_height + $margin) * $lineheight; } } else { // this block for background color only + $text_origin_x = 0; + $text_origin_y = 0; switch ($alignment) { case '*': // handled separately break; case 'T': - $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((ImageSX($gdimg) - $text_width) / 2)); + $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((imagesx($gdimg) - $text_width) / 2)); $text_origin_y = $char_height + $margin + $originOffsetY; break; case 'B': - $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((ImageSX($gdimg) - $text_width) / 2)); - $text_origin_y = ImageSY($gdimg) + $TTFbox[1] - $margin + $originOffsetY; + $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((imagesx($gdimg) - $text_width) / 2)); + $text_origin_y = imagesy($gdimg) + $TTFbox[1] - $margin + $originOffsetY; break; case 'L': $text_origin_x = $margin + $originOffsetX; - $text_origin_y = ($originOffsetY ? $originOffsetY : round((ImageSY($gdimg) - $text_height) / 2) + $char_height); + $text_origin_y = ($originOffsetY ? $originOffsetY : round((imagesy($gdimg) - $text_height) / 2) + $char_height); break; case 'R': - $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : ImageSX($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); - $text_origin_y = ($originOffsetY ? $originOffsetY : round((ImageSY($gdimg) - $text_height) / 2) + $char_height); + $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : imagesx($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); + $text_origin_y = ($originOffsetY ? $originOffsetY : round((imagesy($gdimg) - $text_height) / 2) + $char_height); break; case 'C': - $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((ImageSX($gdimg) - $text_width) / 2)); - $text_origin_y = ($originOffsetY ? $originOffsetY : round((ImageSY($gdimg) - $text_height) / 2) + $char_height); + $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width / 2) : round((imagesx($gdimg) - $text_width) / 2)); + $text_origin_y = ($originOffsetY ? $originOffsetY : round((imagesy($gdimg) - $text_height) / 2) + $char_height); break; case 'TL': @@ -1217,23 +1224,22 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 break; case 'TR': - $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : ImageSX($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); + $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : imagesx($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); $text_origin_y = $char_height + $margin + $originOffsetY; break; case 'BL': $text_origin_x = $margin + $originOffsetX; - $text_origin_y = ImageSY($gdimg) + $TTFbox[1] - $margin + $originOffsetY; + $text_origin_y = imagesy($gdimg) + $TTFbox[1] - $margin + $originOffsetY; break; case 'BR': default: - $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : ImageSX($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); - $text_origin_y = ImageSY($gdimg) + $TTFbox[1] - $margin + $originOffsetY; + $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width : imagesx($gdimg) - $text_width + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); + $text_origin_y = imagesy($gdimg) + $TTFbox[1] - $margin + $originOffsetY; break; } - //ImageRectangle($gdimg, $text_origin_x + $min_x, $text_origin_y + $TTFbox[1], $text_origin_x + $min_x + $text_width, $text_origin_y + $TTFbox[1] - $text_height, $letter_color_text); if (phpthumb_functions::IsHexColor($bg_color)) { $text_background_alpha = round(127 * ((100 - min(max(0, $bg_opacity), 100)) / 100)); $text_color_background = phpthumb_functions::ImageHexColorAllocate($gdimg, $bg_color, false, $text_background_alpha); @@ -1244,17 +1250,12 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 $y1 = $text_origin_y + $TTFbox[1]; $x2 = $text_origin_x + $min_x + $text_width; $y2 = $text_origin_y + $TTFbox[1] - $text_height; - $x_TL = preg_match('#x#i', $fillextend) ? 0 : min($x1, $x2); - $y_TL = preg_match('#y#i', $fillextend) ? 0 : min($y1, $y2); - $x_BR = preg_match('#x#i', $fillextend) ? ImageSX($gdimg) : max($x1, $x2); - $y_BR = preg_match('#y#i', $fillextend) ? ImageSY($gdimg) : max($y1, $y2); - //while ($y_BR > ImageSY($gdimg)) { - // $y_TL--; - // $y_BR--; - // $text_origin_y--; - //} - $this->DebugMessage('WatermarkText() calling ImageFilledRectangle($gdimg, '.$x_TL.', '.$y_TL.', '.$x_BR.', '.$y_BR.', $text_color_background)', __FILE__, __LINE__); - ImageFilledRectangle($gdimg, $x_TL, $y_TL, $x_BR, $y_BR, $text_color_background); + $x_TL = false !== stripos($fillextend, 'x') ? 0 : min($x1, $x2); + $y_TL = false !== stripos($fillextend, 'y') ? 0 : min($y1, $y2); + $x_BR = false !== stripos($fillextend, 'x') ? imagesx($gdimg) : max($x1, $x2); + $y_BR = false !== stripos($fillextend, 'y') ? imagesy($gdimg) : max($y1, $y2); + $this->DebugMessage('WatermarkText() calling imagefilledrectangle($gdimg, '.$x_TL.', '.$y_TL.', '.$x_BR.', '.$y_BR.', $text_color_background)', __FILE__, __LINE__); + imagefilledrectangle($gdimg, $x_TL, $y_TL, $x_BR, $y_BR, $text_color_background); // end block for background color only @@ -1262,44 +1263,38 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 $y_offset = 0; foreach ($textlines as $dummy => $line) { - $TTFboxLine = ImageTTFbBox($size, $angle, $ttffont, $line); + $TTFboxLine = imagettfbbox($size, $angle, $ttffont, $line); $min_x_line = min($TTFboxLine[0], $TTFboxLine[2], $TTFboxLine[4], $TTFboxLine[6]); $max_x_line = max($TTFboxLine[0], $TTFboxLine[2], $TTFboxLine[4], $TTFboxLine[6]); - //$text_width = round($max_x - $min_x + ($size * 0.5)); $text_width_line = round($max_x_line - $min_x_line); - $min_y_line = min($TTFboxLine[1], $TTFboxLine[3], $TTFboxLine[5], $TTFboxLine[7]); - $max_y_line = max($TTFboxLine[1], $TTFboxLine[3], $TTFboxLine[5], $TTFboxLine[7]); - //$text_height = round($max_y - $min_y + ($size * 0.5)); - $text_height_line = round($max_y_line - $min_y_line); - switch ($alignment) { // $text_origin_y set above, just re-set $text_origin_x here as needed case 'L': case 'TL': case 'BL': - // no change neccesary + // no change necessary break; case 'C': case 'T': case 'B': - $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width_line / 2) : round((ImageSX($gdimg) - $text_width_line) / 2)); + $text_origin_x = ($originOffsetX ? $originOffsetX - round($text_width_line / 2) : round((imagesx($gdimg) - $text_width_line) / 2)); break; case 'R': case 'TR': case 'BR': - $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width_line : ImageSX($gdimg) - $text_width_line + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); + $text_origin_x = ($originOffsetX ? $originOffsetX - $text_width_line : imagesx($gdimg) - $text_width_line + $TTFbox[0] - $min_x + round($size * 0.25) - $margin); break; } - //ImageTTFtext($gdimg, $size, $angle, $text_origin_x, $text_origin_y, $letter_color_text, $ttffont, $text); - $this->DebugMessage('WatermarkText() calling ImageTTFtext($gdimg, '.$size.', '.$angle.', '.$text_origin_x.', '.($text_origin_y + $y_offset).', $letter_color_text, '.$ttffont.', '.$line.')', __FILE__, __LINE__); - ImageTTFtext($gdimg, $size, $angle, $text_origin_x, $text_origin_y + $y_offset, $letter_color_text, $ttffont, $line); + //imagettftext($gdimg, $size, $angle, $text_origin_x, $text_origin_y, $letter_color_text, $ttffont, $text); + $this->DebugMessage('WatermarkText() calling imagettftext($gdimg, '.$size.', '.$angle.', '.$text_origin_x.', '.($text_origin_y + $y_offset).', $letter_color_text, '.$ttffont.', '.$line.')', __FILE__, __LINE__); + imagettftext($gdimg, $size, $angle, $text_origin_x, $text_origin_y + $y_offset, $letter_color_text, $ttffont, $line); - $y_offset += $char_height; + $y_offset += $char_height * $lineheight; } } @@ -1313,55 +1308,59 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 $text_width = 0; $text_height = 0; foreach ($textlines as $dummy => $line) { - $text_width = max($text_width, ImageFontWidth($size) * strlen($line)); - $text_height += ImageFontHeight($size); + $text_width = max($text_width, imagefontwidth($size) * strlen($line)); + $text_height += imagefontheight($size); } if ($img_watermark = phpthumb_functions::ImageCreateFunction($text_width, $text_height)) { - ImageAlphaBlending($img_watermark, false); + imagealphablending($img_watermark, false); if (phpthumb_functions::IsHexColor($bg_color)) { $text_background_alpha = round(127 * ((100 - min(max(0, $bg_opacity), 100)) / 100)); $text_color_background = phpthumb_functions::ImageHexColorAllocate($img_watermark, $bg_color, false, $text_background_alpha); } else { $text_color_background = phpthumb_functions::ImageHexColorAllocate($img_watermark, 'FFFFFF', false, 127); } - $this->DebugMessage('WatermarkText() calling ImageFilledRectangle($img_watermark, 0, 0, '.ImageSX($img_watermark).', '.ImageSY($img_watermark).', $text_color_background)', __FILE__, __LINE__); - ImageFilledRectangle($img_watermark, 0, 0, ImageSX($img_watermark), ImageSY($img_watermark), $text_color_background); - - if ($angle && function_exists('ImageRotate')) { - // using $img_watermark_mask is pointless if ImageRotate function isn't available + $this->DebugMessage('WatermarkText() calling imagefilledrectangle($img_watermark, 0, 0, '.imagesx($img_watermark).', '.imagesy($img_watermark).', $text_color_background)', __FILE__, __LINE__); + imagefilledrectangle($img_watermark, 0, 0, imagesx($img_watermark), imagesy($img_watermark), $text_color_background); + + $img_watermark_mask = false; + $mask_color_background = false; + $mask_color_watermark = false; + if ($angle && function_exists('imagerotate')) { + // using $img_watermark_mask is pointless if imagerotate function isn't available if ($img_watermark_mask = phpthumb_functions::ImageCreateFunction($text_width, $text_height)) { - $mask_color_background = ImageColorAllocate($img_watermark_mask, 0, 0, 0); - ImageAlphaBlending($img_watermark_mask, false); - ImageFilledRectangle($img_watermark_mask, 0, 0, ImageSX($img_watermark_mask), ImageSY($img_watermark_mask), $mask_color_background); - $mask_color_watermark = ImageColorAllocate($img_watermark_mask, 255, 255, 255); + $mask_color_background = imagecolorallocate($img_watermark_mask, 0, 0, 0); + imagealphablending($img_watermark_mask, false); + imagefilledrectangle($img_watermark_mask, 0, 0, imagesx($img_watermark_mask), imagesy($img_watermark_mask), $mask_color_background); + $mask_color_watermark = imagecolorallocate($img_watermark_mask, 255, 255, 255); } } $text_color_watermark = phpthumb_functions::ImageHexColorAllocate($img_watermark, $hex_color); + $x_offset = 0; foreach ($textlines as $key => $line) { switch ($alignment) { case 'C': - $x_offset = round(($text_width - (ImageFontWidth($size) * strlen($line))) / 2); - $originOffsetX = (ImageSX($gdimg) - ImageSX($img_watermark)) / 2; - $originOffsetY = (ImageSY($gdimg) - ImageSY($img_watermark)) / 2; + $x_offset = round(($text_width - (imagefontwidth($size) * strlen($line))) / 2); + $originOffsetX = (imagesx($gdimg) - imagesx($img_watermark)) / 2; + $originOffsetY = (imagesy($gdimg) - imagesy($img_watermark)) / 2; break; case 'T': - $x_offset = round(($text_width - (ImageFontWidth($size) * strlen($line))) / 2); - $originOffsetX = (ImageSX($gdimg) - ImageSX($img_watermark)) / 2; + $x_offset = round(($text_width - (imagefontwidth($size) * strlen($line))) / 2); + $originOffsetX = (imagesx($gdimg) - imagesx($img_watermark)) / 2; $originOffsetY = $margin; break; case 'B': - $x_offset = round(($text_width - (ImageFontWidth($size) * strlen($line))) / 2); - $originOffsetX = (ImageSX($gdimg) - ImageSX($img_watermark)) / 2; - $originOffsetY = ImageSY($gdimg) - ImageSY($img_watermark) - $margin; + $x_offset = round(($text_width - (imagefontwidth($size) * strlen($line))) / 2); + $originOffsetX = (imagesx($gdimg) - imagesx($img_watermark)) / 2; + $originOffsetY = imagesy($gdimg) - imagesy($img_watermark) - $margin; break; case 'L': $x_offset = 0; $originOffsetX = $margin; - $originOffsetY = (ImageSY($gdimg) - ImageSY($img_watermark)) / 2; + $originOffsetY = (imagesy($gdimg) - imagesy($img_watermark)) / 2; break; case 'TL': @@ -1373,18 +1372,18 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 case 'BL': $x_offset = 0; $originOffsetX = $margin; - $originOffsetY = ImageSY($gdimg) - ImageSY($img_watermark) - $margin; + $originOffsetY = imagesy($gdimg) - imagesy($img_watermark) - $margin; break; case 'R': - $x_offset = $text_width - (ImageFontWidth($size) * strlen($line)); - $originOffsetX = ImageSX($gdimg) - ImageSX($img_watermark) - $margin; - $originOffsetY = (ImageSY($gdimg) - ImageSY($img_watermark)) / 2; + $x_offset = $text_width - (imagefontwidth($size) * strlen($line)); + $originOffsetX = imagesx($gdimg) - imagesx($img_watermark) - $margin; + $originOffsetY = (imagesy($gdimg) - imagesy($img_watermark)) / 2; break; case 'TR': - $x_offset = $text_width - (ImageFontWidth($size) * strlen($line)); - $originOffsetX = ImageSX($gdimg) - ImageSX($img_watermark) - $margin; + $x_offset = $text_width - (imagefontwidth($size) * strlen($line)); + $originOffsetX = imagesx($gdimg) - imagesx($img_watermark) - $margin; $originOffsetY = $margin; break; @@ -1393,28 +1392,28 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 if (!empty($originOffsetX) || !empty($originOffsetY)) { // absolute pixel positioning } else { - $x_offset = $text_width - (ImageFontWidth($size) * strlen($line)); - $originOffsetX = ImageSX($gdimg) - ImageSX($img_watermark) - $margin; - $originOffsetY = ImageSY($gdimg) - ImageSY($img_watermark) - $margin; + $x_offset = $text_width - (imagefontwidth($size) * strlen($line)); + $originOffsetX = imagesx($gdimg) - imagesx($img_watermark) - $margin; + $originOffsetY = imagesy($gdimg) - imagesy($img_watermark) - $margin; } break; } - $this->DebugMessage('WatermarkText() calling ImageString($img_watermark, '.$size.', '.$x_offset.', '.($key * ImageFontHeight($size)).', '.$line.', $text_color_watermark)', __FILE__, __LINE__); - ImageString($img_watermark, $size, $x_offset, $key * ImageFontHeight($size), $line, $text_color_watermark); + $this->DebugMessage('WatermarkText() calling imagestring($img_watermark, '.$size.', '.$x_offset.', '.($key * imagefontheight($size)).', '.$line.', $text_color_watermark)', __FILE__, __LINE__); + imagestring($img_watermark, $size, $x_offset, $key * imagefontheight($size), $line, $text_color_watermark); if ($angle && $img_watermark_mask) { - $this->DebugMessage('WatermarkText() calling ImageString($img_watermark_mask, '.$size.', '.$x_offset.', '.($key * ImageFontHeight($size)).', '.$text.', $mask_color_watermark)', __FILE__, __LINE__); - ImageString($img_watermark_mask, $size, $x_offset, $key * ImageFontHeight($size), $text, $mask_color_watermark); + $this->DebugMessage('WatermarkText() calling imagestring($img_watermark_mask, '.$size.', '.$x_offset.', '.($key * imagefontheight($size) * $lineheight).', '.$text.', $mask_color_watermark)', __FILE__, __LINE__); + imagestring($img_watermark_mask, $size, $x_offset, $key * imagefontheight($size) * $lineheight, $text, $mask_color_watermark); } } if ($angle && $img_watermark_mask) { - $img_watermark = ImageRotate($img_watermark, $angle, $text_color_background); - $img_watermark_mask = ImageRotate($img_watermark_mask, $angle, $mask_color_background); - phpthumb_filters::ApplyMask($img_watermark_mask, $img_watermark); + $img_watermark = imagerotate($img_watermark, $angle, $text_color_background); + $img_watermark_mask = imagerotate($img_watermark_mask, $angle, $mask_color_background); + $this->ApplyMask($img_watermark_mask, $img_watermark); } //phpthumb_filters::WatermarkOverlay($gdimg, $img_watermark, $alignment, $opacity, $margin); $this->DebugMessage('WatermarkText() calling phpthumb_filters::WatermarkOverlay($gdimg, $img_watermark, '.($originOffsetX.'x'.$originOffsetY).', '.$opacity.', 0)', __FILE__, __LINE__); - phpthumb_filters::WatermarkOverlay($gdimg, $img_watermark, $originOffsetX.'x'.$originOffsetY, $opacity, 0); - ImageDestroy($img_watermark); + $this->WatermarkOverlay($gdimg, $img_watermark, $originOffsetX.'x'.$originOffsetY, $opacity, 0); + imagedestroy($img_watermark); return true; } @@ -1426,42 +1425,42 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 public function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment='*', $opacity=50, $margin_x=5, $margin_y=null) { if (is_resource($gdimg_dest) && is_resource($img_watermark)) { - $watermark_source_x = 0; - $watermark_source_y = 0; - $img_source_width = ImageSX($gdimg_dest); - $img_source_height = ImageSY($gdimg_dest); - $watermark_source_width = ImageSX($img_watermark); - $watermark_source_height = ImageSY($img_watermark); + $img_source_width = imagesx($gdimg_dest); + $img_source_height = imagesy($gdimg_dest); + $watermark_source_width = imagesx($img_watermark); + $watermark_source_height = imagesy($img_watermark); $watermark_opacity_percent = max(0, min(100, $opacity)); - $margin_y = (is_null($margin_y) ? $margin_x : $margin_y); + $margin_y = (null === $margin_y ? $margin_x : $margin_y); $watermark_margin_x = ((($margin_x > 0) && ($margin_x < 1)) ? round((1 - $margin_x) * $img_source_width) : $margin_x); $watermark_margin_y = ((($margin_y > 0) && ($margin_y < 1)) ? round((1 - $margin_y) * $img_source_height) : $margin_y); + $watermark_destination_x = 0; + $watermark_destination_y = 0; if (preg_match('#^([0-9\\.\\-]*)x([0-9\\.\\-]*)$#i', $alignment, $matches)) { - $watermark_destination_x = intval($matches[1]); - $watermark_destination_y = intval($matches[2]); + $watermark_destination_x = (int) $matches[ 1]; + $watermark_destination_y = (int) $matches[ 2]; } else { switch ($alignment) { case '*': if ($gdimg_tiledwatermark = phpthumb_functions::ImageCreateFunction($img_source_width, $img_source_height)) { - ImageAlphaBlending($gdimg_tiledwatermark, false); - ImageSaveAlpha($gdimg_tiledwatermark, true); + imagealphablending($gdimg_tiledwatermark, false); + imagesavealpha($gdimg_tiledwatermark, true); $text_color_transparent = phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg_tiledwatermark, 255, 0, 255, 127); - ImageFill($gdimg_tiledwatermark, 0, 0, $text_color_transparent); + imagefill($gdimg_tiledwatermark, 0, 0, $text_color_transparent); // set the tiled image transparent color to whatever the untiled image transparency index is - // ImageColorTransparent($gdimg_tiledwatermark, ImageColorTransparent($img_watermark)); + // imagecolortransparent($gdimg_tiledwatermark, imagecolortransparent($img_watermark)); // a "cleaner" way of doing it, but can't handle the margin feature :( - // ImageSetTile($gdimg_tiledwatermark, $img_watermark); - // ImageFill($gdimg_tiledwatermark, 0, 0, IMG_COLOR_TILED); + // imagesettile($gdimg_tiledwatermark, $img_watermark); + // imagefill($gdimg_tiledwatermark, 0, 0, IMG_COLOR_TILED); // break; - // ImageFill($gdimg_tiledwatermark, 0, 0, ImageColorTransparent($gdimg_tiledwatermark)); + // imagefill($gdimg_tiledwatermark, 0, 0, imagecolortransparent($gdimg_tiledwatermark)); // tile the image as many times as can fit for ($x = $watermark_margin_x; $x < ($img_source_width + $watermark_source_width); $x += ($watermark_source_width + $watermark_margin_x)) { for ($y = $watermark_margin_y; $y < ($img_source_height + $watermark_source_height); $y += ($watermark_source_height + $watermark_margin_y)) { - ImageCopy( + imagecopy( $gdimg_tiledwatermark, $img_watermark, $x, @@ -1474,12 +1473,12 @@ public function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment='*', } } - $watermark_source_width = ImageSX($gdimg_tiledwatermark); - $watermark_source_height = ImageSY($gdimg_tiledwatermark); + $watermark_source_width = imagesx($gdimg_tiledwatermark); + $watermark_source_height = imagesy($gdimg_tiledwatermark); $watermark_destination_x = 0; $watermark_destination_y = 0; - ImageDestroy($img_watermark); + imagedestroy($img_watermark); $img_watermark = $gdimg_tiledwatermark; } break; @@ -1520,13 +1519,6 @@ public function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment='*', break; case 'BL': - //echo '
          ';
          -	////var_dump($watermark_destination_x);
          -	////var_dump($watermark_destination_y);
          -	//var_dump($watermark_margin_x);
          -	//var_dump($img_source_height);
          -	//var_dump($watermark_source_height);
          -	//var_dump($watermark_margin_y);
           						$watermark_destination_x = $watermark_margin_x;
           						$watermark_destination_y = $img_source_height - $watermark_source_height - $watermark_margin_y;
           						break;
          @@ -1538,9 +1530,9 @@ public function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment='*',
           						break;
           				}
           			}
          -			ImageAlphaBlending($gdimg_dest, false);
          -			ImageSaveAlpha($gdimg_dest, true);
          -			ImageSaveAlpha($img_watermark, true);
          +			imagealphablending($gdimg_dest, false);
          +			imagesavealpha($gdimg_dest, true);
          +			imagesavealpha($img_watermark, true);
           			phpthumb_functions::ImageCopyRespectAlpha($gdimg_dest, $img_watermark, $watermark_destination_x, $watermark_destination_y, 0, 0, $watermark_source_width, $watermark_source_height, $watermark_opacity_percent);
           
           			return true;
          diff --git a/assets/snippets/phpthumb/phpthumb.functions.php b/assets/snippets/phpthumb/phpthumb.functions.php
          index 0a7bc4b6..550a148b 100755
          --- a/assets/snippets/phpthumb/phpthumb.functions.php
          +++ b/assets/snippets/phpthumb/phpthumb.functions.php
          @@ -11,7 +11,7 @@
           
           class phpthumb_functions {
           
          -	static function user_function_exists($functionname) {
          +	public static function user_function_exists($functionname) {
           		if (function_exists('get_defined_functions')) {
           			static $get_defined_functions = array();
           			if (empty($get_defined_functions)) {
          @@ -23,7 +23,7 @@ static function user_function_exists($functionname) {
           	}
           
           
          -	static function builtin_function_exists($functionname) {
          +	public static function builtin_function_exists($functionname) {
           		if (function_exists('get_defined_functions')) {
           			static $get_defined_functions = array();
           			if (empty($get_defined_functions)) {
          @@ -35,7 +35,7 @@ static function builtin_function_exists($functionname) {
           	}
           
           
          -	static function version_compare_replacement_sub($version1, $version2, $operator='') {
          +	public static function version_compare_replacement_sub($version1, $version2, $operator='') {
           		// If you specify the third optional operator argument, you can test for a particular relationship.
           		// The possible operators are: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectively.
           		// Using this argument, the function will return 1 if the relationship is the one specified by the operator, 0 otherwise.
          @@ -61,29 +61,29 @@ static function version_compare_replacement_sub($version1, $version2, $operator=
           		switch ($operator) {
           			case '<':
           			case 'lt':
          -				return intval($version1 < $version2);
          +				return (int) ($version1 < $version2);
           				break;
           			case '<=':
           			case 'le':
          -				return intval($version1 <= $version2);
          +				return (int) ($version1 <= $version2);
           				break;
           			case '>':
           			case 'gt':
          -				return intval($version1 > $version2);
          +				return (int) ($version1 > $version2);
           				break;
           			case '>=':
           			case 'ge':
          -				return intval($version1 >= $version2);
          +				return (int) ($version1 >= $version2);
           				break;
           			case '==':
           			case '=':
           			case 'eq':
          -				return intval($version1 == $version2);
          +				return (int) ($version1 == $version2);
           				break;
           			case '!=':
           			case '<>':
           			case 'ne':
          -				return intval($version1 != $version2);
          +				return (int) ($version1 != $version2);
           				break;
           		}
           		if ($version1 == $version2) {
          @@ -95,7 +95,7 @@ static function version_compare_replacement_sub($version1, $version2, $operator=
           	}
           
           
          -	static function version_compare_replacement($version1, $version2, $operator='') {
          +	public static function version_compare_replacement($version1, $version2, $operator='') {
           		if (function_exists('version_compare')) {
           			// built into PHP v4.1.0+
           			return version_compare($version1, $version2, $operator);
          @@ -107,14 +107,14 @@ static function version_compare_replacement($version1, $version2, $operator='')
           
           		// and also inserts dots . before and after any non number so that for example '4.3.2RC1' becomes '4.3.2.RC.1'.
           		// Then it splits the results like if you were using explode('.',$ver). Then it compares the parts starting from left to right.
          -		$version1 = preg_replace('#([0-9]+)([A-Z]+)([0-9]+)#i', "$1.$2.$3", $version1);
          -		$version2 = preg_replace('#([0-9]+)([A-Z]+)([0-9]+)#i', "$1.$2.$3", $version2);
          +		$version1 = preg_replace('#([\d]+)([A-Z]+)([\d]+)#i', '$1.$2.$3', $version1);
          +		$version2 = preg_replace('#([\d]+)([A-Z]+)([\d]+)#i', '$1.$2.$3', $version2);
           
           		$parts1 = explode('.', $version1);
           		$parts2 = explode('.', $version1);
           		$parts_count = max(count($parts1), count($parts2));
           		for ($i = 0; $i < $parts_count; $i++) {
          -			$comparison = phpthumb_functions::version_compare_replacement_sub($version1, $version2, $operator);
          +			$comparison = self::version_compare_replacement_sub($version1, $version2, $operator);
           			if ($comparison != 0) {
           				return $comparison;
           			}
          @@ -122,8 +122,14 @@ static function version_compare_replacement($version1, $version2, $operator='')
           		return 0;
           	}
           
          +	public static function escapeshellarg_replacement($arg) {
          +		if (function_exists('escapeshellarg') && !self::FunctionIsDisabled('escapeshellarg')) {
          +			return escapeshellarg($arg);
          +		}
          +		return '\''.str_replace('\'', '\\\'', $arg).'\'';
          +	}
           
          -	static function phpinfo_array() {
          +	public static function phpinfo_array() {
           		static $phpinfo_array = array();
           		if (empty($phpinfo_array)) {
           			ob_start();
          @@ -136,7 +142,7 @@ static function phpinfo_array() {
           	}
           
           
          -	static function exif_info() {
          +	public static function exif_info() {
           		static $exif_info = array();
           		if (empty($exif_info)) {
           			// based on code by johnschaefer at gmx dot de
          @@ -147,7 +153,7 @@ static function exif_info() {
           				'Supported EXIF Version' => '',
           				'Supported filetypes'    => ''
           			);
          -			$phpinfo_array = phpthumb_functions::phpinfo_array();
          +			$phpinfo_array = self::phpinfo_array();
           			foreach ($phpinfo_array as $line) {
           				$line = trim(strip_tags($line));
           				foreach ($exif_info as $key => $value) {
          @@ -162,7 +168,7 @@ static function exif_info() {
           	}
           
           
          -	static function ImageTypeToMIMEtype($imagetype) {
          +	public static function ImageTypeToMIMEtype($imagetype) {
           		if (function_exists('image_type_to_mime_type') && ($imagetype >= 1) && ($imagetype <= 16)) {
           			// PHP v4.3.0+
           			return image_type_to_mime_type($imagetype);
          @@ -197,7 +203,7 @@ static function ImageTypeToMIMEtype($imagetype) {
           	}
           
           
          -	static function TranslateWHbyAngle($width, $height, $angle) {
          +	public static function TranslateWHbyAngle($width, $height, $angle) {
           		if (($angle % 180) == 0) {
           			return array($width, $height);
           		}
          @@ -206,7 +212,7 @@ static function TranslateWHbyAngle($width, $height, $angle) {
           		return array($newwidth, $newheight);
           	}
           
          -	static function HexCharDisplay($string) {
          +	public static function HexCharDisplay($string) {
           		$len = strlen($string);
           		$output = '';
           		for ($i = 0; $i < $len; $i++) {
          @@ -216,50 +222,50 @@ static function HexCharDisplay($string) {
           	}
           
           
          -	static function IsHexColor($HexColorString) {
          +	public static function IsHexColor($HexColorString) {
           		return preg_match('#^[0-9A-F]{6}$#i', $HexColorString);
           	}
           
           
          -	static function ImageColorAllocateAlphaSafe(&$gdimg_hexcolorallocate, $R, $G, $B, $alpha=false) {
          -		if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.2', '>=') && ($alpha !== false)) {
          -			return ImageColorAllocateAlpha($gdimg_hexcolorallocate, $R, $G, $B, intval($alpha));
          +	public static function ImageColorAllocateAlphaSafe(&$gdimg_hexcolorallocate, $R, $G, $B, $alpha=false) {
          +		if (self::version_compare_replacement(PHP_VERSION, '4.3.2', '>=') && ($alpha !== false)) {
          +			return imagecolorallocatealpha($gdimg_hexcolorallocate, $R, $G, $B, (int) $alpha);
           		} else {
          -			return ImageColorAllocate($gdimg_hexcolorallocate, $R, $G, $B);
          +			return imagecolorallocate($gdimg_hexcolorallocate, $R, $G, $B);
           		}
           	}
           
          -	static function ImageHexColorAllocate(&$gdimg_hexcolorallocate, $HexColorString, $dieOnInvalid=false, $alpha=false) {
          +	public static function ImageHexColorAllocate(&$gdimg_hexcolorallocate, $HexColorString, $dieOnInvalid=false, $alpha=false) {
           		if (!is_resource($gdimg_hexcolorallocate)) {
           			die('$gdimg_hexcolorallocate is not a GD resource in ImageHexColorAllocate()');
           		}
          -		if (phpthumb_functions::IsHexColor($HexColorString)) {
          +		if (self::IsHexColor($HexColorString)) {
           			$R = hexdec(substr($HexColorString, 0, 2));
           			$G = hexdec(substr($HexColorString, 2, 2));
           			$B = hexdec(substr($HexColorString, 4, 2));
          -			return phpthumb_functions::ImageColorAllocateAlphaSafe($gdimg_hexcolorallocate, $R, $G, $B, $alpha);
          +			return self::ImageColorAllocateAlphaSafe($gdimg_hexcolorallocate, $R, $G, $B, $alpha);
           		}
           		if ($dieOnInvalid) {
           			die('Invalid hex color string: "'.$HexColorString.'"');
           		}
          -		return ImageColorAllocate($gdimg_hexcolorallocate, 0x00, 0x00, 0x00);
          +		return imagecolorallocate($gdimg_hexcolorallocate, 0x00, 0x00, 0x00);
           	}
           
           
          -	static function HexColorXOR($hexcolor) {
          +	public static function HexColorXOR($hexcolor) {
           		return strtoupper(str_pad(dechex(~hexdec($hexcolor) & 0xFFFFFF), 6, '0', STR_PAD_LEFT));
           	}
           
           
          -	static function GetPixelColor(&$img, $x, $y) {
          +	public static function GetPixelColor(&$img, $x, $y) {
           		if (!is_resource($img)) {
           			return false;
           		}
          -		return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
          +		return @imagecolorsforindex($img, @imagecolorat($img, $x, $y));
           	}
           
           
          -	static function PixelColorDifferencePercent($currentPixel, $targetPixel) {
          +	public static function PixelColorDifferencePercent($currentPixel, $targetPixel) {
           		$diff = 0;
           		foreach ($targetPixel as $channel => $currentvalue) {
           			$diff = max($diff, (max($currentPixel[$channel], $targetPixel[$channel]) - min($currentPixel[$channel], $targetPixel[$channel])) / 255);
          @@ -267,18 +273,18 @@ static function PixelColorDifferencePercent($currentPixel, $targetPixel) {
           		return $diff * 100;
           	}
           
          -	static function GrayscaleValue($r, $g, $b) {
          +	public static function GrayscaleValue($r, $g, $b) {
           		return round(($r * 0.30) + ($g * 0.59) + ($b * 0.11));
           	}
           
           
          -	static function GrayscalePixel($OriginalPixel) {
          -		$gray = phpthumb_functions::GrayscaleValue($OriginalPixel['red'], $OriginalPixel['green'], $OriginalPixel['blue']);
          +	public static function GrayscalePixel($OriginalPixel) {
          +		$gray = self::GrayscaleValue($OriginalPixel[ 'red'], $OriginalPixel[ 'green'], $OriginalPixel[ 'blue']);
           		return array('red'=>$gray, 'green'=>$gray, 'blue'=>$gray);
           	}
           
           
          -	static function GrayscalePixelRGB($rgb) {
          +	public static function GrayscalePixelRGB($rgb) {
           		$r = ($rgb >> 16) & 0xFF;
           		$g = ($rgb >>  8) & 0xFF;
           		$b =  $rgb        & 0xFF;
          @@ -286,9 +292,9 @@ static function GrayscalePixelRGB($rgb) {
           	}
           
           
          -	static function ScaleToFitInBox($width, $height, $maxwidth=null, $maxheight=null, $allow_enlarge=true, $allow_reduce=true) {
          -		$maxwidth  = (is_null($maxwidth)  ? $width  : $maxwidth);
          -		$maxheight = (is_null($maxheight) ? $height : $maxheight);
          +	public static function ScaleToFitInBox($width, $height, $maxwidth=null, $maxheight=null, $allow_enlarge=true, $allow_reduce=true) {
          +		$maxwidth  = (null === $maxwidth  ? $width  : $maxwidth);
          +		$maxheight = (null === $maxheight ? $height : $maxheight);
           		$scale_x = 1;
           		$scale_y = 1;
           		if (($width > $maxwidth) || ($width < $maxwidth)) {
          @@ -307,7 +313,7 @@ static function ScaleToFitInBox($width, $height, $maxwidth=null, $maxheight=null
           		return $scale;
           	}
           
          -	static function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
          +	public static function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
           		// ron at korving dot demon dot nl
           		// http://www.php.net/imagecopyresampled
           
          @@ -317,7 +323,7 @@ static function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $sr
           		$scaleX2 = $scaleX / 2.0;
           		$scaleY2 = $scaleY / 2.0;
           
          -		$isTrueColor = ImageIsTrueColor($src_img);
          +		$isTrueColor = imageistruecolor($src_img);
           
           		for ($y = $src_y; $y < $src_y + $dst_h; $y++) {
           			$sY   = $y * $scaleY;
          @@ -331,10 +337,10 @@ static function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $sr
           
           				if ($isTrueColor) {
           
          -					$c1 = ImageColorAt($src_img, $siX, $siY2);
          -					$c2 = ImageColorAt($src_img, $siX, $siY);
          -					$c3 = ImageColorAt($src_img, $siX2, $siY2);
          -					$c4 = ImageColorAt($src_img, $siX2, $siY);
          +					$c1 = imagecolorat($src_img, $siX, $siY2);
          +					$c2 = imagecolorat($src_img, $siX, $siY);
          +					$c3 = imagecolorat($src_img, $siX2, $siY2);
          +					$c4 = imagecolorat($src_img, $siX2, $siY);
           
           					$r = (( $c1             +  $c2             +  $c3             +  $c4            ) >> 2) & 0xFF0000;
           					$g = ((($c1 & 0x00FF00) + ($c2 & 0x00FF00) + ($c3 & 0x00FF00) + ($c4 & 0x00FF00)) >> 2) & 0x00FF00;
          @@ -342,27 +348,27 @@ static function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $sr
           
           				} else {
           
          -					$c1 = ImageColorsForIndex($src_img, ImageColorAt($src_img, $siX, $siY2));
          -					$c2 = ImageColorsForIndex($src_img, ImageColorAt($src_img, $siX, $siY));
          -					$c3 = ImageColorsForIndex($src_img, ImageColorAt($src_img, $siX2, $siY2));
          -					$c4 = ImageColorsForIndex($src_img, ImageColorAt($src_img, $siX2, $siY));
          +					$c1 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY2));
          +					$c2 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY));
          +					$c3 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY2));
          +					$c4 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY));
           
           					$r = ($c1['red']   + $c2['red']   + $c3['red']   + $c4['red'] )  << 14;
           					$g = ($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) <<  6;
           					$b = ($c1['blue']  + $c2['blue']  + $c3['blue']  + $c4['blue'] ) >>  2;
           
           				}
          -				ImageSetPixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b);
          +				imagesetpixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b);
           			}
           		}
           		return true;
           	}
           
           
          -	static function ImageCreateFunction($x_size, $y_size) {
          -		$ImageCreateFunction = 'ImageCreate';
          -		if (phpthumb_functions::gd_version() >= 2.0) {
          -			$ImageCreateFunction = 'ImageCreateTrueColor';
          +	public static function ImageCreateFunction($x_size, $y_size) {
          +		$ImageCreateFunction = 'imagecreate';
          +		if (self::gd_version() >= 2.0) {
          +			$ImageCreateFunction = 'imagecreatetruecolor';
           		}
           		if (!function_exists($ImageCreateFunction)) {
           			return phpthumb::ErrorImage($ImageCreateFunction.'() does not exist - no GD support?');
          @@ -374,31 +380,32 @@ static function ImageCreateFunction($x_size, $y_size) {
           	}
           
           
          -	static function ImageCopyRespectAlpha(&$dst_im, &$src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity_pct=100) {
          +	public static function ImageCopyRespectAlpha(&$dst_im, &$src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity_pct=100) {
           		$opacipct = $opacity_pct / 100;
           		for ($x = $src_x; $x < $src_w; $x++) {
           			for ($y = $src_y; $y < $src_h; $y++) {
          -				$RealPixel    = phpthumb_functions::GetPixelColor($dst_im, $dst_x + $x, $dst_y + $y);
          -				$OverlayPixel = phpthumb_functions::GetPixelColor($src_im, $x, $y);
          +				$RealPixel    = self::GetPixelColor($dst_im, $dst_x + $x, $dst_y + $y);
          +				$OverlayPixel = self::GetPixelColor($src_im, $x, $y);
           				$alphapct = $OverlayPixel['alpha'] / 127;
           				$overlaypct = (1 - $alphapct) * $opacipct;
           
          -				$newcolor = phpthumb_functions::ImageColorAllocateAlphaSafe(
          +				$newcolor = self::ImageColorAllocateAlphaSafe(
           					$dst_im,
          -					round($RealPixel['red']   * (1 - $overlaypct)) + ($OverlayPixel['red']   * $overlaypct),
          -					round($RealPixel['green'] * (1 - $overlaypct)) + ($OverlayPixel['green'] * $overlaypct),
          -					round($RealPixel['blue']  * (1 - $overlaypct)) + ($OverlayPixel['blue']  * $overlaypct),
          -					//$RealPixel['alpha']);
          -					0);
          -
          -				ImageSetPixel($dst_im, $dst_x + $x, $dst_y + $y, $newcolor);
          +					$RealPixel['alpha'] == 127 ? $OverlayPixel['red'] : ($OverlayPixel['alpha'] == 127 ? $RealPixel['red'] : (round($RealPixel['red'] * (1 - $overlaypct)) + ($OverlayPixel['red'] * $overlaypct))),
          +					$RealPixel['alpha'] == 127 ? $OverlayPixel['green'] : ($OverlayPixel['alpha'] == 127 ? $RealPixel['green'] : (round($RealPixel['green'] * (1 - $overlaypct)) + ($OverlayPixel['green'] * $overlaypct))),
          +					$RealPixel['alpha'] == 127 ? $OverlayPixel['blue'] : ($OverlayPixel['alpha'] == 127 ? $RealPixel['blue'] : (round($RealPixel['blue'] * (1 - $overlaypct)) + ($OverlayPixel['blue'] * $overlaypct))),
          +//					0);
          +					min([$RealPixel['alpha'], floor($OverlayPixel['alpha'] * $opacipct)])
          +				);
          +
          +				imagesetpixel($dst_im, $dst_x + $x, $dst_y + $y, $newcolor);
           			}
           		}
           		return true;
           	}
           
           
          -	static function ProportionalResize($old_width, $old_height, $new_width=false, $new_height=false) {
          +	public static function ProportionalResize($old_width, $old_height, $new_width=false, $new_height=false) {
           		$old_aspect_ratio = $old_width / $old_height;
           		if (($new_width === false) && ($new_height === false)) {
           			return false;
          @@ -417,13 +424,16 @@ static function ProportionalResize($old_width, $old_height, $new_width=false, $n
           			// limited by height
           			$new_width = $new_height * $old_aspect_ratio;
           		}
          -		return array(intval(round($new_width)), intval(round($new_height)));
          +		return array(
          +			(int) round($new_width),
          +			(int) round($new_height)
          +		);
           	}
           
           
          -	static function FunctionIsDisabled($function) {
          +	public static function FunctionIsDisabled($function) {
           		static $DisabledFunctions = null;
          -		if (is_null($DisabledFunctions)) {
          +		if (null === $DisabledFunctions) {
           			$disable_functions_local  = explode(',',     strtolower(@ini_get('disable_functions')));
           			$disable_functions_global = explode(',', strtolower(@get_cfg_var('disable_functions')));
           			foreach ($disable_functions_local as $key => $value) {
          @@ -441,12 +451,12 @@ static function FunctionIsDisabled($function) {
           	}
           
           
          -	static function SafeExec($command) {
          +	public static function SafeExec($command) {
           		static $AllowedExecFunctions = array();
           		if (empty($AllowedExecFunctions)) {
           			$AllowedExecFunctions = array('shell_exec'=>true, 'passthru'=>true, 'system'=>true, 'exec'=>true);
           			foreach ($AllowedExecFunctions as $key => $value) {
          -				$AllowedExecFunctions[$key] = !phpthumb_functions::FunctionIsDisabled($key);
          +				$AllowedExecFunctions[$key] = !self::FunctionIsDisabled($key);
           			}
           		}
           		$command .= ' 2>&1'; // force redirect stderr to stdout
          @@ -482,9 +492,9 @@ static function SafeExec($command) {
           	}
           
           
          -	static function ApacheLookupURIarray($filename) {
          +	public static function ApacheLookupURIarray($filename) {
           		// apache_lookup_uri() only works when PHP is installed as an Apache module.
          -		if (php_sapi_name() == 'apache') {
          +		if (PHP_SAPI == 'apache') {
           			//$property_exists_exists = function_exists('property_exists');
           			$keys = array('status', 'the_request', 'status_line', 'method', 'content_type', 'handler', 'uri', 'filename', 'path_info', 'args', 'boundary', 'no_cache', 'no_local_copy', 'allowed', 'send_bodyct', 'bytes_sent', 'byterange', 'clength', 'unparsed_uri', 'mtime', 'request_time');
           			if ($apacheLookupURIobject = @apache_lookup_uri($filename)) {
          @@ -499,9 +509,9 @@ static function ApacheLookupURIarray($filename) {
           	}
           
           
          -	static function gd_is_bundled() {
          +	public static function gd_is_bundled() {
           		static $isbundled = null;
          -		if (is_null($isbundled)) {
          +		if (null === $isbundled) {
           			$gd_info = gd_info();
           			$isbundled = (strpos($gd_info['GD Version'], 'bundled') !== false);
           		}
          @@ -509,7 +519,7 @@ static function gd_is_bundled() {
           	}
           
           
          -	static function gd_version($fullstring=false) {
          +	public static function gd_version($fullstring=false) {
           		static $cache_gd_version = array();
           		if (empty($cache_gd_version)) {
           			$gd_info = gd_info();
          @@ -521,22 +531,22 @@ static function gd_version($fullstring=false) {
           				$cache_gd_version[0] = (float) substr($gd_info['GD Version'], 0, 3); // e.g. "1.6" (not "1.6.2 or higher")
           			}
           		}
          -		return $cache_gd_version[intval($fullstring)];
          +		return $cache_gd_version[ (int) $fullstring ];
           	}
           
           
          -	static function filesize_remote($remotefile, $timeout=10) {
          +	public static function filesize_remote($remotefile, $timeout=10) {
           		$size = false;
          -		$url = phpthumb_functions::ParseURLbetter($remotefile);
          -		if ($fp = @fsockopen($url['host'], ($url['port'] ? $url['port'] : 80), $errno, $errstr, $timeout)) {
          -			fwrite($fp, 'HEAD '.@$url['path'].@$url['query'].' HTTP/1.0'."\r\n".'Host: '.@$url['host']."\r\n\r\n");
          -			if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.0', '>=')) {
          +		$parsed_url = self::ParseURLbetter($remotefile);
          +		if ($fp = @fsockopen($parsed_url['host'], $parsed_url['port'], $errno, $errstr, $timeout)) {
          +			fwrite($fp, 'HEAD '.$parsed_url['path'].$parsed_url['query'].' HTTP/1.0'."\r\n".'Host: '.$parsed_url['host']."\r\n\r\n");
          +			if (self::version_compare_replacement(PHP_VERSION, '4.3.0', '>=')) {
           				stream_set_timeout($fp, $timeout);
           			}
           			while (!feof($fp)) {
           				$headerline = fgets($fp, 4096);
           				if (preg_match('#^Content-Length: (.*)#i', $headerline, $matches)) {
          -					$size = intval($matches[1]);
          +					$size = (int) $matches[ 1];
           					break;
           				}
           			}
          @@ -546,12 +556,12 @@ static function filesize_remote($remotefile, $timeout=10) {
           	}
           
           
          -	static function filedate_remote($remotefile, $timeout=10) {
          +	public static function filedate_remote($remotefile, $timeout=10) {
           		$date = false;
          -		$url = phpthumb_functions::ParseURLbetter($remotefile);
          -		if ($fp = @fsockopen($url['host'], ($url['port'] ? $url['port'] : 80), $errno, $errstr, $timeout)) {
          -			fwrite($fp, 'HEAD '.@$url['path'].@$url['query'].' HTTP/1.0'."\r\n".'Host: '.@$url['host']."\r\n\r\n");
          -			if (phpthumb_functions::version_compare_replacement(phpversion(), '4.3.0', '>=')) {
          +		$parsed_url = self::ParseURLbetter($remotefile);
          +		if ($fp = @fsockopen($parsed_url['host'], $parsed_url['port'], $errno, $errstr, $timeout)) {
          +			fwrite($fp, 'HEAD '.$parsed_url['path'].$parsed_url['query'].' HTTP/1.0'."\r\n".'Host: '.$parsed_url['host']."\r\n\r\n");
          +			if (self::version_compare_replacement(PHP_VERSION, '4.3.0', '>=')) {
           				stream_set_timeout($fp, $timeout);
           			}
           			while (!feof($fp)) {
          @@ -567,7 +577,7 @@ static function filedate_remote($remotefile, $timeout=10) {
           	}
           
           
          -	static function md5_file_safe($filename) {
          +	public static function md5_file_safe($filename) {
           		// md5_file() doesn't exist in PHP < 4.2.0
           		if (function_exists('md5_file')) {
           			return md5_file($filename);
          @@ -585,7 +595,7 @@ static function md5_file_safe($filename) {
           	}
           
           
          -	static function nonempty_min() {
          +	public static function nonempty_min() {
           		$arg_list = func_get_args();
           		$acceptable = array();
           		foreach ($arg_list as $arg) {
          @@ -597,16 +607,16 @@ static function nonempty_min() {
           	}
           
           
          -	static function LittleEndian2String($number, $minbytes=1) {
          +	public static function LittleEndian2String($number, $minbytes=1) {
           		$intstring = '';
           		while ($number > 0) {
          -			$intstring = $intstring.chr($number & 255);
          -			$number >>= 8;
          +			$intstring .= chr($number & 255);
          +			$number    >>= 8;
           		}
           		return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
           	}
           
          -	static function OneOfThese() {
          +	public static function OneOfThese() {
           		// return the first useful (non-empty/non-zero/non-false) value from those passed
           		$arg_list = func_get_args();
           		foreach ($arg_list as $key => $value) {
          @@ -617,7 +627,7 @@ static function OneOfThese() {
           		return false;
           	}
           
          -	static function CaseInsensitiveInArray($needle, $haystack) {
          +	public static function CaseInsensitiveInArray($needle, $haystack) {
           		$needle = strtolower($needle);
           		foreach ($haystack as $key => $value) {
           			if (is_array($value)) {
          @@ -629,31 +639,33 @@ static function CaseInsensitiveInArray($needle, $haystack) {
           		return false;
           	}
           
          -	static function URLreadFsock($host, $file, &$errstr, $successonly=true, $port=80, $timeout=10) {
          -		if (!function_exists('fsockopen') || phpthumb_functions::FunctionIsDisabled('fsockopen')) {
          -			$errstr = 'fsockopen() unavailable';
          +	public static function URLreadFsock($host, $file, &$errstr, $successonly=true, $port=-1, $timeout=10) {
          +		if (!function_exists('fsockopen') || self::FunctionIsDisabled('fsockopen')) {
          +			$errstr = 'URLreadFsock says: function fsockopen() unavailable';
           			return false;
           		}
          -		if ($fp = @fsockopen($host, $port, $errno, $errstr, $timeout)) {
          +		$port = (int) ($port ? $port : -1); // passing anything as the $port parameter (even empty values like null, false, 0, "") will override the default -1. fsockopen uses -1 as the default port value.
          +		//if ($fp = @fsockopen($host, $port, $errno, $errstr, $timeout)) {
          +		if ($fp = @fsockopen((($port == 443) ? 'ssl://' : '').$host, $port, $errno, $errstr, $timeout)) { // https://github.com/JamesHeinrich/phpThumb/issues/39
           			$out  = 'GET '.$file.' HTTP/1.0'."\r\n";
           			$out .= 'Host: '.$host."\r\n";
           			$out .= 'Connection: Close'."\r\n\r\n";
           			fwrite($fp, $out);
           
           			$isHeader = true;
          -			$Data_header = '';
          -			$Data_body   = '';
          +			$data_header = '';
          +			$data_body   = '';
           			$header_newlocation = '';
           			while (!feof($fp)) {
           				$line = fgets($fp, 1024);
           				if ($isHeader) {
          -					$Data_header .= $line;
          +					$data_header .= $line;
           				} else {
          -					$Data_body .= $line;
          +					$data_body .= $line;
           				}
          -				if (preg_match('#^HTTP/[\\.0-9]+ ([0-9]+) (.+)$#i', rtrim($line), $matches)) {
          -					list($dummy, $errno, $errstr) = $matches;
          -					$errno = intval($errno);
          +				if (preg_match('#^HTTP/[\\.\d]+ ([\d]+) (.+)$#i', rtrim($line), $matches)) {
          +					list( , $errno, $errstr) = $matches;
          +					$errno = (int) $errno;
           				} elseif (preg_match('#^Location: (.*)$#i', rtrim($line), $matches)) {
           					$header_newlocation = $matches[1];
           				}
          @@ -675,17 +687,17 @@ static function URLreadFsock($host, $file, &$errstr, $successonly=true, $port=80
           				}
           			}
           			fclose($fp);
          -			return $Data_body;
          +			return $data_body;
           		}
           		return null;
           	}
           
          -	static function CleanUpURLencoding($url, $queryseperator='&') {
          -		if (!preg_match('#^http#i', $url)) {
          +	public static function CleanUpURLencoding($url, $queryseperator='&') {
          +		if (!0 === stripos($url, "http") ) {
           			return $url;
           		}
          -		$parse_url = phpthumb_functions::ParseURLbetter($url);
          -		$pathelements = explode('/', $parse_url['path']);
          +		$parsed_url = self::ParseURLbetter($url);
          +		$pathelements = explode('/', $parsed_url['path']);
           		$CleanPathElements = array();
           		$TranslationMatrix = array(' '=>'%20');
           		foreach ($pathelements as $key => $pathelement) {
          @@ -697,7 +709,7 @@ static function CleanUpURLencoding($url, $queryseperator='&') {
           			}
           		}
           
          -		$queries = explode($queryseperator, (isset($parse_url['query']) ? $parse_url['query'] : ''));
          +		$queries = explode($queryseperator, $parsed_url['query']);
           		$CleanQueries = array();
           		foreach ($queries as $key => $query) {
           			@list($param, $value) = explode('=', $query);
          @@ -709,43 +721,47 @@ static function CleanUpURLencoding($url, $queryseperator='&') {
           			}
           		}
           
          -		$cleaned_url  = $parse_url['scheme'].'://';
          -		$cleaned_url .= (@$parse_url['username'] ? $parse_url['host'].(@$parse_url['password'] ? ':'.$parse_url['password'] : '').'@' : '');
          -		$cleaned_url .= $parse_url['host'];
          -		$cleaned_url .= ((!empty($parse_url['port']) && ($parse_url['port'] != 80)) ? ':'.$parse_url['port'] : '');
          +		$cleaned_url  = $parsed_url['scheme'].'://';
          +		$cleaned_url .= ($parsed_url['username'] ? $parsed_url['username'].($parsed_url['password'] ? ':'.$parsed_url['password'] : '').'@' : '');
          +		$cleaned_url .= $parsed_url['host'];
          +		$cleaned_url .= (($parsed_url['port'] && ($parsed_url['port'] != self::URLschemeDefaultPort($parsed_url['scheme']))) ? ':'.$parsed_url['port'] : '');
           		$cleaned_url .= '/'.implode('/', $CleanPathElements);
          -		$cleaned_url .= (@$CleanQueries ? '?'.implode($queryseperator, $CleanQueries) : '');
          +		$cleaned_url .= (!empty($CleanQueries) ? '?'.implode($queryseperator, $CleanQueries) : '');
           		return $cleaned_url;
           	}
           
          -	static function ParseURLbetter($url) {
          +	public static function URLschemeDefaultPort($scheme) {
          +		static $schemePort = array(
          +			'ftp'   => 21,
          +			'http'  => 80,
          +			'https' => 443,
          +		);
          +		return (isset($schemePort[strtolower($scheme)]) ? $schemePort[strtolower($scheme)] : null);
          +	}
          +
          +	public static function ParseURLbetter($url) {
           		$parsedURL = @parse_url($url);
          -		if (!@$parsedURL['port']) {
          -			switch (strtolower(@$parsedURL['scheme'])) {
          -				case 'ftp':
          -					$parsedURL['port'] = 21;
          -					break;
          -				case 'https':
          -					$parsedURL['port'] = 443;
          -					break;
          -				case 'http':
          -					$parsedURL['port'] = 80;
          -					break;
          +		foreach (array('scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment') as $key) { // ensure all possible array keys are always returned
          +			if (!array_key_exists($key, $parsedURL)) {
          +				$parsedURL[$key] = null;
           			}
           		}
          +		$parsedURL['port'] = ($parsedURL['port'] ? $parsedURL['port'] : self::URLschemeDefaultPort($parsedURL['scheme']));
           		return $parsedURL;
           	}
           
          -	static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
          -		$error = '';
          +	public static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
          +		$error   = '';
          +		$errstr  = '';
          +		$rawData = '';
           
          -		$parsed_url = phpthumb_functions::ParseURLbetter($url);
          +		$parsed_url = self::ParseURLbetter($url);
           		$alreadyLookedAtURLs[trim($url)] = true;
           
           		while (true) {
           			$tryagain = false;
          -			$rawData = phpthumb_functions::URLreadFsock(@$parsed_url['host'], @$parsed_url['path'].'?'.@$parsed_url['query'], $errstr, true, (@$parsed_url['port'] ? @$parsed_url['port'] : 80), $timeout);
          -			if (preg_match('#302 [a-z ]+; Location\\: (http.*)#i', $errstr, $matches)) {
          +			$rawData = self::URLreadFsock($parsed_url['host'], $parsed_url['path'].'?'.$parsed_url['query'], $errstr, true, $parsed_url['port'], $timeout);
          +			if ($followredirects && preg_match('#302 [a-z ]+; Location\\: (http.*)#i', $errstr, $matches)) {
           				$matches[1] = trim(@$matches[1]);
           				if (!@$alreadyLookedAtURLs[$matches[1]]) {
           					// loop through and examine new URL
          @@ -753,7 +769,7 @@ static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
           
           					$tryagain = true;
           					$alreadyLookedAtURLs[$matches[1]] = true;
          -					$parsed_url = phpthumb_functions::ParseURLbetter($matches[1]);
          +					$parsed_url = self::ParseURLbetter($matches[ 1]);
           				}
           			}
           			if (!$tryagain) {
          @@ -771,12 +787,15 @@ static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
           			return $rawData;
           		}
           
          -		if (function_exists('curl_version') && !phpthumb_functions::FunctionIsDisabled('curl_exec')) {
          +		if (function_exists('curl_version') && !self::FunctionIsDisabled('curl_exec')) {
           			$ch = curl_init();
           			curl_setopt($ch, CURLOPT_URL, $url);
           			curl_setopt($ch, CURLOPT_HEADER, false);
           			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
           			curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
          +			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
          +			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
          +			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, (bool) $followredirects);
           			curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
           			$rawData = curl_exec($ch);
           			curl_close($ch);
          @@ -790,8 +809,8 @@ static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
           		}
           
           		$BrokenURLfopenPHPversions = array('4.4.2');
          -		if (in_array(phpversion(), $BrokenURLfopenPHPversions)) {
          -			$error .= 'fopen(URL) broken in PHP v'.phpversion().'; ';
          +		if (in_array(PHP_VERSION, $BrokenURLfopenPHPversions)) {
          +			$error .= 'fopen(URL) broken in PHP v'. PHP_VERSION .'; ';
           		} elseif (@ini_get('allow_url_fopen')) {
           			$rawData = '';
           			$error_fopen = '';
          @@ -819,13 +838,13 @@ static function SafeURLread($url, &$error, $timeout=10, $followredirects=true) {
           		return false;
           	}
           
          -	static function EnsureDirectoryExists($dirname) {
          +	public static function EnsureDirectoryExists($dirname, $mask = 0755) {
           		$directory_elements = explode(DIRECTORY_SEPARATOR, $dirname);
           		$startoffset = (!$directory_elements[0] ? 2 : 1);  // unix with leading "/" then start with 2nd element; Windows with leading "c:\" then start with 1st element
           		$open_basedirs = preg_split('#[;:]#', ini_get('open_basedir'));
           		foreach ($open_basedirs as $key => $open_basedir) {
           			if (preg_match('#^'.preg_quote($open_basedir).'#', $dirname) && (strlen($dirname) > strlen($open_basedir))) {
          -				$startoffset = count(explode(DIRECTORY_SEPARATOR, $open_basedir));
          +				$startoffset = substr_count($open_basedir, DIRECTORY_SEPARATOR) + 1;
           				break;
           			}
           		}
          @@ -841,9 +860,9 @@ static function EnsureDirectoryExists($dirname) {
           					// directory name already exists as a file
           					return false;
           				}
          -				@mkdir($test_directory, 0755);
          -				@chmod($test_directory, 0755);
          -				if (!@is_dir($test_directory) || !@is_writeable($test_directory)) {
          +				@mkdir($test_directory, $mask);
          +				@chmod($test_directory, $mask);
          +				if (!@is_dir($test_directory) || !@is_writable($test_directory)) {
           					return false;
           				}
           			}
          @@ -852,7 +871,7 @@ static function EnsureDirectoryExists($dirname) {
           	}
           
           
          -	static function GetAllFilesInSubfolders($dirname) {
          +	public static function GetAllFilesInSubfolders($dirname) {
           		$AllFiles = array();
           		$dirname = rtrim(realpath($dirname), '/\\');
           		if ($dirhandle = @opendir($dirname)) {
          @@ -868,7 +887,7 @@ static function GetAllFilesInSubfolders($dirname) {
           
           						default:
           							$AllFiles[] = $fullfilename;
          -							$subfiles = phpthumb_functions::GetAllFilesInSubfolders($fullfilename);
          +							$subfiles = self::GetAllFilesInSubfolders($fullfilename);
           							foreach ($subfiles as $filename) {
           								$AllFiles[] = $filename;
           							}
          @@ -885,14 +904,23 @@ static function GetAllFilesInSubfolders($dirname) {
           	}
           
           
          -	static function SanitizeFilename($filename) {
          +	public static function SanitizeFilename($filename) {
           		$filename = preg_replace('/[^'.preg_quote(' !#$%^()+,-.;<>=@[]_{}').'a-zA-Z0-9]/', '_', $filename);
          -		if (phpthumb_functions::version_compare_replacement(phpversion(), '4.1.0', '>=')) {
          +		if (self::version_compare_replacement(PHP_VERSION, '4.1.0', '>=')) {
           			$filename = trim($filename, '.');
           		}
           		return $filename;
           	}
           
          +	public static function PasswordStrength($password) {
          +		$strength = 0;
          +		$strength += strlen(preg_replace('#[^a-z]#',       '', $password)) * 0.5; // lowercase characters are weak
          +		$strength += strlen(preg_replace('#[^A-Z]#',       '', $password)) * 0.8; // uppercase characters are somewhat better
          +		$strength += strlen(preg_replace('#[^0-9]#',       '', $password)) * 1.0; // numbers are somewhat better
          +		$strength += strlen(preg_replace('#[a-zA-Z0-9]#',  '', $password)) * 2.0; // other non-alphanumeric characters are best
          +		return $strength;
          +	}
          +
           }
           
           
          @@ -931,8 +959,8 @@ function gd_info() {
           			}
           			if (empty($gd_info['GD Version'])) {
           				// probable cause: "phpinfo() disabled for security reasons"
          -				if (function_exists('ImageTypes')) {
          -					$imagetypes = ImageTypes();
          +				if (function_exists('imagetypes')) {
          +					$imagetypes = imagetypes();
           					if ($imagetypes & IMG_PNG) {
           						$gd_info['PNG Support'] = true;
           					}
          @@ -946,22 +974,23 @@ function gd_info() {
           						$gd_info['WBMP Support'] = true;
           					}
           				}
          -				// to determine capability of GIF creation, try to use ImageCreateFromGIF on a 1px GIF
          -				if (function_exists('ImageCreateFromGIF')) {
          +				// to determine capability of GIF creation, try to use imagecreatefromgif on a 1px GIF
          +				if (function_exists('imagecreatefromgif')) {
           					if ($tempfilename = phpthumb::phpThumb_tempnam()) {
           						if ($fp_tempfile = @fopen($tempfilename, 'wb')) {
           							fwrite($fp_tempfile, base64_decode('R0lGODlhAQABAIAAAH//AP///ywAAAAAAQABAAACAUQAOw==')); // very simple 1px GIF file base64-encoded as string
           							fclose($fp_tempfile);
          +							@chmod($tempfilename, $this->getParameter('config_file_create_mask'));
           
           							// if we can convert the GIF file to a GD image then GIF create support must be enabled, otherwise it's not
          -							$gd_info['GIF Read Support'] = (bool) @ImageCreateFromGIF($tempfilename);
          +							$gd_info['GIF Read Support'] = (bool) @imagecreatefromgif($tempfilename);
           						}
           						unlink($tempfilename);
           					}
           				}
          -				if (function_exists('ImageCreateTrueColor') && @ImageCreateTrueColor(1, 1)) {
          +				if (function_exists('imagecreatetruecolor') && @imagecreatetruecolor(1, 1)) {
           					$gd_info['GD Version'] = '2.0.1 or higher (assumed)';
          -				} elseif (function_exists('ImageCreate') && @ImageCreate(1, 1)) {
          +				} elseif (function_exists('imagecreate') && @imagecreate(1, 1)) {
           					$gd_info['GD Version'] = '1.6.0 or higher (assumed)';
           				}
           			}
          @@ -986,7 +1015,7 @@ function preg_quote($string, $delimiter='\\') {
           		static $preg_quote_array = array();
           		if (empty($preg_quote_array)) {
           			$escapeables = '.\\+*?[^]$(){}=!<>|:';
          -			for ($i = 0; $i < strlen($escapeables); $i++) {
          +			for ($i = 0, $iMax = strlen($escapeables); $i < $iMax; $i++) {
           				$strtr_preg_quote[$escapeables{$i}] = $delimiter.$escapeables{$i};
           			}
           		}
          @@ -1043,5 +1072,3 @@ function imagesavealpha(&$img, $blendmode=true) {
           		return true;
           	}
           }
          -
          -?>
          \ No newline at end of file
          diff --git a/assets/snippets/phpthumb/phpthumb.gif.php b/assets/snippets/phpthumb/phpthumb.gif.php
          index 7ed33880..f82d0365 100755
          --- a/assets/snippets/phpthumb/phpthumb.gif.php
          +++ b/assets/snippets/phpthumb/phpthumb.gif.php
          @@ -43,14 +43,14 @@ function gif_loadFileToGDimageResource($gifFilename, $bgColor = -1)
           		}
           		// general strategy: convert raw data to PNG then convert PNG data to GD image resource
           		$PNGdata = $gif->getPng($bgColor);
          -		if ($img = @ImageCreateFromString($PNGdata)) {
          +		if ($img = @imagecreatefromstring($PNGdata)) {
           
           			// excellent - PNG image data successfully converted to GD image
           			return $img;
           
           		} elseif ($img = $gif->getGD_PixelPlotterVersion()) {
           
          -			// problem: ImageCreateFromString() didn't like the PNG image data.
          +			// problem: imagecreatefromstring() didn't like the PNG image data.
           			//   This has been known to happen in PHP v4.0.6
           			// solution: take the raw image data and create a new GD image and plot
           			//   pixel-by-pixel on the GD image. This is extremely slow, but it does
          @@ -66,7 +66,7 @@ function gif_loadFileToGDimageResource($gifFilename, $bgColor = -1)
           
           function gif_outputAsBmp($gif, $lpszFileName, $bgColor = -1)
           {
          -	if (!isSet($gif) || (@get_class($gif) <> 'cgif') || !$gif->loaded() || ($lpszFileName == '')) {
          +	if (!isset($gif) || (@get_class($gif) <> 'cgif') || !$gif->loaded() || ($lpszFileName == '')) {
           		return false;
           	}
           
          @@ -111,26 +111,26 @@ function gif_outputAsPng($gif, $lpszFileName, $bgColor = -1)
           function gif_outputAsJpeg($gif, $lpszFileName, $bgColor = -1)
           {
           	// JPEG output that does not require cjpeg added by James Heinrich  - December 10, 2003
          -	if ((strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') && (file_exists('/usr/local/bin/cjpeg') || `which cjpeg`)) {
          +	if ((strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') && (file_exists('/usr/local/bin/cjpeg') || shell_exec('which cjpeg'))) {
           
           		if (gif_outputAsBmp($gif, $lpszFileName.'.bmp', $bgColor)) {
           			exec('cjpeg '.$lpszFileName.'.bmp >'.$lpszFileName.' 2>/dev/null');
          -			@unLink($lpszFileName.'.bmp');
          +			@unlink($lpszFileName.'.bmp');
           
           			if (@file_exists($lpszFileName)) {
          -				if (@fileSize($lpszFileName) > 0) {
          +				if (@filesize($lpszFileName) > 0) {
           					return true;
           				}
           
          -				@unLink($lpszFileName);
          +				@unlink($lpszFileName);
           			}
           		}
           
           	} else {
           
           		// either Windows, or cjpeg not found in path
          -		if ($img = @ImageCreateFromString($gif->getPng($bgColor))) {
          -			if (@ImageJPEG($img, $lpszFileName)) {
          +		if ($img = @imagecreatefromstring($gif->getPng($bgColor))) {
          +			if (@imagejpeg($img, $lpszFileName)) {
           				return true;
           			}
           		}
          @@ -163,14 +163,14 @@ function gif_getSize($gif, &$width, &$height)
           
           class CGIFLZW
           {
          -	var $MAX_LZW_BITS;
          -	var $Fresh, $CodeSize, $SetCodeSize, $MaxCode, $MaxCodeSize, $FirstCode, $OldCode;
          -	var $ClearCode, $EndCode, $Next, $Vals, $Stack, $sp, $Buf, $CurBit, $LastBit, $Done, $LastByte;
          +	public $MAX_LZW_BITS;
          +	public $Fresh, $CodeSize, $SetCodeSize, $MaxCode, $MaxCodeSize, $FirstCode, $OldCode;
          +	public $ClearCode, $EndCode, $Next, $Vals, $Stack, $sp, $Buf, $CurBit, $LastBit, $Done, $LastByte;
           
           	///////////////////////////////////////////////////////////////////////////
           
           	// CONSTRUCTOR
          -	function __construct()
          +	public function __construct()
           	{
           		$this->MAX_LZW_BITS = 12;
           		unSet($this->Next);
          @@ -186,7 +186,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function deCompress($data, &$datLen)
          +	public function deCompress($data, &$datLen)
           	{
           		$stLen  = strlen($data);
           		$datLen = 0;
          @@ -210,7 +210,7 @@ function deCompress($data, &$datLen)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function LZWCommand(&$data, $bInit)
          +	public function LZWCommand(&$data, $bInit)
           	{
           		if ($bInit) {
           			$this->SetCodeSize = ord($data{0});
          @@ -325,7 +325,7 @@ function LZWCommand(&$data, $bInit)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function GetCode(&$data, $bInit)
          +	public function GetCode(&$data, $bInit)
           	{
           		if ($bInit) {
           			$this->CurBit   = 0;
          @@ -366,7 +366,7 @@ function GetCode(&$data, $bInit)
           
           		$iRet = 0;
           		for ($i = $this->CurBit, $j = 0; $j < $this->CodeSize; $i++, $j++) {
          -			$iRet |= (($this->Buf[intval($i / 8)] & (1 << ($i % 8))) != 0) << $j;
          +			$iRet |= (($this->Buf[ (int) ($i / 8) ] & (1 << ($i % 8))) != 0) << $j;
           		}
           
           		$this->CurBit += $this->CodeSize;
          @@ -378,13 +378,13 @@ function GetCode(&$data, $bInit)
           
           class CGIFCOLORTABLE
           {
          -	var $m_nColors;
          -	var $m_arColors;
          +	public $m_nColors;
          +	public $m_arColors;
           
           	///////////////////////////////////////////////////////////////////////////
           
           	// CONSTRUCTOR
          -	function __construct()
          +	public function __construct()
           	{
           		unSet($this->m_nColors);
           		unSet($this->m_arColors);
          @@ -392,7 +392,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function load($lpData, $num)
          +	public function load($lpData, $num)
           	{
           		$this->m_nColors  = 0;
           		$this->m_arColors = array();
          @@ -412,13 +412,13 @@ function load($lpData, $num)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function toString()
          +	public function toString()
           	{
           		$ret = '';
           
           		for ($i = 0; $i < $this->m_nColors; $i++) {
           			$ret .=
          -				chr(($this->m_arColors[$i] & 0x000000FF))       . // R
          +				chr($this->m_arColors[ $i] & 0x000000FF)       . // R
           				chr(($this->m_arColors[$i] & 0x0000FF00) >>  8) . // G
           				chr(($this->m_arColors[$i] & 0x00FF0000) >> 16);  // B
           		}
          @@ -428,7 +428,7 @@ function toString()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function toRGBQuad()
          +	public function toRGBQuad()
           	{
           		$ret = '';
           
          @@ -436,7 +436,7 @@ function toRGBQuad()
           			$ret .=
           				chr(($this->m_arColors[$i] & 0x00FF0000) >> 16) . // B
           				chr(($this->m_arColors[$i] & 0x0000FF00) >>  8) . // G
          -				chr(($this->m_arColors[$i] & 0x000000FF))       . // R
          +				chr($this->m_arColors[ $i] & 0x000000FF)       . // R
           				"\x00";
           		}
           
          @@ -445,13 +445,14 @@ function toRGBQuad()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function colorIndex($rgb)
          +	public function colorIndex($rgb)
           	{
          -		$rgb  = intval($rgb) & 0xFFFFFF;
          -		$r1   = ($rgb & 0x0000FF);
          -		$g1   = ($rgb & 0x00FF00) >>  8;
          -		$b1   = ($rgb & 0xFF0000) >> 16;
          -		$idx  = -1;
          +		$rgb = (int) $rgb & 0xFFFFFF;
          +		$r1  = ($rgb & 0x0000FF);
          +		$g1  = ($rgb & 0x00FF00) >>  8;
          +		$b1  = ($rgb & 0xFF0000) >> 16;
          +		$idx = -1;
          +		$dif = 0;
           
           		for ($i = 0; $i < $this->m_nColors; $i++) {
           			$r2 = ($this->m_arColors[$i] & 0x000000FF);
          @@ -473,21 +474,21 @@ function colorIndex($rgb)
           
           class CGIFFILEHEADER
           {
          -	var $m_lpVer;
          -	var $m_nWidth;
          -	var $m_nHeight;
          -	var $m_bGlobalClr;
          -	var $m_nColorRes;
          -	var $m_bSorted;
          -	var $m_nTableSize;
          -	var $m_nBgColor;
          -	var $m_nPixelRatio;
          -	var $m_colorTable;
          +	public $m_lpVer;
          +	public $m_nWidth;
          +	public $m_nHeight;
          +	public $m_bGlobalClr;
          +	public $m_nColorRes;
          +	public $m_bSorted;
          +	public $m_nTableSize;
          +	public $m_nBgColor;
          +	public $m_nPixelRatio;
          +	public $m_colorTable;
           
           	///////////////////////////////////////////////////////////////////////////
           
           	// CONSTRUCTOR
          -	function __construct()
          +	public function __construct()
           	{
           		unSet($this->m_lpVer);
           		unSet($this->m_nWidth);
          @@ -503,7 +504,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function load($lpData, &$hdrLen)
          +	public function load($lpData, &$hdrLen)
           	{
           		$hdrLen = 0;
           
          @@ -518,13 +519,13 @@ function load($lpData, &$hdrLen)
           			return false;
           		}
           
          -		$b = ord(substr($lpData, 10, 1));
          +		$b = ord($lpData[ 10 ]);
           		$this->m_bGlobalClr  = ($b & 0x80) ? true : false;
           		$this->m_nColorRes   = ($b & 0x70) >> 4;
           		$this->m_bSorted     = ($b & 0x08) ? true : false;
           		$this->m_nTableSize  = 2 << ($b & 0x07);
          -		$this->m_nBgColor    = ord(substr($lpData, 11, 1));
          -		$this->m_nPixelRatio = ord(substr($lpData, 12, 1));
          +		$this->m_nBgColor    = ord($lpData[ 11 ]);
          +		$this->m_nPixelRatio = ord($lpData[ 12 ]);
           		$hdrLen = 13;
           
           		if ($this->m_bGlobalClr) {
          @@ -540,9 +541,9 @@ function load($lpData, &$hdrLen)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function w2i($str)
          +	public function w2i($str)
           	{
          -		return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
          +		return ord($str[ 0 ]) + (ord($str[ 1 ]) << 8);
           	}
           }
           
          @@ -550,20 +551,20 @@ function w2i($str)
           
           class CGIFIMAGEHEADER
           {
          -	var $m_nLeft;
          -	var $m_nTop;
          -	var $m_nWidth;
          -	var $m_nHeight;
          -	var $m_bLocalClr;
          -	var $m_bInterlace;
          -	var $m_bSorted;
          -	var $m_nTableSize;
          -	var $m_colorTable;
          +	public $m_nLeft;
          +	public $m_nTop;
          +	public $m_nWidth;
          +	public $m_nHeight;
          +	public $m_bLocalClr;
          +	public $m_bInterlace;
          +	public $m_bSorted;
          +	public $m_nTableSize;
          +	public $m_colorTable;
           
           	///////////////////////////////////////////////////////////////////////////
           
           	// CONSTRUCTOR
          -	function __construct()
          +	public function __construct()
           	{
           		unSet($this->m_nLeft);
           		unSet($this->m_nTop);
          @@ -578,7 +579,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function load($lpData, &$hdrLen)
          +	public function load($lpData, &$hdrLen)
           	{
           		$hdrLen = 0;
           
          @@ -611,9 +612,9 @@ function load($lpData, &$hdrLen)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function w2i($str)
          +	public function w2i($str)
           	{
          -		return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
          +		return ord($str[ 0 ]) + (ord($str[ 1 ]) << 8);
           	}
           }
           
          @@ -621,19 +622,19 @@ function w2i($str)
           
           class CGIFIMAGE
           {
          -	var $m_disp;
          -	var $m_bUser;
          -	var $m_bTrans;
          -	var $m_nDelay;
          -	var $m_nTrans;
          -	var $m_lpComm;
          -	var $m_gih;
          -	var $m_data;
          -	var $m_lzw;
          +	public $m_disp;
          +	public $m_bUser;
          +	public $m_bTrans;
          +	public $m_nDelay;
          +	public $m_nTrans;
          +	public $m_lpComm;
          +	public $m_gih;
          +	public $m_data;
          +	public $m_lzw;
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function __construct()
          +	public function __construct()
           	{
           		unSet($this->m_disp);
           		unSet($this->m_bUser);
          @@ -648,7 +649,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function load($data, &$datLen)
          +	public function load($data, &$datLen)
           	{
           		$datLen = 0;
           
          @@ -695,7 +696,7 @@ function load($data, &$datLen)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function skipExt(&$data, &$extLen)
          +	public function skipExt(&$data, &$extLen)
           	{
           		$extLen = 0;
           
          @@ -740,16 +741,18 @@ function skipExt(&$data, &$extLen)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function w2i($str)
          +	public function w2i($str)
           	{
          -		return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
          +		return ord($str[ 0 ]) + (ord($str[ 1 ]) << 8);
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function deInterlace()
          +	public function deInterlace()
           	{
           		$data = $this->m_data;
          +		$s = 0;
          +		$y = 0;
           
           		for ($i = 0; $i < 4; $i++) {
           			switch($i) {
          @@ -793,15 +796,15 @@ function deInterlace()
           
           class CGIF
           {
          -	var $m_gfh;
          -	var $m_lpData;
          -	var $m_img;
          -	var $m_bLoaded;
          +	public $m_gfh;
          +	public $m_lpData;
          +	public $m_img;
          +	public $m_bLoaded;
           
           	///////////////////////////////////////////////////////////////////////////
           
           	// CONSTRUCTOR
          -	function __construct()
          +	public function __construct()
           	{
           		$this->m_gfh     = new CGIFFILEHEADER();
           		$this->m_img     = new CGIFIMAGE();
          @@ -811,7 +814,7 @@ function __construct()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function loadFile($lpszFileName, $iIndex)
          +	public function loadFile($lpszFileName, $iIndex)
           	{
           		if ($iIndex < 0) {
           			return false;
          @@ -821,7 +824,7 @@ function loadFile($lpszFileName, $iIndex)
           		if (!($fh = @fopen($lpszFileName, 'rb'))) {
           			return false;
           		}
          -		$this->m_lpData = @fRead($fh, @fileSize($lpszFileName));
          +		$this->m_lpData = @fread($fh, @filesize($lpszFileName));
           		fclose($fh);
           
           		// GET FILE HEADER
          @@ -844,12 +847,12 @@ function loadFile($lpszFileName, $iIndex)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function getSize($lpszFileName, &$width, &$height)
          +	public function getSize($lpszFileName, &$width, &$height)
           	{
           		if (!($fh = @fopen($lpszFileName, 'rb'))) {
           			return false;
           		}
          -		$data = @fRead($fh, @fileSize($lpszFileName));
          +		$data = @fread($fh, @filesize($lpszFileName));
           		@fclose($fh);
           
           		$gfh = new CGIFFILEHEADER();
          @@ -864,7 +867,7 @@ function getSize($lpszFileName, &$width, &$height)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function getBmp($bgColor)
          +	public function getBmp($bgColor)
           	{
           		$out = '';
           
          @@ -887,6 +890,7 @@ function getBmp($bgColor)
           			}
           		} else {
           			$nColors =  0;
          +			$rgbq    = '';
           			$bgColor = -1;
           		}
           
          @@ -963,7 +967,7 @@ function getBmp($bgColor)
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function getPng($bgColor)
          +	public function getPng($bgColor)
           	{
           		$out = '';
           
          @@ -986,6 +990,7 @@ function getPng($bgColor)
           			}
           		} else {
           			$nColors =  0;
          +			$pal     = '';
           			$bgColor = -1;
           		}
           
          @@ -1066,8 +1071,8 @@ function getPng($bgColor)
           	// Added by James Heinrich  - January 5, 2003
           
           	// Takes raw image data and plots it pixel-by-pixel on a new GD image and returns that
          -	// It's extremely slow, but the only solution when ImageCreateFromString() fails
          -	function getGD_PixelPlotterVersion()
          +	// It's extremely slow, but the only solution when imagecreatefromstring() fails
          +	public function getGD_PixelPlotterVersion()
           	{
           		if (!$this->m_bLoaded) {
           			return false;
          @@ -1082,14 +1087,15 @@ function getGD_PixelPlotterVersion()
           			die('No color table available in getGD_PixelPlotterVersion()');
           		}
           
          -		$PlottingIMG = ImageCreate($this->m_gfh->m_nWidth, $this->m_gfh->m_nHeight);
          +		$PlottingIMG = imagecreate($this->m_gfh->m_nWidth, $this->m_gfh->m_nHeight);
           		$NumColorsInPal = floor(strlen($pal) / 3);
          +		$ThisImageColor = array();
           		for ($i = 0; $i < $NumColorsInPal; $i++) {
          -			$ThisImageColor[$i] = ImageColorAllocate(
          +			$ThisImageColor[$i] = imagecolorallocate(
           									$PlottingIMG,
          -									ord($pal{(($i * 3) + 0)}),
          -									ord($pal{(($i * 3) + 1)}),
          -									ord($pal{(($i * 3) + 2)}));
          +									ord($pal{($i * 3) + 0}),
          +									ord($pal{($i * 3) + 1}),
          +									ord($pal{($i * 3) + 2}));
           		}
           
           		// PREPARE BITMAP BITS
          @@ -1107,13 +1113,13 @@ function getGD_PixelPlotterVersion()
           					($y <  ($this->m_img->m_gih->m_nTop  + $this->m_img->m_gih->m_nHeight))) {
           					// PART OF IMAGE
           					if (@$this->m_img->m_bTrans && (ord($data{$nPxl}) == $this->m_img->m_nTrans)) {
          -						ImageSetPixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[$this->m_gfh->m_nBgColor]);
          +						imagesetpixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[$this->m_gfh->m_nBgColor]);
           					} else {
          -						ImageSetPixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[ord($data{$nPxl})]);
          +						imagesetpixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[ord($data{$nPxl})]);
           					}
           				} else {
           					// BACKGROUND
          -					ImageSetPixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[$this->m_gfh->m_nBgColor]);
          +					imagesetpixel($PlottingIMG, $x, $this->m_gfh->m_nHeight - $y - 1, $ThisImageColor[$this->m_gfh->m_nBgColor]);
           				}
           			}
           			$nPxl -= $this->m_gfh->m_nWidth << 1;
          @@ -1125,49 +1131,45 @@ function getGD_PixelPlotterVersion()
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function dword($val)
          +	public function dword($val)
           	{
          -		$val = intval($val);
          +		$val = (int) $val;
           		return chr($val & 0xFF).chr(($val & 0xFF00) >> 8).chr(($val & 0xFF0000) >> 16).chr(($val & 0xFF000000) >> 24);
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function ndword($val)
          +	public function ndword($val)
           	{
          -		$val = intval($val);
          +		$val = (int) $val;
           		return chr(($val & 0xFF000000) >> 24).chr(($val & 0xFF0000) >> 16).chr(($val & 0xFF00) >> 8).chr($val & 0xFF);
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function width()
          +	public function width()
           	{
           		return $this->m_gfh->m_nWidth;
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function height()
          +	public function height()
           	{
           		return $this->m_gfh->m_nHeight;
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function comment()
          +	public function comment()
           	{
           		return $this->m_img->m_lpComm;
           	}
           
           	///////////////////////////////////////////////////////////////////////////
           
          -	function loaded()
          +	public function loaded()
           	{
           		return $this->m_bLoaded;
           	}
           }
          -
          -///////////////////////////////////////////////////////////////////////////////////////////////////
          -
          -?>
          \ No newline at end of file
          diff --git a/assets/snippets/phpthumb/phpthumb.ico.php b/assets/snippets/phpthumb/phpthumb.ico.php
          index 0daff8ab..9c906134 100755
          --- a/assets/snippets/phpthumb/phpthumb.ico.php
          +++ b/assets/snippets/phpthumb/phpthumb.ico.php
          @@ -12,18 +12,20 @@
           
           class phpthumb_ico {
           
          -	function __construct() {
          -		return true;
          -	}
          -
          -
          -	function GD2ICOstring(&$gd_image_array) {
          +	public function GD2ICOstring(&$gd_image_array) {
          +		$ImageWidths  = array();
          +		$ImageHeights = array();
          +		$bpp          = array();
          +		$totalcolors  = array();
          +		$icXOR        = array();
          +		$icAND        = array();
          +		$icANDmask    = array();
           		foreach ($gd_image_array as $key => $gd_image) {
           
          -			$ImageWidths[$key]  = ImageSX($gd_image);
          -			$ImageHeights[$key] = ImageSY($gd_image);
          -	    	$bpp[$key]          = ImageIsTrueColor($gd_image) ? 32 : 24;
          -	    	$totalcolors[$key]  = ImageColorsTotal($gd_image);
          +			$ImageWidths[$key]  = imagesx($gd_image);
          +			$ImageHeights[$key] = imagesy($gd_image);
          +			$bpp[$key]          = imageistruecolor($gd_image) ? 32 : 24;
          +			$totalcolors[$key]  = imagecolorstotal($gd_image);
           
           			$icXOR[$key] = '';
           			for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
          @@ -53,31 +55,31 @@ function GD2ICOstring(&$gd_image_array) {
           			}
           			$icAND[$key] = '';
           			foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
          -				for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
          +				for ($i = 0, $iMax = strlen($scanlinemaskbits); $i < $iMax; $i += 8) {
           					$icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
           				}
           			}
           
           		}
           
          -	    foreach ($gd_image_array as $key => $gd_image) {
          +		foreach ($gd_image_array as $key => $gd_image) {
           			$biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
           
          -	    	// BITMAPINFOHEADER - 40 bytes
          +			// BITMAPINFOHEADER - 40 bytes
           			$BitmapInfoHeader[$key]  = '';
           			$BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";                              // DWORD  biSize;
           			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageWidths[$key], 4);      // LONG   biWidth;
           			// The biHeight member specifies the combined
           			// height of the XOR and AND masks.
           			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG   biHeight;
          -	    	$BitmapInfoHeader[$key] .= "\x01\x00";                                      // WORD   biPlanes;
          -	   		$BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00";                          // wBitCount;
          +			$BitmapInfoHeader[$key] .= "\x01\x00";                                      // WORD   biPlanes;
          +			$BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00";                          // wBitCount;
           			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biCompression;
           			$BitmapInfoHeader[$key] .= phpthumb_functions::LittleEndian2String($biSizeImage, 4);            // DWORD  biSizeImage;
          -	    	$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biXPelsPerMeter;
          -	    	$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biYPelsPerMeter;
          -	    	$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrUsed;
          -	    	$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrImportant;
          +			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biXPelsPerMeter;
          +			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // LONG   biYPelsPerMeter;
          +			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrUsed;
          +			$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";                              // DWORD  biClrImportant;
           		}
           
           
          @@ -87,34 +89,32 @@ function GD2ICOstring(&$gd_image_array) {
           
           		$dwImageOffset = 6 + (count($gd_image_array) * 16);
           		foreach ($gd_image_array as $key => $gd_image) {
          -	    	// ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
          +			// ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
           
          -	    	$icondata .= chr($ImageWidths[$key]);                     // bWidth;          // Width, in pixels, of the image
          -	    	$icondata .= chr($ImageHeights[$key]);                    // bHeight;         // Height, in pixels, of the image
          -	    	$icondata .= chr($totalcolors[$key]);                     // bColorCount;     // Number of colors in image (0 if >=8bpp)
          -	    	$icondata .= "\x00";                                      // bReserved;       // Reserved ( must be 0)
          +			$icondata .= chr($ImageWidths[$key]);                     // bWidth;          // Width, in pixels, of the image
          +			$icondata .= chr($ImageHeights[$key]);                    // bHeight;         // Height, in pixels, of the image
          +			$icondata .= chr($totalcolors[$key]);                     // bColorCount;     // Number of colors in image (0 if >=8bpp)
          +			$icondata .= "\x00";                                      // bReserved;       // Reserved ( must be 0)
           
          -	    	$icondata .= "\x01\x00";                                  // wPlanes;         // Color Planes
          +			$icondata .= "\x01\x00";                                  // wPlanes;         // Color Planes
           			$icondata .= chr($bpp[$key])."\x00";                      // wBitCount;       // Bits per pixel
           
           			$dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
           			$icondata .= phpthumb_functions::LittleEndian2String($dwBytesInRes, 4);       // dwBytesInRes;    // How many bytes in this resource?
           
          -		    $icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset, 4);      // dwImageOffset;   // Where in the file is this image?
          +			$icondata .= phpthumb_functions::LittleEndian2String($dwImageOffset, 4);      // dwImageOffset;   // Where in the file is this image?
           			$dwImageOffset += strlen($BitmapInfoHeader[$key]);
           			$dwImageOffset += strlen($icXOR[$key]);
           			$dwImageOffset += strlen($icAND[$key]);
          -	    }
          +		}
           
          -	    foreach ($gd_image_array as $key => $gd_image) {
          +		foreach ($gd_image_array as $key => $gd_image) {
           			$icondata .= $BitmapInfoHeader[$key];
           			$icondata .= $icXOR[$key];
           			$icondata .= $icAND[$key];
          -	    }
          +		}
           
          -	    return $icondata;
          +		return $icondata;
           	}
           
           }
          -
          -?>
          \ No newline at end of file
          diff --git a/assets/snippets/phpthumb/phpthumb.unsharp.php b/assets/snippets/phpthumb/phpthumb.unsharp.php
          index 8e3505d5..a5c454ee 100755
          --- a/assets/snippets/phpthumb/phpthumb.unsharp.php
          +++ b/assets/snippets/phpthumb/phpthumb.unsharp.php
          @@ -3,7 +3,7 @@
           ////
           ////            Unsharp Mask for PHP - version 2.1.1
           ////
          -////    Unsharp mask algorithm by Torstein H?nsi 2003-07.
          +////    Unsharp mask algorithm by Torstein Hønsi 2003-07.
           ////             thoensi_at_netcom_dot_no.
           ////               Please leave this notice.
           ////
          @@ -37,13 +37,13 @@
           this means that low-contrast areas of the picture are left unrendered whereas edges
           are treated normally. This is good for pictures of e.g. skin or blue skies.
           
          -Any suggenstions for improvement of the algorithm, expecially regarding the speed
          +Any suggenstions for improvement of the algorithm, especially regarding the speed
           and the roundoff errors in the Gaussian blur process, are welcome.
           */
           
           class phpUnsharpMask {
           
          -	static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
          +	public static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           
           		// $img is an image that is already created within php using
           		// imgcreatetruecolor. No url! $img must be a truecolor image.
          @@ -55,10 +55,10 @@ static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           		if ($radius == 0) {
           			return true;
           		}
          -		$w = ImageSX($img);
          -		$h = ImageSY($img);
          -		$imgCanvas = ImageCreateTrueColor($w, $h);
          -		$imgBlur   = ImageCreateTrueColor($w, $h);
          +		$w = imagesx($img);
          +		$h = imagesy($img);
          +		$imgCanvas = imagecreatetruecolor($w, $h);
          +		$imgBlur   = imagecreatetruecolor($w, $h);
           
           		// Gaussian blur matrix:
           		//
          @@ -74,20 +74,20 @@ static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           				array(2, 4, 2),
           				array(1, 2, 1)
           			);
          -			ImageCopy($imgBlur, $img, 0, 0, 0, 0, $w, $h);
          -			ImageConvolution($imgBlur, $matrix, 16, 0);
          +			imagecopy($imgBlur, $img, 0, 0, 0, 0, $w, $h);
          +			imageconvolution($imgBlur, $matrix, 16, 0);
           
           		} else {
           
           			// Move copies of the image around one pixel at the time and merge them with weight
           			// according to the matrix. The same matrix is simply repeated for higher radii.
           			for ($i = 0; $i < $radius; $i++)    {
          -				ImageCopy(     $imgBlur,   $img,       0, 0, 1, 0, $w - 1, $h);               // left
          -				ImageCopyMerge($imgBlur,   $img,       1, 0, 0, 0, $w    , $h,     50);       // right
          -				ImageCopyMerge($imgBlur,   $img,       0, 0, 0, 0, $w    , $h,     50);       // center
          -				ImageCopy(     $imgCanvas, $imgBlur,   0, 0, 0, 0, $w    , $h);
          -				ImageCopyMerge($imgBlur,   $imgCanvas, 0, 0, 0, 1, $w    , $h - 1, 33.33333); // up
          -				ImageCopyMerge($imgBlur,   $imgCanvas, 0, 1, 0, 0, $w    , $h,     25);       // down
          +				imagecopy(     $imgBlur,   $img,       0, 0, 1, 0, $w - 1, $h);               // left
          +				imagecopymerge($imgBlur,   $img,       1, 0, 0, 0, $w    , $h,     50);       // right
          +				imagecopymerge($imgBlur,   $img,       0, 0, 0, 0, $w    , $h,     50);       // center
          +				imagecopy(     $imgCanvas, $imgBlur,   0, 0, 0, 0, $w    , $h);
          +				imagecopymerge($imgBlur,   $imgCanvas, 0, 0, 0, 1, $w    , $h - 1, 33.33333); // up
          +				imagecopymerge($imgBlur,   $imgCanvas, 0, 1, 0, 0, $w    , $h,     25);       // down
           			}
           		}
           
          @@ -97,12 +97,12 @@ static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           			for ($x = 0; $x < $w-1; $x++)    { // each row
           				for ($y = 0; $y < $h; $y++)    { // each pixel
           
          -					$rgbOrig = ImageColorAt($img, $x, $y);
          +					$rgbOrig = imagecolorat($img, $x, $y);
           					$rOrig = (($rgbOrig >> 16) & 0xFF);
           					$gOrig = (($rgbOrig >>  8) & 0xFF);
           					$bOrig =  ($rgbOrig        & 0xFF);
           
          -					$rgbBlur = ImageColorAt($imgBlur, $x, $y);
          +					$rgbBlur = imagecolorat($imgBlur, $x, $y);
           
           					$rBlur = (($rgbBlur >> 16) & 0xFF);
           					$gBlur = (($rgbBlur >>  8) & 0xFF);
          @@ -115,20 +115,20 @@ static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           					$bNew = ((abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig);
           
           					if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) {
          -						$pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew);
          -						ImageSetPixel($img, $x, $y, $pixCol);
          +						$pixCol = imagecolorallocate($img, $rNew, $gNew, $bNew);
          +						imagesetpixel($img, $x, $y, $pixCol);
           					}
           				}
           			}
           		} else {
           			for ($x = 0; $x < $w; $x++)    { // each row
           				for ($y = 0; $y < $h; $y++)    { // each pixel
          -					$rgbOrig = ImageColorAt($img, $x, $y);
          +					$rgbOrig = imagecolorat($img, $x, $y);
           					$rOrig = (($rgbOrig >> 16) & 0xFF);
           					$gOrig = (($rgbOrig >>  8) & 0xFF);
           					$bOrig =  ($rgbOrig        & 0xFF);
           
          -					$rgbBlur = ImageColorAt($imgBlur, $x, $y);
          +					$rgbBlur = imagecolorat($imgBlur, $x, $y);
           
           					$rBlur = (($rgbBlur >> 16) & 0xFF);
           					$gBlur = (($rgbBlur >>  8) & 0xFF);
          @@ -138,13 +138,12 @@ static function applyUnsharpMask(&$img, $amount, $radius, $threshold) {
           					$gNew = min(255, max(0, ($amount * ($gOrig - $gBlur)) + $gOrig));
           					$bNew = min(255, max(0, ($amount * ($bOrig - $bBlur)) + $bOrig));
           					$rgbNew = ($rNew << 16) + ($gNew <<8) + $bNew;
          -					ImageSetPixel($img, $x, $y, $rgbNew);
          +					imagesetpixel($img, $x, $y, $rgbNew);
           				}
           			}
           		}
          -		ImageDestroy($imgCanvas);
          -		ImageDestroy($imgBlur);
          +		imagedestroy($imgCanvas);
          +		imagedestroy($imgBlur);
           		return true;
           	}
           }
          -?>
          diff --git a/assets/snippets/phpthumb/snippet.phpthumb.php b/assets/snippets/phpthumb/snippet.phpthumb.php
          index 9ed86ebc..d1b3da6e 100755
          --- a/assets/snippets/phpthumb/snippet.phpthumb.php
          +++ b/assets/snippets/phpthumb/snippet.phpthumb.php
          @@ -4,11 +4,11 @@
            *
            * PHPThumb creates thumbnails and altered images on the fly and caches them
            *
          - * @category 	snippet
          - * @version 	1.3
          - * @license 	http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
          - * @internal	@properties
          - * @internal	@modx_category Content
          + * @category    snippet
          + * @version    1.3.3
          + * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
          + * @internal    @properties
          + * @internal    @modx_category Content
            * @internal    @installset base, sample
            * @documentation Usage: [[phpthumb? &input=`[+image+]` &options=`w=150,h=76,far=C,bg=FFFFFF`]]
            * @documentation phpThumb docs http://phpthumb.sourceforge.net/demo/docs/phpthumb.readme.txt
          @@ -16,71 +16,87 @@
            * @link        noimage.png here [+site_url+]assets/snippets/phpthumb/noimage.png
            * @author      Bumkaka
            * @author      Many contributors since then
          - * @lastupdate  09/04/2016
          + * @lastupdate  26/11/2018
            */
          -if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');}
          -
          -$newfolderaccessmode = $modx->config['new_folder_permissions'] ? octdec($modx->config['new_folder_permissions']) : 0777;
          -
          -$cacheFolder=isset($cacheFolder) ? $cacheFolder : "assets/cache/images";
          -if(!is_dir(MODX_BASE_PATH.$cacheFolder)) {
          -    mkdir(MODX_BASE_PATH.$cacheFolder);
          -    chmod(MODX_BASE_PATH.$cacheFolder, $newfolderaccessmode);
          +if (! defined('MODX_BASE_PATH')) {
          +    die('What are you doing? Get out of here!');
           }
           
          -$tmpFolder = 'assets/cache/tmp';
          -if (!empty($input)) $input = rawurldecode($input);
          +$newFolderAccessMode = $modx->getConfig('new_folder_permissions');
          +$newFolderAccessMode = empty($new) ? 0777 : octdec($newFolderAccessMode);
          +
          +$cacheFolder = isset($cacheFolder) ? $cacheFolder : $modx->getCacheFolder() . 'images';
          +$phpThumbPath = isset($phpThumbPath) ? $phpThumbPath : 'assets/snippets/phpthumb/';
           
          -if(empty($input) || !file_exists(MODX_BASE_PATH . $input)){
          -    $input = isset($noImage) ? $noImage : 'assets/snippets/phpthumb/noimage.png';
          +/**
          + * @see: https://github.com/kalessil/phpinspectionsea/blob/master/docs/probable-bugs.md#mkdir-race-condition
          + */
          +$path = MODX_BASE_PATH . $cacheFolder;
          +if (! file_exists($path) && mkdir($path) && is_dir($path)) {
          +    chmod($path, $newFolderAccessMode);
           }
           
          -// allow read in phpthumb cache folder
          -if (strpos($cacheFolder, 'assets/cache/') === 0 && $cacheFolder != 'assets/cache/' && !is_file(MODX_BASE_PATH . $cacheFolder . '/.htaccess')) {
          -	file_put_contents(MODX_BASE_PATH . $cacheFolder . '/.htaccess', "order deny,allow\nallow from all\n");
          +if (!empty($input)) {
          +    $input = rawurldecode($input);
           }
           
          +if (empty($input) || ! file_exists(MODX_BASE_PATH . $input)) {
          +    $input = isset($noImage) ? $noImage : $phpThumbPath . 'noimage.png';
          +}
           
          -if(!is_dir(MODX_BASE_PATH.$tmpFolder)) {
          -    mkdir(MODX_BASE_PATH.$tmpFolder);
          -    chmod(MODX_BASE_PATH.$tmpFolder, $newfolderaccessmode);
          +/**
          + * allow read in phpthumb cache folder
          + */
          +if (! file_exists(MODX_BASE_PATH . $cacheFolder . '/.htaccess') &&
          +    $cacheFolder !== $modx->getCacheFolder() &&
          +    strpos($cacheFolder, $modx->getCacheFolder()) === 0
          +) {
          +    file_put_contents(MODX_BASE_PATH . $cacheFolder . '/.htaccess', "order deny,allow\nallow from all\n");
           }
           
          -$path_parts=pathinfo($input);
          -$tmpImagesFolder=str_replace(MODX_BASE_PATH . "assets/images","",$path_parts['dirname']);
          -$tmpImagesFolder=str_replace("assets/images","",$tmpImagesFolder);
          -$tmpImagesFolder=explode("/",$tmpImagesFolder);
          -$ext=strtolower($path_parts['extension']);
          -$options = 'f='.(in_array($ext,explode(",","png,gif,jpeg"))?$ext:"jpg&q=85").'&'.strtr($options, Array("," => "&", "_" => "=", '{' => '[', '}' => ']'));
          +$path_parts = pathinfo($input);
          +$tmpImagesFolder = str_replace('assets/images', '', $path_parts['dirname']);
          +$tmpImagesFolder = explode('/', $tmpImagesFolder);
          +$ext = strtolower($path_parts['extension']);
          +$options = 'f=' . (in_array($ext, array('png', 'gif', 'jpeg')) ? $ext : 'jpg&q=85') . '&' .
          +    strtr($options, array(',' => '&', '_' => '=', '{' => '[', '}' => ']'));
          +
           parse_str($options, $params);
           foreach ($tmpImagesFolder as $folder) {
          -    if (!empty($folder)) {
          -        $cacheFolder.="/".$folder;
          -        if(!is_dir(MODX_BASE_PATH.$cacheFolder)) {
          -            mkdir(MODX_BASE_PATH.$cacheFolder);
          -            chmod(MODX_BASE_PATH.$cacheFolder, $newfolderaccessmode);
          +    if (! empty($folder)) {
          +        $cacheFolder .= '/' . $folder;
          +        $path = MODX_BASE_PATH . $cacheFolder;
          +        if (! file_exists($path) && mkdir($path) && is_dir($path)) {
          +            chmod($path, $newFolderAccessMode);
                   }
               }
           }
           
          -$fname_preffix = "$cacheFolder/";
          -$fname = $path_parts['filename'];
          -$fname_suffix = "-{$params['w']}x{$params['h']}-".substr(md5(serialize($params).filemtime(MODX_BASE_PATH . $input)),0,3).".{$params['f']}";
          -$outputFilename = MODX_BASE_PATH.$fname_preffix.$fname.$fname_suffix;
          -if (!file_exists($outputFilename)) {
          -    require_once MODX_BASE_PATH.'assets/snippets/phpthumb/phpthumb.class.php';
          +$fNamePref = rtrim($cacheFolder, '/') . '/';
          +$fName = $path_parts['filename'];
          +$fNameSuf = '-' .
          +    (isset($params['w']) ? $params['w'] : '') .'x' . (isset($params['h']) ? $params['h'] : '') . '-' .
          +    substr(md5(serialize($params) . filemtime(MODX_BASE_PATH . $input)), 0, 3) .
          +    '.' . $params['f'];
          +
          +$outputFilename = MODX_BASE_PATH . $fNamePref . $fName . $fNameSuf;
          +if (! file_exists($outputFilename)) {
          +    if (! class_exists('phpthumb')) {
          +        require_once MODX_BASE_PATH . $phpThumbPath . '/phpthumb.class.php';
          +    }
               $phpThumb = new phpthumb();
          -    $phpThumb->config_temp_directory = $tmpFolder;
          +    $phpThumb->config_cache_directory = MODX_BASE_PATH . $modx->getCacheFolder();
          +    $phpThumb->config_temp_directory = $modx->getCacheFolder();
               $phpThumb->config_document_root = MODX_BASE_PATH;
               $phpThumb->setSourceFilename(MODX_BASE_PATH . $input);
               foreach ($params as $key => $value) {
                   $phpThumb->setParameter($key, $value);
               }
          -	if ($phpThumb->GenerateThumbnail()) {
          +    if ($phpThumb->GenerateThumbnail()) {
                   $phpThumb->RenderToFile($outputFilename);
          -	} else {
          +    } else {
                   $modx->logEvent(0, 3, implode('
          ', $phpThumb->debugmessages), 'phpthumb'); } } -return $fname_preffix.rawurlencode($fname).$fname_suffix; -?> + +return $fNamePref . rawurlencode($fName) . $fNameSuf; diff --git a/index.php b/index.php index 283164d1..d4daf929 100644 --- a/index.php +++ b/index.php @@ -109,7 +109,7 @@ } if (!isset($modx) || !($modx instanceof \DocumentParser)) { include_once(MODX_MANAGER_PATH.'includes/document.parser.class.inc.php'); - $modx = new \DocumentParser; + $modx = DocumentParser::getInstance(); } // set some parser options @@ -135,6 +135,6 @@ } // execute the parser if index.php was not included -if (!MODX_API_MODE) { +if (!MODX_API_MODE && !MODX_CLI) { $modx->executeParser(); } diff --git a/install/actions/action_connection.php b/install/actions/action_connection.php index 8f89954a..e97479c3 100755 --- a/install/actions/action_connection.php +++ b/install/actions/action_connection.php @@ -16,7 +16,8 @@ // We need to have all connection settings - but prefix may be empty so we have to ignore it if ($dbase) { $database_name = trim($dbase, '`'); - if (!$conn = mysqli_connect($database_server, $database_user, $database_password)) + $host = explode(':', $database_server, 2); + if (!$conn = mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null)) $upgradeable = (isset($_POST['installmode']) && $_POST['installmode']=='new') ? 0 : 2; elseif (! mysqli_select_db($conn, trim($dbase, '`'))) $upgradeable = (isset($_POST['installmode']) && $_POST['installmode']=='new') ? 0 : 2; diff --git a/install/actions/action_mode.php b/install/actions/action_mode.php index 385464fa..32a85538 100755 --- a/install/actions/action_mode.php +++ b/install/actions/action_mode.php @@ -5,7 +5,8 @@ include_once $base_path . MGR_DIR . '/includes/config.inc.php'; // We need to have all connection settings - tho prefix may be empty so we have to ignore it if (isset($dbase)) { - if (!$conn = @mysqli_connect($database_server, $database_user, $database_password)) + $host = explode(':', $database_server, 2); + if (!$conn = @mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null)) $upgradeable = isset($_POST['installmode']) && $_POST['installmode'] == 'new' ? 0 : 2; elseif (!@mysqli_select_db($conn, trim($dbase, '`'))) $upgradeable = isset($_POST['installmode']) && $_POST['installmode'] == 'new' ? 0 : 2; diff --git a/install/actions/action_options.php b/install/actions/action_options.php index 4cc26c0f..84e0e9b4 100755 --- a/install/actions/action_options.php +++ b/install/actions/action_options.php @@ -188,14 +188,15 @@ function getSnippets($presets = array()) $database_collation = isset($_POST['database_collation']) ? $_POST['database_collation'] : 'utf8_general_ci'; $database_charset = substr($database_collation, 0, strpos($database_collation, '_')); $_POST['database_connection_charset'] = $database_charset; - if(empty($_SESSION['databaseloginpassword'])) + if(!empty($_POST['databaseloginpassword'])) $_SESSION['databaseloginpassword'] = $_POST['databaseloginpassword']; - if(empty($_SESSION['databaseloginname'])) + if(!empty($_POST['databaseloginname'])) $_SESSION['databaseloginname'] = $_POST['databaseloginname']; break; case 1: include $base_path . MGR_DIR . '/includes/config.inc.php'; - if (@ $conn = mysqli_connect($database_server, $database_user, $database_password)) { + $host = explode(':', $database_server, 2); + if (@ $conn = mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null)) { if (@ mysqli_query($conn, "USE {$dbase}")) { if (!$rs = mysqli_query($conn, "show session variables like 'collation_database'")) { $rs = mysqli_query($conn, "show session variables like 'collation_server'"); diff --git a/install/actions/action_summary.php b/install/actions/action_summary.php index ad7a5911..f72b874f 100755 --- a/install/actions/action_summary.php +++ b/install/actions/action_summary.php @@ -200,7 +200,8 @@ function f_owc($path, $data, $mode = null){ $table_prefix = $_POST['tableprefix']; } echo '

          '.$_lang['creating_database_connection']; -if (!$conn = mysqli_connect($database_server, $database_user, $database_password)) { +$host = explode(':', $database_server, 2); +if (!$conn = mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null)) { $errors++; echo ''.$_lang['database_connection_failed'].'

          '.$_lang['database_connection_failed_note'].'

          '; } else { diff --git a/install/actions/tpl_connection.html b/install/actions/tpl_connection.html index 2b61ca99..d5fd520e 100755 --- a/install/actions/tpl_connection.html +++ b/install/actions/tpl_connection.html @@ -1,286 +1,286 @@ -
          -
            -
          • [%choose_language%]
          • -
          • [%installation_mode%]
          • -
          • [%optional_items%]
          • -
          • [%preinstall_validation%]
          • -
          • [%install_results%]
          • -
          -
          -
          -
          - - - - -

          [%connection_screen_database_info%]

          -

          [%connection_screen_server_connection_information%]

          -

          [%connection_screen_server_connection_note%]

          -

          - - -

          -

          - - -

          -

          - - -

          - - -
          - -
          -
          -

          [%connection_screen_database_connection_information%]

          -

          [%connection_screen_database_connection_note%]

          -

          - - -

          -

          - - -

          -

          - -

          - -
          -

          -

          - -

          - -
          -

          - -
           
          -
          -
          -
          -
          -

          [%connection_screen_defaults%]

          -

          [%connection_screen_default_admin_user%]

          -

          [%connection_screen_default_admin_note%]

          -

          - - -

          -

          - - -

          -

          - - -

          -

          - - -

          -

          [%default_language%]

          -

          [%default_language_description%]

          -

          - - -
          -
          -

          -
          -
          - -
          - - - + + \ No newline at end of file diff --git a/install/assets/plugins/ElementsInTree.tpl b/install/assets/plugins/ElementsInTree.tpl index e151eab5..e46372d7 100755 --- a/install/assets/plugins/ElementsInTree.tpl +++ b/install/assets/plugins/ElementsInTree.tpl @@ -5,7 +5,7 @@ * Get access to all Elements and Modules inside Manager sidebar * * @category plugin - * @version 1.5.9 + * @version 1.5.10 * @license http://creativecommons.org/licenses/GPL/2.0/ GNU Public License (GPL v2) * @internal @properties &adminRoleOnly=Administrators only;list;yes,no;yes;;Show tabs only for users with administrator role. &treeButtonsInTab=Tree buttons in tab;list;yes,no;yes;;Move Tree buttons into Site Tree tab. * @internal @events OnManagerTreePrerender,OnManagerTreeRender,OnManagerMainFrameHeaderHTMLBlock,OnTempFormSave,OnTVFormSave,OnChunkFormSave,OnSnipFormSave,OnPluginFormSave,OnModFormSave,OnTempFormDelete,OnTVFormDelete,OnChunkFormDelete,OnSnipFormDelete,OnPluginFormDelete,OnModFormDelete @@ -20,7 +20,8 @@ * @author Nicola1971 https://github.com/Nicola1971 * @author Deesen https://github.com/Deesen * @author yama https://github.com/yama - * @lastupdate 01/09/2017 + * @author Agel_Nash https://github.com/AgelxNash + * @lastupdate 04/11/2018 */ require MODX_BASE_PATH.'assets/plugins/elementsintree/plugin.elementsintree.php'; diff --git a/install/assets/plugins/OutdatedExtrasCheck.tpl b/install/assets/plugins/OutdatedExtrasCheck.tpl index 3016f260..ed82af0d 100755 --- a/install/assets/plugins/OutdatedExtrasCheck.tpl +++ b/install/assets/plugins/OutdatedExtrasCheck.tpl @@ -1,288 +1,18 @@ -/** - * OutdatedExtrasCheck - * - * Check for Outdated critical extras not compatible with EVO 1.4.0 - * - * @category plugin - * @version 1.4.0 - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) - * @package evo - * @author Author: Nicola Lambathakis - * @internal @events OnManagerWelcomeHome - * @internal @properties &wdgVisibility=Show widget for:;menu;All,AdminOnly,AdminExcluded,ThisRoleOnly,ThisUserOnly;All &ThisRole=Run only for this role:;string;;;(role id) &ThisUser=Run only for this user:;string;;;(username) &DittoVersion=Min Ditto version:;string;2.1.3 &EformVersion=Min eForm version:;string;1.4.9 &AjaxSearchVersion=Min AjaxSearch version:;string;1.11.0 &WayfinderVersion=Min Wayfinder version:;string;2.0.5 &WebLoginVersion=Min WebLogin version:;string;1.2 &WebSignupVersion=Min WebSignup version:;string;1.1.2 &WebChangePwdVersion=Min WebChangePwd version:;string;1.1.2 &BreadcrumbsVersion=Min Breadcrumbs version:;string;1.0.5 &ReflectVersion=Min Reflect version:;string;2.2 &JotVersion=Min Jot version:;string;1.1.5 &MtvVersion=Min multiTV version:;string;2.0.13 &badthemes=Outdated Manager Themes:;string;MODxRE2_DropdownMenu,MODxRE2,MODxRE,MODxCarbon,D3X,MODxFLAT,wMOD,ScienceStyle - * @internal @modx_category Manager and Admin - * @internal @installset base - * @internal @disabled 0 - */ - -// get manager role check -$internalKey = $modx->getLoginUserID(); -$sid = $modx->sid; -$role = $_SESSION['mgrRole']; -$user = $_SESSION['mgrShortname']; -// show widget only to Admin role 1 -if(($role!=1) AND ($wdgVisibility == 'AdminOnly')) {} -// show widget to all manager users excluded Admin role 1 -else if(($role==1) AND ($wdgVisibility == 'AdminExcluded')) {} -// show widget only to "this" role id -else if(($role!=$ThisRole) AND ($wdgVisibility == 'ThisRoleOnly')) {} -// show widget only to "this" username -else if(($user!=$ThisUser) AND ($wdgVisibility == 'ThisUserOnly')) {} -else { -// get plugin id and setting button -$result = $modx->db->select('id', $this->getFullTableName("site_plugins"), "name='{$modx->event->activePlugin}' AND disabled=0"); -$pluginid = $modx->db->getValue($result); -if($modx->hasPermission('edit_plugin')) { -$button_pl_config = ' '; -} -$modx->setPlaceholder('button_pl_config', $button_pl_config); -//plugin lang -$_oec_lang = array(); -$plugin_path = $modx->config['base_path'] . "assets/plugins/extrascheck/"; -include($plugin_path . 'lang/english.php'); -if (file_exists($plugin_path . 'lang/' . $modx->config['manager_language'] . '.php')) { -include($plugin_path . 'lang/' . $modx->config['manager_language'] . '.php'); -} -//run the plugin -// get globals -global $modx,$_lang; -//function to extract snippet version from description tags -if (!function_exists('getver')) { -function getver($string, $tag) -{ -$content ="/<$tag>(.*?)<\/$tag>/"; -preg_match($content, $string, $text); -return $text[1]; - } -} -$e = &$modx->Event; -$EVOversion = $modx->config['settings_version']; -$output = ''; -//get extras module id for the link -$modtable = $modx->getFullTableName('site_modules'); -$getExtra = $modx->db->select( "id, name", $modtable, "name='Extras'" ); -while( $row = $modx->db->getRow( $getExtra ) ) { -$ExtrasID = $row['id']; -} -//check outdated files -//ajax index -$indexajax = "../index-ajax.php"; -if (file_exists($indexajax)){ - $output .= '
          index-ajax.php '.$_oec_lang['not_used'].' Evolution '.$EVOversion.'. '.$_oec_lang['if_dont_use'].', '.$_oec_lang['please_delete'].'.
          '; -} -//check outdated default manager themes -$oldthemes = explode(",","$badthemes"); -foreach ($oldthemes as $oldtheme){ - if (file_exists('media/style/'.$oldtheme)){ - $output .= '
          '.$oldtheme.' '.$_lang["manager_theme"].', '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_delete'].' '.$_oec_lang['from_folder'].' ' . MODX_MANAGER_PATH . 'media/style/.
          '; -} -} -//get site snippets table -$table = $modx->getFullTableName('site_snippets'); -//check ditto -//get min version from config -$minDittoVersion = $DittoVersion; -//search the snippet by name -$CheckDitto = $modx->db->select( "id, name, description", $table, "name='Ditto'" ); -if($CheckDitto != ''){ -while( $row = $modx->db->getRow( $CheckDitto ) ) { -//extract snippet version from description tags -$curr_ditto_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_ditto_version,$minDittoVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_ditto_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minDittoVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].' '.$_oec_lang['or_move_to'].' DocLister
          '; - } - } -} -//end check ditto - -//check eform -//get min version from config -$minEformVersion = $EformVersion; -//search the snippet by name -$CheckEform = $modx->db->select( "id, name, description", $table, "name='eForm'" ); -if($CheckEform != ''){ -while( $row = $modx->db->getRow( $CheckEform ) ) { -//extract snippet version from description tags -$curr_Eform_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_Eform_version,$minEformVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_Eform_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minEformVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].' '.$_oec_lang['or_move_to'].' FormLister
          '; - } - } -} -//end check eform - -//check AjaxSearch -//get min version from config -$minAjaxSearchVersion = $AjaxSearchVersion; -//search the snippet by name -$CheckAjaxSearch = $modx->db->select( "id, name, description", $table, "name='AjaxSearch'" ); -if($CheckAjaxSearch != ''){ -while( $row = $modx->db->getRow( $CheckAjaxSearch ) ) { -//extract snippet version from description tags -$curr_AjaxSearch_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_AjaxSearch_version,$minAjaxSearchVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_AjaxSearch_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minAjaxSearchVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'.
          '; - } - } -} -//end check AjaxSearch - -//check Wayfinder -//get min version from config -$minWayfinderVersion = $WayfinderVersion; -//search the snippet by name -$CheckWayfinder = $modx->db->select( "id, name, description", $table, "name='Wayfinder'" ); -if($CheckWayfinder != ''){ -while( $row = $modx->db->getRow( $CheckWayfinder ) ) { -//extract snippet version from description tags -$curr_Wayfinder_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_Wayfinder_version,$minWayfinderVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_Wayfinder_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minWayfinderVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'.
          '; - } - } -} -//end check Wayfinder - -//check WebLogin -//get min version from config -$minWebLoginVersion = $WebLoginVersion; -//search the snippet by name -$CheckWebLogin = $modx->db->select( "id, name, description", $table, "name='WebLogin'" ); -if($CheckWebLogin != ''){ -while( $row = $modx->db->getRow( $CheckWebLogin ) ) { -//extract snippet version from description tags -$curr_WebLogin_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_WebLogin_version,$minWebLoginVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_WebLogin_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minWebLoginVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].' '.$_oec_lang['or_move_to'].' FormLister
          '; - } - } -} -//end check WebLogin - -//check WebChangePwd -//get min version from config -$minWebChangePwdVersion = $WebChangePwdVersion; -//search the snippet by name -$CheckWebChangePwd = $modx->db->select( "id, name, description", $table, "name='WebChangePwd'" ); -if($CheckWebLogin != ''){ -while( $row = $modx->db->getRow( $CheckWebChangePwd ) ) { -//extract snippet version from description tags -$curr_WebChangePwd_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_WebChangePwd_version,$minWebChangePwdVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_WebChangePwd_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minWebChangePwdVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].' '.$_oec_lang['or_move_to'].' FormLister
          '; - } - } -} -//end check WebChangePwd - -//check WebSignup -//get min version from config -$minWebSignupVersion = $WebSignupVersion; -//search the snippet by name -$CheckWebSignup = $modx->db->select( "id, name, description", $table, "name='WebSignup'" ); -if($CheckWebSignup != ''){ -while( $row = $modx->db->getRow( $CheckWebSignup ) ) { -//extract snippet version from description tags -$curr_WebSignup_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_WebSignup_version,$minWebSignupVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_WebSignup_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minWebSignupVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].' '.$_oec_lang['or_move_to'].' FormLister
          '; - } - } -} -//end check WebSignup - -//check Breadcrumbs -//get min version from config -$minBreadcrumbsVersion = $BreadcrumbsVersion; -//search the snippet by name -$CheckBreadcrumbs = $modx->db->select( "id, name, description", $table, "name='Breadcrumbs'" ); -if($CheckBreadcrumbs != ''){ -while( $row = $modx->db->getRow( $CheckBreadcrumbs ) ) { -//extract snippet version from description tags -$curr_Breadcrumbs_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_Breadcrumbs_version,$minBreadcrumbsVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_Breadcrumbs_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minBreadcrumbsVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'.
          '; - } - } -} -//end check Breadcrumbs - -//check Reflect -//get min version from config -$minReflectVersion = $ReflectVersion; -//search the snippet by name -$CheckReflect = $modx->db->select( "id, name, description", $table, "name='Reflect'" ); -if($CheckReflect != ''){ -while( $row = $modx->db->getRow( $CheckReflect ) ) { -//extract snippet version from description tags -$curr_Reflect_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_Reflect_version,$minReflectVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_Reflect_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minReflectVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'.
          '; - } - } -} -//end check Reflect - -//check Jot -//get min version from config -$minJotVersion = $JotVersion; -//search the snippet by name -$CheckJot = $modx->db->select( "id, name, description", $table, "name='Jot'" ); -if($CheckJot != ''){ -while( $row = $modx->db->getRow( $CheckJot ) ) { -//extract snippet version from description tags -$curr_Jot_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_Jot_version,$minJotVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_Jot_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minJotVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'.
          '; - } - } -} -//end check Jot - -//check Multitv -//get min version from config -$minMtvVersion = $MtvVersion; -//search the snippet by name -$CheckMtv = $modx->db->select( "id, name, description", $table, "name='multiTV'" ); -if($CheckMtv != ''){ -while( $row = $modx->db->getRow( $CheckMtv ) ) { -//extract snippet version from description tags -$curr_mtv_version = getver($row['description'],"strong"); -//check snippet version and return an alert if outdated -if (version_compare($curr_mtv_version,$minMtvVersion,'lt')){ -$output .= '
          ' . $row['name'] . ' '.$_lang["snippet"].' (version ' . $curr_mtv_version . ') '.$_oec_lang['isoutdated'].' Evolution '.$EVOversion.'. '.$_oec_lang['please_update'].' ' . $row['name'] . ' '.$_oec_lang["to_latest"].' ('.$_oec_lang['min _required'].' '.$minMtvVersion.') '.$_oec_lang['from'].' '.$_oec_lang['extras_module'].'
          '; - } - } -} -//end check Multitv - -if($output != ''){ -if($e->name == 'OnManagerWelcomeHome') { -$out = $output; -$wdgTitle = 'EVO '.$EVOversion.' - '.$_oec_lang['title'].''; -$widgets['xtraCheck'] = array( - 'menuindex' =>'0', - 'id' => 'xtraCheck'.$pluginid.'', - 'cols' => 'col-md-12', - 'headAttr' => 'style="background-color:#B60205; color:#FFFFFF;"', - 'bodyAttr' => 'style="background-color:#FFFFFF; color:#24292E;"', - 'icon' => 'fa-warning', - 'title' => ''.$wdgTitle.' '.$button_pl_config.'', - 'body' => '
          '.$out.'
          ', - 'hide' => '0' - ); - $e->output(serialize($widgets)); -return; - } - } -} \ No newline at end of file +/** + * OutdatedExtrasCheck + * + * Check for Outdated critical extras not compatible with EVO 1.4.6 + * + * @category plugin + * @version 1.4.6 + * @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL) + * @package evo + * @author Author: Nicola Lambathakis + * @internal @events OnManagerWelcomeHome + * @internal @properties &wdgVisibility=Show widget for:;menu;All,AdminOnly,AdminExcluded,ThisRoleOnly,ThisUserOnly;AdminOnly &ThisRole=Run only for this role:;string;;;(role id) &ThisUser=Run only for this user:;string;;;(username) + * @internal @modx_category Manager and Admin + * @internal @installset base + * @internal @disabled 0 + */ + +require MODX_BASE_PATH . 'assets/plugins/extrascheck/OutdatedExtrasCheck.plugin.php'; diff --git a/install/assets/plugins/qm.tpl b/install/assets/plugins/qm.tpl index 07db9733..d58ded28 100755 --- a/install/assets/plugins/qm.tpl +++ b/install/assets/plugins/qm.tpl @@ -1,47 +1,47 @@ -//checkSession()) return; - -$show = TRUE; - -if ($disabled != '') { - $arr = array_filter(array_map('intval', explode(',', $disabled))); - if (in_array($modx->documentIdentifier, $arr)) { - $show = FALSE; - } -} - -if ($show) { - // Replace [*#tv*] with QM+ edit TV button placeholders - if ($tvbuttons == 'true') { - if ($modx->event->name == 'OnParseDocument') { - $output = &$modx->documentOutput; - $output = preg_replace('~\[\*#(.*?)\*\]~', '[*$1*]', $output); - $modx->documentOutput = $output; - } - } - include_once($modx->config['base_path'].'assets/plugins/qm/qm.inc.php'); - $qm = new Qm($modx, $jqpath, $loadmanagerjq, $loadfrontendjq, $noconflictjq, $loadfa, $loadtb, $tbwidth, $tbheight, $hidefields, $hidetabs, $hidesections, $addbutton, $tpltype, $tplid, $custombutton, $managerbutton, $logout, $autohide, $position, $editbuttons, $editbclass, $newbuttons, $newbclass, $tvbuttons, $tvbclass, $buttonStyle, $removeBg); -} +//checkSession()) return; + +$show = TRUE; + +if ($disabled != '') { + $arr = array_filter(array_map('intval', explode(',', $disabled))); + if (in_array($modx->documentIdentifier, $arr)) { + $show = FALSE; + } +} + +if ($show) { + // Replace [*#tv*] with QM+ edit TV button placeholders + if ($tvbuttons == 'true') { + if ($modx->event->name == 'OnParseDocument') { + $output = &$modx->documentOutput; + $output = preg_replace('~\[\*#(.*?)\*\]~', '[*$1*]', $output); + $modx->documentOutput = $output; + } + } + include_once($modx->config['base_path'].'assets/plugins/qm/qm.inc.php'); + $qm = new Qm($modx, $jqpath, $loadmanagerjq, $loadfrontendjq, $noconflictjq, $loadfa, $loadtb, $tbwidth, $tbheight, $hidefields, $hidetabs, $hidesections, $addbutton, $tpltype, $tplid, $custombutton, $managerbutton, $logout, $autohide, $position, $editbuttons, $editbclass, $newbuttons, $newbclass, $tvbuttons, $tvbclass, $buttonStyle, $removeBg); +} diff --git a/install/assets/plugins/tinymce4.tpl b/install/assets/plugins/tinymce4.tpl index 29e7a8bd..cfa53026 100755 --- a/install/assets/plugins/tinymce4.tpl +++ b/install/assets/plugins/tinymce4.tpl @@ -10,7 +10,7 @@ * @internal @properties &styleFormats=Custom Style Formats RAW

          • leave empty to use below block/inline formats
          • allows simple-format: Title,cssClass|Title2,cssClass2
          • Also accepts full JSON-config as per TinyMCE4 docs / configure / content-formating / style_formats
          ;textarea; &styleFormats_inline=Custom Style Formats INLINE

          • will wrap selected text with span-tag + css-class
          • simple-format only
          ;textarea;InlineTitle,cssClass1|InlineTitle2,cssClass2 &styleFormats_block=Custom Style Formats BLOCK

          • will add css-class to selected block-element
          • simple-format only
          ;textarea;BlockTitle,cssClass3|BlockTitle2,cssClass4 &customParams=Custom Parameters
          (Be careful or leave empty!);textarea; &entityEncoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &pathOptions=Path Options;list;Site config,Absolute path,Root relative,URL,No convert;Site config &resizing=Advanced Resizing;list;true,false;false &disabledButtons=Disabled Buttons;text; &webTheme=Web Theme;test;webuser &webPlugins=Web Plugins;text; &webButtons1=Web Buttons 1;text;bold italic underline strikethrough removeformat alignleft aligncenter alignright &webButtons2=Web Buttons 2;text;link unlink image undo redo &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400px &introtextRte=Introtext RTE
          add richtext-features to "introtext";list;enabled,disabled;disabled &inlineMode=Inline-Mode;list;enabled,disabled;disabled &inlineTheme=Inline-Mode
          Theme;text;inline &browser_spellcheck=Browser Spellcheck
          At least one dictionary must be installed inside your browser;list;enabled,disabled;disabled &paste_as_text=Force Paste as Text;list;enabled,disabled;disabled * @internal @events OnLoadWebDocument,OnParseDocument,OnWebPagePrerender,OnLoadWebPageCache,OnRichTextEditorRegister,OnRichTextEditorInit,OnInterfaceSettingsRender * @internal @modx_category Manager and Admin - * @internal @legacy_names TinyMCE4 + * @internal @legacy_names TinyMCE Rich Text Editor * @internal @installset base * @logo /assets/plugins/tinymce4/tinymce/logo.png * @reportissues https://github.com/extras-evolution/tinymce4-for-modx-evo diff --git a/install/assets/plugins/updater.tpl b/install/assets/plugins/updater.tpl index 3dc0fa93..c4d55ee0 100755 --- a/install/assets/plugins/updater.tpl +++ b/install/assets/plugins/updater.tpl @@ -1,23 +1,23 @@ -//'.$_lang['status_failed'].''; } else { diff --git a/install/connection.servertest.php b/install/connection.servertest.php index d81e9dab..920c69ab 100755 --- a/install/connection.servertest.php +++ b/install/connection.servertest.php @@ -16,7 +16,8 @@ $output = $_lang["status_connecting"]; if (function_exists('mysqli_connect')) { - if (!$conn = @mysqli_connect($host, $uid, $pwd)) { + $h = explode(':', $host, 2); + if (!$conn = @mysqli_connect($h[0], $uid, $pwd,'', isset($h[1]) ? $h[1] : null)) { $output .= ' '.$_lang['status_failed'].''; } else { $output .= ' '.$_lang['status_passed_server'].''; @@ -43,4 +44,4 @@ } else { $output .= ' '.$_lang['status_failed_mysqli'].''; } -echo $output; \ No newline at end of file +echo $output; diff --git a/install/functions.php b/install/functions.php index f13d4606..ec3be7e5 100755 --- a/install/functions.php +++ b/install/functions.php @@ -98,7 +98,8 @@ function get_installmode() if (!isset($dbase) || empty($dbase)) { $installmode = 0; } else { - $conn = mysqli_connect($database_server, $database_user, $database_password); + $host = explode(':', $database_server, 2); + $conn = mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null); if ($conn) { $_SESSION['database_server'] = $database_server; $_SESSION['database_user'] = $database_user; diff --git a/install/index.php b/install/index.php index dbdb283f..a08bd54b 100755 --- a/install/index.php +++ b/install/index.php @@ -25,6 +25,7 @@ require_once("lang.php"); require_once('../'.MGR_DIR.'/includes/version.inc.php'); +include_once('../'.MGR_DIR.'/includes/preload.functions.inc.php'); // start session session_start(); diff --git a/install/instprocessor.php b/install/instprocessor.php index ebfb539c..1aa29b64 100755 --- a/install/instprocessor.php +++ b/install/instprocessor.php @@ -4,6 +4,7 @@ }else{ define('MGR_DIR', 'manager'); } +define('MODX_CLI', false); global $moduleName; global $moduleVersion; @@ -72,7 +73,8 @@ // connect to the database echo "

          ". $_lang['setup_database_create_connection']; -if (!$conn = mysqli_connect($database_server, $database_user, $database_password)) { +$host = explode(':', $database_server, 2); +if (!$conn = mysqli_connect($host[0], $database_user, $database_password,'', isset($host[1]) ? $host[1] : null)) { echo ''.$_lang["setup_database_create_connection_failed"]."

          ".$_lang['setup_database_create_connection_failed_note']."

          "; return; } else { @@ -124,35 +126,6 @@ } } -if(!function_exists('parseProperties')) { - /** - * parses a resource property string and returns the result as an array - * duplicate of method in documentParser class - * - * @param string $propertyString - * @return array - */ - function parseProperties($propertyString) { - $parameter= array (); - if (!empty ($propertyString)) { - $tmpParams= explode("&", $propertyString); - $countParams = count($tmpParams); - for ($x= 0; $x < $countParams; $x++) { - if (strpos($tmpParams[$x], '=', 0)) { - $pTmp= explode("=", $tmpParams[$x]); - $pvTmp= explode(";", trim($pTmp[1])); - if ($pvTmp[1] == 'list' && $pvTmp[3] != "") - $parameter[trim($pTmp[0])]= $pvTmp[3]; //list default - else - if ($pvTmp[1] != 'list' && $pvTmp[2] != "") - $parameter[trim($pTmp[0])]= $pvTmp[2]; - } - } - } - return $parameter; - } -} - // check status of Inherit Parent Template plugin $auto_template_logic = 'parent'; if ($installMode != 0) { @@ -182,6 +155,7 @@ function parseProperties($propertyString) { include "{$setupPath}/setup.info.php"; include "{$setupPath}/sqlParser.class.php"; $sqlParser = new SqlParser($database_server, $database_user, $database_password, str_replace("`", "", $dbase), $table_prefix, $adminname, $adminemail, $adminpass, $database_connection_charset, $managerlanguage, $database_connection_method, $auto_template_logic); +$sqlParser->database_collation = $database_collation; $sqlParser->mode = ($installMode < 1) ? "new" : "upd"; /* image and file manager paths now handled via settings screen in Manager $sqlParser->imageUrl = 'http://' . $_SERVER['SERVER_NAME'] . $base_url . "assets/"; @@ -587,8 +561,7 @@ function parseProperties($propertyString) { } } if($insert === true) { - $properties = mysqli_real_escape_string($conn, propUpdate($properties,$row['properties'])); - if(!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`".$table_prefix."site_plugins` (name,description,plugincode,properties,moduleguid,disabled,category) VALUES('$name','$desc','$plugin','$properties','$guid','0',$category);")) { + if(!mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`".$table_prefix."site_plugins` (name,description,plugincode,properties,moduleguid,disabled,category) VALUES('$name','$desc','$plugin','$props','$guid','0',$category);")) { echo "

          ".mysqli_error($sqlParser->conn)."

          "; return; } @@ -608,10 +581,11 @@ function parseProperties($propertyString) { if ($ds) { $row = mysqli_fetch_assoc($ds); $id = $row["id"]; - // remove existing events - mysqli_query($sqlParser->conn, 'DELETE FROM ' . $dbase . '.`' . $table_prefix . 'site_plugin_events` WHERE pluginid = \'' . $id . '\''); + $_events = implode("','", $events); // add new events - mysqli_query($sqlParser->conn, "INSERT INTO $dbase.`" . $table_prefix . "site_plugin_events` (pluginid, evtid) SELECT '$id' as 'pluginid',se.id as 'evtid' FROM $dbase.`" . $table_prefix . "system_eventnames` se WHERE name IN ('" . implode("','", $events) . "')"); + mysqli_query($sqlParser->conn, "INSERT IGNORE INTO $dbase.`" . $table_prefix . "site_plugin_events` (pluginid, evtid) SELECT '$id' as 'pluginid',se.id as 'evtid' FROM $dbase.`" . $table_prefix . "system_eventnames` se WHERE name IN ('{$_events}')"); + // remove absent events + mysqli_query($sqlParser->conn, "DELETE `pe` FROM {$dbase}.`{$table_prefix}site_plugin_events` `pe` LEFT JOIN {$dbase}.`{$table_prefix}system_eventnames` `se` ON `pe`.`evtid`=`se`.`id` AND `name` IN ('{$_events}') WHERE ISNULL(`name`) AND `pluginid` = {$id}"); } } } diff --git a/install/lang/polish-utf8.inc.php b/install/lang/polish-utf8.inc.php index 80b8602f..3945afcb 100755 --- a/install/lang/polish-utf8.inc.php +++ b/install/lang/polish-utf8.inc.php @@ -2,8 +2,8 @@ /** * EVO Installer language file * - * @version 1.5.0 - * @date 2018/02/23 + * @version 1.5.1 + * @date 2018/10/31 * @author EVO Project Team * * @language Polish @@ -32,7 +32,7 @@ $_lang["btnclose_value"] = 'Zamknij'; $_lang["btnnext_value"] = 'Dalej'; $_lang["cant_write_config_file"] = 'EVO nie może zapisać pliku konfiguracyjnego. Skopiuj następujący kod do pliku'; -$_lang["cant_write_config_file_note"] = 'Once that\'s been done, you can log into EVO Admin by pointing your browser at YourSiteName.com/[+MGR_DIR+]/.'; +$_lang["cant_write_config_file_note"] = 'Po zakończeniu instalacji będziesz mógł zalogować się do EVO Admin pod adresem: twojadomena.com/[+MGR_DIR+]/'; $_lang["checkbox_select_options"] = 'Zaznacz wybrane opcje: '; $_lang["checking_if_cache_exist"] = 'Sprawdzanie, czy istnieją foldery /assets/cache oraz /assets/cache/rss: '; $_lang["checking_iconv"] = 'Sprawdzanie czy rozszerzenie iconv jest dostępne: '; @@ -49,7 +49,7 @@ $_lang["checking_mysql_version"] = 'Sprawdzanie wersji MySQL: '; $_lang["checking_php_version"] = 'Sprawdzanie wersji PHP: '; $_lang["checking_registerglobals"] = 'Sprawdzanie, czy zmienne globalne (Register_Globals) są wyłączone: '; -$_lang["checking_registerglobals_note"] = 'This configuration makes your site much more susceptible to Cross Site Scripting (XSS) attacks. You should speak to your host about disabling this setting, usually by one of three ways: modifying the global php.ini file, adding rules to a .htaccess file in the root of your EVO install, or adding custom php.ini override files in every directory on your install (and there\'s a lot of them). You will still be able to install EVO, but consider yourself warned.'; +$_lang["checking_registerglobals_note"] = 'Taka konfiguracja powoduje, że Twoja strona jest znacznie bardziej podatna na ataki typu Cross Site Scripting (XSS). Powinieneś wyłączyć tę opcję na serwerze. Są trzy podstawowe sposoby, aby to zrobić: można zmodyfikować główny plik php.ini, dodać regułę w pliku .htaccess znajdującym się w głównym folderze EVO lub dodać własny plik php.ini w każdym z folderów EVO (a jest ich sporo) z ustawieniami nadpisującymi ustawienia globalne. W dalszym ciągu możesz zainstalować EVO - pamiętaj jednak, że zostałeś ostrzeżony.'; $_lang["checking_sessions"] = 'Sprawdzanie, czy obsługa sesji jest skonfigurowana poprawnie: '; $_lang["checking_table_prefix"] = 'Sprawdzanie prefiksu tabeli `'; $_lang["choose_language"] = 'Wybierz język'; @@ -58,7 +58,7 @@ $_lang["connection_screen_collation"] = 'System porównań (collation): '; $_lang["connection_screen_connection_method"] = 'Metoda połączenia: '; $_lang["connection_screen_database_connection_information"] = 'Informacje o bazie danych'; -$_lang["connection_screen_database_connection_note"] = 'Enter the database name to use or which you wish to create for this EVO install. If no database exists, the installer will attempt to create one. This may fail depending on the MySQL user permissions.'; +$_lang["connection_screen_database_connection_note"] = 'Wybierz nazwę bazy danych, którą chcesz użyć dla tej instalacji EVO. Jeśli baza danych nie istnieje, instalator podejmie próbę utworzenia jej. Utworzenie nowej bazy danych może się nie powieść, jeśli użytkownik MySQL nie ma wystarczających uprawnień.'; $_lang["connection_screen_database_host"] = 'Host bazy danych:'; $_lang["connection_screen_database_info"] = 'Informacje o bazie danych'; $_lang["connection_screen_database_login"] = 'Nazwa użytkownika bazy: '; @@ -83,7 +83,7 @@ $_lang["database_use_failed"] = 'Baza danych nie może być użyta!'; $_lang["database_use_failed_note"] = 'Sprawdź prawa dostępu do bazy danych dla wybranego użytkownika i spróbuj ponownie.'; $_lang["default_language"] = 'Domyślny język Menedżera'; -$_lang["default_language_description"] = 'This is the default language that will be used in the EVO Manager back end control panel.'; +$_lang["default_language_description"] = 'Domyślny język dla EVO Manager.'; $_lang["depedency_create"] = 'Zależność utworzona'; $_lang["depedency_update"] = 'Zależność uaktualniona'; $_lang["during_execution_of_sql"] = ' podczas wykonywania zapytania SQL '; @@ -94,8 +94,8 @@ $_lang["guid_set"] = 'GUID ustawiony'; $_lang["help"] = 'Pomoc!'; $_lang["help_link"] = 'https://evo.im/'; -$_lang["help_title"] = 'Installation assistance in the EVO forums'; -$_lang["iagree_box"] = 'I agree to the terms of the EVO license. For translations of the GPL version 2 license, please visit the GNU Operating System website.'; +$_lang["help_title"] = 'Wsparcie przy instalacji EVO'; +$_lang["iagree_box"] = 'Akceptuję warunki licencji EVO. Tłumaczenia licencji GPL w wersji 2 znajdziesz na stronie GNU Operating System.'; $_lang["install"] = 'Instaluj'; $_lang["install_overwrite"] = 'Instaluj/Nadpisz: '; $_lang["install_results"] = 'Wyniki instalacji'; @@ -105,7 +105,7 @@ $_lang["installation_install_new_note"] = 'Wybór tej opcji może spowodować nadpisanie danych w wybranej bazie danych.'; $_lang["installation_mode"] = 'Typ instalacji'; $_lang["installation_new_installation"] = 'Nowa instalacja'; -$_lang["installation_note"] = 'Note: After logging into the manager you should edit and save your System Configuration settings before browsing the site by choosing Tools -> System Configuration in the EVO Manager.'; +$_lang["installation_note"] = 'Uwaga: Zanim zaczniesz przeglądać zasoby swojej strony zaloguj się do Menedżera i zapisz konfigurację. Wybierz zakładkę: Ustawienia -> Konfiguracja systemu.'; $_lang["installation_successful"] = 'Instalacja zakończona pomyślnie!'; $_lang["installation_upgrade_advanced"] = 'Zaawansowany tryb aktualizacji'; $_lang["installation_upgrade_advanced_note"] = 'Tryb dla użytkowników zaawansowanych. Wybierz go, jeśli przenosisz instalację do bazy danych z innym kodowaniem znaków.
          Będziesz potrzebował pełnej nazwy bazy danych, nazwy użytkownika oraz jego hasła, jak również szczegółów dotyczących połączenia i systemu porównań.'; @@ -116,10 +116,10 @@ $_lang["language_code"] = 'pl'; $_lang["loading"] = 'Ładowanie...'; $_lang["modules"] = 'Moduły'; -$_lang["modx_footer1"] = '© 2005-[+current_year+] the EVO Content Management Framework (CMF) project. All rights reserved. EVO is licensed under the GNU GPL.'; -$_lang["modx_footer2"] = 'EVO is free software. We encourage you to be creative and make use of EVO in any way you see fit. Just make sure that if you do make changes and decide to redistribute your modified EVO, that you keep the source code free!'; -$_lang["modx_install"] = 'EVO » Instaluj'; -$_lang["modx_requires_php"] = ', i EVO wymagają PHP [+min_version+] lub późniejszy '; +$_lang["modx_footer1"] = '© 2005-[+current_year+] Evolution CMS. Wszystkie prawa zastrzeżone. EVO działa na licencji GNU GPL.'; +$_lang["modx_footer2"] = 'EVO jest wolnym oprogramowaniem. Zachęcamy Cię, abyś kreatywnie wykorzystywał EVO w jakikolwiek sposób, który uznasz za przydatny. Prosimy jedynie, abyś pozostawił kod źródłowy otwartym i darmowym w przypadku gdy zdecydujesz się na redystrybucję EVO w zmodyfikowanej przez siebie wersji.'; +$_lang["modx_install"] = 'EVO » Instalacja'; +$_lang["modx_requires_php"] = ', i EVO wymagają PHP [+min_version+] lub nowszego'; $_lang["mysql_5051"] = ' MySQL w wersji 5.0.51!'; $_lang["mysql_5051_warning"] = 'Wersja 5.0.51 MySQL posiada wiele dobrze znanych błędów, które mogą przyczynić się do nieprawidłowego działania EVO. Zalecamy uaktualnienie MySQL przed kontynuowaniem instalacji.'; $_lang["mysql_version_is"] = 'Wersja MySQL: '; @@ -129,7 +129,7 @@ $_lang["ok"] = 'OK!'; $_lang["optional_items"] = 'Komponenty opcjonalne'; $_lang["optional_items_note"] = 'Wybierz opcje instalacji, a następnie kliknij przycisk `Instaluj`: '; -$_lang["php_security_notice"] = 'Security notice

          While EVO will work on your PHP version, usage of EVO on this version is not recommended. Your version of PHP is vulnerable to numerous security holes. Please upgrade to PHP version is 5.6 or higher, which patches these holes. It is recommended you upgrade to this version for the security of your own website.

          '; +$_lang["php_security_notice"] = 'Informacja dotycząca bezpieczeństwa

          EVO będzie działać na tej wersji PHP, jednak nie jest ona zalecana. Używana przez Ciebie wersja PHP posiada wiele błędów związanych z bezpieczeństwem. Zaktualizuj PHP do wersji 5.6 lub nowszej, w której błędy bezpieczeństwa nie występują. Zalecamy zmianę wersji PHP na wyższą, ze względu na bezpieczeństwo Twojej strony internetowej.

          '; $_lang["please_correct_error"] = '. Proszę popraw błąd'; $_lang["please_correct_errors"] = '. Proszę popraw błędy'; $_lang["plugins"] = 'Pluginy'; @@ -149,7 +149,7 @@ $_lang["session_problem"] = 'Wystąpił problem z obsługą sesji przez serwer. Proszę skonsultuj się z administratorem aby usunąć ten problem.'; $_lang["session_problem_try_again"] = 'Ponowić próbę?'; $_lang["setup_cannot_continue"] = 'Z powodów wymienionych powyżej instalacja nie może być kontynuowana'; -$_lang["setup_couldnt_install"] = 'EVO setup couldn\'t install/alter some tables inside the selected database.'; +$_lang["setup_couldnt_install"] = 'Instalator EVO nie mógł zainstalować/zmodyfikować niektórych tabel w wybranej bazie danych.'; $_lang["setup_database"] = 'Instalator spróbuje teraz skonfigurować bazę danych:
          '; $_lang["setup_database_create_connection"] = 'Łączenie z bazą danych: '; $_lang["setup_database_create_connection_failed"] = 'Połączenie z bazą danych nie powiodło się!'; @@ -170,12 +170,12 @@ $_lang["status_failed_could_not_create_database"] = 'BŁĄD! - nie można utworzyć bazy danych'; $_lang["status_failed_database_collation_does_not_match"] = 'BŁĄD! - niezgodność systemów porównań; użyj SET NAMES lub wybierz %s'; $_lang["status_failed_table_prefix_already_in_use"] = 'BŁĄD! - wybrany prefiks tabeli jest już wykorzystywany!'; -$_lang['status_failed_mysqli'] = 'error - mysqli extension for PHP is not installed!'; +$_lang['status_failed_mysqli'] = 'Błąd - rozszerzenie mysqli dla PHP nie jest zainstalowane!'; $_lang["status_passed"] = 'OK - baza danych została wybrana'; $_lang["status_passed_database_created"] = 'OK - baza danych utworzona'; $_lang["status_passed_server"] = 'OK - system porównań dostępny'; $_lang["strict_mode"] = 'Tryb `strict sql_mode` dla MySQL jest włączony!'; -$_lang["strict_mode_error"] = 'Certain features of EVO may not work properly unless the STRICT_TRANS_TABLES sql_mode is disabled. You can set the MySQL mode by editing the my.cnf file or contact your server administrator.'; +$_lang["strict_mode_error"] = 'Niektóre z funkcji EVO mogą działać niepoprawnie gdy tryb STRICT_TRANS_TABLES sql_mode jest włączony. Możesz zmienić tryb MySQL edytując plik my.cnf lub kontaktując się z administratorem serwera.'; $_lang["summary_setup_check"] = 'Instalator wykonał serię testów aby sprawdzić, czy wszystko jest gotowe do rozpoczęcia procesu instalacji.'; $_lang["system_configuration"] = 'Konfiguracja systemu'; $_lang["system_configuration_validate_referer_description"] = 'Włączenie weryfikacji nagłówków HTTP_REFERER jest rekomendowane aby zmniejszyć prawdopodobieństwo ataków CSRF, jednak przy niektórych konfiguracjach serwera może spowodować, że Menedżer EVO będzie niedostępny.'; @@ -195,11 +195,11 @@ $_lang["upgrade_note"] = 'Uwaga: Przed rozpoczęciem przeglądania swojej strony zaloguj się jako administrator do Menedżera EVO, a następnie sprawdź i zapisz konfigurację systemu.'; $_lang["upgraded"] = 'Zaktualizowano'; $_lang["validate_referer_title"] = 'Weryfikuj nagłówki HTTP_REFERER?'; -$_lang["visit_forum"] = ', visit the EVO Forums.'; +$_lang["visit_forum"] = ', odwiedź Forum EVO.'; $_lang["warning"] = 'UWAGA!'; $_lang["welcome_message_start"] = 'Najpierw wybierz typ instalacji: '; $_lang["welcome_message_text"] = 'Ten kreator przeprowadzi Cię przez proces instalacji.'; -$_lang["welcome_message_welcome"] = 'Welcome to the EVO installation program.'; +$_lang["welcome_message_welcome"] = 'Witamy w instalatorze EVO.'; $_lang["writing_config_file"] = 'Zapisywanie pliku konfiguracyjnego: '; $_lang["yes"] = 'Tak'; $_lang["you_running_php"] = '- włączone PHP'; diff --git a/install/lang/russian-UTF8.inc.php b/install/lang/russian-UTF8.inc.php index 91b01611..4802e134 100755 --- a/install/lang/russian-UTF8.inc.php +++ b/install/lang/russian-UTF8.inc.php @@ -6,8 +6,8 @@ * @author Safronovich Victor * @author Rudnykh Vitalii * @author Russian EVO Community - * @version 1.5.0 - * @date 2018/02/23 + * @version 1.4.5 + * @date 2018/10/31 * * @language Russian * @package modx @@ -38,6 +38,8 @@ $_lang["cant_write_config_file"] = 'Программа установки не смогла записать файл конфигурации. Скопируйте вышеперечисленное в файл '; $_lang["cant_write_config_file_note"] = 'Как только вы это сделаете, вы можете войти в панель управления, перейдя в браузере по адресу Адрес_Вашего_Сайта/[+MGR_DIR+]/.'; $_lang["checkbox_select_options"] = 'Параметры выбора флажков:'; +$_lang["checking_iconv"] = 'Проверка доступности iconv: '; +$_lang["checking_iconv_note"] = 'Необходимо установить/включить расширение iconv. Пожалуйста, обратитесь к администратору сервера, чтобы сделать это.'; $_lang["checking_if_cache_exist"] = 'Проверка существования папок /assets/cache и /assets/cache/rss: '; $_lang["checking_if_cache_file_writable"] = 'Проверка возможности записи в файл /assets/cache/siteCache.idx.php: '; $_lang["checking_if_cache_file2_writable"] = 'Проверка возможности записи в файл /assets/cache/sitePublishing.idx.php: '; @@ -136,11 +138,14 @@ $_lang["please_correct_errors"] = '. Исправьте эти ошибки'; $_lang["plugins"] = 'Плагины'; $_lang["preinstall_validation"] = 'Проверка перед установкой'; +$_lang["recommend_collation"] = 'utf8_general_ci'; +$_lang["recommend_collations_order"] = 'utf8mb4_unicode_ci,utf8mb4_general_ci,utf8_unicode_ci,utf8_general_ci,utf8mb4_bin,utf8_bin,utf8mb4_unicode_520_ci,utf8_unicode_520_ci,utf8_general_mysql500_ci'; $_lang["recommend_setting_change_title"] = 'Рекомендуемое изменение настройки'; $_lang["recommend_setting_change_validate_referer_confirmation"] = 'Изменить установку: Проверять заголовки HTTP_REFERER?'; $_lang["recommend_setting_change_validate_referer_description"] = 'Ваш сайт не настроен на проверку серверных заголовков HTTP_REFERER во входящих запросах в систему управления. Мы настоятельно рекомендуем включить этот параметр, чтобы снизить риск CSRF (Cross Site Request Forgery - подделка межсайтовых запросов) атак.'; $_lang["remove_install_folder_auto"] = 'Удалить папку и файлы программы установки с моего сайта
           (Для выполнения этой операции необходимы права на запись в папку install).'; $_lang["remove_install_folder_manual"] = 'Пожалуйста, удалите папку "install" прежде чем войти в панель управления.'; +$_lang["resetting_database"] = 'Обновить базу данных демо-сайта: '; $_lang["retry"] = 'Повторить'; $_lang["running_database_updates"] = 'Обновление базы данных: '; $_lang["sample_web_site"] = 'Пример веб-сайта'; @@ -202,4 +207,3 @@ $_lang["writing_config_file"] = 'Запись конфигурационного файла: '; $_lang["yes"] = 'Да'; $_lang["you_running_php"] = ' - вы используете PHP '; -?> \ No newline at end of file diff --git a/install/lang/spanish-utf8.inc.php b/install/lang/spanish-utf8.inc.php index 94fc6cba..d158c8b1 100755 --- a/install/lang/spanish-utf8.inc.php +++ b/install/lang/spanish-utf8.inc.php @@ -1,13 +1,13 @@ assets/cache existe: '; +$_lang["checking_iconv"] = 'Checking if extension iconv is available: '; +$_lang["checking_iconv_note"] = 'It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it.'; $_lang["checking_if_cache_file_writable"] = 'Comprobando que el archivo assets/cache/siteCache.idx.php es escribible: '; $_lang["checking_if_cache_file2_writable"] = 'Comprobando que el archivo assets/cache/sitePublishing.idx.php es escribible: '; $_lang["checking_if_cache_writable"] = 'Comprobando que el directorio assets/cache es escribible: '; @@ -47,7 +49,7 @@ $_lang["checking_mysql_version"] = 'Checando la versión de MySQL: '; $_lang["checking_php_version"] = 'Checando la versión de PHP: '; $_lang["checking_registerglobals"] = 'Checando si Register_Globals está deshabilitado (off): '; -$_lang["checking_registerglobals_note"] = 'Esta configuración hace tu sitio mucho más propenso a ataques de programas (Cross Site Scripting - XSS). Deberías hablar con tu proveedor de hospedaje para deshabilitar esta configuración, normalmente de una de estas tres maneras: modificando el archivo php.ini global, añadiendo reglas al archivo .htaccess en la raíz de tu instalación de MODX o añadiendo archivos personalizados de php.ini en cada directorio de tu instalación (y hay muchos de ellos). Todavía podrás instalar MODX, pero considérate advertido.'; +$_lang["checking_registerglobals_note"] = 'Esta configuración hace tu sitio mucho más propenso a ataques de programas (Cross Site Scripting - XSS). Deberías hablar con tu proveedor de hospedaje para deshabilitar esta configuración, normalmente de una de estas tres maneras: modificando el archivo php.ini global, añadiendo reglas al archivo .htaccess en la raíz de tu instalación de Evo o añadiendo archivos personalizados de php.ini en cada directorio de tu instalación (y hay muchos de ellos). Todavía podrás instalar Evo, pero considérate advertido.'; $_lang["checking_sessions"] = 'Checando si las sesiones están apropiadamente configuradas: '; $_lang["checking_table_prefix"] = 'Checando el prefijo de las tablas `'; $_lang["choose_language"] = 'Elige Lengua'; @@ -56,7 +58,7 @@ $_lang["connection_screen_collation"] = 'Compaginación:'; $_lang["connection_screen_connection_method"] = 'Método de Conexión:'; $_lang["connection_screen_database_connection_information"] = 'Información de la base de datos'; -$_lang["connection_screen_database_connection_note"] = 'Favor de escribir el nombre de la base de datos creada para MODX. Si no existe una base de datos todavía, el instalador tratará de crear una para ti. Esto puede fallar dependiendo de la configuración de MySQL o de los permisos del usuario de bases de datos para tu dominio/instalación.'; +$_lang["connection_screen_database_connection_note"] = 'Favor de escribir el nombre de la base de datos creada para Evo. Si no existe una base de datos todavía, el instalador tratará de crear una para ti. Esto puede fallar dependiendo de la configuración de MySQL o de los permisos del usuario de bases de datos para tu dominio/instalación.'; $_lang["connection_screen_database_host"] = 'Servidor de base de datos:'; $_lang["connection_screen_database_info"] = 'Información de la base de datos'; $_lang["connection_screen_database_login"] = 'Nombre de usuario de la base de datos:'; @@ -65,7 +67,7 @@ $_lang["connection_screen_database_test_connection"] = 'Haz clic aquí para crear tu base de datos o para probar la selección de tu base de datos'; $_lang["connection_screen_default_admin_email"] = 'Email del administrador:'; $_lang["connection_screen_default_admin_login"] = 'Nombre de usuario para el administrador:'; -$_lang["connection_screen_default_admin_note"] = 'Ahora necesitarás escribir algunos detalles para la cuenta principal del administrador de MODX. Puedes llenar tu nombre y una contraseña que no se te vaya a olvidar. Necesitarás esta información para entrar al administrador una vez que la configuración esté completa.'; +$_lang["connection_screen_default_admin_note"] = 'Ahora necesitarás escribir algunos detalles para la cuenta principal del administrador de Evo. Puedes llenar tu nombre y una contraseña que no se te vaya a olvidar. Necesitarás esta información para entrar al administrador una vez que la configuración esté completa.'; $_lang["connection_screen_default_admin_password"] = 'Contraseña para Administrador:'; $_lang["connection_screen_default_admin_password_confirm"] = 'Confirmar contraseña:'; $_lang["connection_screen_default_admin_user"] = 'Usuario Administrador Prefijado'; @@ -81,7 +83,7 @@ $_lang["database_use_failed"] = '¡No se pudo seleccionar la base de datos!'; $_lang["database_use_failed_note"] = 'Favor de revisar los permisos de base de datos para el usuario especificado y vuélvelo a intentar.'; $_lang["default_language"] = 'Idioma del Administrador Prefijado'; -$_lang["default_language_description"] = 'Este es el idioma prefijado que será usado en el panel de control del Administrador de MODX.'; +$_lang["default_language_description"] = 'Este es el idioma prefijado que será usado en el panel de control del Administrador de Evo.'; $_lang["depedency_create"] = 'Dependencia creada'; $_lang["depedency_update"] = 'Dependencia actualizada'; $_lang["during_execution_of_sql"] = ' durante la ejecución del comando SQL '; @@ -92,8 +94,8 @@ $_lang["guid_set"] = 'Ajuste del GUID'; $_lang["help"] = '!Ayuda!'; $_lang["help_link"] = 'http://forums.modx.com/'; -$_lang["help_title"] = 'Asistencia para la instalación en los foros de MODX'; -$_lang["iagree_box"] = 'Estoy de acuerdo con los términos de la licencia de MODX. Para las traducciones de la licencia GPL version 2, por favor visitar el sitio del Sistema Operativo GNU.'; +$_lang["help_title"] = 'Asistencia para la instalación en los foros de Evo'; +$_lang["iagree_box"] = 'Estoy de acuerdo con los términos de la licencia de Evo. Para las traducciones de la licencia GPL version 2, por favor visitar el sitio del Sistema Operativo GNU.'; $_lang["install"] = 'Instalar'; $_lang["install_overwrite"] = 'Instalar/Sobrescribir'; $_lang["install_results"] = 'Resultados de Instalación'; @@ -103,7 +105,7 @@ $_lang["installation_install_new_note"] = 'Favor de notar que esta opción puede sobreescribir cualquier dato en tu base de datos.'; $_lang["installation_mode"] = 'Modo de Instalación'; $_lang["installation_new_installation"] = 'Instalación Nueva'; -$_lang["installation_note"] = 'Nota: Después de entrar al sistema de administración de MODX, debes de editar y guardar las configuraciones del sistema antes de navegar por el sitio al ir a Herramientas -> Configuración del Sistema en el administrador de MODX.'; +$_lang["installation_note"] = 'Nota: Después de entrar al sistema de administración de Evo, debes de editar y guardar las configuraciones del sistema antes de navegar por el sitio al ir a Herramientas -> Configuración del Sistema en el administrador de Evo.'; $_lang["installation_successful"] = '¡La instalación fue exitosa!'; $_lang["installation_upgrade_advanced"] = 'Actualización Avanzada'; $_lang["installation_upgrade_advanced_note"] = 'Para administradores avanzados de base de datos o para cambiar a servidores con una conexión de base de datos con un conjunto de caracteres diferente. Necesitarás saber el nombre completo de tu base de datos, su usuario, contraseña, y detalles de su conexión y compaginación.'; @@ -114,10 +116,10 @@ $_lang["language_code"] = 'es'; $_lang["loading"] = 'Cargando...'; $_lang["modules"] = 'Módulos'; -$_lang["modx_footer1"] = '© 2005-[+current_year+] del proyecto de MODX Content Management Framework (CMF). Todos los derechos reservados. MODX tiene licencia GPL de GNU.'; -$_lang["modx_footer2"] = 'MODX es software gratuito. Te invitamos a ser creativo y usarlo de cualquier manera que se te antoje. Sólo asegura que si haces cambios y decides distribuir una versión modificada de MODX que el código fuente siga siendo gratis.'; -$_lang["modx_install"] = 'MODX » Instalar'; -$_lang["modx_requires_php"] = ', y MODX requiere de PHP versión [+min_version+] o mayor'; +$_lang["modx_footer1"] = '© 2005-[+current_year+] del proyecto de Evo Content Management Framework (CMF). Todos los derechos reservados. Evo tiene licencia GPL de GNU.'; +$_lang["modx_footer2"] = 'Evo es software gratuito. Te invitamos a ser creativo y usarlo de cualquier manera que se te antoje. Sólo asegura que si haces cambios y decides distribuir una versión modificada de Evo que el código fuente siga siendo gratis.'; +$_lang["modx_install"] = 'Evo » Instalar'; +$_lang["modx_requires_php"] = ', y Evo requiere de PHP versión [+min_version+] o mayor'; $_lang["mysql_5051"] = ' la versión del servidor de MySQL es 5.0.51!'; $_lang["mysql_5051_warning"] = 'Se sabe de algunos problemas con MySQL 5.0.51. Es recomendado que actualices antes de continuar.'; $_lang["mysql_version_is"] = ' Tu versión de MySQL es: '; @@ -127,16 +129,19 @@ $_lang["ok"] = 'OK'; $_lang["optional_items"] = 'Opciones adicionales'; $_lang["optional_items_note"] = 'Escoge tus opciones de instalación y haz clic en Instalar:'; -$_lang["php_security_notice"] = 'Aviso de Seguridad

          Aunque MODX puede funcionar con esta versión de PHP, no lo recomendamos. Tu versión de PHP es vulnerable a numerosos problemas de seguridad. Por favor actualiza a la versión PHP 4.3.8 o mayor, la cual resuelve estos problemas. Se recomienda que actualices a esta versión para la seguridad de tu propio sitio de internet.

          '; +$_lang["php_security_notice"] = 'Aviso de Seguridad

          Aunque Evo puede funcionar con esta versión de PHP, no lo recomendamos. Tu versión de PHP es vulnerable a numerosos problemas de seguridad. Por favor actualiza a la versión PHP 4.3.8 o mayor, la cual resuelve estos problemas. Se recomienda que actualices a esta versión para la seguridad de tu propio sitio de internet.

          '; $_lang["please_correct_error"] = '. Favor de corregir el error'; $_lang["please_correct_errors"] = '. Favor de corregir los errores'; $_lang["plugins"] = 'Plugins'; $_lang["preinstall_validation"] = 'Validación previa a la instalación'; +$_lang["recommend_collation"] = 'utf8_general_ci'; +$_lang["recommend_collations_order"] = 'utf8mb4_unicode_ci,utf8mb4_general_ci,utf8_unicode_ci,utf8_general_ci,utf8mb4_bin,utf8_bin,utf8mb4_unicode_520_ci,utf8_unicode_520_ci,utf8_general_mysql500_ci'; $_lang["recommend_setting_change_title"] = 'Se Recomienda cambiar configuración'; $_lang["recommend_setting_change_validate_referer_confirmation"] = 'Cambiar configuración: ¿ Validar cabeceras HTTP_REFERER ?'; $_lang["recommend_setting_change_validate_referer_description"] = 'Su sitio web no está configurado para validar las peticiones entrantes HTTP_REFERER al Manager. Recomendamos habilitar esta configuración para reducir el riesgo de un ataque CSRF (Falsificación de petición en sitios cruzados).'; $_lang["remove_install_folder_auto"] = 'Borrar la carpeta de instalación y sus archivos de mi sitio de internet
           (Esta operación requiere los permisos correctos para borrar la carpeta).'; $_lang["remove_install_folder_manual"] = 'Por favor recuerda borrar la carpeta "install" antes de entrar al sistema de administración.'; +$_lang["resetting_database"] = 'Resetting database for demo-site: '; $_lang["retry"] = 'Volver a Intentar'; $_lang["running_database_updates"] = 'Actualizando la base de datos: '; $_lang["sample_web_site"] = 'Sitio de Muestra'; @@ -144,7 +149,7 @@ $_lang["session_problem"] = 'Un problema fue detectado con tus sesiones de servidor. Por favor consulta con tu admin de servidor para corregir este problema.'; $_lang["session_problem_try_again"] = '¿Intentar nuevamente?'; $_lang["setup_cannot_continue"] = 'Desafortunadamente, el configurador no puede continuar en este momento, debido a lo anterior '; -$_lang["setup_couldnt_install"] = 'El configurador de MODX no pudo instalar/alterar algunas tablas dentro de la base de datos seleccionada.'; +$_lang["setup_couldnt_install"] = 'El configurador de Evo no pudo instalar/alterar algunas tablas dentro de la base de datos seleccionada.'; $_lang["setup_database"] = 'El configurador intentará ahora configurar la base de datos:
          '; $_lang["setup_database_create_connection"] = 'Creando una conexión a la base de datos: '; $_lang["setup_database_create_connection_failed"] = '¡La conexión a la base de datos falló!'; @@ -170,17 +175,16 @@ $_lang["status_passed_database_created"] = 'pasó - base de datos creada'; $_lang["status_passed_server"] = 'pasó - compaginaciones ahora disponibles'; $_lang["strict_mode"] = ' !El modo sql_mode estricto del servidor MySQL está habilitado!'; -$_lang["strict_mode_error"] = 'Algunas características de MODX pueden no trabajar apropiadamente a no se de que el modo STRICT_TRANS_TABLES sql_mode esté habilitado. Puedes configurar el modo de MySQL al editar el archivo my.cnf o contactar al administrador de tu servidor.'; +$_lang["strict_mode_error"] = 'Algunas características de Evo pueden no trabajar apropiadamente a no se de que el modo STRICT_TRANS_TABLES sql_mode esté habilitado. Puedes configurar el modo de MySQL al editar el archivo my.cnf o contactar al administrador de tu servidor.'; $_lang["summary_setup_check"] = 'El configurador ha revisado varios elementos para ver si todo está listo para comenzar la configuración.'; $_lang["system_configuration"] = 'Configuración de sistema'; -$_lang["system_configuration_validate_referer_description"] = 'Es recomendable configurar la Validación de Cabeceras HTTP_REFERER para proteger su sitio contra ataques CSRF, pero en algunos servidores esta opción puede ser inaccesible. -'; +$_lang["system_configuration_validate_referer_description"] = 'Es recomendable configurar la Validación de Cabeceras HTTP_REFERER para proteger su sitio contra ataques CSRF, pero en algunos servidores esta opción puede ser inaccesible.'; $_lang["table_prefix_already_inuse"] = ' - ¡Este prefijo ya se está usando en esta base de datos!'; $_lang["table_prefix_already_inuse_note"] = 'El configurador no puede instalar en la base de datos seleccionada, ya contiene tablas con el prefijo que especificaste. Por favor escoge un nuevo prefijo para tablas y corre el configurador otra vez.'; $_lang["table_prefix_not_exist"] = ' - ¡Este prefijo no existe en esta base de datos!'; $_lang["table_prefix_not_exist_note"] = 'El configurador no pudo instalar en la base de datos seleccionada, no contiene tablas existentes con el prefijo que especificaste para ser actualizadas. Por favor escoge un prefijo de tablas existente y corre el configurador otra vez.'; $_lang["templates"] = 'Templates'; -$_lang["to_log_into_content_manager"] = 'Para entrar al sistema de administración de MODX ([+MGR_DIR+]/index.php) dando clic en el botón de `Cerrar`.'; +$_lang["to_log_into_content_manager"] = 'Para entrar al sistema de administración de Evo ([+MGR_DIR+]/index.php) dando clic en el botón de `Cerrar`.'; $_lang["toggle"] = 'Invertir'; $_lang['tvs'] = 'Template Variables'; $_lang["unable_install_chunk"] = 'No se pudo instalar el chunk. Archivo'; @@ -191,11 +195,11 @@ $_lang["upgrade_note"] = 'Nota: Antes de navegar por tu sitio debes de entrar al admin con una cuenta de administrador, revisar y guardar tus configuraciones del Sistema.'; $_lang["upgraded"] = 'Actualizado'; $_lang["validate_referer_title"] = 'Validar encabezados HTTP_REFERER?'; -$_lang["visit_forum"] = 'visita los Foros de MODX.'; +$_lang["visit_forum"] = 'visita los Foros de Evo.'; $_lang["warning"] = '!ADVERTENCIA!'; $_lang["welcome_message_start"] = 'Primero, elige el tipo de instalación a efectuarse:'; $_lang["welcome_message_text"] = 'Este programa te guiará por el resto de la instalación.'; -$_lang["welcome_message_welcome"] = 'Bienvenido al programa de instalación de MODX.'; +$_lang["welcome_message_welcome"] = 'Bienvenido al programa de instalación de Evo.'; $_lang["writing_config_file"] = 'Escribiendo el archivo de configuración: '; $_lang["yes"] = 'Si'; $_lang["you_running_php"] = ' - Estás operando con PHP '; diff --git a/install/setup.data.sql b/install/setup.data.sql index 4a567d65..fe2cb4f4 100755 --- a/install/setup.data.sql +++ b/install/setup.data.sql @@ -1,208 +1,208 @@ -# EVO Database Script for New/Upgrade Installations -# -# Each sql command is separated by double lines - -# -# Dumping data for table `documentgroup_names` -# - -REPLACE INTO `{PREFIX}document_groups` VALUES ('1','1','3'); - -REPLACE INTO `{PREFIX}documentgroup_names` VALUES ('1','Site Admin Pages','0','0'); - -# -# Dumping data for table `site_content` -# - -REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to EVO','Introduction to EVO','index','','1','0','0','0','0','Create and do amazing things with EVO','

          Install successful!

          \n

          You have successfully installed and configured EVO. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

          \n
            \n
          • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
          • \n
          • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
          • \n
          • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
          • \n
          • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
          • \n
          • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
          • \n
          • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
          • \n
          • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
          • \n
          • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
          • \n
          • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
          • \n
          • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
          • \n
          • Newest documents list. Shows your visitor the most recently added pages (configurable).
          • \n
          • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
          • \n
          • phpThumb. Examples to use phpThumb to crop images.
          • \n
          \n

          Full documentation can be found on the official documentation site.

          \n

          To log into the EVO Control Panel and start customizing this site, point your browser to /manager/.

          ','1','4','0','1','1','1','1144904400','1','1507728141','0','0','0','0','0','Home','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[DocLister? \n &jotcount=`1`\n &parents=`2` \n &display=`2`\n &tvPrefix=``\n &tvList=`image`\n &prepare=`prepareBlog`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n
          \n [+blog-image+] \n

          [+e.title+]

          \n
          \n By [+author+] on [+date+].\n Comments [+jotcount+]\n
          \n [+summary+]\n

          [+link+]

          \n
          ` \n &paginate=`1` \n]]\n\n

          Showing [+current+] of [+totalPages+] Pages

          \n
          [+pages+]
          \n

           

          ','0','4','1','0','1','1','1144904400','1','1507727477','0','0','0','0','0','Blog','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','Profile','User profile','','profile','','1','0','0','0','1','','[!FormLister?\n&debug=`1`\n&formid=`login`\n&controller=`Login`\n&loginField=`email`\n&redirectTo=`49`\n&defaults=`{\"rememberme\":1}`\n&rules=`{\n \"email\":{\n \"required\":\"Enter your Email\"\n },\n \"password\":{\n \"required\":\"Enter your password\"\n }\n}`\n&formTpl=`@CODE:\n\n

          In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

          \n\n
          \n [+form.messages+]\n \n
          \n
          \n \n \n
          \n
          \n
          \n
          \n \n \n
          \n
          \n\n
          \n \n
          \n \n
          \n
          \n
          \n`\n&skipTpl=`@CODE:\n
          Hello!
          \n `\n\n&allowedFields=`email,password`\n&errorTpl=`@CODE:

          [+message+]

          `\n&messagesOuterTpl=`@CODE:\n
          [+messages+]
          `\n\n&errorClass=` has-error` \n&requiredClass=` has-warning`\n!] \n','0','4','6','0','1','1','1144904400','1','1509817775','0','0','0','0','0','','0','0','0','0','0','0'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','4','0','',' [!FormLister?\n &formid=`registerForm`\n &controller=`Register`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &captcha=`modxCaptcha`\n &formTpl=`@CODE: \n\n
          \n \n

          User Details

          \n
          \n \n Items marked by * are required\n
          \n \n
          \n \n \n [+username.error+]\n
          \n \n
          \n \n \n [+fullname.error+]\n
          \n \n
          \n \n \n [+email.error+]\n
          \n\n
          \n

          Password

          \n \n \n [+password.error+]\n
          \n
          \n \n \n [+repeatPassword.error+]\n
          \n \n
          \n

          Optional Account Profile Info

          \n \n \n [+country.error+]\n
          \n \n
          \n

          Bot-Patrol

          \n

          Enter the word/number combination shown in the image below.

          \n \n

          \"If

          \n \n [+vericode.error+]\n
          \n \n
          \n \n
          \n\n
          \n\n\n\n `\n &successTpl=`@CODE:\n

          Signup completed successfully!
          \n Your account was created. A copy of your signup information was sent to your email address.

          \n `\n &subject=`New registration, [(site_name)]`\n &ccSender=`1`\n &ccSenderTpl=`@CODE:\n

          [+fullname.value+], signup completed successfully!

          \n Login: [+email.value+]
          \n Password: [+user.password+]
          \n `\n !]','0','4','1','0','1','1','1144904400','1','1515584252','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n\n
          \n {{ContactForm}}\n
          \n','0','4','5','1','1','1','1144904400','1','1507815490','0','0','0','0','0','Contact us','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

          Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

          \n

          [[DLMenu? &parents=`0`]]

          \n

          Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

          ','1','4','10','0','1','1','1144904400','1','1507728168','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','4','8','0','1','1','1144904400','1','1507728119','0','0','0','0','0','','1','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with EVO Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

          Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

          \n
            \n
          1. Login to the EVO Control Panel.
          2. \n
          3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
          4. \n
          5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
          6. \n\n
          7. Write or edit the content and press save, making sure the document is published.
          8. \n
          9. Everything else is automatic; you\'re done!
          10. \n
          ','1','4','0','1','1','-1','1144904400','1','1509818890','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','application/rss+xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','\n\n\n [(site_name)]\n [(site_url)]\n Evolution CMS demo site Feed\n [[DocLister? \n &parents=`2` \n &display=`20`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n [+e.title+]\n [(site_url)][~[+id+]~]\n \n [+date+]\n [(site_url)][~[+id+]~]\n [+author+]\n `\n ]]\n\n','0','0','9','0','1','1','1144904400','1','1507728107','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

          Manage your content in the backend

          \n

          The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. EVO\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

          \n

          Manage your content in the frontend

          \n

          The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

          \n

          Enable web users to add content

          \n

          Custom data entry is easy to code using the EVO API - so you can design forms and collect whatever information you need.

          ','1','4','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','EVO Features','EVO Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','4','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','

          Ajax ready out-of-the-box

          \n

          EVO empowers users to build engaging sites today, with its pre-integrated jQuery javascript library.

          \n

          Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

          \n

          Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

          \n

          Web 2.0 today

          \n

          EVO makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

          ','1','4','1','1','1','1','1144904400','1','1507726420','0','0','0','1159264800','1','Ajax','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

          Not so exciting, after all, eh?

          ','1','4','2','1','1','-1','1144904400','1','1509818884','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

          Your documents - listed how you want them

          \n

          EVO\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

          \n

          Since the last release of EVO, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

          \n

          Wayfinder - the menu builder

          \n

          Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

          \n

          Ditto - the document lister

          \n

          Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

          \n

          Unlimited Customization

          \n

          If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the EVO repository. EVO\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

          ','1','4','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

          The EVO community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

          \n

          Template Variables with Bindings

          \n

          TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

          \n

          Using jQuery-effects

          \n

          We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

          \n

          Custom Forms

          \n

          To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

          \n

          And more

          \n

          Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

          \n

          Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

          ','1','4','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

          Credits

          \n

          The EVO Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

          ','1','4','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with EVO','','getting-help','','1','0','0','0','0','','

          The team behind EVO strives to constantly add to and refine the documentation to help you get up to speed with EVO:

          \n
            \n
          • For basic instructions on integrating custom templates into EVO, please see the Designer\'s Guide.
          • \n
          • For an introduction to working in EVO from the content editors perspectve, see the Content Editor\'s Guide.
          • \n
          • For a detailed overview of the backend \"manager\" and setting up Users and Groups, please peruse the Administration Guide.
          • \n
          • For developers, architecture and API documentation can be found in the Developer\'s Guide.
          • \n
          • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
          • \n
          \n

          And don\'t forget, you can always learn and ask questions at the EVO forums.

          ','1','4','3','1','1','2','1144904400','1','1507728208','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','Forgot Password','','','forgot-password','','1','0','0','4','0','','[!FormLister?\n&controller=`Reminder`\n&formid=`remind`\n&rules=`{\n \"email\":{\n \"required\":\"Be sure to enter email\",\n \"email\":\"Enter email correctly\"\n }\n}`\n&resetRules=`{\n \"password\":{\n \"required\":\"Be sure to enter the password\",\n \"minLength\":{\n \"params\":6,\n \"message\":\"Password must be longer than 6 characters\"\n }\n },\n \"repeatPassword\":{\n \"required\":\"Repeat password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n}`\n&formTpl=`@CODE:\n\n
          \n [+form.messages+]\n \n
          \n \n
          \n \n [+email.error+]\n
          \n\n
          \n \n
          \n
          \n
          `\n\n&resetTpl=`@CODE:\n
          \n [+form.messages+]\n \n
          \n \n
          \n \n [+password.error+]\n \n [+repeatPassword.error+]\n
          \n
          \n \n
          \n
          \n
          \n`\n&messagesOuterTpl=`@CODE:
          [+messages+]
          `\n&successTpl=`@CODE:\n
          \n
          An email with the instructions has been sent to the email you specified when registering!
          \n
          `\n\n&subject=`Password recovery, [(site_name)]`\n&reportTpl=`@CODE:

          To recover your password, click on the link [+reset.url+]

          `\n&resetReportTpl=`@CODE:

          Hello, [+fullname.value+]!

          Your new password: [+newpassword+]

          `\n&resetTo=`37`\n&redirectTo=`4`\n&errorTpl=`@CODE:[+message+]`\n!]','0','4','2','0','1','1','1144904400','1','1509806093','0','0','0','0','0','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('47','document','text/html','New documentation site: docs.evo.im','Multilingual documentation for Evolution CMS ','','new-documentation-site-docs.evo.im','','1','0','0','2','0','You can get documentation here: http://docs.evo.im','

          You can get documentation here: http://docs.evo.im

          \n

          Evolution CMS Docs

          \n

          Evolution is a professional website development tool that allows you to manage content (and the site itself) absolutely 100%! This system is open source, and therefore free. Unlike most free CMS (English Content Management System) - on EVO you can build a site of any complexity, with almost any set of functions, and the system will not in any way influence your html code.

          \n

          How to contribute

          \n
            \n
          1. First of all, you must have an account on GitHub, if not - then it\'s very simple.
          2. \n
          3. Make a fork https://github.com/evolution-cms/docs/ to yourself by clicking the \"Fork\" button on the top right.
          4. \n
          5. Clone the repository to your disk and work with it locally, like everyone else (if you are a developer)
          6. \n
          7. If you are not a developer, you can simply edit the * .md files directly on GitHub.
          8. \n
          9. When you have done everything, you should make a \"Pull Request\" and send it by sending changes to this repository.
          10. \n
          ','1','4','2','1','1','1','1507724288','1','1509818879','0','0','0','1507724288','1','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('48','document','text/xml','sitemap.xml','','','sitemap.xml','','1','0','0','0','0','','[[DLSitemap]]','0','0','11','1','1','1','1507726985','1','1507727020','0','0','0','1507726985','1','','0','0','0','0','1','1'); - -REPLACE INTO `{PREFIX}site_content` VALUES ('49','document','text/html','Edit profile','User profile','','editprofile','','1','0','0','4','0','',' Logout\n [!FormLister?\n &formid=`registerForm`\n &controller=`Profile`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &formTpl=`@CODE: \n\n
          \n \n

          User Details

          \n \n
          \n \n \n [+username.error+]\n
          \n \n
          \n \n \n [+fullname.error+]\n
          \n \n
          \n \n \n [+email.error+]\n
          \n\n
          \n

          Password

          \n \n \n [+password.error+]\n
          \n
          \n \n \n [+repeatPassword.error+]\n
          \n \n
          \n

          Optional Account Profile Info

          \n \n \n [+country.error+]\n
          \n \n
          \n \n
          \n\n
          \n\n\n\n `!]\n','0','4','0','1','1','1','1509808504','1','1509817993','0','0','0','1509808504','1','','0','0','0','0','1','1'); - - -# -# Dumping data for table `site_htmlsnippets` -# - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('1','Comments_tplComments','Comments (Jot) Form-Template','0','none','1','0','\n
          \n
          [+comment.title:limit:esc+]\n [+phx:userinfo=`lastlogin`:ifempty=`9999999999`:lt=`[+comment.createdon+]`:then=`\n \n `:else=`\n \n `:strip+]\n \n
          \n
          \n
          \n
          \n [+comment.createdby:isnt=`0`:then=``+][+comment.createdby:userinfo=`username`:ifempty=`[+comment.custom.name:ifempty=`[+jot.guestname+]`:esc+]`+]\n [+comment.createdby:isnt=`0`:then=``+]\n
          Posts: [+comment.userpostcount+]\n
          \n
          \n
          \n [+jot.moderation.enabled:is=`1`:then=`\n \n [+comment.published:is=`0`:then=`\n \n `+]\n [+comment.published:is=`1`:then=`\n \n `+]\n `:strip+]\n [+jot.user.canedit:is=`1`:and:if=`[+comment.createdby+]`:is=`[+jot.user.id+]`:or:if=`[+jot.moderation.enabled+]`:is=`1`:then=`\n \n `:strip+]\n
          \n Reply #[+comment.postnumber+] on : [+comment.createdon:date=`%a %B %d, %Y, %H:%M:%S`+]\n
          \n
          [+comment.content:wordwrap:esc:nl2br+]
          \n
          \n [+comment.editedon:isnt=`0`:then=`\n Last Edit: [+comment.editedon:date=`%B %d, %Y, %H:%M:%S`+] by [+comment.editedby:userinfo=`username`:ifempty=` * `+]\n  `+] [+jot.moderation.enabled:is=`1`:then=`[+comment.secip+]`+]\n
          \n
          \n
          \n
          \n
          ','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('3','AjaxSearch_tplInput','Input-Form for AjaxSearch','0','none','1','0','[+as.showInputForm:is=`1`:then=`\n
          \n [+as.showAsId:is=`1`:then=``+]\n \n
          \n \n [+as.liveSearch:is=`0`:then=`\n \n \n \n `:else=`\n
          \n `+] \n
          \n
          \n`+]\n[+as.showIntro:is=`1`:then=`\n

          [+as.introMessage+]

          \n`+]','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('4','AjaxSearch_tplAjaxResult','Result Tpl for AjaxSearch','0','none','1','0','
          \n [+as.pagetitle+]\n[+as.descriptionShow:is=`1`:then=`\n [+as.description+]\n`+]\n[+as.extractShow:is=`1`:then=`\n

          [+as.extract+]

          \n`+]\n[+as.breadcrumbsShow:is=`1`:then=`\n [+as.breadcrumbs+]\n`+]\n
          ','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('6','AjaxSearch_tplAjaxGrpResult','Grp Result Tpl for AjaxSearch','0','none','1','0','[+as.grpResultsDef:is=`1`:then=`\n
          \n[+as.headerGrpResult+]\n[+as.listResults+]\n[+as.footerGrpResult+]\n
          \n`:else=`\n
          [+as.grpResultNameShow:is=`1`:then=`[+as.grpResultName+]`+]\n[+as.grpResultsDisplayedText+]
          \n`+]','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('8','AjaxSearch_tplAjaxResults','Results Tpl for AjaxSearch','0','none','1','0','
          \n
          \n
          \n
          \n \n

          Search Results

          \n
          \n
          \n [+as.noResults:is=`1`:then=`\n
          \n [+as.noResultText+]\n
          \n `:else=`\n

          [+as.resultsFoundText+][+as.resultsDisplayedText+]

          \n [+as.listGrpResults+]\n `+]\n [+as.moreResults:is=`1`:then=`\n \n `+]\n [+as.showCmt:is=`1`:then=`\n [+as.comment+]\n `+]\n
          \n
          \n \n
          \n
          \n
          \n
          \n','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('9','Comments_tplForm','Comments (Jot) Form-Template','0','none','1','0','\n

          [+form.edit:is=`1`:then=`Edit comment`:else=`Write a comment`+]

          \n
          \n
            \n
          • Required fields are marked with *.
          • \n
          \n
          \n[+form.error:isnt=`0`:then=`\n
          \n[+form.error:select=`\n&-3=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&-2=Your comment has been rejected.\n&-1=Your comment has been saved, it will first be reviewed before it is published.\n&1=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&2=The security code you entered was incorrect.\n&3=You can only post once each [+jot.postdelay+] seconds.\n&4=Your comment has been rejected.\n&5=[+form.errormsg:ifempty=`You didn\'t enter all the required fields`+]\n`+]\n
          \n`:strip+]\n[+form.confirm:isnt=`0`:then=`\n
          \n[+form.confirm:select=`\n&1=Your comment has been published.\n&2=Your comment has been saved, it will first be reviewed before it is published.\n&3=Comment saved.\n`+]\n
          \n`:strip+]\n
          \n
          \n \n \n \n \n [+form.moderation:is=`1`:then=`\n
          \n Created on: [+form.field.createdon:date=`%a %B %d, %Y at %H:%M`+]
          \n Created by: [+form.field.createdby:userinfo=`username`:ifempty=`[+jot.guestname+]`+]
          \n IP address: [+form.field.secip+]
          \n Published: [+form.field.published:select=`0=No&1=Yes`+]
          \n [+form.field.publishedon:gt=`0`:then=`\n Published on: [+form.field.publishedon:date=`%a %B %d, %Y at %H:%M`+]
          \n Published by: [+form.field.publishedby:userinfo=`username`:ifempty=` - `+]
          \n `+]\n [+form.field.editedon:gt=`0`:then=`\n Edited on: [+form.field.editedon:date=`%a %B %d, %Y at %H:%M`+]
          \n Edited by: [+form.field.editedby:userinfo=`username`:ifempty=` -`+]
          \n `+]\n
          \n `:strip+]\n \n [+form.guest:is=`1`:then=`\n
          \n \n \n
          \n
          \n \n \n
          \n `:strip+]\n
          \n \n \n
          \n
          \n \n \n
          \n \n[+jot.captcha:is=`1`:then=`\n
          \n \n \"If\n \n
          \n
          \n \n \n
          \n`:strip+]\n\n \n [+form.edit:is=`1`:then=`\n \n `+] \n
          \n
          ','0','0','0','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('13','Comments','Comments (JotX) showing beneath a blog entry.','2','none','1','0','
          \n[[ifsnippet? &name=`JotX`]] \n[!JotX? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\n
          ','0','1507723259','1509825745','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('14','ContactForm','eForm-template for showing contact-form','2','none','1','0','
          \n \n

          [+form.messages+]

          \n
          \n \n \n
          [+name.error+]
          \n
          \n
          \n \n \n
          [+email.error+]
          \n
          \n \n
          \n \n \n
          [+subject.error+]
          \n
          \n \n
          \n \n \n
          [+message.error+]
          \n
          \n \n
          \n \n
          \n\n
          ','0','1507723259','1507816800','0'); - -INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('15','ContactFormReport','eForm-template for sending form-data by mail','0','none','1','0','

          This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

          \n\n\n

          Name: [+name+]

          \n

          Email: [+email+]

          \n

          Regarding: [+subject+]

          \n

          comments:
          [+message+]

          \n\n

          You can use this link to reply: [+email+]

          \n','0','1507723259','0','0'); - -# -# Dumping data for table `site_tmplvar_contentvalues` -# - -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); - -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); - -REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('3','8','9','assets/images/evo-logo.png'); - -# -# Table structure for table `site_snippets` -# - -REPLACE INTO `{PREFIX}site_snippets` VALUES ('24','ifsnippet','','0','1','0','\nif (!isset($modx->snippetCache[$name])) {\n return \'

          For work \'.$name.\' in demo site you need install \'.$name.\' from Extras module

          \';\n}','0','{}',' ','1509819147','1509826185','0'); - -REPLACE INTO `{PREFIX}site_snippets` VALUES ('23','prepareBlog','','0','1','0','\nif ($data[\'image\'] != \'\'){\n $data[\'blog-image\'] = \'runSnippet(\'phpthumb\', array(\'input\'=>$data[\'image\'], \'options\'=>\'w=600,h=280,zc=1\')).\'\" alt=\"\'.$data[\'pagetitle\'].\'\">\';\n}else{\n $data[\'blog-image\'] = \'\';\n}\nreturn $data;','0','{}',' ','1507723822','1509819933','0'); - -# -# Dumping data for table `site_templates` -# - -REPLACE INTO `{PREFIX}site_templates` VALUES ('4','EVO startup - Bootstrap','1.0 Sample template in Bootstrap','0','1','','0','\n\n \n \n [*titl*]\n [*noIndex*]\n \n \n \n\n \n \n\n \n \n \n \n\n \n\n \n \n \n
          \n
          \n
          \n
          \n\n \n \"[(site_name)]\"\n \n\n
          \n\n \n
          \n\n
          \n
          \n
          \n
          \n\n
          \n
          \n\n
          \n
          \n
          \n [[if? &is=`[*id*]:!=:[(site_start)]` &then=`\n [[DLCrumbs? &showCurrent=`1`]]\n `]]\n
          \n
          \n
          \n\n
          \n\n
          \n

          [*#longtitle*]

          \n [*#content*]\n \n [[if? &is=`[*parent*]:=:2` &then=`@TPL:Comments`]]\n
          \n\n \n
          \n
          \n\n
          \n\n
          \n
          \n
          \n
          \n EVO Starter-Template ©2006-[[$_SERVER[\'REQUEST_TIME\']:dateFormat=`Y` ]]\n
          \n
          \n Built with Bootstrap framework.\n
          \n
          \n
          \n
          \n\n
          \n Memory: [^m^], MySQL: [^qt^], [^q^] request(s), PHP: [^p^], total: [^t^], document retrieved from [^s^]. \n
          \n\n \n\n \n \n\n \n','0','1','0','1509819347'); - -# -# Dumping data for table `evo_site_plugins` -# - -REPLACE INTO `{PREFIX}site_plugins` VALUES ('12','evoAjax','','0','1','0','switch($_GET[\'q\']){ \n case \'feedbackajaxform\':\n echo $modx->runSnippet(\'FormLister\', array(\n \'formid\' => \'ContactForm\',\n \'to\' => $modx->config[\'emailsender\'],\n \'parseMailerParams\'=> \'1\',\n \'replyTo\'=> \'@CODE:[+user.email.value+]\',\n \'subjectTpl\' => \'@CODE:[+subject.value+], from: \' . $modx->config[\'site_name\'] ,\n \'ccSender\'=>\'1\',\n \'errorClass\'=> \' has-error\',\n \'requiredClass\'=> \' has-warning\',\n \'rules\'=> \'{\n \"name\":{\n \"required\":\"Enter your Name\"\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\"\n },\n \"message\":{\n \"required\":\"Enter message\"\n }\n }\',\n \'formControls\'=>\'subject\',\n \'messagesTpl\' => \'@CODE:
          [+required+]
          [+errors+]
          \',\n \'errorTpl\'=>\'@CODE: [+message+]\',\n \'successTpl\'=> \'@CODE: \n
          \n

          Thanks!

          \n

          your message has been sent.

          \n
          \',\n \'formTpl\' => \'ContactForm\', \n \'reportTpl\'=>\'ContactFormReport\',\n \'ccSenderTpl\'=>\'ContactFormReport\', \n ));\n die();\n break;\n}\n','0','{}','0',' ','1507815395','1507816656'); - -REPLACE INTO `{PREFIX}site_plugin_events` VALUES ('12','1000','1'); - -# -# Dumping data for table `system_settings` -# - - -REPLACE INTO `{PREFIX}system_settings` VALUES('error_page', '7'); - -REPLACE INTO `{PREFIX}system_settings` VALUES('unauthorized_page', '4'); - - -# -# Dumping data for table `web_groups` -# - - -REPLACE INTO `{PREFIX}web_groups` VALUES ('1','1','1'); - - -# -# Dumping data for table `web_user_attributes` -# - - -REPLACE INTO `{PREFIX}web_user_attributes` VALUES ('1','1','Site Admin','0','you@example.com','','','0','0','0','25','1129049624','1129063123','0','f426f3209310abfddf2ee00e929774b4','0','0','','','','','','','','', UNIX_TIMESTAMP(), 0); - - -# -# Dumping data for table `web_users` -# - - -REPLACE INTO `{PREFIX}web_users` VALUES ('1','siteadmin','5f4dcc3b5aa765d61d8327deb882cf99',''); - - -# -# Dumping data for table `webgroup_access` -# - - -REPLACE INTO `{PREFIX}webgroup_access` VALUES ('1','1','1'); - - -# -# Dumping data for table `webgroup_names` -# - - -REPLACE INTO `{PREFIX}webgroup_names` VALUES ('1','Site Admins'); - - -REPLACE INTO `{PREFIX}webgroup_names` VALUES ('2','Registered Users'); - - - -# -# Table structure for table `jot_content` -# - - -CREATE TABLE IF NOT EXISTS `{PREFIX}jot_content` (`id` int(10) NOT NULL auto_increment, `title` varchar(255) default NULL, `tagid` varchar(50) default NULL, `published` int(1) NOT NULL default '0', `uparent` int(10) NOT NULL default '0', `parent` int(10) NOT NULL default '0', `flags` varchar(25) default NULL, `secip` varchar(32) default NULL, `sechash` varchar(32) default NULL, `content` mediumtext, `customfields` mediumtext, `mode` int(1) NOT NULL default '1', `createdby` int(10) NOT NULL default '0', `createdon` int(20) NOT NULL default '0', `editedby` int(10) NOT NULL default '0', `editedon` int(20) NOT NULL default '0', `deleted` int(1) NOT NULL default '0', `deletedon` int(20) NOT NULL default '0', `deletedby` int(10) NOT NULL default '0', `publishedon` int(20) NOT NULL default '0', `publishedby` int(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `secip` (`secip`), KEY `tagidx` (`tagid`), KEY `uparent` (`uparent`)) ENGINE=MyISAM; - - -# -# Dumping data for table `jot_content` -# - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('9','The first comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the first comment.','','0','0','1160420310','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('10','Second comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the second comment and uses an alternate row color. I also supplied a name, but i\'m not logged in.','Armand','0','0','1160420453','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('11','No abuse','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Notice that I can\'t abuse html, , or [+placeholder+] tags.\r\n\r\nA new line also doesn\'t come unnoticed.','Armand','0','0','1160420681','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('12','Posting when logged in','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','When you are logged in your own posts have a special color so you can easily spot them from the comment view. \r\n\r\nThe form also does not display any guest fields when logged in.','','0','-1','1160421310','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('13','Managers','','1','9','0','','87.211.130.14','91e230cf219e3ade10f32d6a41d0bd4d','Comments posted when only logged in as a manager user will use your manager name.\r\n\r\nModerators options are always shown when you are logged in as manager user.','','0','1','1160421487','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('14','Moderation','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','In this setup the Site Admins group is defined as being the moderator for this particular comment view. These users will have extra moderation options \r\n\r\nManager users, Moderators or Trusted users can post bad words like: dotNet.','','0','-1','1160422081','0','0','0','0','0','0','0'); - - -REPLACE INTO `{PREFIX}jot_content` VALUES ('15','I\'m untrusted','','0','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Untrusted users however can NOT post bad words like: dotNet. When they do the posts will be unpublished.','','0','0','1160422167','0','0','0','0','0','0','0'); - - -# -# Table structure for table `jot_subscriptions` -# - - -CREATE TABLE IF NOT EXISTS `{PREFIX}jot_subscriptions` (`id` mediumint(10) NOT NULL auto_increment, `uparent` mediumint(10) NOT NULL default '0', `tagid` varchar(50) NOT NULL default '', `userid` mediumint(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `uparent` (`uparent`), KEY `tagid` (`tagid`), KEY `userid` (`userid`)) ENGINE=MyISAM; - +# EVO Database Script for New/Upgrade Installations +# +# Each sql command is separated by double lines + +# +# Dumping data for table `documentgroup_names` +# + +REPLACE INTO `{PREFIX}document_groups` VALUES ('1','1','3'); + +REPLACE INTO `{PREFIX}documentgroup_names` VALUES ('1','Site Admin Pages','0','0'); + +# +# Dumping data for table `site_content` +# + +REPLACE INTO `{PREFIX}site_content` VALUES ('1','document','text/html','Home','Welcome to EVO','Introduction to EVO','index','','1','0','0','0','0','Create and do amazing things with EVO','

          Install successful!

          \n

          You have successfully installed and configured EVO. We hope you find this site an adequate starting configuration for many small business, organization or personal websites; just change the template and content, and you\'ll be good to go! This site is preconfigured with a variety of options we hope are helpful, relevant and just plain cool for many marketing or personal sites:

          \n
            \n
          • Simple Blog. When logged into your site, you\'ll be able to create new entries from the front end. This can also be turned into a News publishing or PR publishing system. View example blog
          • \n
          • Easy Comments. When logged into your site, your registered site users can comment on your posts. View example
          • \n
          • RSS Feeds. Your site visitors can stay up to date using your site feeds. View RSS feed
          • \n
          • Automatic User Registration. Those that wish to comment on blogs must first create an account. This comes pre-configured with a \"Captcha\" anti-robot registration feature. View registration form
          • \n
          • QuickEdit. When you\'re logged into the manager, you can edit a page directly from the front end! More about CMS features
          • \n
          • Integrated Site Search. Allows visitors to search only the pages you wish them to search. Uses Ajax to display results without loading a new page.
          • \n
          • Powerful Navigation Builder. Duplicate or build virtually any navigation system with our dynamic menu builder code. The menu above, for example. More about menu features
          • \n
          • Ajax ready. You\'re on your way to Web 2.0 and AJAX goodness. More about Ajax features
          • \n
          • Custom \"page not found (404)\" page. Help visitors who go astray to find what they\'re looking for. View 404 page
          • \n
          • Contact Us form. A highly configurable contact form you should customize to point to the right email address. Comes pre-configured to prevent mail-form-injection so your site does not become a source for spam. View form
          • \n
          • Newest documents list. Shows your visitor the most recently added pages (configurable).
          • \n
          • Customizable Content Manager. Preview uploaded images, hide or rename fields and lots more. See ManagerManager\'s documentation for details and instructions. Quick start: ManagerManager by default will look for \"rules\" in a Chunk named \"mm_rules\". Simply copy or rename the Chunk named \"mm_demo_rules\" to \"mm_rules\" and try it out!
          • \n
          • phpThumb. Examples to use phpThumb to crop images.
          • \n
          \n

          Full documentation can be found on the official documentation site.

          \n

          To log into the EVO Control Panel and start customizing this site, point your browser to /manager/.

          ','1','4','0','1','1','1','1144904400','1','1507728141','0','0','0','0','0','Home','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('2','document','text/html','Blog','My Blog','','blog','','1','0','0','0','1','','[[DocLister? \n &jotcount=`1`\n &parents=`2` \n &display=`2`\n &tvPrefix=``\n &tvList=`image`\n &prepare=`prepareBlog`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n
          \n [+blog-image+] \n

          [+e.title+]

          \n
          \n By [+author+] on [+date+].\n Comments [+jotcount+]\n
          \n [+summary+]\n

          [+link+]

          \n
          ` \n &paginate=`1` \n]]\n\n

          Showing [+current+] of [+totalPages+] Pages

          \n
          [+pages+]
          \n

           

          ','0','4','1','0','1','1','1144904400','1','1507727477','0','0','0','0','0','Blog','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('4','document','text/html','Profile','User profile','','profile','','1','0','0','0','1','','[!FormLister?\n&formid=`login`\n&controller=`Login`\n&loginField=`email`\n&redirectTo=`49`\n&defaults=`{\"rememberme\":1}`\n&formControls=`rememberme`\n&rules=`{\n \"email\":{\n \"required\":\"Enter your Email\",\n \"email\":\"You should enter correct Email\"\n },\n \"password\":{\n \"required\":\"Enter your password\"\n }\n}`\n&formTpl=`@CODE:\n\n

          In order to comment on blog entries, you must be a registered user of [(site_name)]. If you haven\'t already registered, you can request an account.

          \n\n
          \n [+form.messages+]\n \n
          \n
          \n \n \n
          \n
          \n
          \n
          \n \n \n
          \n
          \n
          \n
          \n
          \n \n
          \n
          \n
          \n
          \n \n
          \n \n
          \n
          \n \n
          \n`\n&skipTpl=`@CODE:\n
          Hello!
          \n `\n&errorTpl=`@CODE:

          [+message+]

          `\n&messagesOuterTpl=`@CODE:\n
          [+messages+]
          `\n&errorClass=` has-error` \n&requiredClass=` has-warning`\n!]','0','4','6','0','1','1','1144904400','1','1533412259','0','0','0','0','0','','0','0','0','0','0','0'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('5','document','text/html','Request an Account','Sign Up for Full Site Privileges','','request-an-account','','1','0','0','4','0','',' [!FormLister?\n &formid=`registerForm`\n &controller=`Register`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &captcha=`modxCaptcha`\n &formTpl=`@CODE: \n\n
          \n \n

          User Details

          \n
          \n \n Items marked by * are required\n
          \n \n
          \n \n \n [+username.error+]\n
          \n \n
          \n \n \n [+fullname.error+]\n
          \n \n
          \n \n \n [+email.error+]\n
          \n\n
          \n

          Password

          \n \n \n [+password.error+]\n
          \n
          \n \n \n [+repeatPassword.error+]\n
          \n \n
          \n

          Optional Account Profile Info

          \n \n \n [+country.error+]\n
          \n \n
          \n

          Bot-Patrol

          \n

          Enter the word/number combination shown in the image below.

          \n \n

          \"If

          \n \n [+vericode.error+]\n
          \n \n
          \n \n
          \n\n
          \n\n\n\n `\n &successTpl=`@CODE:\n

          Signup completed successfully!
          \n Your account was created. A copy of your signup information was sent to your email address.

          \n `\n &subject=`New registration, [(site_name)]`\n &ccSender=`1`\n &ccSenderTpl=`@CODE:\n

          [+fullname.value+], signup completed successfully!

          \n Login: [+email.value+]
          \n Password: [+user.password+]
          \n `\n !]','0','4','1','0','1','1','1144904400','1','1515584252','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('6','document','text/html','Contact Us','Contact [(site_name)]','','contact-us','','1','0','0','0','0','','\n\n\n
          \n {{ContactForm}}\n
          \n','0','4','5','1','1','1','1144904400','1','1507815490','0','0','0','0','0','Contact us','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('7','document','text/html','404 - Document Not Found','Uh oh ... it\'s a 404! (Page Not Found)','','doc-not-found','','1','0','0','0','0','','

          Looks like you tried to go somewhere that does not exist... perhaps you need to login or you\'d like one of the following pages instead:

          \n

          [[DLMenu? &parents=`0`]]

          \n

          Want to find it the old fashioned way? Use the site search at the top of this site to find what you seek.

          ','1','4','10','0','1','1','1144904400','1','1507728168','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('8','document','text/html','Search Results','Your Search Results','','search-results','','1','0','0','0','0','','[!AjaxSearch? &showInputForm=`0` &ajaxSearch=`0`!]','0','4','8','0','1','1','1144904400','1','1507728119','0','0','0','0','0','','1','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('9','document','text/html','Mini-Blog HOWTO','How to Start Posting with EVO Mini-Blogs','','article-1126081344','','1','0','0','2','0','','

          Setting up a mini-blog is relatively simple. Here\'s what you need to do to get started with making new posts:

          \n
            \n
          1. Login to the EVO Control Panel.
          2. \n
          3. Press the plus-sign next to the Blog(2) container resource to see the blog entries posted there.
          4. \n
          5. To make a new Blog entry, simply right-click the Blog container document and choose the \"Create Resource here\" menu option. To edit an existing blog article, right click the entry and choose the \"Edit Resource\" menu option.
          6. \n\n
          7. Write or edit the content and press save, making sure the document is published.
          8. \n
          9. Everything else is automatic; you\'re done!
          10. \n
          ','1','4','0','1','1','-1','1144904400','1','1509818890','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('11','document','application/rss+xml','RSS Feed','[(site_name)] RSS Feed','','feed.rss','','1','0','0','0','0','','\n\n\n [(site_name)]\n [(site_url)]\n Evolution CMS demo site Feed\n [[DocLister? \n &parents=`2` \n &display=`20`\n &summary=`notags,len:350` \n &tpl=`@CODE:\n [+e.title+]\n [(site_url)][~[+id+]~]\n \n [+date+]\n [(site_url)][~[+id+]~]\n [+author+]\n `\n ]]\n\n','0','0','9','0','1','1','1144904400','1','1507728107','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('14','document','text/html','Content Management','Ways to manage content','','cms','','1','0','0','15','0','','

          Manage your content in the backend

          \n

          The Manager is a skinnable feature-packed tool for admin users. You can add extra users and limit what functions they can access. EVO\'s Manager makes creating content and managing templates and reusable elements easy. Modules can be added to work with other datasets or make management tasks easier.

          \n

          Manage your content in the frontend

          \n

          The QuickEdit bar lets manager users edit content whilst browsing the site. Most content fields and template variables can be edited quickly and easily.

          \n

          Enable web users to add content

          \n

          Custom data entry is easy to code using the EVO API - so you can design forms and collect whatever information you need.

          ','1','4','3','1','1','1','1144904400','1','1378086298','0','0','0','1378086298','1','Manage Content','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('15','document','text/html','EVO Features','EVO Features','','features','','1','0','0','0','1','','[[Wayfinder?startId=`[*id*]` &outerClass=`topnav`]]','1','4','2','1','1','1','1144904400','1','1158452722','0','0','0','1144777367','1','Features','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('16','document','text/html','Ajax','Ajax and Web 2.0 ready','','ajax','','1','1159264800','0','15','0','','

          Ajax ready out-of-the-box

          \n

          EVO empowers users to build engaging sites today, with its pre-integrated jQuery javascript library.

          \n

          Check out the Ajax-powered search in this example site. The libraries are also used with QuickEdit, our front-end editing tool.

          \n

          Smart integration means the scripts are only included in the document head when needed - no unnecessary bloat on simple pages!

          \n

          Web 2.0 today

          \n

          EVO makes child\'s play of building content managed sites with validating, accessible CSS layouts - so web standards compliance is easy. (You can create a site with excessively nested tables too, if you really want to).

          ','1','4','1','1','1','1','1144904400','1','1507726420','0','0','0','1159264800','1','Ajax','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('18','document','text/html','Just a pretend, older post','This post should in fact be archived','','article-1128398162','','1','0','0','2','0','','

          Not so exciting, after all, eh?

          ','1','4','2','1','1','-1','1144904400','1','1509818884','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('22','document','text/html','Menus and Lists','Flexible Menus and Lists','','menus','','1','1159178400','0','15','0','','

          Your documents - listed how you want them

          \n

          EVO\'s document data structure has been designed to allow many different routines to redisplay the information in ways that suit your needs, such as a dynamic menu in your template.

          \n

          Since the last release of EVO, the community has produced many great snippets - reusable functions that you can call in your content or template. Two of the most widely useful are Ditto and Wayfinder.

          \n

          Wayfinder - the menu builder

          \n

          Allows you to template every part of the menu. On this site, Wayfinder is being used to generate the drop-down menus, but many types of menus and sitemaps are possible.

          \n

          Ditto - the document lister

          \n

          Uses include listing the most recent blog posts, producing a site map, listing related documents (using a TV filter) and generating an RSS feed. You could even write a menu with it. On this site, Ditto is being used for the blog posts list on the Blog page, and the list on the right of some templates.

          \n

          Unlimited Customization

          \n

          If you can\'t quite get your desired effect using templating and the many options of Ditto and Wayfinder, you can write your own routine, or look for other snippets in the EVO repository. EVO\'s fields for Menu Title, summaries, menu position etc can be used via the API to produce anything you can imagine.

          ','1','4','2','1','1','1','1144904400','1','1160148522','0','0','0','0','0','Menus and Lists','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('24','document','text/html','Extendable by design','Extendable by design','','extendable','','1','1159092732','0','15','0','','

          The EVO community has created many add-ons which can be found in the Repository, from image galleries and e-commerce to smaller utilities.

          \n

          Template Variables with Bindings

          \n

          TVs - Template Variables - are powerful extra fields that you can use with your documents. As an example of an advanced template element that returns a different thing dependent on code or data, we created an @BINDING for the name of the Login menu item. This changes the menu name from Login to Logout based on your logged in state. The @BINDING as follows was placed in the default value as: @EVAL if ($modx->getLoginUserID()) return \'Logout\'; else return \'Login\';

          \n

          Using jQuery-effects

          \n

          We used some simple effects to highlight various things on the front/home page to demonstrate how easy it is to create a useful way to draw attention to things. To see them in action on the home page, click the Integrated Site Search, Related Links or Newest Documents headers.

          \n

          Custom Forms

          \n

          To demonstrate how to link to custom forms, we customized the calls to the Webuser Registration system and the Login system.

          \n

          And more

          \n

          Rich Text Editor for blog entries. To make it easier to format blog posts with simple text formatting, we modified the blog to use a custom RTE-enabled Template Variable (TV).

          \n

          Smart-Summary logic. When splitting the full blog/news posts you simply insert a \"<!-- splitter -->\" where you want the break to occur. In addition, if that leaves any important tags open, it will try to match them and close them so it doesn\'t mess up your site layout with unclosed OL, UL or DIV tags.

          ','1','4','4','1','1','2','1144904400','1','1159309971','0','0','0','0','0','Extendability','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('32','document','text/html','Design','Site Design','','design','','1','0','0','0','0','','

          Credits

          \n

          The EVO Starter-theme is based on Bootstrap 3.3.6 and made by graffx.nl and fuseit.de.

          ','1','4','4','1','1','2','1144904400','1','1160112322','0','0','0','1144912754','1','Design','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('33','document','text/html','Getting Help','Getting Help with EVO','','getting-help','','1','0','0','0','0','','

          The team behind EVO strives to constantly add to and refine the documentation to help you get up to speed with EVO:

          \n
            \n
          • For basic instructions on integrating custom templates into EVO, please see the Designer\'s Guide.
          • \n
          • For an introduction to working in EVO from the content editors perspectve, see the Content Editor\'s Guide.
          • \n
          • For a detailed overview of the backend \"manager\" and setting up Users and Groups, please peruse the Administration Guide.
          • \n
          • For developers, architecture and API documentation can be found in the Developer\'s Guide.
          • \n
          • And if someone has installed this site for you, but you\'re curious as to the steps they went through, please see the Getting Started Guide.
          • \n
          \n

          And don\'t forget, you can always learn and ask questions at the EVO forums.

          ','1','4','3','1','1','2','1144904400','1','1507728208','0','0','0','0','0','Getting Help','0','0','0','0','0','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('37','document','text/html','Forgot Password','','','forgot-password','','1','0','0','4','0','','[!FormLister?\n&controller=`Reminder`\n&formid=`remind`\n&rules=`{\n \"email\":{\n \"required\":\"Be sure to enter email\",\n \"email\":\"Enter email correctly\"\n }\n}`\n&resetRules=`{\n \"password\":{\n \"required\":\"Be sure to enter the password\",\n \"minLength\":{\n \"params\":6,\n \"message\":\"Password must be longer than 6 characters\"\n }\n },\n \"repeatPassword\":{\n \"required\":\"Repeat password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n}`\n&formTpl=`@CODE:\n\n
          \n [+form.messages+]\n \n
          \n \n
          \n \n [+email.error+]\n
          \n\n
          \n \n
          \n
          \n
          `\n\n&resetTpl=`@CODE:\n
          \n [+form.messages+]\n \n
          \n \n
          \n \n [+password.error+]\n \n [+repeatPassword.error+]\n
          \n
          \n \n
          \n
          \n
          \n`\n&messagesOuterTpl=`@CODE:
          [+messages+]
          `\n&successTpl=`@CODE:\n
          \n
          An email with the instructions has been sent to the email you specified when registering!
          \n
          `\n\n&subject=`Password recovery, [(site_name)]`\n&reportTpl=`@CODE:

          To recover your password, click on the link [+reset.url+]

          `\n&resetReportTpl=`@CODE:

          Hello, [+fullname.value+]!

          Your new password: [+newpassword+]

          `\n&resetTo=`37`\n&redirectTo=`4`\n&errorTpl=`@CODE:[+message+]`\n!]','0','4','2','0','1','1','1144904400','1','1509806093','0','0','0','0','0','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('47','document','text/html','New documentation site: docs.evo.im','Multilingual documentation for Evolution CMS ','','new-documentation-site-docs.evo.im','','1','0','0','2','0','You can get documentation here: http://docs.evo.im','

          You can get documentation here: http://docs.evo.im

          \n

          Evolution CMS Docs

          \n

          Evolution is a professional website development tool that allows you to manage content (and the site itself) absolutely 100%! This system is open source, and therefore free. Unlike most free CMS (English Content Management System) - on EVO you can build a site of any complexity, with almost any set of functions, and the system will not in any way influence your html code.

          \n

          How to contribute

          \n
            \n
          1. First of all, you must have an account on GitHub, if not - then it\'s very simple.
          2. \n
          3. Make a fork https://github.com/evolution-cms/docs/ to yourself by clicking the \"Fork\" button on the top right.
          4. \n
          5. Clone the repository to your disk and work with it locally, like everyone else (if you are a developer)
          6. \n
          7. If you are not a developer, you can simply edit the * .md files directly on GitHub.
          8. \n
          9. When you have done everything, you should make a \"Pull Request\" and send it by sending changes to this repository.
          10. \n
          ','1','4','2','1','1','1','1507724288','1','1509818879','0','0','0','1507724288','1','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('48','document','text/xml','sitemap.xml','','','sitemap.xml','','1','0','0','0','0','','[[DLSitemap]]','0','0','11','1','1','1','1507726985','1','1507727020','0','0','0','1507726985','1','','0','0','0','0','1','1'); + +REPLACE INTO `{PREFIX}site_content` VALUES ('49','document','text/html','Edit profile','User profile','','editprofile','','1','0','0','4','0','',' Logout\n [!FormLister?\n &formid=`registerForm`\n &controller=`Profile`\n &requiredClass=`has-warning`\n &errorClass=`has-error`\n &errorTpl=`@CODE:[+message+]`\n &allowedFields=`email,username,fullname,country`\n &rules=`{\n \"username\":{\n \"required\":\"Enter your username\",\n \"alphaNumeric\":\"Only letters and numbers\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueUsername\",\n \"message\":\"Name already taken\"\n }\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\",\n \"custom\":{\n \"function\":\"\\\\FormLister\\\\Register::uniqueEmail\",\n \"message\":\"This email is already in use by another user\"\n }\n },\n \"password\":{\n \"required\":\"Enter password\"\n },\n \"repeatPassword\":{\n \"required\":\"Retype password\",\n \"equals\":{\n \"message\":\"Passwords do not match\"\n }\n }\n }`\n &formTpl=`@CODE: \n\n
          \n \n

          User Details

          \n \n
          \n \n \n [+username.error+]\n
          \n \n
          \n \n \n [+fullname.error+]\n
          \n \n
          \n \n \n [+email.error+]\n
          \n\n
          \n

          Password

          \n \n \n [+password.error+]\n
          \n
          \n \n \n [+repeatPassword.error+]\n
          \n \n
          \n

          Optional Account Profile Info

          \n \n \n [+country.error+]\n
          \n \n
          \n \n
          \n\n
          \n\n\n\n `!]\n','0','4','0','1','1','1','1509808504','1','1509817993','0','0','0','1509808504','1','','0','0','0','0','1','1'); + + +# +# Dumping data for table `site_htmlsnippets` +# + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('1','Comments_tplComments','Comments (Jot) Form-Template','0','none','1','0','\n
          \n
          [+comment.title:limit:esc+]\n [+phx:userinfo=`lastlogin`:ifempty=`9999999999`:lt=`[+comment.createdon+]`:then=`\n \n `:else=`\n \n `:strip+]\n \n
          \n
          \n
          \n
          \n [+comment.createdby:isnt=`0`:then=``+][+comment.createdby:userinfo=`username`:ifempty=`[+comment.custom.name:ifempty=`[+jot.guestname+]`:esc+]`+]\n [+comment.createdby:isnt=`0`:then=``+]\n
          Posts: [+comment.userpostcount+]\n
          \n
          \n
          \n [+jot.moderation.enabled:is=`1`:then=`\n \n [+comment.published:is=`0`:then=`\n \n `+]\n [+comment.published:is=`1`:then=`\n \n `+]\n `:strip+]\n [+jot.user.canedit:is=`1`:and:if=`[+comment.createdby+]`:is=`[+jot.user.id+]`:or:if=`[+jot.moderation.enabled+]`:is=`1`:then=`\n \n `:strip+]\n
          \n Reply #[+comment.postnumber+] on : [+comment.createdon:date=`%a %B %d, %Y, %H:%M:%S`+]\n
          \n
          [+comment.content:wordwrap:esc:nl2br+]
          \n
          \n [+comment.editedon:isnt=`0`:then=`\n Last Edit: [+comment.editedon:date=`%B %d, %Y, %H:%M:%S`+] by [+comment.editedby:userinfo=`username`:ifempty=` * `+]\n  `+] [+jot.moderation.enabled:is=`1`:then=`[+comment.secip+]`+]\n
          \n
          \n
          \n
          \n
          ','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('3','AjaxSearch_tplInput','Input-Form for AjaxSearch','0','none','1','0','[+as.showInputForm:is=`1`:then=`\n
          \n [+as.showAsId:is=`1`:then=``+]\n \n
          \n \n [+as.liveSearch:is=`0`:then=`\n \n \n \n `:else=`\n
          \n `+] \n
          \n
          \n`+]\n[+as.showIntro:is=`1`:then=`\n

          [+as.introMessage+]

          \n`+]','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('4','AjaxSearch_tplAjaxResult','Result Tpl for AjaxSearch','0','none','1','0','
          \n [+as.pagetitle+]\n[+as.descriptionShow:is=`1`:then=`\n [+as.description+]\n`+]\n[+as.extractShow:is=`1`:then=`\n

          [+as.extract+]

          \n`+]\n[+as.breadcrumbsShow:is=`1`:then=`\n [+as.breadcrumbs+]\n`+]\n
          ','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('6','AjaxSearch_tplAjaxGrpResult','Grp Result Tpl for AjaxSearch','0','none','1','0','[+as.grpResultsDef:is=`1`:then=`\n
          \n[+as.headerGrpResult+]\n[+as.listResults+]\n[+as.footerGrpResult+]\n
          \n`:else=`\n
          [+as.grpResultNameShow:is=`1`:then=`[+as.grpResultName+]`+]\n[+as.grpResultsDisplayedText+]
          \n`+]','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('8','AjaxSearch_tplAjaxResults','Results Tpl for AjaxSearch','0','none','1','0','
          \n
          \n
          \n
          \n \n

          Search Results

          \n
          \n
          \n [+as.noResults:is=`1`:then=`\n
          \n [+as.noResultText+]\n
          \n `:else=`\n

          [+as.resultsFoundText+][+as.resultsDisplayedText+]

          \n [+as.listGrpResults+]\n `+]\n [+as.moreResults:is=`1`:then=`\n \n `+]\n [+as.showCmt:is=`1`:then=`\n [+as.comment+]\n `+]\n
          \n
          \n \n
          \n
          \n
          \n
          \n','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('9','Comments_tplForm','Comments (Jot) Form-Template','0','none','1','0','\n

          [+form.edit:is=`1`:then=`Edit comment`:else=`Write a comment`+]

          \n
          \n
            \n
          • Required fields are marked with *.
          • \n
          \n
          \n[+form.error:isnt=`0`:then=`\n
          \n[+form.error:select=`\n&-3=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&-2=Your comment has been rejected.\n&-1=Your comment has been saved, it will first be reviewed before it is published.\n&1=You are trying to re-submit the same post. You have probably clicked the submit button more than once.\n&2=The security code you entered was incorrect.\n&3=You can only post once each [+jot.postdelay+] seconds.\n&4=Your comment has been rejected.\n&5=[+form.errormsg:ifempty=`You didn\'t enter all the required fields`+]\n`+]\n
          \n`:strip+]\n[+form.confirm:isnt=`0`:then=`\n
          \n[+form.confirm:select=`\n&1=Your comment has been published.\n&2=Your comment has been saved, it will first be reviewed before it is published.\n&3=Comment saved.\n`+]\n
          \n`:strip+]\n
          \n
          \n \n \n \n \n [+form.moderation:is=`1`:then=`\n
          \n Created on: [+form.field.createdon:date=`%a %B %d, %Y at %H:%M`+]
          \n Created by: [+form.field.createdby:userinfo=`username`:ifempty=`[+jot.guestname+]`+]
          \n IP address: [+form.field.secip+]
          \n Published: [+form.field.published:select=`0=No&1=Yes`+]
          \n [+form.field.publishedon:gt=`0`:then=`\n Published on: [+form.field.publishedon:date=`%a %B %d, %Y at %H:%M`+]
          \n Published by: [+form.field.publishedby:userinfo=`username`:ifempty=` - `+]
          \n `+]\n [+form.field.editedon:gt=`0`:then=`\n Edited on: [+form.field.editedon:date=`%a %B %d, %Y at %H:%M`+]
          \n Edited by: [+form.field.editedby:userinfo=`username`:ifempty=` -`+]
          \n `+]\n
          \n `:strip+]\n \n [+form.guest:is=`1`:then=`\n
          \n \n \n
          \n
          \n \n \n
          \n `:strip+]\n
          \n \n \n
          \n
          \n \n \n
          \n \n[+jot.captcha:is=`1`:then=`\n
          \n \n \"If\n \n
          \n
          \n \n \n
          \n`:strip+]\n\n \n [+form.edit:is=`1`:then=`\n \n `+] \n
          \n
          ','0','0','0','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('13','Comments','Comments (JotX) showing beneath a blog entry.','2','none','1','0','
          \n[[ifsnippet? &name=`JotX`]] \n[!JotX? &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` &tplForm=`Comments_tplForm` &tplComments=`Comments_tplComments`!]\n
          ','0','1507723259','1509825745','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('14','ContactForm','eForm-template for showing contact-form','2','none','1','0','
          \n \n

          [+form.messages+]

          \n
          \n \n \n
          [+name.error+]
          \n
          \n
          \n \n \n
          [+email.error+]
          \n
          \n \n
          \n \n \n
          [+subject.error+]
          \n
          \n \n
          \n \n \n
          [+message.error+]
          \n
          \n \n
          \n \n
          \n\n
          ','0','1507723259','1507816800','0'); + +INSERT INTO `{PREFIX}site_htmlsnippets` VALUES ('15','ContactFormReport','eForm-template for sending form-data by mail','0','none','1','0','

          This is a response sent by [+name+] using the feedback form on the website. The details of the message follow below:

          \n\n\n

          Name: [+name+]

          \n

          Email: [+email+]

          \n

          Regarding: [+subject+]

          \n

          comments:
          [+message+]

          \n\n

          You can use this link to reply: [+email+]

          \n','0','1507723259','0','0'); + +# +# Dumping data for table `site_tmplvar_contentvalues` +# + +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('1','3','9','demo miniblog howto tutorial posting'); + +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('2','3','18','demo older posting'); + +REPLACE INTO `{PREFIX}site_tmplvar_contentvalues` VALUES ('3','8','9','assets/images/evo-logo.png'); + +# +# Table structure for table `site_snippets` +# + +REPLACE INTO `{PREFIX}site_snippets` VALUES ('24','ifsnippet','','0','1','0','\nif (!isset($modx->snippetCache[$name])) {\n return \'

          For work \'.$name.\' in demo site you need install \'.$name.\' from Extras module

          \';\n}','0','{}',' ','1509819147','1509826185','0'); + +REPLACE INTO `{PREFIX}site_snippets` VALUES ('23','prepareBlog','','0','1','0','\nif ($data[\'image\'] != \'\'){\n $data[\'blog-image\'] = \'runSnippet(\'phpthumb\', array(\'input\'=>$data[\'image\'], \'options\'=>\'w=600,h=280,zc=1\')).\'\" alt=\"\'.$data[\'pagetitle\'].\'\">\';\n}else{\n $data[\'blog-image\'] = \'\';\n}\nreturn $data;','0','{}',' ','1507723822','1509819933','0'); + +# +# Dumping data for table `site_templates` +# + +REPLACE INTO `{PREFIX}site_templates` VALUES ('4','EVO startup - Bootstrap','1.0 Sample template in Bootstrap','0','1','','0','\n\n \n \n [*titl*]\n [*noIndex*]\n \n \n \n\n \n \n\n \n \n \n \n\n \n\n \n \n \n
          \n
          \n
          \n
          \n\n \n \"[(site_name)]\"\n \n\n
          \n\n \n
          \n\n
          \n
          \n
          \n
          \n\n
          \n
          \n\n
          \n
          \n
          \n [[if? &is=`[*id*]:!=:[(site_start)]` &then=`\n [[DLCrumbs? &showCurrent=`1`]]\n `]]\n
          \n
          \n
          \n\n
          \n\n
          \n

          [*#longtitle*]

          \n [*#content*]\n \n [[if? &is=`[*parent*]:=:2` &then=`@TPL:Comments`]]\n
          \n\n \n
          \n
          \n\n
          \n\n
          \n
          \n
          \n
          \n EVO Starter-Template ©2006-[[$_SERVER[\'REQUEST_TIME\']:dateFormat=`Y` ]]\n
          \n
          \n Built with Bootstrap framework.\n
          \n
          \n
          \n
          \n\n
          \n Memory: [^m^], MySQL: [^qt^], [^q^] request(s), PHP: [^p^], total: [^t^], document retrieved from [^s^]. \n
          \n\n \n\n \n \n\n \n','0','1','0','1509819347'); + +# +# Dumping data for table `evo_site_plugins` +# + +REPLACE INTO `{PREFIX}site_plugins` VALUES ('12','evoAjax','','0','1','0','switch($_GET[\'q\']){ \n case \'feedbackajaxform\':\n echo $modx->runSnippet(\'FormLister\', array(\n \'formid\' => \'ContactForm\',\n \'to\' => $modx->config[\'emailsender\'],\n \'parseMailerParams\'=> \'1\',\n \'replyTo\'=> \'@CODE:[+user.email.value+]\',\n \'subjectTpl\' => \'@CODE:[+subject.value+], from: \' . $modx->config[\'site_name\'] ,\n \'ccSender\'=>\'1\',\n \'errorClass\'=> \' has-error\',\n \'requiredClass\'=> \' has-warning\',\n \'rules\'=> \'{\n \"name\":{\n \"required\":\"Enter your Name\"\n },\n \"email\":{\n \"required\":\"Enter email\",\n \"email\":\"Incorrect email\"\n },\n \"message\":{\n \"required\":\"Enter message\"\n }\n }\',\n \'formControls\'=>\'subject\',\n \'messagesTpl\' => \'@CODE:
          [+required+]
          [+errors+]
          \',\n \'errorTpl\'=>\'@CODE: [+message+]\',\n \'successTpl\'=> \'@CODE: \n
          \n

          Thanks!

          \n

          your message has been sent.

          \n
          \',\n \'formTpl\' => \'ContactForm\', \n \'reportTpl\'=>\'ContactFormReport\',\n \'ccSenderTpl\'=>\'ContactFormReport\', \n ));\n die();\n break;\n}\n','0','{}','0',' ','1507815395','1507816656'); + +REPLACE INTO `{PREFIX}site_plugin_events` VALUES ('12','1000','1'); + +# +# Dumping data for table `system_settings` +# + + +REPLACE INTO `{PREFIX}system_settings` VALUES('error_page', '7'); + +REPLACE INTO `{PREFIX}system_settings` VALUES('unauthorized_page', '4'); + + +# +# Dumping data for table `web_groups` +# + + +REPLACE INTO `{PREFIX}web_groups` VALUES ('1','1','1'); + + +# +# Dumping data for table `web_user_attributes` +# + + +REPLACE INTO `{PREFIX}web_user_attributes` VALUES ('1','1','Site Admin','0','you@example.com','','','0','0','0','25','1129049624','1129063123','0','f426f3209310abfddf2ee00e929774b4','0','0','','','','','','','','', UNIX_TIMESTAMP(), 0); + + +# +# Dumping data for table `web_users` +# + + +REPLACE INTO `{PREFIX}web_users` VALUES ('1','siteadmin','5f4dcc3b5aa765d61d8327deb882cf99',''); + + +# +# Dumping data for table `webgroup_access` +# + + +REPLACE INTO `{PREFIX}webgroup_access` VALUES ('1','1','1'); + + +# +# Dumping data for table `webgroup_names` +# + + +REPLACE INTO `{PREFIX}webgroup_names` VALUES ('1','Site Admins'); + + +REPLACE INTO `{PREFIX}webgroup_names` VALUES ('2','Registered Users'); + + + +# +# Table structure for table `jot_content` +# + + +CREATE TABLE IF NOT EXISTS `{PREFIX}jot_content` (`id` int(10) NOT NULL auto_increment, `title` varchar(255) default NULL, `tagid` varchar(50) default NULL, `published` int(1) NOT NULL default '0', `uparent` int(10) NOT NULL default '0', `parent` int(10) NOT NULL default '0', `flags` varchar(25) default NULL, `secip` varchar(32) default NULL, `sechash` varchar(32) default NULL, `content` mediumtext, `customfields` mediumtext, `mode` int(1) NOT NULL default '1', `createdby` int(10) NOT NULL default '0', `createdon` int(20) NOT NULL default '0', `editedby` int(10) NOT NULL default '0', `editedon` int(20) NOT NULL default '0', `deleted` int(1) NOT NULL default '0', `deletedon` int(20) NOT NULL default '0', `deletedby` int(10) NOT NULL default '0', `publishedon` int(20) NOT NULL default '0', `publishedby` int(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `secip` (`secip`), KEY `tagidx` (`tagid`), KEY `uparent` (`uparent`)) ENGINE=MyISAM {TABLEENCODING}; + + +# +# Dumping data for table `jot_content` +# + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('9','The first comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the first comment.','','0','0','1160420310','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('10','Second comment','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','This is the second comment and uses an alternate row color. I also supplied a name, but i\'m not logged in.','Armand','0','0','1160420453','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('11','No abuse','','1','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Notice that I can\'t abuse html, , or [+placeholder+] tags.\r\n\r\nA new line also doesn\'t come unnoticed.','Armand','0','0','1160420681','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('12','Posting when logged in','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','When you are logged in your own posts have a special color so you can easily spot them from the comment view. \r\n\r\nThe form also does not display any guest fields when logged in.','','0','-1','1160421310','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('13','Managers','','1','9','0','','87.211.130.14','91e230cf219e3ade10f32d6a41d0bd4d','Comments posted when only logged in as a manager user will use your manager name.\r\n\r\nModerators options are always shown when you are logged in as manager user.','','0','1','1160421487','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('14','Moderation','','1','9','0','','87.211.130.14','58fade927c1df50ba6131f2b0e53c120','In this setup the Site Admins group is defined as being the moderator for this particular comment view. These users will have extra moderation options \r\n\r\nManager users, Moderators or Trusted users can post bad words like: dotNet.','','0','-1','1160422081','0','0','0','0','0','0','0'); + + +REPLACE INTO `{PREFIX}jot_content` VALUES ('15','I\'m untrusted','','0','9','0','','87.211.130.14','edb75dab198ff302efbf2f60e548c0b3','Untrusted users however can NOT post bad words like: dotNet. When they do the posts will be unpublished.','','0','0','1160422167','0','0','0','0','0','0','0'); + + +# +# Table structure for table `jot_subscriptions` +# + + +CREATE TABLE IF NOT EXISTS `{PREFIX}jot_subscriptions` (`id` mediumint(10) NOT NULL auto_increment, `uparent` mediumint(10) NOT NULL default '0', `tagid` varchar(50) NOT NULL default '', `userid` mediumint(10) NOT NULL default '0', PRIMARY KEY (`id`), KEY `uparent` (`uparent`), KEY `tagid` (`tagid`), KEY `userid` (`userid`)) ENGINE=MyISAM {TABLEENCODING}; + diff --git a/install/setup.info.php b/install/setup.info.php index 6b72ab72..89b06f11 100755 --- a/install/setup.info.php +++ b/install/setup.info.php @@ -62,7 +62,7 @@ $params['output_widget'], $params['output_widget_params'], "$templatePath/{$params['filename']}", /* not currently used */ - $params['template_assignments']!="*"?$params['template_assignments']:implode(",",array_map(create_function('$v','return $v[0];'),$mt)), /* comma-separated list of template names */ + $params['template_assignments']!="*"?$params['template_assignments']:implode(",",array_map(function($value){return isset($value[0]) && is_scalar($value[0]);},$mt)), /* comma-separated list of template names */ $params['modx_category'], $params['lock_tv'], /* value should be 1 or 0 */ array_key_exists('installset', $params) ? preg_split("/\s*,\s*/", $params['installset']) : false diff --git a/install/setup.sql b/install/setup.sql index 95ed1015..c8429ead 100755 --- a/install/setup.sql +++ b/install/setup.sql @@ -1,1154 +1,1178 @@ -# EVO Database Script for New/Upgrade Installations -# EVO was created By Raymond Irving - Nov 2004 -# -# Each sql command is separated by double lines \n\n - - -DROP TABLE IF EXISTS `{PREFIX}active_users`; - -CREATE TABLE `{PREFIX}active_users` ( - `sid` varchar(32) NOT NULL default '', - `internalKey` int(9) NOT NULL default '0', - `username` varchar(50) NOT NULL default '', - `lasthit` int(20) NOT NULL default '0', - `action` varchar(10) NOT NULL default '', - `id` int(10) default NULL, - PRIMARY KEY (`sid`) -) ENGINE=MyISAM COMMENT='Contains data about last user action.'; - -DROP TABLE IF EXISTS `{PREFIX}active_user_locks`; - -CREATE TABLE `{PREFIX}active_user_locks` ( - `id` int(10) NOT NULL AUTO_INCREMENT, - `sid` varchar(32) NOT NULL default '', - `internalKey` int(9) NOT NULL default '0', - `elementType` int(1) NOT NULL default '0', - `elementId` int(10) NOT NULL default '0', - `lasthit` int(20) NOT NULL default '0', - PRIMARY KEY(`id`), - UNIQUE INDEX ix_element_id (`elementType`,`elementId`,`sid`) -) ENGINE=MyISAM COMMENT='Contains data about locked elements.'; - -DROP TABLE IF EXISTS `{PREFIX}active_user_sessions`; - -CREATE TABLE `{PREFIX}active_user_sessions` ( - `sid` varchar(32) NOT NULL default '', - `internalKey` int(9) NOT NULL default '0', - `lasthit` int(20) NOT NULL default '0', - `ip` varchar(50) NOT NULL default '', - PRIMARY KEY(`sid`) -) ENGINE=MyISAM COMMENT='Contains data about valid user sessions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}categories` ( - `id` integer NOT NULL AUTO_INCREMENT, - `category` varchar(45) NOT NULL DEFAULT '', - `rank` INT(5) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY(`id`) -) ENGINE=MyISAM COMMENT='Categories to be used snippets,tv,chunks, etc'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}document_groups` ( - `id` int(10) NOT NULL auto_increment, - `document_group` int(10) NOT NULL default '0', - `document` int(10) NOT NULL default '0', - PRIMARY KEY (`id`), - KEY `document` (`document`), - KEY `document_group` (`document_group`), - UNIQUE INDEX `ix_dg_id` (`document_group`,`document`) -) ENGINE=MyISAM COMMENT='Contains data used for access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}documentgroup_names` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(245) NOT NULL default '', - `private_memgroup` tinyint DEFAULT 0 COMMENT 'determine whether the document group is private to manager users', - `private_webgroup` tinyint DEFAULT 0 COMMENT 'determines whether the document is private to web users', - PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`) -) ENGINE=MyISAM COMMENT='Contains data used for access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}event_log` ( - `id` integer NOT NULL AUTO_INCREMENT, - `eventid` integer DEFAULT 0, - `createdon` integer NOT NULL DEFAULT 0, - `type` tinyint NOT NULL DEFAULT 1 COMMENT '1- information, 2 - warning, 3- error', - `user` integer NOT NULL DEFAULT 0 COMMENT 'link to user table', - `usertype` tinyint NOT NULL DEFAULT 0 COMMENT '0 - manager, 1 - web', - `source` varchar(50) NOT NULL DEFAULT '', - `description` text, - PRIMARY KEY(`id`), - KEY `user`(`user`) -) ENGINE=MyISAM COMMENT='Stores event and error logs'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}manager_log` ( - `id` int(10) NOT NULL auto_increment, - `timestamp` int(20) NOT NULL default '0', - `internalKey` int(10) NOT NULL default '0', - `username` varchar(255) default NULL, - `action` int(10) NOT NULL default '0', - `itemid` varchar(10) default '0', - `itemname` varchar(255) default NULL, - `message` varchar(255) NOT NULL default '', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains a record of user interaction.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}manager_users` ( - `id` int(10) NOT NULL auto_increment, - `username` varchar(100) NOT NULL default '', - `password` varchar(100) NOT NULL default '', - PRIMARY KEY (`id`), - UNIQUE KEY `username` (`username`) -) ENGINE=MyISAM COMMENT='Contains login information for backend users.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}member_groups` ( - `id` int(10) NOT NULL auto_increment, - `user_group` int(10) NOT NULL default '0', - `member` int(10) NOT NULL default '0', - PRIMARY KEY (`id`), - UNIQUE INDEX `ix_group_member` (`user_group`,`member`) -) ENGINE=MyISAM COMMENT='Contains data used for access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}membergroup_access` ( - `id` int(10) NOT NULL auto_increment, - `membergroup` int(10) NOT NULL default '0', - `documentgroup` int(10) NOT NULL default '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains data used for access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}membergroup_names` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(245) NOT NULL default '', - PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`) -) ENGINE=MyISAM COMMENT='Contains data used for access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_content` ( - `id` int(10) NOT NULL auto_increment, - `type` varchar(20) NOT NULL default 'document', - `contentType` varchar(50) NOT NULL default 'text/html', - `pagetitle` varchar(255) NOT NULL default '', - `longtitle` varchar(255) NOT NULL default '', - `description` varchar(255) NOT NULL default '', - `alias` varchar(245) default '', - `link_attributes` varchar(255) NOT NULL default '' COMMENT 'Link attriubtes', - `published` int(1) NOT NULL default '0', - `pub_date` int(20) NOT NULL default '0', - `unpub_date` int(20) NOT NULL default '0', - `parent` int(10) NOT NULL default '0', - `isfolder` int(1) NOT NULL default '0', - `introtext` text COMMENT 'Used to provide quick summary of the document', - `content` mediumtext, - `richtext` tinyint(1) NOT NULL default '1', - `template` int(10) NOT NULL default '0', - `menuindex` int(10) NOT NULL default '0', - `searchable` int(1) NOT NULL default '1', - `cacheable` int(1) NOT NULL default '1', - `createdby` int(10) NOT NULL default '0', - `createdon` int(20) NOT NULL default '0', - `editedby` int(10) NOT NULL default '0', - `editedon` int(20) NOT NULL default '0', - `deleted` int(1) NOT NULL default '0', - `deletedon` int(20) NOT NULL default '0', - `deletedby` int(10) NOT NULL default '0', - `publishedon` int(20) NOT NULL default '0' COMMENT 'Date the document was published', - `publishedby` int(10) NOT NULL default '0' COMMENT 'ID of user who published the document', - `menutitle` varchar(255) NOT NULL DEFAULT '' COMMENT 'Menu title', - `donthit` tinyint(1) NOT NULL default '0' COMMENT 'Disable page hit count', - `privateweb` tinyint(1) NOT NULL default '0' COMMENT 'Private web document', - `privatemgr` tinyint(1) NOT NULL default '0' COMMENT 'Private manager document', - `content_dispo` tinyint(1) NOT NULL default '0' COMMENT '0-inline, 1-attachment', - `hidemenu` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Hide document from menu', - `alias_visible` INT(2) NOT NULL DEFAULT '1', - PRIMARY KEY (`id`), - KEY `id` (`id`), - KEY `parent` (`parent`), - KEY aliasidx (`alias`), - KEY typeidx (`type`), - FULLTEXT KEY `content_ft_idx` (`pagetitle`,`description`,`content`) -) ENGINE=MyISAM COMMENT='Contains the site document tree.'; - - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_htmlsnippets` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(100) NOT NULL default '', - `description` varchar(255) NOT NULL default 'Chunk', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `editor_name` VARCHAR(50) NOT NULL DEFAULT 'none', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `cache_type` tinyint(1) NOT NULL default '0' COMMENT 'Cache option', - `snippet` mediumtext, - `locked` tinyint(4) NOT NULL default '0', - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the snippet', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains the site chunks.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_modules` ( - `id` integer NOT NULL AUTO_INCREMENT, - `name` varchar(50) NOT NULL DEFAULT '', - `description` varchar(255) NOT NULL DEFAULT '0', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `disabled` tinyint NOT NULL DEFAULT '0', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `wrap` tinyint NOT NULL DEFAULT '0', - `locked` tinyint NOT NULL default '0', - `icon` varchar(255) NOT NULL DEFAULT '' COMMENT 'url to module icon', - `enable_resource` tinyint NOT NULL DEFAULT '0' COMMENT 'enables the resource file feature', - `resourcefile` varchar(255) NOT NULL DEFAULT '' COMMENT 'a physical link to a resource file', - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - `guid` varchar(32) NOT NULL DEFAULT '' COMMENT 'globally unique identifier', - `enable_sharedparams` tinyint NOT NULL DEFAULT '0', - `properties` text, - `modulecode` mediumtext COMMENT 'module boot up code', - PRIMARY KEY(`id`) -) ENGINE=MyISAM COMMENT='Site Modules'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_module_depobj` ( - `id` integer NOT NULL AUTO_INCREMENT, - `module` integer NOT NULL DEFAULT 0, - `resource` integer NOT NULL DEFAULT 0, - `type` integer(2) NOT NULL DEFAULT 0 COMMENT '10-chunks, 20-docs, 30-plugins, 40-snips, 50-tpls, 60-tvs', - PRIMARY KEY(`id`) -) ENGINE=MyISAM COMMENT='Module Dependencies'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_module_access` ( - `id` integer UNSIGNED NOT NULL AUTO_INCREMENT, - `module` integer NOT NULL DEFAULT 0, - `usergroup` integer NOT NULL DEFAULT 0, - PRIMARY KEY(`id`) -) ENGINE=MyISAM COMMENT='Module users group access permission'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_plugins` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(50) NOT NULL default '', - `description` varchar(255) NOT NULL default 'Plugin', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `cache_type` tinyint(1) NOT NULL default '0' COMMENT 'Cache option', - `plugincode` mediumtext, - `locked` tinyint(4) NOT NULL default '0', - `properties` text COMMENT 'Default Properties', - `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the plugin', - `moduleguid` varchar(32) NOT NULL default '' COMMENT 'GUID of module from which to import shared parameters', - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains the site plugins.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_plugin_events` ( - `pluginid` INT(10) NOT NULL, - `evtid` INT(10) NOT NULL default 0, - `priority` INT(10) NOT NULL default 0 COMMENT 'determines plugin run order', - PRIMARY KEY ( `pluginid` , `evtid` ) -) ENGINE=MyISAM COMMENT='Links to system events'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_snippets` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(50) NOT NULL default '', - `description` varchar(255) NOT NULL default 'Snippet', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `cache_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Cache option', - `snippet` mediumtext, - `locked` tinyint(4) NOT NULL default '0', - `properties` text COMMENT 'Default Properties', - `moduleguid` varchar(32) NOT NULL default '' COMMENT 'GUID of module from which to import shared parameters', - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the snippet', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains the site snippets.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_templates` ( - `id` int(10) NOT NULL auto_increment, - `templatename` varchar(100) NOT NULL default '', - `description` varchar(255) NOT NULL default 'Template', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `icon` varchar(255) NOT NULL default '' COMMENT 'url to icon file', - `template_type` integer NOT NULL DEFAULT '0' COMMENT '0-page,1-content', - `content` mediumtext, - `locked` tinyint(4) NOT NULL default '0', - `selectable` tinyint(4) NOT NULL default '1', - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains the site templates.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}system_eventnames` ( - `id` INT(10) NOT NULL AUTO_INCREMENT, - `name` varchar(50) NOT NULL default '', - `service` tinyint NOT NULL default '0' COMMENT 'System Service number', - `groupname` varchar(20) NOT NULL default '', - PRIMARY KEY(`id`) -) ENGINE=MyISAM COMMENT='System Event Names.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}system_settings` ( - `setting_name` varchar(50) NOT NULL default '', - `setting_value` text, - PRIMARY KEY (`setting_name`) -) ENGINE=MyISAM COMMENT='Contains Content Manager settings.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_access` ( - `id` int(10) NOT NULL auto_increment, - `tmplvarid` int(10) NOT NULL default '0', - `documentgroup` int(10) NOT NULL default '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains data used for template variable access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_contentvalues` ( - `id` int(11) NOT NULL auto_increment, - `tmplvarid` int(10) NOT NULL default '0' COMMENT 'Template Variable id', - `contentid` int(10) NOT NULL default '0' COMMENT 'Site Content Id', - `value` mediumtext, - PRIMARY KEY (id), - KEY idx_tmplvarid (tmplvarid), - KEY idx_id (contentid), - FULLTEXT KEY `value_ft_idx` (`value`), - UNIQUE INDEX `ix_tvid_contentid` (`tmplvarid`,`contentid`) -) ENGINE=MyISAM COMMENT='Site Template Variables Content Values Link Table'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_templates` ( - `tmplvarid` int(10) NOT NULL default '0' COMMENT 'Template Variable id', - `templateid` int(11) NOT NULL default '0', - `rank` int(11) NOT NULL default '0', - PRIMARY KEY (`tmplvarid`, `templateid`) -) ENGINE=MyISAM COMMENT='Site Template Variables Templates Link Table'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvars` ( - `id` INT(11) NOT NULL auto_increment, - `type` varchar(50) NOT NULL default '', - `name` varchar(100) NOT NULL default '', - `caption` varchar(80) NOT NULL default '', - `description` varchar(255) NOT NULL default '', - `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', - `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', - `locked` tinyint(4) NOT NULL default '0', - `elements` text, - `rank` int(11) NOT NULL default '0', - `display` varchar(20) NOT NULL default '' COMMENT 'Display Control', - `display_params` text COMMENT 'Display Control Properties', - `default_text` text, - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - PRIMARY KEY (id), - KEY `indx_rank`(`rank`) -) ENGINE=MyISAM COMMENT='Site Template Variables'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}user_attributes` ( - `id` int(10) NOT NULL auto_increment, - `internalKey` int(10) NOT NULL default '0', - `fullname` varchar(100) NOT NULL default '', - `role` int(10) NOT NULL default '0', - `email` varchar(100) NOT NULL default '', - `phone` varchar(100) NOT NULL default '', - `mobilephone` varchar(100) NOT NULL default '', - `blocked` int(1) NOT NULL default '0', - `blockeduntil` int(11) NOT NULL default '0', - `blockedafter` int(11) NOT NULL default '0', - `logincount` int(11) NOT NULL default '0', - `lastlogin` int(11) NOT NULL default '0', - `thislogin` int(11) NOT NULL default '0', - `failedlogincount` int(10) NOT NULL default '0', - `sessionid` varchar(100) NOT NULL default '', - `dob` int(10) NOT NULL DEFAULT '0', - `gender` int(1) NOT NULL DEFAULT '0' COMMENT '0 - unknown, 1 - Male 2 - female', - `country` varchar(5) NOT NULL default '', - `street` varchar(255) NOT NULL DEFAULT '', - `city` varchar(255) NOT NULL DEFAULT '', - `state` varchar(25) NOT NULL default '', - `zip` varchar(25) NOT NULL default '', - `fax` varchar(100) NOT NULL default '', - `photo` varchar(255) NOT NULL default '' COMMENT 'link to photo', - `comment` text, - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `userid` (`internalKey`) -) ENGINE=MyISAM COMMENT='Contains information about the backend users.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}user_messages` ( - `id` int(10) NOT NULL auto_increment, - `type` varchar(15) NOT NULL default '', - `subject` varchar(60) NOT NULL default '', - `message` text, - `sender` int(10) NOT NULL default '0', - `recipient` int(10) NOT NULL default '0', - `private` tinyint(4) NOT NULL default '0', - `postdate` int(20) NOT NULL default '0', - `messageread` tinyint(1) NOT NULL default '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains messages for the Content Manager messaging system.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}user_roles` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(50) NOT NULL default '', - `description` varchar(255) NOT NULL default '', - `frames` int(1) NOT NULL default '0', - `home` int(1) NOT NULL default '0', - `view_document` int(1) NOT NULL default '0', - `new_document` int(1) NOT NULL default '0', - `save_document` int(1) NOT NULL default '0', - `publish_document` int(1) NOT NULL default '0', - `delete_document` int(1) NOT NULL default '0', - `empty_trash` int(1) NOT NULL default '0', - `action_ok` int(1) NOT NULL default '0', - `logout` int(1) NOT NULL default '0', - `help` int(1) NOT NULL default '0', - `messages` int(1) NOT NULL default '0', - `new_user` int(1) NOT NULL default '0', - `edit_user` int(1) NOT NULL default '0', - `logs` int(1) NOT NULL default '0', - `edit_parser` int(1) NOT NULL default '0', - `save_parser` int(1) NOT NULL default '0', - `edit_template` int(1) NOT NULL default '0', - `settings` int(1) NOT NULL default '0', - `credits` int(1) NOT NULL default '0', - `new_template` int(1) NOT NULL default '0', - `save_template` int(1) NOT NULL default '0', - `delete_template` int(1) NOT NULL default '0', - `edit_snippet` int(1) NOT NULL default '0', - `new_snippet` int(1) NOT NULL default '0', - `save_snippet` int(1) NOT NULL default '0', - `delete_snippet` int(1) NOT NULL default '0', - `edit_chunk` int(1) NOT NULL default '0', - `new_chunk` int(1) NOT NULL default '0', - `save_chunk` int(1) NOT NULL default '0', - `delete_chunk` int(1) NOT NULL default '0', - `empty_cache` int(1) NOT NULL default '0', - `edit_document` int(1) NOT NULL default '0', - `change_password` int(1) NOT NULL default '0', - `error_dialog` int(1) NOT NULL default '0', - `about` int(1) NOT NULL default '0', - `category_manager` int(1) NOT NULL default '0', - `file_manager` int(1) NOT NULL default '0', - `assets_files` int(1) NOT NULL default '0', - `assets_images` int(1) NOT NULL default '0', - `save_user` int(1) NOT NULL default '0', - `delete_user` int(1) NOT NULL default '0', - `save_password` int(11) NOT NULL default '0', - `edit_role` int(1) NOT NULL default '0', - `save_role` int(1) NOT NULL default '0', - `delete_role` int(1) NOT NULL default '0', - `new_role` int(1) NOT NULL default '0', - `access_permissions` int(1) NOT NULL default '0', - `bk_manager` int(1) NOT NULL DEFAULT 0, - `new_plugin` int(1) NOT NULL DEFAULT 0, - `edit_plugin` int(1) NOT NULL DEFAULT 0, - `save_plugin` int(1) NOT NULL DEFAULT 0, - `delete_plugin` int(1) NOT NULL DEFAULT 0, - `new_module` int(1) NOT NULL DEFAULT 0, - `edit_module` int(1) NOT NULL DEFAULT 0, - `save_module` int(1) NOT NULL DEFAULT 0, - `delete_module` int(1) NOT NULL DEFAULT 0, - `exec_module` int(1) NOT NULL DEFAULT 0, - `view_eventlog` int(1) NOT NULL DEFAULT 0, - `delete_eventlog` int(1) NOT NULL DEFAULT 0, - `new_web_user` int(1) NOT NULL default '0', - `edit_web_user` int(1) NOT NULL default '0', - `save_web_user` int(1) NOT NULL default '0', - `delete_web_user` int(1) NOT NULL default '0', - `web_access_permissions` int(1) NOT NULL default '0', - `view_unpublished` int(1) NOT NULL default '0', - `import_static` int(1) NOT NULL default '0', - `export_static` int(1) NOT NULL default '0', - `remove_locks` int(1) NOT NULL default '0', - `display_locks` int(1) NOT NULL default '0', - `change_resourcetype` int(1) NOT NULL default '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains information describing the user roles.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}user_settings` ( - `user` integer NOT NULL, - `setting_name` varchar(50) NOT NULL default '', - `setting_value` text, - PRIMARY KEY ( `user` , `setting_name` ), - KEY `setting_name` (`setting_name`), - KEY `user` (`user`) -) ENGINE=MyISAM COMMENT='Contains backend user settings.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}web_groups` ( - `id` int(10) NOT NULL auto_increment, - `webgroup` int(10) NOT NULL default '0', - `webuser` int(10) NOT NULL default '0', - PRIMARY KEY (`id`), - UNIQUE INDEX `ix_group_user` (`webgroup`,`webuser`) -) ENGINE=MyISAM COMMENT='Contains data used for web access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}webgroup_access` ( - `id` int(10) NOT NULL auto_increment, - `webgroup` int(10) NOT NULL default '0', - `documentgroup` int(10) NOT NULL default '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM COMMENT='Contains data used for web access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}webgroup_names` ( - `id` int(10) NOT NULL auto_increment, - `name` varchar(245) NOT NULL default '', - PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`) -) ENGINE=MyISAM COMMENT='Contains data used for web access permissions.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}web_user_attributes` ( - `id` int(10) NOT NULL auto_increment, - `internalKey` int(10) NOT NULL default '0', - `fullname` varchar(100) NOT NULL default '', - `role` int(10) NOT NULL default '0', - `email` varchar(100) NOT NULL default '', - `phone` varchar(100) NOT NULL default '', - `mobilephone` varchar(100) NOT NULL default '', - `blocked` int(1) NOT NULL default '0', - `blockeduntil` int(11) NOT NULL default '0', - `blockedafter` int(11) NOT NULL default '0', - `logincount` int(11) NOT NULL default '0', - `lastlogin` int(11) NOT NULL default '0', - `thislogin` int(11) NOT NULL default '0', - `failedlogincount` int(10) NOT NULL default '0', - `sessionid` varchar(100) NOT NULL default '', - `dob` int(10) NOT NULL DEFAULT '0', - `gender` int(1) NOT NULL DEFAULT '0' COMMENT '0 - unknown, 1 - Male 2 - female', - `country` varchar(25) NOT NULL default '', - `street` varchar(255) NOT NULL DEFAULT '', - `city` varchar(255) NOT NULL DEFAULT '', - `state` varchar(25) NOT NULL default '', - `zip` varchar(25) NOT NULL default '', - `fax` varchar(100) NOT NULL default '', - `photo` varchar(255) NOT NULL default '' COMMENT 'link to photo', - `comment` text, - `createdon` integer NOT NULL DEFAULT '0', - `editedon` integer NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `userid` (`internalKey`) -) ENGINE=MyISAM COMMENT='Contains information for web users.'; - -CREATE TABLE IF NOT EXISTS `{PREFIX}web_users` ( - `id` int(10) NOT NULL auto_increment, - `username` varchar(100) NOT NULL default '', - `password` varchar(100) NOT NULL default '', - `cachepwd` varchar(100) NOT NULL default '' COMMENT 'Store new unconfirmed password', - PRIMARY KEY (`id`), - UNIQUE KEY `username` (`username`) -) ENGINE=MyISAM; - -CREATE TABLE IF NOT EXISTS `{PREFIX}web_user_settings` ( - `webuser` integer NOT NULL, - `setting_name` varchar(50) NOT NULL default '', - `setting_value` text, - PRIMARY KEY ( `webuser` , `setting_name` ), - KEY `setting_name` (`setting_name`), - KEY `webuserid` (`webuser`) -) ENGINE=MyISAM COMMENT='Contains web user settings.'; - - -# upgrade-able[[ - This block of code will be executed during upgrades - -# For backward compatibilty with early versions -#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -ALTER TABLE `{PREFIX}site_content` - ADD COLUMN `publishedon` int(20) NOT NULL DEFAULT '0' COMMENT 'Date the document was published' AFTER `deletedby`; - -ALTER TABLE `{PREFIX}site_content` - ADD COLUMN `publishedby` int(10) NOT NULL DEFAULT '0' COMMENT 'ID of user who published the document' AFTER `publishedon`; - -ALTER TABLE `{PREFIX}site_content` - ADD COLUMN `link_attributes` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link attriubtes' AFTER `alias`; - -ALTER TABLE `{PREFIX}site_content` - ADD COLUMN `alias_visible` INT(2) NOT NULL DEFAULT '1' COMMENT 'Hide document from alias path'; - -ALTER TABLE `{PREFIX}site_htmlsnippets` - ADD COLUMN `editor_name` VARCHAR(50) NOT NULL DEFAULT 'none' AFTER `editor_type`; - -ALTER TABLE `{PREFIX}site_htmlsnippets` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_htmlsnippets` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_htmlsnippets` - ADD COLUMN `disabled` tinyint NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_plugin_events` - ADD COLUMN `priority` INT(10) NOT NULL default '0' COMMENT 'determines the run order of the plugin' AFTER `evtid`; - -ALTER TABLE `{PREFIX}site_templates` - ADD COLUMN `selectable` TINYINT(4) NOT NULL DEFAULT '1' AFTER `locked`; - -ALTER TABLE `{PREFIX}site_templates` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_templates` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_tmplvar_templates` - ADD COLUMN `rank` integer(11) NOT NULL DEFAULT '0' AFTER `templateid`; - -ALTER TABLE `{PREFIX}site_tmplvars` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_tmplvars` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}user_attributes` - ADD COLUMN `street` varchar(255) NOT NULL DEFAULT '' AFTER `country`; - -ALTER TABLE `{PREFIX}user_attributes` - ADD COLUMN `city` varchar(255) NOT NULL DEFAULT '' AFTER `street`; - -ALTER TABLE `{PREFIX}user_attributes` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}user_attributes` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `edit_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `delete_snippet`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `new_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `edit_chunk`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `save_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `new_chunk`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `delete_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `save_chunk`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `empty_trash` INT(1) NOT NULL DEFAULT '0' AFTER `delete_document`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `view_unpublished` INT(1) NOT NULL DEFAULT '0' AFTER `web_access_permissions`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `import_static` INT(1) NOT NULL DEFAULT '0' AFTER `view_unpublished`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `export_static` INT(1) NOT NULL DEFAULT '0' AFTER `import_static`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `remove_locks` INT(1) NOT NULL DEFAULT '0' AFTER `export_static`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `display_locks` INT(1) NOT NULL DEFAULT '0' AFTER `remove_locks`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `publish_document` INT(1) NOT NULL DEFAULT '0' AFTER `save_document`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `change_resourcetype` INT(1) NOT NULL DEFAULT '0' AFTER `remove_locks`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `assets_images` INT(1) NOT NULL DEFAULT '1' AFTER `file_manager`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `assets_files` INT(1) NOT NULL DEFAULT '1' AFTER `assets_images`; - -ALTER TABLE `{PREFIX}user_roles` - ADD COLUMN `category_manager` INT(1) NOT NULL DEFAULT '0' AFTER `about`; - -ALTER TABLE `{PREFIX}categories` - ADD COLUMN `rank` INT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `category`; - -ALTER TABLE `{PREFIX}web_user_attributes` - ADD COLUMN `street` varchar(255) NOT NULL DEFAULT '' AFTER `country`; - -ALTER TABLE `{PREFIX}web_user_attributes` - ADD COLUMN `city` varchar(255) NOT NULL DEFAULT '' AFTER `street`; - -ALTER TABLE `{PREFIX}web_user_attributes` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}web_user_attributes` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_snippets` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_snippets` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_snippets` - ADD COLUMN `disabled` tinyint NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_plugins` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_plugins` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_templates` - ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_templates` - ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; - -# Set the private manager group flag - -UPDATE {PREFIX}documentgroup_names AS dgn - LEFT JOIN {PREFIX}membergroup_access AS mga ON mga.documentgroup = dgn.id - LEFT JOIN {PREFIX}webgroup_access AS wga ON wga.documentgroup = dgn.id - SET dgn.private_memgroup = (mga.membergroup IS NOT NULL), - dgn.private_webgroup = (wga.webgroup IS NOT NULL); - - -UPDATE `{PREFIX}site_plugins` SET `disabled`='1' WHERE `name` IN ('Bottom Button Bar'); - -UPDATE `{PREFIX}site_plugins` SET `disabled`='1' WHERE `name` IN ('Inherit Parent Template'); - -UPDATE `{PREFIX}system_settings` SET `setting_value` = '0' WHERE `setting_name` = 'validate_referer' AND `setting_value` = '00'; - -# start related to #EVO-1321 - -UPDATE `{PREFIX}site_content` SET `type`='reference', `contentType`='text/html' WHERE `type`='' AND `content` REGEXP '^https?://([-\w\.]+)+(:\d+)?/?'; - -UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/xml' WHERE `type`='' AND `alias` REGEXP '\.(rss|xml)$'; - -UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/javascript' WHERE `type`='' AND `alias` REGEXP '\.js$'; - -UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/css' WHERE `type`='' AND `alias` REGEXP '\.css$'; - -UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/html' WHERE `type`=''; - -ALTER TABLE `{PREFIX}documentgroup_names` - MODIFY COLUMN `name` varchar(245) NOT NULL default ''; - -ALTER TABLE `{PREFIX}event_log` - MODIFY COLUMN `source` varchar(50) NOT NULL DEFAULT '', - MODIFY COLUMN `description` text; - -ALTER TABLE `{PREFIX}categories` - MODIFY COLUMN `category` varchar(45) NOT NULL DEFAULT ''; - -ALTER TABLE `{PREFIX}manager_users` - MODIFY COLUMN `username` varchar(100) NOT NULL DEFAULT ''; - -ALTER TABLE `{PREFIX}membergroup_names` - MODIFY COLUMN `name` varchar(245) NOT NULL default ''; - -ALTER TABLE `{PREFIX}site_content` - MODIFY COLUMN `pagetitle` varchar(255) NOT NULL default '', - MODIFY COLUMN `alias` varchar(245) default '', - MODIFY COLUMN `introtext` text COMMENT 'Used to provide quick summary of the document', - MODIFY COLUMN `content` mediumtext, - MODIFY COLUMN `menutitle` varchar(255) NOT NULL DEFAULT '' COMMENT 'Menu title', - MODIFY COLUMN `template` int(10) NOT NULL default '0'; - -ALTER TABLE `{PREFIX}site_htmlsnippets` - MODIFY COLUMN `snippet` mediumtext; - -ALTER TABLE `{PREFIX}site_module_access` - MODIFY COLUMN `module` int(11) NOT NULL DEFAULT '0', - MODIFY COLUMN `usergroup` int(11) NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_module_depobj` - MODIFY COLUMN `module` int(11) NOT NULL DEFAULT '0', - MODIFY COLUMN `resource` int(11) NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_modules` - MODIFY COLUMN `name` varchar(50) NOT NULL DEFAULT '', - MODIFY COLUMN `disabled` tinyint(4) NOT NULL DEFAULT '0', - MODIFY COLUMN `icon` varchar(255) NOT NULL DEFAULT '' COMMENT 'url to module icon', - MODIFY COLUMN `resourcefile` varchar(255) NOT NULL DEFAULT '' COMMENT 'a physical link to a resource file', - MODIFY COLUMN `createdon` int(11) NOT NULL DEFAULT '0', - MODIFY COLUMN `editedon` int(11) NOT NULL DEFAULT '0', - MODIFY COLUMN `guid` varchar(32) NOT NULL DEFAULT '' COMMENT 'globally unique identifier', - MODIFY COLUMN `properties` text, - MODIFY COLUMN `modulecode` mediumtext COMMENT 'module boot up code'; - -ALTER TABLE `{PREFIX}site_plugin_events` - MODIFY COLUMN `evtid` int(10) NOT NULL DEFAULT '0'; - -ALTER TABLE `{PREFIX}site_plugins` - MODIFY COLUMN `properties` text COMMENT 'Default Properties', - MODIFY COLUMN `plugincode` mediumtext, - MODIFY COLUMN `moduleguid` varchar(32) NOT NULL DEFAULT '' COMMENT 'GUID of module from which to import shared parameters'; - -ALTER TABLE `{PREFIX}site_snippets` - MODIFY COLUMN `properties` text COMMENT 'Default Properties', - MODIFY COLUMN `snippet` mediumtext, - MODIFY COLUMN `moduleguid` varchar(32) NOT NULL DEFAULT '' COMMENT 'GUID of module from which to import shared parameters'; - -ALTER TABLE `{PREFIX}site_templates` - MODIFY COLUMN `icon` varchar(255) NOT NULL default '' COMMENT 'url to icon file', - MODIFY COLUMN `content` mediumtext; - -ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` - MODIFY COLUMN `tmplvarid` int(10) NOT NULL DEFAULT '0' COMMENT 'Template Variable id', - MODIFY COLUMN `value` mediumtext; - -ALTER TABLE `{PREFIX}site_tmplvar_templates` - MODIFY COLUMN `tmplvarid` int(10) NOT NULL DEFAULT '0' COMMENT 'Template Variable id'; - -ALTER TABLE `{PREFIX}site_tmplvars` - MODIFY COLUMN `name` varchar(50) NOT NULL default '', - MODIFY COLUMN `elements` text, - MODIFY COLUMN `display` varchar(20) NOT NULL DEFAULT '' COMMENT 'Display Control', - MODIFY COLUMN `display_params` text COMMENT 'Display Control Properties', - MODIFY COLUMN `default_text` text; - -ALTER TABLE `{PREFIX}system_eventnames` - MODIFY COLUMN `name` varchar(50) NOT NULL DEFAULT '', - MODIFY COLUMN `service` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'System Service number'; - -ALTER TABLE `{PREFIX}system_settings` MODIFY COLUMN `setting_value` text; - -ALTER TABLE `{PREFIX}user_attributes` - MODIFY COLUMN `country` varchar(5) NOT NULL DEFAULT '', - MODIFY COLUMN `state` varchar(25) NOT NULL DEFAULT '', - MODIFY COLUMN `zip` varchar(25) NOT NULL DEFAULT '', - MODIFY COLUMN `fax` varchar(100) NOT NULL DEFAULT '', - MODIFY COLUMN `photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'link to photo', - MODIFY COLUMN `comment` text; - -ALTER TABLE `{PREFIX}user_messages` MODIFY COLUMN `message` text; - -ALTER TABLE `{PREFIX}user_settings` MODIFY COLUMN `setting_value` text; - -ALTER TABLE `{PREFIX}web_users` - MODIFY COLUMN `username` varchar(100) NOT NULL DEFAULT '', - MODIFY COLUMN `cachepwd` varchar(100) NOT NULL DEFAULT '' COMMENT 'Store new unconfirmed password' AFTER `password`; - -ALTER TABLE `{PREFIX}web_user_settings` MODIFY COLUMN `setting_value` text; - -ALTER TABLE `{PREFIX}web_user_attributes` - MODIFY COLUMN `country` varchar(25) NOT NULL DEFAULT '', - MODIFY COLUMN `state` varchar(25) NOT NULL DEFAULT '', - MODIFY COLUMN `zip` varchar(25) NOT NULL DEFAULT '', - MODIFY COLUMN `fax` varchar(100) NOT NULL DEFAULT '', - MODIFY COLUMN `photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'link to photo', - MODIFY COLUMN `comment` text; - -ALTER TABLE `{PREFIX}webgroup_names` - MODIFY COLUMN `name` varchar(245) NOT NULL default ''; - -ALTER TABLE `{PREFIX}site_content` ADD INDEX `typeidx` (`type`); - -ALTER TABLE `{PREFIX}system_settings` DROP PRIMARY KEY; - -ALTER TABLE `{PREFIX}system_settings` DROP INDEX `setting_name`; - -ALTER TABLE `{PREFIX}system_settings` ADD PRIMARY KEY (`setting_name`); - -ALTER TABLE `{PREFIX}user_settings` DROP PRIMARY KEY; - -ALTER TABLE `{PREFIX}user_settings` ADD PRIMARY KEY (`user`, `setting_name`); - -ALTER TABLE `{PREFIX}web_user_settings` DROP PRIMARY KEY; - -ALTER TABLE `{PREFIX}web_user_settings` ADD PRIMARY KEY (`webuser`, `setting_name`); - -ALTER TABLE `{PREFIX}site_plugin_events` DROP PRIMARY KEY; - -ALTER TABLE `{PREFIX}site_plugin_events` ADD PRIMARY KEY (`pluginid`, `evtid`); - -ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` ADD FULLTEXT `value_ft_idx` (`value`); - -ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` ADD UNIQUE INDEX `ix_tvid_contentid` (`tmplvarid`,`contentid`); - -ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP INDEX `idx_tmplvarid`; - -ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP INDEX `idx_templateid`; - -ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP PRIMARY KEY; - -ALTER TABLE `{PREFIX}site_tmplvar_templates` ADD PRIMARY KEY (`tmplvarid`, `templateid`); - -ALTER TABLE `{PREFIX}member_groups` ADD UNIQUE INDEX `ix_group_member` (`user_group`,`member`); - -ALTER TABLE `{PREFIX}web_groups` ADD UNIQUE INDEX `ix_group_user` (`webgroup`,`webuser`); - -ALTER TABLE `{PREFIX}document_groups` ADD UNIQUE INDEX `ix_dg_id` (`document_group`,`document`); - -# ]]upgrade-able - - -# Insert / Replace system records -#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - - -# non-upgrade-able[[ - This block of code will not be executed during upgrades - - -# Default Site Template - - -REPLACE INTO `{PREFIX}site_templates` -(id, templatename, description, editor_type, category, icon, template_type, content, locked, selectable) VALUES ('3','Minimal Template','Default minimal empty template (content returned only)','0','0','','0','[*content*]','0','1'); - - -# Default Site Documents - - -REPLACE INTO `{PREFIX}site_content` VALUES (1,'document','text/html','Evolution CMS Install Success','Welcome to the EVO Content Management System','','minimal-base','',1,0,0,0,0,'','

          Install Successful!

          \r\n

          You have successfully installed Evolution CMS.

          \r\n\r\n

          Getting Help

          \r\n

          The EVO Community provides a great starting point to learn all things Evolution CMS, or you can also see some great learning resources (books, tutorials, blogs and screencasts).

          \r\n

          Welcome to EVO!

          \r\n',1,3,0,1,1,1,1130304721,1,1130304927,0,0,0,1130304721,1,'Base Install',0,0,0,0,0,1); - - -REPLACE INTO `{PREFIX}manager_users` -(id, username, password)VALUES -(1, '{ADMIN}', MD5('{ADMINPASS}')); - -REPLACE INTO `{PREFIX}user_attributes` -(id, internalKey, fullname, role, email, phone, mobilephone, blocked, blockeduntil, blockedafter, logincount, lastlogin, thislogin, failedlogincount, sessionid, dob, gender, country, street, city, state, zip, fax, photo, comment) VALUES -(1, 1, 'Admin', 1, '{ADMINEMAIL}', '', '', 0, 0, 0, 0, 0, 0, 0, '', 0, 0, '', '', '', '', '', '', '', ''); - - -REPLACE INTO `{PREFIX}user_roles` -(id,name,description,frames,home,view_document,new_document,save_document,publish_document,delete_document,empty_trash,action_ok,logout,help,messages,new_user,edit_user,logs,edit_parser,save_parser,edit_template,settings,credits,new_template,save_template,delete_template,edit_snippet,new_snippet,save_snippet,delete_snippet,edit_chunk,new_chunk,save_chunk,delete_chunk,empty_cache,edit_document,change_password,error_dialog,about,file_manager,save_user,delete_user,save_password,edit_role,save_role,delete_role,new_role,access_permissions,bk_manager,new_plugin,edit_plugin,save_plugin,delete_plugin,new_module,edit_module,save_module,exec_module,delete_module,view_eventlog,delete_eventlog,new_web_user,edit_web_user,save_web_user,delete_web_user,web_access_permissions,view_unpublished,import_static,export_static,remove_locks,assets_images,assets_files,change_resourcetype,display_locks,category_manager) VALUES -(2,'Editor','Limited to managing content',1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0), -(3,'Publisher','Editor with expanded permissions including manage users\, update Elements and site settings',1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0); - - -# ]]non-upgrade-able - - -# Default Site Settings - - -INSERT IGNORE INTO `{PREFIX}system_settings` -(setting_name, setting_value) VALUES -('settings_version',''), -('manager_theme','default'), -('server_offset_time','0'), -('manager_language','{MANAGERLANGUAGE}'), -('modx_charset','UTF-8'), -('site_name','My Evolution Site'), -('site_start','1'), -('error_page','1'), -('unauthorized_page','1'), -('site_status','1'), -('auto_template_logic','{AUTOTEMPLATELOGIC}'), -('default_template','3'), -('old_template',''), -('publish_default','1'), -('friendly_urls','1'), -('friendly_alias_urls','1'), -('use_alias_path','1'), -('cache_type','2'), -('failed_login_attempts','3'), -('blocked_minutes','60'), -('use_captcha','0'), -('emailsender','{ADMINEMAIL}'), -('use_editor','1'), -('use_browser','1'), -('fe_editor_lang','{MANAGERLANGUAGE}'), -('fck_editor_toolbar','standard'), -('fck_editor_autolang','0'), -('editor_css_path',''), -('editor_css_selectors',''), -('upload_maxsize','10485760'), -('manager_layout','4'), -('auto_menuindex','1'), -('session.cookie.lifetime','604800'), -('mail_check_timeperiod','600'), -('manager_direction','ltr'), -('xhtml_urls','0'), -('automatic_alias','1'), -('datetime_format','dd-mm-YYYY'), -('warning_visibility', '0'), -('remember_last_tab', '1'), -('enable_bindings', '1'), -('seostrict', '1'), -('number_of_results','30'), -('theme_refresher',''), -('show_picker', '0'), -('show_newresource_btn', '0'), -('show_fullscreen_btn', '0'); - -REPLACE INTO `{PREFIX}user_roles` -(id,name,description,frames,home,view_document,new_document,save_document,publish_document,delete_document,empty_trash,action_ok,logout,help,messages,new_user,edit_user,logs,edit_parser,save_parser,edit_template,settings,credits,new_template,save_template,delete_template,edit_snippet,new_snippet,save_snippet,delete_snippet,edit_chunk,new_chunk,save_chunk,delete_chunk,empty_cache,edit_document,change_password,error_dialog,about,file_manager,save_user,delete_user,save_password,edit_role,save_role,delete_role,new_role,access_permissions,bk_manager,new_plugin,edit_plugin,save_plugin,delete_plugin,new_module,edit_module,save_module,exec_module,delete_module,view_eventlog,delete_eventlog,new_web_user,edit_web_user,save_web_user,delete_web_user,web_access_permissions,view_unpublished,import_static,export_static,remove_locks,assets_images,assets_files,change_resourcetype,display_locks,category_manager) VALUES -(1, 'Administrator', 'Site administrators have full access to all functions',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); - - -# 1 - "Parser Service Events", 2 - "Manager Access Events", 3 - "Web Access Service Events", 4 - "Cache Service Events", 5 - "Template Service Events", 6 - Custom Events - - -REPLACE INTO `{PREFIX}system_eventnames` -(id,name,service,groupname) VALUES -('1','OnDocPublished','5',''), -('2','OnDocUnPublished','5',''), -('3','OnWebPagePrerender','5',''), -('4','OnWebLogin','3',''), -('5','OnBeforeWebLogout','3',''), -('6','OnWebLogout','3',''), -('7','OnWebSaveUser','3',''), -('8','OnWebDeleteUser','3',''), -('9','OnWebChangePassword','3',''), -('10','OnWebCreateGroup','3',''), -('11','OnManagerLogin','2',''), -('12','OnBeforeManagerLogout','2',''), -('13','OnManagerLogout','2',''), -('14','OnManagerSaveUser','2',''), -('15','OnManagerDeleteUser','2',''), -('16','OnManagerChangePassword','2',''), -('17','OnManagerCreateGroup','2',''), -('18','OnBeforeCacheUpdate','4',''), -('19','OnCacheUpdate','4',''), -('107','OnMakePageCacheKey','4',''), -('20','OnLoadWebPageCache','4',''), -('21','OnBeforeSaveWebPageCache','4',''), -('22','OnChunkFormPrerender','1','Chunks'), -('23','OnChunkFormRender','1','Chunks'), -('24','OnBeforeChunkFormSave','1','Chunks'), -('25','OnChunkFormSave','1','Chunks'), -('26','OnBeforeChunkFormDelete','1','Chunks'), -('27','OnChunkFormDelete','1','Chunks'), -('28','OnDocFormPrerender','1','Documents'), -('29','OnDocFormRender','1','Documents'), -('30','OnBeforeDocFormSave','1','Documents'), -('31','OnDocFormSave','1','Documents'), -('32','OnBeforeDocFormDelete','1','Documents'), -('33','OnDocFormDelete','1','Documents'), -('1033','OnDocFormUnDelete','1','Documents'), -('1034','onBeforeMoveDocument','1','Documents'), -('1035','onAfterMoveDocument','1','Documents'), -('34','OnPluginFormPrerender','1','Plugins'), -('35','OnPluginFormRender','1','Plugins'), -('36','OnBeforePluginFormSave','1','Plugins'), -('37','OnPluginFormSave','1','Plugins'), -('38','OnBeforePluginFormDelete','1','Plugins'), -('39','OnPluginFormDelete','1','Plugins'), -('40','OnSnipFormPrerender','1','Snippets'), -('41','OnSnipFormRender','1','Snippets'), -('42','OnBeforeSnipFormSave','1','Snippets'), -('43','OnSnipFormSave','1','Snippets'), -('44','OnBeforeSnipFormDelete','1','Snippets'), -('45','OnSnipFormDelete','1','Snippets'), -('46','OnTempFormPrerender','1','Templates'), -('47','OnTempFormRender','1','Templates'), -('48','OnBeforeTempFormSave','1','Templates'), -('49','OnTempFormSave','1','Templates'), -('50','OnBeforeTempFormDelete','1','Templates'), -('51','OnTempFormDelete','1','Templates'), -('52','OnTVFormPrerender','1','Template Variables'), -('53','OnTVFormRender','1','Template Variables'), -('54','OnBeforeTVFormSave','1','Template Variables'), -('55','OnTVFormSave','1','Template Variables'), -('56','OnBeforeTVFormDelete','1','Template Variables'), -('57','OnTVFormDelete','1','Template Variables'), -('58','OnUserFormPrerender','1','Users'), -('59','OnUserFormRender','1','Users'), -('60','OnBeforeUserFormSave','1','Users'), -('61','OnUserFormSave','1','Users'), -('62','OnBeforeUserFormDelete','1','Users'), -('63','OnUserFormDelete','1','Users'), -('64','OnWUsrFormPrerender','1','Web Users'), -('65','OnWUsrFormRender','1','Web Users'), -('66','OnBeforeWUsrFormSave','1','Web Users'), -('67','OnWUsrFormSave','1','Web Users'), -('68','OnBeforeWUsrFormDelete','1','Web Users'), -('69','OnWUsrFormDelete','1','Web Users'), -('70','OnSiteRefresh','1',''), -('71','OnFileManagerUpload','1',''), -('72','OnModFormPrerender','1','Modules'), -('73','OnModFormRender','1','Modules'), -('74','OnBeforeModFormDelete','1','Modules'), -('75','OnModFormDelete','1','Modules'), -('76','OnBeforeModFormSave','1','Modules'), -('77','OnModFormSave','1','Modules'), -('78','OnBeforeWebLogin','3',''), -('79','OnWebAuthentication','3',''), -('80','OnBeforeManagerLogin','2',''), -('81','OnManagerAuthentication','2',''), -('82','OnSiteSettingsRender','1','System Settings'), -('83','OnFriendlyURLSettingsRender','1','System Settings'), -('84','OnUserSettingsRender','1','System Settings'), -('85','OnInterfaceSettingsRender','1','System Settings'), -('86','OnMiscSettingsRender','1','System Settings'), -('87','OnRichTextEditorRegister','1','RichText Editor'), -('88','OnRichTextEditorInit','1','RichText Editor'), -('89','OnManagerPageInit','2',''), -('90','OnWebPageInit','5',''), -('101','OnLoadDocumentObject','5',''), -('104','OnBeforeLoadDocumentObject','5',''), -('105','OnAfterLoadDocumentObject','5',''), -('91','OnLoadWebDocument','5',''), -('92','OnParseDocument','5',''), -('106','OnParseProperties','5',''), -('108','OnBeforeParseParams','5',''), -('93','OnManagerLoginFormRender','2',''), -('94','OnWebPageComplete','5',''), -('95','OnLogPageHit','5',''), -('96','OnBeforeManagerPageInit','2',''), -('97','OnBeforeEmptyTrash','1','Documents'), -('98','OnEmptyTrash','1','Documents'), -('99','OnManagerLoginFormPrerender','2',''), -('100','OnStripAlias','1','Documents'), -('102','OnMakeDocUrl','5',''), -('103','OnBeforeLoadExtension','5',''), -('200','OnCreateDocGroup','1','Documents'), -('201','OnManagerWelcomePrerender','2',''), -('202','OnManagerWelcomeHome','2',''), -('203','OnManagerWelcomeRender','2',''), -('204','OnBeforeDocDuplicate','1','Documents'), -('205','OnDocDuplicate','1','Documents'), -('206','OnManagerMainFrameHeaderHTMLBlock','2',''), -('207','OnManagerPreFrameLoader','2',''), -('208','OnManagerFrameLoader','2',''), -('209','OnManagerTreeInit','2',''), -('210','OnManagerTreePrerender','2',''), -('211','OnManagerTreeRender','2',''), -('212','OnManagerNodePrerender','2',''), -('213','OnManagerNodeRender','2',''), -('214','OnManagerMenuPrerender','2',''), -('215','OnManagerTopPrerender','2',''), -('224','OnDocFormTemplateRender','1','Documents'), -('999','OnPageUnauthorized','1',''), -('1000','OnPageNotFound','1',''), -('1001','OnFileBrowserUpload','1','File Browser Events'); - - -# ^ I don't think we need more than 1000 built-in events. Custom events will start at 1001 - - -# Update System Tables -#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - - -UPDATE `{PREFIX}user_roles` SET - bk_manager=1, - new_plugin=1, - edit_plugin=1, - save_plugin=1, - delete_plugin=1, - new_module=1, - edit_module=1, - save_module=1, - delete_module=1, - exec_module=1, - view_eventlog = 1, - delete_eventlog = 1, - new_web_user = 1, - edit_web_user = 1, - save_web_user = 1, - delete_web_user = 1, - new_chunk = 1, - edit_chunk = 1, - save_chunk = 1, - delete_chunk = 1, - web_access_permissions = 1, - view_unpublished = 1, - publish_document = 1, - import_static = 1, - export_static = 1, - empty_trash = 1, - remove_locks = 1, - display_locks = 1, - assets_images = 1, - assets_files = 1, - change_resourcetype = 1 - WHERE `id`=1; - - -# Update any invalid Manager Themes in User Settings and reset the default theme - - -UPDATE `{PREFIX}user_settings` SET - `setting_value`='default' - WHERE `setting_name`='manager_theme'; - - -REPLACE INTO `{PREFIX}system_settings` (setting_name, setting_value) VALUES ('manager_theme','default'); - -REPLACE INTO `{PREFIX}system_settings` (setting_name, setting_value) VALUES ('email_sender_method','1'); - -UPDATE `{PREFIX}system_settings` set setting_value = if(setting_value REGEXP 'application/json',setting_value,concat_ws(",",setting_value,"application/json")) WHERE setting_name='custom_contenttype'; +# EVO Database Script for New/Upgrade Installations +# EVO was created By Raymond Irving - Nov 2004 +# +# Each sql command is separated by double lines \n\n + + +DROP TABLE IF EXISTS `{PREFIX}active_users`; + +CREATE TABLE `{PREFIX}active_users` ( + `sid` varchar(32) NOT NULL default '', + `internalKey` int(9) NOT NULL default '0', + `username` varchar(50) NOT NULL default '', + `lasthit` int(20) NOT NULL default '0', + `action` varchar(10) NOT NULL default '', + `id` int(10) default NULL, + PRIMARY KEY (`sid`, `username`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data about last user action.'; + +DROP TABLE IF EXISTS `{PREFIX}active_user_locks`; + +CREATE TABLE `{PREFIX}active_user_locks` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `sid` varchar(32) NOT NULL default '', + `internalKey` int(9) NOT NULL default '0', + `elementType` int(1) NOT NULL default '0', + `elementId` int(10) NOT NULL default '0', + `lasthit` int(20) NOT NULL default '0', + PRIMARY KEY(`id`), + UNIQUE INDEX ix_element_id (`elementType`,`elementId`,`sid`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data about locked elements.'; + +DROP TABLE IF EXISTS `{PREFIX}active_user_sessions`; + +CREATE TABLE `{PREFIX}active_user_sessions` ( + `sid` varchar(32) NOT NULL default '', + `internalKey` int(9) NOT NULL default '0', + `lasthit` int(20) NOT NULL default '0', + `ip` varchar(50) NOT NULL default '', + PRIMARY KEY(`sid`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data about valid user sessions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}categories` ( + `id` integer NOT NULL AUTO_INCREMENT, + `category` varchar(45) NOT NULL DEFAULT '', + `rank` INT(5) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY(`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Categories to be used snippets,tv,chunks, etc'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}document_groups` ( + `id` int(10) NOT NULL auto_increment, + `document_group` int(10) NOT NULL default '0', + `document` int(10) NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `document` (`document`), + KEY `document_group` (`document_group`), + UNIQUE INDEX `ix_dg_id` (`document_group`,`document`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}documentgroup_names` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(245) NOT NULL default '', + `private_memgroup` tinyint DEFAULT 0 COMMENT 'determine whether the document group is private to manager users', + `private_webgroup` tinyint DEFAULT 0 COMMENT 'determines whether the document is private to web users', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}event_log` ( + `id` integer NOT NULL AUTO_INCREMENT, + `eventid` integer DEFAULT 0, + `createdon` integer NOT NULL DEFAULT 0, + `type` tinyint NOT NULL DEFAULT 1 COMMENT '1- information, 2 - warning, 3- error', + `user` integer NOT NULL DEFAULT 0 COMMENT 'link to user table', + `usertype` tinyint NOT NULL DEFAULT 0 COMMENT '0 - manager, 1 - web', + `source` varchar(50) NOT NULL DEFAULT '', + `description` text, + PRIMARY KEY(`id`), + KEY `user`(`user`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Stores event and error logs'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}manager_log` ( + `id` int(10) NOT NULL auto_increment, + `timestamp` int(20) NOT NULL default '0', + `internalKey` int(10) NOT NULL default '0', + `username` varchar(255) default NULL, + `action` int(10) NOT NULL default '0', + `itemid` varchar(10) default '0', + `itemname` varchar(255) default NULL, + `message` varchar(255) NOT NULL default '', + `ip` varchar(46), + `useragent` varchar(255), + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains a record of user interaction.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}manager_users` ( + `id` int(10) NOT NULL auto_increment, + `username` varchar(100) NOT NULL default '', + `password` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains login information for backend users.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}member_groups` ( + `id` int(10) NOT NULL auto_increment, + `user_group` int(10) NOT NULL default '0', + `member` int(10) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE INDEX `ix_group_member` (`user_group`,`member`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}membergroup_access` ( + `id` int(10) NOT NULL auto_increment, + `membergroup` int(10) NOT NULL default '0', + `documentgroup` int(10) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}membergroup_names` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(245) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_content` ( + `id` int(10) NOT NULL auto_increment, + `type` varchar(20) NOT NULL default 'document', + `contentType` varchar(50) NOT NULL default 'text/html', + `pagetitle` varchar(255) NOT NULL default '', + `longtitle` varchar(255) NOT NULL default '', + `description` varchar(255) NOT NULL default '', + `alias` varchar(245) default '', + `link_attributes` varchar(255) NOT NULL default '' COMMENT 'Link attriubtes', + `published` int(1) NOT NULL default '0', + `pub_date` int(20) NOT NULL default '0', + `unpub_date` int(20) NOT NULL default '0', + `parent` int(10) NOT NULL default '0', + `isfolder` int(1) NOT NULL default '0', + `introtext` text COMMENT 'Used to provide quick summary of the document', + `content` mediumtext, + `richtext` tinyint(1) NOT NULL default '1', + `template` int(10) NOT NULL default '0', + `menuindex` int(10) NOT NULL default '0', + `searchable` int(1) NOT NULL default '1', + `cacheable` int(1) NOT NULL default '1', + `createdby` int(10) NOT NULL default '0', + `createdon` int(20) NOT NULL default '0', + `editedby` int(10) NOT NULL default '0', + `editedon` int(20) NOT NULL default '0', + `deleted` int(1) NOT NULL default '0', + `deletedon` int(20) NOT NULL default '0', + `deletedby` int(10) NOT NULL default '0', + `publishedon` int(20) NOT NULL default '0' COMMENT 'Date the document was published', + `publishedby` int(10) NOT NULL default '0' COMMENT 'ID of user who published the document', + `menutitle` varchar(255) NOT NULL DEFAULT '' COMMENT 'Menu title', + `donthit` tinyint(1) NOT NULL default '0' COMMENT 'Disable page hit count', + `privateweb` tinyint(1) NOT NULL default '0' COMMENT 'Private web document', + `privatemgr` tinyint(1) NOT NULL default '0' COMMENT 'Private manager document', + `content_dispo` tinyint(1) NOT NULL default '0' COMMENT '0-inline, 1-attachment', + `hidemenu` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Hide document from menu', + `alias_visible` INT(2) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `id` (`id`), + KEY `parent` (`parent`), + KEY aliasidx (`alias`), + KEY typeidx (`type`), + FULLTEXT KEY `content_ft_idx` (`pagetitle`,`description`,`content`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains the site document tree.'; + + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_htmlsnippets` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(100) NOT NULL default '', + `description` varchar(255) NOT NULL default 'Chunk', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `editor_name` VARCHAR(50) NOT NULL DEFAULT 'none', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `cache_type` tinyint(1) NOT NULL default '0' COMMENT 'Cache option', + `snippet` mediumtext, + `locked` tinyint(4) NOT NULL default '0', + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the snippet', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains the site chunks.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_modules` ( + `id` integer NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL DEFAULT '', + `description` varchar(255) NOT NULL DEFAULT '0', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `disabled` tinyint NOT NULL DEFAULT '0', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `wrap` tinyint NOT NULL DEFAULT '0', + `locked` tinyint NOT NULL default '0', + `icon` varchar(255) NOT NULL DEFAULT '' COMMENT 'url to module icon', + `enable_resource` tinyint NOT NULL DEFAULT '0' COMMENT 'enables the resource file feature', + `resourcefile` varchar(255) NOT NULL DEFAULT '' COMMENT 'a physical link to a resource file', + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + `guid` varchar(32) NOT NULL DEFAULT '' COMMENT 'globally unique identifier', + `enable_sharedparams` tinyint NOT NULL DEFAULT '0', + `properties` text, + `modulecode` mediumtext COMMENT 'module boot up code', + PRIMARY KEY(`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Site Modules'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_module_depobj` ( + `id` integer NOT NULL AUTO_INCREMENT, + `module` integer NOT NULL DEFAULT 0, + `resource` integer NOT NULL DEFAULT 0, + `type` integer(2) NOT NULL DEFAULT 0 COMMENT '10-chunks, 20-docs, 30-plugins, 40-snips, 50-tpls, 60-tvs', + PRIMARY KEY(`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Module Dependencies'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_module_access` ( + `id` integer UNSIGNED NOT NULL AUTO_INCREMENT, + `module` integer NOT NULL DEFAULT 0, + `usergroup` integer NOT NULL DEFAULT 0, + PRIMARY KEY(`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Module users group access permission'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_plugins` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `description` varchar(255) NOT NULL default 'Plugin', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `cache_type` tinyint(1) NOT NULL default '0' COMMENT 'Cache option', + `plugincode` mediumtext, + `locked` tinyint(4) NOT NULL default '0', + `properties` text COMMENT 'Default Properties', + `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the plugin', + `moduleguid` varchar(32) NOT NULL default '' COMMENT 'GUID of module from which to import shared parameters', + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains the site plugins.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_plugin_events` ( + `pluginid` INT(10) NOT NULL, + `evtid` INT(10) NOT NULL default 0, + `priority` INT(10) NOT NULL default 0 COMMENT 'determines plugin run order', + PRIMARY KEY ( `pluginid` , `evtid` ) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Links to system events'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_snippets` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `description` varchar(255) NOT NULL default 'Snippet', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `cache_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Cache option', + `snippet` mediumtext, + `locked` tinyint(4) NOT NULL default '0', + `properties` text COMMENT 'Default Properties', + `moduleguid` varchar(32) NOT NULL default '' COMMENT 'GUID of module from which to import shared parameters', + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + `disabled` tinyint NOT NULL DEFAULT '0' COMMENT 'Disables the snippet', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains the site snippets.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_templates` ( + `id` int(10) NOT NULL auto_increment, + `templatename` varchar(100) NOT NULL default '', + `description` varchar(255) NOT NULL default 'Template', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `icon` varchar(255) NOT NULL default '' COMMENT 'url to icon file', + `template_type` integer NOT NULL DEFAULT '0' COMMENT '0-page,1-content', + `content` mediumtext, + `locked` tinyint(4) NOT NULL default '0', + `selectable` tinyint(4) NOT NULL default '1', + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains the site templates.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}system_eventnames` ( + `id` INT(10) NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL default '', + `service` tinyint NOT NULL default '0' COMMENT 'System Service number', + `groupname` varchar(20) NOT NULL default '', + PRIMARY KEY(`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='System Event Names.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}system_settings` ( + `setting_name` varchar(50) NOT NULL default '', + `setting_value` text, + PRIMARY KEY (`setting_name`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains Content Manager settings.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_access` ( + `id` int(10) NOT NULL auto_increment, + `tmplvarid` int(10) NOT NULL default '0', + `documentgroup` int(10) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for template variable access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_contentvalues` ( + `id` int(11) NOT NULL auto_increment, + `tmplvarid` int(10) NOT NULL default '0' COMMENT 'Template Variable id', + `contentid` int(10) NOT NULL default '0' COMMENT 'Site Content Id', + `value` mediumtext, + PRIMARY KEY (id), + KEY idx_tmplvarid (tmplvarid), + KEY idx_id (contentid), + FULLTEXT KEY `value_ft_idx` (`value`), + UNIQUE INDEX `ix_tvid_contentid` (`tmplvarid`,`contentid`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Site Template Variables Content Values Link Table'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvar_templates` ( + `tmplvarid` int(10) NOT NULL default '0' COMMENT 'Template Variable id', + `templateid` int(11) NOT NULL default '0', + `rank` int(11) NOT NULL default '0', + PRIMARY KEY (`tmplvarid`, `templateid`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Site Template Variables Templates Link Table'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}site_tmplvars` ( + `id` INT(11) NOT NULL auto_increment, + `type` varchar(50) NOT NULL default '', + `name` varchar(100) NOT NULL default '', + `caption` varchar(80) NOT NULL default '', + `description` varchar(255) NOT NULL default '', + `editor_type` integer NOT NULL DEFAULT '0' COMMENT '0-plain text,1-rich text,2-code editor', + `category` integer NOT NULL DEFAULT '0' COMMENT 'category id', + `locked` tinyint(4) NOT NULL default '0', + `elements` text, + `rank` int(11) NOT NULL default '0', + `display` varchar(20) NOT NULL default '' COMMENT 'Display Control', + `display_params` text COMMENT 'Display Control Properties', + `default_text` text, + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + PRIMARY KEY (id), + KEY `indx_rank`(`rank`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Site Template Variables'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}user_attributes` ( + `id` int(10) NOT NULL auto_increment, + `internalKey` int(10) NOT NULL default '0', + `fullname` varchar(100) NOT NULL default '', + `role` int(10) NOT NULL default '0', + `email` varchar(100) NOT NULL default '', + `phone` varchar(100) NOT NULL default '', + `mobilephone` varchar(100) NOT NULL default '', + `blocked` int(1) NOT NULL default '0', + `blockeduntil` int(11) NOT NULL default '0', + `blockedafter` int(11) NOT NULL default '0', + `logincount` int(11) NOT NULL default '0', + `lastlogin` int(11) NOT NULL default '0', + `thislogin` int(11) NOT NULL default '0', + `failedlogincount` int(10) NOT NULL default '0', + `sessionid` varchar(100) NOT NULL default '', + `dob` int(10) NOT NULL DEFAULT '0', + `gender` int(1) NOT NULL DEFAULT '0' COMMENT '0 - unknown, 1 - Male 2 - female', + `country` varchar(5) NOT NULL default '', + `street` varchar(255) NOT NULL DEFAULT '', + `city` varchar(255) NOT NULL DEFAULT '', + `state` varchar(25) NOT NULL default '', + `zip` varchar(25) NOT NULL default '', + `fax` varchar(100) NOT NULL default '', + `photo` varchar(255) NOT NULL default '' COMMENT 'link to photo', + `comment` text, + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `userid` (`internalKey`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains information about the backend users.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}user_messages` ( + `id` int(10) NOT NULL auto_increment, + `type` varchar(15) NOT NULL default '', + `subject` varchar(60) NOT NULL default '', + `message` text, + `sender` int(10) NOT NULL default '0', + `recipient` int(10) NOT NULL default '0', + `private` tinyint(4) NOT NULL default '0', + `postdate` int(20) NOT NULL default '0', + `messageread` tinyint(1) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains messages for the Content Manager messaging system.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}user_roles` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `description` varchar(255) NOT NULL default '', + `frames` int(1) NOT NULL default '0', + `home` int(1) NOT NULL default '0', + `view_document` int(1) NOT NULL default '0', + `new_document` int(1) NOT NULL default '0', + `save_document` int(1) NOT NULL default '0', + `publish_document` int(1) NOT NULL default '0', + `delete_document` int(1) NOT NULL default '0', + `empty_trash` int(1) NOT NULL default '0', + `action_ok` int(1) NOT NULL default '0', + `logout` int(1) NOT NULL default '0', + `help` int(1) NOT NULL default '0', + `messages` int(1) NOT NULL default '0', + `new_user` int(1) NOT NULL default '0', + `edit_user` int(1) NOT NULL default '0', + `logs` int(1) NOT NULL default '0', + `edit_parser` int(1) NOT NULL default '0', + `save_parser` int(1) NOT NULL default '0', + `edit_template` int(1) NOT NULL default '0', + `settings` int(1) NOT NULL default '0', + `credits` int(1) NOT NULL default '0', + `new_template` int(1) NOT NULL default '0', + `save_template` int(1) NOT NULL default '0', + `delete_template` int(1) NOT NULL default '0', + `edit_snippet` int(1) NOT NULL default '0', + `new_snippet` int(1) NOT NULL default '0', + `save_snippet` int(1) NOT NULL default '0', + `delete_snippet` int(1) NOT NULL default '0', + `edit_chunk` int(1) NOT NULL default '0', + `new_chunk` int(1) NOT NULL default '0', + `save_chunk` int(1) NOT NULL default '0', + `delete_chunk` int(1) NOT NULL default '0', + `empty_cache` int(1) NOT NULL default '0', + `edit_document` int(1) NOT NULL default '0', + `change_password` int(1) NOT NULL default '0', + `error_dialog` int(1) NOT NULL default '0', + `about` int(1) NOT NULL default '0', + `category_manager` int(1) NOT NULL default '0', + `file_manager` int(1) NOT NULL default '0', + `assets_files` int(1) NOT NULL default '0', + `assets_images` int(1) NOT NULL default '0', + `save_user` int(1) NOT NULL default '0', + `delete_user` int(1) NOT NULL default '0', + `save_password` int(11) NOT NULL default '0', + `edit_role` int(1) NOT NULL default '0', + `save_role` int(1) NOT NULL default '0', + `delete_role` int(1) NOT NULL default '0', + `new_role` int(1) NOT NULL default '0', + `access_permissions` int(1) NOT NULL default '0', + `bk_manager` int(1) NOT NULL DEFAULT 0, + `new_plugin` int(1) NOT NULL DEFAULT 0, + `edit_plugin` int(1) NOT NULL DEFAULT 0, + `save_plugin` int(1) NOT NULL DEFAULT 0, + `delete_plugin` int(1) NOT NULL DEFAULT 0, + `new_module` int(1) NOT NULL DEFAULT 0, + `edit_module` int(1) NOT NULL DEFAULT 0, + `save_module` int(1) NOT NULL DEFAULT 0, + `delete_module` int(1) NOT NULL DEFAULT 0, + `exec_module` int(1) NOT NULL DEFAULT 0, + `view_eventlog` int(1) NOT NULL DEFAULT 0, + `delete_eventlog` int(1) NOT NULL DEFAULT 0, + `new_web_user` int(1) NOT NULL default '0', + `edit_web_user` int(1) NOT NULL default '0', + `save_web_user` int(1) NOT NULL default '0', + `delete_web_user` int(1) NOT NULL default '0', + `web_access_permissions` int(1) NOT NULL default '0', + `view_unpublished` int(1) NOT NULL default '0', + `import_static` int(1) NOT NULL default '0', + `export_static` int(1) NOT NULL default '0', + `remove_locks` int(1) NOT NULL default '0', + `display_locks` int(1) NOT NULL default '0', + `change_resourcetype` int(1) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains information describing the user roles.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}user_settings` ( + `user` integer NOT NULL, + `setting_name` varchar(50) NOT NULL default '', + `setting_value` text, + PRIMARY KEY ( `user` , `setting_name` ), + KEY `setting_name` (`setting_name`), + KEY `user` (`user`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains backend user settings.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}web_groups` ( + `id` int(10) NOT NULL auto_increment, + `webgroup` int(10) NOT NULL default '0', + `webuser` int(10) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE INDEX `ix_group_user` (`webgroup`,`webuser`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for web access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}webgroup_access` ( + `id` int(10) NOT NULL auto_increment, + `webgroup` int(10) NOT NULL default '0', + `documentgroup` int(10) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for web access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}webgroup_names` ( + `id` int(10) NOT NULL auto_increment, + `name` varchar(245) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains data used for web access permissions.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}web_user_attributes` ( + `id` int(10) NOT NULL auto_increment, + `internalKey` int(10) NOT NULL default '0', + `fullname` varchar(100) NOT NULL default '', + `role` int(10) NOT NULL default '0', + `email` varchar(100) NOT NULL default '', + `phone` varchar(100) NOT NULL default '', + `mobilephone` varchar(100) NOT NULL default '', + `blocked` int(1) NOT NULL default '0', + `blockeduntil` int(11) NOT NULL default '0', + `blockedafter` int(11) NOT NULL default '0', + `logincount` int(11) NOT NULL default '0', + `lastlogin` int(11) NOT NULL default '0', + `thislogin` int(11) NOT NULL default '0', + `failedlogincount` int(10) NOT NULL default '0', + `sessionid` varchar(100) NOT NULL default '', + `dob` int(10) NOT NULL DEFAULT '0', + `gender` int(1) NOT NULL DEFAULT '0' COMMENT '0 - unknown, 1 - Male 2 - female', + `country` varchar(25) NOT NULL default '', + `street` varchar(255) NOT NULL DEFAULT '', + `city` varchar(255) NOT NULL DEFAULT '', + `state` varchar(25) NOT NULL default '', + `zip` varchar(25) NOT NULL default '', + `fax` varchar(100) NOT NULL default '', + `photo` varchar(255) NOT NULL default '' COMMENT 'link to photo', + `comment` text, + `createdon` integer NOT NULL DEFAULT '0', + `editedon` integer NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `userid` (`internalKey`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains information for web users.'; + +CREATE TABLE IF NOT EXISTS `{PREFIX}web_users` ( + `id` int(10) NOT NULL auto_increment, + `username` varchar(100) NOT NULL default '', + `password` varchar(100) NOT NULL default '', + `cachepwd` varchar(100) NOT NULL default '' COMMENT 'Store new unconfirmed password', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`) +) ENGINE=MyISAM {TABLEENCODING}; + +CREATE TABLE IF NOT EXISTS `{PREFIX}web_user_settings` ( + `webuser` integer NOT NULL, + `setting_name` varchar(50) NOT NULL default '', + `setting_value` text, + PRIMARY KEY ( `webuser` , `setting_name` ), + KEY `setting_name` (`setting_name`), + KEY `webuserid` (`webuser`) +) ENGINE=MyISAM {TABLEENCODING} COMMENT='Contains web user settings.'; + + +# upgrade-able[[ - This block of code will be executed during upgrades + +# For backward compatibilty with early versions +#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +ALTER TABLE `{PREFIX}site_content` + ADD COLUMN `publishedon` int(20) NOT NULL DEFAULT '0' COMMENT 'Date the document was published' AFTER `deletedby`; + +ALTER TABLE `{PREFIX}site_content` + ADD COLUMN `publishedby` int(10) NOT NULL DEFAULT '0' COMMENT 'ID of user who published the document' AFTER `publishedon`; + +ALTER TABLE `{PREFIX}site_content` + ADD COLUMN `link_attributes` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link attriubtes' AFTER `alias`; + +ALTER TABLE `{PREFIX}site_content` + ADD COLUMN `alias_visible` INT(2) NOT NULL DEFAULT '1' COMMENT 'Hide document from alias path'; + +ALTER TABLE `{PREFIX}site_htmlsnippets` + ADD COLUMN `editor_name` VARCHAR(50) NOT NULL DEFAULT 'none' AFTER `editor_type`; + +ALTER TABLE `{PREFIX}site_htmlsnippets` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_htmlsnippets` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_htmlsnippets` + ADD COLUMN `disabled` tinyint NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_plugin_events` + ADD COLUMN `priority` INT(10) NOT NULL default '0' COMMENT 'determines the run order of the plugin' AFTER `evtid`; + +ALTER TABLE `{PREFIX}site_templates` + ADD COLUMN `selectable` TINYINT(4) NOT NULL DEFAULT '1' AFTER `locked`; + +ALTER TABLE `{PREFIX}site_templates` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_templates` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_tmplvar_templates` + ADD COLUMN `rank` integer(11) NOT NULL DEFAULT '0' AFTER `templateid`; + +ALTER TABLE `{PREFIX}site_tmplvars` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_tmplvars` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}user_attributes` + ADD COLUMN `street` varchar(255) NOT NULL DEFAULT '' AFTER `country`; + +ALTER TABLE `{PREFIX}user_attributes` + ADD COLUMN `city` varchar(255) NOT NULL DEFAULT '' AFTER `street`; + +ALTER TABLE `{PREFIX}user_attributes` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}user_attributes` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `edit_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `delete_snippet`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `new_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `edit_chunk`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `save_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `new_chunk`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `delete_chunk` INT(1) NOT NULL DEFAULT '0' AFTER `save_chunk`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `empty_trash` INT(1) NOT NULL DEFAULT '0' AFTER `delete_document`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `view_unpublished` INT(1) NOT NULL DEFAULT '0' AFTER `web_access_permissions`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `import_static` INT(1) NOT NULL DEFAULT '0' AFTER `view_unpublished`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `export_static` INT(1) NOT NULL DEFAULT '0' AFTER `import_static`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `remove_locks` INT(1) NOT NULL DEFAULT '0' AFTER `export_static`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `display_locks` INT(1) NOT NULL DEFAULT '0' AFTER `remove_locks`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `publish_document` INT(1) NOT NULL DEFAULT '0' AFTER `save_document`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `change_resourcetype` INT(1) NOT NULL DEFAULT '0' AFTER `remove_locks`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `assets_images` INT(1) NOT NULL DEFAULT '1' AFTER `file_manager`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `assets_files` INT(1) NOT NULL DEFAULT '1' AFTER `assets_images`; + +ALTER TABLE `{PREFIX}user_roles` + ADD COLUMN `category_manager` INT(1) NOT NULL DEFAULT '0' AFTER `about`; + +ALTER TABLE `{PREFIX}categories` + ADD COLUMN `rank` INT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `category`; + +ALTER TABLE `{PREFIX}web_user_attributes` + ADD COLUMN `street` varchar(255) NOT NULL DEFAULT '' AFTER `country`; + +ALTER TABLE `{PREFIX}web_user_attributes` + ADD COLUMN `city` varchar(255) NOT NULL DEFAULT '' AFTER `street`; + +ALTER TABLE `{PREFIX}web_user_attributes` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}web_user_attributes` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_snippets` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_snippets` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_snippets` + ADD COLUMN `disabled` tinyint NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_plugins` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_plugins` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_templates` + ADD COLUMN `createdon` integer NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_templates` + ADD COLUMN `editedon` integer NOT NULL DEFAULT '0'; + +# Set the private manager group flag + +UPDATE {PREFIX}documentgroup_names AS dgn + LEFT JOIN {PREFIX}membergroup_access AS mga ON mga.documentgroup = dgn.id + LEFT JOIN {PREFIX}webgroup_access AS wga ON wga.documentgroup = dgn.id + SET dgn.private_memgroup = (mga.membergroup IS NOT NULL), + dgn.private_webgroup = (wga.webgroup IS NOT NULL); + + +UPDATE `{PREFIX}site_plugins` SET `disabled`='1' WHERE `name` IN ('Bottom Button Bar'); + +UPDATE `{PREFIX}site_plugins` SET `disabled`='1' WHERE `name` IN ('Inherit Parent Template'); + +UPDATE `{PREFIX}system_settings` SET `setting_value` = '0' WHERE `setting_name` = 'validate_referer' AND `setting_value` = '00'; + +# start related to #EVO-1321 + +UPDATE `{PREFIX}site_content` SET `type`='reference', `contentType`='text/html' WHERE `type`='' AND `content` REGEXP '^https?://([-\w\.]+)+(:\d+)?/?'; + +UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/xml' WHERE `type`='' AND `alias` REGEXP '\.(rss|xml)$'; + +UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/javascript' WHERE `type`='' AND `alias` REGEXP '\.js$'; + +UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/css' WHERE `type`='' AND `alias` REGEXP '\.css$'; + +UPDATE `{PREFIX}site_content` SET `type`='document', `contentType`='text/html' WHERE `type`=''; + +ALTER TABLE `{PREFIX}documentgroup_names` + MODIFY COLUMN `name` varchar(245) NOT NULL default ''; + +ALTER TABLE `{PREFIX}event_log` + MODIFY COLUMN `source` varchar(50) NOT NULL DEFAULT '', + MODIFY COLUMN `description` text; + +ALTER TABLE `{PREFIX}categories` + MODIFY COLUMN `category` varchar(45) NOT NULL DEFAULT ''; + +ALTER TABLE `{PREFIX}manager_users` + MODIFY COLUMN `username` varchar(100) NOT NULL DEFAULT ''; + +ALTER TABLE `{PREFIX}membergroup_names` + MODIFY COLUMN `name` varchar(245) NOT NULL default ''; + +ALTER TABLE `{PREFIX}site_content` + MODIFY COLUMN `pagetitle` varchar(255) NOT NULL default '', + MODIFY COLUMN `alias` varchar(245) default '', + MODIFY COLUMN `introtext` text COMMENT 'Used to provide quick summary of the document', + MODIFY COLUMN `content` mediumtext, + MODIFY COLUMN `menutitle` varchar(255) NOT NULL DEFAULT '' COMMENT 'Menu title', + MODIFY COLUMN `template` int(10) NOT NULL default '0'; + +ALTER TABLE `{PREFIX}site_htmlsnippets` + MODIFY COLUMN `snippet` mediumtext; + +ALTER TABLE `{PREFIX}site_module_access` + MODIFY COLUMN `module` int(11) NOT NULL DEFAULT '0', + MODIFY COLUMN `usergroup` int(11) NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_module_depobj` + MODIFY COLUMN `module` int(11) NOT NULL DEFAULT '0', + MODIFY COLUMN `resource` int(11) NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_modules` + MODIFY COLUMN `name` varchar(50) NOT NULL DEFAULT '', + MODIFY COLUMN `disabled` tinyint(4) NOT NULL DEFAULT '0', + MODIFY COLUMN `icon` varchar(255) NOT NULL DEFAULT '' COMMENT 'url to module icon', + MODIFY COLUMN `resourcefile` varchar(255) NOT NULL DEFAULT '' COMMENT 'a physical link to a resource file', + MODIFY COLUMN `createdon` int(11) NOT NULL DEFAULT '0', + MODIFY COLUMN `editedon` int(11) NOT NULL DEFAULT '0', + MODIFY COLUMN `guid` varchar(32) NOT NULL DEFAULT '' COMMENT 'globally unique identifier', + MODIFY COLUMN `properties` text, + MODIFY COLUMN `modulecode` mediumtext COMMENT 'module boot up code'; + +ALTER TABLE `{PREFIX}site_plugin_events` + MODIFY COLUMN `evtid` int(10) NOT NULL DEFAULT '0'; + +ALTER TABLE `{PREFIX}site_plugins` + MODIFY COLUMN `properties` text COMMENT 'Default Properties', + MODIFY COLUMN `plugincode` mediumtext, + MODIFY COLUMN `moduleguid` varchar(32) NOT NULL DEFAULT '' COMMENT 'GUID of module from which to import shared parameters'; + +ALTER TABLE `{PREFIX}site_snippets` + MODIFY COLUMN `properties` text COMMENT 'Default Properties', + MODIFY COLUMN `snippet` mediumtext, + MODIFY COLUMN `moduleguid` varchar(32) NOT NULL DEFAULT '' COMMENT 'GUID of module from which to import shared parameters'; + +ALTER TABLE `{PREFIX}site_templates` + MODIFY COLUMN `icon` varchar(255) NOT NULL default '' COMMENT 'url to icon file', + MODIFY COLUMN `content` mediumtext; + +ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` + MODIFY COLUMN `tmplvarid` int(10) NOT NULL DEFAULT '0' COMMENT 'Template Variable id', + MODIFY COLUMN `value` mediumtext; + +ALTER TABLE `{PREFIX}site_tmplvar_templates` + MODIFY COLUMN `tmplvarid` int(10) NOT NULL DEFAULT '0' COMMENT 'Template Variable id'; + +ALTER TABLE `{PREFIX}site_tmplvars` + MODIFY COLUMN `name` varchar(50) NOT NULL default '', + MODIFY COLUMN `elements` text, + MODIFY COLUMN `display` varchar(20) NOT NULL DEFAULT '' COMMENT 'Display Control', + MODIFY COLUMN `display_params` text COMMENT 'Display Control Properties', + MODIFY COLUMN `default_text` text; + +ALTER TABLE `{PREFIX}system_eventnames` + MODIFY COLUMN `name` varchar(50) NOT NULL DEFAULT '', + MODIFY COLUMN `service` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'System Service number'; + +ALTER TABLE `{PREFIX}system_settings` MODIFY COLUMN `setting_value` text; + +ALTER TABLE `{PREFIX}user_attributes` + MODIFY COLUMN `country` varchar(5) NOT NULL DEFAULT '', + MODIFY COLUMN `state` varchar(25) NOT NULL DEFAULT '', + MODIFY COLUMN `zip` varchar(25) NOT NULL DEFAULT '', + MODIFY COLUMN `fax` varchar(100) NOT NULL DEFAULT '', + MODIFY COLUMN `photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'link to photo', + MODIFY COLUMN `comment` text; + +ALTER TABLE `{PREFIX}user_messages` MODIFY COLUMN `message` text; + +ALTER TABLE `{PREFIX}user_settings` MODIFY COLUMN `setting_value` text; + +ALTER TABLE `{PREFIX}web_users` + MODIFY COLUMN `username` varchar(100) NOT NULL DEFAULT '', + MODIFY COLUMN `cachepwd` varchar(100) NOT NULL DEFAULT '' COMMENT 'Store new unconfirmed password' AFTER `password`; + +ALTER TABLE `{PREFIX}web_user_settings` MODIFY COLUMN `setting_value` text; + +ALTER TABLE `{PREFIX}web_user_attributes` + MODIFY COLUMN `country` varchar(25) NOT NULL DEFAULT '', + MODIFY COLUMN `state` varchar(25) NOT NULL DEFAULT '', + MODIFY COLUMN `zip` varchar(25) NOT NULL DEFAULT '', + MODIFY COLUMN `fax` varchar(100) NOT NULL DEFAULT '', + MODIFY COLUMN `photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'link to photo', + MODIFY COLUMN `comment` text; + +ALTER TABLE `{PREFIX}webgroup_names` + MODIFY COLUMN `name` varchar(245) NOT NULL default ''; + +ALTER TABLE `{PREFIX}site_content` ADD INDEX `typeidx` (`type`); + +ALTER TABLE `{PREFIX}system_settings` DROP PRIMARY KEY; + +ALTER TABLE `{PREFIX}system_settings` DROP INDEX `setting_name`; + +ALTER TABLE `{PREFIX}system_settings` ADD PRIMARY KEY (`setting_name`); + +ALTER TABLE `{PREFIX}user_settings` DROP PRIMARY KEY; + +ALTER TABLE `{PREFIX}user_settings` ADD PRIMARY KEY (`user`, `setting_name`); + +ALTER TABLE `{PREFIX}web_user_settings` DROP PRIMARY KEY; + +ALTER TABLE `{PREFIX}web_user_settings` ADD PRIMARY KEY (`webuser`, `setting_name`); + +ALTER TABLE `{PREFIX}site_plugin_events` DROP PRIMARY KEY; + +ALTER TABLE `{PREFIX}site_plugin_events` ADD PRIMARY KEY (`pluginid`, `evtid`); + +ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` ADD FULLTEXT `value_ft_idx` (`value`); + +ALTER TABLE `{PREFIX}site_tmplvar_contentvalues` ADD UNIQUE INDEX `ix_tvid_contentid` (`tmplvarid`,`contentid`); + +ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP INDEX `idx_tmplvarid`; + +ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP INDEX `idx_templateid`; + +ALTER TABLE `{PREFIX}site_tmplvar_templates` DROP PRIMARY KEY; + +ALTER TABLE `{PREFIX}site_tmplvar_templates` ADD PRIMARY KEY (`tmplvarid`, `templateid`); + +ALTER TABLE `{PREFIX}member_groups` ADD UNIQUE INDEX `ix_group_member` (`user_group`,`member`); + +ALTER TABLE `{PREFIX}web_groups` ADD UNIQUE INDEX `ix_group_user` (`webgroup`,`webuser`); + +ALTER TABLE `{PREFIX}document_groups` ADD UNIQUE INDEX `ix_dg_id` (`document_group`,`document`); + +ALTER TABLE `{PREFIX}manager_log` + ADD COLUMN `ip` varchar(46); + +ALTER TABLE `{PREFIX}manager_log` + ADD COLUMN `useragent` varchar(255); + +ALTER TABLE `{PREFIX}manager_log` + CHANGE COLUMN `ip` `ip` VARCHAR(46) NULL DEFAULT NULL AFTER `message`; + +# ]]upgrade-able + + +# Insert / Replace system records +#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + +# non-upgrade-able[[ - This block of code will not be executed during upgrades + + +# Default Site Template + + +REPLACE INTO `{PREFIX}site_templates` +(id, templatename, description, editor_type, category, icon, template_type, content, locked, selectable) VALUES ('3','Minimal Template','Default minimal empty template (content returned only)','0','0','','0','[*content*]','0','1'); + + +# Default Site Documents + + +REPLACE INTO `{PREFIX}site_content` VALUES (1,'document','text/html','Evolution CMS Install Success','Welcome to the EVO Content Management System','','minimal-base','',1,0,0,0,0,'','

          Install Successful!

          \r\n

          You have successfully installed Evolution CMS.

          \r\n\r\n

          Getting Help

          \r\n

          The EVO Community provides a great starting point to learn all things Evolution CMS, or you can also see some great learning resources (books, tutorials, blogs and screencasts).

          \r\n

          Welcome to EVO!

          \r\n',1,3,0,1,1,1,1130304721,1,1130304927,0,0,0,1130304721,1,'Base Install',0,0,0,0,0,1); + + +REPLACE INTO `{PREFIX}manager_users` +(id, username, password)VALUES +(1, '{ADMIN}', MD5('{ADMINPASS}')); + +REPLACE INTO `{PREFIX}user_attributes` +(id, internalKey, fullname, role, email, phone, mobilephone, blocked, blockeduntil, blockedafter, logincount, lastlogin, thislogin, failedlogincount, sessionid, dob, gender, country, street, city, state, zip, fax, photo, comment) VALUES +(1, 1, 'Admin', 1, '{ADMINEMAIL}', '', '', 0, 0, 0, 0, 0, 0, 0, '', 0, 0, '', '', '', '', '', '', '', ''); + + +REPLACE INTO `{PREFIX}user_roles` +(id,name,description,frames,home,view_document,new_document,save_document,publish_document,delete_document,empty_trash,action_ok,logout,help,messages,new_user,edit_user,logs,edit_parser,save_parser,edit_template,settings,credits,new_template,save_template,delete_template,edit_snippet,new_snippet,save_snippet,delete_snippet,edit_chunk,new_chunk,save_chunk,delete_chunk,empty_cache,edit_document,change_password,error_dialog,about,file_manager,save_user,delete_user,save_password,edit_role,save_role,delete_role,new_role,access_permissions,bk_manager,new_plugin,edit_plugin,save_plugin,delete_plugin,new_module,edit_module,save_module,exec_module,delete_module,view_eventlog,delete_eventlog,new_web_user,edit_web_user,save_web_user,delete_web_user,web_access_permissions,view_unpublished,import_static,export_static,remove_locks,assets_images,assets_files,change_resourcetype,display_locks,category_manager) VALUES +(2,'Editor','Limited to managing content',1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0), +(3,'Publisher','Editor with expanded permissions including manage users\, update Elements and site settings',1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,1,1,0); + + +# ]]non-upgrade-able + + +# Default Site Settings + + +INSERT IGNORE INTO `{PREFIX}system_settings` +(setting_name, setting_value) VALUES +('settings_version',''), +('manager_theme','default'), +('server_offset_time','0'), +('manager_language','{MANAGERLANGUAGE}'), +('modx_charset','UTF-8'), +('site_name','My Evolution Site'), +('site_start','1'), +('error_page','1'), +('unauthorized_page','1'), +('site_status','1'), +('auto_template_logic','{AUTOTEMPLATELOGIC}'), +('default_template','3'), +('old_template',''), +('publish_default','1'), +('friendly_urls','1'), +('friendly_alias_urls','1'), +('use_alias_path','1'), +('cache_type','2'), +('failed_login_attempts','3'), +('blocked_minutes','60'), +('use_captcha','0'), +('emailsender','{ADMINEMAIL}'), +('use_editor','1'), +('use_browser','1'), +('fe_editor_lang','{MANAGERLANGUAGE}'), +('fck_editor_toolbar','standard'), +('fck_editor_autolang','0'), +('editor_css_path',''), +('editor_css_selectors',''), +('upload_maxsize','10485760'), +('manager_layout','4'), +('auto_menuindex','1'), +('session.cookie.lifetime','604800'), +('mail_check_timeperiod','600'), +('manager_direction','ltr'), +('xhtml_urls','0'), +('automatic_alias','1'), +('datetime_format','dd-mm-YYYY'), +('warning_visibility', '0'), +('remember_last_tab', '1'), +('enable_bindings', '1'), +('seostrict', '1'), +('number_of_results','30'), +('theme_refresher',''), +('show_picker', '0'), +('show_newresource_btn', '0'), +('show_fullscreen_btn', '0'); + +REPLACE INTO `{PREFIX}user_roles` +(id,name,description,frames,home,view_document,new_document,save_document,publish_document,delete_document,empty_trash,action_ok,logout,help,messages,new_user,edit_user,logs,edit_parser,save_parser,edit_template,settings,credits,new_template,save_template,delete_template,edit_snippet,new_snippet,save_snippet,delete_snippet,edit_chunk,new_chunk,save_chunk,delete_chunk,empty_cache,edit_document,change_password,error_dialog,about,file_manager,save_user,delete_user,save_password,edit_role,save_role,delete_role,new_role,access_permissions,bk_manager,new_plugin,edit_plugin,save_plugin,delete_plugin,new_module,edit_module,save_module,exec_module,delete_module,view_eventlog,delete_eventlog,new_web_user,edit_web_user,save_web_user,delete_web_user,web_access_permissions,view_unpublished,import_static,export_static,remove_locks,assets_images,assets_files,change_resourcetype,display_locks,category_manager) VALUES +(1, 'Administrator', 'Site administrators have full access to all functions',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); + + +# 1 - "Parser Service Events", 2 - "Manager Access Events", 3 - "Web Access Service Events", 4 - "Cache Service Events", 5 - "Template Service Events", 6 - Custom Events + + +REPLACE INTO `{PREFIX}system_eventnames` +(id,name,service,groupname) VALUES +('1','OnDocPublished','5',''), +('2','OnDocUnPublished','5',''), +('3','OnWebPagePrerender','5',''), +('4','OnWebLogin','3',''), +('5','OnBeforeWebLogout','3',''), +('6','OnWebLogout','3',''), +('7','OnWebSaveUser','3',''), +('8','OnWebDeleteUser','3',''), +('9','OnWebChangePassword','3',''), +('10','OnWebCreateGroup','3',''), +('11','OnManagerLogin','2',''), +('12','OnBeforeManagerLogout','2',''), +('13','OnManagerLogout','2',''), +('14','OnManagerSaveUser','2',''), +('15','OnManagerDeleteUser','2',''), +('16','OnManagerChangePassword','2',''), +('17','OnManagerCreateGroup','2',''), +('18','OnBeforeCacheUpdate','4',''), +('19','OnCacheUpdate','4',''), +('107','OnMakePageCacheKey','4',''), +('20','OnLoadWebPageCache','4',''), +('21','OnBeforeSaveWebPageCache','4',''), +('22','OnChunkFormPrerender','1','Chunks'), +('23','OnChunkFormRender','1','Chunks'), +('24','OnBeforeChunkFormSave','1','Chunks'), +('25','OnChunkFormSave','1','Chunks'), +('26','OnBeforeChunkFormDelete','1','Chunks'), +('27','OnChunkFormDelete','1','Chunks'), +('28','OnDocFormPrerender','1','Documents'), +('29','OnDocFormRender','1','Documents'), +('30','OnBeforeDocFormSave','1','Documents'), +('31','OnDocFormSave','1','Documents'), +('32','OnBeforeDocFormDelete','1','Documents'), +('33','OnDocFormDelete','1','Documents'), +('1033','OnDocFormUnDelete','1','Documents'), +('1034','onBeforeMoveDocument','1','Documents'), +('1035','onAfterMoveDocument','1','Documents'), +('34','OnPluginFormPrerender','1','Plugins'), +('35','OnPluginFormRender','1','Plugins'), +('36','OnBeforePluginFormSave','1','Plugins'), +('37','OnPluginFormSave','1','Plugins'), +('38','OnBeforePluginFormDelete','1','Plugins'), +('39','OnPluginFormDelete','1','Plugins'), +('40','OnSnipFormPrerender','1','Snippets'), +('41','OnSnipFormRender','1','Snippets'), +('42','OnBeforeSnipFormSave','1','Snippets'), +('43','OnSnipFormSave','1','Snippets'), +('44','OnBeforeSnipFormDelete','1','Snippets'), +('45','OnSnipFormDelete','1','Snippets'), +('46','OnTempFormPrerender','1','Templates'), +('47','OnTempFormRender','1','Templates'), +('48','OnBeforeTempFormSave','1','Templates'), +('49','OnTempFormSave','1','Templates'), +('50','OnBeforeTempFormDelete','1','Templates'), +('51','OnTempFormDelete','1','Templates'), +('52','OnTVFormPrerender','1','Template Variables'), +('53','OnTVFormRender','1','Template Variables'), +('54','OnBeforeTVFormSave','1','Template Variables'), +('55','OnTVFormSave','1','Template Variables'), +('56','OnBeforeTVFormDelete','1','Template Variables'), +('57','OnTVFormDelete','1','Template Variables'), +('58','OnUserFormPrerender','1','Users'), +('59','OnUserFormRender','1','Users'), +('60','OnBeforeUserFormSave','1','Users'), +('61','OnUserFormSave','1','Users'), +('62','OnBeforeUserFormDelete','1','Users'), +('63','OnUserFormDelete','1','Users'), +('64','OnWUsrFormPrerender','1','Web Users'), +('65','OnWUsrFormRender','1','Web Users'), +('66','OnBeforeWUsrFormSave','1','Web Users'), +('67','OnWUsrFormSave','1','Web Users'), +('68','OnBeforeWUsrFormDelete','1','Web Users'), +('69','OnWUsrFormDelete','1','Web Users'), +('70','OnSiteRefresh','1',''), +('71','OnFileManagerUpload','1',''), +('72','OnModFormPrerender','1','Modules'), +('73','OnModFormRender','1','Modules'), +('74','OnBeforeModFormDelete','1','Modules'), +('75','OnModFormDelete','1','Modules'), +('76','OnBeforeModFormSave','1','Modules'), +('77','OnModFormSave','1','Modules'), +('78','OnBeforeWebLogin','3',''), +('79','OnWebAuthentication','3',''), +('80','OnBeforeManagerLogin','2',''), +('81','OnManagerAuthentication','2',''), +('82','OnSiteSettingsRender','1','System Settings'), +('83','OnFriendlyURLSettingsRender','1','System Settings'), +('84','OnUserSettingsRender','1','System Settings'), +('85','OnInterfaceSettingsRender','1','System Settings'), +('109','OnSecuritySettingsRender','1','System Settings'), +('110','OnFileManagerSettingsRender','1','System Settings'), +('86','OnMiscSettingsRender','1','System Settings'), +('87','OnRichTextEditorRegister','1','RichText Editor'), +('88','OnRichTextEditorInit','1','RichText Editor'), +('89','OnManagerPageInit','2',''), +('90','OnWebPageInit','5',''), +('101','OnLoadDocumentObject','5',''), +('104','OnBeforeLoadDocumentObject','5',''), +('105','OnAfterLoadDocumentObject','5',''), +('91','OnLoadWebDocument','5',''), +('92','OnParseDocument','5',''), +('106','OnParseProperties','5',''), +('108','OnBeforeParseParams','5',''), +('93','OnManagerLoginFormRender','2',''), +('94','OnWebPageComplete','5',''), +('95','OnLogPageHit','5',''), +('96','OnBeforeManagerPageInit','2',''), +('97','OnBeforeEmptyTrash','1','Documents'), +('98','OnEmptyTrash','1','Documents'), +('99','OnManagerLoginFormPrerender','2',''), +('100','OnStripAlias','1','Documents'), +('102','OnMakeDocUrl','5',''), +('103','OnBeforeLoadExtension','5',''), +('200','OnCreateDocGroup','1','Documents'), +('201','OnManagerWelcomePrerender','2',''), +('202','OnManagerWelcomeHome','2',''), +('203','OnManagerWelcomeRender','2',''), +('204','OnBeforeDocDuplicate','1','Documents'), +('205','OnDocDuplicate','1','Documents'), +('206','OnManagerMainFrameHeaderHTMLBlock','2',''), +('207','OnManagerPreFrameLoader','2',''), +('208','OnManagerFrameLoader','2',''), +('209','OnManagerTreeInit','2',''), +('210','OnManagerTreePrerender','2',''), +('211','OnManagerTreeRender','2',''), +('212','OnManagerNodePrerender','2',''), +('213','OnManagerNodeRender','2',''), +('214','OnManagerMenuPrerender','2',''), +('215','OnManagerTopPrerender','2',''), +('224','OnDocFormTemplateRender','1','Documents'), +('225','OnBeforeMinifyCss', '1', ''), +('999','OnPageUnauthorized','1',''), +('1000','OnPageNotFound','1',''), +('1001','OnFileBrowserUpload','1','File Browser Events'), +('1002','OnBeforeFileBrowserUpload','1','File Browser Events'), +('1003','OnFileBrowserDelete','1','File Browser Events'), +('1004','OnBeforeFileBrowserDelete','1','File Browser Events'), +('1005','OnFileBrowserInit','1','File Browser Events'), +('1006','OnFileBrowserMove','1','File Browser Events'), +('1007','OnBeforeFileBrowserMove','1','File Browser Events'), +('1008','OnFileBrowserCopy','1','File Browser Events'), +('1009','OnBeforeFileBrowserCopy','1','File Browser Events'), +('1010','OnBeforeFileBrowserRename','1','File Browser Events'), +('1011','OnFileBrowserRename','1','File Browser Events'); + + +# ^ I don't think we need more than 1000 built-in events. Custom events will start at 1001 + + +# Update System Tables +#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + +UPDATE `{PREFIX}user_roles` SET + bk_manager=1, + new_plugin=1, + edit_plugin=1, + save_plugin=1, + delete_plugin=1, + new_module=1, + edit_module=1, + save_module=1, + delete_module=1, + exec_module=1, + view_eventlog = 1, + delete_eventlog = 1, + new_web_user = 1, + edit_web_user = 1, + save_web_user = 1, + delete_web_user = 1, + new_chunk = 1, + edit_chunk = 1, + save_chunk = 1, + delete_chunk = 1, + web_access_permissions = 1, + view_unpublished = 1, + publish_document = 1, + import_static = 1, + export_static = 1, + empty_trash = 1, + remove_locks = 1, + display_locks = 1, + assets_images = 1, + assets_files = 1, + change_resourcetype = 1 + WHERE `id`=1; + + +# Update any invalid Manager Themes in User Settings and reset the default theme + + +UPDATE `{PREFIX}user_settings` SET + `setting_value`='default' + WHERE `setting_name`='manager_theme'; + + +REPLACE INTO `{PREFIX}system_settings` (setting_name, setting_value) VALUES ('manager_theme','default'); + +REPLACE INTO `{PREFIX}system_settings` (setting_name, setting_value) VALUES ('email_sender_method','1'); + +UPDATE `{PREFIX}system_settings` set setting_value = if(setting_value REGEXP 'application/json',setting_value,concat_ws(",",setting_value,"application/json")) WHERE setting_name='custom_contenttype'; diff --git a/install/sqlParser.class.php b/install/sqlParser.class.php index f94f7f38..f5e7785e 100755 --- a/install/sqlParser.class.php +++ b/install/sqlParser.class.php @@ -27,6 +27,7 @@ class SqlParser { public $connection_method; public $ignoreDuplicateErrors; public $autoTemplateLogic; + public $database_collation; public function __construct($host, $user, $password, $db, $prefix='modx_', $adminname, $adminemail, $adminpass, $connection_charset= 'utf8', $managerlanguage='english', $connection_method = 'SET CHARACTER SET', $auto_template_logic = 'parent') { $this->host = $host; @@ -45,7 +46,8 @@ public function __construct($host, $user, $password, $db, $prefix='modx_', $admi } public function connect() { - $this->conn = mysqli_connect($this->host, $this->user, $this->password); + $host = explode(':', $this->host, 2); + $this->conn = mysqli_connect($host[0], $this->user, $this->password,'', isset($host[1]) ? $host[1] : null); mysqli_select_db($this->conn, $this->dbname); if (function_exists('mysqli_set_charset')) mysqli_set_charset($this->conn, $this->connection_charset); @@ -91,6 +93,7 @@ public function process($filename) { // replace {} tags $idata = str_replace('{PREFIX}', $this->prefix, $idata); + $idata = str_replace('{TABLEENCODING}', $this->getTableEncoding(), $idata); $idata = str_replace('{ADMIN}', $this->adminname, $idata); $idata = str_replace('{ADMINEMAIL}', $this->adminemail, $idata); $idata = str_replace('{ADMINPASS}', $this->adminpass, $idata); @@ -138,6 +141,16 @@ public function process($filename) { } } + public function getTableEncoding() + { + $out = 'DEFAULT CHARSET=' . $this->connection_charset; + if (!empty($this->database_collation)) { + $out .= ' COLLATE=' . $this->database_collation; + } + + return $out; + } + public function close() { mysqli_close($this->conn); } diff --git a/install/template.tpl b/install/template.tpl index aacf11d8..60da8a01 100755 --- a/install/template.tpl +++ b/install/template.tpl @@ -1,45 +1,45 @@ - - - - -[+pagetitle+] - - - - - - - - - -
          -
          - -
          -
          - -
          -
          -
          - [+content+] -
          -
          -
          - - - - - + + + + +[+pagetitle+] + + + + + + + + + +
          +
          + +
          +
          + +
          +
          +
          + [+content+] +
          +
          +
          + + + + + diff --git a/manager/actions/access_permissions.dynamic.php b/manager/actions/access_permissions.dynamic.php index 0450f6ad..53d9c090 100755 --- a/manager/actions/access_permissions.dynamic.php +++ b/manager/actions/access_permissions.dynamic.php @@ -84,7 +84,7 @@ function deletegroup(groupid, type) {

          -
          +
          @@ -97,9 +97,9 @@ function deletegroup(groupid, type) {
          db->select('groupnames.*, users.id AS user_id, users.username user_name', $tbl_membergroup_names . ' AS groupnames - LEFT JOIN ' . $tbl_member_groups . ' AS groups ON groups.user_group = groupnames.id - LEFT JOIN ' . $tbl_manager_users . ' AS users ON users.id = groups.member', '', 'groupnames.name, user_name'); - if($modx->db->getRecordCount($rs) < 1) { + LEFT JOIN ' . $tbl_member_groups . ' AS groups_member ON groups_member.user_group = groupnames.id + LEFT JOIN ' . $tbl_manager_users . ' AS users ON users.id = groups_member.member', '', 'groupnames.name, user_name'); + if($modx->db->getRecordCount($rs) < 1) { ?>
          '; } ?> - + @@ -155,7 +155,7 @@ function deletegroup(groupid, type) {

          - +
          @@ -185,7 +185,7 @@ function deletegroup(groupid, type) { echo '
          '; } ?> - + @@ -237,7 +237,7 @@ function deletegroup(groupid, type) { ?>
          - + diff --git a/manager/actions/bkmanager.static.php b/manager/actions/bkmanager.static.php index 99dcab33..2760834f 100755 --- a/manager/actions/bkmanager.static.php +++ b/manager/actions/bkmanager.static.php @@ -292,7 +292,7 @@ function showhide(a)
          - + "snapshot_path={$modx->config['snapshot_path']}")) ?>
          - + @@ -387,7 +387,7 @@ function checked($cond)
          - + @@ -556,7 +556,7 @@ public function setDBtables($dbtables) */ public function createDump($callBack) { - global $modx; + $modx = evolutionCMS(); $createtable = array(); // Set line feed @@ -670,7 +670,7 @@ public function createDump($callBack) */ public function result2Array($numinarray = 0, $resource) { - global $modx; + $modx = evolutionCMS(); $array = array(); while ($row = $modx->db->getRow($resource, 'num')) { $array[] = $row[$numinarray]; @@ -694,7 +694,7 @@ public function isDroptables() */ public function loadObjectList($key = '', $resource) { - global $modx; + $modx = evolutionCMS(); $array = array(); while ($row = $modx->db->getRow($resource, 'object')) { if ($key) { @@ -734,7 +734,7 @@ public function object2Array($obj) */ function import_sql($source, $result_code = 'import_ok') { - global $modx, $e; + $modx = evolutionCMS(); global $e; $rs = null; if ($modx->getLockedElements() !== array()) { @@ -772,7 +772,7 @@ function import_sql($source, $result_code = 'import_ok') */ function dumpSql(&$dumpstring) { - global $modx; + $modx = evolutionCMS(); $today = $modx->toDateFormat(time(), 'dateOnly'); $today = str_replace('/', '-', $today); $today = strtolower($today); @@ -805,7 +805,7 @@ function snapshot(&$dumpstring) */ function getSettings() { - global $modx; + $modx = evolutionCMS(); $tbl_system_settings = $modx->getFullTableName('system_settings'); $rs = $modx->db->select('setting_name, setting_value', $tbl_system_settings); @@ -829,7 +829,7 @@ function getSettings() */ function restoreSettings($settings) { - global $modx; + $modx = evolutionCMS(); $tbl_system_settings = $modx->getFullTableName('system_settings'); foreach ($settings as $k => $v) { diff --git a/manager/actions/category_mgr/inc/Categories.php b/manager/actions/category_mgr/inc/Categories.php index 4923a3d1..94c3a02f 100755 --- a/manager/actions/category_mgr/inc/Categories.php +++ b/manager/actions/category_mgr/inc/Categories.php @@ -14,7 +14,7 @@ class Categories public function __construct() { - global $modx; + $modx = evolutionCMS(); $this->db = &$modx->db; $this->db_tbl['categories'] = $modx->getFullTableName('categories'); diff --git a/manager/actions/category_mgr/inc/Module_Categories_Manager.php b/manager/actions/category_mgr/inc/Module_Categories_Manager.php index 04fd58ab..ef430294 100755 --- a/manager/actions/category_mgr/inc/Module_Categories_Manager.php +++ b/manager/actions/category_mgr/inc/Module_Categories_Manager.php @@ -48,7 +48,7 @@ public function set($key, $value) */ public function get($key) { - global $modx; + $modx = evolutionCMS(); if (isset($this->params[$key])) { return $this->params[$key]; diff --git a/manager/actions/category_mgr/skin/main.tpl.phtml b/manager/actions/category_mgr/skin/main.tpl.phtml index 05563383..ab758ada 100755 --- a/manager/actions/category_mgr/skin/main.tpl.phtml +++ b/manager/actions/category_mgr/skin/main.tpl.phtml @@ -1,89 +1,89 @@ - - -js_output)) : ?> - - - -

          - get('name') ?> -

          - - - renderView('chunks/db_setup') ?> - - -
          - -
          renderView('chunks/messages', $view->getMessages('global')) ?>
          - -
          - - -
          -

          txt('cm_add_new_category') ?>

          - -
          - renderView('chunks/messages', $view->getMessages('add')) ?> - renderView('add') ?> -
          -
          - - - -
          -

          txt('cm_edit_categories') ?>

          - -
          - renderView('chunks/messages', $view->getMessages('edit')) ?> - renderView('edit', $data) ?> -
          -
          - -
          -

          txt('cm_sort_categories') ?>

          - -
          - renderView('chunks/messages', $view->getMessages('sort')) ?> - renderView('sort', $data) ?> -
          -
          - -
          -

          txt('cm_categorize_elements') ?>

          - -
          - renderView('chunks/messages', $view->getMessages('categorize')) ?> - renderView('categorize', $data) ?> -
          -
          - - - - new_translations[$view->get('manager_language')] && !empty($view->new_translations[$view->get('manager_language')])) : ?> - -
          -

          txt('Translations') ?>

          - -
          - renderView('chunks/messages', $view->getMessages('translate')) ?> - renderView('translate', $view->new_translations[$view->get('manager_language')]) ?> -
          -
          - - - -
          - -
          - - - - - - + + +js_output)) : ?> + + + +

          + get('name') ?> +

          + + + renderView('chunks/db_setup') ?> + + +
          + +
          renderView('chunks/messages', $view->getMessages('global')) ?>
          + +
          + + +
          +

          txt('cm_add_new_category') ?>

          + +
          + renderView('chunks/messages', $view->getMessages('add')) ?> + renderView('add') ?> +
          +
          + + + +
          +

          txt('cm_edit_categories') ?>

          + +
          + renderView('chunks/messages', $view->getMessages('edit')) ?> + renderView('edit', $data) ?> +
          +
          + +
          +

          txt('cm_sort_categories') ?>

          + +
          + renderView('chunks/messages', $view->getMessages('sort')) ?> + renderView('sort', $data) ?> +
          +
          + +
          +

          txt('cm_categorize_elements') ?>

          + +
          + renderView('chunks/messages', $view->getMessages('categorize')) ?> + renderView('categorize', $data) ?> +
          +
          + + + + new_translations[$view->get('manager_language')] && !empty($view->new_translations[$view->get('manager_language')])) : ?> + +
          +

          txt('Translations') ?>

          + +
          + renderView('chunks/messages', $view->getMessages('translate')) ?> + renderView('translate', $view->new_translations[$view->get('manager_language')]) ?> +
          +
          + + + +
          + +
          + + + + + + diff --git a/manager/actions/document_data.static.php b/manager/actions/document_data.static.php index 84b7e291..055338f2 100755 --- a/manager/actions/document_data.static.php +++ b/manager/actions/document_data.static.php @@ -188,9 +188,9 @@ //$class .= ($children['hidemenu'] ? ' text-muted' : ' text-primary'); //$class .= ($children['isfolder'] ? ' font-weight-bold' : ''); if($modx->hasPermission('edit_document')) { - $title = '' . $icon . '' . '' . $children['pagetitle'] . ''; + $title = '' . $icon . '' . '' . html_escape($children['pagetitle'], $modx->config['modx_charset']) . ''; } else { - $title = '' . $icon . '' . $children['pagetitle'] . ''; + $title = '' . $icon . '' . html_escape($children['pagetitle'], $modx->config['modx_charset']) . ''; } $icon_pub_unpub = (!$children['published']) ? '' : ''; @@ -257,7 +257,7 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '')

          - config['modx_charset']) . (iconv_strlen($content['pagetitle'], $modx->config['modx_charset']) > 50 ? '...' : '') . ' (' . $_REQUEST['id'] . ')' ?> + config['modx_charset']), $modx->config['modx_charset']) . (iconv_strlen($content['pagetitle'], $modx->config['modx_charset']) > 50 ? '...' : '') . ' (' . (int)$_REQUEST['id'] . ')' ?>

          @@ -279,21 +279,21 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '') : - + config['modx_charset']) ?> : - " . $_lang['not_set'] . ")" ?> + config['modx_charset']) : "(" . $_lang['not_set'] . ")" ?> : - " . $_lang['not_set'] . ")" ?> + config['modx_charset']) : "(" . $_lang['not_set'] . ")" ?> : - " . $_lang['not_set'] . ")" ?> + config['modx_charset']) : "(" . $_lang['not_set'] . ")" ?> : @@ -301,7 +301,7 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '') : - " . $_lang['not_set'] . ")" ?> + config['modx_charset']) : "(" . $_lang['not_set'] . ")" ?>   @@ -311,13 +311,13 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '') : - toDateFormat($content['createdon'] + $server_offset_time) ?> () + toDateFormat($content['createdon'] + $server_offset_time) ?> (config['modx_charset']) ?>) : - toDateFormat($content['editedon'] + $server_offset_time) ?> () + toDateFormat($content['editedon'] + $server_offset_time) ?> (config['modx_charset']) ?>) @@ -349,7 +349,7 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '') : - + config['modx_charset']) ?> : @@ -371,7 +371,7 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '') : - + config['modx_charset']) ?> : @@ -393,7 +393,7 @@ class="' . $_style["icons_move_document"] . '">' . $icon_pub_unpub : '')
          0) : ?>
          - () + (config['modx_charset']) ?>)
          diff --git a/manager/actions/eventlog.dynamic.php b/manager/actions/eventlog.dynamic.php index 9efa1851..0ba84f00 100755 --- a/manager/actions/eventlog.dynamic.php +++ b/manager/actions/eventlog.dynamic.php @@ -1,159 +1,159 @@ -INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); -} -if(!$modx->hasPermission('view_eventlog')) { - $modx->webAlertAndQuit($_lang["error_no_privileges"]); -} - -// Get table Names (alphabetical) -$tbl_event_log = $modx->getFullTableName('event_log'); -$tbl_manager_users = $modx->getFullTableName('manager_users'); -$tbl_web_users = $modx->getFullTableName('web_users'); - -// initialize page view state - the $_PAGE object -$modx->manager->initPageViewState(); - -// get and save search string -if($_REQUEST['op'] == 'reset') { - $sqlQuery = $query = ''; - $_PAGE['vs']['search'] = ''; -} else { - $sqlQuery = $query = isset($_REQUEST['search']) ? $_REQUEST['search'] : $_PAGE['vs']['search']; - if(!is_numeric($sqlQuery)) { - $sqlQuery = $modx->db->escape($query); - } - $_PAGE['vs']['search'] = $query; -} - -// get & save listmode -$listmode = isset($_REQUEST['listmode']) ? $_REQUEST['listmode'] : $_PAGE['vs']['lm']; -$_PAGE['vs']['lm'] = $listmode; - -// context menu -include_once MODX_MANAGER_PATH . "includes/controls/contextmenu.php"; -$cm = new ContextMenu("cntxm", 150); -$cm->addItem($_lang['view_log'], "js:menuAction(1)", $_style['actions_preview']); -$cm->addSeparator(); -$cm->addItem($_lang['delete'], "js:menuAction(2)", $_style['actions_delete'], (!$modx->hasPermission('delete_eventlog') ? 1 : 0)); -echo $cm->render(); - -?> - - - - - - -

          - -

          - -
          -
          -
          - -
          - -
          - -
          -
          - db->select("el.id, ELT(el.type , 'text-info {$_style['actions_info']}' , 'text-warning {$_style['actions_triangle']}' , 'text-danger {$_style['actions_error']}' ) as icon, el.createdon, el.source, el.eventid,IFNULL(wu.username,mu.username) as username", "{$tbl_event_log} AS el - LEFT JOIN {$tbl_manager_users} AS mu ON mu.id=el.user AND el.usertype=0 - LEFT JOIN {$tbl_web_users} AS wu ON wu.id=el.user AND el.usertype=1", ($sqlQuery ? "" . (is_numeric($sqlQuery) ? "(eventid='{$sqlQuery}') OR " : '') . "(source LIKE '%{$sqlQuery}%') OR (description LIKE '%{$sqlQuery}%')" : ""), "createdon DESC"); - include_once MODX_MANAGER_PATH . "includes/controls/datagrid.class.php"; - $grd = new DataGrid('', $ds, $number_of_results); // set page size to 0 t show all items - $grd->pagerClass = ''; - $grd->pageClass = 'page-item'; - $grd->selPageClass = 'page-item active'; - $grd->noRecordMsg = $_lang['no_records_found']; - $grd->cssClass = "table data nowrap"; - $grd->columnHeaderClass = "tableHeader"; - $grd->itemClass = "tableItem"; - $grd->altItemClass = "tableAltItem"; - $grd->fields = "type,source,createdon,eventid,username"; - $grd->columns = $_lang['type'] . " ," . $_lang['source'] . " ," . $_lang['date'] . " ," . $_lang['event_id'] . " ," . $_lang['sysinfo_userid']; - $grd->colWidths = "1%,,1%,1%,1%"; - $grd->colAligns = "center,,,center,center"; - $grd->colTypes = "template:||template:[+source+]||date: " . $modx->toDateFormat(null, 'formatOnly') . ' %I:%M %p'; - if($listmode == '1') { - $grd->pageSize = 0; - } - if($_REQUEST['op'] == 'reset') { - $grd->pageNumber = 1; - } - // render grid - echo $grd->render(); - ?> -
          -
          -
          -
          - +INCLUDE_ORDERING_ERROR


          Please use the EVO Content Manager instead of accessing this file directly."); +} +if(!$modx->hasPermission('view_eventlog')) { + $modx->webAlertAndQuit($_lang["error_no_privileges"]); +} + +// Get table Names (alphabetical) +$tbl_event_log = $modx->getFullTableName('event_log'); +$tbl_manager_users = $modx->getFullTableName('manager_users'); +$tbl_web_users = $modx->getFullTableName('web_users'); + +// initialize page view state - the $_PAGE object +$modx->manager->initPageViewState(); + +// get and save search string +if($_REQUEST['op'] == 'reset') { + $sqlQuery = $query = ''; + $_PAGE['vs']['search'] = ''; +} else { + $sqlQuery = $query = isset($_REQUEST['search']) ? $_REQUEST['search'] : $_PAGE['vs']['search']; + if(!is_numeric($sqlQuery)) { + $sqlQuery = $modx->db->escape($query); + } + $_PAGE['vs']['search'] = $query; +} + +// get & save listmode +$listmode = isset($_REQUEST['listmode']) ? $_REQUEST['listmode'] : $_PAGE['vs']['lm']; +$_PAGE['vs']['lm'] = $listmode; + +// context menu +include_once MODX_MANAGER_PATH . "includes/controls/contextmenu.php"; +$cm = new ContextMenu("cntxm", 150); +$cm->addItem($_lang['view_log'], "js:menuAction(1)", $_style['actions_preview']); +$cm->addSeparator(); +$cm->addItem($_lang['delete'], "js:menuAction(2)", $_style['actions_delete'], (!$modx->hasPermission('delete_eventlog') ? 1 : 0)); +echo $cm->render(); + +?> + +
          + + + + +

          + +

          + +
          +
          +
          + +
          + +
          + +
          +
          + db->select("el.id, ELT(el.type , 'text-info {$_style['actions_info']}' , 'text-warning {$_style['actions_triangle']}' , 'text-danger {$_style['actions_error']}' ) as icon, el.createdon, el.source, el.eventid,IFNULL(wu.username,mu.username) as username", "{$tbl_event_log} AS el + LEFT JOIN {$tbl_manager_users} AS mu ON mu.id=el.user AND el.usertype=0 + LEFT JOIN {$tbl_web_users} AS wu ON wu.id=el.user AND el.usertype=1", ($sqlQuery ? "" . (is_numeric($sqlQuery) ? "(eventid='{$sqlQuery}') OR " : '') . "(source LIKE '%{$sqlQuery}%') OR (description LIKE '%{$sqlQuery}%')" : ""), "createdon DESC"); + include_once MODX_MANAGER_PATH . "includes/controls/datagrid.class.php"; + $grd = new DataGrid('', $ds, $number_of_results); // set page size to 0 t show all items + $grd->pagerClass = ''; + $grd->pageClass = 'page-item'; + $grd->selPageClass = 'page-item active'; + $grd->noRecordMsg = $_lang['no_records_found']; + $grd->cssClass = "table data nowrap"; + $grd->columnHeaderClass = "tableHeader"; + $grd->itemClass = "tableItem"; + $grd->altItemClass = "tableAltItem"; + $grd->fields = "type,source,createdon,eventid,username"; + $grd->columns = $_lang['type'] . " ," . $_lang['source'] . " ," . $_lang['date'] . " ," . $_lang['event_id'] . " ," . $_lang['sysinfo_userid']; + $grd->colWidths = "1%,,1%,1%,1%"; + $grd->colAligns = "center,,,center,center"; + $grd->colTypes = "template:||template:[+source+]||date: " . $modx->toDateFormat(null, 'formatOnly') . ' %I:%M %p'; + if($listmode == '1') { + $grd->pageSize = 0; + } + if($_REQUEST['op'] == 'reset') { + $grd->pageNumber = 1; + } + // render grid + echo $grd->render(); + ?> +
          +
          +
          +
          +
          diff --git a/manager/actions/export_site.static.php b/manager/actions/export_site.static.php index 878cad70..2fcd0723 100755 --- a/manager/actions/export_site.static.php +++ b/manager/actions/export_site.static.php @@ -40,7 +40,7 @@ echo $rs; } else { ?> -
          + - - - - - config['show_picker'] != "0") { ?> - - - - - invokeEvent('OnManagerTopPrerender', $_REQUEST); - if (is_array($evtOut)) { - echo implode("\n", $evtOut); - } - ?> - - - -
          - -
          - -
          -
          - config['global_tabs']): ?> -
          -

          -
          -
          - -
          - - - -
          -
          -
          -
          - - - - - - - ', $action, $action); - echo sprintf(' %s
          ', $img, $text); - } - } - - ?> - - - config['show_fullscreen_btn'] != "0") { ?> - - - invokeEvent('OnManagerFrameLoader', array('action' => $action)); - ?> - -
          -config['show_picker'] != "0") { - include('media/style/' . $modx->config['manager_theme'] . '/color.switcher.php'); -} ?> - - +INCLUDE_ORDERING_ERROR


          Please use the EVO Content Manager instead of accessing this file directly."); +} +header("X-XSS-Protection: 0"); + +$_SESSION['browser'] = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 1') !== false) ? 'legacy_IE' : 'modern'; + +// invoke OnManagerPreFrameLoader +$modx->invokeEvent('OnManagerPreFrameLoader', array('action' => $action)); + +$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; + +if (!isset($modx->config['manager_menu_height'])) { + $modx->config['manager_menu_height'] = 2.2; // rem +} + +if (!isset($modx->config['manager_tree_width'])) { + $modx->config['manager_tree_width'] = 20; // rem +} + +if (isset($_SESSION['onLoginForwardToAction']) && is_int($_SESSION['onLoginForwardToAction'])) { + $initMainframeAction = $_SESSION['onLoginForwardToAction']; + unset($_SESSION['onLoginForwardToAction']); +} else { + $initMainframeAction = 2; // welcome.static +} + +if (!isset($_SESSION['tree_show_only_folders'])) { + $_SESSION['tree_show_only_folders'] = 0; +} + +$body_class = ''; +$menu_height = $modx->config['manager_menu_height']; +$tree_width = $modx->config['manager_tree_width']; +$tree_min_width = 0; + +if (isset($_COOKIE['MODX_widthSideBar'])) { + $MODX_widthSideBar = $_COOKIE['MODX_widthSideBar']; +} else { + $MODX_widthSideBar = $tree_width; +} + +if (!$MODX_widthSideBar) { + $body_class .= 'sidebar-closed'; +} + +$theme_modes = array('', 'lightness', 'light', 'dark', 'darkness'); +if (!empty($theme_modes[$_COOKIE['MODX_themeMode']])) { + $body_class .= ' ' . $theme_modes[$_COOKIE['MODX_themeMode']]; +} elseif (!empty($theme_modes[$modx->config['manager_theme_mode']])) { + $body_class .= ' ' . $theme_modes[$modx->config['manager_theme_mode']]; +} + +$navbar_position = $modx->config['manager_menu_position']; +if ($navbar_position == 'left') { + $body_class .= ' navbar-left navbar-left-icon-and-text'; +} + +if (isset($modx->pluginCache['ElementsInTree'])) { + $body_class .= ' ElementsInTree'; +} + +$unlockTranslations = array( + 'msg' => $_lang["unlock_element_id_warning"], + 'type1' => $_lang["lock_element_type_1"], + 'type2' => $_lang["lock_element_type_2"], + 'type3' => $_lang["lock_element_type_3"], + 'type4' => $_lang["lock_element_type_4"], + 'type5' => $_lang["lock_element_type_5"], + 'type6' => $_lang["lock_element_type_6"], + 'type7' => $_lang["lock_element_type_7"], + 'type8' => $_lang["lock_element_type_8"] +); + +foreach ($unlockTranslations as $key => $value) { + $unlockTranslations[$key] = iconv($modx->config["modx_charset"], "utf-8", $value); +} + +$user = $modx->getUserInfo($modx->getLoginUserID()); +if ($user['which_browser'] == 'default') { + $user['which_browser'] = $modx->config['which_browser']; +} + +$css = 'media/style/' . $modx->config['manager_theme'] . '/css/page.css?v=' . $lastInstallTime; + +if ($modx->config['manager_theme'] == 'default') { + if (!file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css') && is_writable(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css')) { + require_once MODX_BASE_PATH . 'assets/lib/Formatter/CSSMinify.php'; + $minifier = new Formatter\CSSMinify(); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/common/bootstrap/css/bootstrap.min.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/common/font-awesome/css/font-awesome.min.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/fonts.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/forms.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/mainmenu.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tree.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/custom.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tabpane.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/contextmenu.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/index.css'); + $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/main.css'); + $css = $minifier->minify(); + file_put_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css', $css); + } + if (file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css')) { + $css = 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css?v=' . $lastInstallTime; + } +} + +$modx->config['global_tabs'] = (int)($modx->config['global_tabs'] && ($user['role'] == 1 || $modx->hasPermission('edit_template') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_plugin'))); + +?> + +> + + <?= $site_name ?>- (EVO CMS Manager) + + + + + + config['show_picker'] != "0") { ?> + + + + + + + + + + config['show_picker'] != "0") { ?> + + + + + invokeEvent('OnManagerTopPrerender', $_REQUEST); + if (is_array($evtOut)) { + echo implode("\n", $evtOut); + } + ?> + + + +
          + +
          + +
          +
          + config['global_tabs']): ?> +
          +

          +
          +
          + +
          + +
          + +
          + + +
          +
          +
          +
          + + + + + + + ', $action, $action); + echo sprintf(' %s
          ', $img, $text); + } + } + + ?> + + + config['show_fullscreen_btn'] != "0") { ?> + + + invokeEvent('OnManagerFrameLoader', array('action' => $action)); + ?> + +
          +config['show_picker'] != "0") { + include('media/style/' . $modx->config['manager_theme'] . '/color.switcher.php'); +} ?> + + diff --git a/manager/frames/index.html b/manager/frames/index.html index cfb7d0fe..fdd37917 100755 --- a/manager/frames/index.html +++ b/manager/frames/index.html @@ -1,2 +1,2 @@ -

          Unauthorized access

          +

          Unauthorized access

          You're not allowed to access file folder \ No newline at end of file diff --git a/manager/frames/mainmenu.php b/manager/frames/mainmenu.php index c798decd..19114ce1 100755 --- a/manager/frames/mainmenu.php +++ b/manager/frames/mainmenu.php @@ -1,465 +1,465 @@ -Build('id','parent','name','link','alt','onclick','permission','target','divider 1/0','menuindex', 'class') -*/ - -$sitemenu['bars'] = array( - 'bars', - 'main', - '', - 'javascript:;', - $_lang['home'], - 'modx.resizer.toggle(); return false;', - ' return false;', - '', - 0, - 10, - '' -); - -//mainMenu -$sitemenu['site'] = array( - 'site', - 'main', - '' . $_lang['home'], - 'index.php?a=2', - $_lang['home'], - '', - '', - 'main', - 0, - 10, - 'active' -); - -if($modx->hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('file_manager')) { - $sitemenu['elements'] = array( - 'elements', - 'main', - '' . $_lang['elements'], - 'javascript:;', - $_lang['elements'], - ' return false;', - '', - '', - 0, - 20, - '' - ); -} - -if($modx->hasPermission('exec_module')) { - $sitemenu['modules'] = array( - 'modules', - 'main', - '' . $_lang['modules'], - 'javascript:;', - $_lang['modules'], - ' return false;', - '', - '', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('edit_user') || $modx->hasPermission('edit_web_user') || $modx->hasPermission('edit_role') || $modx->hasPermission('access_permissions') || $modx->hasPermission('web_access_permissions')) { - $sitemenu['users'] = array( - 'users', - 'main', - '' . $_lang['users'], - 'javascript:;', - $_lang['users'], - ' return false;', - 'edit_user', - '', - 0, - 40, - '' - ); -} - -if($modx->hasPermission('empty_cache') || $modx->hasPermission('bk_manager') || $modx->hasPermission('remove_locks') || $modx->hasPermission('import_static') || $modx->hasPermission('export_static')) { - $sitemenu['tools'] = array( - 'tools', - 'main', - '' . $_lang['tools'], - 'javascript:;', - $_lang['tools'], - ' return false;', - '', - '', - 0, - 50, - '' - ); -} - -$tab = 0; -if($modx->hasPermission('edit_template')) { - $sitemenu['element_templates'] = array( - 'element_templates', - 'elements', - '' . $_lang['manage_templates'] . '', - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_templates'], - '', - 'new_template,edit_template', - 'main', - 0, - 10, - 'dropdown-toggle' - ); -} -if($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { - $sitemenu['element_tplvars'] = array( - 'element_tplvars', - 'elements', - '' . $_lang['tmplvars'] . '', - 'index.php?a=76&tab=' . $tab++, - $_lang['tmplvars'], - '', - 'new_template,edit_template', - 'main', - 0, - 20, - 'dropdown-toggle' - ); -} -if($modx->hasPermission('edit_chunk')) { - $sitemenu['element_htmlsnippets'] = array( - 'element_htmlsnippets', - 'elements', - '' . $_lang['manage_htmlsnippets'] . '', - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_htmlsnippets'], - '', - 'new_chunk,edit_chunk', - 'main', - 0, - 30, - 'dropdown-toggle' - ); -} -if($modx->hasPermission('edit_snippet')) { - $sitemenu['element_snippets'] = array( - 'element_snippets', - 'elements', - '' . $_lang['manage_snippets'] . '', - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_snippets'], - '', - 'new_snippet,edit_snippet', - 'main', - 0, - 40, - 'dropdown-toggle' - ); -} -if($modx->hasPermission('edit_plugin')) { - $sitemenu['element_plugins'] = array( - 'element_plugins', - 'elements', - '' . $_lang['manage_plugins'] . '', - 'index.php?a=76&tab=' . $tab++, - $_lang['manage_plugins'], - '', - 'new_plugin,edit_plugin', - 'main', - 0, - 50, - 'dropdown-toggle' - ); -} -//$sitemenu['element_categories'] = array('element_categories','elements',$_lang['element_categories'],'index.php?a=76&tab=5',$_lang['element_categories'],'','new_template,edit_template,new_snippet,edit_snippet,new_chunk,edit_chunk,new_plugin,edit_plugin','main',1,60,''); - -if($modx->hasPermission('file_manager')) { - $sitemenu['manage_files'] = array( - 'manage_files', - 'elements', - '' . $_lang['manage_files'], - 'index.php?a=31', - $_lang['manage_files'], - '', - 'file_manager', - 'main', - 0, - 80, - '' - ); -} -if($modx->hasPermission('category_manager')) { - $sitemenu['manage_categories'] = array( - 'manage_categories', - 'elements', - '' . $_lang['manage_categories'], - 'index.php?a=120', - $_lang['manage_categories'], - '', - 'category_manager', - 'main', - 0, - 70, - '' - ); -} - -// Modules Menu Items -if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module') || $modx->hasPermission('save_module')) { - $sitemenu['new_module'] = array( - 'new_module', - 'modules', - '' . $_lang['module_management'], - 'index.php?a=106', - $_lang['module_management'], - '', - 'new_module,edit_module', - 'main', - 1, - 0, - '' - ); -} - -if($modx->hasPermission('exec_module')) { - if($_SESSION['mgrRole'] != 1 && !empty($modx->config['use_udperms'])) { - $rs = $modx->db->query('SELECT DISTINCT sm.id, sm.name, sm.icon, mg.member - FROM ' . $modx->getFullTableName('site_modules') . ' AS sm - LEFT JOIN ' . $modx->getFullTableName('site_module_access') . ' AS sma ON sma.module = sm.id - LEFT JOIN ' . $modx->getFullTableName('member_groups') . ' AS mg ON sma.usergroup = mg.user_group - WHERE (mg.member IS NULL OR mg.member = ' . $modx->getLoginUserID() . ') AND sm.disabled != 1 AND sm.locked != 1 - ORDER BY sm.name'); - } else { - $rs = $modx->db->select('*', $modx->getFullTableName('site_modules'), 'disabled != 1', 'name'); - } - if($modx->db->getRecordCount($rs)) { - while ($row = $modx->db->getRow($rs)) { - $sitemenu['module' . $row['id']] = array( - 'module' . $row['id'], - 'modules', - ($row['icon'] != '' ? '' : '') . $row['name'], - 'index.php?a=112&id=' . $row['id'], - $row['name'], - '', - '', - 'main', - 0, - 1, - '' - ); - } - } -} - -// security menu items (users) - -if($modx->hasPermission('edit_user')) { - $sitemenu['user_management_title'] = array( - 'user_management_title', - 'users', - '' . $_lang['user_management_title'] . '', - 'index.php?a=75', - $_lang['user_management_title'], - '', - 'edit_user', - 'main', - 0, - 10, - 'dropdown-toggle' - ); -} - -if($modx->hasPermission('edit_web_user')) { - $sitemenu['web_user_management_title'] = array( - 'web_user_management_title', - 'users', - '' . $_lang['web_user_management_title'] . '', - 'index.php?a=99', - $_lang['web_user_management_title'], - '', - 'edit_web_user', - 'main', - 0, - 20, - 'dropdown-toggle' - ); -} - -if($modx->hasPermission('edit_role')) { - $sitemenu['role_management_title'] = array( - 'role_management_title', - 'users', - '' . $_lang['role_management_title'], - 'index.php?a=86', - $_lang['role_management_title'], - '', - 'new_role,edit_role,delete_role', - 'main', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('access_permissions')) { - $sitemenu['manager_permissions'] = array( - 'manager_permissions', - 'users', - '' . $_lang['manager_permissions'], - 'index.php?a=40', - $_lang['manager_permissions'], - '', - 'access_permissions', - 'main', - 0, - 40, - '' - ); -} - -if($modx->hasPermission('web_access_permissions')) { - $sitemenu['web_permissions'] = array( - 'web_permissions', - 'users', - '' . $_lang['web_permissions'], - 'index.php?a=91', - $_lang['web_permissions'], - '', - 'web_access_permissions', - 'main', - 0, - 50, - '' - ); -} - -// Tools Menu - -$sitemenu['refresh_site'] = array( - 'refresh_site', - 'tools', - '' . $_lang['refresh_site'], - 'index.php?a=26', - $_lang['refresh_site'], - '', - '', - 'main', - 0, - 5, - 'item-group', - array( - 'refresh_site_in_window' => array( - 'a', // tag - 'javascript:;', // href - 'btn btn-secondary', // class or btn-success - 'modx.popup({url:\'index.php?a=26\', title:\'' . $_lang['refresh_site'] . '\', icon: \'fa-recycle\', iframe: \'ajax\', selector: \'.tab-page>.container\', position: \'right top\', width: \'auto\', maxheight: \'50%\', wrap: \'body\' })', // onclick - $_lang['refresh_site'], // title - '' // innerHTML - ) - ) -); - -$sitemenu['search'] = array( - 'search', - 'tools', - '' . $_lang['search'], - 'index.php?a=71', - $_lang['search'], - '', - '', - 'main', - 1, - 9, - '' -); - -if($modx->hasPermission('bk_manager')) { - $sitemenu['bk_manager'] = array( - 'bk_manager', - 'tools', - '' . $_lang['bk_manager'], - 'index.php?a=93', - $_lang['bk_manager'], - '', - 'bk_manager', - 'main', - 0, - 10, - '' - ); -} - -if($modx->hasPermission('remove_locks')) { - $sitemenu['remove_locks'] = array( - 'remove_locks', - 'tools', - '' . $_lang['remove_locks'], - 'javascript:modx.removeLocks();', - $_lang['remove_locks'], - '', - 'remove_locks', - '', - 0, - 20, - '' - ); -} - -if($modx->hasPermission('import_static')) { - $sitemenu['import_site'] = array( - 'import_site', - 'tools', - '' . $_lang['import_site'], - 'index.php?a=95', - $_lang['import_site'], - '', - 'import_static', - 'main', - 0, - 30, - '' - ); -} - -if($modx->hasPermission('export_static')) { - $sitemenu['export_site'] = array( - 'export_site', - 'tools', - '' . $_lang['export_site'], - 'index.php?a=83', - $_lang['export_site'], - '', - 'export_static', - 'main', - 1, - 40, - '' - ); -} - -$menu = $modx->invokeEvent("OnManagerMenuPrerender", array('menu' => $sitemenu)); -if(is_array($menu)) { - $newmenu = array(); - foreach($menu as $item){ - if(is_array(unserialize($item))){ - $newmenu = array_merge($newmenu, unserialize($item)); - } - } - if(count($newmenu)> 0) $sitemenu = $newmenu; -} - -if(file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php')) { - include_once(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php'); -} else { - include_once(MODX_MANAGER_PATH . 'includes/menu.class.inc.php'); -} -$menu = new EVOmenu(); -$menu->Build($sitemenu, array( - 'outerClass' => 'nav', - 'innerClass' => 'dropdown-menu', - 'parentClass' => 'dropdown', - 'parentLinkClass' => 'dropdown-toggle', - 'parentLinkAttr' => '', - 'parentLinkIn' => '' -)); +Build('id','parent','name','link','alt','onclick','permission','target','divider 1/0','menuindex', 'class') +*/ + +$sitemenu['bars'] = array( + 'bars', + 'main', + '', + 'javascript:;', + $_lang['home'], + 'modx.resizer.toggle(); return false;', + ' return false;', + '', + 0, + 10, + '' +); + +//mainMenu +$sitemenu['site'] = array( + 'site', + 'main', + '' . $_lang['home'] . '', + 'index.php?a=2', + $_lang['home'], + '', + '', + 'main', + 0, + 10, + 'active' +); + +if($modx->hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('file_manager')) { + $sitemenu['elements'] = array( + 'elements', + 'main', + '' . $_lang['elements'] . '', + 'javascript:;', + $_lang['elements'], + ' return false;', + '', + '', + 0, + 20, + '' + ); +} + +if($modx->hasPermission('exec_module')) { + $sitemenu['modules'] = array( + 'modules', + 'main', + '' . $_lang['modules'] . '', + 'javascript:;', + $_lang['modules'], + ' return false;', + '', + '', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('edit_user') || $modx->hasPermission('edit_web_user') || $modx->hasPermission('edit_role') || $modx->hasPermission('access_permissions') || $modx->hasPermission('web_access_permissions')) { + $sitemenu['users'] = array( + 'users', + 'main', + '' . $_lang['users'] . '', + 'javascript:;', + $_lang['users'], + ' return false;', + 'edit_user', + '', + 0, + 40, + '' + ); +} + +if($modx->hasPermission('empty_cache') || $modx->hasPermission('bk_manager') || $modx->hasPermission('remove_locks') || $modx->hasPermission('import_static') || $modx->hasPermission('export_static')) { + $sitemenu['tools'] = array( + 'tools', + 'main', + '' . $_lang['tools'] . '', + 'javascript:;', + $_lang['tools'], + ' return false;', + '', + '', + 0, + 50, + '' + ); +} + +$tab = 0; +if($modx->hasPermission('edit_template')) { + $sitemenu['element_templates'] = array( + 'element_templates', + 'elements', + '' . $_lang['manage_templates'] . '', + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_templates'], + '', + 'new_template,edit_template', + 'main', + 0, + 10, + 'dropdown-toggle' + ); +} +if($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { + $sitemenu['element_tplvars'] = array( + 'element_tplvars', + 'elements', + '' . $_lang['tmplvars'] . '', + 'index.php?a=76&tab=' . $tab++, + $_lang['tmplvars'], + '', + 'new_template,edit_template', + 'main', + 0, + 20, + 'dropdown-toggle' + ); +} +if($modx->hasPermission('edit_chunk')) { + $sitemenu['element_htmlsnippets'] = array( + 'element_htmlsnippets', + 'elements', + '' . $_lang['manage_htmlsnippets'] . '', + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_htmlsnippets'], + '', + 'new_chunk,edit_chunk', + 'main', + 0, + 30, + 'dropdown-toggle' + ); +} +if($modx->hasPermission('edit_snippet')) { + $sitemenu['element_snippets'] = array( + 'element_snippets', + 'elements', + '' . $_lang['manage_snippets'] . '', + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_snippets'], + '', + 'new_snippet,edit_snippet', + 'main', + 0, + 40, + 'dropdown-toggle' + ); +} +if($modx->hasPermission('edit_plugin')) { + $sitemenu['element_plugins'] = array( + 'element_plugins', + 'elements', + '' . $_lang['manage_plugins'] . '', + 'index.php?a=76&tab=' . $tab++, + $_lang['manage_plugins'], + '', + 'new_plugin,edit_plugin', + 'main', + 0, + 50, + 'dropdown-toggle' + ); +} +//$sitemenu['element_categories'] = array('element_categories','elements',$_lang['element_categories'],'index.php?a=76&tab=5',$_lang['element_categories'],'','new_template,edit_template,new_snippet,edit_snippet,new_chunk,edit_chunk,new_plugin,edit_plugin','main',1,60,''); + +if($modx->hasPermission('file_manager')) { + $sitemenu['manage_files'] = array( + 'manage_files', + 'elements', + '' . $_lang['manage_files'], + 'index.php?a=31', + $_lang['manage_files'], + '', + 'file_manager', + 'main', + 0, + 80, + '' + ); +} +if($modx->hasPermission('category_manager')) { + $sitemenu['manage_categories'] = array( + 'manage_categories', + 'elements', + '' . $_lang['manage_categories'], + 'index.php?a=120', + $_lang['manage_categories'], + '', + 'category_manager', + 'main', + 0, + 70, + '' + ); +} + +// Modules Menu Items +if($modx->hasPermission('new_module') || $modx->hasPermission('edit_module') || $modx->hasPermission('save_module')) { + $sitemenu['new_module'] = array( + 'new_module', + 'modules', + '' . $_lang['module_management'], + 'index.php?a=106', + $_lang['module_management'], + '', + 'new_module,edit_module', + 'main', + 1, + 0, + '' + ); +} + +if($modx->hasPermission('exec_module')) { + if($_SESSION['mgrRole'] != 1 && !empty($modx->config['use_udperms'])) { + $rs = $modx->db->query('SELECT DISTINCT sm.id, sm.name, sm.icon, mg.member + FROM ' . $modx->getFullTableName('site_modules') . ' AS sm + LEFT JOIN ' . $modx->getFullTableName('site_module_access') . ' AS sma ON sma.module = sm.id + LEFT JOIN ' . $modx->getFullTableName('member_groups') . ' AS mg ON sma.usergroup = mg.user_group + WHERE (mg.member IS NULL OR mg.member = ' . $modx->getLoginUserID() . ') AND sm.disabled != 1 AND sm.locked != 1 + ORDER BY sm.name'); + } else { + $rs = $modx->db->select('*', $modx->getFullTableName('site_modules'), 'disabled != 1', 'name'); + } + if($modx->db->getRecordCount($rs)) { + while ($row = $modx->db->getRow($rs)) { + $sitemenu['module' . $row['id']] = array( + 'module' . $row['id'], + 'modules', + ($row['icon'] != '' ? '' : '') . $row['name'], + 'index.php?a=112&id=' . $row['id'], + $row['name'], + '', + '', + 'main', + 0, + 1, + '' + ); + } + } +} + +// security menu items (users) + +if($modx->hasPermission('edit_user')) { + $sitemenu['user_management_title'] = array( + 'user_management_title', + 'users', + '' . $_lang['user_management_title'] . '', + 'index.php?a=75', + $_lang['user_management_title'], + '', + 'edit_user', + 'main', + 0, + 10, + 'dropdown-toggle' + ); +} + +if($modx->hasPermission('edit_web_user')) { + $sitemenu['web_user_management_title'] = array( + 'web_user_management_title', + 'users', + '' . $_lang['web_user_management_title'] . '', + 'index.php?a=99', + $_lang['web_user_management_title'], + '', + 'edit_web_user', + 'main', + 0, + 20, + 'dropdown-toggle' + ); +} + +if($modx->hasPermission('edit_role')) { + $sitemenu['role_management_title'] = array( + 'role_management_title', + 'users', + '' . $_lang['role_management_title'], + 'index.php?a=86', + $_lang['role_management_title'], + '', + 'new_role,edit_role,delete_role', + 'main', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('access_permissions')) { + $sitemenu['manager_permissions'] = array( + 'manager_permissions', + 'users', + '' . $_lang['manager_permissions'], + 'index.php?a=40', + $_lang['manager_permissions'], + '', + 'access_permissions', + 'main', + 0, + 40, + '' + ); +} + +if($modx->hasPermission('web_access_permissions')) { + $sitemenu['web_permissions'] = array( + 'web_permissions', + 'users', + '' . $_lang['web_permissions'], + 'index.php?a=91', + $_lang['web_permissions'], + '', + 'web_access_permissions', + 'main', + 0, + 50, + '' + ); +} + +// Tools Menu + +$sitemenu['refresh_site'] = array( + 'refresh_site', + 'tools', + '' . $_lang['refresh_site'], + 'index.php?a=26', + $_lang['refresh_site'], + '', + '', + 'main', + 0, + 5, + 'item-group', + array( + 'refresh_site_in_window' => array( + 'a', // tag + 'javascript:;', // href + 'btn btn-secondary', // class or btn-success + 'modx.popup({url:\'index.php?a=26\', title:\'' . $_lang['refresh_site'] . '\', icon: \'fa-recycle\', iframe: \'ajax\', selector: \'.tab-page>.container\', position: \'right top\', width: \'auto\', maxheight: \'50%\', wrap: \'body\' })', // onclick + $_lang['refresh_site'], // title + '' // innerHTML + ) + ) +); + +$sitemenu['search'] = array( + 'search', + 'tools', + '' . $_lang['search'], + 'index.php?a=71', + $_lang['search'], + '', + '', + 'main', + 1, + 9, + '' +); + +if($modx->hasPermission('bk_manager')) { + $sitemenu['bk_manager'] = array( + 'bk_manager', + 'tools', + '' . $_lang['bk_manager'], + 'index.php?a=93', + $_lang['bk_manager'], + '', + 'bk_manager', + 'main', + 0, + 10, + '' + ); +} + +if($modx->hasPermission('remove_locks')) { + $sitemenu['remove_locks'] = array( + 'remove_locks', + 'tools', + '' . $_lang['remove_locks'], + 'javascript:modx.removeLocks();', + $_lang['remove_locks'], + '', + 'remove_locks', + '', + 0, + 20, + '' + ); +} + +if($modx->hasPermission('import_static')) { + $sitemenu['import_site'] = array( + 'import_site', + 'tools', + '' . $_lang['import_site'], + 'index.php?a=95', + $_lang['import_site'], + '', + 'import_static', + 'main', + 0, + 30, + '' + ); +} + +if($modx->hasPermission('export_static')) { + $sitemenu['export_site'] = array( + 'export_site', + 'tools', + '' . $_lang['export_site'], + 'index.php?a=83', + $_lang['export_site'], + '', + 'export_static', + 'main', + 1, + 40, + '' + ); +} + +$menu = $modx->invokeEvent("OnManagerMenuPrerender", array('menu' => $sitemenu)); +if(is_array($menu)) { + $newmenu = array(); + foreach($menu as $item){ + if(is_array(unserialize($item))){ + $newmenu = array_merge($newmenu, unserialize($item)); + } + } + if(count($newmenu)> 0) $sitemenu = $newmenu; +} + +if(file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php')) { + include_once(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/includes/menu.class.inc.php'); +} else { + include_once(MODX_MANAGER_PATH . 'includes/menu.class.inc.php'); +} +$menu = new EVOmenu(); +$menu->Build($sitemenu, array( + 'outerClass' => 'nav', + 'innerClass' => 'dropdown-menu', + 'parentClass' => 'dropdown', + 'parentLinkClass' => 'dropdown-toggle', + 'parentLinkAttr' => '', + 'parentLinkIn' => '' +)); diff --git a/manager/frames/nodes.functions.inc.php b/manager/frames/nodes.functions.inc.php index 520c5ff0..ebc3a399 100755 --- a/manager/frames/nodes.functions.inc.php +++ b/manager/frames/nodes.functions.inc.php @@ -12,7 +12,7 @@ */ function makeHTML($indent, $parent, $expandAll, $hereid = '') { - global $modx, $icons, $_style, $_lang, $opened, $opened2, $closed2, $modx_textdir; + $modx = evolutionCMS(); global $icons, $_style, $_lang, $opened, $opened2, $closed2, $modx_textdir; $output = ''; @@ -480,7 +480,7 @@ function getIconInfo($_style) */ function getNodeTitle($nodeNameSource, $row) { - global $modx; + $modx = evolutionCMS(); switch ($nodeNameSource) { case 'menutitle': @@ -551,7 +551,7 @@ function isDateNode($nodeNameSource) */ function checkIsFolder($parent = 0, $isfolder = 1) { - global $modx; + $modx = evolutionCMS(); return (int)$modx->db->getValue($modx->db->query('SELECT count(*) FROM ' . $modx->getFullTableName('site_content') . ' WHERE parent=' . $parent . ' AND isfolder=' . $isfolder . ' ')); } @@ -562,7 +562,7 @@ function checkIsFolder($parent = 0, $isfolder = 1) */ function _htmlentities($array) { - global $modx; + $modx = evolutionCMS(); $array = json_encode($array, JSON_UNESCAPED_UNICODE); $array = htmlentities($array, ENT_COMPAT, $modx->config['modx_charset']); diff --git a/manager/frames/tree.php b/manager/frames/tree.php index 86d4f52f..c3005a09 100755 --- a/manager/frames/tree.php +++ b/manager/frames/tree.php @@ -1,74 +1,74 @@ -INCLUDE_ORDERING_ERROR


          Please use the EVO Content Manager instead of accessing this file directly."); -} - -// invoke OnManagerTreeInit event -$evtOut = $modx->invokeEvent('OnManagerTreeInit', $_REQUEST); -if(is_array($evtOut)) { - echo implode("\n", $evtOut); -} -?> - -
          -
          - - - - - - hasPermission('new_document')) { ?> - - - - - - - - - hasPermission('edit_document') && $modx->hasPermission('save_document')) { ?> - - - - hasPermission('assets_images')) { ?> - "> - - - hasPermission('assets_files')) { ?> - "> - - - hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin')) { ?> - "> - - - hasPermission('empty_trash')) { ?> - - - - - -
          - -
          - invokeEvent('OnManagerTreePrerender', $modx->db->escape($_REQUEST)); - if(is_array($evtOut)) { - echo implode("\n", $evtOut); - } - ?> -
          -
          -
          -
          - invokeEvent('OnManagerTreeRender', $modx->db->escape($_REQUEST)); - if(is_array($evtOut)) { - echo implode("\n", $evtOut); - } - ?> -
          -
          +INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); +} + +// invoke OnManagerTreeInit event +$evtOut = $modx->invokeEvent('OnManagerTreeInit', $_REQUEST); +if(is_array($evtOut)) { + echo implode("\n", $evtOut); +} +?> + +
          +
          + + + + + + hasPermission('new_document')) { ?> + + + + + + + + + hasPermission('edit_document') && $modx->hasPermission('save_document')) { ?> + + + + hasPermission('assets_images')) { ?> + "> + + + hasPermission('assets_files')) { ?> + "> + + + hasPermission('edit_template') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('edit_chunk') || $modx->hasPermission('edit_plugin')) { ?> + "> + + + hasPermission('empty_trash')) { ?> + + + + + +
          + +
          + invokeEvent('OnManagerTreePrerender', $modx->db->escape($_REQUEST)); + if(is_array($evtOut)) { + echo implode("\n", $evtOut); + } + ?> +
          +
          +
          +
          + invokeEvent('OnManagerTreeRender', $modx->db->escape($_REQUEST)); + if(is_array($evtOut)) { + echo implode("\n", $evtOut); + } + ?> +
          +
          diff --git a/manager/includes/accesscontrol.inc.php b/manager/includes/accesscontrol.inc.php index 4cc3d27b..7de125cb 100755 --- a/manager/includes/accesscontrol.inc.php +++ b/manager/includes/accesscontrol.inc.php @@ -81,11 +81,42 @@ $modx->setPlaceholder('manager_path', MGR_DIR); $modx->setPlaceholder('logo_slogan', $_lang["logo_slogan"]); $modx->setPlaceholder('login_message', $_lang["login_message"]); - $modx->setPlaceholder('manager_theme_url', - MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/'); + $modx->setPlaceholder('manager_theme_url', MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/'); $modx->setPlaceholder('year', date('Y')); - $modx->setPlaceholder('manager_theme_style', - (isset($_COOKIE['MODX_themeColor']) ? $_COOKIE['MODX_themeColor'] : 'dark')); + + // set login logo image + if ( !empty($modx->config['login_logo']) ) { + $modx->setPlaceholder('login_logo', MODX_SITE_URL . $modx->config['login_logo']); + } else { + $modx->setPlaceholder('login_logo', MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/images/login/default/login-logo.png'); + } + + // set login background image + if ( !empty($modx->config['login_bg']) ) { + $modx->setPlaceholder('login_bg', MODX_SITE_URL . $modx->config['login_bg']); + } else { + $modx->setPlaceholder('login_bg', MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/images/login/default/login-background.jpg'); + } + + // set form position css class + $modx->setPlaceholder('login_form_position_class', 'loginbox-' . $modx->config['login_form_position']); + + switch ($modx->config['manager_theme_mode']) { + case '1': + $modx->setPlaceholder('manager_theme_style', 'lightness'); + break; + case '2': + $modx->setPlaceholder('manager_theme_style', 'light'); + break; + case '3': + $modx->setPlaceholder('manager_theme_style', 'dark'); + break; + case '4': + $modx->setPlaceholder('manager_theme_style', 'darkness'); + break; + } + // set form style css class + $modx->setPlaceholder('login_form_style_class', 'loginbox-' . $modx->config['login_form_style']); // andrazk 20070416 - notify user of install/update if (isset($_GET['installGoingOn'])) { diff --git a/manager/includes/actionlist.inc.php b/manager/includes/actionlist.inc.php index 7bcc98a5..b564716e 100755 --- a/manager/includes/actionlist.inc.php +++ b/manager/includes/actionlist.inc.php @@ -6,12 +6,12 @@ // action list $GLOBALS['action_list'] = array( '1' => 'Loading a frame(set)', - '2' => 'Viewing home page/ online users', + '2' => 'Viewing dashboard', '3' => 'Viewing data for resource', '4' => 'Creating a resource', '5' => 'Saving resource', '6' => 'Deleting resource', - '7' => 'Waiting while MODX cleans up', + '7' => 'Waiting while EVO cleans up', '8' => 'Logged out', '9' => 'Viewing help', '10' => 'Viewing/ composing messages', @@ -62,7 +62,7 @@ '56' => 'Refresh resource tree', '57' => 'Refresh menu', '58' => 'Logged in', - '59' => 'About MODX', + '59' => 'About EVO', '60' => 'Emptying Recycle Bin', '61' => 'Publishing a resource', '62' => 'Un-publishing a resource', diff --git a/manager/includes/active_user_locks.inc.php b/manager/includes/active_user_locks.inc.php index 3ff7f186..e23b0e52 100755 --- a/manager/includes/active_user_locks.inc.php +++ b/manager/includes/active_user_locks.inc.php @@ -3,9 +3,7 @@ die("INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); } -$lockElementId = (int)$lockElementId; - -if ($lockElementId > 0) { +if (is_numeric($lockElementId) && ($lockElementId > 0 || $lockElementId == 0)) { ?> - -

          {$msg}

          - "; + global $modx_manager_charset, $modx_lang_attribute, $modx_textdir, $lastInstallTime; + + if(empty($modx_manager_charset)) { + $modx_manager_charset = $this->getConfig('modx_charset'); + } + + if(empty($modx_lang_attribute)) { + $modx_lang_attribute = $this->getConfig('lang_code'); + } + + if(empty($modx_textdir)) { + $modx_textdir = $this->getConfig('manager_direction'); + } + $textdir = $modx_textdir === 'rtl' ? 'rtl' : 'ltr'; + + switch (true) { + case (0 === stripos($url, 'javascript:')): + $fnc = substr($url, 11); + break; + case $url === '#': + $fnc = ''; + break; + case empty($url): + $fnc = 'history.back(-1);'; + break; + default: + $fnc = "window.location.href='" . addslashes($url) . "';"; + } + + $style = ''; + if (IN_MANAGER_MODE) { + if (empty($lastInstallTime)) { + $lastInstallTime = time(); + } + + $path = 'media/style/' . $this->getConfig('manager_theme') . '/'; + $css = file_exists(MODX_MANAGER_PATH . $path . '/css/styles.min.css') ? '/css/styles.min.css' : 'style.css'; + $style = ''; + } + + ob_get_clean(); + echo " + + + MODX :: Alert + + {$style} + + + +

          {$msg}

          + + "; exit; } @@ -3481,7 +3553,7 @@ public function logEvent($evtid, $type, $msg, $source = 'Parser') if (isset($this->config['send_errormail']) && $this->config['send_errormail'] !== '0') { if ($this->config['send_errormail'] <= $type) { $this->sendmail(array( - 'subject' => 'MODX System Error on ' . $this->config['site_name'], + 'subject' => 'Evolution CMS System Error on ' . $this->config['site_name'], 'body' => 'Source: ' . $source . ' - The details of the error could be seen in the MODX system events log.', 'type' => 'text' )); @@ -3559,8 +3631,10 @@ public function sendmail($params = array(), $msg = '', $files = array()) if (isset($p['from']) && strpos($p['from'], '<') !== false && substr($p['from'], -1) === '>') { list($p['fromname'], $p['from']) = $this->mail->address_split($p['from']); } - $this->mail->From = (!isset($p['from'])) ? $this->config['emailsender'] : $p['from']; - $this->mail->FromName = (!isset($p['fromname'])) ? $this->config['site_name'] : $p['fromname']; + $this->mail->setFrom( + isset($p['from']) ? $p['from'] : $this->config['emailsender'], + isset($p['fromname']) ? $p['fromname'] : $this->config['site_name'] + ); $this->mail->Subject = (!isset($p['subject'])) ? $this->config['emailsubject'] : $p['subject']; $this->mail->Body = $p['body']; if (isset($p['type']) && $p['type'] == 'text') { @@ -4148,7 +4222,7 @@ public function getAliasListing($id) if (isset($this->aliasListing[$id])) { $out = $this->aliasListing[$id]; } else { - $q = $this->db->query("SELECT id,alias,isfolder,parent FROM " . $this->getFullTableName("site_content") . " WHERE id=" . (int)$id); + $q = $this->db->query("SELECT id,alias,isfolder,parent,alias_visible FROM " . $this->getFullTableName("site_content") . " WHERE id=" . (int)$id); if ($this->db->getRecordCount($q) == '1') { $q = $this->db->getRow($q); $this->aliasListing[$id] = array( @@ -4156,6 +4230,7 @@ public function getAliasListing($id) 'alias' => $q['alias'] == '' ? $q['id'] : $q['alias'], 'parent' => (int)$q['parent'], 'isfolder' => (int)$q['isfolder'], + 'alias_visible' => (int)$q['alias_visible'], ); if ($this->aliasListing[$id]['parent'] > 0) { //fix alias_path_usage @@ -4257,11 +4332,12 @@ public function getChunk($chunkName) { $out = null; if (empty($chunkName)) { - return $out; - } - if (isset ($this->chunkCache[$chunkName])) { + // nop + } elseif ($this->isChunkProcessor('DLTemplate')) { + $out = DLTemplate::getInstance($this)->getChunk($chunkName); + } elseif (isset ($this->chunkCache[$chunkName])) { $out = $this->chunkCache[$chunkName]; - } else if (stripos($chunkName, '@FILE') === 0) { + } elseif (stripos($chunkName, '@FILE') === 0) { $out = $this->chunkCache[$chunkName] = $this->atBindFileContent($chunkName); } else { $where = sprintf("`name`='%s' AND disabled=0", $this->db->escape($chunkName)); @@ -4344,6 +4420,21 @@ public function parseText($tpl = '', $ph = array(), $left = '[+', $right = '+]', return $tpl; } + /** + * @param string|object $processor + * @return bool + */ + public function isChunkProcessor($processor) + { + $value = (string)$this->getConfig('chunk_processor'); + + if(is_object($processor)) { + $processor = get_class($processor); + } + + return is_scalar($processor) && mb_strtolower($value) === mb_strtolower($processor) && class_exists($processor, false); + } + /** * parseChunk * @version 1.1 (2013-10-17) @@ -4366,7 +4457,9 @@ public function parseChunk($chunkName, $chunkArr, $prefix = '{', $suffix = '}') return false; } - return $this->parseText($this->getChunk($chunkName), $chunkArr, $prefix, $suffix); + return $prefix === '[+' && $suffix === '+]' && $this->isChunkProcessor('DLTemplate') ? + DLTemplate::getInstance($this)->parseChunk($chunkName, $chunkArr) : + $this->parseText($this->getChunk($chunkName), $chunkArr, $prefix, $suffix); } /** @@ -4677,14 +4770,14 @@ public function getTemplateVar($idname = "", $fields = "*", $docid = "", $publis * Elements representing a site content field consist of an associative array of 'name' and 'value'. * Elements representing a TV consist of an array representing a db row including the fields specified in $fields. * - * @param $idnames {array; '*'} - Which TVs to fetch. Can relate to the TV ids in the db (array elements should be numeric only) or the TV names (array elements should be names only). @required - * @param $fields {comma separated string; '*'} - Fields names in the TV table of MODx database. Default: '*' - * @param $docid {integer; ''} - Id of a document to get. Default: an empty string which indicates the current document. - * @param $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. - * @param $sort {comma separated string} - Fields of the TV table to sort by. Default: 'rank'. - * @param $dir {'ASC'; 'DESC'} - How to sort the result array (direction). Default: 'ASC'. + * @param string|array $idnames {array; '*'} - Which TVs to fetch. Can relate to the TV ids in the db (array elements should be numeric only) or the TV names (array elements should be names only). @required + * @param string|array $fields {comma separated string; '*'} - Fields names in the TV table of MODx database. Default: '*' + * @param int|string $docid Id of a document to get. Default: an empty string which indicates the current document. + * @param int|string $published {0; 1; 'all'} - Document publication status. Once the parameter equals 'all', the result will be returned regardless of whether the ducuments are published or they are not. Default: 1. + * @param string $sort {comma separated string} - Fields of the TV table to sort by. Default: 'rank'. + * @param string $dir {'ASC'; 'DESC'} - How to sort the result array (direction). Default: 'ASC'. * - * @return {array; false} - Result array, or false. + * @return array|bool Result array, or false. */ public function getTemplateVars($idnames = array(), $fields = '*', $docid = '', $published = 1, $sort = 'rank', $dir = 'ASC') { @@ -4693,12 +4786,11 @@ public function getTemplateVars($idnames = array(), $fields = '*', $docid = '', return $this->tmpCache[__FUNCTION__][$cacheKey]; } - if (($idnames != '*' && !is_array($idnames)) || empty($idnames) ) { + if (($idnames !== '*' && !is_array($idnames)) || empty($idnames) ) { return false; } else { - // get document record - if ($docid == '') { + if (empty($docid)) { $docid = $this->documentIdentifier; $docRow = $this->documentObject; } else { @@ -4711,18 +4803,33 @@ public function getTemplateVars($idnames = array(), $fields = '*', $docid = '', } // get user defined template variables - $fields = ($fields == '') ? 'tv.*' : 'tv.' . implode(',tv.', array_filter(array_map('trim', explode(',', $fields)))); + if (!empty($fields) && (is_scalar($fields) || \is_array($fields))) { + if(\is_scalar($fields)) { + $fields = explode(',', $fields); + } + $fields = array_filter(array_map('trim', $fields), function($value) { + return $value !== 'value'; + }); + $fields = 'tv.' . implode(',tv.', $fields); + } else { + $fields = 'tv.*'; + } $sort = ($sort == '') ? '' : 'tv.' . implode(',tv.', array_filter(array_map('trim', explode(',', $sort)))); - if ($idnames == '*') { + if ($idnames === '*') { $query = 'tv.id<>0'; } else { $query = (is_numeric($idnames[0]) ? 'tv.id' : 'tv.name') . " IN ('" . implode("','", $idnames) . "')"; } - $rs = $this->db->select("{$fields}, IF(tvc.value != '', tvc.value, tv.default_text) as value", $this->getFullTableName('site_tmplvars') . " tv - INNER JOIN " . $this->getFullTableName('site_tmplvar_templates') . " tvtpl ON tvtpl.tmplvarid = tv.id - LEFT JOIN " . $this->getFullTableName('site_tmplvar_contentvalues') . " tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$docid}'", "{$query} AND tvtpl.templateid = '{$docRow['template']}'", ($sort ? "{$sort} {$dir}" : "")); + $rs = $this->db->select( + "{$fields}, IF(tvc.value != '', tvc.value, tv.default_text) as value", + $this->getFullTableName('site_tmplvars') . ' tv ' . + 'INNER JOIN ' . $this->getFullTableName('site_tmplvar_templates') . ' tvtpl ON tvtpl.tmplvarid = tv.id ' . + 'LEFT JOIN ' . $this->getFullTableName('site_tmplvar_contentvalues') . " tvc ON tvc.tmplvarid = tv.id AND tvc.contentid = '" . $docid . "'", + $query . " AND tvtpl.templateid = '" . $docRow['template'] . "'", + ($sort ? ($sort . ' ' . $dir) : '') + ); $result = $this->db->makeArray($rs); @@ -4731,7 +4838,7 @@ public function getTemplateVars($idnames = array(), $fields = '*', $docid = '', ksort($docRow); foreach ($docRow as $key => $value) { - if ($idnames == '*' || in_array($key, $idnames)) { + if ($idnames === '*' || in_array($key, $idnames)) { array_push($result, array( 'name' => $key, 'value' => $value @@ -5367,6 +5474,13 @@ public function invokeEvent($evtName, $extParams = array()) return false; } + if ($this->event->activePlugin != '') { + $event = new SystemEvent; + $event->setPreviousEvent($this->event); + $this->event = $event; + $this->Event = &$this->event; + } + $results = null; foreach ($this->pluginEvent[$evtName] as $pluginName) { // start for loop if ($this->dumpPlugins) { @@ -5408,15 +5522,24 @@ public function invokeEvent($evtName, $extParams = array()) $this->pluginsCode .= '
          '; $this->pluginsTime["{$evtName} / {$pluginName}"] += $eventtime; } - if ($e->_output != '') { - $results[] = $e->_output; + if ($this->event->getOutput() != '') { + $results[] = $this->event->getOutput(); } - if ($e->_propagate != true) { + if ($this->event->_propagate != true) { break; } } - $e->activePlugin = ''; + $event = $this->event->getPreviousEvent(); + + if ($event) { + unset($this->event); + $this->event = $event; + $this->Event = &$this->event; + } else { + $this->event->activePlugin = ''; + } + return $results; } @@ -5462,59 +5585,54 @@ public function parseProperties($propertyString, $elementName = null, $elementTy $propertyString = trim($propertyString); $propertyString = str_replace('{}', '', $propertyString); $propertyString = str_replace('} {', ',', $propertyString); - if (empty($propertyString)) { - return array(); - } - if ($propertyString == '{}') { - return array(); - } - - $jsonFormat = $this->isJson($propertyString, true); $property = array(); - // old format - if ($jsonFormat === false) { - $props = explode('&', $propertyString); - foreach ($props as $prop) { - - if (empty($prop)) { - continue; - } elseif (strpos($prop, '=') === false) { - $property[trim($prop)] = ''; - continue; - } + if (!empty($propertyString) && $propertyString != '{}') { + $jsonFormat = $this->isJson($propertyString, true); + // old format + if ($jsonFormat === false) { + $props = explode('&', $propertyString); + foreach ($props as $prop) { + + if (empty($prop)) { + continue; + } elseif (strpos($prop, '=') === false) { + $property[trim($prop)] = ''; + continue; + } - $_ = explode('=', $prop, 2); - $key = trim($_[0]); - $p = explode(';', trim($_[1])); - switch ($p[1]) { - case 'list': - case 'list-multi': - case 'checkbox': - case 'radio': - $value = !isset($p[3]) ? '' : $p[3]; - break; - default: - $value = !isset($p[2]) ? '' : $p[2]; - } - if (!empty($key)) { - $property[$key] = $value; - } - } - // new json-format - } else if (!empty($jsonFormat)) { - foreach ($jsonFormat as $key => $row) { - if (!empty($key)) { - if (is_array($row)) { - if (isset($row[0]['value'])) { - $value = $row[0]['value']; - } - } else { - $value = $row; + $_ = explode('=', $prop, 2); + $key = trim($_[0]); + $p = explode(';', trim($_[1])); + switch ($p[1]) { + case 'list': + case 'list-multi': + case 'checkbox': + case 'radio': + $value = !isset($p[3]) ? '' : $p[3]; + break; + default: + $value = !isset($p[2]) ? '' : $p[2]; } - if (isset($value) && $value !== '') { + if (!empty($key)) { $property[$key] = $value; } } + // new json-format + } else if (!empty($jsonFormat)) { + foreach ($jsonFormat as $key => $row) { + if (!empty($key)) { + if (is_array($row)) { + if (isset($row[0]['value'])) { + $value = $row[0]['value']; + } + } else { + $value = $row; + } + if (isset($value) && $value !== '') { + $property[$key] = $value; + } + } + } } } if (!empty($elementName) && !empty($elementType)) { @@ -5530,6 +5648,7 @@ public function parseProperties($propertyString, $elementName = null, $elementTy $property = $out; } } + return $property; } @@ -5821,7 +5940,7 @@ public function cleanUpMODXTags($content = '') list($left, $right) = explode(' ', $brackets); if (strpos($content, $left) !== false) { $matches = $this->getTagsFromContent($content, $left, $right); - $content = str_replace($matches[0], '', $content); + $content = isset($matches[0]) ? str_replace($matches[0], '', $content) : $content; } } $this->config['enable_filter'] = $enable_filter; @@ -6023,6 +6142,27 @@ public function getExtFromFilename($str) /* End of API functions */ /***************************************************************************************/ + public function registerErrorHandlers() + { + $modx = $this; + + set_error_handler(array($modx, 'phpError'), E_ALL); + + register_shutdown_function(function() use($modx) { + $error = error_get_last(); + if (\is_array($error)) { + $code = isset($error['type']) ? $error['type'] : 0; + if ($code>0) { + $modx->phpError( + $code, + isset($error['message']) ? $error['message'] : '', + isset($error['file']) ? $error['file'] : '', + isset($error['line']) ? $error['line'] : '' + ); + } + } + }); + } /** * PHP error handler set by http://www.php.net/manual/en/function.set-error-handler.php * @@ -6091,7 +6231,6 @@ public function phpError($nr, $text, $file, $line) */ public function messageQuit($msg = 'unspecified error', $query = '', $is_error = true, $nr = '', $file = '', $source = '', $text = '', $line = '', $output = '') { - if (0 < $this->messageQuitCount) { return; } @@ -6125,7 +6264,7 @@ public function messageQuit($msg = 'unspecified error', $query = '', $is_error = } if (!empty ($query)) { - $str .= '
          SQL > ' . $query . '
          '; + $str .= '
          SQL > ' . $query . '
          '; } $errortype = array( @@ -6148,10 +6287,10 @@ public function messageQuit($msg = 'unspecified error', $query = '', $is_error = if (!empty($nr) || !empty($file)) { if ($text != '') { - $str .= '
          Error : ' . $text . '
          '; + $str .= '
          Error : ' . $text . '
          '; } if ($output != '') { - $str .= '
          ' . $output . '
          '; + $str .= '
          ' . $output . '
          '; } if ($nr !== '') { $table[] = array('ErrorType[num]', $errortype [$nr] . "[" . $nr . "]"); @@ -6278,6 +6417,7 @@ public function messageQuit($msg = 'unspecified error', $query = '', $is_error = } // Display error + ob_get_clean(); if (isset($_SESSION['mgrValidated'])) { echo 'EVO Content Manager ' . $version . ' » ' . $release_date . ' @@ -6439,27 +6579,31 @@ public function nicesize($size) */ public function getHiddenIdFromAlias($parentid, $alias) { - $table = $this->getFullTableName('site_content'); - $query = $this->db->query("SELECT sc.id, children.id AS child_id, children.alias, COUNT(children2.id) AS children_count - FROM {$table} sc - JOIN {$table} children ON children.parent = sc.id - LEFT JOIN {$table} children2 ON children2.parent = children.id - WHERE sc.parent = {$parentid} AND sc.alias_visible = '0' GROUP BY children.id;"); - - while ($child = $this->db->getRow($query)) { - if ($child['alias'] == $alias || $child['child_id'] == $alias) { - return $child['child_id']; - } - - if ($child['children_count'] > 0) { - $id = $this->getHiddenIdFromAlias($child['id'], $alias); - if ($id) { - return $id; + $out = false; + if ($alias !== '') { + $table = $this->getFullTableName('site_content'); + $query = $this->db->query("SELECT + `sc`.`id` AS `hidden_id`, + `children`.`id` AS `child_id`, + children.alias AS `child_alias`, + COUNT(`grandsons`.`id`) AS `grandsons_count` + FROM " . $table ." AS `sc` + JOIN " . $table . " AS `children` ON `children`.`parent` = `sc`.`id` + LEFT JOIN " . $table . " AS `grandsons` ON `grandsons`.`parent` = `children`.`id` + WHERE `sc`.`parent` = '" . (int)$parentid . "' AND `sc`.`alias_visible` = '0' + GROUP BY `children`.`id`"); + + while ($child = $this->db->getRow($query)) { + if ($child['child_alias'] == $alias || $child['child_id'] == $alias) { + $out = $child['child_id']; + break; + } else if ($child['grandsons_count'] > 0 && ($id = $this->getHiddenIdFromAlias($child['child_id'], $alias))) { + $out = $id; + break; } } } - - return false; + return $out; } /** @@ -6629,7 +6773,7 @@ public function applyFilter($value = '', $modifiers = false, $key = '') */ private static function _getCleanQueryString() { - $q = MODX_CLI ? null : $_GET['q']; + $q = MODX_CLI ? null : (isset($_GET['q']) ? $_GET['q'] : ''); //Return null if the query doesn't exist if (empty($q)) { @@ -6674,11 +6818,21 @@ class SystemEvent { public $name = ''; public $_propagate = true; - public $_output = ''; + /** + * @deprecated use setOutput(), getOutput() + * @var string + */ + public $_output; public $activated = false; public $activePlugin = ''; public $params = array(); + /** + * Previous event object + * @var SystemEvent + */ + private $previousEvent; + /** * @param string $name Name of the event */ @@ -6713,10 +6867,37 @@ public function alert($msg) * Output * * @param string $msg + * @deprecated see addOutput */ public function output($msg) { - $this->_output .= $msg; + $this->addOutput($msg); + } + + /** + * @param mixed $data + */ + public function addOutput($data) + { + if(\is_scalar($data)) { + $this->_output .= $data; + } + } + + /** + * @param mixed $data + */ + public function setOutput($data) + { + $this->_output = $data; + } + + /** + * @return mixed + */ + public function getOutput() + { + return $this->_output; } /** @@ -6731,8 +6912,21 @@ public function _resetEventObject() { unset ($this->returnedValues); $this->name = ""; - $this->_output = ""; + $this->setOutput(null); $this->_propagate = true; $this->activated = false; } + + /** + * @param SystemEvent $event + */ + public function setPreviousEvent($event) + { + $this->previousEvent = $event; + } + + public function getPreviousEvent() + { + return $this->previousEvent; + } } diff --git a/manager/includes/error.class.inc.php b/manager/includes/error.class.inc.php index a7ea1a05..f82cd17d 100755 --- a/manager/includes/error.class.inc.php +++ b/manager/includes/error.class.inc.php @@ -62,7 +62,7 @@ public function __construct() */ public function include_lang($context = 'common') { - global $modx; + $modx = evolutionCMS(); $_lang = array(); $context = trim($context, '/'); diff --git a/manager/includes/extenders/dbapi.mysql.class.inc.php b/manager/includes/extenders/dbapi.mysql.class.inc.php deleted file mode 100755 index c69339cf..00000000 --- a/manager/includes/extenders/dbapi.mysql.class.inc.php +++ /dev/null @@ -1,774 +0,0 @@ -config['host'] = $host ? $host : $GLOBALS['database_server']; - $this->config['dbase'] = $dbase ? $dbase : $GLOBALS['dbase']; - $this->config['user'] = $uid ? $uid : $GLOBALS['database_user']; - $this->config['pass'] = $pwd ? $pwd : $GLOBALS['database_password']; - $this->config['charset'] = $charset ? $charset : $GLOBALS['database_connection_charset']; - $this->config['connection_method'] = $this->_dbconnectionmethod = (isset($GLOBALS['database_connection_method']) ? $GLOBALS['database_connection_method'] : $connection_method); - $this->config['table_prefix'] = ($pre !== null) ? $pre : $GLOBALS['table_prefix']; - $this->initDataTypes(); - } - - /** - * @name: initDataTypes - * @desc: called in the constructor to set up arrays containing the types - * of database fields that can be used with specific PHP types - */ - public function initDataTypes() - { - $this->dataTypes['numeric'] = array( - 'INT', - 'INTEGER', - 'TINYINT', - 'BOOLEAN', - 'DECIMAL', - 'DEC', - 'NUMERIC', - 'FLOAT', - 'DOUBLE PRECISION', - 'REAL', - 'SMALLINT', - 'MEDIUMINT', - 'BIGINT', - 'BIT' - ); - $this->dataTypes['string'] = array( - 'CHAR', - 'VARCHAR', - 'BINARY', - 'VARBINARY', - 'TINYBLOB', - 'BLOB', - 'MEDIUMBLOB', - 'LONGBLOB', - 'TINYTEXT', - 'TEXT', - 'MEDIUMTEXT', - 'LONGTEXT', - 'ENUM', - 'SET' - ); - $this->dataTypes['date'] = array( - 'DATE', - 'DATETIME', - 'TIMESTAMP', - 'TIME', - 'YEAR' - ); - } - - /** - * @name: connect - * - */ - public function connect($host = '', $dbase = '', $uid = '', $pwd = '', $persist = 0) - { - global $modx; - $uid = $uid ? $uid : $this->config['user']; - $pwd = $pwd ? $pwd : $this->config['pass']; - $host = $host ? $host : $this->config['host']; - $dbase = $dbase ? $dbase : $this->config['dbase']; - $charset = $this->config['charset']; - $connection_method = $this->config['connection_method']; - $tstart = $modx->getMicroTime(); - $safe_count = 0; - while (!$this->conn && $safe_count < 3) { - if ($persist != 0) { - $this->conn = mysql_pconnect($host, $uid, $pwd); - } else { - $this->conn = mysql_connect($host, $uid, $pwd, true); - } - - if (!$this->conn) { - if (isset($modx->config['send_errormail']) && $modx->config['send_errormail'] !== '0') { - if ($modx->config['send_errormail'] <= 2) { - $logtitle = 'Failed to create the database connection!'; - $request_uri = $modx->htmlspecialchars($_SERVER['REQUEST_URI']); - $ua = $modx->htmlspecialchars($_SERVER['HTTP_USER_AGENT']); - $referer = $modx->htmlspecialchars($_SERVER['HTTP_REFERER']); - - $modx->sendmail(array( - 'subject' => 'Missing to create the database connection! from ' . $modx->config['site_name'], - 'body' => "{$logtitle}\n{$request_uri}\n{$ua}\n{$referer}", - 'type' => 'text' - ) - ); - } - } - sleep(1); - $safe_count++; - } - } - if (!$this->conn) { - $modx->messageQuit("Failed to create the database connection!"); - exit; - } else { - $dbase = trim($dbase, '`'); // remove the `` chars - if (!@ mysql_select_db($dbase, $this->conn)) { - $modx->messageQuit("Failed to select the database '" . $dbase . "'!"); - exit; - } - @mysql_query("{$connection_method} {$charset}", $this->conn); - $tend = $modx->getMicroTime(); - $totaltime = $tend - $tstart; - if ($modx->dumpSQL) { - $modx->queryCode .= "
          Database connection" . sprintf("Database connection was created in %2.4f s", - $totaltime) . "

          "; - } - if (function_exists('mysql_set_charset')) { - mysql_set_charset($this->config['charset']); - } else { - @mysql_query("SET NAMES {$this->config['charset']}", $this->conn); - } - $this->isConnected = true; - // FIXME (Fixed by line below): - // this->queryTime = this->queryTime + $totaltime; - $modx->queryTime += $totaltime; - } - } - - /** - * @name: disconnect - * - */ - public function disconnect() - { - @ mysql_close($this->conn); - $this->conn = null; - $this->isConnected = false; - } - - public function escape($s, $safecount = 0) - { - - $safecount++; - if (1000 < $safecount) { - exit("Too many loops '{$safecount}'"); - } - - if (empty ($this->conn) || !is_resource($this->conn)) { - $this->connect(); - } - - if (is_array($s)) { - if (count($s) === 0) { - $s = ''; - } else { - foreach ($s as $i => $v) { - $s[$i] = $this->escape($v, $safecount); - } - } - } else { - $s = mysql_real_escape_string($s, $this->conn); - } - - return $s; - } - - /** - * @name: query - * @desc: Mainly for internal use. - * Developers should use select, update, insert, delete where possible - */ - public function query($sql, $watchError = true) - { - global $modx; - if (empty ($this->conn) || !is_resource($this->conn)) { - $this->connect(); - } - $tstart = $modx->getMicroTime(); - if (is_array($sql)) { - $sql = implode("\n", $sql); - } - $this->lastQuery = $sql; - if (!$result = @ mysql_query($sql, $this->conn)) { - if (!$watchError) { - return; - } - switch (mysql_errno()) { - case 1054: - case 1060: - case 1061: - case 1062: - case 1091: - break; - default: - $modx->messageQuit('Execution of a query to the database failed - ' . $this->getLastError(), $sql); - } - } else { - $tend = $modx->getMicroTime(); - $totaltime = $tend - $tstart; - $modx->queryTime = $modx->queryTime + $totaltime; - if ($modx->dumpSQL) { - $debug = debug_backtrace(); - array_shift($debug); - $debug_path = array(); - foreach ($debug as $line) { - $debug_path[] = $line['function']; - } - $debug_path = implode(' > ', array_reverse($debug_path)); - $modx->queryCode .= "
          Query " . ($modx->executedQueries + 1) . " - " . sprintf("%2.2f ms", - $totaltime * 1000) . ""; - $modx->queryCode .= $sql . '

          '; - if ($modx->event->name) { - $modx->queryCode .= 'Current Event => ' . $modx->event->name . '
          '; - } - if ($modx->event->activePlugin) { - $modx->queryCode .= 'Current Plugin => ' . $modx->event->activePlugin . '
          '; - } - if ($modx->currentSnippet) { - $modx->queryCode .= 'Current Snippet => ' . $modx->currentSnippet . '
          '; - } - if (stripos($sql, 'select') === 0) { - $modx->queryCode .= 'Record Count => ' . $this->getRecordCount($result) . '
          '; - } else { - $modx->queryCode .= 'Affected Rows => ' . $this->getAffectedRows() . '
          '; - } - $modx->queryCode .= 'Functions Path => ' . $debug_path . '
          '; - $modx->queryCode .= "

          "; - } - $modx->executedQueries = $modx->executedQueries + 1; - - return $result; - } - } - - /** - * @name: delete - * - */ - public function delete($from, $where = '', $orderby = '', $limit = '') - { - global $modx; - if (!$from) { - $modx->messageQuit("Empty \$from parameters in DBAPI::delete()."); - } else { - $from = $this->replaceFullTableName($from); - $where = trim($where); - $orderby = trim($orderby); - $limit = trim($limit); - if ($where !== '' && stripos($where, 'WHERE') !== 0) { - $where = "WHERE {$where}"; - } - if ($orderby !== '' && stripos($orderby, 'ORDER BY') !== 0) { - $orderby = "ORDER BY {$orderby}"; - } - if ($limit !== '' && stripos($limit, 'LIMIT') !== 0) { - $limit = "LIMIT {$limit}"; - } - - return $this->query("DELETE FROM {$from} {$where} {$orderby} {$limit}"); - } - } - - /** - * @name: select - * - */ - public function select($fields = "*", $from = "", $where = "", $orderby = "", $limit = "") - { - global $modx; - - if (is_array($fields)) { - $fields = $this->_getFieldsStringFromArray($fields); - } - if (is_array($from)) { - $from = $this->_getFromStringFromArray($from); - } - if (is_array($where)) { - $where = implode(' ', $where); - } - - if (!$from) { - $modx->messageQuit("Empty \$from parameters in DBAPI::select()."); - exit; - } - - $fields = $this->replaceFullTableName($fields); - $from = $this->replaceFullTableName($from); - $where = trim($where); - $orderby = trim($orderby); - $limit = trim($limit); - if ($where !== '' && stripos($where, 'WHERE') !== 0) { - $where = "WHERE {$where}"; - } - if ($orderby !== '' && stripos($orderby, 'ORDER') !== 0) { - $orderby = "ORDER BY {$orderby}"; - } - if ($limit !== '' && stripos($limit, 'LIMIT') !== 0) { - $limit = "LIMIT {$limit}"; - } - - return $this->query("SELECT {$fields} FROM {$from} {$where} {$orderby} {$limit}"); - } - - /** - * @name: update - * - */ - public function update($fields, $table, $where = "") - { - global $modx; - if (!$table) { - $modx->messageQuit("Empty \$table parameter in DBAPI::update()."); - } else { - $table = $this->replaceFullTableName($table); - if (is_array($fields)) { - foreach ($fields as $key => $value) { - if (is_null($value) || strtolower($value) === 'null') { - $flds = 'NULL'; - } else { - $flds = "'" . $value . "'"; - } - $fields[$key] = "`{$key}` = " . $flds; - } - $fields = implode(",", $fields); - } - $where = trim($where); - if ($where !== '' && stripos($where, 'WHERE') !== 0) { - $where = "WHERE {$where}"; - } - - return $this->query("UPDATE {$table} SET {$fields} {$where}"); - } - } - - /** - * @name: insert - * @desc: returns either last id inserted or the result from the query - */ - public function insert($fields, $intotable, $fromfields = "*", $fromtable = "", $where = "", $limit = "") - { - global $modx; - if (!$intotable) { - $modx->messageQuit("Empty \$intotable parameters in DBAPI::insert()."); - } else { - $intotable = $this->replaceFullTableName($intotable); - if (!is_array($fields)) { - $this->query("INSERT INTO {$intotable} {$fields}"); - } else { - if (empty($fromtable)) { - $fields = "(`" . implode("`, `", array_keys($fields)) . "`) VALUES('" . implode("', '", - array_values($fields)) . "')"; - $rt = $this->query("INSERT INTO {$intotable} {$fields}"); - } else { - if (version_compare($this->getVersion(), "4.0.14") >= 0) { - $fromtable = $this->replaceFullTableName($fromtable); - $fields = "(" . implode(",", array_keys($fields)) . ")"; - $where = trim($where); - $limit = trim($limit); - if ($where !== '' && stripos($where, 'WHERE') !== 0) { - $where = "WHERE {$where}"; - } - if ($limit !== '' && stripos($limit, 'LIMIT') !== 0) { - $limit = "LIMIT {$limit}"; - } - $rt = $this->query("INSERT INTO {$intotable} {$fields} SELECT {$fromfields} FROM {$fromtable} {$where} {$limit}"); - } else { - $ds = $this->select($fromfields, $fromtable, $where, '', $limit); - while ($row = $this->getRow($ds)) { - $fields = "(" . implode(",", array_keys($fields)) . ") VALUES('" . implode("', '", - $row) . "')"; - $rt = $this->query("INSERT INTO {$intotable} {$fields}"); - } - } - } - } - if (($lid = $this->getInsertId()) === false) { - $modx->messageQuit("Couldn't get last insert key!"); - } - - return $lid; - } - } - - public function save($fields, $table, $where = '') - { - - if ($where === '') { - $mode = 'insert'; - } elseif ($this->getRecordCount($this->select('*', $table, $where)) == 0) { - $mode = 'insert'; - } else { - $mode = 'update'; - } - - if ($mode === 'insert') { - return $this->insert($fields, $table); - } else { - return $this->update($fields, $table, $where); - } - } - - /** - * @name: isResult - * - */ - public function isResult($rs) - { - return is_resource($rs); - } - - /** - * @name: freeResult - * - */ - public function freeResult($rs) - { - mysql_free_result($rs); - } - - /** - * @name: numFields - * - */ - public function numFields($rs) - { - return mysql_num_fields($rs); - } - - /** - * @name: fieldName - * - */ - public function fieldName($rs, $col = 0) - { - return mysql_field_name($rs, $col); - } - - /** - * @name: selectDb - * - */ - public function selectDb($name) - { - mysql_select_db($name); - } - - - /** - * @name: getInsertId - * - */ - public function getInsertId($conn = null) - { - if (!is_resource($conn)) { - $conn =& $this->conn; - } - - return mysql_insert_id($conn); - } - - /** - * @name: getAffectedRows - * - */ - public function getAffectedRows($conn = null) - { - if (!is_resource($conn)) { - $conn =& $this->conn; - } - - return mysql_affected_rows($conn); - } - - /** - * @name: getLastError - * - */ - public function getLastError($conn = null) - { - if (!is_resource($conn)) { - $conn =& $this->conn; - } - - return mysql_error($conn); - } - - /** - * @name: getRecordCount - * - */ - public function getRecordCount($ds) - { - return (is_resource($ds)) ? mysql_num_rows($ds) : 0; - } - - /** - * @name: getRow - * @desc: returns an array of column values - * @param: $dsq - dataset - * - */ - public function getRow($ds, $mode = 'assoc') - { - if (is_resource($ds)) { - if ($mode == 'assoc') { - return mysql_fetch_assoc($ds); - } elseif ($mode == 'num') { - return mysql_fetch_row($ds); - } elseif ($mode == 'object') { - return mysql_fetch_object($ds); - } elseif ($mode == 'both') { - return mysql_fetch_array($ds, MYSQL_BOTH); - } else { - global $modx; - $modx->messageQuit("Unknown get type ($mode) specified for fetchRow - must be empty, 'assoc', 'num' or 'both'."); - } - } - } - - /** - * @name: getColumn - * @desc: returns an array of the values found on colun $name - * @param: $dsq - dataset or query string - */ - public function getColumn($name, $dsq) - { - if (!is_resource($dsq)) { - $dsq = $this->query($dsq); - } - if ($dsq) { - $col = array(); - while ($row = $this->getRow($dsq)) { - $col[] = $row[$name]; - } - - return $col; - } - } - - /** - * @name: getColumnNames - * @desc: returns an array containing the column $name - * @param: $dsq - dataset or query string - */ - public function getColumnNames($dsq) - { - if (!is_resource($dsq)) { - $dsq = $this->query($dsq); - } - if ($dsq) { - $names = array(); - $limit = mysql_num_fields($dsq); - for ($i = 0; $i < $limit; $i++) { - $names[] = mysql_field_name($dsq, $i); - } - - return $names; - } - } - - /** - * @name: getValue - * @desc: returns the value from the first column in the set - * @param: $dsq - dataset or query string - */ - public function getValue($dsq) - { - if (!is_resource($dsq)) { - $dsq = $this->query($dsq); - } - if ($dsq) { - $r = $this->getRow($dsq, "num"); - - return $r[0]; - } - } - - /** - * @name: getTableMetaData - * @desc: returns an array of MySQL structure detail for each column of a - * table - * @param: $table: the full name of the database table - */ - public function getTableMetaData($table) - { - $metadata = false; - if (!empty ($table)) { - $sql = "SHOW FIELDS FROM $table"; - if ($ds = $this->query($sql)) { - while ($row = $this->getRow($ds)) { - $fieldName = $row['Field']; - $metadata[$fieldName] = $row; - } - } - } - - return $metadata; - } - - /** - * @name: prepareDate - * @desc: prepares a date in the proper format for specific database types - * given a UNIX timestamp - * @param: $timestamp: a UNIX timestamp - * @param: $fieldType: the type of field to format the date for - * (in MySQL, you have DATE, TIME, YEAR, and DATETIME) - */ - public function prepareDate($timestamp, $fieldType = 'DATETIME') - { - $date = ''; - if (!$timestamp === false && $timestamp > 0) { - switch ($fieldType) { - case 'DATE' : - $date = date('Y-m-d', $timestamp); - break; - case 'TIME' : - $date = date('H:i:s', $timestamp); - break; - case 'YEAR' : - $date = date('Y', $timestamp); - break; - default : - $date = date('Y-m-d H:i:s', $timestamp); - break; - } - } - - return $date; - } - - /** - * @name: makeArray - * @desc: turns a recordset into a multidimensional array - * @return: an array of row arrays from recordset, or empty array - * if the recordset was empty, returns false if no recordset - * was passed - * @param: $rs Recordset to be packaged into an array - */ - public function makeArray($rs = '', $index = false) - { - if (!$rs) { - return false; - } - $rsArray = array(); - $iterator = 0; - while ($row = $this->getRow($rs)) { - $returnIndex = $index !== false && isset($row[$index]) ? $row[$index] : $iterator; - $rsArray[$returnIndex] = $row; - $iterator++; - } - - return $rsArray; - } - - /** - * @name getVersion - * @desc returns a string containing the database server version - * - * @return string - */ - public function getVersion() - { - return mysql_get_server_info(); - } - - /** - * @name replaceFullTableName - * @desc Get full table name. Append table name and table prefix. - * - * @param string $str - * @return string - */ - public function replaceFullTableName($str, $force = null) - { - - $str = trim($str); - $dbase = trim($this->config['dbase'], '`'); - $prefix = $this->config['table_prefix']; - if (!empty($force)) { - $result = "`{$dbase}`.`{$prefix}{$str}`"; - } elseif (strpos($str, '[+prefix+]') !== false) { - $result = preg_replace('@\[\+prefix\+\]([0-9a-zA-Z_]+)@', "`{$dbase}`.`{$prefix}$1`", $str); - } else { - $result = $str; - } - - return $result; - } - - public function optimize($table_name) - { - $rs = $this->query("OPTIMIZE TABLE {$table_name}"); - if ($rs) { - $rs = $this->query("ALTER TABLE {$table_name}"); - } - - return $rs; - } - - public function truncate($table_name) - { - $rs = $this->query("TRUNCATE {$table_name}"); - - return $rs; - } - - public function dataSeek($result, $row_number) - { - return mysql_data_seek($result, $row_number); - } - - public function _getFieldsStringFromArray($fields = array()) - { - - if (empty($fields)) { - return '*'; - } - - $_ = array(); - foreach ($fields as $k => $v) { - if ($k !== $v) { - $_[] = "{$v} as {$k}"; - } else { - $_[] = $v; - } - } - - return implode(',', $_); - } - - public function _getFromStringFromArray($tables = array()) - { - $_ = array(); - foreach ($tables as $k => $v) { - $_[] = $v; - } - - return implode(' ', $_); - } -} - diff --git a/manager/includes/extenders/dbapi.mysqli.class.inc.php b/manager/includes/extenders/dbapi.mysqli.class.inc.php old mode 100755 new mode 100644 index 9fb4af35..400f12b6 --- a/manager/includes/extenders/dbapi.mysqli.class.inc.php +++ b/manager/includes/extenders/dbapi.mysqli.class.inc.php @@ -49,7 +49,7 @@ public function __construct( */ public function connect($host = '', $dbase = '', $uid = '', $pwd = '') { - global $modx; + $modx = evolutionCMS(); $uid = $uid ? $uid : $this->config['user']; $pwd = $pwd ? $pwd : $this->config['pass']; $host = $host ? $host : $this->config['host']; @@ -60,7 +60,8 @@ public function connect($host = '', $dbase = '', $uid = '', $pwd = '') $tstart = $modx->getMicroTime(); $safe_count = 0; do { - $this->conn = new mysqli($host, $uid, $pwd, $dbase); + $host = explode(':', $host, 2); + $this->conn = new mysqli($host[0], $uid, $pwd, $dbase, isset($host[1]) ? $host[1] : null); if ($this->conn->connect_error) { $this->conn = null; if (isset($modx->config['send_errormail']) && $modx->config['send_errormail'] !== '0') { @@ -144,7 +145,7 @@ public function escape($s, $safeCount = 0) */ public function query($sql, $watchError = true) { - global $modx; + $modx = evolutionCMS(); if ( ! ($this->conn instanceof mysqli)) { $this->connect(); } @@ -215,7 +216,7 @@ public function query($sql, $watchError = true) */ public function delete($from, $where = '', $orderBy = '', $limit = '') { - global $modx; + $modx = evolutionCMS(); $out = false; if (!$from) { $modx->messageQuit("Empty \$from parameters in DBAPI::delete()."); @@ -249,7 +250,7 @@ public function delete($from, $where = '', $orderBy = '', $limit = '') */ public function select($fields = "*", $from = "", $where = "", $orderBy = "", $limit = "") { - global $modx; + $modx = evolutionCMS(); if (is_array($fields)) { $fields = $this->_getFieldsStringFromArray($fields); @@ -292,7 +293,7 @@ public function select($fields = "*", $from = "", $where = "", $orderBy = "", $l */ public function update($fields, $table, $where = "") { - global $modx; + $modx = evolutionCMS(); $out = false; if (!$table) { $modx->messageQuit('Empty '.$table.' parameter in DBAPI::update().'); @@ -330,7 +331,7 @@ public function update($fields, $table, $where = "") */ public function insert($fields, $intotable, $fromfields = "*", $fromtable = "", $where = "", $limit = "") { - global $modx; + $modx = evolutionCMS(); $out = false; if (!$intotable) { $modx->messageQuit("Empty \$intotable parameters in DBAPI::insert()."); @@ -504,7 +505,7 @@ public function getRow($ds, $mode = 'assoc') $out = $ds->fetch_array(MYSQLI_BOTH); break; default: - global $modx; + $modx = evolutionCMS(); $modx->messageQuit("Unknown get type ($mode) specified for fetchRow - must be empty, 'assoc', 'num' or 'both'."); } @@ -564,7 +565,7 @@ public function getValue($dsq) } if ($dsq) { $r = $this->getRow($dsq, 'num'); - $out = isset($r[0]) ? $r[0] : false; + $out = is_array($r) && array_key_exists(0, $r) ? $r[0] : false; } return $out; diff --git a/manager/includes/extenders/deprecated.functions.inc.php b/manager/includes/extenders/deprecated.functions.inc.php index fddcdef1..42b91290 100755 --- a/manager/includes/extenders/deprecated.functions.inc.php +++ b/manager/includes/extenders/deprecated.functions.inc.php @@ -10,7 +10,7 @@ class OldFunctions */ public function dbConnect() { - global $modx; + $modx = evolutionCMS(); $modx->db->connect(); $modx->rs = $modx->db->conn; } @@ -23,7 +23,7 @@ public function dbConnect() */ public function dbQuery($sql) { - global $modx; + $modx = evolutionCMS(); return $modx->db->query($sql); } @@ -36,7 +36,7 @@ public function dbQuery($sql) */ public function recordCount($rs) { - global $modx; + $modx = evolutionCMS(); return $modx->db->getRecordCount($rs); } @@ -50,7 +50,7 @@ public function recordCount($rs) */ public function fetchRow($rs, $mode = 'assoc') { - global $modx; + $modx = evolutionCMS(); return $modx->db->getRow($rs, $mode); } @@ -63,7 +63,7 @@ public function fetchRow($rs, $mode = 'assoc') */ public function affectedRows($rs) { - global $modx; + $modx = evolutionCMS(); return $modx->db->getAffectedRows($rs); } @@ -76,7 +76,7 @@ public function affectedRows($rs) */ public function insertId($rs) { - global $modx; + $modx = evolutionCMS(); return $modx->db->getInsertId($rs); } @@ -88,7 +88,7 @@ public function insertId($rs) */ public function dbClose() { - global $modx; + $modx = evolutionCMS(); $modx->db->disconnect(); } @@ -178,7 +178,7 @@ public function insideManager() */ public function putChunk($chunkName) { // alias name >.< - global $modx; + $modx = evolutionCMS(); return $modx->getChunk($chunkName); } @@ -190,7 +190,7 @@ public function putChunk($chunkName) */ public function getDocGroups() { - global $modx; + $modx = evolutionCMS(); return $modx->getUserDocGroups(); } @@ -204,7 +204,7 @@ public function getDocGroups() */ public function changePassword($o, $n) { - global $modx; + $modx = evolutionCMS(); return $modx->changeWebUserPassword($o, $n); } @@ -216,7 +216,7 @@ public function changePassword($o, $n) */ public function userLoggedIn() { - global $modx; + $modx = evolutionCMS(); $userdetails = array(); if ($modx->isFrontend() && isset ($_SESSION['webValidated'])) { // web user @@ -253,7 +253,7 @@ public function userLoggedIn() public function getFormVars($method = "", $prefix = "", $trim = "", $REQUEST_METHOD) { // function to retrieve form results into an associative array - global $modx; + $modx = evolutionCMS(); $results = array(); $method = strtoupper($method); if ($method == "") { @@ -294,7 +294,7 @@ public function getFormVars($method = "", $prefix = "", $trim = "", $REQUEST_MET */ public function webAlert($msg, $url = "") { - global $modx; + $modx = evolutionCMS(); $msg = addslashes($modx->db->escape($msg)); if (substr(strtolower($url), 0, 11) == "javascript:") { $act = "__WebAlert();"; diff --git a/manager/includes/extenders/ex_dbapi.inc.php b/manager/includes/extenders/ex_dbapi.inc.php index 949109de..06b09468 100755 --- a/manager/includes/extenders/ex_dbapi.inc.php +++ b/manager/includes/extenders/ex_dbapi.inc.php @@ -7,7 +7,7 @@ global $database_type; -if (empty($database_type)) $database_type = 'mysql'; +if (empty($database_type)) $database_type = 'mysqli'; $out = false; $class = 'DBAPI'; diff --git a/manager/includes/extenders/export.class.inc.php b/manager/includes/extenders/export.class.inc.php index 96458613..42e7b988 100755 --- a/manager/includes/extenders/export.class.inc.php +++ b/manager/includes/extenders/export.class.inc.php @@ -48,7 +48,7 @@ class EXPORT_SITE */ public function __construct() { - global $modx; + $modx = evolutionCMS(); if (!defined('MODX_BASE_PATH')) { return false; @@ -90,7 +90,7 @@ public function get_mtime() */ public function setUrlMode() { - global $modx; + $modx = evolutionCMS(); if ($modx->config['friendly_urls'] == 0) { $modx->config['friendly_urls'] = 1; @@ -107,7 +107,7 @@ public function setUrlMode() */ public function getTotal($ignore_ids = '', $noncache = '0') { - global $modx; + $modx = evolutionCMS(); $tbl_site_content = $modx->getFullTableName('site_content'); $ignore_ids = array_filter(array_map('intval', explode(',', $ignore_ids))); @@ -172,7 +172,7 @@ public function removeDirectoryAll($directory = '') */ public function makeFile($docid, $filepath) { - global $modx, $_lang; + $modx = evolutionCMS(); global $_lang; $file_permission = octdec($modx->config['new_file_permissions']); if ($this->generate_mode === 'direct') { $back_lang = $_lang; @@ -212,7 +212,7 @@ public function makeFile($docid, $filepath) */ public function getFileName($docid, $alias = '', $prefix, $suffix) { - global $modx; + $modx = evolutionCMS(); if ($alias === '') { $filename = $prefix . $docid . $suffix; @@ -233,7 +233,7 @@ public function getFileName($docid, $alias = '', $prefix, $suffix) public function run($parent = 0) { global $_lang; - global $modx; + $modx = evolutionCMS(); $tbl_site_content = $modx->getFullTableName('site_content'); diff --git a/manager/includes/extenders/maketable.class.php b/manager/includes/extenders/maketable.class.php index da273c02..ccd71619 100755 --- a/manager/includes/extenders/maketable.class.php +++ b/manager/includes/extenders/maketable.class.php @@ -555,7 +555,7 @@ public function createPagingNavigation($numRecords, $qs = '') */ public function createPageLink($link = '', $pageNum, $displayText, $currentPage = false, $qs = '') { - global $modx; + $modx = evolutionCMS(); $orderBy = !empty($_GET['orderby']) ? '&orderby=' . $_GET['orderby'] : ''; $orderDir = !empty($_GET['orderdir']) ? '&orderdir=' . $_GET['orderdir'] : ''; if (!empty($qs)) { @@ -630,7 +630,7 @@ public function handleSorting($natural_order = false) */ public function prepareOrderByLink($key, $text, $qs = '') { - global $modx; + $modx = evolutionCMS(); if (!empty($_GET['orderdir'])) { $orderDir = strtolower($_GET['orderdir']) == 'desc' ? '&orderdir=asc' : '&orderdir=desc'; } else { diff --git a/manager/includes/extenders/manager.api.class.inc.php b/manager/includes/extenders/manager.api.class.inc.php index 4d2efe2e..b1643f16 100755 --- a/manager/includes/extenders/manager.api.class.inc.php +++ b/manager/includes/extenders/manager.api.class.inc.php @@ -136,7 +136,7 @@ public function getHashType($db_value = '') */ public function genV1Hash($password, $seed = '1') { // $seed is user_id basically - global $modx; + $modx = evolutionCMS(); if (isset($modx->config['pwd_hash_algo']) && !empty($modx->config['pwd_hash_algo'])) { $algorithm = $modx->config['pwd_hash_algo']; @@ -181,7 +181,7 @@ public function genV1Hash($password, $seed = '1') */ public function getV1UserHashAlgorithm($uid) { - global $modx; + $modx = evolutionCMS(); $tbl_manager_users = $modx->getFullTableName('manager_users'); $uid = $modx->db->escape($uid); $rs = $modx->db->select('password', $tbl_manager_users, "id='{$uid}'"); @@ -292,7 +292,7 @@ public function getModifiedSystemFilesList($check_files, $checksum) */ public function setSystemChecksum($checksum) { - global $modx; + $modx = evolutionCMS(); $tbl_system_settings = $modx->getFullTableName('system_settings'); $sql = "REPLACE INTO {$tbl_system_settings} (setting_name, setting_value) VALUES ('sys_files_checksum','" . $modx->db->escape($checksum) . "')"; $modx->db->query($sql); @@ -303,7 +303,7 @@ public function setSystemChecksum($checksum) */ public function checkSystemChecksum() { - global $modx; + $modx = evolutionCMS(); if (!isset($modx->config['check_files_onlogin']) || empty($modx->config['check_files_onlogin'])) { return '0'; @@ -335,7 +335,7 @@ public function checkSystemChecksum() */ public function getLastUserSetting($key = false) { - global $modx; + $modx = evolutionCMS(); $rs = $modx->db->select('*', $modx->getFullTableName('user_settings'), "user = '{$_SESSION['mgrInternalKey']}'"); @@ -361,7 +361,7 @@ public function getLastUserSetting($key = false) */ public function saveLastUserSetting($settings, $val = '') { - global $modx; + $modx = evolutionCMS(); if (!empty($settings)) { if (!is_array($settings)) { @@ -387,7 +387,7 @@ public function saveLastUserSetting($settings, $val = '') */ public function loadDatePicker($path) { - global $modx; + $modx = evolutionCMS(); include_once($path); $dp = new DATEPICKER(); diff --git a/manager/includes/extenders/modifiers.class.inc.php b/manager/includes/extenders/modifiers.class.inc.php index e15250e6..da6e862e 100755 --- a/manager/includes/extenders/modifiers.class.inc.php +++ b/manager/includes/extenders/modifiers.class.inc.php @@ -59,8 +59,7 @@ class MODIFIERS { */ public function __construct() { - global $modx; - + $modx = evolutionCMS(); if (function_exists('mb_internal_encoding')) mb_internal_encoding($modx->config['modx_charset']); $this->condModifiers = '=,is,eq,equals,ne,neq,notequals,isnot,isnt,not,%,isempty,isnotempty,isntempty,>=,gte,eg,gte,greaterthan,>,gt,isgreaterthan,isgt,lowerthan,<,lt,<=,lte,islte,islowerthan,islt,el,find,in,inarray,in_array,fnmatch,wcard,wcard_match,wildcard,wildcard_match,is_file,is_dir,file_exists,is_readable,is_writable,is_image,regex,preg,preg_match,memberof,mo,isinrole,ir'; } @@ -73,7 +72,7 @@ public function __construct() */ public function phxFilter($key,$value,$modifiers) { - global $modx; + $modx = evolutionCMS(); if(substr($modifiers,0,3)!=='id(') $value = $this->parseDocumentSource($value); $this->srcValue = $value; $modifiers = trim($modifiers); @@ -160,7 +159,7 @@ public function _fetchContent($string,$delim) { } public function splitEachModifiers($modifiers) { - global $modx; + $modx = evolutionCMS(); $cmd = ''; $bt = ''; @@ -230,7 +229,7 @@ public function splitEachModifiers($modifiers) { public function parsePhx($key,$value,$modifiers) { - global $modx; + $modx = evolutionCMS(); $lastKey = ''; $cacheKey = md5(sprintf('parsePhx#%s#%s#%s',$key,$value,print_r($modifiers,true))); if(isset($this->tmpCache[$cacheKey])) return $this->tmpCache[$cacheKey]; @@ -258,7 +257,7 @@ public function parsePhx($key,$value,$modifiers) // Parser: modifier detection and eXtended processing if needed public function Filter($key, $value, $cmd, $opt='') { - global $modx; + $modx = evolutionCMS(); if($key==='documentObject') $value = $modx->documentIdentifier; $cmd = $this->parseDocumentSource($cmd); @@ -296,7 +295,7 @@ public function isEmpty($cmd,$value) public function getValueFromPreset($key, $value, $cmd, $opt) { - global $modx; + $modx = evolutionCMS(); if($this->isEmpty($cmd,$value)) return ''; @@ -980,7 +979,7 @@ public function getValueFromPreset($key, $value, $cmd, $opt) } public function includeMdfFile($cmd) { - global $modx; + $modx = evolutionCMS(); $key = $this->key; $value = $this->value; $opt = $this->opt; @@ -989,7 +988,7 @@ public function includeMdfFile($cmd) { public function getValueFromElement($key, $value, $cmd, $opt) { - global $modx; + $modx = evolutionCMS(); if( isset($modx->snippetCache[$this->elmName]) ) { $php = $modx->snippetCache[$this->elmName]; @@ -1070,7 +1069,7 @@ public function getValueFromElement($key, $value, $cmd, $opt) public function parseDocumentSource($content='') { - global $modx; + $modx = evolutionCMS(); if(strpos($content,'[')===false && strpos($content,'{')===false) return $content; @@ -1096,7 +1095,7 @@ public function parseDocumentSource($content='') public function getDocumentObject($target='',$field='pagetitle') { - global $modx; + $modx = evolutionCMS(); $target = trim($target); if(empty($target)) $target = $modx->config['site_start']; @@ -1140,7 +1139,7 @@ public function setModifiersVariable($key, $value) { //mbstring public function substr($str, $s, $l = null) { - global $modx; + $modx = evolutionCMS(); if(is_null($l)) $l = $this->strlen($str); if (function_exists('mb_substr')) { @@ -1151,12 +1150,12 @@ public function substr($str, $s, $l = null) { return substr($str, $s, $l); } public function strpos($haystack,$needle,$offset=0) { - global $modx; + $modx = evolutionCMS(); if (function_exists('mb_strpos')) return mb_strpos($haystack,$needle,$offset,$modx->config['modx_charset']); return strpos($haystack,$needle,$offset); } public function strlen($str) { - global $modx; + $modx = evolutionCMS(); if (function_exists('mb_strlen')) return mb_strlen(str_replace("\r\n", "\n", $str),$modx->config['modx_charset']); return strlen($str); } @@ -1196,7 +1195,7 @@ public function str_word_count($str) { return count(preg_split('~[^\p{L}\p{N}\']+~u',$str)); } public function strip_tags($value,$params='') { - global $modx; + $modx = evolutionCMS(); if(stripos($params,'style')===false && stripos($value,'')!==false) { $value = preg_replace('@.*?@is', '', $value); diff --git a/manager/includes/extenders/modxmailer.class.inc.php b/manager/includes/extenders/modxmailer.class.inc.php index c5baef0e..ba6b8b06 100755 --- a/manager/includes/extenders/modxmailer.class.inc.php +++ b/manager/includes/extenders/modxmailer.class.inc.php @@ -270,9 +270,10 @@ public function mbMailSend($header, $body) */ public function SetError($msg) { - $msg .= '
          ' . print_r(call_user_func('get_object_vars', $this), true) . '
          '; + $classDump = call_user_func('get_object_vars', $this); + unset($classDump['modx']); $this->modx->config['send_errormail'] = '0'; - $this->modx->logEvent(0, 3, $msg, 'phpmailer'); + $this->modx->logEvent(0, 3, $msg . '
          ' . print_r($classDump, true) . '
          ', 'phpmailer'); return parent::SetError($msg); } diff --git a/manager/includes/extenders/phpcompat.class.inc.php b/manager/includes/extenders/phpcompat.class.inc.php index 55bbc8a2..7b9c7bf5 100755 --- a/manager/includes/extenders/phpcompat.class.inc.php +++ b/manager/includes/extenders/phpcompat.class.inc.php @@ -13,7 +13,7 @@ class PHPCOMPAT */ public function htmlspecialchars($str = '', $flags = ENT_COMPAT, $encode = '') { - global $modx; + $modx = evolutionCMS(); if ($str == '') { return ''; diff --git a/manager/includes/footer.inc.php b/manager/includes/footer.inc.php index 401c0760..74c52ff4 100755 --- a/manager/includes/footer.inc.php +++ b/manager/includes/footer.inc.php @@ -1,35 +1,35 @@ INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); +if (!defined('IN_MANAGER_MODE') || IN_MANAGER_MODE !== true) { + die("INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); } global $SystemAlertMsgQueque; // display system alert window if messages are available -if(count($SystemAlertMsgQueque) > 0) { - include "sysalert.display.inc.php"; +if (!empty($SystemAlertMsgQueque)) { + include MODX_MANAGER_PATH . 'includes/sysalert.display.inc.php'; } ?> manager->action, array( - 85, - 27, - 4, - 72, - 13, - 11, - 12, - 87, - 88 +if (in_array($modx->manager->action, array( + 85, + 27, + 4, + 72, + 13, + 11, + 12, + 87, + 88 ))) { - echo $modx->manager->loadDatePicker($modx->config['mgr_date_picker_path']); + echo $modx->manager->loadDatePicker($modx->config['mgr_date_picker_path']); } ?> diff --git a/manager/includes/functions/actions/files.php b/manager/includes/functions/actions/files.php new file mode 100644 index 00000000..bc6a53b3 --- /dev/null +++ b/manager/includes/functions/actions/files.php @@ -0,0 +1,574 @@ + 'fa fa-file-o', + 'edit' => 'fa fa-pencil-square-o', + 'view' => 'fa fa-eye' + ); + $icon = $icons['default']; + if ($file == $selFile) { + $icon = isset($icons[$mode]) ? $icons[$mode] : $icons['default']; + } + + return ''; + } +} + +if(!function_exists('markRow')) { + /** + * @param string $file + * @param string $selFile + * @param string $mode + * @return string + */ + function markRow($file, $selFile, $mode) + { + $classNames = array( + 'default' => '', + 'edit' => 'editRow', + 'view' => 'viewRow' + ); + if ($file == $selFile) { + $class = isset($classNames[$mode]) ? $classNames[$mode] : $classNames['default']; + + return ' class="' . $class . '"'; + } + + return ''; + } +} + +if(!function_exists('ls')) { + /** + * @param string $curpath + */ + function ls($curpath) + { + global $_lang, $theme_image_path, $_style; + global $excludes, $protected_path, $editablefiles, $inlineviewablefiles, $viewablefiles, $enablefileunzip, $enablefiledownload, $uploadablefiles, $folders, $files, $filesizes, $len, $dirs_array, $files_array, $webstart_path, $modx; + $dircounter = 0; + $filecounter = 0; + $curpath = str_replace('//', '/', $curpath . '/'); + + if (!is_dir($curpath)) { + echo 'Invalid path "', $curpath, '"
          '; + + return; + } + $dir = scandir($curpath); + + // first, get info + foreach ($dir as $file) { + $newpath = $curpath . $file; + if ($file === '..' || $file === '.') { + continue; + } + if (is_dir($newpath)) { + $dirs_array[$dircounter]['dir'] = $newpath; + $dirs_array[$dircounter]['stats'] = lstat($newpath); + if ($file === '..' || $file === '.') { + continue; + } elseif (!in_array($file, $excludes) && !in_array($newpath, $protected_path)) { + $dirs_array[$dircounter]['text'] = ' ' . $file . ''; + + $dfiles = scandir($newpath); + foreach ($dfiles as $i => $infile) { + switch ($infile) { + case '..': + case '.': + unset($dfiles[$i]); + break; + } + } + $file_exists = (0 < count($dfiles)) ? 'file_exists' : ''; + + $dirs_array[$dircounter]['delete'] = is_writable($curpath) ? '' : ''; + } else { + $dirs_array[$dircounter]['text'] = ' ' . $file . ''; + $dirs_array[$dircounter]['delete'] = is_writable($curpath) ? '' : ''; + } + + $dirs_array[$dircounter]['rename'] = is_writable($curpath) ? ' ' : ''; + + // increment the counter + $dircounter++; + } else { + $type = getExtension($newpath); + $files_array[$filecounter]['file'] = $newpath; + $files_array[$filecounter]['stats'] = lstat($newpath); + $files_array[$filecounter]['text'] = determineIcon($newpath, $_REQUEST['path'], + $_REQUEST['mode']) . ' ' . $file; + $files_array[$filecounter]['view'] = (in_array($type, + $viewablefiles)) ? '' : (($enablefiledownload && in_array($type, + $uploadablefiles)) ? '' : ''); + $files_array[$filecounter]['view'] = (in_array($type, + $inlineviewablefiles)) ? '' : $files_array[$filecounter]['view']; + $files_array[$filecounter]['unzip'] = ($enablefileunzip && $type == '.zip') ? '' : ''; + $files_array[$filecounter]['edit'] = (in_array($type, + $editablefiles) && is_writable($curpath) && is_writable($newpath)) ? '' : ''; + $files_array[$filecounter]['duplicate'] = (in_array($type, + $editablefiles) && is_writable($curpath) && is_writable($newpath)) ? '' : ''; + $files_array[$filecounter]['rename'] = (in_array($type, + $editablefiles) && is_writable($curpath) && is_writable($newpath)) ? '' : ''; + $files_array[$filecounter]['delete'] = is_writable($curpath) && is_writable($newpath) ? '' : ''; + + // increment the counter + $filecounter++; + } + } + + // dump array entries for directories + $folders = count($dirs_array); + sort($dirs_array); // sorting the array alphabetically (Thanks pxl8r!) + for ($i = 0; $i < $folders; $i++) { + $filesizes += $dirs_array[$i]['stats']['7']; + echo ''; + echo '' . $dirs_array[$i]['text'] . ''; + echo '' . $modx->toDateFormat($dirs_array[$i]['stats']['9']) . ''; + echo '' . $modx->nicesize($dirs_array[$i]['stats']['7']) . ''; + echo ''; + echo $dirs_array[$i]['rename']; + echo $dirs_array[$i]['delete']; + echo ''; + echo ''; + } + + // dump array entries for files + $files = count($files_array); + sort($files_array); // sorting the array alphabetically (Thanks pxl8r!) + for ($i = 0; $i < $files; $i++) { + $filesizes += $files_array[$i]['stats']['7']; + echo ''; + echo '' . $files_array[$i]['text'] . ''; + echo '' . $modx->toDateFormat($files_array[$i]['stats']['9']) . ''; + echo '' . $modx->nicesize($files_array[$i]['stats']['7']) . ''; + echo ''; + echo $files_array[$i]['unzip']; + echo $files_array[$i]['view']; + echo $files_array[$i]['edit']; + echo $files_array[$i]['duplicate']; + echo $files_array[$i]['rename']; + echo $files_array[$i]['delete']; + echo ''; + echo ''; + } + + return; + } +} + +if(!function_exists('removeLastPath')) { + /** + * @param string $string + * @return bool|string + */ + function removeLastPath($string) + { + $pos = strrpos($string, '/'); + if ($pos !== false) { + $path = substr($string, 0, $pos); + } else { + $path = false; + } + + return $path; + } +} + +if(!function_exists('getExtension')) { + /** + * @param string $string + * @return bool|string + * + * @TODO: not work if $string contains folder name with dot + */ + function getExtension($string) + { + $pos = strrpos($string, '.'); + if ($pos !== false) { + $ext = substr($string, $pos); + $ext = strtolower($ext); + } else { + $ext = false; + } + + return $ext; + } +} + +if(!function_exists('checkExtension')) { + /** + * @param string $path + * @return bool + */ + function checkExtension($path = '') + { + global $uploadablefiles; + + if (in_array(getExtension($path), $uploadablefiles)) { + return true; + } else { + return false; + } + } +} + +if(!function_exists('mkdirs')) { + /** + * recursive mkdir function + * + * @param string $strPath + * @param int $mode + * @return bool + */ + function mkdirs($strPath, $mode) + { + if (is_dir($strPath)) { + return true; + } + $pStrPath = dirname($strPath); + if (!mkdirs($pStrPath, $mode)) { + return false; + } + + return @mkdir($strPath); + } +} + +if(!function_exists('logFileChange')) { + /** + * @param string $type + * @param string $filename + */ + function logFileChange($type, $filename) + { + //global $_lang; + + $log = new EvolutionCMS\Legacy\LogHandler(); + + switch ($type) { + case 'upload': + $string = 'Uploaded File'; + break; + case 'delete': + $string = 'Deleted File'; + break; + case 'modify': + $string = 'Modified File'; + break; + default: + $string = 'Viewing File'; + break; + } + + $string = sprintf($string, $filename); + $log->initAndWriteLog($string, '', '', '', $type, $filename); + + // HACK: change the global action to prevent double logging + // @see index.php @ 915 + global $action; + $action = 1; + } +} + +if(!function_exists('unzip')) { + /** + * by patrick_allaert - php user notes + * + * @param string $file + * @param string $path + * @return bool|int + */ + function unzip($file, $path) + { + global $newfolderaccessmode, $token_check; + + if (!$token_check) { + return false; + } + + // added by Raymond + if (!extension_loaded('zip')) { + return 0; + } + // end mod + $zip = zip_open($file); + if ($zip) { + $old_umask = umask(0); + $path = rtrim($path, '/') . '/'; + while ($zip_entry = zip_read($zip)) { + if (zip_entry_filesize($zip_entry) > 0) { + // str_replace must be used under windows to convert "/" into "\" + $zip_entry_name = zip_entry_name($zip_entry); + $complete_path = $path . str_replace('\\', '/', dirname($zip_entry_name)); + $complete_name = $path . str_replace('\\', '/', $zip_entry_name); + if (!file_exists($complete_path)) { + $tmp = ''; + foreach (explode('/', $complete_path) AS $k) { + $tmp .= $k . '/'; + if (!is_dir($tmp)) { + mkdir($tmp, 0777); + } + } + } + if (zip_entry_open($zip, $zip_entry, 'r')) { + file_put_contents($complete_name, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); + zip_entry_close($zip_entry); + } + } + } + umask($old_umask); + zip_close($zip); + + return true; + } + zip_close($zip); + } +} + +if(!function_exists('rrmdir')) { + /** + * @param string $dir + * @return bool + */ + function rrmdir($dir) + { + foreach (glob($dir . '/*') as $file) { + if (is_dir($file)) { + rrmdir($file); + } else { + unlink($file); + } + } + + return rmdir($dir); + } +} + +if(!function_exists('fileupload')) { + /** + * @return string + */ + function fileupload() + { + $modx = evolutionCMS(); + global $_lang, $startpath, $filemanager_path, $uploadablefiles, $new_file_permissions; + $msg = ''; + foreach ($_FILES['userfile']['name'] as $i => $name) { + if (empty($_FILES['userfile']['tmp_name'][$i])) { + continue; + } + $userfile = array(); + + $userfile['tmp_name'] = $_FILES['userfile']['tmp_name'][$i]; + $userfile['error'] = $_FILES['userfile']['error'][$i]; + $name = $_FILES['userfile']['name'][$i]; + if ($modx->config['clean_uploaded_filename'] == 1) { + $nameparts = explode('.', $name); + $nameparts = array_map(array( + $modx, + 'stripAlias' + ), $nameparts, array('file_manager')); + $name = implode('.', $nameparts); + } + $userfile['name'] = $name; + $userfile['type'] = $_FILES['userfile']['type'][$i]; + + // this seems to be an upload action. + $path = $modx->config['site_url'] . substr($startpath, strlen($filemanager_path), strlen($startpath)); + $path = rtrim($path, '/') . '/' . $userfile['name']; + $msg .= $path; + if ($userfile['error'] == 0) { + $img = (strpos($userfile['type'], + 'image') !== false) ? '
          ' : ''; + $msg .= "

          " . $_lang['files_file_type'] . $userfile['type'] . ", " . $modx->nicesize(filesize($userfile['tmp_name'])) . $img . '

          '; + } + + $userfilename = $userfile['tmp_name']; + + if (is_uploaded_file($userfilename)) { + // file is uploaded file, process it! + if (!checkExtension($userfile['name'])) { + $msg .= '

          ' . $_lang['files_filetype_notok'] . '

          '; + } else { + if (@move_uploaded_file($userfile['tmp_name'], $_POST['path'] . '/' . $userfile['name'])) { + // Ryan: Repair broken permissions issue with file manager + if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') { + @chmod($_POST['path'] . "/" . $userfile['name'], $new_file_permissions); + } + // Ryan: End + $msg .= '

          ' . $_lang['files_upload_ok'] . '


          '; + + // invoke OnFileManagerUpload event + $modx->invokeEvent('OnFileManagerUpload', array( + 'filepath' => $_POST['path'], + 'filename' => $userfile['name'] + )); + // Log the change + logFileChange('upload', $_POST['path'] . '/' . $userfile['name']); + } else { + $msg .= '

          ' . $_lang['files_upload_copyfailed'] . ' ' . $_lang["files_upload_permissions_error"] . '

          '; + } + } + } else { + $msg .= '
          ' . $_lang['files_upload_error'] . ':'; + switch ($userfile['error']) { + case 0: //no error; possible file attack! + $msg .= $_lang['files_upload_error0']; + break; + case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini + $msg .= $_lang['files_upload_error1']; + break; + case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form + $msg .= $_lang['files_upload_error2']; + break; + case 3: //uploaded file was only partially uploaded + $msg .= $_lang['files_upload_error3']; + break; + case 4: //no file was uploaded + $msg .= $_lang['files_upload_error4']; + break; + default: //a default error, just in case! :) + $msg .= $_lang['files_upload_error5']; + break; + } + $msg .= '
          '; + } + } + + return $msg . '
          '; + } +} + +if(!function_exists('textsave')) { + /** + * @return string + */ + function textsave() + { + global $_lang; + + $msg = $_lang['editing_file']; + $filename = $_POST['path']; + $content = $_POST['content']; + + // Write $content to our opened file. + if (file_put_contents($filename, $content) === false) { + $msg .= '' . $_lang['file_not_saved'] . '

          '; + } else { + $msg .= '' . $_lang['file_saved'] . '

          '; + $_REQUEST['mode'] = 'edit'; + } + // Log the change + logFileChange('modify', $filename); + + return $msg; + } +} + +if(!function_exists('delete_file')) { + /** + * @return string + */ + function delete_file() + { + global $_lang, $token_check; + + $msg = sprintf($_lang['deleting_file'], str_replace('\\', '/', $_REQUEST['path'])); + + $file = $_REQUEST['path']; + if (!$token_check || !@unlink($file)) { + $msg .= '' . $_lang['file_not_deleted'] . '

          '; + } else { + $msg .= '' . $_lang['file_deleted'] . '

          '; + } + + // Log the change + logFileChange('delete', $file); + + return $msg; + } +} + +if(!function_exists('parsePlaceholder')) { + /** + * @param string $tpl + * @param array $ph + * @return string + */ + function parsePlaceholder($tpl, $ph) + { + foreach ($ph as $k => $v) { + $k = "[+{$k}+]"; + $tpl = str_replace($k, $v, $tpl); + } + + return $tpl; + } +} + +if(!function_exists('checkToken')) { + /** + * @return bool + */ + function checkToken() + { + if (isset($_POST['token']) && !empty($_POST['token'])) { + $token = $_POST['token']; + } elseif (isset($_GET['token']) && !empty($_GET['token'])) { + $token = $_GET['token']; + } else { + $token = false; + } + + if (isset($_SESSION['token']) && !empty($_SESSION['token']) && $_SESSION['token'] === $token) { + $rs = true; + } else { + $rs = false; + } + $_SESSION['token'] = ''; + + return $rs; + } +} + +if(!function_exists('makeToken')) { + /** + * @return string + */ + function makeToken() + { + $newToken = uniqid(''); + $_SESSION['token'] = $newToken; + + return $newToken; + } +} diff --git a/manager/includes/header.inc.php b/manager/includes/header.inc.php index c94120e0..db332b54 100755 --- a/manager/includes/header.inc.php +++ b/manager/includes/header.inc.php @@ -1,573 +1,134 @@ -INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); -} -$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; - -// invoke OnManagerRegClientStartupHTMLBlock event -$evtOut = $modx->invokeEvent('OnManagerMainFrameHeaderHTMLBlock'); -$modx_textdir = isset($modx_textdir) ? $modx_textdir : null; -$onManagerMainFrameHeaderHTMLBlock = is_array($evtOut) ? implode("\n", $evtOut) : ''; -$textdir = $modx_textdir === 'rtl' ? 'rtl' : 'ltr'; -if (!isset($modx->config['mgr_jquery_path'])) { - $modx->config['mgr_jquery_path'] = 'media/script/jquery/jquery.min.js'; -} -if (!isset($modx->config['mgr_date_picker_path'])) { - $modx->config['mgr_date_picker_path'] = 'media/script/air-datepicker/datepicker.inc.php'; -} - -if (isset($_COOKIE['MODX_themeColor'])) { - $body_class .= ' ' . $_COOKIE['MODX_themeColor']; -} else { - $body_class .= ' dark'; -} - -$css = 'media/style/' . $modx->config['manager_theme'] . '/style.css?v=' . $lastInstallTime; - -if ($modx->config['manager_theme'] == 'default') { - if (!file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css') && is_writable(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css')) { - require_once MODX_BASE_PATH . 'assets/lib/Formatter/CSSMinify.php'; - $minifier = new Formatter\CSSMinify(); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/common/bootstrap/css/bootstrap.min.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/common/font-awesome/css/font-awesome.min.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/fonts.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/forms.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/mainmenu.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tree.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/custom.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tabpane.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/contextmenu.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/index.css'); - $minifier->addFile(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/main.css'); - $css = $minifier->minify(); - file_put_contents(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css', $css); - } - if (file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css')) { - $css = 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css?v=' . $lastInstallTime; - } -} - -?> - - - - Evolution CMS - - - - - - - ' . "\n", $modx->config['mgr_jquery_path']) ?> - config['show_picker'] != "0") { ?> - - - - - - - - - - - - - class="" data-evocp="color"> +INCLUDE_ORDERING_ERROR

          + Please use the EVO Content Manager instead of accessing this file directly."); +} +$mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en'; + +// invoke OnManagerRegClientStartupHTMLBlock event +$evtOut = $modx->invokeEvent('OnManagerMainFrameHeaderHTMLBlock'); +$modx_textdir = isset($modx_textdir) ? $modx_textdir : null; +$onManagerMainFrameHeaderHTMLBlock = is_array($evtOut) ? implode("\n", $evtOut) : ''; +$textdir = $modx_textdir === 'rtl' ? 'rtl' : 'ltr'; +if (!isset($modx->config['mgr_jquery_path'])) { + $modx->config['mgr_jquery_path'] = 'media/script/jquery/jquery.min.js'; +} +if (!isset($modx->config['mgr_date_picker_path'])) { + $modx->config['mgr_date_picker_path'] = 'media/script/air-datepicker/datepicker.inc.php'; +} + +$body_class = ''; +$theme_modes = array('', 'lightness', 'light', 'dark', 'darkness'); +if (!empty($theme_modes[$_COOKIE['MODX_themeMode']])) { + $body_class .= ' ' . $theme_modes[$_COOKIE['MODX_themeMode']]; +} elseif (!empty($theme_modes[$modx->config['manager_theme_mode']])) { + $body_class .= ' ' . $theme_modes[$modx->config['manager_theme_mode']]; +} + +$css = 'media/style/' . $modx->config['manager_theme'] . '/style.css?v=' . $lastInstallTime; + +if ($modx->config['manager_theme'] == 'default') { + if (!file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css') + && is_writable(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css')) { + $files = array( + 'bootstrap' => MODX_MANAGER_PATH . 'media/style/common/bootstrap/css/bootstrap.min.css', + 'font-awesome' => MODX_MANAGER_PATH . 'media/style/common/font-awesome/css/font-awesome.min.css', + 'fonts' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/fonts.css', + 'forms' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/forms.css', + 'mainmenu' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/mainmenu.css', + 'tree' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tree.css', + 'custom' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/custom.css', + 'tabpane' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/tabpane.css', + 'contextmenu' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/contextmenu.css', + 'index' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/index.css', + 'main' => MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/main.css' + ); + $evtOut = $modx->invokeEvent('OnBeforeMinifyCss', array( + 'files' => $files, + 'source' => 'manager', + 'theme' => $modx->config['manager_theme'] + )); + switch (true) { + case empty($evtOut): + case is_array($evtOut) && count($evtOut) === 0: + break; + case is_array($evtOut) && count($evtOut) === 1: + $files = $evtOut[0]; + break; + default: + $modx->webAlertAndQuit(sprintf($_lang['invalid_event_response'], 'OnBeforeMinifyManagerCss')); + } + require_once MODX_BASE_PATH . 'assets/lib/Formatter/CSSMinify.php'; + $minifier = new Formatter\CSSMinify($files); + $css = $minifier->minify(); + file_put_contents( + MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css', + $css + ); + } + if (file_exists(MODX_MANAGER_PATH . 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css')) { + $css = 'media/style/' . $modx->config['manager_theme'] . '/css/styles.min.css?v=' . $lastInstallTime; + } +} + +?> + + + + Evolution CMS + + + + + + + ' . "\n", $modx->config['mgr_jquery_path']) ?> + config['show_picker'] != "0") { ?> + + + config['enable_mootools'] != "0") { ?> + + + + + + + + + + + + + class="" data-evocp="color"> diff --git a/manager/includes/lang/bulgarian.inc.php b/manager/includes/lang/bulgarian.inc.php index 24ea01e7..ce4653ad 100755 --- a/manager/includes/lang/bulgarian.inc.php +++ b/manager/includes/lang/bulgarian.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Метод за оповестяване на нова парола'; $_lang["password_method_email"] = 'Изпрати новата парола на емейл адрес.'; $_lang["password_method_screen"] = 'Покажи новата парола на екран.'; -$_lang["password_msg"] = 'Новата парола на %s е %s.'; -$_lang["php_version_check"] = 'MODX е съвместим с PHP версия 5.0.0 и по-високи. Ъпгрейдвайте PHP инсталацията си!'; +$_lang["password_msg"] = 'Новата парола на %s е %s
          '; +$_lang["php_version_check"] = 'MODX е съвместим с PHP версия 5.6.0 и по-високи. Ъпгрейдвайте PHP инсталацията си!'; $_lang["plugin"] = 'Плъгин'; $_lang["plugin_code"] = 'Код на плъгина (php)'; $_lang["plugin_config"] = 'Конфигурация на плъгин'; diff --git a/manager/includes/lang/chinese.inc.php b/manager/includes/lang/chinese.inc.php index 04af77ef..2ce768a1 100755 --- a/manager/includes/lang/chinese.inc.php +++ b/manager/includes/lang/chinese.inc.php @@ -659,8 +659,8 @@ $_lang["password_method"] = '密码确认方法'; $_lang["password_method_email"] = '通过e-mail发送密码.'; $_lang["password_method_screen"] = '在屏幕上显示密码.'; -$_lang["password_msg"] = ' %s的新密码是 %s.'; -$_lang["php_version_check"] = 'MODX兼容PHP 5.0.0 和更高的版本,请升级PHP版本!'; +$_lang["password_msg"] = ' %s的新密码是 %s
          '; +$_lang["php_version_check"] = 'MODX兼容PHP 5.6.0 和更高的版本,请升级PHP版本!'; $_lang["plugin"] = '插件'; $_lang["plugin_code"] = '插件代码 (php)'; $_lang["plugin_config"] = '插件配置'; diff --git a/manager/includes/lang/czech.inc.php b/manager/includes/lang/czech.inc.php index cd766375..e8feeebe 100755 --- a/manager/includes/lang/czech.inc.php +++ b/manager/includes/lang/czech.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Způsob oznámení hesla'; $_lang["password_method_email"] = 'Poslat nové heslo emailem.'; $_lang["password_method_screen"] = 'Zobrazit nové heslo na monitoru.'; -$_lang["password_msg"] = 'Nové heslo pro %s je %s.'; -$_lang["php_version_check"] = 'MODX je kompatibilní jen s verzí PHP 5.0.0 a vyšší. Aktualizujte prosím svou PHP instalaci!'; +$_lang["password_msg"] = 'Nové heslo pro %s je %s
          '; +$_lang["php_version_check"] = 'MODX je kompatibilní jen s verzí PHP 5.6.0 a vyšší. Aktualizujte prosím svou PHP instalaci!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Kód pluginu (php)'; $_lang["plugin_config"] = 'Nastavení pluginu'; diff --git a/manager/includes/lang/danish.inc.php b/manager/includes/lang/danish.inc.php index dff075ff..24effd94 100755 --- a/manager/includes/lang/danish.inc.php +++ b/manager/includes/lang/danish.inc.php @@ -659,8 +659,8 @@ $_lang["password_method"] = 'Kodeordet skal:'; $_lang["password_method_email"] = 'Sendes som e-mail.'; $_lang["password_method_screen"] = 'Vises på skærmen.'; -$_lang["password_msg"] = 'Det nye kodeord for %s er %s.'; -$_lang["php_version_check"] = 'MODX er kompatibelt med PHP version 5.0.0 og nyere. Opgrader venligst PHP installationen!'; +$_lang["password_msg"] = 'Det nye kodeord for %s er %s
          '; +$_lang["php_version_check"] = 'MODX er kompatibelt med PHP version 5.6.0 og nyere. Opgrader venligst PHP installationen!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Plugin kode (PHP)'; $_lang["plugin_config"] = 'Plugin konfiguration'; diff --git a/manager/includes/lang/english.inc.php b/manager/includes/lang/english.inc.php index 275a58ac..94ddc618 100755 --- a/manager/includes/lang/english.inc.php +++ b/manager/includes/lang/english.inc.php @@ -1,1485 +1,1519 @@ -PHP Application Framework and Content Management System licensed under the GNU GPL.'; -$_lang["about_title"] = 'About Evolution'; -$_lang["access_permission_denied"] = 'You do not have the correct permissions for this Resource.'; -$_lang["access_permission_parent_denied"] = 'You do not have permission to create or move a Resource here! Please choose another location.'; -$_lang["access_permissions"] = 'Access permissions'; -$_lang["access_permissions_add_resource_group"] = 'Create a new Resource Group'; -$_lang["access_permissions_add_user_group"] = 'Create a new User Group'; -$_lang["access_permissions_docs_collision"] = 'Because the Web User Groups and Manager User Groups conflict for your Role, this Resource will be public. Contact a site administrator for further help.'; -$_lang["access_permissions_docs_message"] = 'Select which Resource Groups this Resource belongs to'; -$_lang["access_permissions_group_link"] = 'Create a new group link'; -$_lang["access_permissions_introtext"] = 'Manage the User Groups and Resource Groups used for access permissions. To add a user to a User Group, edit the user and select the groups (s)he should be a member of. To add a Resource to a User Group, edit the Resource and select the groups it should belong to.'; -$_lang["access_permissions_link_to_group"] = 'to Resource Group'; -$_lang["access_permissions_link_user_group"] = 'Link User Group'; -$_lang["access_permissions_links"] = 'User/Resource Group links'; -$_lang["access_permissions_links_tab"] = 'Specify which User Groups are given access (i.e. can edit or create children) to the Resource Groups. To link a Resource Group to a User Group, select the appropriate groups from the drop down menus, and click on \'Submit\'. To remove the link for a certain group, press \'Remove\'. This will immediately remove the link.'; -$_lang["access_permissions_no_resources_in_group"] = 'None.'; -$_lang["access_permissions_no_users_in_group"] = 'None.'; -$_lang["access_permissions_off"] = 'Access Permissions are not activated. This means any changes made here will not have any effect until Access Permissions are activated in your Configuration.'; -$_lang["access_permissions_resource_groups"] = 'Resource Groups'; -$_lang["access_permissions_resources_in_group"] = 'Resources in group: '; -$_lang["access_permissions_resources_tab"] = 'See which Resource Groups have been created. Also create new groups, rename groups, delete groups and see which Resources are in the different groups (hover over the id of the Resource to see it\'s name). To add a Resource to a group or remove a Resource from a group, edit the Resource directly.'; -$_lang["access_permissions_user_groups"] = 'User groups'; -$_lang["access_permissions_user_message"] = 'Select which User Groups this user belongs to:'; -$_lang["access_permissions_users_in_group"] = 'Users in group:'; -$_lang["access_permissions_users_tab"] = 'View the User Groups that have been created. You can also create new groups, rename groups, delete groups and see which users are members of the different groups. To add a new user to a group or to remove a user from a group, edit the user directly. Administrators (users who have been assigned the role with ID 1) always have access to all Resources, so they don\'t need to be added to any groups.'; -$_lang["account_email"] = 'Account email'; -$_lang["actioncomplete"] = 'Action was completed successfully!
          - Please wait while EVO cleans up.'; -$_lang["activity_message"] = 'This list shows the last Resources you created or edited:'; -$_lang["activity_title"] = 'Recently edited/created Resources'; -$_lang["add"] = 'Add'; -$_lang["add_chunk"] = 'Add Chunk'; -$_lang["add_doc"] = 'Add Resource'; -$_lang["add_folder"] = 'New Directory'; -$_lang["add_plugin"] = 'Add Plugin'; -$_lang["add_resource"] = 'New Resource'; -$_lang["add_snippet"] = 'Add Snippet'; -$_lang["add_tag"] = 'Add tag'; -$_lang["add_template"] = 'Add Template'; -$_lang["add_tv"] = 'Add TV'; -$_lang["add_weblink"] = 'New Weblink'; -$_lang["administrator_role_message"] = 'This role cannot be edited or deleted.'; -$_lang["administrators"] = 'Administrators'; -$_lang["after_saving"] = 'After saving'; -$_lang["alert_delete_self"] = 'You can\'t delete yourself!'; -$_lang["alias"] = 'URL alias'; -$_lang["all_doc_groups"] = 'All Resource Groups (Public)'; -$_lang["all_events"] = 'All Events'; -$_lang["all_usr_groups"] = 'All User Groups (Public)'; -$_lang["allow_mgr_access"] = 'Manager Interface Access'; -$_lang["allow_mgr_access_message"] = 'Select this option to enable or disable access to the manager interface. NOTE: If this option is set to no then the user will be redirected to the Manager Login Startup or Site Start web page.'; -$_lang["already_deleted"] = 'has already been deleted.'; -$_lang["attachment"] = 'Attachment'; -$_lang["author_infos"] = 'Author information'; -$_lang["automatic_alias_message"] = 'Select \'yes\' to have the system automatically generate a URL alias based on the Resource\'s page title when saving.'; -$_lang["automatic_alias_title"] = 'Automatically generate URL alias'; -$_lang["backup"] = 'Backup'; -$_lang["bk_manager"] = 'Backup'; -$_lang["block_message"] = 'This user will be blocked after saving the user\'s data!'; -$_lang["blocked_minutes_message"] = 'Enter the number of minutes that a user will be blocked for if they reach their maximum number of allowed failed login attempts. Please enter this value as numbers only (no commas, spaces etc.)'; -$_lang["blocked_minutes_title"] = 'Blocked Minutes'; -$_lang["cache_files_deleted"] = 'The following files were deleted:'; -$_lang["cancel"] = 'Cancel'; -$_lang["captcha_code"] = 'Security code'; -$_lang["captcha_message"] = 'Enable this to strengthen security by requiring users to enter a code which is unreadable by machines (and script-kiddy hacking scripts).'; -$_lang["captcha_title"] = 'Use CAPTCHA codes'; -$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; -$_lang["captcha_words_message"] = 'Enter a list of CAPTCHA words to use if CAPTCHA is enabled. Separate the words with commas. This input field is limited to 255 characters.'; -$_lang["captcha_words_title"] = 'CAPTCHA Words'; -$_lang["category_heading"] = 'Category'; -$_lang["category_manager"] = 'Category Manager'; -$_lang["category_management"] = 'Category management'; -$_lang["manage_categories"] = 'Manage Categories'; -$_lang["category_msg"] = 'View and edit all Elements grouped by category.'; -$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; -$_lang["cfg_base_url"] = 'MODX_BASE_URL'; -$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; -$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; -$_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Change name'; -$_lang["change_password"] = 'Change Password'; -$_lang["change_password_confirm"] = 'Confirm password'; -$_lang["change_password_message"] = 'Please enter your new password, and then enter it again to confirm. Your password needs to be at least 6 characters long.'; -$_lang["change_password_new"] = 'New password'; -$_lang["charset_message"] = 'Select the default character encoding for the [(modx_charset)] system variable. This does not affect the Manager.'; -$_lang["charset_title"] = 'Character encoding'; -$_lang["chunk"] = 'Chunk'; -$_lang["chunk_code"] = 'Chunk code (html)'; -$_lang["chunk_multiple_id"] = 'Error: Multiple Chunks share the same unique ID.'; -$_lang["chunk_no_exist"] = 'Chunk does not exist.'; -$_lang["cleaningup"] = 'Cleaning up'; -$_lang["clean_uploaded_filename"] = 'Use Transliteration for File Uploads'; -$_lang["clean_uploaded_filename_message"] = 'Use the default or transalias settings for the file name to clean special characters from uploaded file names, preserving dot-characters (periods)'; -$_lang["clear_log"] = 'Clear log'; -$_lang["click_to_context"] = 'Click to access context menu'; -$_lang["click_to_edit_title"] = 'Click here to edit this record'; -$_lang["click_to_view_details"] = 'Click here to view details'; -$_lang["close"] = 'Close'; -$_lang["code"] = 'Code'; -$_lang["collapse_tree"] = 'Collapse Site Tree'; -$_lang["comment"] = 'Comment'; -$_lang["configcheck_admin"] = 'Please contact a systems administrator and warn them about this message!'; -$_lang["configcheck_cache"] = 'cache directory not writable'; -$_lang["configcheck_cache_msg"] = 'EVO cannot write to the cache directory. EVO will still function as expected, but no caching will take place. To solve this, make the /_cache/ directory writable.'; -$_lang["configcheck_configinc"] = 'Config file still writable'; -$_lang["configcheck_configinc_msg"] = 'Very naughty people could potentially wreak some havoc on your site and everything associated with it. Really. Please make your config file (/[+MGR_DIR+]/includes/config.inc.php) read only!'; -$_lang["configcheck_default_msg"] = 'An unspecified warning was found. Which is strange.'; -$_lang["configcheck_errorpage_unavailable"] = 'Your site\'s Error page is not available.'; -$_lang["configcheck_errorpage_unavailable_msg"] = 'This means that your Error page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; -$_lang["configcheck_errorpage_unpublished"] = 'Your site\'s Error page is not published or does not exist.'; -$_lang["configcheck_errorpage_unpublished_msg"] = 'This means that your Error page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; -$_lang["configcheck_filemanager_path"] = 'The currently set File Manager path seems incorrect.'; -$_lang["configcheck_filemanager_path_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; -$_lang["configcheck_hide_warning"] = 'Don\'t show this again.'; -$_lang["configcheck_images"] = 'Images directory not writable'; -$_lang["configcheck_images_msg"] = 'The images directory isn\'t writable, or doesn\'t exist. This means the Image Manager functions in the editor will not work!'; -$_lang["configcheck_installer"] = 'Installer still present'; -$_lang["configcheck_installer_msg"] = 'The /install directory contains the installer for EVO. Just imagine what might happen if an evil person finds this directory and runs the installer! They\'d probably not get too far, because they need to enter some user information for the database, but it is still best to remove this directory from your server.'; -$_lang["configcheck_lang_difference"] = 'Incorrect number of entries in language file'; -$_lang["configcheck_lang_difference_msg"] = 'The currently selected language has a different number of entries than the default language. While not necessarily a problem, this may mean the language file needs to be updated.'; -$_lang["configcheck_notok"] = 'One or more configuration details didn\'t check out OK:'; -$_lang["configcheck_ok"] = 'Check passed OK - no warnings to report.'; -$_lang["configcheck_php_gdzip"] = 'GD and/or Zip PHP extensions not found'; -$_lang["configcheck_php_gdzip_msg"] = 'EVO needs the GD and Zip extension enabled for PHP. While EVO will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; -$_lang["configcheck_rb_base_dir"] = 'The currently set File base path seems incorrect.'; -$_lang["configcheck_rb_base_dir_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; -$_lang["configcheck_register_globals"] = 'register_globals is set to ON in your php.ini configuration file'; -$_lang["configcheck_register_globals_msg"] = 'This configuration makes your site much more susceptible to Cross Site Scripting (XSS) attacks. You should speak to your host about what you can do to disable this setting.'; -$_lang["configcheck_title"] = 'Configuration check'; -$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin detected'; -$_lang["configcheck_templateswitcher_present_delete"] = 'Delete TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_disable"] = 'Disable TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_msg"] = 'The TemplateSwitcher plugin has been found to cause caching and performance problems, and should be used only the functionality is required in your site.'; -$_lang["configcheck_unauthorizedpage_unavailable"] = 'Your site\'s Unauthorized page is not published or does not exist.'; -$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'This means that your Unauthorized page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; -$_lang["configcheck_unauthorizedpage_unpublished"] = 'The Unauthorized page defined in the site configuration settings is not published.'; -$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'This means that your Unauthorized page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; -$_lang["configcheck_validate_referer"] = 'Security Warning: HTTP Header Validation'; -$_lang["configcheck_validate_referer_msg"] = 'The configuration setting Validate HTTP_REFERER headers? is Off. We recommend turning it On. Go to Configuration options'; -$_lang["configcheck_warning"] = 'Configuration warning: '; -$_lang["configcheck_what"] = 'What does this mean?'; -$_lang["confirm_block"] = 'Are you sure you want to block this user?'; -$_lang["confirm_delete_category"] = 'Are you sure you want to delete this category?'; -$_lang["confirm_delete_eventlog"] = 'Are you sure you want to delete this event log?'; -$_lang["confirm_delete_file"] = 'Are you sure you want to delete the file?\n\nThis may stop your site from working properly! Only delete this file if you know for certain what you are doing will not break anything.'; -$_lang["confirm_delete_group"] = 'Are you sure you want to delete this group?'; -$_lang["confirm_delete_htmlsnippet"] = 'Are you sure you want to delete this Chunk?'; -$_lang["confirm_delete_keywords"] = 'Are you sure you want to delete these keywords?'; -$_lang["confirm_delete_module"] = 'Are you sure you want to delete this Module?'; -$_lang["confirm_delete_plugin"] = 'Are you sure you want to delete this Plugin?'; -$_lang["confirm_delete_record"] = 'Are you sure you want to delete the selected record(s)?'; -$_lang["confirm_delete_resource"] = 'Are you sure you want to delete this Resource?\nAny children Resources will also be deleted.'; -$_lang["confirm_delete_role"] = 'Are you sure you want to delete this role?'; -$_lang["confirm_delete_snippet"] = 'Are you sure you want to delete this Snippet?'; -$_lang["confirm_delete_tags"] = 'Are you sure you want to delete the selected META tags?'; -$_lang["confirm_delete_template"] = 'Are you sure you want to delete this Template?'; -$_lang["confirm_delete_tmplvars"] = 'Are you sure you want to remove this Template Variable and all stored values?'; -$_lang["confirm_delete_user"] = 'Are you sure you want to delete this User?'; -$_lang["confirm_duplicate_record"] = 'Are you sure you want to duplicate this record?'; -$_lang["confirm_empty_trash"] = 'This will permanently remove ALL deleted Resources?\n\nProceed?'; -$_lang["confirm_load_depends"] = 'Are you sure you want to load the Manage Dependencies screen without saving your modifications?'; -$_lang["confirm_name_change"] = 'Changing the user name can affect other applications that are linked to the Content Manager.\n\nAre you sure you want to change this user name?'; -$_lang["confirm_publish"] = '\n\nPublishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; -$_lang["confirm_remove_locks"] = 'Users sometimes close their browser while editing Resources, Templates, Snippets or parsers, possibly leaving the item they were editing in locked state. By pressing OK you can remove ALL locks currently in place.\n\nProceed?'; -$_lang["confirm_reset_sort_order"] = 'Are you sure you want to reset the \"sort order/index\" of all listed elements to 0 ?'; -$_lang["confirm_resource_duplicate"] = 'Are you sure you want to duplicate this Resource? Any item(s) it contains will also be duplicated.'; -$_lang["confirm_setting_language_change"] = 'You have modified the default value and will lose the changes. Proceed?'; -$_lang["confirm_unblock"] = 'Are you sure you want to unblock this user?'; -$_lang["confirm_undelete"] = '\n\nAny children Resources deleted at the same time as this Resource will also be undeleted, but children Resources deleted at an earlier time will still be deleted.'; -$_lang["confirm_unpublish"] = '\n\nUn-publishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; -$_lang["confirm_unzip_file"] = 'Are you sure you want to unzip this file?\n\nExisting files will be overwritten.'; -$_lang["could_not_find_user"] = 'Could not find user'; -$_lang["create_folder_here"] = 'Create Container here'; -$_lang["create_resource_here"] = 'Create Resource here'; -$_lang["create_resource_title"] = 'Create Resource'; -$_lang["create_weblink_here"] = 'Create Weblink here'; -$_lang["createdon"] = 'Creation date'; -$_lang["create_new"] = 'Create new'; -$_lang["credits"] = 'Credits'; -$_lang["credits_shouts_msg"] = '

          EVO is managed and maintained at evo.im.

          '; -$_lang["custom_contenttype_message"] = 'Add custom content types for Resources. To add a new entry, enter the content type in the text box then click the \'Add\' button.'; -$_lang["custom_contenttype_title"] = 'Custom content types'; -$_lang["database_charset"] = 'Database Charset'; -$_lang["database_collation"] = 'Database Collation Charset'; -$_lang["database_name"] = 'Database name'; -$_lang["database_overhead"] = 'Note: Overhead is unused space reserved by MySQL. To free up this space, click on the table\'s overhead figure.'; -$_lang["database_server"] = 'Database server'; -$_lang["database_table_clickbackup"] = 'Backup & download the selected tables'; -$_lang["database_table_clickhere"] = 'Click here'; -$_lang["database_table_datasize"] = 'Data size'; -$_lang["database_table_droptablestatements"] = 'Generate DROP TABLE statements.'; -$_lang["database_table_effectivesize"] = 'Effective size'; -$_lang["database_table_indexsize"] = 'Index size'; -$_lang["database_table_overhead"] = 'Overhead'; -$_lang["database_table_records"] = 'Records'; -$_lang["database_table_tablename"] = 'Table name'; -$_lang["database_table_totals"] = 'Totals'; -$_lang["database_table_totalsize"] = 'Total size'; -$_lang["database_tables"] = 'Database tables'; -$_lang["database_version"] = 'Database Version'; -$_lang["date"] = 'Date'; -$_lang["datechanged"] = 'Date changed'; -$_lang["datepicker_offset"] = 'Datepicker offset'; -$_lang["datepicker_offset_message"] = 'The number of years to show in the past on the datepicker.'; -$_lang["datetime_format"] = 'Date format'; -$_lang["datetime_format_message"] = 'The format for dates in the Manager.'; -$_lang["default"] = 'Default:'; -$_lang["defaultcache_message"] = 'Select \'Yes\' to make all new Resources cacheable by default.'; -$_lang["defaultcache_title"] = 'Cacheable default'; -$_lang["defaultmenuindex_message"] = 'Select \'Yes\' to turn on automatic menu index incrementing by default.'; -$_lang["defaultmenuindex_title"] = 'Menu indexing default'; -$_lang["defaultpublish_message"] = 'Select \'Yes\' to make all new Resources published by default.'; -$_lang["defaultpublish_title"] = 'Published default'; -$_lang["defaultsearch_message"] = 'Select \'Yes\' to make all new Resources searchable by default.'; -$_lang["defaultsearch_title"] = 'Searchable default'; -$_lang["defaulttemplate_message"] = 'Select the Template you wish to use as a system default for new Resources. You can still select a different Template in the Resource editor, this setting just pre-selects one of your Templates for you.'; -$_lang["defaulttemplate_title"] = 'System Default Template'; -$_lang["defaulttemplate_logic_title"] = 'Automatic Template Assignment'; -$_lang["defaulttemplate_logic_general_message"] = 'New Resources will have the following templates, falling back to higher levels if not found:'; -$_lang["defaulttemplate_logic_system_message"] = 'System: the System Default Template.'; -$_lang["defaulttemplate_logic_parent_message"] = 'Parent: the same Template as the parent container.'; -$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: the same Template as other Resources in the same container.'; -$_lang["delete"] = 'Delete'; -$_lang["delete_resource"] = 'Delete Resource'; -$_lang["delete_tags"] = 'Delete tags'; -$_lang["deleting_file"] = 'Deleting file `%s`: '; -$_lang["description"] = 'Description'; -$_lang["deselect_keywords"] = 'Clear keywords'; -$_lang["deselect_metatags"] = 'Clear META tags'; -$_lang["disabled"] = 'Disabled'; -$_lang["doc_data_title"] = 'View Resource data'; -$_lang["documentation"] = 'Documentation'; -$_lang["duplicate"] = 'Duplicate'; -$_lang["duplicate_alias_found"] = 'Resource \'%s\' is already using the URL alias \'%s\'. Please enter a unique URL alias.'; -$_lang["duplicate_alias_message"] = 'Select \'yes\' to allow duplicate URL aliases to be saved. NOTE: This option should be used with \'Friendly URL alias path\' option set to \'Yes\' in order to avoid problems when referencing a Resource.'; -$_lang["duplicate_alias_title"] = 'Allow duplicate URL aliases'; -$_lang["duplicate_name_found_general"] = 'There is already a %s named \'%s\'. Please enter a unique name.'; -$_lang["duplicate_name_found_module"] = 'There is already a Module named \'%s\'. Please enter a unique name.'; -$_lang["duplicated_el_suffix"] = 'Duplicate'; -$_lang["edit"] = 'Edit'; -$_lang["edit_resource"] = 'Edit Resource'; -$_lang["edit_resource_title"] = 'Edit Resource'; -$_lang["edit_settings"] = 'Configuration'; -$_lang["editedon"] = 'Edit date'; -$_lang["editing_file"] = 'Editing file: '; -$_lang["editor_css_path_message"] = 'Enter the path to your CSS file that you wish to use within the editor. The best way to enter the path is to enter the path from the root of your server, for example: /assets/site/style.css. If you do not wish to load a style sheet into the editor, leave this field blank.'; -$_lang["editor_css_path_title"] = 'Path to CSS file'; -$_lang["element"] = 'Element'; -$_lang["element_categories"] = 'Combined View'; -$_lang["element_filter_msg"] = 'Type here to filter list'; -$_lang["element_management"] = 'Manage Elements'; -$_lang["element_name"] = 'Element name'; -$_lang["element_selector_msg"] = 'Select the Elements(s) from the list below and click the \'Insert\' button.'; -$_lang["element_selector_title"] = 'Element Selector'; -$_lang["elements"] = 'Elements'; -$_lang["email"] = 'Email'; -$_lang["email_sent"] = 'Email sent'; -$_lang["emailsender_message"] = 'The email address of the site administrator. For example, this email address will be used as the destination of system notification e-mail etc.'; -$_lang["emailsender_title"] = 'E-mail address'; -$_lang["emailsubject_default"] = 'Your login details'; -$_lang["emailsubject_message"] = 'Specify the value of the subject of the signup e-mail.'; -$_lang["emailsubject_title"] = 'E-mail subject'; -$_lang["empty_folder"] = 'This Container is empty'; -$_lang["empty_recycle_bin"] = 'Purge deleted Resources'; -$_lang["empty_recycle_bin_empty"] = 'There are no deleted Resources to purge.'; -$_lang["enable_resource"] = 'Enable Element file.'; -$_lang["enable_sharedparams"] = 'Enable parameter sharing'; -$_lang["enable_sharedparams_msg"] = 'NOTE: The above globally unique id (GUID) will be used to uniquely identify this Module and it\'s shared parameters. The GUID is also used to form a link between the Module and the Plugins or Snippets accessing the it\'s shared parameters. '; -$_lang["enabled"] = 'Enabled'; -$_lang["error"] = 'Error'; -$_lang["error_sending_email"] = 'Error sending email'; -$_lang["errorpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect users to when requesting a non-existing Resource.'; -$_lang["errorpage_title"] = 'Error page'; -$_lang["event_id"] = 'Event Id'; -$_lang["eventlog"] = 'Event log'; -$_lang["eventlog_msg"] = 'The event log is used to display information, warning and error messages generated by the content manager. The \'source\' column shows the section of the content manager where the message occurred.'; -$_lang["eventlog_viewer"] = 'System Events'; -$_lang["everybody"] = 'Everybody'; -$_lang["existing_category"] = 'Existing Category'; -$_lang["expand_tree"] = 'Expand Site Tree'; -$_lang["export_site"] = 'Export Static HTML'; -$_lang["export_site_cacheable"] = 'Include non-cacheable files:'; -$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; -$_lang["export_site_failed"] = 'Failed!'; -$_lang["export_site_failed_no_open"] = 'Cannot open file: '; -$_lang["export_site_failed_no_retrieve"] = 'Cannot retrieve document.'; -$_lang["export_site_failed_no_write"] = 'Cannot write file.'; -$_lang["export_site_html"] = 'Export site to HTML'; -$_lang["export_site_maxtime"] = 'Max export time:'; -$_lang["export_site_maxtime_message"] = 'Specify the number of seconds EVO can take to export the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; -$_lang["export_site_message"] = '

          Use this to export the entire site to static HTML files. Please note, however, that you will lose a lot of the EVO functionality should you do so:

          • Page reads on the exported files will not be recorded.
          • Interactive Snippets will NOT work in exported files
          • Only regular Resources will be exported, Weblinks will not be exported.
          • The export process may fail if your Resources contain Snippets which send redirection headers.
          • Depending on how you\'ve written your Resources, style sheets and images, the design of your site may be broken. To fix this, save/move your exported files to the same directory where the main EVO index.php file is located.

          Please fill out the form and press \'Export\' to start the export process. The files created will be saved in the /assets/export directory, using the Resources\' URL aliases as filenames when possible. While exporting your site, it\'s best to have the EVO configuration item \'Friendly URL aliases\' set to \'yes\'. Depending on the size of your site, the export may take a while.

          Any existing files will be overwritten by the new files if their names are identical!

          '; -$_lang["export_site_numberdocs"] = '

          Found %s Resources to export...

          '; -$_lang["export_site_prefix"] = 'File prefix:'; -$_lang["export_site_start"] = 'Start export'; -$_lang["export_site_success"] = 'Success!'; -$_lang["export_site_success_skip_dir"] = 'Skip this directory.'; -$_lang["export_site_success_skip_doc"] = 'Skip this document.'; -$_lang["export_site_suffix"] = 'File suffix:'; -$_lang["export_site_target_unwritable"] = 'Target directory isn\'t writable. Please ensure the directory is writable, and try again.'; -$_lang["export_site_time"] = 'Export finished. Export took %s seconds to complete.'; -$_lang["failed_login_message"] = 'Enter the number of failed login attempts allowed before blocking a user.'; -$_lang["failed_login_title"] = 'Failed Login Attempts'; -$_lang["fe_editor_lang_message"] = 'Choose a language for the editor to use when used as a front-end editor.'; -$_lang["fe_editor_lang_title"] = 'Front-end Editor Language'; -$_lang["file_delete_file"] = 'Delete file'; -$_lang["file_delete_folder"] = 'Delete directory'; -$_lang["file_deleted"] = 'Success!'; -$_lang["file_download_file"] = 'Download File'; -$_lang["file_download_unzip"] = 'Unzip File'; -$_lang["file_folder_chmod_error"] = 'Unable to change permissions, you will need to change permissions outside of EVO.'; -$_lang["file_folder_created"] = 'Directory created successfully!'; -$_lang["file_folder_deleted"] = 'Directory was successfully deleted!'; -$_lang["file_folder_not_created"] = 'Unable to create directory'; -$_lang["file_folder_not_deleted"] = 'Unable to delete directory. Make sure it is empty before deleting.'; -$_lang["file_not_deleted"] = 'Failed!'; -$_lang["file_not_saved"] = 'Cannot save file, please ensure target directory is writable!'; -$_lang["file_saved"] = 'File updated successfully!'; -$_lang["file_unzip"] = 'Unzip was successful!'; -$_lang["file_unzip_fail"] = 'Unzip Failed!'; -$_lang["filemanager_path_message"] = 'IIS often does not populate the document_root setting properly, which is used by the file manager to determine what you can see. If you are having problems using the file manager, make sure this path points to the root of your EVO installation.'; -$_lang["filemanager_path_title"] = 'File Manager path'; -$_lang["files_access_denied"] = 'Access denied!'; -$_lang["files_data"] = 'Data'; -$_lang["files_dir_listing"] = 'Directory listing for:'; -$_lang["files_directories"] = 'Directories'; -$_lang["files_directory_is_empty"] = 'This directory is empty.'; -$_lang["files_dirwritable"] = 'Directory writable?'; -$_lang["files_editfile"] = 'Edit file'; -$_lang["files_file_type"] = 'File type: '; -$_lang["files_filename"] = 'Filename'; -$_lang["files_fileoptions"] = 'Options'; -$_lang["files_files"] = 'Files'; -$_lang["files_filesize"] = 'File size'; -$_lang["files_filetype_notok"] = 'Uploading of this kind of file is not allowed!'; -$_lang["files_management"] = 'Manage Files'; -$_lang["files_management_no_permission"] = 'You do not have enough permissions to view or edit these files. Ask the administrator to grant you access to %s.'; -$_lang["files_modified"] = 'Modified'; -$_lang["files_top_level"] = 'To top level'; -$_lang["files_up_level"] = 'Up one level'; -$_lang["files_upload_copyfailed"] = 'Failed to copy file to destination directory - upload failed!'; -$_lang["files_upload_error"] = 'Error'; -$_lang["files_upload_error0"] = 'There was a problem with your upload.'; -$_lang["files_upload_error1"] = 'The file you are trying to upload is too big.'; -$_lang["files_upload_error2"] = 'The file you are trying to upload is too big.'; -$_lang["files_upload_error3"] = 'The file you are trying upload was only partially uploaded.'; -$_lang["files_upload_error4"] = 'You must select a file for upload.'; -$_lang["files_upload_error5"] = 'There was a problem with your upload.'; -$_lang["files_upload_inhibited_msg"] = 'Upload feature inhibited - make sure uploads are supported and the directory is writable for PHP.'; -$_lang["files_upload_ok"] = 'File uploaded successfully!'; -$_lang["files_upload_permissions_error"] = 'Possible permission problems - the directory you want to upload to needs to be writable by your webserver.'; -$_lang["files_uploadfile"] = 'Upload file'; -$_lang["files_uploadfile_msg"] = 'Select a file to upload:'; -$_lang["files_uploading"] = 'Uploading %s to %s/'; -$_lang["files_viewfile"] = 'View file'; -$_lang["folder"] = 'Folder'; -$_lang["forgot_password_email_fine_print"] = '* The URL above will expire once you change your password or after today.'; -$_lang["forgot_password_email_instructions"] = 'From there you will be able to change your password from the My Account menu.'; -$_lang["forgot_password_email_intro"] = 'A request has been made to change the password on your account.'; -$_lang["forgot_password_email_link"] = 'Click here to complete the process.'; -$_lang["forgot_your_password"] = 'Forgot your password?'; -$_lang["friday"] = 'Friday'; -$_lang["friendly_alias_message"] = 'With Friendly URLs enabled, a Resource URL alias will be used when present instead of the Resource ID. E.g., if a Resource with ID 1 has an URL alias of "introduction", no prefix set (empty) and a suffix of ".html", enabling this option would generate an URL alias of "introduction.html". If there is no URL alias set, EVO generates "1.html".'; -$_lang["friendly_alias_title"] = 'Use Friendly URL aliases'; -$_lang["friendlyurls_message"] = 'Use Search Engine Friendly URLs on Apache webservers with mod_rewrite or IIS with third-party plugins. See the .htaccess file in the site root of the distribution for more info.'; -$_lang["friendlyurls_title"] = 'Use FriendlyURLs'; -$_lang["friendlyurlsprefix_message"] = 'A prefix setting of "page" will turn the URL /index.php?id=2 to the URL alias "page2.html" (assuming the suffix is set to .html).'; -$_lang["friendlyurlsprefix_title"] = 'Friendly URL Prefix'; -$_lang["friendlyurlsuffix_message"] = 'Any suffix you choose will work, including no suffix at all. E.g., ".aspx" will append .aspx to all URL aliases.'; -$_lang["friendlyurlsuffix_title"] = 'Friendly URL Suffix'; -$_lang["functionnotimpl"] = 'Sorry!'; -$_lang["functionnotimpl_message"] = 'This function has not been implemented yet.'; -$_lang["further_info"] = 'Further information'; -$_lang["global_tabs"] = 'Global Tabs'; -$_lang["go"] = 'Go'; -$_lang["group_access_permissions"] = 'User group access'; -$_lang['group_tvs'] = 'Group TV'; -$_lang["guid"] = 'GUID'; -$_lang["help"] = 'Help'; -$_lang["help_msg"] = '

          You can obtain free community support by visiting the EVO Forums. There is also a growing body of EVO Documentation and Guides that touch on virtually every aspect of EVO.

          We are planning to offer commercial support services for EVO as well. Please email us if you\'re interested.

          '; -$_lang["help_title"] = 'Help'; -$_lang["hide_tree"] = 'Hide Site Tree'; -$_lang["home"] = 'Dashboard'; -$_lang["htmlsnippet"] = 'Chunk'; -$_lang["htmlsnippets"] = 'Chunks'; -$_lang["htmlsnippet_desc"] = 'Description'; -$_lang["htmlsnippet_management_msg"] = 'Select the Chunk you wish to edit.'; -$_lang["htmlsnippet_msg"] = 'Add and edit Chunks. Remember, Chunks are \'raw\' HTML code, so any PHP code won\'t be processed.'; -$_lang["htmlsnippet_name"] = 'Chunk name'; -$_lang["htmlsnippet_title"] = 'Create/edit Chunk'; -$_lang["icon"] = 'Icon'; -$_lang["icon_description"] = 'CSS class value. e.g. fa fa-star'; -$_lang["id"] = 'ID'; -$_lang["illegal_parent_child"] = 'Parent Assignment:\n\nResource is a child of the selected Resource.'; -$_lang["illegal_parent_self"] = 'Parent Assignment:\n\nThe selected Resource cannot be assigned to itself.'; -$_lang["images_management"] = 'Manage Images'; -$_lang["import_files_found"] = 'Found %s Resources for import...'; -$_lang["import_params"] = 'Import Module shared parameters'; -$_lang["import_params_msg"] = 'You can import the parameters or settings of a Module by selecting the name of the Module from the above drop down menu. NOTE: In order for Modules to appear inside the menu, this Plugin/Snippet must be a part of the Module\'s dependency listing and the Module must have parameter sharing enabled. '; -$_lang["import_parent_resource"] = 'Parent Resource:'; -$_lang["import_site"] = 'Import HTML'; -$_lang["import_site_failed"] = 'Failed!'; -$_lang["import_site_failed_db_error"] = 'A database error occured while trying to clone Resource: '; -$_lang["import_site_failed_no_open_dir"] = 'Could not open directory: '; -$_lang["import_site_failed_no_retrieve_file"] = 'Could not retrieve file: '; -$_lang["import_site_html"] = 'Import site from HTML'; -$_lang["import_site_importing_document"] = 'Importing file %s '; -$_lang["import_site_maxtime"] = 'Max import time:'; -$_lang["import_site_maxtime_message"] = 'Specify the number of seconds allowed for the Content Manager to import the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; -$_lang["import_site_message"] = '

          Import an entire HTML site into your site database. Please note that you will need to copy your html files and/or directories into the /assets/import directory.

          Please fill out the form and press \'Import\' to start the import process. The files imported will be saved into the selected location, using the files name as the Resource\'s URL aliases where possible, and the Resource title tag as the pagetitle.'; -$_lang["import_site_skip"] = 'Skipped!'; -$_lang["import_site_start"] = 'Start Import'; -$_lang["import_site_success"] = 'Success!'; -$_lang["import_site_time"] = 'Import finished. Import took %s seconds to complete.'; -$_lang["inbox"] = 'Inbox'; -$_lang["info"] = 'Info'; -$_lang["information"] = 'Information'; -$_lang["inline"] = 'Inline'; -$_lang["insert"] = 'Insert'; -$_lang["maxImageWidth"] = 'Maximum image width'; -$_lang["maxImageHeight"] = 'Maximum image height'; -$_lang["thumbWidth"] = 'Maximum thumbnail width'; -$_lang["thumbHeight"] = 'Maximum thumbnail height'; -$_lang["thumbsDir"] = 'Thumbnails directory location'; -$_lang["jpegQuality"] = 'JPEG compression'; -$_lang["denyZipDownload"] = 'Disable zip-archives downloading'; -$_lang["denyExtensionRename"] = 'Disable renaming of file extensions'; -$_lang["maxImageWidth_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; -$_lang["maxImageHeight_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; -$_lang["thumbWidth_message"] = 'Maximum thumbnail width.'; -$_lang["thumbHeight_message"] = 'Maximum thumbnail height.'; -$_lang["thumbsDir_message"] = 'The name of thumbnail directory.'; -$_lang["jpegQuality_message"] = 'JPEG compression quality of thumbnails and resized images'; -$_lang["showHiddenFiles"] = 'Show hidden files in file browser'; -$_lang["keyword"] = 'Keyword'; -$_lang["keywords"] = 'Keywords'; -$_lang["keywords_intro"] = 'To edit a keyword, simply type in the new keyword in the text field next to the keyword you wish to change. To delete a keyword, check the \'delete\' box for that keyword. If you check the keyword\'s delete box, and also change it\'s name, it will be deleted, and the renaming of the keyword will not take place!'; -$_lang["language_message"] = 'Select the language for the EVO Content Manager.'; -$_lang["language_title"] = 'Manager language'; -$_lang["last_update"] = 'Last update'; -$_lang["launch_site"] = 'View Site'; -$_lang["license"] = 'License'; -$_lang["link_attributes"] = 'Link Attributes'; -$_lang["link_attributes_help"] = 'Enter optional attributes for a link for this page, such as target="_blank" or rel="external".'; -$_lang["list_mode"] = 'Turn on/off list mode - used to list all records in the grid.'; -$_lang["loading_doc_tree"] = 'Loading Site Tree...'; -$_lang["loading_menu"] = 'Loading menu...'; -$_lang["loading_page"] = 'Please wait while EVO loads the page...'; -$_lang["localtime"] = 'Local Time'; -$_lang["lock_htmlsnippet"] = 'Lock Chunk for editing'; -$_lang["lock_htmlsnippet_msg"] = 'Only Administrators (Role ID 1) can edit this Chunk.'; -$_lang["lock_module"] = 'Lock Module for editing'; -$_lang["lock_module_msg"] = 'Only Administrators (Role ID 1) can edit this Module.'; -$_lang["lock_msg"] = '%s is currently editing this %s. Please wait until the other user has finished and try again.'; -$_lang["lock_plugin"] = 'Lock Plugin for editing'; -$_lang["lock_plugin_msg"] = 'Only Administrators (Role ID 1) can edit this Plugin.'; -$_lang["lock_settings_msg"] = '%s is currently editing these settings. Please wait until the other user has finished and try again.'; -$_lang["lock_snippet"] = 'Lock Snippet for editing'; -$_lang["lock_snippet_msg"] = 'Only Administrators (Role ID 1) can edit this Snippet.'; -$_lang["lock_template"] = 'Lock Template for editing'; -$_lang["lock_template_msg"] = 'Only Administrators (Role ID 1) can edit this Template.'; -$_lang["lock_tmplvars"] = 'Lock Template Variable for editing'; -$_lang["lock_tmplvars_msg"] = 'Only Administrators (Role ID 1) can edit this Template Variable.'; -$_lang["locked"] = 'Locked'; -$_lang["login_allowed_days"] = 'Allowed Days'; -$_lang["login_allowed_days_message"] = 'Select the days that this user is allowed to login.'; -$_lang["login_allowed_ip"] = 'Allowed IP Address'; -$_lang["login_allowed_ip_message"] = 'Enter the IP addresses that this user is allowed to login from. NOTE: Separate multiple IP addresses with a comma (,)'; -$_lang["login_button"] = 'Login'; -$_lang["login_cancelled_install_in_progress"] = 'Install/update of this site is currently in progress. Please retry in a couple of minutes!'; -$_lang["login_cancelled_site_was_updated"] = 'Install/update on this site was executed, please login again!'; -$_lang["login_captcha_message"] = 'Please enter the security code shown in the graphic. If you can\'t read the code, click the image to generate a new one or contact your site admin.'; -$_lang["login_homepage"] = 'Login Home Page'; -$_lang["login_homepage_message"] = 'Enter the ID of the Resource you want to send user to after he/she has logged in. NOTE: make sure the ID you enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; -$_lang["login_message"] = 'Please enter your login credentials to start your Manager session. Your username and password are case-sensitive, so please enter them carefully!'; -$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; -$_lang["logout"] = 'Logout'; -$_lang["long_title"] = 'Long title'; -$_lang["mail_check_timeperiod_message"] = 'How often to check for new mail messages in the Manager, in seconds.'; -$_lang["mail_check_timeperiod_title"] = 'Mail Check Time Period'; -$_lang["manage_depends"] = 'Manage Dependencies'; -$_lang["manage_files"] = 'Manage Files'; -$_lang["manage_htmlsnippets"] = 'Chunks'; -$_lang["manage_metatags"] = 'Manage META tags and Keywords'; -$_lang["manage_modules"] = 'Manage Modules'; -$_lang["manage_plugins"] = 'Plugins'; -$_lang["manage_snippets"] = 'Snippets'; -$_lang["manage_templates"] = 'Templates'; -$_lang["manage_documents"] = 'Documents'; -$_lang["manager"] = 'Manager'; -$_lang["manager_lockout_message"] = 'You are currently logged into the Content Manager. If you would like to close your login session please click the "Logout" button.

          To go to your startup or home page click the "Home" button.'; -$_lang["manager_permissions"] = 'Manager Permissions'; -$_lang["manager_theme"] = 'Manager Theme'; -$_lang["manager_theme_message"] = 'Select the Theme for the Content Manager.'; -$_lang["messages"] = 'Messages'; -$_lang["messages_all"] = 'Everyone'; -$_lang["messages_compose"] = 'Compose a message'; -$_lang["messages_forward"] = 'Forward'; -$_lang["messages_from"] = 'From'; -$_lang["messages_group"] = 'A group'; -$_lang["messages_inbox"] = 'Inbox'; -$_lang["messages_message"] = 'Message'; -$_lang["messages_no_messages"] = 'No messages in Inbox.'; -$_lang["messages_not_allowed_to_read"] = 'You\'re not allowed to read this message!'; -$_lang["messages_private"] = 'Private'; -$_lang["messages_read_message"] = 'Read message'; -$_lang["messages_reply"] = 'Reply'; -$_lang["messages_select_group"] = 'Select a group'; -$_lang["messages_select_user"] = 'Select a user'; -$_lang["messages_send"] = 'Send'; -$_lang["messages_send_to"] = 'Send to'; -$_lang["messages_sent"] = 'Sent on'; -$_lang["messages_subject"] = 'Subject'; -$_lang["messages_system_user"] = '[System]'; -$_lang["messages_title"] = 'Messages'; -$_lang["messages_user"] = 'A user'; -$_lang["meta_keywords"] = 'META Keywords'; -$_lang["metatag_intro"] = 'On this page you can delete, create or edit META tags. To link META tags to Resources, click on the META Keywords tab when editing the Resource, and select the desired META tags and keywords. To add a new tag enter the name and value and click the \'Add tag\' button. To edit the tag click on the name of the tag from within the data grid.'; -$_lang["metatag_notice"] = 'You may wish to reference the HTML Reference Guide site for more information. This is not a complete list of possible Meta Tags.'; -$_lang["metatags"] = 'META tags'; -$_lang["mgr_access_permissions"] = 'Manager access permissions'; -$_lang["mgr_login_start"] = 'Manager Login Startup'; -$_lang["mgr_login_start_message"] = 'Enter the ID of the Resource you want to send the user to after he/she has logged into the manager. NOTE: make sure the ID you\'ve enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; -$_lang["mgrlog_action"] = 'Action'; -$_lang["mgrlog_actionid"] = 'Action ID'; -$_lang["mgrlog_anyall"] = 'Any/All'; -$_lang["mgrlog_datecheckfalse"] = 'checkdate() returned false.'; -$_lang["mgrlog_datefr"] = 'Date from'; -$_lang["mgrlog_dateinvalid"] = 'Invalid date format.'; -$_lang["mgrlog_dateto"] = 'Date to'; -$_lang["mgrlog_emptysrch"] = 'Your search query returned an empty result set (i.e. not matching logs found).'; -$_lang["mgrlog_field"] = 'Field'; -$_lang["mgrlog_itemid"] = 'Item ID'; -$_lang["mgrlog_itemname"] = 'Item name'; -$_lang["mgrlog_msg"] = 'Message'; -$_lang["mgrlog_noquery"] = 'No search query entered yet.'; -$_lang["mgrlog_qresults"] = 'Query results'; -$_lang["mgrlog_query"] = 'Query logging'; -$_lang["mgrlog_query_msg"] = 'Please make a selection for viewing the logs. You can select log entries by date, but be aware that the dates you enter are not inclusive - to select every log entry for 01-01-2004, set \'date from\' to 01-01-2004 and \'date to\' to 02-01-2004.

          Message and action are usually the same. If you\'re searching for a specific message, it\'s best to set action to \'Any/All\'.'; -$_lang["mgrlog_results"] = 'No. of results'; -$_lang["mgrlog_searchlogs"] = 'Search logs'; -$_lang["mgrlog_sortinst"] = 'Sort the table by clicking on the column headers. If the logs are too large, empty the log file to remove all log entries up to now. This cannot be undone!'; -$_lang["mgrlog_time"] = 'Time'; -$_lang["mgrlog_user"] = 'User'; -$_lang["mgrlog_username"] = 'Username'; -$_lang["mgrlog_value"] = 'Value'; -$_lang["mgrlog_view"] = 'View manager logs'; -$_lang["module_code"] = 'Module code (php)'; -$_lang["module_config"] = 'Module configuration'; -$_lang["module_desc"] = 'Description'; -$_lang["module_disabled"] = 'Module disabled'; -$_lang["module_edit_click_title"] = 'Click here to edit this Module'; -$_lang["module_group_access_msg"] = 'Select the User Groups that are allowed to execute this Module from within the Content Manager.'; -$_lang["module_management"] = 'Manage Modules'; -$_lang["module_management_msg"] = 'Choose the Module you would like to execute or modify. To run the Module click on the icon in the grid. To modify the Module click on the name of the Module.'; -$_lang["module_msg"] = 'Add/edit Modules. A Module is a collection of Elements (e.g. Plugins, Snippets, etc).'; -$_lang["module_name"] = 'Module name'; -$_lang["module_resource_msg"] = 'Add or remove Elements upon which this Module depends. To add a new Element click on the one of the add buttons below.'; -$_lang["module_resource_title"] = 'Module Dependencies'; -$_lang["module_title"] = 'Create/edit Module'; -$_lang["module_viewdepend_msg"] = 'View the assigned Elements on which this Module depends. Click on the "Manager Dependencies" button to modify the dependencies'; -$_lang["modules"] = 'Modules'; -$_lang["modx_news"] = 'EVO News Notices'; -$_lang["modx_news_tab"] = 'EVO News'; -$_lang["modx_news_title"] = 'EVO News'; -$_lang["modx_security_notices"] = 'EVO Security Notices'; -$_lang["modx_version"] = 'EVO version'; -$_lang["monday"] = 'Monday'; -$_lang["move"] = 'Move'; -$_lang["move_resource"] = 'Move Resource'; -$_lang["move_resource_message"] = 'Move a Resource and all its children by selecting a new parent in the Site Tree. If you select a Resource that is not already a Container, it will be changed into one. Please click on the new parent in the Site Tree.'; -$_lang["move_resource_new_parent"] = 'Please select a new parent in the Site Tree.'; -$_lang["move_resource_title"] = 'Move Resource'; -$_lang["name"] = 'Name'; -$_lang["new_category"] = 'New Category'; -$_lang["new_file_permissions_message"] = 'When uploading a new file in the File Manager, the File Manager will attempt to change the file permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; -$_lang["new_file_permissions_title"] = 'New File Permissions'; -$_lang["new_folder_permissions_message"] = 'When creating a new directory in the File Manager, the File Manager will attempt to change the directory permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; -$_lang["new_folder_permissions_title"] = 'New Directory Permissions'; -$_lang["new_htmlsnippet"] = 'New Chunk'; -$_lang["new_keyword"] = 'Add new keyword:'; -$_lang["new_module"] = 'New Module'; -$_lang["new_parent"] = 'New parent'; -$_lang["new_plugin"] = 'New Plugin'; -$_lang["new_role"] = 'New Role'; -$_lang["new_snippet"] = 'New Snippet'; -$_lang["new_template"] = 'New Template'; -$_lang["new_tmplvars"] = 'New Template Variable'; -$_lang["new_user"] = 'New Manager User'; -$_lang["new_web_user"] = 'New Web User'; -$_lang["new_resource"] = 'New Resource'; -$_lang["no"] = 'No'; -$_lang["no_active_users_found"] = 'No active users found.'; -$_lang["no_activity_message"] = 'You have not yet created or edited any Resources.'; -$_lang["no_category"] = 'uncategorized'; -$_lang["no_docs_pending_publishing"] = 'No Resources pending publishing.'; -$_lang["no_docs_pending_pubunpub"] = 'No Events Found'; -$_lang["no_docs_pending_unpublishing"] = 'No Resources pending unpublishing.'; -$_lang["no_edits_creates"] = 'No edits or creates found.'; -$_lang["no_groups_found"] = 'No groups found.'; -$_lang["no_keywords_found"] = 'There are currently no keywords.'; -$_lang["no_records_found"] = 'No records found.'; -$_lang["no_results"] = 'No results found'; -$_lang["nologentries_message"] = 'Enter the number of log entries shown per page when you browse the Audit trail.'; -$_lang["nologentries_title"] = 'Number of log entries'; -$_lang["nomessages_message"] = 'Enter the number of messages to show in inbox when viewing messages.'; -$_lang["nomessages_title"] = 'Number of messages'; -$_lang["none"] = 'None'; -$_lang["noresults_message"] = 'Enter the number of results to show in the data grid when viewing listings and search results.'; -$_lang["noresults_title"] = 'Number of Results'; -$_lang["not_deleted"] = 'has not been deleted.'; -$_lang["not_set"] = 'Not set'; -$_lang["offline"] = 'Offline'; -$_lang["online"] = 'Online'; -$_lang["onlineusers_action"] = 'Action'; -$_lang["onlineusers_actionid"] = 'Action-ID'; -$_lang["onlineusers_ipaddress"] = 'User\'s IP address'; -$_lang["onlineusers_lasthit"] = 'Last hit'; -$_lang["onlineusers_message"] = 'This list shows all users active within the last 20 minutes (current time is '; -$_lang["onlineusers_title"] = 'Online users'; -$_lang["onlineusers_user"] = 'User'; -$_lang["onlineusers_userid"] = 'User\'s ID'; -$_lang["optimize_table"] = 'Click here to optimize this table'; -$_lang["page_data_alias"] = 'Alias'; -$_lang["page_data_cacheable"] = 'Cacheable'; -$_lang["page_data_cacheable_help"] = 'This allows the Resource to be saved to the site cache, and affects all Snippets on the page.'; -$_lang["page_data_cached"] = 'Source retrieved from cache:'; -$_lang["page_data_changes"] = 'Changes'; -$_lang["page_data_contentType"] = 'Internet Media Type'; -$_lang["page_data_contentType_help"] = 'Select the content type for this Resource. If you\'re not sure which content type the Resource should have, just leave it as text/html.'; -$_lang["page_data_created"] = 'Created'; -$_lang["page_data_edited"] = 'Edited'; -$_lang["page_data_editor"] = 'Edit using rich text editor'; -$_lang["page_data_folder"] = 'Resource is Container'; -$_lang["page_data_general"] = 'General'; -$_lang["page_data_markup"] = 'Markup/structure'; -$_lang["page_data_mgr_access"] = 'Manager access'; -$_lang["page_data_notcached"] = 'This Resource has not yet been cached.'; -$_lang["page_data_publishdate"] = 'Publish date'; -$_lang["page_data_publishdate_help"] = 'If you set a publish date, the Resource will be published as soon as the publish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the publish date. This will then mean the Resource is never automatically published.'; -$_lang["page_data_published"] = 'Published'; -$_lang["page_data_searchable"] = 'Searchable'; -$_lang["page_data_searchable_help"] = 'Checking this field will allow the Resource to be searched. You can also use this field for other purposes in your Snippets.'; -$_lang["page_data_source"] = 'Source'; -$_lang["page_data_status"] = 'Status'; -$_lang["page_data_template"] = 'Uses Template'; -$_lang["page_data_template_help"] = 'Select the Template for this Resource.'; -$_lang["page_data_title"] = 'Page data'; -$_lang["page_data_unpublishdate"] = 'Un-publish date'; -$_lang["page_data_unpublishdate_help"] = 'If you set an unpublish date, the Resource will be unpublished as soon as the unpublish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the unpublish date. This will then mean the Resource is never automatically unpublished.'; -$_lang["page_data_unpublished"] = 'Un-published'; -$_lang["page_data_web_access"] = 'Web access'; -$_lang["pagetitle"] = 'Resource\'s title'; -$_lang["pagination_table_first"] = 'First'; -$_lang["pagination_table_gotopage"] = 'Go to page'; -$_lang["pagination_table_last"] = 'Last'; -$_lang["paging_first"] = 'first'; -$_lang["paging_last"] = 'last'; -$_lang["paging_next"] = 'next'; -$_lang["paging_prev"] = 'prev'; -$_lang["paging_showing"] = 'Showing'; -$_lang["paging_to"] = 'to'; -$_lang["paging_total"] = 'total'; -$_lang["parameter"] = 'Parameter'; -$_lang["parse_docblock"] = 'Parse DocBlock'; -$_lang["parse_docblock_msg"] = 'Attention (!): Resets actual name, configuration, description and category to install-defaults by parsing the source code.'; -$_lang["password"] = 'Password'; -$_lang["password_change_request"] = 'Password change request'; -$_lang["password_gen_gen"] = 'Let EVO generate a password.'; -$_lang["password_gen_length"] = 'The password you specify needs to be at least 6 characters long.'; -$_lang["password_gen_method"] = 'New password method'; -$_lang["password_gen_specify"] = 'Let me specify the password:'; -$_lang["password_method"] = 'Password notification method'; -$_lang["password_method_email"] = 'Send the new password by e-mail.'; -$_lang["password_method_screen"] = 'Show the new password on screen.'; -$_lang["password_msg"] = 'The new password for %s is %s.'; -$_lang["php_version_check"] = 'EVO Evolution is compatible with PHP version 5.0.0 and higher. This server is using version %s%. Please upgrade your PHP installation!'; -$_lang["plugin"] = 'Plugin'; -$_lang["plugins"] = 'Plugins'; -$_lang["plugin_code"] = 'Plugin code (php)'; -$_lang["plugin_config"] = 'Plugin configuration'; -$_lang["plugin_desc"] = 'Description'; -$_lang["plugin_disabled"] = 'Plugin Disabled'; -$_lang["plugin_event_msg"] = 'Select the events that you would like this Plugin to listen to.'; -$_lang["plugin_management_msg"] = 'Choose which Plugin you wish to edit.'; -$_lang["plugin_msg"] = 'Add/edit Plugins. Plugins use PHP code that is invoked whenever specific System Events trigger.'; -$_lang["plugin_name"] = 'Plugin name'; -$_lang["plugin_priority"] = 'Edit Plugin Execution Order by Event'; -$_lang["plugin_priority_instructions"] = 'Drag to reorder the Plugins under each Event header. The first plugin to execute should go at the top.'; -$_lang["plugin_priority_title"] = 'Plugin Execution Order'; -$_lang["purge_plugin"] = 'Purge obsolete plugins'; -$_lang["plugin_title"] = 'Create/edit Plugin'; -$_lang["preview"] = 'Preview'; -$_lang["preview_msg"] = 'This is a preview of your last saved changes. Click here to Save and Refresh your current changes'; -$_lang["preview_resource"] = 'Preview Resource'; -$_lang["private"] = 'Private'; -$_lang["public"] = 'Public'; -$_lang["publish_date"] = 'Publish Date'; -$_lang["publish_events"] = 'Publish Events'; -$_lang["publish_resource"] = 'Publish Resource'; -$_lang["rb_base_dir_message"] = 'Enter the physical path to the File Browser directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the path out on its own, causing the File Browser to show an error. In that case, you can enter the path to the images directory here (the path as you\'d see it in Windows Explorer). NOTE: The File Browser directory must contain the subdirectories images, files, flash and media in order for the file browser to function correctly.'; -$_lang["rb_base_dir_title"] = 'File base path'; -$_lang["rb_base_url_message"] = 'Enter the virtual path to files directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the URL out on it\'s own, causing the File Browser to show an error. In that case, you can enter the URL to the images directory here (the URL as you\'d enter it on Internet Explorer).'; -$_lang["rb_base_url_title"] = 'File Browser URL'; -$_lang["rb_message"] = 'Select yes to enable the File Browser. This will allow your users to browse and upload files such as images, flash and media files on the server.'; -$_lang["rb_title"] = 'Enable File Browser'; -$_lang["rb_webuser_message"] = 'Do you want to allow a web user the ability to use the file browser? WARNING: Allowing web users the use of the file browser exposes the files available to manager users. Only use this option for trusted web users.'; -$_lang["rb_webuser_title"] = 'Web Users?'; -$_lang["recent_docs"] = 'Recent Resources'; -$_lang["recommend_setting_change_title"] = 'Recommended Setting Change'; -$_lang["recommend_setting_change_description"] = 'Your site is not configured to validate the HTTP_REFERER of incoming requests to the Manager. We strongly recommend enabling this setting to reduce the risk of a CSRF (Cross Site Request Forgery) attack.'; -$_lang["references"] = 'References'; -$_lang["refresh_cache"] = 'Cache: Found %s files in cache directory and deleted %d cache files.

          New cache files will be created when pages are requested.'; -$_lang["refresh_published"] = '%s Resources were published.'; -$_lang["refresh_site"] = 'Clear Cache'; -$_lang["refresh_title"] = 'Refresh site'; -$_lang["refresh_tree"] = 'Refresh Site Tree'; -$_lang["refresh_unpublished"] = '%s Resources were unpublished.'; -$_lang["release_date"] = 'Release date'; -$_lang["remember_last_tab"] = 'Remember tabs'; -$_lang["remember_last_tab_message"] = 'Tabbed Manager pages load with the last tab viewed instead of defaulting to the first tab'; -$_lang["remember_username"] = 'Remember me'; -$_lang["remove"] = 'Remove'; -$_lang["remove_date"] = 'Remove date'; -$_lang["remove_locks"] = 'Remove Locks'; -$_lang["rename"] = 'Rename'; -$_lang["reports"] = 'Reports'; -$_lang["report_issues"] = 'Report issues'; -$_lang["require_tagname"] = 'A tag name is required'; -$_lang["require_tagvalue"] = 'A tag value is required'; -$_lang["reserved_name_warning"] = 'You have used a reserved name.'; -$_lang["reset"] = 'Reset'; -$_lang["reset_failedlogins"] = 'reset'; -$_lang["reset_sort_order"] = 'Reset sort order'; -$_lang["resource"] = 'Resource'; -$_lang["resource_alias"] = 'URL alias'; -$_lang["resource_alias_help"] = 'Set the URL alias to make the Resource accessible as http://example.com/weburl. This only works Friendly URLs are enabled in the site configuration.'; -$_lang["resource_content"] = 'Resource content'; -$_lang["resource_description"] = 'Description'; -$_lang["resource_description_help"] = 'Enter an optional description of this Resource.'; -$_lang["resource_duplicate"] = 'Duplicate Resource'; -$_lang["resource_long_title_help"] = 'Enter an optional longer title for your Resource. This can be used for automatic Resource header tags for search engines, and might be more descriptive for your Resource.'; -$_lang["resource_metatag_help"] = 'Select the META tags or keywords you wish to assign to this Resource. Hold down the CTRL key to select multiple keywords or meta tags.'; -$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; -$_lang["resource_opt_contentdispo_help"] = 'Use the content disposition field to specify how this Resource will be handled by the web browser. For file downloads select the Attachment option.'; -$_lang["resource_opt_emptycache"] = 'Empty cache'; -$_lang["resource_opt_emptycache_help"] = 'Leaving this field checked will make EVO empty the cache after you save the Resource. This way your visitors will not see an older version of the Resource.'; -$_lang["resource_opt_folder"] = 'Container'; -$_lang["resource_opt_folder_help"] = 'Check this to make the Resource also act as a Container for other Resources. A \'Container\' is like a folder, only it can also have content.'; -$_lang["resource_opt_menu_index"] = 'Menu index'; -$_lang["resource_opt_menu_index_help"] = 'Menu Index is a field that can control sorting Resources, particularly in menu Snippet(s). You can also use it for any other purpose in your Snippets.'; -$_lang["resource_opt_menu_title"] = 'Menu title'; -$_lang["resource_opt_menu_title_help"] = 'Menu title is an optional field used to display a short title in menu Snippet(s) or Modules.'; -$_lang["resource_opt_published"] = 'Published'; -$_lang["resource_opt_published_help"] = 'Check this field to have the Resource published immediately after saving it.'; -$_lang["resource_opt_richtext"] = 'Rich text'; -$_lang["resource_opt_richtext_help"] = 'Leave this checked to use the rich text editor for editing Resources. If your Resources contain JavaScript and forms, uncheck this to edit in HTML mode to prevent the editor from incorrectly changing your Resources.'; -$_lang["resource_opt_show_menu"] = 'Show in menu'; -$_lang["resource_opt_show_menu_help"] = 'Select this option to show Resource inside a web menu. Please note that some Menu Builders might choose to ignore this option.'; -$_lang["resource_opt_trackvisit_help"] = 'Log each visitor\'s visit to this page'; -$_lang["resource_overview"] = 'Resource overview'; -$_lang["resource_parent"] = 'Resource parent'; -$_lang["resource_parent_help"] = 'Click the icon to enable setting a Resource parent, then click a Resource in the Site Tree to set a new parent.'; -$_lang["resource_permissions_error"] = 'Assign this Resource to at least one Resource Group to which you have access.'; -$_lang["resource_setting"] = 'Resource setting'; -$_lang["resource_summary"] = 'Summary (introtext)'; -$_lang["resource_summary_help"] = 'Type a brief summary of the Resource'; -$_lang["resource_title"] = 'Title'; -$_lang["resource_title_help"] = 'Enter the name/title of the Resource. Avoid using backslashes in the name.'; -$_lang["resource_to_be_moved"] = 'Resource to be moved'; -$_lang["resource_type"] = 'Resource Type'; -$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another EVO Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; -$_lang["resource_type_weblink"] = 'Weblink'; -$_lang["resource_type_webpage"] = 'Web page'; -$_lang["resource_weblink_help"] = 'Type the address of the object you wish to reference with this Weblink here. Alternatively insert from the File Browser or use the link selection icon and select a resource from the Site Tree.'; -$_lang["resources_in_container"] = 'Resources in this Container'; -$_lang["resources_in_container_no"] = 'This Container does not have child-Resources.'; -$_lang["role"] = 'Role'; -$_lang["role_about"] = 'View the about page'; -$_lang["role_access_persmissions"] = 'Access permissions'; -$_lang["role_actionok"] = 'View action completed screen'; -$_lang["role_assets_images"] = 'Manage assets/images'; -$_lang["role_assets_files"] = 'Manage assets/files'; -$_lang["role_bk_manager"] = 'Use the Backup Manager'; -$_lang["role_cache_refresh"] = 'Empty the site\'s cache'; -$_lang["role_category_manager"] = 'Use the Category Manager'; -$_lang["role_change_password"] = 'Change password'; -$_lang["role_change_resourcetype"] = 'Change Resource-Type'; -$_lang["role_chunk_management"] = 'Chunk management'; -$_lang["role_config_management"] = 'Configuration management'; -$_lang["role_content_management"] = 'Content management'; -$_lang["role_create_chunk"] = 'Create new Chunks'; -$_lang["role_create_doc"] = 'Create new Resources'; -$_lang["role_create_plugin"] = 'Create new Plugins'; -$_lang["role_create_snippet"] = 'Create new Snippets'; -$_lang["role_create_template"] = 'Create new site Templates'; -$_lang["role_credits"] = 'View credits'; -$_lang["role_delete_chunk"] = 'Delete Chunks'; -$_lang["role_delete_doc"] = 'Delete Resources'; -$_lang["role_delete_eventlog"] = 'Delete event log'; -$_lang["role_delete_module"] = 'Delete Module'; -$_lang["role_delete_plugin"] = 'Delete Plugins'; -$_lang["role_delete_role"] = 'Delete roles'; -$_lang["role_delete_snippet"] = 'Delete Snippets'; -$_lang["role_delete_template"] = 'Delete Templates'; -$_lang["role_delete_user"] = 'Delete manager users'; -$_lang["role_delete_web_user"] = 'Delete web users'; -$_lang["role_edit_chunk"] = 'Edit Chunks'; -$_lang["role_edit_doc"] = 'Edit a Resource'; -$_lang["role_edit_doc_metatags"] = 'Edit Resource META tags and keywords'; -$_lang["role_edit_module"] = 'Edit Module'; -$_lang["role_edit_plugin"] = 'Edit Plugins'; -$_lang["role_edit_role"] = 'Edit roles'; -$_lang["role_edit_settings"] = 'Change site settings'; -$_lang["role_edit_snippet"] = 'Edit Snippets'; -$_lang["role_edit_template"] = 'Edit site Templates'; -$_lang["role_edit_user"] = 'Edit manager users'; -$_lang["role_edit_web_user"] = 'Edit web users'; -$_lang["role_empty_trash"] = 'Permanently purge deleted Resources'; -$_lang["role_errors"] = 'View error dialog'; -$_lang["role_eventlog_management"] = 'Event log management'; -$_lang["role_export_static"] = 'Export Static HTML'; -$_lang["role_file_management"] = 'File Management'; -$_lang["role_file_manager"] = 'Use the file manager (full root access)'; -$_lang["role_frames"] = 'Request manager frames'; -$_lang["role_help"] = 'View help pages'; -$_lang["role_home"] = 'Request manager intro page'; -$_lang["role_import_static"] = 'Import HTML'; -$_lang["role_logout"] = 'Log out of the manager'; -$_lang["role_manage_metatags"] = 'Manage site META tags and keywords'; -$_lang["role_management_msg"] = 'Choose the role you wish to edit.'; -$_lang["role_management_title"] = 'Roles'; -$_lang["role_messages"] = 'View and send messages'; -$_lang["role_module_management"] = 'Module management'; -$_lang["role_name"] = 'Role name'; -$_lang["role_new_module"] = 'Create new Module'; -$_lang["role_new_role"] = 'Create new roles'; -$_lang["role_new_user"] = 'Create new manager users'; -$_lang["role_new_web_user"] = 'Create new web users'; -$_lang["role_plugin_management"] = 'Plugin management'; -$_lang["role_publish_doc"] = 'Publish Resources'; -$_lang["role_remove_locks"] = 'Remove Locks'; -$_lang["role_role_management"] = 'Roles'; -$_lang["role_run_module"] = 'Run Module'; -$_lang["role_save_chunk"] = 'Save Chunks'; -$_lang["role_save_doc"] = 'Save Resources'; -$_lang["role_save_module"] = 'Save Module'; -$_lang["role_save_password"] = 'Save password'; -$_lang["role_save_plugin"] = 'Save Plugins'; -$_lang["role_save_role"] = 'Save roles'; -$_lang["role_save_snippet"] = 'Save Snippets'; -$_lang["role_save_template"] = 'Save Templates'; -$_lang["role_save_user"] = 'Save manager users'; -$_lang["role_save_web_user"] = 'Save web users'; -$_lang["role_snippet_management"] = 'Snippet management'; -$_lang["role_template_management"] = 'Template management'; -$_lang["role_title"] = 'Create/edit role'; -$_lang["role_udperms"] = 'Permissions management'; -$_lang["role_user_management"] = 'Manager user management'; -$_lang["role_view_docdata"] = 'View a Resource\'s data'; -$_lang["role_view_eventlog"] = 'View event log'; -$_lang["role_view_logs"] = 'View system logs'; -$_lang["role_view_unpublished"] = 'View Unpublished Resources'; -$_lang["role_web_access_persmissions"] = 'Web access permissions'; -$_lang["role_web_user_management"] = 'Web user management'; -$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'Enter the URL for the EVO News Feed.'; -$_lang["rss_url_news_title"] = 'RSS News Feed'; -$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'Enter the URL for the EVO Security Feed.'; -$_lang["rss_url_security_title"] = 'RSS Security Feed'; -$_lang["run_module"] = 'Run Module'; -$_lang["saturday"] = 'Saturday'; -$_lang["save"] = 'Save'; -$_lang["save_all_changes"] = 'Save all changes'; -$_lang["save_tag"] = 'Save tag'; -$_lang["saving"] = 'Saving, please wait...'; -$_lang["search"] = 'Search'; -$_lang["search_criteria"] = 'Search criteria'; -$_lang["search_criteria_content"] = 'Search by content'; -$_lang["search_criteria_content_msg"] = 'Find all Resources with the entered text in their content.'; -$_lang["search_criteria_id"] = 'Search by ID'; -$_lang["search_criteria_id_msg"] = 'Enter a Resource\'s ID to quickly locate that Resource.'; -$_lang["search_criteria_top"] = 'Search in main fields'; -$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; -$_lang["search_criteria_template_id"] = 'Search by template ID'; -$_lang["search_criteria_template_id_msg"] = 'Find all Resources using the specified template.'; -$_lang["search_criteria_url_msg"] = 'Find Resource by exact URL.'; -$_lang["search_criteria_longtitle"] = 'Search by long title'; -$_lang["search_criteria_longtitle_msg"] = 'Find all Resources with the entered text in their long title.'; -$_lang["search_criteria_title"] = 'Search by title'; -$_lang["search_criteria_title_msg"] = 'Find all Resources with the entered text in their title.'; -$_lang["search_empty"] = 'Your search returned no results. Please broaden your search criteria and try again.'; -$_lang["search_item_deleted"] = 'This item has been deleted'; -$_lang["search_results"] = 'Search results'; -$_lang["search_results_returned_desc"] = 'Description'; -$_lang["search_results_returned_id"] = 'ID'; -$_lang["search_results_returned_msg"] = 'Your search criteria returned %s Resources. If a lot of results are being returned, try to enter a more specific search. The two left-most columns will allow you to find the Resource in the Site Tree or view the Resource. The two right most columns show, respectively, if a Resource has been deleted and what it\'s published status is.

          '; -$_lang["search_results_returned_title"] = 'Title'; -$_lang["search_view_docdata"] = 'View this item'; -$_lang["security"] = 'Users'; -$_lang["security_notices_tab"] = 'Security Notices'; -$_lang["security_notices_title"] = 'Security Notices'; -$_lang["select_date"] = 'Select a date'; -$_lang["send"] = 'Send'; -$_lang["server_protocol_http"] = 'http'; -$_lang["server_protocol_https"] = 'https'; -$_lang["server_protocol_message"] = 'If your site is on a https connection, please specify so here.'; -$_lang["server_protocol_title"] = 'Server type'; -$_lang["serveroffset"] = 'Server offset'; -$_lang["serveroffset_message"] = 'Select the number of hours time difference between where you are and where the server is. Current time on server is [%s], current time on server using the currently saved offset is [%s].'; -$_lang["serveroffset_title"] = 'Server offset time'; -$_lang["servertime"] = 'Server Time'; -$_lang["set_automatic"] = 'Set automatic'; -$_lang["set_default"] = 'Set default'; -$_lang["set_default_all"] = 'Set defaults'; -$_lang["settings_after_install"] = 'As this is a new install, you are required to review these settings and change any that you wish to. After you have reviewed the settings, press \'Save\' to update the settings database.'; -$_lang["settings_config"] = 'Configuration'; -$_lang["settings_dependencies"] = 'Dependencies'; -$_lang["settings_events"] = 'System Events'; -$_lang["settings_furls"] = 'Friendly URLs'; -$_lang["settings_general"] = 'General'; -$_lang["settings_group_tv_message"] = 'Choose if Template Variables should be grouped in sections or tabs (named by TV category) when editing a Resource'; -$_lang["settings_group_tv_options"] = 'No,Sections in General tab,Tabs in General tab,Sections in new tab,Tabs in new tab,New tabs'; -$_lang["settings_misc"] = 'File Manager'; -$_lang["settings_security"] = 'Security'; -$_lang["settings_KC"] = 'File Browser'; -$_lang["settings_page_settings"] = 'Settings'; -$_lang["settings_photo"] = 'Photo'; -$_lang["settings_properties"] = 'Properties'; -$_lang["show_fullscreen_btn_message"] = 'Show Menu toggle Fullscreen button'; -$_lang["show_newresource_btn_message"] = 'Show Menu New Resource button'; -$_lang["settings_show_picker_message"] = 'Customize manager theme and save to localstorage'; -$_lang["show_fullscreen_btn"] = 'Toggle Fullscreen button'; -$_lang["show_newresource_btn"] = 'New Resource button'; -$_lang["settings_site"] = 'Site'; -$_lang["settings_strip_image_paths_message"] = 'If this is set to \'No\', EVO will write file browser src\'s (images, files, flash, etc.) as absolute URLs. Relative URLs are helpful should you wish to move your EVO install, e.g., from a staging site to a production site. If you have no idea what this means, it\'s best just to leave it set to \'Yes\'.'; -$_lang["settings_strip_image_paths_title"] = 'Rewrite browser paths?'; -$_lang["settings_templvars"] = 'Template Variables'; -$_lang["settings_title"] = 'System configuration'; -$_lang["settings_ui"] = 'Interface & Features'; -$_lang["settings_users"] = 'User'; -$_lang["show_meta"] = 'Show META Keywords tab'; -$_lang["show_meta_message"] = 'Show the deprecated META Keywords tab when editing Resources in the Manager.'; -$_lang["show_tree"] = 'Show Site Tree'; -$_lang["show_picker"] = 'Show Color Switcher'; -$_lang["showing"] = 'Showing'; -$_lang["signupemail_message"] = 'Set the email message sent to users when creating accounts including their username and password.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your users won\'t know their username or password!'; -$_lang["signupemail_title"] = 'Signup e-mail'; -$_lang["site"] = 'Site'; -$_lang["site_schedule"] = 'Schedule'; -$_lang["sitename_message"] = 'Enter the name of your site here.'; -$_lang["sitename_title"] = 'Site name'; -$_lang["sitestart_message"] = 'Enter the ID of the Resource you want to use as homepage here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; -$_lang["sitestart_title"] = 'Site start'; -$_lang["sitestatus_message"] = 'Select \'Online\' to publish your site on the web. If you select \'Offline\', your visitors will see the \'Site unavailable message\', and won\'t be able to browse the site.'; -$_lang["sitestatus_title"] = 'Site status'; -$_lang["siteunavailable_message"] = 'Message to show when the site is offline or if an error occurs. Note: This message will only be displayed if the Site unavailable page option is not set.'; -$_lang["siteunavailable_message_default"] = 'The site is currently unavailable.'; -$_lang["siteunavailable_page_message"] = 'Enter the ID of the Resource you want to use as an offline page here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; -$_lang["siteunavailable_page_title"] = 'Site unavailable page'; -$_lang["siteunavailable_title"] = 'Site unavailable message'; -$_lang["snippet"] = 'Snippet'; -$_lang["snippets"] = 'Snippets'; -$_lang["snippet_code"] = 'Snippet code (php)'; -$_lang["snippet_desc"] = 'Description'; -$_lang["snippet_execonsave"] = 'Execute Snippet after saving.'; -$_lang["snippet_management_msg"] = 'Choose the Snippet you wish to edit.'; -$_lang["snippet_msg"] = 'Add/edit Snippets. Remember, Snippets are \'raw\' PHP code, and if you expect the output of the Snippet to be shown at a certain point within the Template, you need to return a value from within the Snippet.'; -$_lang["snippet_name"] = 'Snippet name'; -$_lang["snippet_properties"] = 'Default Properties'; -$_lang["snippet_title"] = 'Create/edit Snippet'; -$_lang["sort_alphabetically"] = 'Sort alphabetically'; -$_lang["sort_asc"] = 'Ascending'; -$_lang["sort_desc"] = 'Descending'; -$_lang["sort_menuindex"] = 'Sort menu index'; -$_lang["sort_tree"] = 'Sort the Site Tree'; -$_lang['sort_updating'] = 'Updating ...'; -$_lang['sort_updated'] = 'Updated!'; -$_lang['sort_nochildren'] = 'Parent does not have any children'; -$_lang["sort_elements_msg"] = 'Drag to reorder the listed elements.'; -$_lang["source"] = 'Source'; -$_lang["stay"] = 'Continue editing'; -$_lang["stay_new"] = 'Add another'; -$_lang["submit"] = 'Submit'; -$_lang["sunday"] = 'Sunday'; -$_lang["sys_alert"] = 'System Alert'; -$_lang["sysinfo_activity_message"] = 'This list show which Resources have been recently edited by your users.'; -$_lang["sysinfo_userid"] = 'User'; -$_lang["system"] = 'System'; -$_lang["system_email_signup"] = ' - -Hello [+uid+] - -Here are your login details for [+sname+] Content Manager: - -Username: [+uid+] -Password: [+pwd+] - -Once you log into the Content Manager ([+surl+]), you can change your password. - -Regards, -Site Administrator -'; -$_lang["system_email_webreminder"] = 'Hello [+uid+] - -To activate your new password click the following link: - -[+surl+] - -If successful you can use the following password to login: - -Password:[+pwd+] - -If you did not request this email then please ignore it. - -Regards, -Site Administrator'; -$_lang["system_email_websignup"] = 'Hello [+uid+] - -Here are your login details for [+sname+]: - -Username: [+uid+] -Password: [+pwd+] - -Once you log into [+sname+] ([+surl+]), you can change your password. - -Regards, -Site Administrator'; -$_lang["table_hoverinfo"] = 'Hover the mouse cursor over a table\'s name to see a short description of the table\'s function (not all tables have comments set).'; -$_lang["table_prefix"] = 'Table prefix'; -$_lang["tag"] = 'Tag'; -$_lang["template"] = 'Template'; -$_lang["templates"] = 'Templates'; -$_lang["template_assignedtv_tab"] = 'Assigned Template Variables'; -$_lang["template_code"] = 'Template code (html)'; -$_lang["template_desc"] = 'Description'; -$_lang["template_edit_tab"] = 'Edit Template'; -$_lang["template_management_msg"] = 'Choose which Template you wish to edit.'; -$_lang["template_msg"] = 'Create and edit Templates. Changed or new Templates won\'t be visible in your site\'s cached pages until the cache is emptied, however, you can use the preview function on a page to see the Template in action.'; -$_lang["template_name"] = 'Template name'; -$_lang["template_no_tv"] = 'No Template Variables have been assigned to this Template yet.'; -$_lang["template_notassigned_tv"] = 'These Template Variables are available for assigning.'; -$_lang["template_reset_all"] = 'Reset all pages to use Default Template'; -$_lang["template_reset_specific"] = 'Reset only \'%s\' pages'; -$_lang["template_selectable"] = 'Template selectable when creating or editing ressources.'; -$_lang["template_title"] = 'Create/edit Template'; -$_lang["template_tv_edit"] = 'Edit the TV sort order'; -$_lang["template_tv_edit_message"] = 'Drag to reorder the Template Variables for this template.'; -$_lang["template_tv_edit_title"] = 'Template Variable Sort Order'; -$_lang["template_tv_msg"] = 'The Template Variables assigned to this Template are listed below.'; -$_lang["thursday"] = 'Thursday'; -$_lang["tmplvar_access_msg"] = 'Select the Resource Groups that are allowed to modify the content or value of this Template Variable'; -$_lang["tmplvar_change_template_msg"] = 'Changing this Template will cause the page to reload the Template Variables, losing any unsaved changes.\n\n Are you sure you want to change this Template?'; -$_lang["tmplvar_inuse"] = 'The following Resource(s) are currently using this Template Variable. To continue with the delete operation click the Delete button otherwise click the Cancel button.'; -$_lang["tmplvar_tmpl_access"] = 'Template Access'; -$_lang["tmplvar_tmpl_access_msg"] = 'Select the Templates that are allowed to access/process this Template Variable'; -$_lang["tmplvar"] = 'Template Variable'; -$_lang["tmplvars"] = 'Template Variables'; -$_lang["tmplvars_binding_msg"] = 'This field supports data source bindings using the @ commands'; -$_lang["tmplvars_caption"] = 'Caption'; -$_lang["tmplvars_default"] = 'Default Value'; -$_lang["tmplvars_description"] = 'Description'; -$_lang["tmplvars_elements"] = 'Input Option Values'; -$_lang["tmplvars_inherited"] = 'Value inherited'; -$_lang["tmplvars_management_msg"] = 'Manage additional Template Variables for your Resources.'; -$_lang["tmplvars_msg"] = 'Add or edit Template Variables here. Template Variables must be assigned to Templates in order to access them from Snippets and Resources.'; -$_lang["tmplvars_name"] = 'Template Variable Name'; -$_lang["tmplvars_novars"] = 'No Template Variables found'; -$_lang["tmplvars_rank"] = 'Sort Order'; -$_lang["tmplvars_rank_edit_message"] = 'Drag to reorder the Template Variables.'; -$_lang["tmplvars_reset_params"] = 'Reset parameters'; -$_lang["tmplvars_title"] = 'Create/edit Template Variable'; -$_lang["tmplvars_type"] = 'Input Type'; -$_lang["tmplvars_widget"] = 'Widget'; -$_lang["tmplvars_widget_prop"] = 'Widget Properties'; -$_lang["to"] = 'to'; -$_lang["toggle_fullscreen"] = 'Toggle Fullscreen'; -$_lang["tools"] = 'Tools'; -$_lang["top_howmany_message"] = 'When viewing reports, how large should the \'Top ...\' lists be?'; -$_lang["top_howmany_title"] = 'Top how many'; -$_lang["total"] = 'total'; -$_lang["track_visitors_message"] = 'Check to show the child resources in the document tree'; -$_lang["track_visitors_title"] = 'Show child resources'; -$_lang["tree_page_click"] = 'Page Click Behavior'; -$_lang["tree_page_click_message"] = 'The default behavior when clicking on a page in the site tree.'; -$_lang["use_breadcrumbs"] = 'Show navigation'; -$_lang["use_breadcrumbs_message"] = 'Show the navigation when creating or editing Resource in the Manager'; -$_lang["tree_show_protected"] = 'Show protected pages'; -$_lang["tree_show_protected_message"] = 'When set to "No", Protected Resources (and all their child-Resources) do not appear in the Site Tree menu. "No" is the legacy setting for EVO.'; -$_lang["truncate_table"] = 'Click here to truncate this table'; -$_lang["tuesday"] = 'Tuesday'; -$_lang["tv"] = 'TV'; -$_lang["type"] = 'Type'; -$_lang["udperms_allowroot_message"] = 'Allow Users to create new Resources in the site root. '; -$_lang["udperms_allowroot_title"] = 'Allow root'; -$_lang["udperms_message"] = 'Control access to Resources via User Groups and Resource Groups.'; -$_lang["udperms_title"] = 'Use access permissions'; -$_lang["unable_set_link"] = 'Unable to set the link!'; -$_lang["unable_set_parent"] = 'Unable to set new parent!'; -$_lang["unauthorizedpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect Users to when requesting a secured/unauthorized Resource.'; -$_lang["unauthorizedpage_title"] = 'Unauthorized page'; -$_lang["unblock_message"] = 'This User will not be blocked after saving the User\'s data.'; -$_lang["undelete_resource"] = 'Undelete Resource'; -$_lang["unpublish_date"] = 'Unpublish Date'; -$_lang["unpublish_events"] = 'Un-publish Events'; -$_lang["unpublish_resource"] = 'Un-publish Resource'; -$_lang["untitled_resource"] = 'Untitled Resource'; -$_lang["untitled_weblink"] = 'Untitled Weblink'; -$_lang["update_params"] = 'Update parameter display'; -$_lang["update_settings_from_language"] = 'Replace current with:'; -$_lang["upload_maxsize_message"] = 'Enter the maximum file size that can be uploaded via the file manager. Upload file size must be entered in bytes. NOTE: Large files can take a very long time to upload!'; -$_lang["upload_maxsize_title"] = 'Maximum upload size'; -$_lang["uploadable_files_message"] = 'Enter a list of files that can be uploaded into \'assets/files/\' using the File Browser. Please enter the extensions for the filetypes, separated by commas.'; -$_lang["uploadable_files_title"] = 'Uploadable File Types'; -$_lang["uploadable_flash_message"] = 'Enter a list of files that can be uploaded into \'assets/flash/\' using the File Browser. Please enter the extensions for the flash types, separated by commas.'; -$_lang["uploadable_flash_title"] = 'Uploadable Flash Types'; -$_lang["uploadable_images_message"] = 'Enter a list of files that can be uploaded into \'assets/images/\' using the File Browser. Please enter the extensions for the image types, separated by commas.'; -$_lang["uploadable_images_title"] = 'Uploadable Image Types'; -$_lang["uploadable_media_message"] = 'Enter a list of files that can be uploaded into \'assets/media/\' using the File Browser. Please enter the extensions for the media types, separated by commas.'; -$_lang["uploadable_media_title"] = 'Uploadable Media Types'; -$_lang["use_alias_path_message"] = 'Enabling this option generates a virtual path to the Resource. E.g., if a Resource "child.html" is located in a Container Resource "parent", then the full URL alias path URL will be "/parent/child.html".'; -$_lang["use_alias_path_title"] = 'Use Friendly URL alias path'; -$_lang["use_editor_message"] = 'Enable editing with a Rich Text Editor (RTE). This setting applies to all Resources, but can be overridden in the User settings.'; -$_lang["use_editor_title"] = 'Enable editor'; -$_lang["use_global_tabs"] = 'Use global Tabs'; -$_lang["user"] = 'User'; -$_lang["user_block"] = 'Blocked'; -$_lang["user_blockedafter"] = 'Blocked After'; -$_lang["user_blockeduntil"] = 'Blocked Until'; -$_lang["user_changeddata"] = 'Your data has been changed. Please log in again.'; -$_lang["user_country"] = 'Country'; -$_lang["user_dob"] = 'Date of birth'; -$_lang["user_doesnt_exist"] = 'User does not exist'; -$_lang["user_edit_self_msg"] = 'You may need to log out and log in again after saving to fully update your information. New passwords will be sent to your e-mail address or shown onscreen.'; -$_lang["user_email"] = 'E-mail address'; -$_lang["user_failedlogincount"] = 'Failed logins'; -$_lang["user_fax"] = 'Fax'; -$_lang["user_female"] = 'Female'; -$_lang["user_full_name"] = 'Full name'; -$_lang["user_gender"] = 'Gender'; -$_lang["user_is_blocked"] = 'This User is blocked!'; -$_lang["user_logincount"] = 'Number of logins'; -$_lang["user_male"] = 'Male'; -$_lang["user_management_msg"] = 'Choose the Content Manager to edit. Content Manager Users are those Users who are allowed to log into the Content Manager'; -$_lang["user_management_title"] = 'Manager Users'; -$_lang["user_mobile"] = 'Mobile phone number'; -$_lang["user_phone"] = 'Phone number'; -$_lang["user_photo"] = 'User Photo'; -$_lang["user_photo_message"] = 'Enter the image url for the this User or use the insert button to selected or upload an image file on the server.'; -$_lang["user_prevlogin"] = 'Last login'; -$_lang["user_role"] = 'User\'s role'; -$_lang["user_state"] = 'State'; -$_lang["user_title"] = 'Create/Edit Manager User'; -$_lang["user_upload_message"] = ' If you wish to stop this User uploading any filetypes in this category, make sure that the \'Use Main Configuration Setting\' checkbox is not ticked and leave the field blank.'; -$_lang["user_use_config"] = 'Use System Configuration Setting'; -$_lang["user_zip"] = 'Zip'; -$_lang["username"] = 'Username'; -$_lang["users"] = 'Users'; -$_lang["valid_hostnames_message"] = 'Help prevent XSS exploits misusing the site_url system setting by providing a comma separated list of valid hostnames for this installation. This is important for some types of shared hosts or hosts direct accessible via an IP address. First hostname in the list is used if the HTTP_HOST does not match any valid hostname.'; -$_lang["valid_hostnames_title"] = 'Valid hostnames'; -$_lang["validate_referer_message"] = 'Validate the HTTP_REFERER headers to reduce the risk of your content editors being tricked into performing unintended actions in the manager as victims of a CSRF (Cross Site Request Forgery) attack. Some configurations may not be able to use this option if the server is not sending HTTP_REFERER headers.'; -$_lang["validate_referer_title"] = 'Validate HTTP_REFERER headers?'; -$_lang["value"] = 'Value'; -$_lang["version"] = 'Version'; -$_lang["view"] = 'View'; -$_lang["view_child_resources_in_container"] = 'View children'; -$_lang["view_log"] = 'View log'; -$_lang["view_logging"] = 'Manager Actions'; -$_lang["view_sysinfo"] = 'System Info'; -$_lang["warning"] = 'Warning!'; -$_lang["warning_not_saved"] = 'The changes you have made have not been saved yet. You can choose to stay on the current page in order to save the changes (\'Cancel\'), or you can leave this page, losing any changes you have made (\'OK\').'; -$_lang["warning_visibility"] = 'Configuration Warnings visible to'; -$_lang["warning_visibility_message"] = 'Control the visibility of the configuration warnings shown on the Manager welcome page'; -$_lang["web_access_permissions"] = 'Web access permissions'; -$_lang["web_access_permissions_user_groups"] = 'Web User groups'; -$_lang["web_permissions"] = 'Web Permissions'; -$_lang["web_user_management_msg"] = 'Choose the web User you wish to edit. Web Users are those Users who are only allowed to log into the web site'; -$_lang["web_user_management_title"] = 'Web Users'; -$_lang["web_user_title"] = 'Create/edit Web User'; -$_lang["web_users"] = 'Web Users'; -$_lang["weblink"] = 'Weblink'; -$_lang["webpwdreminder_message"] = 'Enter a message to be sent to your Web Users whenever they request a new password via email. The Content Manager will send an e-mail containing their new password and activation information.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; -$_lang["webpwdreminder_title"] = 'Web Reminder Email'; -$_lang["websignupemail_message"] = 'Set the email message sent to Users when creating accounts including their username and password
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; -$_lang["websignupemail_title"] = 'Web Signup e-mail'; -$_lang["wednesday"] = 'Wednesday'; -$_lang["welcome_messages"] = 'Your Inbox contains %d message(s), of which %s are unread.'; -$_lang["welcome_title"] = 'Welcome to your EVO Content Manager'; -$_lang["which_editor_message"] = 'Select the rich text editor (RTE). You can download and install additional RTEs from the EVO download page.'; -$_lang["which_editor_title"] = 'Editor to use'; -$_lang["working"] = 'Working...'; -$_lang["wrap_lines"] = 'Wrap lines'; -$_lang["xhtml_urls_message"] = 'Replaces ampersand (&) characters in urls that are generated by EVO with the validating &amp; htmlentity'; -$_lang["xhtml_urls_title"] = 'XHTML URLs'; -$_lang["yes"] = 'Yes'; -$_lang["you_got_mail"] = 'You got mail'; -$_lang["yourinfo_message"] = 'This section shows some information about you:'; -$_lang["yourinfo_previous_login"] = 'Your last login:'; -$_lang["yourinfo_role"] = 'Your role is:'; -$_lang["yourinfo_title"] = 'Your info'; -$_lang["yourinfo_total_logins"] = 'Total number of logins:'; -$_lang["yourinfo_username"] = 'You are logged in as:'; - -$_lang["a17_error_reporting_title"] = 'Detection level of PHP errors'; -$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP errors.'; -$_lang["a17_error_reporting_opt0"] = 'Ignore all'; -$_lang["a17_error_reporting_opt1"] = 'Ignore warnings of a slight notice level (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; -$_lang["a17_error_reporting_opt2"] = 'Detect all errors except E_NOTICE'; -$_lang["a17_error_reporting_opt99"] = 'Detect all'; - -$_lang["pwd_hash_algo_title"] = 'Hash algorithm'; -$_lang["pwd_hash_algo_message"] = 'Password hash algorithm.'; - -$_lang["enable_bindings_title"] = 'Enable @Bindings commands'; -$_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; -$_lang["enable_filter_title"] = 'Enable filters'; -$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation -$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; - -$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; - -$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; -$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; - -$_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          Database tables could be restored by SQL:

          '; -$_lang["bkmgr_restore_title"] = 'Restore'; -$_lang["bkmgr_import_ok"] = 'SQL recovery was performed normally.'; -$_lang["bkmgr_snapshot_ok"] = 'The snapshot was saved normally.'; -$_lang["bkmgr_run_sql_file_label"] = 'Execute by SQL file'; -$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL commands'; -$_lang["bkmgr_run_sql_submit"] = 'Execute restore'; -$_lang["bkmgr_run_sql_result"] = 'Result'; -$_lang["bkmgr_snapshot_title"] = 'Snapshot save and recovery'; -$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved in and restored from a server directory.
          Location: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; -$_lang["bkmgr_snapshot_submit"] = 'Add Snapshot'; -$_lang["bkmgr_snapshot_list_title"] = 'List of snapshots'; -$_lang["bkmgr_restore_submit"] = 'Revert this data'; -$_lang["bkmgr_restore_confirm"] = 'Are you sure you want to revert backup\n[+filename+] ?'; -$_lang["bkmgr_snapshot_nothing"] = 'No snapshots available'; - -$_lang["files.dynamic.php1"] = 'New Text File'; -$_lang["files.dynamic.php2"] = 'This directory cannot be displayed.'; -$_lang["files.dynamic.php3"] = 'There is a problem in a file name.'; -$_lang["files.dynamic.php4"] = 'The text file was created.'; -$_lang["files.dynamic.php5"] = 'File could not be duplicated.'; -$_lang["files.dynamic.php6"] = 'File or directory could not be renamed.'; -$_lang["files_dynamic_new_folder_name"] = 'Enter new directory name:'; -$_lang["files_dynamic_new_file_name"] = 'Enter new file name:'; -$_lang["not_readable_dir"] = 'Can not read this directory.'; -$_lang["confirm_delete_dir"] = 'Are you sure you want to delete the directory?'; -$_lang["confirm_delete_dir_recursive"] = 'Are you sure you want to delete this directory?\n\nAll files inside this directory will also be deleted.'; - -$_lang["make_folders_title"] = 'End Container URL with Slash'; -$_lang["make_folders_message"] = 'Append trailing slash to Resources that are set as containers when using Friendly URLs.'; - -$_lang["check_files_onlogin_title"] = 'Check core files on login'; -$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised EVO system file and website.'; - -$_lang["configcheck_sysfiles_mod"] = 'Important System Files have been modified.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'You have configured EVO to check important system files for possible website script attacks. This warning does not necessarily mean your site has been compromised, however, you should review the watched files in your installation (set in System configuration -> User -> Check core files on login). If you find your files unaltered or changes were made by site administrators, go to System Configuration and click to re-save settings to dismiss this message. Changes in the following files have been found:'; - -$_lang['email_method_title'] = 'Sendmail method'; -$_lang['email_method_mail'] = 'PHP mail() function'; -$_lang['email_method_smtp'] = 'SMTP Server'; -$_lang['smtp_auth_title'] = 'SMTP-AUTH'; -$_lang['smtp_host_title'] = 'SMTP host'; -$_lang['smtp_secure_title'] = 'Encrypted SMTP'; -$_lang['smtp_username_title'] = 'SMTP user name'; -$_lang['smtp_password_title'] = 'SMTP password'; -$_lang['smtp_port_title'] = 'SMTP port'; - -$_lang["setting_resource_tree_node_name"] = 'Display Name in Resource Tree'; -$_lang["setting_resource_tree_node_name_desc"] = 'Select the Resource field to show as the Resource name in the Resource Tree. The default setting is pagetitle.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Note: Since EVO 1.1 you can change this Display Name within Resource-Tree´s sorting option. This setting is used when Display Name in Resource Tree is set to "Default".'; - -$_lang["resource_opt_alvisibled"] = 'Use current alias in alias path'; -$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; -$_lang['resource_opt_is_published'] = 'Published'; -$_lang["docid_incrmnt_method_title"] = 'Increment Resource ID method'; -$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; -$_lang["docid_incrmnt_method_1"] = 'Minimum missed ID'; -$_lang["docid_incrmnt_method_2"] = 'Maximal ID + 1'; - -$_lang["enable_cache_title"] = 'Document caching'; -$_lang["disabled_at_login"] = 'Disabled at login'; - -$_lang["cache_type_title"] = 'Document caching type'; -$_lang["cache_type_1"] = 'Cache is based only on Resource ID (standard)'; -$_lang["cache_type_2"] = 'Cache is based on Resource ID and $_GET parameters'; -$_lang["seostrict_title"] = 'Use SEO Strict URLs'; -$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content (if needed)'; -$_lang["aliaslistingfolder_title"] = 'Use AliasListing only for Folders'; -$_lang["aliaslistingfolder_message"] = 'Reduces memory consumption when a large number of resources'; - -$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file in the EVO installation directory at .htaccess to use the Friendly URL function.'; -$_lang["settings_friendlyurls_alert2"] = 'Since EVO was installed in a subdirectory, it is necessary to change the content of .htaccess.'; - -$_lang["user_street"] = 'Street'; -$_lang["user_city"] = 'City'; -$_lang["user_other"] = 'Other'; - -$_lang["import_site.static.php1"] = 'Reset resource tree'; -$_lang["import_site.static.php2"] = 'Reset resource tree and initialize all Resource IDs.'; -$_lang["import_site.static.php3"] = 'Target'; -$_lang["import_site.static.php4"] = 'Only <body></body> part'; -$_lang["import_site.static.php5"] = 'Whole file content'; - -$_lang["a83_ignore_ids_title"] = 'Ignore IDs (comma separated)'; -$_lang["export_site.static.php1"] = 'Target'; -$_lang["export_site.static.php2"] = 'Only edited Resources'; -$_lang["export_site.static.php3"] = 'All Resources'; -$_lang["export_site.static.php4"] = 'Search for'; -$_lang["export_site.static.php5"] = 'Replace with'; -$_lang["export_site.static.php6"] = 'Target'; -$_lang["export_site.static.php7"] = 'Files could not be saved to [+rb_base_url+]'; - -$_lang["mutate_settings.dynamic.php6"] = 'Send mail on EVO errors'; -$_lang["mutate_settings.dynamic.php7"] = 'not notify'; -$_lang["mutate_settings.dynamic.php8"] = 'A mail with the error source will be sent to [(emailsender)] ([+emailsender+]) if a EVO error occurs. The details of the error could be seen in the EVO system events log.'; - -$_lang["error_no_privileges"] = "You don't have enough privileges for this action!"; -$_lang["error_no_optimise_tablename"] = "Table to optimise not found in request!"; -$_lang["error_no_truncate_tablename"] = "Table to truncate not found in request!"; -$_lang["error_double_action"] = "Double action (GET & POST) posted!"; -$_lang["error_no_id"] = "ID not passed in request!"; -$_lang["error_id_nan"] = "ID passed in request is NaN!"; -$_lang["error_no_parent"] = "Couldn't find parent document's name!"; -$_lang["error_many_results"] = "Too many results returned from database!"; -$_lang["error_no_results"] = "Not enough/ no results returned from database!"; -$_lang["error_no_user_selected"] = "No user selected as recipient of this message!"; -$_lang["error_no_group_selected"] = "No group selected as recipient of this message!"; -$_lang["error_movedocument1"] = "Document cannot be it's own parent!"; -$_lang["error_movedocument2"] = "Document's ID not passed in request!"; -$_lang["error_movedocument3"] = "New parent not set in request!"; -$_lang["error_internet_connection"] = "Server isn't available. Check your internet connection!"; - -$_lang["login_processor_unknown_user"] = "Incorrect username or password entered!"; -$_lang["login_processor_wrong_password"] = "Incorrect username or password entered!"; -$_lang["login_processor_many_failed_logins"] = "Due to too many failed logins, you have been blocked!"; -$_lang["login_processor_blocked1"] = "You are blocked and cannot log in!"; -$_lang["login_processor_blocked2"] = "You are blocked and cannot log in! Please try again later."; -$_lang["login_processor_blocked3"] = "You are blocked automatic after a specified date and you cannot log in anymore!"; -$_lang["login_processor_bad_code"] = "The security code you entered didn't validate! Please try to login again!"; -$_lang["login_processor_remotehost_ip"] = "Your hostname doesn't point back to your IP!"; -$_lang["login_processor_remote_ip"] = "You are not allowed to login from this location."; -$_lang["login_processor_date"] = "You are not allowed to login at this time. Please try again later."; -$_lang["login_processor_captcha_config"] = "Captcha is not configured properly."; - -$_lang["dp_dayNames"] = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']"; -$_lang["dp_monthNames"] = "['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']"; -$_lang["dp_startDay"] = "1"; - -$_lang["check_all"] = "Select all"; -$_lang["check_none"] = "Select none"; -$_lang["check_toggle"] = "Toggle selection"; - -$_lang["version_notices"] = "Version Notices"; - -$_lang["em_button_shift"] = " (Shift-Mouseclick to open multiple windows)"; - -$_lang["reset_sysfiles_checksum_button"] = "Rebuild Checksums"; -$_lang["reset_sysfiles_checksum_alert"] = "Are you sure you want to reset the system files checksums?"; - -$_lang["file_browser_disabled_msg"] = "The File Browser Feature is not enabled."; -$_lang["which_browser_default_title"]= "Default File Browser"; -$_lang["which_browser_default_msg"]= "Choose the File Browser you prefer as default. In User-Settings you can choose a Custom Browser per User, or leave it on "default"."; -$_lang["which_browser_title"]= "File Browser"; -$_lang["which_browser_msg"]= "You can choose a custom File Browser for this user. To use the System´s default Browser, leave it on "Default"."; -$_lang["option_default"] = "Default"; -$_lang["position"] = "Position"; -$_lang["are_you_sure"] = "Are you sure?"; - -$_lang['evo_downloads_title'] = "Evolution Downloads"; -$_lang['help_translating_title'] = "Help translating Evolution"; -$_lang['download'] = "Download"; -$_lang['downloads'] = "Downloads"; -$_lang["previous_releases"] = "Previous Releases"; -$_lang["extras"] = "Extras"; - -$_lang["display_locks"] = "Display Locks"; -$_lang["role_display_locks"] = "Display Locks"; -$_lang["session_timeout"] = "Session Timeout"; -$_lang["session_timeout_msg"] = "EVO will ping the server as per setting "Mail Check Time Period". If the last ping exceeds this setting, the associated session will be considered invalid and all related locks will be removed automatically. Set value in minutes (>2min, default 15min)."; -$_lang["unlock_element_id_warning"] = "Are you sure you want to unlock this [+element_type+] (ID [+id+])?"; -$_lang["lock_element_type_1"] = "Template"; -$_lang["lock_element_type_2"] = "Template-Variable"; -$_lang["lock_element_type_3"] = "Chunk"; -$_lang["lock_element_type_4"] = "Snippet"; -$_lang["lock_element_type_5"] = "Plugin"; -$_lang["lock_element_type_6"] = "Module"; -$_lang["lock_element_type_7"] = "Resource"; -$_lang["lock_element_type_8"] = "Role"; -$_lang["lock_element_editing"] = "You are editing this [+element_type+] since\n[+lasthit_df+]"; -$_lang["lock_element_locked_by"] = "This [+element_type+] is locked by user\n[+username+] since [+lasthit_df+]"; - -$_lang["minifyphp_incache_title"] = 'Minify php code in site cache'; -$_lang["minifyphp_incache_message"] = 'Minify php code (snippets and plugins) and store in the site cache file, ref:#938'; - -$_lang["logout_reminder_msg"] = "Reminder: It seems on [+date+] you forgot to logout. Please pay attention in future to do so after your work is finished."; - -$_lang["allow_eval_title"] = "Eval php code in snippet call"; -$_lang["allow_eval_msg"] = "For developer : Please use \$modx->safeEval()."; -$_lang["allow_eval_with_scan"] = "Execute only permitted functions"; -$_lang["allow_eval_with_scan_at_post"] = "Execute all. However, at POST, only permitted functions"; -$_lang["allow_eval_everytime_eval"] = "Unlimited (Use only for debugging)"; -$_lang["allow_eval_dont_eval"] = "Do not allow all functions"; - -$_lang["safe_functions_at_eval_title"] = "Functions to allow eval"; -$_lang["safe_functions_at_eval_msg"] = "Comma separated list"; - -$_lang["multiple_sessions_msg"] = "Information: Multiple active user sessions (total [+total+]) found for user [+username+]."; -$_lang["iconv_not_available"] = "It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it."; - -$_lang["cm_create_new_category"] = "Create the new category"; -$_lang["cm_category_name"] = "Category name"; -$_lang["cm_category_position"] = "Category position"; -$_lang["cm_no_x_assigned"] = "No %s assigned"; -$_lang["cm_save_categorization"] = "Save categorization"; -$_lang["cm_update_categories"] = "Update categories"; -$_lang["cm_assigned_elements"] = "Assigned elements"; -$_lang["cm_edit_name"] = "Edit name"; -$_lang["cm_mark_for_deletion"] = "Mark for deletion"; -$_lang["cm_delete_now"] = "Delete immediately"; -$_lang["cm_delete_element_x_now"] = "Delete "%s" immediately"; -$_lang["cm_select_element_group"] = "Select an element group"; -$_lang["cm_global_messages"] = "Global Messages"; -$_lang["cm_add_new_category"] = "Add a new category"; -$_lang["cm_edit_categories"] = "Edit categories"; -$_lang["cm_sort_categories"] = "Sort categories"; -$_lang["cm_categorize_elements"] = "Categorize elements"; -$_lang["cm_translation"] = "Translation"; -$_lang["cm_translations"] = "Translations"; -$_lang["cm_categorize_x"] = "Categorize %s"; -$_lang["cm_unknown_error"] = "Something went wrong."; -$_lang["cm_x_assigned_to_category_y"] = "%s(%s) has been assigned to category %s(%s)"; -$_lang["cm_no_categorization"] = "No categorization made."; -$_lang["cm_no_changes"] = "Nothing to change, so no changes made."; -$_lang["cm_x_changes_made"] = "%s changes made"; -$_lang["cm_enter_name_for_category"] = "Please enter a name for the new category."; -$_lang["cm_category_x_exists"] = "Category %s already exists."; -$_lang["cm_category_x_saved_at_position_y"] = "The new category %s was saved at position %s."; -$_lang["cm_category_x_moved_to_position_y"] = "Category %s was moved to position %s"; -$_lang["cm_category_x_deleted"] = "Category %s has been deleted"; -$_lang["cm_category_x_renamed_to_y"] = "Category %s was renamed to %s"; -$_lang["cm_translation_for_x_empty"] = "Translation for %s was empty"; -$_lang["cm_translation_for_x_to_y_success"] = "Translation for %s to %s successfully saved"; -$_lang["cm_save_new_sorting"] = "Save new sorting"; -$_lang["cm_translate_phrases"] = "Translate phrases"; -$_lang["cm_translate_module_phrases"] = "Translate module-phrases"; -$_lang["cm_native_phrase"] = "Native phrase"; - -$_lang["btn_view_options"] = 'View Options'; -$_lang["view_options_msg"] = 'The display & listing of elements can be customized via "View Options"-button. Settings are saved and restored per Browser using HTML5´s localStorage.'; -$_lang["viewopts_title"] = 'View Options'; -$_lang["viewopts_cb_buttons"] = 'Buttons'; -$_lang["viewopts_cb_descriptions"] = 'Descriptions'; -$_lang["viewopts_cb_icons"] = 'Icons'; -$_lang["viewopts_radio_list"] = 'List'; -$_lang["viewopts_radio_inline"] = 'Inline'; -$_lang["viewopts_radio_flex"] = 'Flex'; -$_lang["viewopts_fontsize"] = 'Font-Size'; -$_lang["viewopts_cb_alltabs"] = 'All Tabs'; - -$_lang['email_sender_method'] = 'The envelope sender of the message'; -$_lang['auto'] = 'Auto-detect'; -$_lang['use_emailsender'] = 'Use [(emailsender)] value'; -$_lang['email_sender_method_message'] = 'The envelope sender of the message. This will usually be turned into a Return-Path header by the receiver, and is the address that bounces will be sent to. Auto-detect will work in most cases.'; +PHP Application Framework and Content Management System licensed under the GNU GPL.'; +$_lang["about_title"] = 'About Evolution'; +$_lang["access_permission_denied"] = 'You do not have the correct permissions for this Resource.'; +$_lang["access_permission_parent_denied"] = 'You do not have permission to create or move a Resource here! Please choose another location.'; +$_lang["access_permissions"] = 'Access permissions'; +$_lang["access_permissions_add_resource_group"] = 'Create a new Resource Group'; +$_lang["access_permissions_add_user_group"] = 'Create a new User Group'; +$_lang["access_permissions_docs_collision"] = 'Because the Web User Groups and Manager User Groups conflict for your Role, this Resource will be public. Contact a site administrator for further help.'; +$_lang["access_permissions_docs_message"] = 'Select which Resource Groups this Resource belongs to'; +$_lang["access_permissions_group_link"] = 'Create a new group link'; +$_lang["access_permissions_introtext"] = 'Manage the User Groups and Resource Groups used for access permissions. To add a user to a User Group, edit the user and select the groups (s)he should be a member of. To add a Resource to a User Group, edit the Resource and select the groups it should belong to.'; +$_lang["access_permissions_link_to_group"] = 'to Resource Group'; +$_lang["access_permissions_link_user_group"] = 'Link User Group'; +$_lang["access_permissions_links"] = 'User/Resource Group links'; +$_lang["access_permissions_links_tab"] = 'Specify which User Groups are given access (i.e. can edit or create children) to the Resource Groups. To link a Resource Group to a User Group, select the appropriate groups from the drop down menus, and click on \'Submit\'. To remove the link for a certain group, press \'Remove\'. This will immediately remove the link.'; +$_lang["access_permissions_no_resources_in_group"] = 'None.'; +$_lang["access_permissions_no_users_in_group"] = 'None.'; +$_lang["access_permissions_off"] = 'Access Permissions are not activated. This means any changes made here will not have any effect until Access Permissions are activated in your Configuration.'; +$_lang["access_permissions_resource_groups"] = 'Resource Groups'; +$_lang["access_permissions_resources_in_group"] = 'Resources in group: '; +$_lang["access_permissions_resources_tab"] = 'See which Resource Groups have been created. Also create new groups, rename groups, delete groups and see which Resources are in the different groups (hover over the id of the Resource to see it\'s name). To add a Resource to a group or remove a Resource from a group, edit the Resource directly.'; +$_lang["access_permissions_user_groups"] = 'User groups'; +$_lang["access_permissions_user_message"] = 'Select which User Groups this user belongs to:'; +$_lang["access_permissions_users_in_group"] = 'Users in group:'; +$_lang["access_permissions_users_tab"] = 'View the User Groups that have been created. You can also create new groups, rename groups, delete groups and see which users are members of the different groups. To add a new user to a group or to remove a user from a group, edit the user directly. Administrators (users who have been assigned the role with ID 1) always have access to all Resources, so they don\'t need to be added to any groups.'; +$_lang["account_email"] = 'Account email'; +$_lang["actioncomplete"] = 'Action was completed successfully!
          - Please wait while EVO cleans up.'; +$_lang["activity_message"] = 'This list shows the last Resources you created or edited:'; +$_lang["activity_title"] = 'Recently edited/created Resources'; +$_lang["add"] = 'Add'; +$_lang["add_chunk"] = 'Add Chunk'; +$_lang["add_doc"] = 'Add Resource'; +$_lang["add_folder"] = 'New Directory'; +$_lang["add_plugin"] = 'Add Plugin'; +$_lang["add_resource"] = 'New Resource'; +$_lang["add_snippet"] = 'Add Snippet'; +$_lang["add_tag"] = 'Add tag'; +$_lang["add_template"] = 'Add Template'; +$_lang["add_tv"] = 'Add TV'; +$_lang["add_weblink"] = 'New Weblink'; +$_lang["administrator_role_message"] = 'This role cannot be edited or deleted.'; +$_lang["administrators"] = 'Administrators'; +$_lang["after_saving"] = 'After saving'; +$_lang["alert_delete_self"] = 'You can\'t delete yourself!'; +$_lang["alias"] = 'URL alias'; +$_lang["all_doc_groups"] = 'All Resource Groups (Public)'; +$_lang["all_events"] = 'All Events'; +$_lang["all_usr_groups"] = 'All User Groups (Public)'; +$_lang["allow_mgr_access"] = 'Manager Interface Access'; +$_lang["allow_mgr_access_message"] = 'Select this option to enable or disable access to the manager interface. NOTE: If this option is set to no then the user will be redirected to the Manager Login Startup or Site Start web page.'; +$_lang["already_deleted"] = 'has already been deleted.'; +$_lang["attachment"] = 'Attachment'; +$_lang["author_infos"] = 'Author information'; +$_lang["automatic_alias_message"] = 'Select \'yes\' to have the system automatically generate a URL alias based on the Resource\'s page title when saving.'; +$_lang["automatic_alias_title"] = 'Automatically generate URL alias'; +$_lang["backup"] = 'Backup'; +$_lang["bk_manager"] = 'Backup'; +$_lang["block_message"] = 'This user will be blocked after saving the user\'s data!'; +$_lang["blocked_minutes_message"] = 'Enter the number of minutes that a user will be blocked for if they reach their maximum number of allowed failed login attempts. Please enter this value as numbers only (no commas, spaces etc.)'; +$_lang["blocked_minutes_title"] = 'Blocked Minutes'; +$_lang["cache_files_deleted"] = 'The following files were deleted:'; +$_lang["cancel"] = 'Cancel'; +$_lang["captcha_code"] = 'Security code'; +$_lang["captcha_message"] = 'Enable this to strengthen security by requiring users to enter a code which is unreadable by machines (and script-kiddy hacking scripts).'; +$_lang["captcha_title"] = 'Use CAPTCHA codes'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_message"] = 'Enter a list of CAPTCHA words to use if CAPTCHA is enabled. Separate the words with commas. This input field is limited to 255 characters.'; +$_lang["captcha_words_title"] = 'CAPTCHA Words'; +$_lang["category_heading"] = 'Category'; +$_lang["category_manager"] = 'Category Manager'; +$_lang["category_management"] = 'Category management'; +$_lang["manage_categories"] = 'Manage Categories'; +$_lang["category_msg"] = 'View and edit all Elements grouped by category.'; +$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; +$_lang["cfg_base_url"] = 'MODX_BASE_URL'; +$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; +$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; +$_lang["cfg_site_url"] = 'MODX_SITE_URL'; +$_lang["change_name"] = 'Change username'; +$_lang["change_password"] = 'Change Password'; +$_lang["change_password_confirm"] = 'Confirm password'; +$_lang["change_password_message"] = 'Please enter your new password, and then enter it again to confirm. Your password needs to be at least 6 characters long.'; +$_lang["change_password_new"] = 'New password'; +$_lang["charset_message"] = 'Select the default character encoding for the [(modx_charset)] system variable. This does not affect the Manager.'; +$_lang["charset_title"] = 'Character encoding'; +$_lang["chunk"] = 'Chunk'; +$_lang["chunk_code"] = 'Chunk code (html)'; +$_lang["chunk_multiple_id"] = 'Error: Multiple Chunks share the same unique ID.'; +$_lang["chunk_no_exist"] = 'Chunk does not exist.'; +$_lang["cleaningup"] = 'Cleaning up'; +$_lang["clean_uploaded_filename"] = 'Use Transliteration for File Uploads'; +$_lang["clean_uploaded_filename_message"] = 'Use the default or transalias settings for the file name to clean special characters from uploaded file names, preserving dot-characters (periods)'; +$_lang["clear_log"] = 'Clear log'; +$_lang["click_to_context"] = 'Click to access context menu'; +$_lang["click_to_edit_title"] = 'Click here to edit this record'; +$_lang["click_to_view_details"] = 'Click here to view details'; +$_lang["close"] = 'Close'; +$_lang["code"] = 'Code'; +$_lang["collapse_tree"] = 'Collapse Site Tree'; +$_lang["comment"] = 'Comment'; +$_lang["configcheck_admin"] = 'Please contact a systems administrator and warn them about this message!'; +$_lang["configcheck_cache"] = 'cache directory not writable'; +$_lang["configcheck_cache_msg"] = 'EVO cannot write to the cache directory. EVO will still function as expected, but no caching will take place. To solve this, make the /_cache/ directory writable.'; +$_lang["configcheck_configinc"] = 'Config file still writable'; +$_lang["configcheck_configinc_msg"] = 'Very naughty people could potentially wreak some havoc on your site and everything associated with it. Really. Please make your config file (/[+MGR_DIR+]/includes/config.inc.php) read only!'; +$_lang["configcheck_default_msg"] = 'An unspecified warning was found. Which is strange.'; +$_lang["configcheck_errorpage_unavailable"] = 'Your site\'s Error page is not available.'; +$_lang["configcheck_errorpage_unavailable_msg"] = 'This means that your Error page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; +$_lang["configcheck_errorpage_unpublished"] = 'Your site\'s Error page is not published or does not exist.'; +$_lang["configcheck_errorpage_unpublished_msg"] = 'This means that your Error page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; +$_lang["configcheck_filemanager_path"] = 'The currently set File Manager path seems incorrect.'; +$_lang["configcheck_filemanager_path_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; +$_lang["configcheck_hide_warning"] = 'Don\'t show this again.'; +$_lang["configcheck_images"] = 'Images directory not writable'; +$_lang["configcheck_images_msg"] = 'The images directory isn\'t writable, or doesn\'t exist. This means the Image Manager functions in the editor will not work!'; +$_lang["configcheck_installer"] = 'Installer still present'; +$_lang["configcheck_installer_msg"] = 'The /install directory contains the installer for EVO. Just imagine what might happen if an evil person finds this directory and runs the installer! They\'d probably not get too far, because they need to enter some user information for the database, but it is still best to remove this directory from your server.'; +$_lang["configcheck_lang_difference"] = 'Incorrect number of entries in language file'; +$_lang["configcheck_lang_difference_msg"] = 'The currently selected language has a different number of entries than the default language. While not necessarily a problem, this may mean the language file needs to be updated.'; +$_lang["configcheck_notok"] = 'One or more configuration details didn\'t check out OK:'; +$_lang["configcheck_ok"] = 'Check passed OK - no warnings to report.'; +$_lang["configcheck_php_gdzip"] = 'GD and/or Zip PHP extensions not found'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO needs the GD and Zip extension enabled for PHP. While EVO will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; +$_lang["configcheck_rb_base_dir"] = 'The currently set File base path seems incorrect.'; +$_lang["configcheck_rb_base_dir_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; +$_lang["configcheck_register_globals"] = 'register_globals is set to ON in your php.ini configuration file'; +$_lang["configcheck_register_globals_msg"] = 'This configuration makes your site much more susceptible to Cross Site Scripting (XSS) attacks. You should speak to your host about what you can do to disable this setting.'; +$_lang["configcheck_title"] = 'Configuration check'; +$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin detected'; +$_lang["configcheck_templateswitcher_present_delete"] = 'Delete TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_disable"] = 'Disable TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_msg"] = 'The TemplateSwitcher plugin has been found to cause caching and performance problems, and should be used only the functionality is required in your site.'; +$_lang["configcheck_unauthorizedpage_unavailable"] = 'Your site\'s Unauthorized page is not published or does not exist.'; +$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'This means that your Unauthorized page is not accessible to normal web surfers or does not exist. This can lead to a recursive looping condition and many errors in your site logs. Make sure there are no Webuser Groups assigned to the page.'; +$_lang["configcheck_unauthorizedpage_unpublished"] = 'The Unauthorized page defined in the site configuration settings is not published.'; +$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'This means that your Unauthorized page is inaccessible to the general public. Publish the page or make sure it is assigned to an existing Resource in your Site Tree in the Tools > Configuration menu.'; +$_lang["configcheck_validate_referer"] = 'Security Warning: HTTP Header Validation'; +$_lang["configcheck_validate_referer_msg"] = 'The configuration setting Validate HTTP_REFERER headers? is Off. We recommend turning it On. Go to Configuration options'; +$_lang["configcheck_warning"] = 'Configuration warning: '; +$_lang["configcheck_what"] = 'What does this mean?'; +$_lang["confirm_block"] = 'Are you sure you want to block this user?'; +$_lang["confirm_delete_category"] = 'Are you sure you want to delete this category?'; +$_lang["confirm_delete_eventlog"] = 'Are you sure you want to delete this event log?'; +$_lang["confirm_delete_file"] = 'Are you sure you want to delete the file?\n\nThis may stop your site from working properly! Only delete this file if you know for certain what you are doing will not break anything.'; +$_lang["confirm_delete_group"] = 'Are you sure you want to delete this group?'; +$_lang["confirm_delete_htmlsnippet"] = 'Are you sure you want to delete this Chunk?'; +$_lang["confirm_delete_keywords"] = 'Are you sure you want to delete these keywords?'; +$_lang["confirm_delete_module"] = 'Are you sure you want to delete this Module?'; +$_lang["confirm_delete_plugin"] = 'Are you sure you want to delete this Plugin?'; +$_lang["confirm_delete_record"] = 'Are you sure you want to delete the selected record(s)?'; +$_lang["confirm_delete_resource"] = 'Are you sure you want to delete this Resource?\nAny children Resources will also be deleted.'; +$_lang["confirm_delete_role"] = 'Are you sure you want to delete this role?'; +$_lang["confirm_delete_snippet"] = 'Are you sure you want to delete this Snippet?'; +$_lang["confirm_delete_tags"] = 'Are you sure you want to delete the selected META tags?'; +$_lang["confirm_delete_template"] = 'Are you sure you want to delete this Template?'; +$_lang["confirm_delete_tmplvars"] = 'Are you sure you want to remove this Template Variable and all stored values?'; +$_lang["confirm_delete_user"] = 'Are you sure you want to delete this User?'; +$_lang["confirm_duplicate_record"] = 'Are you sure you want to duplicate this record?'; +$_lang["confirm_empty_trash"] = 'This will permanently remove ALL deleted Resources?\n\nProceed?'; +$_lang["confirm_load_depends"] = 'Are you sure you want to load the Manage Dependencies screen without saving your modifications?'; +$_lang["confirm_name_change"] = 'Changing the username can affect other applications that are linked to the Content Manager.\n\nAre you sure you want to change this username?'; +$_lang["confirm_publish"] = '\n\nPublishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; +$_lang["confirm_remove_locks"] = 'Users sometimes close their browser while editing Resources, Templates, Snippets or parsers, possibly leaving the item they were editing in locked state. By pressing OK you can remove ALL locks currently in place.\n\nProceed?'; +$_lang["confirm_reset_sort_order"] = 'Are you sure you want to reset the \"sort order/index\" of all listed elements to 0 ?'; +$_lang["confirm_resource_duplicate"] = 'Are you sure you want to duplicate this Resource? Any item(s) it contains will also be duplicated.'; +$_lang["confirm_setting_language_change"] = 'You have modified the default value and will lose the changes. Proceed?'; +$_lang["confirm_unblock"] = 'Are you sure you want to unblock this user?'; +$_lang["confirm_undelete"] = '\n\nAny children Resources deleted at the same time as this Resource will also be undeleted, but children Resources deleted at an earlier time will still be deleted.'; +$_lang["confirm_unpublish"] = '\n\nUn-publishing this Resource now will remove any (un)publishing dates that may have been set. If you wish to set or keep publish or unpublish dates, please choose to \'edit\' the Resource instead.\n\nProceed?'; +$_lang["confirm_unzip_file"] = 'Are you sure you want to unzip this file?\n\nExisting files will be overwritten.'; +$_lang["could_not_find_user"] = 'Could not find user'; +$_lang["create_folder_here"] = 'Create Container here'; +$_lang["create_resource_here"] = 'Create Resource here'; +$_lang["create_resource_title"] = 'Create Resource'; +$_lang["create_weblink_here"] = 'Create Weblink here'; +$_lang["createdon"] = 'Creation date'; +$_lang["create_new"] = 'Create new'; +$_lang["credits"] = 'Credits'; +$_lang["credits_shouts_msg"] = '

          EVO is managed and maintained at evo.im.

          '; +$_lang["custom_contenttype_message"] = 'Add custom content types for Resources. To add a new entry, enter the content type in the text box then click the \'Add\' button.'; +$_lang["custom_contenttype_title"] = 'Custom content types'; +$_lang["database_charset"] = 'Database Charset'; +$_lang["database_collation"] = 'Database Collation Charset'; +$_lang["database_name"] = 'Database name'; +$_lang["database_overhead"] = 'Note: Overhead is unused space reserved by MySQL. To free up this space, click on the table\'s overhead figure.'; +$_lang["database_server"] = 'Database server'; +$_lang["database_table_clickbackup"] = 'Backup & download the selected tables'; +$_lang["database_table_clickhere"] = 'Click here'; +$_lang["database_table_datasize"] = 'Data size'; +$_lang["database_table_droptablestatements"] = 'Generate DROP TABLE statements.'; +$_lang["database_table_effectivesize"] = 'Effective size'; +$_lang["database_table_indexsize"] = 'Index size'; +$_lang["database_table_overhead"] = 'Overhead'; +$_lang["database_table_records"] = 'Records'; +$_lang["database_table_tablename"] = 'Table name'; +$_lang["database_table_totals"] = 'Totals'; +$_lang["database_table_totalsize"] = 'Total size'; +$_lang["database_tables"] = 'Database tables'; +$_lang["database_version"] = 'Database Version'; +$_lang["date"] = 'Date'; +$_lang["datechanged"] = 'Date changed'; +$_lang["datepicker_offset"] = 'Datepicker offset'; +$_lang["datepicker_offset_message"] = 'The number of years to show in the past on the datepicker.'; +$_lang["datetime_format"] = 'Date format'; +$_lang["datetime_format_message"] = 'The format for dates in the Manager.'; +$_lang["default"] = 'Default:'; +$_lang["defaultcache_message"] = 'Select \'Yes\' to make all new Resources cacheable by default.'; +$_lang["defaultcache_title"] = 'Cacheable default'; +$_lang["defaultmenuindex_message"] = 'Select \'Yes\' to turn on automatic menu index incrementing by default.'; +$_lang["defaultmenuindex_title"] = 'Menu indexing default'; +$_lang["defaultpublish_message"] = 'Select \'Yes\' to make all new Resources published by default.'; +$_lang["defaultpublish_title"] = 'Published default'; +$_lang["defaultsearch_message"] = 'Select \'Yes\' to make all new Resources searchable by default.'; +$_lang["defaultsearch_title"] = 'Searchable default'; +$_lang["defaulttemplate_message"] = 'Select the Template you wish to use as a system default for new Resources. You can still select a different Template in the Resource editor, this setting just pre-selects one of your Templates for you.'; +$_lang["defaulttemplate_title"] = 'System Default Template'; +$_lang["defaulttemplate_logic_title"] = 'Automatic Template Assignment'; +$_lang["defaulttemplate_logic_general_message"] = 'New Resources will have the following templates, falling back to higher levels if not found:'; +$_lang["defaulttemplate_logic_system_message"] = 'System: the System Default Template.'; +$_lang["defaulttemplate_logic_parent_message"] = 'Parent: the same Template as the parent container.'; +$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: the same Template as other Resources in the same container.'; +$_lang["delete"] = 'Delete'; +$_lang["delete_resource"] = 'Delete Resource'; +$_lang["delete_tags"] = 'Delete tags'; +$_lang["deleting_file"] = 'Deleting file `%s`: '; +$_lang["description"] = 'Description'; +$_lang["deselect_keywords"] = 'Clear keywords'; +$_lang["deselect_metatags"] = 'Clear META tags'; +$_lang["disabled"] = 'Disabled'; +$_lang["doc_data_title"] = 'View Resource data'; +$_lang["documentation"] = 'Documentation'; +$_lang["duplicate"] = 'Duplicate'; +$_lang["duplicate_alias_found"] = 'Resource \'%s\' is already using the URL alias \'%s\'. Please enter a unique URL alias.'; +$_lang["duplicate_alias_message"] = 'Select \'yes\' to allow duplicate URL aliases to be saved. NOTE: This option should be used with \'Friendly URL alias path\' option set to \'Yes\' in order to avoid problems when referencing a Resource.'; +$_lang["duplicate_alias_title"] = 'Allow duplicate URL aliases'; +$_lang["duplicate_name_found_general"] = 'There is already a %s named \'%s\'. Please enter a unique name.'; +$_lang["duplicate_name_found_module"] = 'There is already a Module named \'%s\'. Please enter a unique name.'; +$_lang["duplicated_el_suffix"] = 'Duplicate'; +$_lang["edit"] = 'Edit'; +$_lang["edit_resource"] = 'Edit Resource'; +$_lang["edit_resource_title"] = 'Edit Resource'; +$_lang["edit_settings"] = 'Configuration'; +$_lang["editedon"] = 'Edit date'; +$_lang["editing_file"] = 'Editing file: '; +$_lang["editor_css_path_message"] = 'Enter the path to your CSS file that you wish to use within the editor. The best way to enter the path is to enter the path from the root of your server, for example: /assets/site/style.css. If you do not wish to load a style sheet into the editor, leave this field blank.'; +$_lang["editor_css_path_title"] = 'Path to CSS file'; +$_lang["element"] = 'Element'; +$_lang["element_categories"] = 'Combined View'; +$_lang["element_filter_msg"] = 'Type here to filter list'; +$_lang["element_management"] = 'Manage Elements'; +$_lang["element_name"] = 'Element name'; +$_lang["element_selector_msg"] = 'Select the Elements(s) from the list below and click the \'Insert\' button.'; +$_lang["element_selector_title"] = 'Element Selector'; +$_lang["elements"] = 'Elements'; +$_lang["email"] = 'Email'; +$_lang["email_sent"] = 'Email sent'; +$_lang["emailsender_message"] = 'The email address of the site administrator. For example, this email address will be used as the destination of system notification e-mail etc.'; +$_lang["emailsender_title"] = 'E-mail address'; +$_lang["emailsubject_default"] = 'Your login details'; +$_lang["emailsubject_message"] = 'Specify the value of the subject of the signup e-mail.'; +$_lang["emailsubject_title"] = 'E-mail subject'; +$_lang["empty_folder"] = 'This Container is empty'; +$_lang["empty_recycle_bin"] = 'Purge deleted Resources'; +$_lang["empty_recycle_bin_empty"] = 'There are no deleted Resources to purge.'; +$_lang["enable_resource"] = 'Enable Element file.'; +$_lang["enable_sharedparams"] = 'Enable parameter sharing'; +$_lang["enable_sharedparams_msg"] = 'NOTE: The above globally unique id (GUID) will be used to uniquely identify this Module and it\'s shared parameters. The GUID is also used to form a link between the Module and the Plugins or Snippets accessing the it\'s shared parameters. '; +$_lang["enabled"] = 'Enabled'; +$_lang["error"] = 'Error'; +$_lang["error_sending_email"] = 'Error sending email'; +$_lang["errorpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect users to when requesting a non-existing Resource.'; +$_lang["errorpage_title"] = 'Error page'; +$_lang["event_id"] = 'Event Id'; +$_lang["eventlog"] = 'Event log'; +$_lang["eventlog_msg"] = 'The event log is used to display information, warning and error messages generated by the content manager. The \'source\' column shows the section of the content manager where the message occurred.'; +$_lang["eventlog_viewer"] = 'System Events'; +$_lang["everybody"] = 'Everybody'; +$_lang["existing_category"] = 'Existing Category'; +$_lang["expand_tree"] = 'Expand Site Tree'; +$_lang["export_site"] = 'Export Static HTML'; +$_lang["export_site_cacheable"] = 'Include non-cacheable files:'; +$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; +$_lang["export_site_failed"] = 'Failed!'; +$_lang["export_site_failed_no_open"] = 'Cannot open file: '; +$_lang["export_site_failed_no_retrieve"] = 'Cannot retrieve document.'; +$_lang["export_site_failed_no_write"] = 'Cannot write file.'; +$_lang["export_site_html"] = 'Export site to HTML'; +$_lang["export_site_maxtime"] = 'Max export time:'; +$_lang["export_site_maxtime_message"] = 'Specify the number of seconds EVO can take to export the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; +$_lang["export_site_message"] = '

          Use this to export the entire site to static HTML files. Please note, however, that you will lose a lot of the EVO functionality should you do so:

          • Page reads on the exported files will not be recorded.
          • Interactive Snippets will NOT work in exported files
          • Only regular Resources will be exported, Weblinks will not be exported.
          • The export process may fail if your Resources contain Snippets which send redirection headers.
          • Depending on how you\'ve written your Resources, style sheets and images, the design of your site may be broken. To fix this, save/move your exported files to the same directory where the main EVO index.php file is located.

          Please fill out the form and press \'Export\' to start the export process. The files created will be saved in the /assets/export directory, using the Resources\' URL aliases as filenames when possible. While exporting your site, it\'s best to have the EVO configuration item \'Friendly URL aliases\' set to \'yes\'. Depending on the size of your site, the export may take a while.

          Any existing files will be overwritten by the new files if their names are identical!

          '; +$_lang["export_site_numberdocs"] = '

          Found %s Resources to export...

          '; +$_lang["export_site_prefix"] = 'File prefix:'; +$_lang["export_site_start"] = 'Start export'; +$_lang["export_site_success"] = 'Success!'; +$_lang["export_site_success_skip_dir"] = 'Skip this directory.'; +$_lang["export_site_success_skip_doc"] = 'Skip this document.'; +$_lang["export_site_suffix"] = 'File suffix:'; +$_lang["export_site_target_unwritable"] = 'Target directory isn\'t writable. Please ensure the directory is writable, and try again.'; +$_lang["export_site_time"] = 'Export finished. Export took %s seconds to complete.'; +$_lang["failed_login_message"] = 'Enter the number of failed login attempts allowed before blocking a user.'; +$_lang["failed_login_title"] = 'Failed Login Attempts'; +$_lang["fe_editor_lang_message"] = 'Choose a language for the editor to use when used as a front-end editor.'; +$_lang["fe_editor_lang_title"] = 'Front-end Editor Language'; +$_lang["file_delete_file"] = 'Delete file'; +$_lang["file_delete_folder"] = 'Delete directory'; +$_lang["file_deleted"] = 'Success!'; +$_lang["file_download_file"] = 'Download File'; +$_lang["file_download_unzip"] = 'Unzip File'; +$_lang["file_folder_chmod_error"] = 'Unable to change permissions, you will need to change permissions outside of EVO.'; +$_lang["file_folder_created"] = 'Directory created successfully!'; +$_lang["file_folder_deleted"] = 'Directory was successfully deleted!'; +$_lang["file_folder_not_created"] = 'Unable to create directory'; +$_lang["file_folder_not_deleted"] = 'Unable to delete directory. Make sure it is empty before deleting.'; +$_lang["file_not_deleted"] = 'Failed!'; +$_lang["file_not_saved"] = 'Cannot save file, please ensure target directory is writable!'; +$_lang["file_saved"] = 'File updated successfully!'; +$_lang["file_unzip"] = 'Unzip was successful!'; +$_lang["file_unzip_fail"] = 'Unzip Failed!'; +$_lang["filemanager_path_message"] = 'IIS often does not populate the document_root setting properly, which is used by the file manager to determine what you can see. If you are having problems using the file manager, make sure this path points to the root of your EVO installation.'; +$_lang["filemanager_path_title"] = 'File Manager path'; +$_lang["files_access_denied"] = 'Access denied!'; +$_lang["files_data"] = 'Data'; +$_lang["files_dir_listing"] = 'Directory listing for:'; +$_lang["files_directories"] = 'Directories'; +$_lang["files_directory_is_empty"] = 'This directory is empty.'; +$_lang["files_dirwritable"] = 'Directory writable?'; +$_lang["files_editfile"] = 'Edit file'; +$_lang["files_file_type"] = 'File type: '; +$_lang["files_filename"] = 'Filename'; +$_lang["files_fileoptions"] = 'Options'; +$_lang["files_files"] = 'Files'; +$_lang["files_filesize"] = 'File size'; +$_lang["files_filetype_notok"] = 'Uploading of this kind of file is not allowed!'; +$_lang["files_management"] = 'Manage Files'; +$_lang["files_management_no_permission"] = 'You do not have enough permissions to view or edit these files. Ask the administrator to grant you access to %s.'; +$_lang["files_modified"] = 'Modified'; +$_lang["files_top_level"] = 'To top level'; +$_lang["files_up_level"] = 'Up one level'; +$_lang["files_upload_copyfailed"] = 'Failed to copy file to destination directory - upload failed!'; +$_lang["files_upload_error"] = 'Error'; +$_lang["files_upload_error0"] = 'There was a problem with your upload.'; +$_lang["files_upload_error1"] = 'The file you are trying to upload is too big.'; +$_lang["files_upload_error2"] = 'The file you are trying to upload is too big.'; +$_lang["files_upload_error3"] = 'The file you are trying upload was only partially uploaded.'; +$_lang["files_upload_error4"] = 'You must select a file for upload.'; +$_lang["files_upload_error5"] = 'There was a problem with your upload.'; +$_lang["files_upload_inhibited_msg"] = 'Upload feature inhibited - make sure uploads are supported and the directory is writable for PHP.'; +$_lang["files_upload_ok"] = 'File uploaded successfully!'; +$_lang["files_upload_permissions_error"] = 'Possible permission problems - the directory you want to upload to needs to be writable by your webserver.'; +$_lang["files_uploadfile"] = 'Upload file'; +$_lang["files_uploadfile_msg"] = 'Select a file to upload:'; +$_lang["files_uploading"] = 'Uploading %s to %s/'; +$_lang["files_viewfile"] = 'View file'; +$_lang["folder"] = 'Folder'; +$_lang["forgot_password_email_fine_print"] = '* The URL above will expire once you change your password or after today.'; +$_lang["forgot_password_email_instructions"] = 'From there you will be able to change your password from the My Account menu.'; +$_lang["forgot_password_email_intro"] = 'A request has been made to change the password on your account.'; +$_lang["forgot_password_email_link"] = 'Click here to complete the process.'; +$_lang["forgot_your_password"] = 'Forgot your password?'; +$_lang["friday"] = 'Friday'; +$_lang["friendly_alias_message"] = 'With Friendly URLs enabled, a Resource URL alias will be used when present instead of the Resource ID. E.g., if a Resource with ID 1 has an URL alias of "introduction", no prefix set (empty) and a suffix of ".html", enabling this option would generate an URL alias of "introduction.html". If there is no URL alias set, EVO generates "1.html".'; +$_lang["friendly_alias_title"] = 'Use Friendly URL aliases'; +$_lang["friendlyurls_message"] = 'Use Search Engine Friendly URLs on Apache webservers with mod_rewrite or IIS with third-party plugins. See the .htaccess file in the site root of the distribution for more info.'; +$_lang["friendlyurls_title"] = 'Use FriendlyURLs'; +$_lang["friendlyurlsprefix_message"] = 'A prefix setting of "page" will turn the URL /index.php?id=2 to the URL alias "page2.html" (assuming the suffix is set to .html).'; +$_lang["friendlyurlsprefix_title"] = 'Friendly URL Prefix'; +$_lang["friendlyurlsuffix_message"] = 'Any suffix you choose will work, including no suffix at all. E.g., ".aspx" will append .aspx to all URL aliases.'; +$_lang["friendlyurlsuffix_title"] = 'Friendly URL Suffix'; +$_lang["functionnotimpl"] = 'Sorry!'; +$_lang["functionnotimpl_message"] = 'This function has not been implemented yet.'; +$_lang["further_info"] = 'Further information'; +$_lang["global_tabs"] = 'Global Tabs'; +$_lang["go"] = 'Go'; +$_lang["group_access_permissions"] = 'User group access'; +$_lang['group_tvs'] = 'Group TV'; +$_lang["guid"] = 'GUID'; +$_lang["help"] = 'Help'; +$_lang["help_msg"] = '

          You can obtain free community support by visiting the EVO Forums. There is also a growing body of EVO Documentation and Guides that touch on virtually every aspect of EVO.

          We are planning to offer commercial support services for EVO as well. Please email us if you\'re interested.

          '; +$_lang["help_title"] = 'Help'; +$_lang["hide_tree"] = 'Hide Site Tree'; +$_lang["home"] = 'Dashboard'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; +$_lang["htmlsnippet_desc"] = 'Description'; +$_lang["htmlsnippet_management_msg"] = 'Select the Chunk you wish to edit.'; +$_lang["htmlsnippet_msg"] = 'Add and edit Chunks. Remember, Chunks are \'raw\' HTML code, so any PHP code won\'t be processed.'; +$_lang["htmlsnippet_name"] = 'Chunk name'; +$_lang["htmlsnippet_title"] = 'Create/edit Chunk'; +$_lang["icon"] = 'Icon'; +$_lang["icon_description"] = 'CSS class value. e.g. fa fa-star'; +$_lang["id"] = 'ID'; +$_lang["illegal_parent_child"] = 'Parent Assignment:\n\nResource is a child of the selected Resource.'; +$_lang["illegal_parent_self"] = 'Parent Assignment:\n\nThe selected Resource cannot be assigned to itself.'; +$_lang["images_management"] = 'Manage Images'; +$_lang["import_files_found"] = 'Found %s Resources for import...'; +$_lang["import_params"] = 'Import Module shared parameters'; +$_lang["import_params_msg"] = 'You can import the parameters or settings of a Module by selecting the name of the Module from the above drop down menu. NOTE: In order for Modules to appear inside the menu, this Plugin/Snippet must be a part of the Module\'s dependency listing and the Module must have parameter sharing enabled. '; +$_lang["import_parent_resource"] = 'Parent Resource:'; +$_lang["import_site"] = 'Import HTML'; +$_lang["import_site_failed"] = 'Failed!'; +$_lang["import_site_failed_db_error"] = 'A database error occured while trying to clone Resource: '; +$_lang["import_site_failed_no_open_dir"] = 'Could not open directory: '; +$_lang["import_site_failed_no_retrieve_file"] = 'Could not retrieve file: '; +$_lang["import_site_html"] = 'Import site from HTML'; +$_lang["import_site_importing_document"] = 'Importing file %s '; +$_lang["import_site_maxtime"] = 'Max import time:'; +$_lang["import_site_maxtime_message"] = 'Specify the number of seconds allowed for the Content Manager to import the site (overriding PHP settings). Enter 0 for unlimited time. Please note, setting 0 or a really high number can do weird things to your server and is not recommended.'; +$_lang["import_site_message"] = '

          Import an entire HTML site into your site database. Please note that you will need to copy your html files and/or directories into the /assets/import directory.

          Please fill out the form and press \'Import\' to start the import process. The files imported will be saved into the selected location, using the files name as the Resource\'s URL aliases where possible, and the Resource title tag as the pagetitle.'; +$_lang["import_site_skip"] = 'Skipped!'; +$_lang["import_site_start"] = 'Start Import'; +$_lang["import_site_success"] = 'Success!'; +$_lang["import_site_time"] = 'Import finished. Import took %s seconds to complete.'; +$_lang["inbox"] = 'Inbox'; +$_lang["info"] = 'Info'; +$_lang["information"] = 'Information'; +$_lang["inline"] = 'Inline'; +$_lang["insert"] = 'Insert'; +$_lang["maxImageWidth"] = 'Maximum image width'; +$_lang["maxImageHeight"] = 'Maximum image height'; +$_lang["clientResize"] = 'Resize images on client-side'; +$_lang["clientResize_message"] = 'If enabled then images will be resized by browser before upload to the server'; +$_lang["noThumbnailsRecreation"] = 'Create thumbnails on upload only'; +$_lang["noThumbnailsRecreation_message"] = 'File browser will create thumbnails only on upload; if there\'s no thumbnails for some images, they will not be created'; +$_lang["thumbWidth"] = 'Maximum thumbnail width'; +$_lang["thumbHeight"] = 'Maximum thumbnail height'; +$_lang["thumbsDir"] = 'Thumbnails directory location'; +$_lang["jpegQuality"] = 'JPEG compression'; +$_lang["denyZipDownload"] = 'Disable zip-archives downloading'; +$_lang["denyExtensionRename"] = 'Disable renaming of file extensions'; +$_lang["maxImageWidth_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; +$_lang["maxImageHeight_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; +$_lang["thumbWidth_message"] = 'Maximum thumbnail width.'; +$_lang["thumbHeight_message"] = 'Maximum thumbnail height.'; +$_lang["thumbsDir_message"] = 'The name of thumbnail directory.'; +$_lang["jpegQuality_message"] = 'JPEG compression quality of thumbnails and resized images'; +$_lang["showHiddenFiles"] = 'Show hidden files in file browser'; +$_lang["keyword"] = 'Keyword'; +$_lang["keywords"] = 'Keywords'; +$_lang["keywords_intro"] = 'To edit a keyword, simply type in the new keyword in the text field next to the keyword you wish to change. To delete a keyword, check the \'delete\' box for that keyword. If you check the keyword\'s delete box, and also change it\'s name, it will be deleted, and the renaming of the keyword will not take place!'; +$_lang["language_message"] = 'Select the language for the EVO Content Manager.'; +$_lang["language_title"] = 'Manager language'; +$_lang["last_update"] = 'Last update'; +$_lang["launch_site"] = 'View Site'; +$_lang["license"] = 'License'; +$_lang["link_attributes"] = 'Link Attributes'; +$_lang["link_attributes_help"] = 'Enter optional attributes for a link for this page, such as target="_blank" or rel="external".'; +$_lang["list_mode"] = 'Turn on/off list mode - used to list all records in the grid.'; +$_lang["loading_doc_tree"] = 'Loading Site Tree...'; +$_lang["loading_menu"] = 'Loading menu...'; +$_lang["loading_page"] = 'Please wait while EVO loads the page...'; +$_lang["localtime"] = 'Local Time'; +$_lang["lock_htmlsnippet"] = 'Lock Chunk for editing'; +$_lang["lock_htmlsnippet_msg"] = 'Only Administrators (Role ID 1) can edit this Chunk.'; +$_lang["lock_module"] = 'Lock Module for editing'; +$_lang["lock_module_msg"] = 'Only Administrators (Role ID 1) can edit this Module.'; +$_lang["lock_msg"] = '%s is currently editing this %s. Please wait until the other user has finished and try again.'; +$_lang["lock_plugin"] = 'Lock Plugin for editing'; +$_lang["lock_plugin_msg"] = 'Only Administrators (Role ID 1) can edit this Plugin.'; +$_lang["lock_settings_msg"] = '%s is currently editing these settings. Please wait until the other user has finished and try again.'; +$_lang["lock_snippet"] = 'Lock Snippet for editing'; +$_lang["lock_snippet_msg"] = 'Only Administrators (Role ID 1) can edit this Snippet.'; +$_lang["lock_template"] = 'Lock Template for editing'; +$_lang["lock_template_msg"] = 'Only Administrators (Role ID 1) can edit this Template.'; +$_lang["lock_tmplvars"] = 'Lock Template Variable for editing'; +$_lang["lock_tmplvars_msg"] = 'Only Administrators (Role ID 1) can edit this Template Variable.'; +$_lang["locked"] = 'Locked'; +$_lang["login_allowed_days"] = 'Allowed Days'; +$_lang["login_allowed_days_message"] = 'Select the days that this user is allowed to login.'; +$_lang["login_allowed_ip"] = 'Allowed IP Address'; +$_lang["login_allowed_ip_message"] = 'Enter the IP addresses that this user is allowed to login from. NOTE: Separate multiple IP addresses with a comma (,)'; +$_lang["login_button"] = 'Login'; +$_lang["login_cancelled_install_in_progress"] = 'Install/update of this site is currently in progress. Please retry in a couple of minutes!'; +$_lang["login_cancelled_site_was_updated"] = 'Install/update on this site was executed, please login again!'; +$_lang["login_captcha_message"] = 'Please enter the security code shown in the graphic. If you can\'t read the code, click the image to generate a new one or contact your site admin.'; +$_lang["login_homepage"] = 'Login Home Page'; +$_lang["login_homepage_message"] = 'Enter the ID of the Resource you want to send user to after he/she has logged in. NOTE: make sure the ID you enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; +$_lang["login_message"] = 'Please enter your login credentials to start your Manager session. Your username and password are case-sensitive, so please enter them carefully!'; +$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; +$_lang["logout"] = 'Logout'; +$_lang["long_title"] = 'Long title'; +$_lang["mail_check_timeperiod_message"] = 'How often to check for new mail messages in the Manager, in seconds.'; +$_lang["mail_check_timeperiod_title"] = 'Mail Check Time Period'; +$_lang["manage_depends"] = 'Manage Dependencies'; +$_lang["manage_files"] = 'Manage Files'; +$_lang["manage_htmlsnippets"] = 'Chunks'; +$_lang["manage_metatags"] = 'Manage META tags and Keywords'; +$_lang["manage_modules"] = 'Manage Modules'; +$_lang["manage_plugins"] = 'Plugins'; +$_lang["manage_snippets"] = 'Snippets'; +$_lang["manage_templates"] = 'Templates'; +$_lang["manage_documents"] = 'Documents'; +$_lang["manager"] = 'Manager'; +$_lang["manager_lockout_message"] = 'You are currently logged into the Content Manager. If you would like to close your login session please click the "Logout" button.

          To go to your startup or home page click the "Home" button.'; +$_lang["manager_permissions"] = 'Manager Permissions'; +$_lang["manager_theme"] = 'Manager Theme'; +$_lang["manager_theme_message"] = 'Select the Theme for the Content Manager.'; +$_lang["manager_theme_mode"] = 'Color Scheme:'; +$_lang["manager_theme_mode1"] = 'everything is light'; +$_lang["manager_theme_mode2"] = 'the header is dark'; +$_lang["manager_theme_mode3"] = 'header and sidebar are dark'; +$_lang["manager_theme_mode4"] = 'everything is dark'; +$_lang['manager_theme_mode_message'] = 'This setting is used as the "default" and can be overridden by the manager when using the theme color mode switch button in the Resource Tree: '; +$_lang['manager_theme_mode_title'] = 'Theme color mode switch'; +$_lang["messages"] = 'Messages'; +$_lang["messages_all"] = 'Everyone'; +$_lang["messages_compose"] = 'Compose a message'; +$_lang["messages_forward"] = 'Forward'; +$_lang["messages_from"] = 'From'; +$_lang["messages_group"] = 'A group'; +$_lang["messages_inbox"] = 'Inbox'; +$_lang["messages_message"] = 'Message'; +$_lang["messages_no_messages"] = 'No messages in Inbox.'; +$_lang["messages_not_allowed_to_read"] = 'You\'re not allowed to read this message!'; +$_lang["messages_private"] = 'Private'; +$_lang["messages_read_message"] = 'Read message'; +$_lang["messages_reply"] = 'Reply'; +$_lang["messages_select_group"] = 'Select a group'; +$_lang["messages_select_user"] = 'Select a user'; +$_lang["messages_send"] = 'Send'; +$_lang["messages_send_to"] = 'Send to'; +$_lang["messages_sent"] = 'Sent on'; +$_lang["messages_subject"] = 'Subject'; +$_lang["messages_system_user"] = '[System]'; +$_lang["messages_title"] = 'Messages'; +$_lang["messages_user"] = 'A user'; +$_lang["meta_keywords"] = 'META Keywords'; +$_lang["metatag_intro"] = 'On this page you can delete, create or edit META tags. To link META tags to Resources, click on the META Keywords tab when editing the Resource, and select the desired META tags and keywords. To add a new tag enter the name and value and click the \'Add tag\' button. To edit the tag click on the name of the tag from within the data grid.'; +$_lang["metatag_notice"] = 'You may wish to reference the HTML Reference Guide site for more information. This is not a complete list of possible Meta Tags.'; +$_lang["metatags"] = 'META tags'; +$_lang["mgr_access_permissions"] = 'Manager access permissions'; +$_lang["mgr_login_start"] = 'Manager Login Startup'; +$_lang["mgr_login_start_message"] = 'Enter the ID of the Resource you want to send the user to after he/she has logged into the manager. NOTE: make sure the ID you\'ve enter belongs to an existing Resource, and that it has been published and is accessible by this user!'; +$_lang["mgrlog_action"] = 'Action'; +$_lang["mgrlog_actionid"] = 'Action ID'; +$_lang["mgrlog_anyall"] = 'Any/All'; +$_lang["mgrlog_datecheckfalse"] = 'checkdate() returned false.'; +$_lang["mgrlog_datefr"] = 'Date from'; +$_lang["mgrlog_dateinvalid"] = 'Invalid date format.'; +$_lang["mgrlog_dateto"] = 'Date to'; +$_lang["mgrlog_emptysrch"] = 'Your search query returned an empty result set (i.e. not matching logs found).'; +$_lang["mgrlog_field"] = 'Field'; +$_lang["mgrlog_itemid"] = 'Item ID'; +$_lang["mgrlog_itemname"] = 'Item name'; +$_lang["mgrlog_msg"] = 'Message'; +$_lang["mgrlog_noquery"] = 'No search query entered yet.'; +$_lang["mgrlog_qresults"] = 'Query results'; +$_lang["mgrlog_query"] = 'Query logging'; +$_lang["mgrlog_query_msg"] = 'Please make a selection for viewing the logs. You can select log entries by date, but be aware that the dates you enter are not inclusive - to select every log entry for 01-01-2004, set \'date from\' to 01-01-2004 and \'date to\' to 02-01-2004.

          Message and action are usually the same. If you\'re searching for a specific message, it\'s best to set action to \'Any/All\'.'; +$_lang["mgrlog_results"] = 'No. of results'; +$_lang["mgrlog_searchlogs"] = 'Search logs'; +$_lang["mgrlog_sortinst"] = 'Sort the table by clicking on the column headers. If the logs are too large, empty the log file to remove all log entries up to now. This cannot be undone!'; +$_lang["mgrlog_time"] = 'Time'; +$_lang["mgrlog_user"] = 'User'; +$_lang["mgrlog_username"] = 'Username'; +$_lang["mgrlog_value"] = 'Value'; +$_lang["mgrlog_view"] = 'View manager logs'; +$_lang["module_code"] = 'Module code (php)'; +$_lang["module_config"] = 'Module configuration'; +$_lang["module_desc"] = 'Description'; +$_lang["module_disabled"] = 'Module disabled'; +$_lang["module_edit_click_title"] = 'Click here to edit this Module'; +$_lang["module_group_access_msg"] = 'Select the User Groups that are allowed to execute this Module from within the Content Manager.'; +$_lang["module_management"] = 'Manage Modules'; +$_lang["module_management_msg"] = 'Choose the Module you would like to execute or modify. To run the Module click on the icon in the grid. To modify the Module click on the name of the Module.'; +$_lang["module_msg"] = 'Add/edit Modules. A Module is a collection of Elements (e.g. Plugins, Snippets, etc).'; +$_lang["module_name"] = 'Module name'; +$_lang["module_resource_msg"] = 'Add or remove Elements upon which this Module depends. To add a new Element click on the one of the add buttons below.'; +$_lang["module_resource_title"] = 'Module Dependencies'; +$_lang["module_title"] = 'Create/edit Module'; +$_lang["module_viewdepend_msg"] = 'View the assigned Elements on which this Module depends. Click on the "Manager Dependencies" button to modify the dependencies'; +$_lang["modules"] = 'Modules'; +$_lang["modx_news"] = 'EVO News Notices'; +$_lang["modx_news_tab"] = 'EVO News'; +$_lang["modx_news_title"] = 'EVO News'; +$_lang["modx_security_notices"] = 'EVO Security Notices'; +$_lang["modx_version"] = 'EVO version'; +$_lang["monday"] = 'Monday'; +$_lang["move"] = 'Move'; +$_lang["move_resource"] = 'Move Resource'; +$_lang["move_resource_message"] = 'Move a Resource and all its children by selecting a new parent in the Site Tree. If you select a Resource that is not already a Container, it will be changed into one. Please click on the new parent in the Site Tree.'; +$_lang["move_resource_new_parent"] = 'Please select a new parent in the Site Tree.'; +$_lang["move_resource_title"] = 'Move Resource'; +$_lang["name"] = 'Username'; +$_lang["new_category"] = 'New Category'; +$_lang["new_file_permissions_message"] = 'When uploading a new file in the File Manager, the File Manager will attempt to change the file permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; +$_lang["new_file_permissions_title"] = 'New File Permissions'; +$_lang["new_folder_permissions_message"] = 'When creating a new directory in the File Manager, the File Manager will attempt to change the directory permissions to those entered in this setting. This may not work on some setups, such as IIS, in which case you will need to manually change the permissions.'; +$_lang["new_folder_permissions_title"] = 'New Directory Permissions'; +$_lang["new_htmlsnippet"] = 'New Chunk'; +$_lang["new_keyword"] = 'Add new keyword:'; +$_lang["new_module"] = 'New Module'; +$_lang["new_parent"] = 'New parent'; +$_lang["new_plugin"] = 'New Plugin'; +$_lang["new_role"] = 'New Role'; +$_lang["new_snippet"] = 'New Snippet'; +$_lang["new_template"] = 'New Template'; +$_lang["new_tmplvars"] = 'New Template Variable'; +$_lang["new_user"] = 'New Manager User'; +$_lang["new_web_user"] = 'New Web User'; +$_lang["new_resource"] = 'New Resource'; +$_lang["no"] = 'No'; +$_lang["no_active_users_found"] = 'No active users found.'; +$_lang["no_activity_message"] = 'You have not yet created or edited any Resources.'; +$_lang["no_category"] = 'uncategorized'; +$_lang["no_docs_pending_publishing"] = 'No Resources pending publishing.'; +$_lang["no_docs_pending_pubunpub"] = 'No Events Found'; +$_lang["no_docs_pending_unpublishing"] = 'No Resources pending unpublishing.'; +$_lang["no_edits_creates"] = 'No edits or creates found.'; +$_lang["no_groups_found"] = 'No groups found.'; +$_lang["no_keywords_found"] = 'There are currently no keywords.'; +$_lang["no_records_found"] = 'No records found.'; +$_lang["no_results"] = 'No results found'; +$_lang["nologentries_message"] = 'Enter the number of log entries shown per page when you browse the Audit trail.'; +$_lang["nologentries_title"] = 'Number of log entries'; +$_lang["nomessages_message"] = 'Enter the number of messages to show in inbox when viewing messages.'; +$_lang["nomessages_title"] = 'Number of messages'; +$_lang["none"] = 'None'; +$_lang["noresults_message"] = 'Enter the number of results to show in the data grid when viewing listings and search results.'; +$_lang["noresults_title"] = 'Number of Results'; +$_lang["not_deleted"] = 'has not been deleted.'; +$_lang["not_set"] = 'Not set'; +$_lang["offline"] = 'Offline'; +$_lang["online"] = 'Online'; +$_lang["onlineusers_action"] = 'Action'; +$_lang["onlineusers_actionid"] = 'Action-ID'; +$_lang["onlineusers_ipaddress"] = 'IP address'; +$_lang["onlineusers_lasthit"] = 'Last hit'; +$_lang["onlineusers_message"] = 'This list shows all users active within the last 20 minutes (current time is '; +$_lang["onlineusers_title"] = 'Online users'; +$_lang["onlineusers_user"] = 'Username'; +$_lang["onlineusers_userid"] = 'User\'s ID'; +$_lang["optimize_table"] = 'Click here to optimize this table'; +$_lang["page_data_alias"] = 'Alias'; +$_lang["page_data_cacheable"] = 'Cacheable'; +$_lang["page_data_cacheable_help"] = 'This allows the Resource to be saved to the site cache, and affects all Snippets on the page.'; +$_lang["page_data_cached"] = 'Source retrieved from cache:'; +$_lang["page_data_changes"] = 'Changes'; +$_lang["page_data_contentType"] = 'Internet Media Type'; +$_lang["page_data_contentType_help"] = 'Select the content type for this Resource. If you\'re not sure which content type the Resource should have, just leave it as text/html.'; +$_lang["page_data_created"] = 'Created'; +$_lang["page_data_edited"] = 'Edited'; +$_lang["page_data_editor"] = 'Edit using rich text editor'; +$_lang["page_data_folder"] = 'Resource is Container'; +$_lang["page_data_general"] = 'General'; +$_lang["page_data_markup"] = 'Markup/structure'; +$_lang["page_data_mgr_access"] = 'Manager access'; +$_lang["page_data_notcached"] = 'This Resource has not yet been cached.'; +$_lang["page_data_publishdate"] = 'Publish date'; +$_lang["page_data_publishdate_help"] = 'If you set a publish date, the Resource will be published as soon as the publish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the publish date. This will then mean the Resource is never automatically published.'; +$_lang["page_data_published"] = 'Published'; +$_lang["page_data_searchable"] = 'Searchable'; +$_lang["page_data_searchable_help"] = 'Checking this field will allow the Resource to be searched. You can also use this field for other purposes in your Snippets.'; +$_lang["page_data_source"] = 'Source'; +$_lang["page_data_status"] = 'Status'; +$_lang["page_data_template"] = 'Uses Template'; +$_lang["page_data_template_help"] = 'Select the Template for this Resource.'; +$_lang["page_data_title"] = 'Page data'; +$_lang["page_data_unpublishdate"] = 'Un-publish date'; +$_lang["page_data_unpublishdate_help"] = 'If you set an unpublish date, the Resource will be unpublished as soon as the unpublish date is reached. Click on the calender icon to select a date, or on the icon next to it to remove the unpublish date. This will then mean the Resource is never automatically unpublished.'; +$_lang["page_data_unpublished"] = 'Un-published'; +$_lang["page_data_web_access"] = 'Web access'; +$_lang["pagetitle"] = 'Resource\'s title'; +$_lang["pagination_table_first"] = 'First'; +$_lang["pagination_table_gotopage"] = 'Go to page'; +$_lang["pagination_table_last"] = 'Last'; +$_lang["paging_first"] = 'first'; +$_lang["paging_last"] = 'last'; +$_lang["paging_next"] = 'next'; +$_lang["paging_prev"] = 'prev'; +$_lang["paging_showing"] = 'Showing'; +$_lang["paging_to"] = 'to'; +$_lang["paging_total"] = 'total'; +$_lang["parameter"] = 'Parameter'; +$_lang["parse_docblock"] = 'Parse DocBlock'; +$_lang["parse_docblock_msg"] = 'Attention (!): Resets actual name, configuration, description and category to install-defaults by parsing the source code.'; +$_lang["password"] = 'Password'; +$_lang["password_change_request"] = 'Password change request'; +$_lang["password_gen_gen"] = 'Let EVO generate a password.'; +$_lang["password_gen_length"] = 'The password you specify needs to be at least 6 characters long.'; +$_lang["password_gen_method"] = 'New password method'; +$_lang["password_gen_specify"] = 'Let me specify the password:'; +$_lang["password_method"] = 'Password notification method'; +$_lang["password_method_email"] = 'Send the new password by e-mail.'; +$_lang["password_method_screen"] = 'Show the new password on screen.'; +$_lang["password_msg"] = 'The new password for %s is %s
          '; +$_lang["php_version_check"] = 'EVO Evolution is compatible with PHP version 5.6.0 and higher. This server is using version %s%. Please upgrade your PHP installation!'; +$_lang["plugin"] = 'Plugin'; +$_lang["plugins"] = 'Plugins'; +$_lang["plugin_code"] = 'Plugin code (php)'; +$_lang["plugin_config"] = 'Plugin configuration'; +$_lang["plugin_desc"] = 'Description'; +$_lang["plugin_disabled"] = 'Plugin Disabled'; +$_lang["plugin_event_msg"] = 'Select the events that you would like this Plugin to listen to.'; +$_lang["plugin_management_msg"] = 'Choose which Plugin you wish to edit.'; +$_lang["plugin_msg"] = 'Add/edit Plugins. Plugins use PHP code that is invoked whenever specific System Events trigger.'; +$_lang["plugin_name"] = 'Plugin name'; +$_lang["plugin_priority"] = 'Edit Plugin Execution Order by Event'; +$_lang["plugin_priority_instructions"] = 'Drag to reorder the Plugins under each Event header. The first plugin to execute should go at the top.'; +$_lang["plugin_priority_title"] = 'Plugin Execution Order'; +$_lang["purge_plugin"] = 'Purge obsolete plugins'; +$_lang["purge_plugin_confirm"] = 'Are you sure you want to purge obsolete plugins?'; +$_lang["plugin_title"] = 'Create/edit Plugin'; +$_lang["preview"] = 'Preview'; +$_lang["preview_msg"] = 'This is a preview of your last saved changes. Click here to Save and Refresh your current changes'; +$_lang["preview_resource"] = 'Preview Resource'; +$_lang["private"] = 'Private'; +$_lang["public"] = 'Public'; +$_lang["publish_date"] = 'Publish Date'; +$_lang["publish_events"] = 'Publish Events'; +$_lang["publish_resource"] = 'Publish Resource'; +$_lang["rb_base_dir_message"] = 'Enter the physical path to the File Browser directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the path out on its own, causing the File Browser to show an error. In that case, you can enter the path to the images directory here (the path as you\'d see it in Windows Explorer). NOTE: The File Browser directory must contain the subdirectories images, files, flash and media in order for the file browser to function correctly.'; +$_lang["rb_base_dir_title"] = 'File base path'; +$_lang["rb_base_url_message"] = 'Enter the virtual path to files directory. This setting is usually automatically generated. If you\'re using IIS, however, EVO may not be able to work the URL out on it\'s own, causing the File Browser to show an error. In that case, you can enter the URL to the images directory here (the URL as you\'d enter it on Internet Explorer).'; +$_lang["rb_base_url_title"] = 'File Browser URL'; +$_lang["rb_message"] = 'Select yes to enable the File Browser. This will allow your users to browse and upload files such as images, flash and media files on the server.'; +$_lang["rb_title"] = 'Enable File Browser'; +$_lang["rb_webuser_message"] = 'Do you want to allow a web user the ability to use the file browser? WARNING: Allowing web users the use of the file browser exposes the files available to manager users. Only use this option for trusted web users.'; +$_lang["rb_webuser_title"] = 'Web Users?'; +$_lang["recent_docs"] = 'Recent Resources'; +$_lang["recommend_setting_change_title"] = 'Recommended Setting Change'; +$_lang["recommend_setting_change_description"] = 'Your site is not configured to validate the HTTP_REFERER of incoming requests to the Manager. We strongly recommend enabling this setting to reduce the risk of a CSRF (Cross Site Request Forgery) attack.'; +$_lang["references"] = 'References'; +$_lang["refresh_cache"] = 'Cache: Found %s files in cache directory and deleted %d cache files.

          New cache files will be created when pages are requested.'; +$_lang["refresh_published"] = '%s Resources were published.'; +$_lang["refresh_site"] = 'Clear Cache'; +$_lang["refresh_title"] = 'Refresh site'; +$_lang["refresh_tree"] = 'Refresh Site Tree'; +$_lang["refresh_unpublished"] = '%s Resources were unpublished.'; +$_lang["release_date"] = 'Release date'; +$_lang["remember_last_tab"] = 'Remember tabs'; +$_lang["remember_last_tab_message"] = 'Tabbed Manager pages load with the last tab viewed instead of defaulting to the first tab'; +$_lang["remember_username"] = 'Remember me'; +$_lang["remove"] = 'Remove'; +$_lang["remove_date"] = 'Remove date'; +$_lang["remove_locks"] = 'Remove Locks'; +$_lang["rename"] = 'Rename'; +$_lang["reports"] = 'Reports'; +$_lang["report_issues"] = 'Report issues'; +$_lang["require_tagname"] = 'A tag name is required'; +$_lang["require_tagvalue"] = 'A tag value is required'; +$_lang["reserved_name_warning"] = 'You have used a reserved name.'; +$_lang["reset"] = 'Reset'; +$_lang["reset_failedlogins"] = 'reset'; +$_lang["reset_sort_order"] = 'Reset sort order'; +$_lang["resource"] = 'Resource'; +$_lang["resource_alias"] = 'URL alias'; +$_lang["resource_alias_help"] = 'Set the URL alias to make the Resource accessible as http://example.com/weburl. This only works Friendly URLs are enabled in the site configuration.'; +$_lang["resource_content"] = 'Resource content'; +$_lang["resource_description"] = 'Description'; +$_lang["resource_description_help"] = 'Enter an optional description of this Resource.'; +$_lang["resource_duplicate"] = 'Duplicate Resource'; +$_lang["resource_long_title_help"] = 'Enter an optional longer title for your Resource. This can be used for automatic Resource header tags for search engines, and might be more descriptive for your Resource.'; +$_lang["resource_metatag_help"] = 'Select the META tags or keywords you wish to assign to this Resource. Hold down the CTRL key to select multiple keywords or meta tags.'; +$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; +$_lang["resource_opt_contentdispo_help"] = 'Use the content disposition field to specify how this Resource will be handled by the web browser. For file downloads select the Attachment option.'; +$_lang["resource_opt_emptycache"] = 'Empty cache'; +$_lang["resource_opt_emptycache_help"] = 'Leaving this field checked will make EVO empty the cache after you save the Resource. This way your visitors will not see an older version of the Resource.'; +$_lang["resource_opt_folder"] = 'Container'; +$_lang["resource_opt_folder_help"] = 'Check this to make the Resource also act as a Container for other Resources. A \'Container\' is like a folder, only it can also have content.'; +$_lang["resource_opt_menu_index"] = 'Menu index'; +$_lang["resource_opt_menu_index_help"] = 'Menu Index is a field that can control sorting Resources, particularly in menu Snippet(s). You can also use it for any other purpose in your Snippets.'; +$_lang["resource_opt_menu_title"] = 'Menu title'; +$_lang["resource_opt_menu_title_help"] = 'Menu title is an optional field used to display a short title in menu Snippet(s) or Modules.'; +$_lang["resource_opt_published"] = 'Published'; +$_lang["resource_opt_published_help"] = 'Check this field to have the Resource published immediately after saving it.'; +$_lang["resource_opt_richtext"] = 'Rich text'; +$_lang["resource_opt_richtext_help"] = 'Leave this checked to use the rich text editor for editing Resources. If your Resources contain JavaScript and forms, uncheck this to edit in HTML mode to prevent the editor from incorrectly changing your Resources.'; +$_lang["resource_opt_show_menu"] = 'Show in menu'; +$_lang["resource_opt_show_menu_help"] = 'Select this option to show Resource inside a web menu. Please note that some Menu Builders might choose to ignore this option.'; +$_lang["resource_opt_trackvisit_help"] = 'Log each visitor\'s visit to this page'; +$_lang["resource_overview"] = 'Resource overview'; +$_lang["resource_parent"] = 'Resource parent'; +$_lang["resource_parent_help"] = 'Click the icon to enable setting a Resource parent, then click a Resource in the Site Tree to set a new parent.'; +$_lang["resource_permissions_error"] = 'Assign this Resource to at least one Resource Group to which you have access.'; +$_lang["resource_setting"] = 'Resource setting'; +$_lang["resource_summary"] = 'Summary (introtext)'; +$_lang["resource_summary_help"] = 'Type a brief summary of the Resource'; +$_lang["resource_title"] = 'Title'; +$_lang["resource_title_help"] = 'Enter the name/title of the Resource. Avoid using backslashes in the name.'; +$_lang["resource_to_be_moved"] = 'Resource to be moved'; +$_lang["resource_type"] = 'Resource Type'; +$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another EVO Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; +$_lang["resource_type_weblink"] = 'Weblink'; +$_lang["resource_type_webpage"] = 'Web page'; +$_lang["resource_weblink_help"] = 'Type the address of the object you wish to reference with this Weblink here. Alternatively insert from the File Browser or use the link selection icon and select a resource from the Site Tree.'; +$_lang["resources_in_container"] = 'Resources in this Container'; +$_lang["resources_in_container_no"] = 'This Container does not have child-Resources.'; +$_lang["role"] = 'Role'; +$_lang["role_about"] = 'View the about page'; +$_lang["role_access_persmissions"] = 'Access permissions'; +$_lang["role_actionok"] = 'View action completed screen'; +$_lang["role_assets_images"] = 'Manage assets/images'; +$_lang["role_assets_files"] = 'Manage assets/files'; +$_lang["role_bk_manager"] = 'Use the Backup Manager'; +$_lang["role_cache_refresh"] = 'Empty the site\'s cache'; +$_lang["role_category_manager"] = 'Use the Category Manager'; +$_lang["role_change_password"] = 'Change password'; +$_lang["role_change_resourcetype"] = 'Change Resource-Type'; +$_lang["role_chunk_management"] = 'Chunk management'; +$_lang["role_config_management"] = 'Configuration management'; +$_lang["role_content_management"] = 'Content management'; +$_lang["role_create_chunk"] = 'Create new Chunks'; +$_lang["role_create_doc"] = 'Create new Resources'; +$_lang["role_create_plugin"] = 'Create new Plugins'; +$_lang["role_create_snippet"] = 'Create new Snippets'; +$_lang["role_create_template"] = 'Create new site Templates'; +$_lang["role_credits"] = 'View credits'; +$_lang["role_delete_chunk"] = 'Delete Chunks'; +$_lang["role_delete_doc"] = 'Delete Resources'; +$_lang["role_delete_eventlog"] = 'Delete event log'; +$_lang["role_delete_module"] = 'Delete Module'; +$_lang["role_delete_plugin"] = 'Delete Plugins'; +$_lang["role_delete_role"] = 'Delete roles'; +$_lang["role_delete_snippet"] = 'Delete Snippets'; +$_lang["role_delete_template"] = 'Delete Templates'; +$_lang["role_delete_user"] = 'Delete manager users'; +$_lang["role_delete_web_user"] = 'Delete web users'; +$_lang["role_edit_chunk"] = 'Edit Chunks'; +$_lang["role_edit_doc"] = 'Edit a Resource'; +$_lang["role_edit_doc_metatags"] = 'Edit Resource META tags and keywords'; +$_lang["role_edit_module"] = 'Edit Module'; +$_lang["role_edit_plugin"] = 'Edit Plugins'; +$_lang["role_edit_role"] = 'Edit roles'; +$_lang["role_edit_settings"] = 'Change site settings'; +$_lang["role_edit_snippet"] = 'Edit Snippets'; +$_lang["role_edit_template"] = 'Edit site Templates'; +$_lang["role_edit_user"] = 'Edit manager users'; +$_lang["role_edit_web_user"] = 'Edit web users'; +$_lang["role_empty_trash"] = 'Permanently purge deleted Resources'; +$_lang["role_errors"] = 'View error dialog'; +$_lang["role_eventlog_management"] = 'Event log management'; +$_lang["role_export_static"] = 'Export Static HTML'; +$_lang["role_file_management"] = 'File Management'; +$_lang["role_file_manager"] = 'Use the file manager (full root access)'; +$_lang["role_frames"] = 'Request manager frames'; +$_lang["role_help"] = 'View help pages'; +$_lang["role_home"] = 'Request manager intro page'; +$_lang["role_import_static"] = 'Import HTML'; +$_lang["role_logout"] = 'Log out of the manager'; +$_lang["role_manage_metatags"] = 'Manage site META tags and keywords'; +$_lang["role_management_msg"] = 'Choose the role you wish to edit.'; +$_lang["role_management_title"] = 'Roles'; +$_lang["role_messages"] = 'View and send messages'; +$_lang["role_module_management"] = 'Module management'; +$_lang["role_name"] = 'Role name'; +$_lang["role_new_module"] = 'Create new Module'; +$_lang["role_new_role"] = 'Create new roles'; +$_lang["role_new_user"] = 'Create new manager users'; +$_lang["role_new_web_user"] = 'Create new web users'; +$_lang["role_plugin_management"] = 'Plugin management'; +$_lang["role_publish_doc"] = 'Publish Resources'; +$_lang["role_remove_locks"] = 'Remove Locks'; +$_lang["role_role_management"] = 'Roles'; +$_lang["role_run_module"] = 'Run Module'; +$_lang["role_save_chunk"] = 'Save Chunks'; +$_lang["role_save_doc"] = 'Save Resources'; +$_lang["role_save_module"] = 'Save Module'; +$_lang["role_save_password"] = 'Save password'; +$_lang["role_save_plugin"] = 'Save Plugins'; +$_lang["role_save_role"] = 'Save roles'; +$_lang["role_save_snippet"] = 'Save Snippets'; +$_lang["role_save_template"] = 'Save Templates'; +$_lang["role_save_user"] = 'Save manager users'; +$_lang["role_save_web_user"] = 'Save web users'; +$_lang["role_snippet_management"] = 'Snippet management'; +$_lang["role_template_management"] = 'Template management'; +$_lang["role_title"] = 'Create/edit role'; +$_lang["role_udperms"] = 'Permissions management'; +$_lang["role_user_management"] = 'Manager user management'; +$_lang["role_view_docdata"] = 'View a Resource\'s data'; +$_lang["role_view_eventlog"] = 'View event log'; +$_lang["role_view_logs"] = 'View system logs'; +$_lang["role_view_unpublished"] = 'View Unpublished Resources'; +$_lang["role_web_access_persmissions"] = 'Web access permissions'; +$_lang["role_web_user_management"] = 'Web user management'; +$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; +$_lang["rss_url_news_message"] = 'Enter the URL for the EVO News Feed.'; +$_lang["rss_url_news_title"] = 'RSS News Feed'; +$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; +$_lang["rss_url_security_message"] = 'Enter the URL for the EVO Security Feed.'; +$_lang["rss_url_security_title"] = 'RSS Security Feed'; +$_lang["run_module"] = 'Run Module'; +$_lang["saturday"] = 'Saturday'; +$_lang["save"] = 'Save'; +$_lang["save_all_changes"] = 'Save all changes'; +$_lang["save_tag"] = 'Save tag'; +$_lang["saving"] = 'Saving, please wait...'; +$_lang["search"] = 'Search'; +$_lang["search_criteria"] = 'Search criteria'; +$_lang["search_criteria_content"] = 'Search by content'; +$_lang["search_criteria_content_msg"] = 'Find all Resources with the entered text in their content.'; +$_lang["search_criteria_id"] = 'Search by ID'; +$_lang["search_criteria_id_msg"] = 'Enter a Resource\'s ID to quickly locate that Resource.'; +$_lang["search_criteria_top"] = 'Search in main fields'; +$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; +$_lang["search_criteria_template_id"] = 'Search by template ID'; +$_lang["search_criteria_template_id_msg"] = 'Find all Resources using the specified template.'; +$_lang["search_criteria_url_msg"] = 'Find Resource by exact URL.'; +$_lang["search_criteria_longtitle"] = 'Search by long title'; +$_lang["search_criteria_longtitle_msg"] = 'Find all Resources with the entered text in their long title.'; +$_lang["search_criteria_title"] = 'Search by title'; +$_lang["search_criteria_title_msg"] = 'Find all Resources with the entered text in their title.'; +$_lang["search_empty"] = 'Your search returned no results. Please broaden your search criteria and try again.'; +$_lang["search_item_deleted"] = 'This item has been deleted'; +$_lang["search_results"] = 'Search results'; +$_lang["search_results_returned_desc"] = 'Description'; +$_lang["search_results_returned_id"] = 'ID'; +$_lang["search_results_returned_msg"] = 'Your search criteria returned %s Resources. If a lot of results are being returned, try to enter a more specific search. The two left-most columns will allow you to find the Resource in the Site Tree or view the Resource. The two right most columns show, respectively, if a Resource has been deleted and what it\'s published status is.

          '; +$_lang["search_results_returned_title"] = 'Title'; +$_lang["search_view_docdata"] = 'View this item'; +$_lang["security"] = 'Users'; +$_lang["security_notices_tab"] = 'Security Notices'; +$_lang["security_notices_title"] = 'Security Notices'; +$_lang["select_date"] = 'Select a date'; +$_lang["send"] = 'Send'; +$_lang["server_protocol_http"] = 'http'; +$_lang["server_protocol_https"] = 'https'; +$_lang["server_protocol_message"] = 'If your site is on a https connection, please specify so here.'; +$_lang["server_protocol_title"] = 'Server type'; +$_lang["serveroffset"] = 'Server offset'; +$_lang["serveroffset_message"] = 'Select the number of hours time difference between where you are and where the server is. Current time on server is [%s], current time on server using the currently saved offset is [%s].'; +$_lang["serveroffset_title"] = 'Server offset time'; +$_lang["servertime"] = 'Server Time'; +$_lang["set_automatic"] = 'Set automatic'; +$_lang["set_default"] = 'Set default'; +$_lang["set_default_all"] = 'Set defaults'; +$_lang["settings_after_install"] = 'As this is a new install, you are required to review these settings and change any that you wish to. After you have reviewed the settings, press \'Save\' to update the settings database.'; +$_lang["settings_config"] = 'Configuration'; +$_lang["settings_dependencies"] = 'Dependencies'; +$_lang["settings_events"] = 'System Events'; +$_lang["settings_furls"] = 'Friendly URLs'; +$_lang["settings_general"] = 'General'; +$_lang["settings_group_tv_message"] = 'Choose if Template Variables should be grouped in sections or tabs (named by TV category) when editing a Resource'; +$_lang["settings_group_tv_options"] = 'No,Sections in General tab,Tabs in General tab,Sections in new tab,Tabs in new tab,New tabs'; +$_lang["settings_misc"] = 'File Manager'; +$_lang["settings_security"] = 'Security'; +$_lang["settings_KC"] = 'File Browser'; +$_lang["settings_page_settings"] = 'Settings'; +$_lang["settings_photo"] = 'Photo'; +$_lang["settings_properties"] = 'Properties'; +$_lang["show_fullscreen_btn_message"] = 'Show Menu toggle Fullscreen button'; +$_lang["show_newresource_btn_message"] = 'Show Menu New Resource button'; +$_lang["settings_show_picker_message"] = 'Customize manager theme and save to localstorage'; +$_lang["show_fullscreen_btn"] = 'Toggle Fullscreen button'; +$_lang["show_newresource_btn"] = 'New Resource button'; +$_lang["settings_site"] = 'Site'; +$_lang["settings_strip_image_paths_message"] = 'If this is set to \'No\', EVO will write file browser src\'s (images, files, flash, etc.) as absolute URLs. Relative URLs are helpful should you wish to move your EVO install, e.g., from a staging site to a production site. If you have no idea what this means, it\'s best just to leave it set to \'Yes\'.'; +$_lang["settings_strip_image_paths_title"] = 'Rewrite browser paths?'; +$_lang["settings_templvars"] = 'Template Variables'; +$_lang["settings_title"] = 'System configuration'; +$_lang["settings_ui"] = 'Interface & Features'; +$_lang["settings_users"] = 'User'; +$_lang["show_meta"] = 'Show META Keywords tab'; +$_lang["show_meta_message"] = 'Show the deprecated META Keywords tab when editing Resources in the Manager.'; +$_lang["show_tree"] = 'Show Site Tree'; +$_lang["show_picker"] = 'Show Color Switcher'; +$_lang["showing"] = 'Showing'; +$_lang["signupemail_message"] = 'Set the email message sent to users when creating accounts including their username and password.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your users won\'t know their username or password!'; +$_lang["signupemail_title"] = 'Signup e-mail'; +$_lang["site"] = 'Site'; +$_lang["site_schedule"] = 'Schedule'; +$_lang["sitename_message"] = 'Enter the name of your site here.'; +$_lang["sitename_title"] = 'Site name'; +$_lang["sitestart_message"] = 'Enter the ID of the Resource you want to use as homepage here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; +$_lang["sitestart_title"] = 'Site start'; +$_lang["sitestatus_message"] = 'Select \'Online\' to publish your site on the web. If you select \'Offline\', your visitors will see the \'Site unavailable message\', and won\'t be able to browse the site.'; +$_lang["sitestatus_title"] = 'Site status'; +$_lang["siteunavailable_message"] = 'Message to show when the site is offline or if an error occurs. Note: This message will only be displayed if the Site unavailable page option is not set.'; +$_lang["siteunavailable_message_default"] = 'The site is currently unavailable.'; +$_lang["siteunavailable_page_message"] = 'Enter the ID of the Resource you want to use as an offline page here. NOTE: make sure this ID you enter belongs to an existing Resource, and that it has been published!'; +$_lang["siteunavailable_page_title"] = 'Site unavailable page'; +$_lang["siteunavailable_title"] = 'Site unavailable message'; +$_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; +$_lang["snippet_code"] = 'Snippet code (php)'; +$_lang["snippet_desc"] = 'Description'; +$_lang["snippet_execonsave"] = 'Execute Snippet after saving.'; +$_lang["snippet_management_msg"] = 'Choose the Snippet you wish to edit.'; +$_lang["snippet_msg"] = 'Add/edit Snippets. Remember, Snippets are \'raw\' PHP code, and if you expect the output of the Snippet to be shown at a certain point within the Template, you need to return a value from within the Snippet.'; +$_lang["snippet_name"] = 'Snippet name'; +$_lang["snippet_properties"] = 'Default Properties'; +$_lang["snippet_title"] = 'Create/edit Snippet'; +$_lang["sort_alphabetically"] = 'Sort alphabetically'; +$_lang["sort_asc"] = 'Ascending'; +$_lang["sort_desc"] = 'Descending'; +$_lang["sort_menuindex"] = 'Sort menu index'; +$_lang["sort_tree"] = 'Sort the Site Tree'; +$_lang['sort_updating'] = 'Updating ...'; +$_lang['sort_updated'] = 'Updated!'; +$_lang['sort_nochildren'] = 'Parent does not have any children'; +$_lang["sort_elements_msg"] = 'Drag to reorder the listed elements.'; +$_lang["source"] = 'Source'; +$_lang["stay"] = 'Continue editing'; +$_lang["stay_new"] = 'Add another'; +$_lang["submit"] = 'Submit'; +$_lang["sunday"] = 'Sunday'; +$_lang["sys_alert"] = 'System Alert'; +$_lang["sysinfo_activity_message"] = 'This list show which Resources have been recently edited by your users.'; +$_lang["sysinfo_userid"] = 'User'; +$_lang["system"] = 'System'; +$_lang["system_email_signup"] = ' + +Hello [+uid+] + +Here are your login details for [+sname+] Content Manager: + +Username: [+uid+] +Password: [+pwd+] + +Once you log into the Content Manager ([+surl+]), you can change your password. + +Regards, +Site Administrator +'; +$_lang["system_email_webreminder"] = 'Hello [+uid+] + +To activate your new password click the following link: + +[+surl+] + +If successful you can use the following password to login: + +Password:[+pwd+] + +If you did not request this email then please ignore it. + +Regards, +Site Administrator'; +$_lang["system_email_websignup"] = 'Hello [+uid+] + +Here are your login details for [+sname+]: + +Username: [+uid+] +Password: [+pwd+] + +Once you log into [+sname+] ([+surl+]), you can change your password. + +Regards, +Site Administrator'; +$_lang["table_hoverinfo"] = 'Hover the mouse cursor over a table\'s name to see a short description of the table\'s function (not all tables have comments set).'; +$_lang["table_prefix"] = 'Table prefix'; +$_lang["tag"] = 'Tag'; +$_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; +$_lang["template_assignedtv_tab"] = 'Assigned Template Variables'; +$_lang["template_code"] = 'Template code (html)'; +$_lang["template_desc"] = 'Description'; +$_lang["template_edit_tab"] = 'Edit Template'; +$_lang["template_management_msg"] = 'Choose which Template you wish to edit.'; +$_lang["template_msg"] = 'Create and edit Templates. Changed or new Templates won\'t be visible in your site\'s cached pages until the cache is emptied, however, you can use the preview function on a page to see the Template in action.'; +$_lang["template_name"] = 'Template name'; +$_lang["template_no_tv"] = 'No Template Variables have been assigned to this Template yet.'; +$_lang["template_notassigned_tv"] = 'These Template Variables are available for assigning.'; +$_lang["template_reset_all"] = 'Reset all pages to use Default Template'; +$_lang["template_reset_specific"] = 'Reset only \'%s\' pages'; +$_lang["template_selectable"] = 'Template selectable when creating or editing ressources.'; +$_lang["template_title"] = 'Create/edit Template'; +$_lang["template_tv_edit"] = 'Edit the TV sort order'; +$_lang["template_tv_edit_message"] = 'Drag to reorder the Template Variables for this template.'; +$_lang["template_tv_edit_title"] = 'Template Variable Sort Order'; +$_lang["template_tv_msg"] = 'The Template Variables assigned to this Template are listed below.'; +$_lang["thursday"] = 'Thursday'; +$_lang["tmplvar_access_msg"] = 'Select the Resource Groups that are allowed to modify the content or value of this Template Variable'; +$_lang["tmplvar_change_template_msg"] = 'Changing this Template will cause the page to reload the Template Variables, losing any unsaved changes.\n\n Are you sure you want to change this Template?'; +$_lang["tmplvar_inuse"] = 'The following Resource(s) are currently using this Template Variable. To continue with the delete operation click the Delete button otherwise click the Cancel button.'; +$_lang["tmplvar_tmpl_access"] = 'Template Access'; +$_lang["tmplvar_tmpl_access_msg"] = 'Select the Templates that are allowed to access/process this Template Variable'; +$_lang["tmplvar"] = 'Template Variable'; +$_lang["tmplvars"] = 'Template Variables'; +$_lang["tmplvars_binding_msg"] = 'This field supports data source bindings using the @ commands'; +$_lang["tmplvars_caption"] = 'Caption'; +$_lang["tmplvars_default"] = 'Default Value'; +$_lang["tmplvars_description"] = 'Description'; +$_lang["tmplvars_elements"] = 'Input Option Values'; +$_lang["tmplvars_inherited"] = 'Value inherited'; +$_lang["tmplvars_management_msg"] = 'Manage additional Template Variables for your Resources.'; +$_lang["tmplvars_msg"] = 'Add or edit Template Variables here. Template Variables must be assigned to Templates in order to access them from Snippets and Resources.'; +$_lang["tmplvars_name"] = 'Template Variable Name'; +$_lang["tmplvars_novars"] = 'No Template Variables found'; +$_lang["tmplvars_rank"] = 'Sort Order'; +$_lang["tmplvars_rank_edit_message"] = 'Drag to reorder the Template Variables.'; +$_lang["tmplvars_reset_params"] = 'Reset parameters'; +$_lang["tmplvars_title"] = 'Create/edit Template Variable'; +$_lang["tmplvars_type"] = 'Input Type'; +$_lang["tmplvars_widget"] = 'Widget'; +$_lang["tmplvars_widget_prop"] = 'Widget Properties'; +$_lang["to"] = 'to'; +$_lang["toggle_fullscreen"] = 'Toggle Fullscreen'; +$_lang["tools"] = 'Tools'; +$_lang["top_howmany_message"] = 'When viewing reports, how large should the \'Top ...\' lists be?'; +$_lang["top_howmany_title"] = 'Top how many'; +$_lang["total"] = 'total'; +$_lang["track_visitors_message"] = 'Check to show the child resources in the document tree'; +$_lang["track_visitors_title"] = 'Show child resources'; +$_lang["tree_page_click"] = 'Page Click Behavior'; +$_lang["tree_page_click_message"] = 'The default behavior when clicking on a page in the site tree.'; +$_lang["use_breadcrumbs"] = 'Show navigation'; +$_lang["use_breadcrumbs_message"] = 'Show the navigation when creating or editing Resource in the Manager'; +$_lang["tree_show_protected"] = 'Show protected pages'; +$_lang["tree_show_protected_message"] = 'When set to "No", Protected Resources (and all their child-Resources) do not appear in the Site Tree menu. "No" is the legacy setting for EVO.'; +$_lang["truncate_table"] = 'Click here to truncate this table'; +$_lang["tuesday"] = 'Tuesday'; +$_lang["tv"] = 'TV'; +$_lang["type"] = 'Type'; +$_lang["udperms_allowroot_message"] = 'Allow Users to create new Resources in the site root. '; +$_lang["udperms_allowroot_title"] = 'Allow root'; +$_lang["udperms_message"] = 'Control access to Resources via User Groups and Resource Groups.'; +$_lang["udperms_title"] = 'Use access permissions'; +$_lang["unable_set_link"] = 'Unable to set the link!'; +$_lang["unable_set_parent"] = 'Unable to set new parent!'; +$_lang["unauthorizedpage_message"] = 'Enter a published and publicly accessible Resource ID to redirect Users to when requesting a secured/unauthorized Resource.'; +$_lang["unauthorizedpage_title"] = 'Unauthorized page'; +$_lang["unblock_message"] = 'This User will not be blocked after saving the User\'s data.'; +$_lang["undelete_resource"] = 'Undelete Resource'; +$_lang["unpublish_date"] = 'Unpublish Date'; +$_lang["unpublish_events"] = 'Un-publish Events'; +$_lang["unpublish_resource"] = 'Un-publish Resource'; +$_lang["untitled_resource"] = 'Untitled Resource'; +$_lang["untitled_weblink"] = 'Untitled Weblink'; +$_lang["update_params"] = 'Update parameter display'; +$_lang["update_settings_from_language"] = 'Replace current with:'; +$_lang["upload_maxsize_message"] = 'Enter the maximum file size that can be uploaded via the file manager. Upload file size must be entered in bytes. NOTE: Large files can take a very long time to upload!'; +$_lang["upload_maxsize_title"] = 'Maximum upload size'; +$_lang["uploadable_files_message"] = 'Enter a list of files that can be uploaded into \'assets/files/\' using the File Browser. Please enter the extensions for the filetypes, separated by commas.'; +$_lang["uploadable_files_title"] = 'Uploadable File Types'; +$_lang["uploadable_flash_message"] = 'Enter a list of files that can be uploaded into \'assets/flash/\' using the File Browser. Please enter the extensions for the flash types, separated by commas.'; +$_lang["uploadable_flash_title"] = 'Uploadable Flash Types'; +$_lang["uploadable_images_message"] = 'Enter a list of files that can be uploaded into \'assets/images/\' using the File Browser. Please enter the extensions for the image types, separated by commas.'; +$_lang["uploadable_images_title"] = 'Uploadable Image Types'; +$_lang["uploadable_media_message"] = 'Enter a list of files that can be uploaded into \'assets/media/\' using the File Browser. Please enter the extensions for the media types, separated by commas.'; +$_lang["uploadable_media_title"] = 'Uploadable Media Types'; +$_lang["use_alias_path_message"] = 'Enabling this option generates a virtual path to the Resource. E.g., if a Resource "child.html" is located in a Container Resource "parent", then the full URL alias path URL will be "/parent/child.html".'; +$_lang["use_alias_path_title"] = 'Use Friendly URL alias path'; +$_lang["use_editor_message"] = 'Enable editing with a Rich Text Editor (RTE). This setting applies to all Resources, but can be overridden in the User settings.'; +$_lang["use_editor_title"] = 'Enable editor'; +$_lang["use_global_tabs"] = 'Use global Tabs'; +$_lang["user"] = 'User'; +$_lang["user_block"] = 'Blocked'; +$_lang["user_blockedafter"] = 'Blocked After'; +$_lang["user_blockeduntil"] = 'Blocked Until'; +$_lang["user_changeddata"] = 'Your data has been changed. Please log in again.'; +$_lang["user_country"] = 'Country'; +$_lang["user_dob"] = 'Date of birth'; +$_lang["user_doesnt_exist"] = 'User does not exist'; +$_lang["user_edit_self_msg"] = 'You may need to log out and log in again after saving to fully update your information. New passwords will be sent to your e-mail address or shown onscreen.'; +$_lang["user_email"] = 'E-mail address'; +$_lang["user_failedlogincount"] = 'Failed logins'; +$_lang["user_fax"] = 'Fax'; +$_lang["user_female"] = 'Female'; +$_lang["user_full_name"] = 'Full name'; +$_lang["user_gender"] = 'Gender'; +$_lang["user_is_blocked"] = 'This User is blocked!'; +$_lang["user_logincount"] = 'Login count'; +$_lang["user_male"] = 'Male'; +$_lang["user_management_msg"] = 'Choose the Content Manager to edit. Content Manager Users are those Users who are allowed to log into the Content Manager'; +$_lang["user_management_title"] = 'Manager Users'; +$_lang["user_mobile"] = 'Mobile phone number'; +$_lang["user_phone"] = 'Phone number'; +$_lang["user_photo"] = 'User Photo'; +$_lang["user_photo_message"] = 'Enter the image url for the this User or use the insert button to selected or upload an image file on the server.'; +$_lang["user_prevlogin"] = 'Last login'; +$_lang["user_role"] = 'User\'s role'; +$_lang["user_state"] = 'State'; +$_lang["user_title"] = 'Create/Edit Manager User'; +$_lang["user_upload_message"] = ' If you wish to stop this User uploading any filetypes in this category, make sure that the \'Use Main Configuration Setting\' checkbox is not ticked and leave the field blank.'; +$_lang["user_use_config"] = 'Use System Configuration Setting'; +$_lang["user_zip"] = 'Zip'; +$_lang["username"] = 'Username'; +$_lang["users"] = 'Users'; +$_lang["valid_hostnames_message"] = 'Help prevent XSS exploits misusing the site_url system setting by providing a comma separated list of valid hostnames for this installation. This is important for some types of shared hosts or hosts direct accessible via an IP address. First hostname in the list is used if the HTTP_HOST does not match any valid hostname.'; +$_lang["valid_hostnames_title"] = 'Valid hostnames'; +$_lang["validate_referer_message"] = 'Validate the HTTP_REFERER headers to reduce the risk of your content editors being tricked into performing unintended actions in the manager as victims of a CSRF (Cross Site Request Forgery) attack. Some configurations may not be able to use this option if the server is not sending HTTP_REFERER headers.'; +$_lang["validate_referer_title"] = 'Validate HTTP_REFERER headers?'; +$_lang["value"] = 'Value'; +$_lang["version"] = 'Version'; +$_lang["view"] = 'View'; +$_lang["view_child_resources_in_container"] = 'View children'; +$_lang["view_log"] = 'View log'; +$_lang["view_logging"] = 'Manager Actions'; +$_lang["view_sysinfo"] = 'System Info'; +$_lang["warning"] = 'Warning!'; +$_lang["warning_not_saved"] = 'The changes you have made have not been saved yet. You can choose to stay on the current page in order to save the changes (\'Cancel\'), or you can leave this page, losing any changes you have made (\'OK\').'; +$_lang["warning_visibility"] = 'Configuration Warnings visible to'; +$_lang["warning_visibility_message"] = 'Control the visibility of the configuration warnings shown on the Manager welcome page'; +$_lang["web_access_permissions"] = 'Web access permissions'; +$_lang["web_access_permissions_user_groups"] = 'Web User groups'; +$_lang["web_permissions"] = 'Web Permissions'; +$_lang["web_user_management_msg"] = 'Choose the web User you wish to edit. Web Users are those Users who are only allowed to log into the web site'; +$_lang["web_user_management_title"] = 'Web Users'; +$_lang["web_user_title"] = 'Create/edit Web User'; +$_lang["web_users"] = 'Web Users'; +$_lang["weblink"] = 'Weblink'; +$_lang["webpwdreminder_message"] = 'Enter a message to be sent to your Web Users whenever they request a new password via email. The Content Manager will send an e-mail containing their new password and activation information.
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; +$_lang["webpwdreminder_title"] = 'Web Reminder Email'; +$_lang["websignupemail_message"] = 'Set the email message sent to Users when creating accounts including their username and password
          Note: The following Placeholders are replaced by the Content Manager when the message is sent:

          [+sname+] - Name of your web site,
          [+saddr+] - Your web site email address,
          [+surl+] - Your site url,
          [+uid+] - User\'s Login name or id,
          [+pwd+] - User\'s password,
          [+ufn+] - User\'s full name.

          Leave the [+uid+] and [+pwd+] in the e-mail, or else the username and password won\'t be sent in the mail and your Users won\'t know their username or password!'; +$_lang["websignupemail_title"] = 'Web Signup e-mail'; +$_lang["allow_multiple_emails_title"] = 'Duplicate Web User email address'; +$_lang["allow_multiple_emails_message"] = 'Allows Web Users to share the same email address for situations when a member may not have their own email address or there is just one family email address.
          Note: Any password reminder and registration logic will need to account for this option if set to yes.'; +$_lang["wednesday"] = 'Wednesday'; +$_lang["welcome_messages"] = 'Your Inbox contains %d message(s), of which %s are unread.'; +$_lang["welcome_title"] = 'Welcome to your EVO Content Manager'; +$_lang["which_editor_message"] = 'Select the rich text editor (RTE). You can download and install additional RTEs from the EVO download page.'; +$_lang["which_editor_title"] = 'Editor to use'; +$_lang["working"] = 'Working...'; +$_lang["wrap_lines"] = 'Wrap lines'; +$_lang["xhtml_urls_message"] = 'Replaces ampersand (&) characters in urls that are generated by EVO with the validating &amp; htmlentity'; +$_lang["xhtml_urls_title"] = 'XHTML URLs'; +$_lang["yes"] = 'Yes'; +$_lang["you_got_mail"] = 'You got mail'; +$_lang["yourinfo_message"] = 'This section shows some information about you:'; +$_lang["yourinfo_previous_login"] = 'Your last login:'; +$_lang["yourinfo_role"] = 'Your role is:'; +$_lang["yourinfo_title"] = 'Your info'; +$_lang["yourinfo_total_logins"] = 'Total number of logins:'; +$_lang["yourinfo_username"] = 'You are logged in as:'; + +$_lang["a17_error_reporting_title"] = 'Detection level of PHP errors'; +$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP errors.'; +$_lang["a17_error_reporting_opt0"] = 'Ignore all'; +$_lang["a17_error_reporting_opt1"] = 'Ignore warnings of a slight notice level (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; +$_lang["a17_error_reporting_opt2"] = 'Detect all errors except E_NOTICE'; +$_lang["a17_error_reporting_opt99"] = 'Detect all'; + +$_lang["pwd_hash_algo_title"] = 'Hash algorithm'; +$_lang["pwd_hash_algo_message"] = 'Password hash algorithm.'; + +$_lang["enable_bindings_title"] = 'Enable @Bindings commands'; +$_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; +$_lang["enable_filter_title"] = 'Enable filters'; +$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation +$_lang["enable_filter_phx_warning"] = 'When PHx plugin enabled, built-in filters are disabled by default'; + +$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; + +$_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; +$_lang["bkmgr_restore_msg"] = '

          Database tables could be restored by SQL:

          '; +$_lang["bkmgr_restore_title"] = 'Restore'; +$_lang["bkmgr_import_ok"] = 'SQL recovery was performed normally.'; +$_lang["bkmgr_snapshot_ok"] = 'The snapshot was saved normally.'; +$_lang["bkmgr_run_sql_file_label"] = 'Execute by SQL file'; +$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL commands'; +$_lang["bkmgr_run_sql_submit"] = 'Execute restore'; +$_lang["bkmgr_run_sql_result"] = 'Result'; +$_lang["bkmgr_snapshot_title"] = 'Snapshot save and recovery'; +$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved in and restored from a server directory.
          Location: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_submit"] = 'Add Snapshot'; +$_lang["bkmgr_snapshot_list_title"] = 'List of snapshots'; +$_lang["bkmgr_restore_submit"] = 'Revert this data'; +$_lang["bkmgr_restore_confirm"] = 'Are you sure you want to revert backup\n[+filename+] ?'; +$_lang["bkmgr_snapshot_nothing"] = 'No snapshots available'; + +$_lang["files.dynamic.php1"] = 'New File'; +$_lang["files.dynamic.php2"] = 'This directory cannot be displayed.'; +$_lang["files.dynamic.php3"] = 'There is a problem in a file name.'; +$_lang["files.dynamic.php4"] = 'The text file was created.'; +$_lang["files.dynamic.php5"] = 'File could not be duplicated.'; +$_lang["files.dynamic.php6"] = 'File or directory could not be renamed.'; +$_lang["files_dynamic_new_folder_name"] = 'Enter new directory name:'; +$_lang["files_dynamic_new_file_name"] = 'Enter new file name:'; +$_lang["not_readable_dir"] = 'Can not read this directory.'; +$_lang["confirm_delete_dir"] = 'Are you sure you want to delete the directory?'; +$_lang["confirm_delete_dir_recursive"] = 'Are you sure you want to delete this directory?\n\nAll files inside this directory will also be deleted.'; + +$_lang["make_folders_title"] = 'End Container URL with Slash'; +$_lang["make_folders_message"] = 'Append trailing slash to Resources that are set as containers when using Friendly URLs.'; + +$_lang["check_files_onlogin_title"] = 'Check core files on login'; +$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised EVO system file and website.'; + +$_lang["configcheck_sysfiles_mod"] = 'Important System Files have been modified.'; +$_lang["configcheck_sysfiles_mod_msg"] = 'You have configured EVO to check important system files for possible website script attacks. This warning does not necessarily mean your site has been compromised, however, you should review the watched files in your installation (set in System configuration -> User -> Check core files on login). If you find your files unaltered or changes were made by site administrators, go to System Configuration and click to re-save settings to dismiss this message. Changes in the following files have been found:'; + +$_lang['email_method_title'] = 'Sendmail method'; +$_lang['email_method_mail'] = 'PHP mail() function'; +$_lang['email_method_smtp'] = 'SMTP Server'; +$_lang['smtp_auth_title'] = 'SMTP-AUTH'; +$_lang['smtp_host_title'] = 'SMTP host'; +$_lang['smtp_secure_title'] = 'Encrypted SMTP'; +$_lang['smtp_username_title'] = 'SMTP username'; +$_lang['smtp_password_title'] = 'SMTP password'; +$_lang['smtp_port_title'] = 'SMTP port'; + +$_lang["setting_resource_tree_node_name"] = 'Display Name in Resource Tree'; +$_lang["setting_resource_tree_node_name_desc"] = 'Select the Resource field to show as the Resource name in the Resource Tree. The default setting is pagetitle.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Note: Since EVO 1.1 you can change this Display Name within Resource-Tree´s sorting option. This setting is used when Display Name in Resource Tree is set to "Default".'; + +$_lang["resource_opt_alvisibled"] = 'Use current alias in alias path'; +$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; +$_lang['resource_opt_is_published'] = 'Published'; +$_lang["docid_incrmnt_method_title"] = 'Increment Resource ID method'; +$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; +$_lang["docid_incrmnt_method_1"] = 'Minimum missed ID'; +$_lang["docid_incrmnt_method_2"] = 'Maximal ID + 1'; + +$_lang["enable_cache_title"] = 'Document caching'; +$_lang["disabled_at_login"] = 'Disabled at login'; + +$_lang["cache_type_title"] = 'Document caching type'; +$_lang["cache_type_1"] = 'Cache is based only on Resource ID (standard)'; +$_lang["cache_type_2"] = 'Cache is based on Resource ID and $_GET parameters'; +$_lang["seostrict_title"] = 'Use SEO Strict URLs'; +$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content (if needed)'; +$_lang["aliaslistingfolder_title"] = 'Use AliasListing only for Folders'; +$_lang["aliaslistingfolder_message"] = 'Reduces memory consumption when a large number of resources'; + +$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file in the EVO installation directory at .htaccess to use the Friendly URL function.'; +$_lang["settings_friendlyurls_alert2"] = 'Since EVO was installed in a subdirectory, it is necessary to change the content of .htaccess.'; + +$_lang["user_street"] = 'Street'; +$_lang["user_city"] = 'City'; +$_lang["user_other"] = 'Other'; + +$_lang["import_site.static.php1"] = 'Reset resource tree'; +$_lang["import_site.static.php2"] = 'Reset resource tree and initialize all Resource IDs.'; +$_lang["import_site.static.php3"] = 'Target'; +$_lang["import_site.static.php4"] = 'Only <body></body> part'; +$_lang["import_site.static.php5"] = 'Whole file content'; + +$_lang["a83_ignore_ids_title"] = 'Ignore IDs (comma separated)'; +$_lang["export_site.static.php1"] = 'Target'; +$_lang["export_site.static.php2"] = 'Only edited Resources'; +$_lang["export_site.static.php3"] = 'All Resources'; +$_lang["export_site.static.php4"] = 'Search for'; +$_lang["export_site.static.php5"] = 'Replace with'; +$_lang["export_site.static.php6"] = 'Target'; +$_lang["export_site.static.php7"] = 'Files could not be saved to [+rb_base_url+]'; + +$_lang["mutate_settings.dynamic.php6"] = 'Send mail on EVO errors'; +$_lang["mutate_settings.dynamic.php7"] = 'not notify'; +$_lang["mutate_settings.dynamic.php8"] = 'A mail with the error source will be sent to [(emailsender)] ([+emailsender+]) if a EVO error occurs. The details of the error could be seen in the EVO system events log.'; + +$_lang["error_no_privileges"] = "You don't have enough privileges for this action!"; +$_lang["error_no_optimise_tablename"] = "Table to optimise not found in request!"; +$_lang["error_no_truncate_tablename"] = "Table to truncate not found in request!"; +$_lang["error_double_action"] = "Double action (GET & POST) posted!"; +$_lang["error_no_id"] = "ID not passed in request!"; +$_lang["error_id_nan"] = "ID passed in request is NaN!"; +$_lang["error_no_parent"] = "Couldn't find parent document's name!"; +$_lang["error_many_results"] = "Too many results returned from database!"; +$_lang["error_no_results"] = "Not enough/ no results returned from database!"; +$_lang["error_no_user_selected"] = "No user selected as recipient of this message!"; +$_lang["error_no_group_selected"] = "No group selected as recipient of this message!"; +$_lang["error_movedocument1"] = "Document cannot be it's own parent!"; +$_lang["error_movedocument2"] = "Document's ID not passed in request!"; +$_lang["error_movedocument3"] = "New parent not set in request!"; +$_lang["error_internet_connection"] = "Server isn't available. Check your internet connection!"; + +$_lang["login_processor_unknown_user"] = "Incorrect username or password entered!"; +$_lang["login_processor_wrong_password"] = "Incorrect username or password entered!"; +$_lang["login_processor_many_failed_logins"] = "Due to too many failed logins, you have been blocked!"; +$_lang["login_processor_blocked1"] = "You are blocked and cannot log in!"; +$_lang["login_processor_blocked2"] = "You are blocked and cannot log in! Please try again later."; +$_lang["login_processor_blocked3"] = "You are blocked automatic after a specified date and you cannot log in anymore!"; +$_lang["login_processor_bad_code"] = "The security code you entered didn't validate! Please try to login again!"; +$_lang["login_processor_remotehost_ip"] = "Your hostname doesn't point back to your IP!"; +$_lang["login_processor_remote_ip"] = "You are not allowed to login from this location."; +$_lang["login_processor_date"] = "You are not allowed to login at this time. Please try again later."; +$_lang["login_processor_captcha_config"] = "Captcha is not configured properly."; + +$_lang["dp_dayNames"] = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']"; +$_lang["dp_monthNames"] = "['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']"; +$_lang["dp_startDay"] = "1"; + +$_lang["check_all"] = "Select all"; +$_lang["check_none"] = "Select none"; +$_lang["check_toggle"] = "Toggle selection"; + +$_lang["version_notices"] = "Version Notices"; + +$_lang["em_button_shift"] = " (Shift-Mouseclick to open multiple windows)"; + +$_lang["reset_sysfiles_checksum_button"] = "Rebuild Checksums"; +$_lang["reset_sysfiles_checksum_alert"] = "Are you sure you want to reset the system files checksums?"; + +$_lang["file_browser_disabled_msg"] = "The File Browser Feature is not enabled."; +$_lang["which_browser_default_title"]= "Default File Browser"; +$_lang["which_browser_default_msg"]= "Choose the File Browser you prefer as default. In User-Settings you can choose a Custom Browser per User, or leave it on "default"."; +$_lang["which_browser_title"]= "File Browser"; +$_lang["which_browser_msg"]= "You can choose a custom File Browser for this user. To use the System´s default Browser, leave it on "Default"."; +$_lang["option_default"] = "Default"; +$_lang["position"] = "Position"; +$_lang["are_you_sure"] = "Are you sure?"; + +$_lang['evo_downloads_title'] = "Evolution Downloads"; +$_lang['help_translating_title'] = "Help translating Evolution"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Previous Releases"; +$_lang["extras"] = "Extras"; + +$_lang["display_locks"] = "Display Locks"; +$_lang["role_display_locks"] = "Display Locks"; +$_lang["session_timeout"] = "Session Timeout"; +$_lang["session_timeout_msg"] = "EVO will ping the server as per setting "Mail Check Time Period". If the last ping exceeds this setting, the associated session will be considered invalid and all related locks will be removed automatically. Set value in minutes (>2min, default 15min)."; +$_lang["unlock_element_id_warning"] = "Are you sure you want to unlock this [+element_type+] (ID [+id+])?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template-Variable"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plugin"; +$_lang["lock_element_type_6"] = "Module"; +$_lang["lock_element_type_7"] = "Resource"; +$_lang["lock_element_type_8"] = "Role"; +$_lang["lock_element_editing"] = "You are editing this [+element_type+] since\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "This [+element_type+] is locked by user\n[+username+] since [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Minify php code in site cache'; +$_lang["minifyphp_incache_message"] = 'Minify php code (snippets and plugins) and store in the site cache file, ref:#938'; + +$_lang["logout_reminder_msg"] = "Reminder: It seems on [+date+] you forgot to logout. Please pay attention in future to do so after your work is finished."; + +$_lang["allow_eval_title"] = "Eval php code in snippet call"; +$_lang["allow_eval_msg"] = "For developer : Please use \$modx->safeEval()."; +$_lang["allow_eval_with_scan"] = "Execute only permitted functions"; +$_lang["allow_eval_with_scan_at_post"] = "Execute all. However, at POST, only permitted functions"; +$_lang["allow_eval_everytime_eval"] = "Unlimited (Use only for debugging)"; +$_lang["allow_eval_dont_eval"] = "Do not allow all functions"; + +$_lang["safe_functions_at_eval_title"] = "Functions to allow eval"; +$_lang["safe_functions_at_eval_msg"] = "Comma separated list"; + +$_lang["multiple_sessions_msg"] = "Information: Multiple active user sessions (total [+total+]) found for user [+username+]."; +$_lang["iconv_not_available"] = "It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it."; + +$_lang["cm_create_new_category"] = "Create the new category"; +$_lang["cm_category_name"] = "Category name"; +$_lang["cm_category_position"] = "Category position"; +$_lang["cm_no_x_assigned"] = "No %s assigned"; +$_lang["cm_save_categorization"] = "Save categorization"; +$_lang["cm_update_categories"] = "Update categories"; +$_lang["cm_assigned_elements"] = "Assigned elements"; +$_lang["cm_edit_name"] = "Edit name"; +$_lang["cm_mark_for_deletion"] = "Mark for deletion"; +$_lang["cm_delete_now"] = "Delete immediately"; +$_lang["cm_delete_element_x_now"] = "Delete "%s" immediately"; +$_lang["cm_select_element_group"] = "Select an element group"; +$_lang["cm_global_messages"] = "Global Messages"; +$_lang["cm_add_new_category"] = "Add a new category"; +$_lang["cm_edit_categories"] = "Edit categories"; +$_lang["cm_sort_categories"] = "Sort categories"; +$_lang["cm_categorize_elements"] = "Categorize elements"; +$_lang["cm_translation"] = "Translation"; +$_lang["cm_translations"] = "Translations"; +$_lang["cm_categorize_x"] = "Categorize %s"; +$_lang["cm_unknown_error"] = "Something went wrong."; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) has been assigned to category %s(%s)"; +$_lang["cm_no_categorization"] = "No categorization made."; +$_lang["cm_no_changes"] = "Nothing to change, so no changes made."; +$_lang["cm_x_changes_made"] = "%s changes made"; +$_lang["cm_enter_name_for_category"] = "Please enter a name for the new category."; +$_lang["cm_category_x_exists"] = "Category %s already exists."; +$_lang["cm_category_x_saved_at_position_y"] = "The new category %s was saved at position %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Category %s was moved to position %s"; +$_lang["cm_category_x_deleted"] = "Category %s has been deleted"; +$_lang["cm_category_x_renamed_to_y"] = "Category %s was renamed to %s"; +$_lang["cm_translation_for_x_empty"] = "Translation for %s was empty"; +$_lang["cm_translation_for_x_to_y_success"] = "Translation for %s to %s successfully saved"; +$_lang["cm_save_new_sorting"] = "Save new sorting"; +$_lang["cm_translate_phrases"] = "Translate phrases"; +$_lang["cm_translate_module_phrases"] = "Translate module-phrases"; +$_lang["cm_native_phrase"] = "Native phrase"; + +$_lang["btn_view_options"] = 'View Options'; +$_lang["view_options_msg"] = 'The display & listing of elements can be customized via "View Options"-button. Settings are saved and restored per Browser using HTML5´s localStorage.'; +$_lang["viewopts_title"] = 'View Options'; +$_lang["viewopts_cb_buttons"] = 'Buttons'; +$_lang["viewopts_cb_descriptions"] = 'Descriptions'; +$_lang["viewopts_cb_icons"] = 'Icons'; +$_lang["viewopts_radio_list"] = 'List'; +$_lang["viewopts_radio_inline"] = 'Inline'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Font-Size'; +$_lang["viewopts_cb_alltabs"] = 'All Tabs'; + +$_lang['email_sender_method'] = 'The envelope sender of the message'; +$_lang['auto'] = 'Auto-detect'; +$_lang['use_emailsender'] = 'Use [(emailsender)] value'; +$_lang['email_sender_method_message'] = 'The envelope sender of the message. This will usually be turned into a Return-Path header by the receiver, and is the address that bounces will be sent to. Auto-detect will work in most cases.'; + +$_lang['login_form_position_title'] = 'Login form postiton'; +$_lang['login_form_position_left'] = 'left'; +$_lang['login_form_position_center'] = 'center'; +$_lang['login_form_position_right'] = 'right'; +$_lang["login_form_style"] = 'Login form style:'; +$_lang["login_form_style_dark"] = 'dark'; +$_lang["login_form_style_light"] = 'light'; +$_lang['login_logo_title'] = 'Login page logo image'; +$_lang['login_logo_message'] = 'Recomended login logo image width: 360px, type .png'; +$_lang['login_bg_title'] = 'Login page background image'; +$_lang['login_bg_message'] = 'Recomended login page background image width: 1920px '; + +$_lang['manager_menu_position_title'] = 'Main menu position'; +$_lang['manager_menu_position_top'] = 'top'; +$_lang['manager_menu_position_left'] = 'left'; + +$_lang['invalid_event_response'] = 'The %s event has ivalid output'; + +$_lang['chunk_processor'] = 'Chunks processing class'; +$_lang['enable_mootools'] = 'Enable Mootools in manager'; +$_lang['enable_mootools_message'] = 'Load Mootools.js in manager for backward compatibility'; diff --git a/manager/includes/lang/errormsg/spanish-utf8.inc.php b/manager/includes/lang/errormsg/spanish-utf8.inc.php new file mode 100644 index 00000000..fa3a2d1f --- /dev/null +++ b/manager/includes/lang/errormsg/spanish-utf8.inc.php @@ -0,0 +1,38 @@ +' . $contents); +?> \ No newline at end of file diff --git a/manager/includes/lang/finnish.inc.php b/manager/includes/lang/finnish.inc.php index 204dae6b..2a377cdc 100755 --- a/manager/includes/lang/finnish.inc.php +++ b/manager/includes/lang/finnish.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Salasanan tiedonanto'; $_lang["password_method_email"] = 'Lähetä uusi salasana sähköpostilla.'; $_lang["password_method_screen"] = 'Näytä uusi salasana ruudulla.'; -$_lang["password_msg"] = 'Uusi salasana käyttäjälle %s on %s.'; -$_lang["php_version_check"] = 'MODX on yhteensopiva PHP versio 5.0.0 tai paremman kanssa. Ole hyvä ja päivitä PHP asennuksesi!'; +$_lang["password_msg"] = 'Uusi salasana käyttäjälle %s on %s
          '; +$_lang["php_version_check"] = 'MODX on yhteensopiva PHP versio 5.6.0 tai paremman kanssa. Ole hyvä ja päivitä PHP asennuksesi!'; $_lang["plugin"] = 'Liitännäinen'; $_lang["plugin_code"] = 'Lähdekoodi (php)'; $_lang["plugin_config"] = 'Liitännäisen asetukset'; diff --git a/manager/includes/lang/francais-utf8.inc.php b/manager/includes/lang/francais-utf8.inc.php index 1f81d7c7..51494ec1 100755 --- a/manager/includes/lang/francais-utf8.inc.php +++ b/manager/includes/lang/francais-utf8.inc.php @@ -661,8 +661,8 @@ $_lang["password_method"] = 'Méthode de notification du mot de passe'; $_lang["password_method_email"] = 'Envoyer le nouveau mot de passe par email.'; $_lang["password_method_screen"] = 'Afficher le nouveau mot de passe à l\'écran.'; -$_lang["password_msg"] = 'Le nouveau mot de passe de %s est %s.'; -$_lang["php_version_check"] = 'MODX est compatible avec PHP version 5.0.0 ou ultérieure. Veuillez mettre à jour votre installation de PHP!'; +$_lang["password_msg"] = 'Le nouveau mot de passe de %s est %s
          '; +$_lang["php_version_check"] = 'MODX est compatible avec PHP version 5.6.0 ou ultérieure. Veuillez mettre à jour votre installation de PHP!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Code source du Plugin (php)'; $_lang["plugin_config"] = 'Réglages du Plugin'; diff --git a/manager/includes/lang/german.inc.php b/manager/includes/lang/german.inc.php index b7acfc77..f63b7661 100755 --- a/manager/includes/lang/german.inc.php +++ b/manager/includes/lang/german.inc.php @@ -1,995 +1,1033 @@ -PHP Application Framework und Content Management System lizensiert unter der GNU GPL.'; +$_lang["about_title"] = 'Über Evolution'; +$_lang["access_permission_denied"] = 'Sie haben nicht die notwendige Zugriffsberechtigung für diese Ressource.'; +$_lang["access_permission_parent_denied"] = 'Sie haben nicht die notwendige Zugriffsberechtigung, um eine Ressource an dieser Stelle zu erstellen oder hierher zu verschieben.'; +$_lang["access_permissions"] = 'Zugriffsberechtigung'; +$_lang["access_permissions_add_resource_group"] = 'Eine neue Ressourcen-Gruppe erstellen'; +$_lang["access_permissions_add_user_group"] = 'Eine neue Benutzergruppe erstellen'; +$_lang["access_permissions_docs_collision"] = 'Durch einen Konflikt zwischen Web-Benutzergruppen und Manager-Benutzergruppen für diese Rolle, ist diese Ressource öffentlich zugänglich. Kontaktieren Sie Ihren Seiten-Administrator für weitere Hilfe.'; +$_lang["access_permissions_docs_message"] = 'Wählen Sie aus welchen Ressourcen-Gruppe diese Ressource zugeordnet ist'; +$_lang["access_permissions_group_link"] = 'Einen neuen Gruppen-Link erstellen'; +$_lang["access_permissions_introtext"] = 'Hier können Sie Benutzer- und Ressourcen-Gruppen für die Zugriffsberechtigung bearbeiten. Um einen Benutzer einer Benutzergruppe zuzuordnen, bearbeiten Sie den Benutzer und wählen die zugehörige(n) Gruppe(n). Um eine Ressource einer Benutzergruppe zuzuordnen, bearbeiten Sie die Ressource und wählen die zugehörige(n) Gruppe(n).'; +$_lang["access_permissions_link_to_group"] = 'zur Ressourcen-Gruppe'; +$_lang["access_permissions_link_user_group"] = 'Benutzergruppe verlinken'; +$_lang["access_permissions_links"] = 'Benutzer- / Ressourcen-Gruppen-Links'; +$_lang["access_permissions_links_tab"] = 'Hier legen Sie fest welche Benutzergruppen auf die Ressourcen-Gruppen Zugriffsrechte haben (z.B. Ressourcen bearbeiten oder anlegen). Um eine Ressourcen-Gruppe mit einer Benutzergruppe zu verknüpfen, wählen Sie die entsprechende Gruppe aus dem Dropdown-Menü und klicken anschließend auf „Absenden“. Um einen Link für eine bestimmte Gruppe zu entfernen, klicken Sie auf „Entfernen“. Die Verknüpfung wird sofort gelöscht.'; +$_lang["access_permissions_no_resources_in_group"] = 'Keine.'; +$_lang["access_permissions_no_users_in_group"] = 'Keine.'; +$_lang["access_permissions_off"] = 'Zugriffsberechtigungen wurden nicht aktiviert. Sämtliche Einstellungen, die Sie hier vornehmen bleiben wirkungslos, bis die Zugriffsberechtigungen wieder aktiviert werden.'; +$_lang["access_permissions_resource_groups"] = 'Ressourcen-Gruppen'; +$_lang["access_permissions_resources_in_group"] = 'Ressourcen in Gruppe: '; +$_lang["access_permissions_resources_tab"] = 'Hier sehen Sie die angelegten Ressourcen-Gruppen. Sie können auch neue Gruppen anlegen, Gruppen umbenennen, Gruppen löschen und sehen welche Ressourcen in den unterschiedlichen Gruppen enthalten sind (den Namen der Ressource sehen Sie, in dem Sie mit der Maus über die ID fahren). Um eine Ressource zu einer Gruppe hinzuzufügen oder von einer Gruppe zu entfernen, ändern Sie die entsprechende Ressource direkt.'; +$_lang["access_permissions_user_groups"] = 'Benutzergruppen'; +$_lang["access_permissions_user_message"] = 'Hier können Sie auswählen welcher Benutzergruppe dieser Benutzer zugeordnet ist:'; +$_lang["access_permissions_users_in_group"] = 'Benutzer in Gruppe:'; +$_lang["access_permissions_users_tab"] = 'Hier sehen Sie die angelegten Benutzergruppen. Sie können auch neue Gruppen anlegen, Gruppen umbenennen, Gruppen löschen und die Zugehörigkeit der Benutzer zu Gruppen sehen. Um ein Benutzer zu einer Gruppe hinzuzufügen oder zu entfernen, bearbeiten Sie direkt den entsprechenden Benutzer. Administratoren (Benutzer mit der Rollen ID 1) haben immer Zugriff auf alle Ressourcen und müssen keiner speziellen Gruppen angehören.'; +$_lang["account_email"] = 'E-Mail-Adresse'; +$_lang["actioncomplete"] = 'Die Aktion wurde erfolgreich durchgeführt!
          - Bitte warten Sie während EVO aufräumt.'; +$_lang["activity_message"] = 'Diese Liste zeigt alle Ressourcen, die zuletzt bearbeitet oder erstellt wurden:'; +$_lang["activity_title"] = 'Kürzlich bearbeitete oder erstellte Ressourcen'; +$_lang["add"] = 'Hinzufügen'; +$_lang["add_chunk"] = 'Chunk hinzufügen'; +$_lang["add_doc"] = 'Ressource hinzufügen'; +$_lang["add_folder"] = 'Ordner hinzufügen'; +$_lang["add_plugin"] = 'Plugin hinzufügen'; +$_lang["add_resource"] = 'Ressource hinzufügen'; +$_lang["add_snippet"] = 'Snippet hinzufügen'; +$_lang["add_tag"] = 'Tag hinzufügen'; +$_lang["add_template"] = 'Template hinzufügen'; +$_lang["add_tv"] = 'Template-Variable hinzufügen'; +$_lang["add_weblink"] = 'Web-Link hinzufügen'; +$_lang["administrator_role_message"] = 'Diese Rolle kann nicht gelöscht oder bearbeitet werden.'; +$_lang["administrators"] = 'Administratoren'; +$_lang["after_saving"] = 'Nach dem Speichern'; +$_lang["alert_delete_self"] = 'Sie können sich nicht selber löschen!'; +$_lang["alias"] = 'Alias'; +$_lang["all_doc_groups"] = 'Alle Ressourcen-Gruppen (öffentlich)'; +$_lang["all_events"] = 'Alle Ereignisse'; +$_lang["all_usr_groups"] = 'Alle Benutzergruppen (öffentlich)'; +$_lang["allow_mgr_access"] = 'Manager-Zugriff'; +$_lang["allow_mgr_access_message"] = 'Wählen Sie diese Option, um den Zugriff auf den Manager aktivieren oder zu deaktivieren. Hinweis: Wenn diese Option gesetzt ist, wird der Benutzer zur Manager-Anmeldung oder auf die Startseite weitergeleitet.'; +$_lang["already_deleted"] = 'wurde schon gelöscht.'; +$_lang["attachment"] = 'Anhang'; +$_lang["author_infos"] = 'Autor(en)'; +$_lang["automatic_alias_message"] = 'Wählen Sie „ja“, damit das System beim Sichern automatisch einen eindeutigen Alias basierend auf den Seitentitel der Ressource vergibt.'; +$_lang["automatic_alias_title"] = 'Automatisch erstellter Alias'; +$_lang["backup"] = 'Backup'; +$_lang["bk_manager"] = 'Backup'; +$_lang["block_message"] = 'Dieser Benutzer wird gesperrt sein, nachdem Sie die Benutzerdaten gespeichert haben!'; +$_lang["blocked_minutes_message"] = 'Hier können Sie einstellen, wie viele Minuten ein Benutzer gesperrt wird, wenn er die maximale Anzahl von fehlgeschlagenen Anmeldeversuchen erreicht hat. Bitte geben Sie nur Zahlen ein, keine Kommas oder Leerstellen.'; +$_lang["blocked_minutes_title"] = 'Sperrzeit in Minuten'; +$_lang["cache_files_deleted"] = 'Die folgenden Dateien wurden gelöscht:'; +$_lang["cancel"] = 'Abbrechen'; +$_lang["captcha_code"] = 'Sicherheits-Code'; +$_lang["captcha_message"] = 'Aktivieren Sie Captcha-Validierung, um die Sicherheit zu erhöhen.'; +$_lang["captcha_title"] = 'Captcha aktivieren'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_message"] = 'Wenn Captcha aktiviert ist können Sie eine Liste von Captcha-Wörter eingeben. Trennen Sie die Wörter mit Kommas. Das Eingabe Feld ist mit 255 Zeichen beschränkt.'; +$_lang["captcha_words_title"] = 'Captcha-Wörter'; +$_lang["category_heading"] = 'Kategorie'; +$_lang["category_manager"] = 'Kategorie-Manager'; +$_lang["category_management"] = 'Kategorie-Verwaltung'; +$_lang["manage_categories"] = 'Kategorien verwalten'; +$_lang["category_msg"] = 'Hier können Sie alle Elemente nach Kategorien sortiert bearbeiten.'; +$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; +$_lang["cfg_base_url"] = 'MODX_BASE_URL'; +$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; +$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; +$_lang["cfg_site_url"] = 'MODX_SITE_URL'; +$_lang["change_name"] = 'Name ändern'; +$_lang["change_password"] = 'Passwort ändern'; +$_lang["change_password_confirm"] = 'Passwort bestätigen'; +$_lang["change_password_message"] = 'Bitte geben Sie Ihr neues Passwort ein, und wiederholen Sie es zur Sicherheit. Das Passwort muss mindestens 6 Zeichen beinhalten.'; +$_lang["change_password_new"] = 'Neues Passwort'; +$_lang["charset_message"] = 'Wählen Sie die Zeichenkodierung für die [(modx_charset)]-Systemvariable. Diese Einstellung beeinflusst nicht den Manager.'; +$_lang["charset_title"] = 'Zeichenkodierung'; +$_lang["chunk"] = 'Chunk'; +$_lang["chunk_code"] = 'Chunk-Code (HTML)'; +$_lang["chunk_multiple_id"] = 'Fehler: Mehrere Chunks benutzen die selbe ID.'; +$_lang["chunk_no_exist"] = 'Chunk existiert nicht.'; +$_lang["cleaningup"] = 'Aufräumen'; +$_lang["clean_uploaded_filename"] = 'Benutzen Sie Transliteration in Datei Uploads'; +$_lang["clean_uploaded_filename_message"] = 'Benutzen Sie die Standard- oder Aliaseinstellungen um Umlaute und Sonderzeichen aus dem Dateinamen zu entfernen. Entfernen Sie nicht die Dateiendung!'; +$_lang["clear_log"] = 'Protokoll löschen'; +$_lang["click_to_context"] = 'Klicken Sie hier, für das Kontextmenü'; +$_lang["click_to_edit_title"] = 'Klicken Sie hier, um den Eintrag zu bearbeiten'; +$_lang["click_to_view_details"] = 'Klicken Sie hier, um die Details anzuzeigen'; +$_lang["close"] = 'Schließen'; +$_lang["code"] = 'Code'; +$_lang["collapse_tree"] = 'Baum einklappen'; +$_lang["comment"] = 'Kommentar'; +$_lang["configcheck_admin"] = 'Bitte kontaktieren Sie einen Systemadministrator und informieren Sie Ihn über diese Nachricht!'; +$_lang["configcheck_cache"] = 'Das Cache-Verzeichnis ist nicht beschreibbar'; +$_lang["configcheck_cache_msg"] = 'EVO kann das Cache-Verzeichnis nicht beschreiben. EVO wird weiterhin wie erwartet funktionieren, jedoch wird die Cache-Funktion nicht genutzt. Um dieses Problem zu lösen, müssen Sie die Schreibrechte des Verzeichnisses /_cache/ entsprechend anpassen.'; +$_lang["configcheck_configinc"] = 'Die Konfigurationsdatei ist weiterhin beschreibbar'; +$_lang["configcheck_configinc_msg"] = 'Böswillige Menschen könnten möglicherweise verheerende Schäden an Ihrer Website und allem was damit verbunden ist anrichten. Wichtig: Bitte ändern Sie die Zugriffsrechte der Konfigurationsdatei (/[+MGR_DIR+]/includes/config.inc.php) auf nur-lesen!'; +$_lang["configcheck_default_msg"] = 'Eine nicht weiter spezifizierte Warnung ist aufgetreten.'; +$_lang["configcheck_errorpage_unavailable"] = 'Die Fehlerseite Ihres Webauftrittes ist nicht verfügbar.'; +$_lang["configcheck_errorpage_unavailable_msg"] = 'Ihre Fehlerseite ist für normale Besucher nicht abrufbar oder existiert nicht. Dies kann zu einer Endlosschleife und vielen Fehlermeldungen in Ihren Webserver-Statistiken führen. Stellen Sie sicher, dass der Seite keine Benutzergruppen zugeordnet sind.'; +$_lang["configcheck_errorpage_unpublished"] = 'Die Fehlerseite Ihres Webauftrittes wurde nicht veröffentlicht oder noch nicht erstellt.'; +$_lang["configcheck_errorpage_unpublished_msg"] = 'Ihre Fehlerseite ist der Allgemeinheit nicht zugänglich. Veröffentlichen Sie die Seite oder stellen Sie sicher, dass in der Konfiguration eine vorhandene Seite aus dem Ressourcen-Baum ausgewählt ist.'; +$_lang["configcheck_filemanager_path"] = 'Der aktuelle Datei-Manager Pfad scheint nicht korrekt zu sein.'; +$_lang["configcheck_filemanager_path_msg"] = 'Dies kann beispielsweise der Fall sein, wenn Sie Ihre Installation in ein anderes Verzeichnis oder auf einen anderen Server umgezogen haben. Bitte prüfen und speichern Sie die System-Konfiguration erneut.'; +$_lang["configcheck_hide_warning"] = 'Nicht mehr anzeigen.'; +$_lang["configcheck_images"] = 'Das Bilderverzeichnis ist nicht beschreibbar'; +$_lang["configcheck_images_msg"] = 'Das Verzeichnis „images“ ist nicht beschreibbar. Die Funktionen des Bilder-Managers im Editor werden nicht funktionieren!'; +$_lang["configcheck_installer"] = 'Installationsverzeichnis ist noch vorhanden'; +$_lang["configcheck_installer_msg"] = 'Das Verzeichnis /install beinhaltet die Installationroutine für EVO. Stellen Sie sich nur vor was passieren kann, wenn jemand dieses Verzeichnis ausfindig macht und die Routine startet. Wahrscheinlich würde diese Person nicht allzu weit kommen da sie die Zugangsdaten zur Datenbank eingeben muss. Trotz alledem ist es am sinnvollsten, dieses Verzeichnis zu entfernen.'; +$_lang["configcheck_lang_difference"] = 'Die Sprachdatei enthält eine falsche Anzahl an Einträgen'; +$_lang["configcheck_lang_difference_msg"] = 'Die zur Zeit ausgewählte Sprache (Deutsch) enthält nicht die gleiche Anzahl an Einträgen wie die Standardsprache (Englisch). Dies stellt kein Problem für die Arbeit mit MODX dar, bedeutet jedoch, dass Sie die Sprachdatei aktualisieren sollten.'; +$_lang["configcheck_notok"] = 'Eine oder mehrere Optionen der Konfiguration sind nicht in Ordnung: '; +$_lang["configcheck_ok"] = 'Überprüfung bestanden – keine Warnungen vorhanden.'; +$_lang["configcheck_php_gdzip"] = 'PHP-Erweiterungen GD und/oder ZIP wurden nicht gefunden'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO benötigt die PHP-Erweiterungen GD und ZIP. Auch wenn EVO auch ohne diese funktioniert, werden Sie ansonsten nicht alle Dateimanager-, Bildeditor- oder Captcha-Funktionen nutzen können.'; +$_lang["configcheck_rb_base_dir"] = 'Der aktuelle Dateibasis-Pfad scheint nicht korrekt zu sein.'; +$_lang["configcheck_rb_base_dir_msg"] = 'Dies kann beispielsweise der Fall sein, wenn Sie Ihre Installation in ein anderes Verzeichnis oder auf einen anderen Server umgezogen haben. Bitte prüfen und speichern Sie die System-Konfiguration erneut.'; +$_lang["configcheck_register_globals"] = 'register_globals ist in Ihrer php.ini Konfigurationsdatei auf ON gesetzt'; +$_lang["configcheck_register_globals_msg"] = 'Diese Konfiguration macht Ihre Website wesentlich anfälliger für Cross-Site-Scripting-Attacken (XSS). Sie sollten Ihren Web-Hosting-Provider kontaktieren, um herauszufinden wie Sie diese Einstellung ändern können.'; +$_lang["configcheck_title"] = 'Konfigurationsprüfung'; +$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin gefunden'; +$_lang["configcheck_templateswitcher_present_delete"] = 'TemplateSwitcher entfernen'; +$_lang["configcheck_templateswitcher_present_disable"] = 'TemplateSwitcher deaktivieren'; +$_lang["configcheck_templateswitcher_present_msg"] = 'Das Plugin TemplateSwitcher wurde gefunden. Es kann Cache und Performanceprobleme hervorrufen und sollte nur benutzt werden, wenn die Funktionalität von der Webseite benötigt wird.'; +$_lang["configcheck_unauthorizedpage_unavailable"] = 'Die Seite für unautorisierte Zugriffe wurde nicht veröffentlicht oder existiert nicht.'; +$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Die Seite für unautorisierte Zugriffe ist für normale Besucher nicht abrufbar oder existiert nicht. Dies kann zu einer Endlosschleife und vielen Fehlermeldungen in Ihren Webserver-Statistiken führen. Stellen Sie sicher, dass der Seite keine Benutzergruppen zugeordnet sind.'; +$_lang["configcheck_unauthorizedpage_unpublished"] = 'Die Seite für unautorisierte Zugriffe aus den Einstellungen Ihrer Konfiguration ist nicht veröffentlicht.'; +$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Die Seite unautorisierte Zugriffe ist der Allgemeinheit nicht zugänglich. Veröffentlichen Sie die Seite oder stellen Sie sicher, dass in der Konfiguration eine vorhandene Seite aus dem Ressourcen-Baum ausgewählt ist.'; +$_lang["configcheck_validate_referer"] = 'Sicherheitshinweis: HTTP Header Validierung'; +$_lang["configcheck_validate_referer_msg"] = 'Die Konfigurationseinstellung HTTP_REFERER Header validieren? ist AUSGESCHALTET. Wir empfehlen, diese anzuschalten. Zu den Einstellungen'; +$_lang["configcheck_warning"] = 'Konfigurationswarnung:'; +$_lang["configcheck_what"] = 'Was bedeutet das?'; +$_lang["confirm_block"] = 'Sind Sie sicher, dass Sie diesen Benutzer sperren wollen?'; +$_lang["confirm_delete_category"] = 'Sind Sie sicher, dass Sie diese Kategorie löschen möchten?'; +$_lang["confirm_delete_eventlog"] = 'Wollen Sie das Ereignisprotokoll wirklich löschen?'; +$_lang["confirm_delete_file"] = 'Sind Sie sicher, dass Sie diese Datei löschen wollen?\n\nDas könnte könnte dazu führen, dass Ihre Seite nicht mehr richtig funktioniert. Löschen Sie diese Datei nur, wenn Sie genau wissen was sie tun!'; +$_lang["confirm_delete_group"] = 'Sind Sie sicher, dass Sie diese Gruppe löschen möchten?'; +$_lang["confirm_delete_htmlsnippet"] = 'Sind Sie sicher, dass Sie diesen Chunk löschen möchten?'; +$_lang["confirm_delete_keywords"] = 'Sind Sie sicher dass Sie diese Schlüsselwörter löschen wollen?'; +$_lang["confirm_delete_module"] = 'Sind Sie sicher, dass Sie dieses Modul löschen möchten?'; +$_lang["confirm_delete_plugin"] = 'Sind Sie sicher, dass Sie dieses Plugin löschen möchten?'; +$_lang["confirm_delete_record"] = 'Sind Sie sicher, dass Sie die ausgewählten Einträge löschen möchten?'; +$_lang["confirm_delete_resource"] = 'Sind Sie sicher, das Sie diese Ressource löschen möchten?\nAlle Unter-Ressourcen werden ebenfalls gelöscht.'; +$_lang["confirm_delete_role"] = 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?'; +$_lang["confirm_delete_snippet"] = 'Sind Sie sicher, das Sie dieses Snippet löschen möchten?'; +$_lang["confirm_delete_tags"] = 'Sind Sie sicher, dass Sie die ausgewählten Meta-Tags löschen möchten?'; +$_lang["confirm_delete_template"] = 'Sind Sie sicher, dass Sie dieses Template löschen möchten?'; +$_lang["confirm_delete_tmplvars"] = 'Sind Sie sicher, dass Sie diese Template-Variable inklusive der gespeicherten Inhalte löschen möchten?'; +$_lang["confirm_delete_user"] = 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?'; +$_lang["confirm_duplicate_record"] = 'Sind Sie sicher, dass Sie diesen Eintrag duplizieren möchten?'; +$_lang["confirm_empty_trash"] = 'Beim leeren des Mülleimers werden alle gelöschten Ressourcen dauerhaft entfernt.\n\nFortfahren?'; +$_lang["confirm_load_depends"] = 'Sind Sie sicher, dass Sie das „Abhängigkeiten-verwalten“-Fenster öffnen wollen ohne Ihre Anpassungen zu sichern?'; +$_lang["confirm_name_change"] = 'Die Änderung des Benutzernamens kann möglicherweise Auswirkungen auf die Funktion von Anwendungen Dritter haben, die Daten von MODX verwenden.\n\nSind Sie sicher, dass Sie den Benutzernamen ändern wollen?'; +$_lang["confirm_publish"] = '\n\nDie Veröffentlichung der Ressource löscht alle Veröffentlichungsdaten die eventuell gesetzt wurden. Wenn Sie die Daten beibehalten möchten, wählen Sie stattdessen „Ressource bearbeiten“.\n\nFortfahren?'; +$_lang["confirm_remove_locks"] = 'Manchmal schließen Benutzer ihren Browser während sie Ressourcen oder Elemente bearbeiten. Dabei bleiben diese dann in einem gesperrten Zustand. Wenn Sie OK klicken werden alle Sperren entfernt.\n\nFortfahren?'; +$_lang["confirm_reset_sort_order"] = 'Sind Sie sicher, dass Sie den Sortier-Index aller aufgelisteten Elemente auf 0 zurücksetzen möchten?'; +$_lang["confirm_resource_duplicate"] = 'Sind Sie sicher, dass Sie diese Ressource duplizieren möchten?\nAlle enthaltenen Unter-Ressourcen werden ebenfalls dupliziert.'; +$_lang["confirm_setting_language_change"] = 'Sie haben den Standardwert verändert, Änderungen werden nicht gesichert. Fortfahren?'; +$_lang["confirm_unblock"] = 'Sind Sie sicher, dass Sie diesen Benutzer freischalten möchten?'; +$_lang["confirm_undelete"] = '\n\nAlle gelöschten Ressourcen werden wieder hergestellt. Ressourcen die vorher aus dem Papierkorb entfernt wurden, werden nicht wiederhergestellt.'; +$_lang["confirm_unpublish"] = '\n\nDas Zurückziehen der Ressource entfernt alle Veröffentlichungsdaten. Wenn Sie die Daten beibehalten möchten, wählen Sie „Ressource bearbeiten“.\n\nFortfahren?'; +$_lang["confirm_unzip_file"] = 'Sind Sie sicher, dass Sie diese Datei entpacken möchten?\n\nBestehende Dateien werden überschrieben.'; +$_lang["could_not_find_user"] = 'Benutzer konnte nicht gefunden werden.'; +$_lang["create_folder_here"] = 'Container hier erstellen'; +$_lang["create_resource_here"] = 'Ressource hier erstellen'; +$_lang["create_resource_title"] = 'Ressource erstellen'; +$_lang["create_weblink_here"] = 'Web-Link hier erstellen'; +$_lang["createdon"] = 'Erstellungsdatum'; +$_lang["create_new"] = 'Neu anlegen'; +$_lang["credits"] = 'Danksagungen'; +$_lang["credits_shouts_msg"] = '

          EVO wird ständig weiterentwickelt und verwaltet unter evo.im.

          '; +$_lang["custom_contenttype_message"] = 'Hier können Sie eigene Inhalts-Typen hinzufügen. Geben Sie hierzu den Typ ein und klicken dann auf hinzufügen.'; +$_lang["custom_contenttype_title"] = 'Eigene Inhaltstypen'; +$_lang["database_charset"] = 'Datenbank-Zeichensatz'; +$_lang["database_collation"] = 'Datenbank-Kollations-Zeichensatz'; +$_lang["database_name"] = 'Datenbank-Name'; +$_lang["database_overhead"] = 'Hinweis: Der Overhead ist von MySQL reservierter Speicher, der nicht verwendet wird. Sie können diesen Speicher freigeben, indem Sie auf die Overhead-Angabe der jeweiligen Tabelle klicken.'; +$_lang["database_server"] = 'Datenbank-Server'; +$_lang["database_table_clickbackup"] = 'Backup erstellen und die ausgewählten Tabellen herunterladen'; +$_lang["database_table_clickhere"] = 'Hier klicken'; +$_lang["database_table_datasize"] = 'Datenmenge'; +$_lang["database_table_droptablestatements"] = 'Erzeuge DROP TABLE Anweisungen.'; +$_lang["database_table_effectivesize"] = 'Effektive Größe'; +$_lang["database_table_indexsize"] = 'Index-Größe'; +$_lang["database_table_overhead"] = 'Overhead'; +$_lang["database_table_records"] = 'Datensätze'; +$_lang["database_table_tablename"] = 'Tabellenname'; +$_lang["database_table_totals"] = 'Summen'; +$_lang["database_table_totalsize"] = 'Gesamtgröße'; +$_lang["database_tables"] = 'Datenbank-Tabellen'; +$_lang["database_version"] = 'Datenbank-Version'; +$_lang["date"] = 'Datum'; +$_lang["datechanged"] = 'Änderungsdatum'; +$_lang["datepicker_offset"] = 'Zeitspanne Datumswähler'; +$_lang["datepicker_offset_message"] = 'Die Anzahl der vergangenen Jahre die der Datumswähler anzeigen soll.'; +$_lang["datetime_format"] = 'Datumsformat'; +$_lang["datetime_format_message"] = 'Das Format für Datumsangaben im Manager.'; +$_lang["default"] = 'Default:'; +$_lang["defaultcache_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als cachebar anzulegen.'; +$_lang["defaultcache_title"] = 'Voreinstellung Cache'; +$_lang["defaultmenuindex_message"] = 'Wählen Sie „Ja“, um den Menüindex bei neuen Ressourcen automatisch zu erhöhen.'; +$_lang["defaultmenuindex_title"] = 'Voreinstellung Menüindex-Inkrementierung'; +$_lang["defaultpublish_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als veröffentlicht anzulegen.'; +$_lang["defaultpublish_title"] = 'Voreinstellung Veröffentlichung'; +$_lang["defaultsearch_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als durchsuchbar anzulegen.'; +$_lang["defaultsearch_title"] = 'Voreinstellung Durchsuchbar'; +$_lang["defaulttemplate_message"] = 'Wählen Sie das Standard-Template das Sie für neue Ressourcen verwenden möchten. Sie können auch andere Templates im Ressourcen-Editor auswählen, diese Einstellung betrefft nur die Standardeinstellung.'; +$_lang["defaulttemplate_title"] = 'Standard-Template'; +$_lang["defaulttemplate_logic_title"] = 'automatische Template Zuweisung'; +$_lang["defaulttemplate_logic_general_message"] = 'neue Ressourcen erben die folgenden Templates. Wird keins gefunden, wird das nächst Höhere vererbt:'; +$_lang["defaulttemplate_logic_system_message"] = 'System: das Standard System-Template.'; +$_lang["defaulttemplate_logic_parent_message"] = 'Eltern: das gleiche Template wie der Eltern-Container.'; +$_lang["defaulttemplate_logic_sibling_message"] = 'Nachbar: das gleiche Template wie andere Ressourcen im selben Container.'; +$_lang["delete"] = 'Löschen'; +$_lang["delete_resource"] = 'Ressource Löschen'; +$_lang["delete_tags"] = 'Tag löschen'; +$_lang["deleting_file"] = 'Löschen der Datei „%s“: '; +$_lang["description"] = 'Beschreibung'; +$_lang["deselect_keywords"] = 'Keyword-Auswahl aufheben'; +$_lang["deselect_metatags"] = 'Metatag-Auswahl aufheben'; +$_lang["disabled"] = 'Deaktiviert'; +$_lang["doc_data_title"] = 'Daten der Ressource anzeigen'; +$_lang["documentation"] = 'Dokumentation'; +$_lang["duplicate"] = 'Duplizieren'; +$_lang["duplicate_alias_found"] = 'Die Ressource „%s“ verwendet bereits den Alias „%s“. Bitte geben Sie einen eindeutigen Alias ein.'; +$_lang["duplicate_alias_message"] = 'Wählen Sie „ja“, um zweideutige Alias-Namen zu erlauben. Hinweis: Diese Option sollte zusammen mit der Option „Benutzerfreundliche URLs“ verwendet werden, um etwaige Probleme bei der Ressourcen-Referenzierung zu vermeiden.'; +$_lang["duplicate_alias_title"] = 'Doppelte Aliase zulassen'; +$_lang["duplicate_name_found_general"] = 'Es existiert bereits ein %s mit dem Namen „%s“. Bitte geben Sie einen eindeutigen Namen ein.'; +$_lang["duplicate_name_found_module"] = 'Es existiert bereits ein Modul mit dem Namen „%s“. Bitte geben Sie einen eindeutigen Namen ein.'; +$_lang["duplicated_el_suffix"] = 'Duplizieren'; +$_lang["edit"] = 'Bearbeiten'; +$_lang["edit_resource"] = 'Ressource Bearbeiten'; +$_lang["edit_resource_title"] = 'Ressource erstellen/bearbeiten'; +$_lang["edit_settings"] = 'Konfiguration'; +$_lang["editedon"] = 'Änderungsdatum'; +$_lang["editing_file"] = 'zu ändernde Datei: '; +$_lang["editor_css_path_message"] = 'Geben Sie hier den Pfad zur CSS-Datei an, die Sie im Editor verwenden möchten. Falls Sie keine CSS-Datei verwenden möchten, lassen Sie das Feld leer.'; +$_lang["editor_css_path_title"] = 'Pfad zur CSS-Datei'; +$_lang["element"] = 'Element'; +$_lang["element_categories"] = 'Alle Elemente'; +$_lang["element_filter_msg"] = 'Suchbegriff eingeben'; +$_lang["element_management"] = 'Elemente-Verwaltung'; +$_lang["element_name"] = 'Element-Namen'; +$_lang["element_selector_msg"] = 'Wählen Sie die entsprechenden Elemente aus und klicken anschließend auf „einfügen“.'; +$_lang["element_selector_title"] = 'Elemente-Auswahl'; +$_lang["elements"] = 'Elemente'; +$_lang["email"] = 'E-Mail'; +$_lang["email_sent"] = 'E-Mail erfolgreich gesendet.'; +$_lang["emailsender_message"] = 'Dies ist die Emailadresse des Administrators, und wird zum Beispiel als Senderadresse für Formulare oder Empfänger für System-Benachrichtigungen benutzt.'; +$_lang["emailsender_title"] = 'E-Mail-Adresse'; +$_lang["emailsubject_default"] = 'Ihre Anmeldedaten'; +$_lang["emailsubject_message"] = 'Hier können Sie den Inhalt des Betreffs eingeben.'; +$_lang["emailsubject_title"] = 'E-Mail-Betreff'; +$_lang["empty_folder"] = 'Dieser Container ist leer'; +$_lang["empty_recycle_bin"] = 'Papierkorb leeren'; +$_lang["empty_recycle_bin_empty"] = 'Es sind keine gelöschten Ressourcen zum Entfernen vorhanden.'; +$_lang["enable_resource"] = 'Element-Datei aktivieren.'; +$_lang["enable_sharedparams"] = 'Gemeinsame Parameter aktivieren'; +$_lang["enable_sharedparams_msg"] = 'Hinweis: Diese eindeutige Identifikationsnummer (GUID) wird dazu benutzt, um das Modul eindeutig zu identifizieren und entsprechende Verknüpfungen zwischen Modulen und Plugins, Snippets und gemeinsamen Parametern zu gewährleisten. '; +$_lang["enabled"] = 'Aktiviert'; +$_lang["error"] = 'Fehler'; +$_lang["error_sending_email"] = 'E-Mail konnte nicht gesendet werden'; +$_lang["errorpage_message"] = 'Geben Sie die ID der Ressource ein, welche aufgerufen wird, wenn eine Seite angefordert wird die nicht vorhanden ist. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; +$_lang["errorpage_title"] = 'Fehlerseite'; +$_lang["event_id"] = 'Ereignis-ID'; +$_lang["eventlog"] = 'Systemereignisprotokoll'; +$_lang["eventlog_msg"] = 'Informations-, Warn- und Fehlermeldungen des MODX-Managers werden im Systemereignisprotokoll gespeichert. Unter „Quelle“ ist das jeweils verursachende Modul angegeben.'; +$_lang["eventlog_viewer"] = 'Systemereignisse'; +$_lang["everybody"] = 'Jeder'; +$_lang["existing_category"] = 'Bestehende Kategorie'; +$_lang["expand_tree"] = 'Baum aufklappen'; +$_lang["export_site"] = 'Seite exportieren'; +$_lang["export_site_cacheable"] = 'Inklusive nicht gecachter Dateien:'; +$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; +$_lang["export_site_failed"] = 'Fehlgeschlagen!'; +$_lang["export_site_failed_no_open"] = 'Datei kann nicht geöffnet werden: '; +$_lang["export_site_failed_no_retrieve"] = 'Die Ressource kann nicht aufgerufen werden.'; +$_lang["export_site_failed_no_write"] = 'Datei kann nicht geschrieben werden.'; +$_lang["export_site_html"] = 'Seite nach HTML exportieren'; +$_lang["export_site_maxtime"] = 'Maximale Export-Zeit:'; +$_lang["export_site_maxtime_message"] = 'Hier können Sie die Dauer (in Sekunden) angeben, die das System für einen Import maximal benötigen darf. Nach Ablauf dieser Zeit wird der Import abgebrochen. Von der Angabe von 0 Sekunden oder einen extrem hohen Zeitspanne wird dringend abgeraten, da dies zu Komplikationen mit Ihrem Webserver führen kann.'; +$_lang["export_site_message"] = '

          Diese Funktion exportiert die gesamte Seite in HTML-Dateien. Allerdings verlieren Sie viel von der gesamten EVO-Funktionalität:

          • Seitenzugriffe auf der exportierten Site werden nicht aufgezeichnet
          • Interaktive Snippets arbeiten nicht in der exportierten Site
          • Nur reguläre Ressourcen werden exportiert – Links werden nicht exportiert.
          • Der Exportprozess könnte abbrechen wenn Snippets enthalten sind die eine Header-Weiterleitung vornehmen
          • Abhängig davon wie Sie Ihre Ressourcen, Style Sheets und Bilder verknüpft haben, könnte das Design zerstört werden. Um dieses Problem zu lösen können Sie die exportierten Dateien in das gleiche Verzeichnis kopieren, in dem die Datei index.php liegt.

          Bitte füllen Sie das Formular aus und klicken auf „Export“ um den Export zu starten. Die Dateien werden am angegebenen Ort gespeichert. Es werden wenn möglich die Alias-Namen als Dateinamen verwendet. Während des Exports der Seite ist es ratsam die Einstellung „Benutzerfreundliche URLs“ auf „Ja“ zu setzen. Je nach Größe der Seite wird der Export eine Weile dauern.

          Wichtig: Bestehende Dateien werden bei Namensgleichheit überschrieben!

          '; +$_lang["export_site_numberdocs"] = '

          %s Ressourcen für den Export gefunden.

          '; +$_lang["export_site_prefix"] = 'Datei-Präfix:'; +$_lang["export_site_start"] = 'Export starten'; +$_lang["export_site_success"] = 'Erfolgreich!'; +$_lang["export_site_success_skip_dir"] = 'Dieses Verzeichnis überspringen.'; +$_lang["export_site_success_skip_doc"] = 'Diese Ressource überspringen.'; +$_lang["export_site_suffix"] = 'Datei-Suffix:'; +$_lang["export_site_target_unwritable"] = 'Datei kann nicht gespeichert werden – Überprüfen Sie den Schreibzugriff im Zielverzeichnis und versuchen Sie es erneut!'; +$_lang["export_site_time"] = 'Export beendet. Dauer für den Export %s Sekunden'; +$_lang["failed_login_message"] = 'Hier können Sie die Anzahl fehlgeschlagener Anmeldeversuche einstellen, die erlaubt sind bevor ein Benutzer gesperrt wird.'; +$_lang["failed_login_title"] = 'Fehlgeschlagene Anmeldeversuche'; +$_lang["fe_editor_lang_message"] = 'Wählen Sie die Sprache, die für den Frontend-Editor verwendet werden soll.'; +$_lang["fe_editor_lang_title"] = 'Sprache des Frontend-Editors'; +$_lang["file_delete_file"] = 'Datei löschen'; +$_lang["file_delete_folder"] = 'Verzeichnis löschen'; +$_lang["file_deleted"] = 'Erfolgreich!'; +$_lang["file_download_file"] = 'Datei-Download'; +$_lang["file_download_unzip"] = 'Datei entpacken'; +$_lang["file_folder_chmod_error"] = 'Die Rechte können nicht verändert werden. Sie müssen die Rechte außerhalb von EVO ändern.'; +$_lang["file_folder_created"] = 'Verzeichnis erfolgreich erstellt!'; +$_lang["file_folder_deleted"] = 'Verzeichnis erfolgreich gelöscht!'; +$_lang["file_folder_not_created"] = 'Verzeichniserstellung nicht möglich'; +$_lang["file_folder_not_deleted"] = 'Verzeichnis kann nicht gelöscht werden. Stellen Sie sicher, dass das Verzeichnis leer ist.'; +$_lang["file_not_deleted"] = 'Nicht erfolgreich!'; +$_lang["file_not_saved"] = 'Datei kann nicht gespeichert werden. Überprüfen Sie den Schreibzugriff im Zielverzeichnis!'; +$_lang["file_saved"] = 'Datei erfolgreich aktualisiert!'; +$_lang["file_unzip"] = 'Unzip erfolgreich!'; +$_lang["file_unzip_fail"] = 'Unzip fehlgeschlagen!'; +$_lang["filemanager_path_message"] = 'Unter Umständen erkennt Ihr Webserver (z.B. IIS) den Pfad nicht immer korrekt, überprüfen Sie deshalb diese Einstellung. Wenn Sie Probleme mit der Benutzung des Datei-Managers haben, stellen Sie sicher dass dieser Pfad auf das Root-Verzeichnis Ihrer EVO-Installation verweist.'; +$_lang["filemanager_path_title"] = 'Datei-Manager-Pfad'; +$_lang["files_access_denied"] = 'Zugriff verweigert!'; +$_lang["files_data"] = 'Größe'; +$_lang["files_dir_listing"] = 'Verzeichnisübersicht für:'; +$_lang["files_directories"] = 'Verzeichnisse'; +$_lang["files_directory_is_empty"] = 'Dieses Verzeichnis ist leer.'; +$_lang["files_dirwritable"] = 'Verzeichnis beschreibbar?'; +$_lang["files_editfile"] = 'Datei bearbeiten'; +$_lang["files_file_type"] = 'Dateityp: '; +$_lang["files_filename"] = 'Dateiname'; +$_lang["files_fileoptions"] = 'Optionen'; +$_lang["files_files"] = 'Dateien'; +$_lang["files_filesize"] = 'Dateigröße'; +$_lang["files_filetype_notok"] = 'Das Hochladen einer Datei von diesem Typ ist nicht erlaubt!'; +$_lang["files_management"] = 'Dateien verwalten'; +$_lang["files_management_no_permission"] = 'Sie haben nicht genug Rechte um diese Dateien einzusehen oder zu bearbeiten. Bitten Sie den Administrator Ihnen Zugriff auf %s zu gewähren.'; +$_lang["files_modified"] = 'Datum'; +$_lang["files_top_level"] = 'Zum Hauptverzeichnis'; +$_lang["files_up_level"] = 'Ein Verzeichnis nach oben wechseln'; +$_lang["files_upload_copyfailed"] = 'Upload fehlgeschlagen. Das Kopieren der Datei in den Zielordner ist nicht möglich!'; +$_lang["files_upload_error"] = 'Fehler'; +$_lang["files_upload_error0"] = 'Ein Problem beim Upload ist aufgetreten.'; +$_lang["files_upload_error1"] = 'Die Datei ist für einen Upload zu groß.'; +$_lang["files_upload_error2"] = 'Die Datei ist für einen Upload zu groß.'; +$_lang["files_upload_error3"] = 'Die Datei wurde nur teilweise übertragen.'; +$_lang["files_upload_error4"] = 'Sie müssen eine Datei für den Upload auswählen.'; +$_lang["files_upload_error5"] = 'Beim Upload ist ein Problem aufgetreten.'; +$_lang["files_upload_inhibited_msg"] = 'Datei-Upload fehlgeschlagen. Stellen Sie sicher, dass der Upload unterstützt wird und PHP in dieses Verzeichnis schreiben darf.'; +$_lang["files_upload_ok"] = 'Upload erfolgreich!'; +$_lang["files_upload_permissions_error"] = 'Mögliche Probleme mit den Zugriffsrechten: das Upload-Verzeichnis muss auf dem Web-Server beschreibbar sein.'; +$_lang["files_uploadfile"] = 'Datei hochladen'; +$_lang["files_uploadfile_msg"] = 'Datei zum Hochladen wählen:'; +$_lang["files_uploading"] = 'Upload %s in Verzeichnis %s/'; +$_lang["files_viewfile"] = 'Datei anzeigen'; +$_lang["folder"] = 'Verzeichnis'; +$_lang["forgot_password_email_fine_print"] = '* Die oben angegebene URL verliert nach Änderung Ihres Kennworts oder spätestens nach einem Tag ihre Gültigkeit.'; +$_lang["forgot_password_email_instructions"] = 'Anschließend können Sie Ihr Kennwort im Benutzermenü der Zugangsverwaltung ändern.'; +$_lang["forgot_password_email_intro"] = 'Es wurde ein neues Kennwort für Ihren Zugang angefordert.'; +$_lang["forgot_password_email_link"] = 'Klicken Sie hier, um ein neues Kennwort zu erstellen.'; +$_lang["forgot_your_password"] = 'Kennwort vergessen?'; +$_lang["friday"] = 'Freitag'; +$_lang["friendly_alias_message"] = 'Wenn Sie benutzerfreundliche URLs verwenden, und die Ressource einen Alias-Eintrag hat, wird das Alias als benutzerfreundliche URL verwendet. Falls Sie keine benutzerfreundlichen URLs verwenden, generiert EVO den Link mit einer durchlaufenden Nummerierung.'; +$_lang["friendly_alias_title"] = 'Aliasnamen nutzen'; +$_lang["friendlyurls_message"] = 'Diese Option erlaubt Ihnen die Benutzung benutzerfreundlicher URLs auf Apache-Webservern mit aktiviertem mod_rewrite oder auf dem IIS-Webserver mit entsprechenden Modulen. Öffnen sie bei MODX enthaltene .htaccess-Datei im Root-Verzeichnis für mehr Informationen.'; +$_lang["friendlyurls_title"] = 'Benutzerfreundliche URLs nutzen'; +$_lang["friendlyurlsprefix_message"] = 'Hier können Sie ein Präfix für die benutzerfreundlichen URLs angeben. Wenn Sie z.B. „page“ als Präfix angeben, wird die URL /index.php?id=2 in /page2.html umgewandelt (vorausgesetzt das Suffix wurde auf .html gesetzt).'; +$_lang["friendlyurlsprefix_title"] = 'Präfix für benutzerfreundliche URLs'; +$_lang["friendlyurlsuffix_message"] = 'Hier können Sie ein Suffix angeben.'; +$_lang["friendlyurlsuffix_title"] = 'Suffix für benutzerfreundliche URLs'; +$_lang["functionnotimpl"] = 'Sorry!'; +$_lang["functionnotimpl_message"] = 'Diese Funktion ist noch nicht implementiert'; +$_lang["further_info"] = 'Weiterführende Informationen'; +$_lang["global_tabs"] = 'Globale Tabs'; +$_lang["go"] = 'Los'; +$_lang["group_access_permissions"] = 'Benutzergruppenberechtigungen'; +$_lang['group_tvs'] = 'TVs gruppieren'; +$_lang["guid"] = 'Eindeutige Identifikationsnummer (GUID)'; +$_lang["help"] = 'Hilfe'; +$_lang["help_msg"] = '

          Sie können kostenlos Support im EVO Forum erhalten. Zusätzlich werden die EVO Dokumentation und Anleitungen regelmäßig erweitert.

          Desweiteren planen wir auch kostenpflichtigen professionellen Support anzubieten. Bitte senden Sie uns bei Interesse eine Email.

          '; +$_lang["help_title"] = 'Hilfe'; +$_lang["hide_tree"] = 'Baum verbergern'; +$_lang["home"] = 'Dashboard'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; +$_lang["htmlsnippet_desc"] = 'Chunk-Beschreibung'; +$_lang["htmlsnippet_management_msg"] = 'Hier können Sie das zu bearbeitende Chunk auswählen'; +$_lang["htmlsnippet_msg"] = 'Hier können Sie Chunks hinzufügen oder bearbeiten. Achtung, Chunks bestehen aus reinem HTML-Code – PHP-Code wird nicht ausgeführt.'; +$_lang["htmlsnippet_name"] = 'Chunk-Name'; +$_lang["htmlsnippet_title"] = 'Chunk erstellen/bearbeiten '; +$_lang["icon"] = 'Symbol'; +$_lang["icon_description"] = 'CSS Klasse, e.g. fa fa-star'; +$_lang["id"] = 'ID'; +$_lang["illegal_parent_child"] = 'Container-Zuweisung:\n\nDie Ressource ist dem gewählten Container zugehörig.'; +$_lang["illegal_parent_self"] = 'Container-Zuweisung:\n\nDie Ressource kann nicht sich selbst zugewiesen werden.'; +$_lang["images_management"] = 'Bilder verwalten'; +$_lang["import_files_found"] = '%s Ressourcen für den Import gefunden …

          '; +$_lang["import_params"] = 'Importieren von gemeinsamen Parametern'; +$_lang["import_params_msg"] = 'Sie können die Parameter und Einstellungen mittels obiger Auswahlliste importieren. Hinweis: Damit Module in dieser Liste erscheinen, muss das jeweilige Plugin/Snippet in der Abhängigkeitsliste des Moduls stehen und das Modul muss die Option „Gemeinsame Parameter“ aktiviert haben. '; +$_lang["import_parent_resource"] = 'Container:'; +$_lang["import_site"] = 'Seite importieren'; +$_lang["import_site_failed"] = 'Fehler!'; +$_lang["import_site_failed_db_error"] = 'Ein Datenbank-Fehler ist aufgetreten beim Versuch das Dokument zu kopieren: '; +$_lang["import_site_failed_no_open_dir"] = 'Das Verzeichnis konnte nicht geöffnet werden: '; +$_lang["import_site_failed_no_retrieve_file"] = 'Die Datei konnte nicht geöffnet werden: '; +$_lang["import_site_html"] = 'Website aus HTML-Dateien importieren'; +$_lang["import_site_importing_document"] = 'Importiere Datei %s '; +$_lang["import_site_maxtime"] = 'Maximale Importdauer:'; +$_lang["import_site_maxtime_message"] = 'Hier können Sie die Dauer (in Sekunden) angeben, die das System für einen Import maximal benötigen darf. Nach Ablauf dieser Zeit wird der Import abgebrochen. Von der Angabe von 0 Sekunden oder einen extrem hohen Zeitspanne wird dringend abgeraten, da dies zu Komplikationen mit Ihrem Webserver führen kann.'; +$_lang["import_site_message"] = '

          Mit dieser Importfunktion können Sie eine bestehende Website im HTML-Format in das MODX-System importieren. Die zu importierenden HTML-Dateien bzw. Verzeichnisse müssen unter „assets/import“ abgelegt werden.

          Nach dem ausfüllen des unten stehenden Formulars können Sie den Import starten. Die importierten Daten werden im ausgewählten Ort gesichert. Soweit möglich, werden Dateinamen als Ressourcen-Titel und der HTML-Titel als Seitentitel verwendet.

          '; +$_lang["import_site_skip"] = 'ausgelassen'; +$_lang["import_site_start"] = 'Import starten'; +$_lang["import_site_success"] = 'OK'; +$_lang["import_site_time"] = 'Import in %s Sekunden durchgeführt.'; +$_lang["inbox"] = 'Inbox'; +$_lang["info"] = 'Info'; +$_lang["information"] = 'Information'; +$_lang["inline"] = 'Browser-Fenster'; +$_lang["insert"] = 'Einfügen'; +$_lang["maxImageWidth"] = 'Maximale Bildbreite'; +$_lang["maxImageHeight"] = 'Maximale Bildhöhe'; +$_lang["clientResize"] = 'Bildgrößen beim Benutzer berechnen'; +$_lang["clientResize_message"] = 'Falls aktiviert werden Bildergrößen vor dem Upload vom Browser berechnet.'; +$_lang["noThumbnailsRecreation"] = 'Thumbnails nur beim Upload erstellen'; +$_lang["noThumbnailsRecreation_message"] = 'Der Dateibrowser wird Thumbnails nur beim Upload erstellen. Falls für einig Bilder keine Thumbnails existieren, werden diese nicht erstellt.'; +$_lang["thumbWidth"] = 'Maximale Vorschaubild-Breite'; +$_lang["thumbHeight"] = 'Maximale Vorschaubild-Höhe'; +$_lang["thumbsDir"] = 'Thumbnails directory location'; +$_lang["jpegQuality"] = 'JPEG Komprimierung'; +$_lang["denyZipDownload"] = 'Download von ZIP-Dateien deaktivieren'; +$_lang["denyExtensionRename"] = 'Umbenennen von Dateierweiterungen deaktivieren'; +$_lang["maxImageWidth_message"] = 'Sobald ein hochgeladenes Bild diese Größe überschreitet, wird es automatisch verkleinert. Auf 0 stellen zum Deaktivieren'; +$_lang["maxImageHeight_message"] = 'Sobald ein hochgeladenes Bild diese Größe überschreitet, wird es automatisch verkleinert. Auf 0 stellen zum Deaktivieren'; +$_lang["thumbWidth_message"] = 'Maximale Vorschaubild-Breite.'; +$_lang["thumbHeight_message"] = 'Maximale Vorschaubild-Höhe.'; +$_lang["thumbsDir_message"] = 'Name des Vorschaubild-Verzeichnisses'; +$_lang["jpegQuality_message"] = 'JPEG Komprimierungsqualität für Vorschaubilder und verkleinerte Bilder'; +$_lang["showHiddenFiles"] = 'Versteckte Dateien im Datei-Browser anzeigen'; +$_lang["keyword"] = 'Schlüsselwort'; +$_lang["keywords"] = 'Schlüsselwörter'; +$_lang["keywords_intro"] = 'Hier legen Sie die Schlüsselwörter fest, die Ihrer Ressource zugewiesen werden können.'; +$_lang["language_message"] = 'Wählen Sie die Sprache für den EVO-Manager aus.'; +$_lang["language_title"] = 'Manager Sprache'; +$_lang["last_update"] = 'Letzte Aktualisierung'; +$_lang["launch_site"] = 'Anzeigen'; +$_lang["license"] = 'Lizenz'; +$_lang["link_attributes"] = 'Link-Attribute'; +$_lang["link_attributes_help"] = 'Hier können Sie HTML-Attribute für den Link angeben (z.B. target= oder rel=).'; +$_lang["list_mode"] = 'Listenmodus ein/aus – alle Einträge anzeigen.'; +$_lang["loading_doc_tree"] = 'Laden des Ressourcen-Baums …'; +$_lang["loading_menu"] = 'Laden des Menüs …'; +$_lang["loading_page"] = 'Bitte warten Sie während EVO die Seite lädt …'; +$_lang["localtime"] = 'Ortszeit'; +$_lang["lock_htmlsnippet"] = 'Chunk für Bearbeitung sperren'; +$_lang["lock_htmlsnippet_msg"] = 'Nur Administratoren (Rollen-ID 1) können diesen Chunk bearbeiten.'; +$_lang["lock_module"] = 'Modul für die Bearbeitung sperren'; +$_lang["lock_module_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Modul bearbeiten.'; +$_lang["lock_msg"] = 'Der Benutzer %s bearbeitet gerade die Ressource %s. Bitte warten Sie bis dieser Benutzer seine Arbeit beendet und die Ressource wieder freigegeben hat.'; +$_lang["lock_plugin"] = 'Plugin für die Bearbeitung sperren'; +$_lang["lock_plugin_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Plugin bearbeiten.'; +$_lang["lock_settings_msg"] = 'Der Benutzer %s bearbeitet gerade diese Einstellungen. Bitte warten Sie bis dieser seine Arbeit beendet und die Ressource wieder freigegeben hat.'; +$_lang["lock_snippet"] = 'Snippet für die Bearbeitung sperren.'; +$_lang["lock_snippet_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Snippet bearbeiten.'; +$_lang["lock_template"] = 'Template für die Bearbeitung sperren.'; +$_lang["lock_template_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Template bearbeiten.'; +$_lang["lock_tmplvars"] = 'Template-Variable gegen Bearbeitung sperren'; +$_lang["lock_tmplvars_msg"] = 'Nur Administratoren (Rollen-ID 1) können diese Template-Variable bearbeiten.'; +$_lang["locked"] = 'Gesperrt'; +$_lang["login_allowed_days"] = 'Wochentagsbeschränkung'; +$_lang["login_allowed_days_message"] = 'Wählen Sie die Wochentage aus, an denen der Benutzer Zugriff erhält.'; +$_lang["login_allowed_ip"] = 'IP-Adressbeschränkung'; +$_lang["login_allowed_ip_message"] = 'Geben Sie hier die IP-Adressen an, von denen aus der Benutzer eine Zugriffsberechtigung erhält. Hinweis: Mehrere IP-Adressen können mit einem Komma getrennt werden.'; +$_lang["login_button"] = 'Anmelden'; +$_lang["login_cancelled_install_in_progress"] = 'Installation/Update der Site läuft.
          Bitte versuchen Sie es in einigen Minuten erneut!
          '; +$_lang["login_cancelled_site_was_updated"] = 'Installation/Update der Site wurde abgeschlossen. Bitte melden Sie sich erneut an!
          '; +$_lang["login_captcha_message"] = ' Der Administrator hat die Captcha-Validierung aktiviert, Sie müssen daher auch den Sicherheits-Code eingeben. \n\nWenn der Sicherheits-Code schlecht lesbar ist, klicken Sie bitte auf den Code, damit ein neuer Code generiert wird.'; +$_lang["login_homepage"] = 'Anmeldeseite'; +$_lang["login_homepage_message"] = 'Geben Sie die Ressource-ID an, zu welcher der Web-Benutzer nach einer erfolgreichen Anmeldung weitergeleitet wird. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist und der entsprechende Web-Benutzer die notwendigen Zugriffsberechtigungen besitzt um darauf zuzugreifen!'; +$_lang["login_message"] = 'Bitte melden Sie sich an, um mit MODX zu arbeiten.
          Beachten Sie bei Ihrer Eingabe die Groß- und Kleinschreibung.'; +$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; +$_lang["logout"] = 'Abmelden'; +$_lang["long_title"] = 'Langer Titel'; +$_lang["mail_check_timeperiod_message"] = 'Wie oft soll nach neuen Nachrichten im Manager gesucht werden (Angabe in Sekunden)?'; +$_lang["mail_check_timeperiod_title"] = 'Nachrichten-Überprüfungsfrequenz'; +$_lang["manage_depends"] = 'Abhängigkeiten verwalten'; +$_lang["manage_files"] = 'Datei-Manager'; +$_lang["manage_htmlsnippets"] = 'Chunks'; +$_lang["manage_metatags"] = 'Meta-Angaben verwalten'; +$_lang["manage_modules"] = 'Module verwalten'; +$_lang["manage_plugins"] = 'Plugins'; +$_lang["manage_snippets"] = 'Snippets'; +$_lang["manage_templates"] = 'Template-Verwaltung'; +$_lang["manage_documents"] = 'Dokumente'; +$_lang["manager"] = 'Manager'; +$_lang["manager_lockout_message"] = '

          Sie sind gegenwärtig im MODX-Manager angemeldet. Wenn Sie Ihre Login-Session beenden wollen, klicken Sie bitte den Abmelden-Button.

          Um zu Ihrer Start- oder Home-Seite zu gelangen, klicken Sie bitte den Start-Button.'; +$_lang["manager_permissions"] = 'Manager-Zugriffberechtigungen'; +$_lang["manager_theme"] = 'Manager-Template'; +$_lang["manager_theme_message"] = 'Wählen Sie das Template für den MODX-Manager aus.'; +$_lang["manager_theme_mode"] = 'Farbschema:'; +$_lang["manager_theme_mode1"] = 'Helles Farbschema'; +$_lang["manager_theme_mode2"] = 'Header dunkel'; +$_lang["manager_theme_mode3"] = 'Header und Seitenleiste dunkel'; +$_lang["manager_theme_mode4"] = 'Dunkles Farbschema'; +$_lang["messages"] = 'Nachrichten'; +$_lang["messages_all"] = 'alle'; +$_lang["messages_compose"] = 'Nachricht verfassen'; +$_lang["messages_forward"] = 'Weiterleiten'; +$_lang["messages_from"] = 'Von'; +$_lang["messages_group"] = 'eine Gruppe'; +$_lang["messages_inbox"] = 'Posteingang'; +$_lang["messages_message"] = 'Nachricht'; +$_lang["messages_no_messages"] = 'Sie haben keine Nachrichten.'; +$_lang["messages_not_allowed_to_read"] = 'Sie sind nicht berechtigt, diese Nachricht zu lesen!'; +$_lang["messages_private"] = 'Privat'; +$_lang["messages_read_message"] = 'Nachrichten lesen'; +$_lang["messages_reply"] = 'Antworten'; +$_lang["messages_select_group"] = 'Gruppe wählen'; +$_lang["messages_select_user"] = 'Benutzer wählen'; +$_lang["messages_send"] = 'Senden'; +$_lang["messages_send_to"] = 'Senden an'; +$_lang["messages_sent"] = 'gesendet am'; +$_lang["messages_subject"] = 'Betreff'; +$_lang["messages_system_user"] = '[System]'; +$_lang["messages_title"] = 'Nachrichten'; +$_lang["messages_user"] = 'ein Benutzer'; +$_lang["meta_keywords"] = 'Meta-Angaben'; +$_lang["metatag_intro"] = 'In diesem Bereich verwalten Sie Meta-Angaben, die Ihren Ressourcenn beim Bearbeiten zugewiesen werden können.'; +$_lang["metatag_notice"] = 'Im HTML-Nachschlagewerk SELFHTML finden Sie eine Zusammenstellung geläufiger Meta-Angaben, sowie Hinweise zu deren Anwendung.'; +$_lang["metatags"] = 'Meta-Angaben'; +$_lang["mgr_access_permissions"] = 'Manager-Zugriffsberechtigungen'; +$_lang["mgr_login_start"] = 'Benutzer-Startbildschirm'; +$_lang["mgr_login_start_message"] = 'Geben Sie die Ressource-ID an, zu welcher der Web-Benutzer nach einer erfolgreichen Anmeldung weitergeleitet werden soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist und der entsprechende Web-Benutzer die notwendigen Zugriffsberechtigungen besitzt um darauf zuzugreifen!'; +$_lang["mgrlog_action"] = 'Aktion'; +$_lang["mgrlog_actionid"] = 'Aktions-ID'; +$_lang["mgrlog_anyall"] = 'Einzelne/Alle'; +$_lang["mgrlog_datecheckfalse"] = 'checkdate() gibt „false“ zurück.'; +$_lang["mgrlog_datefr"] = 'Datum von'; +$_lang["mgrlog_dateinvalid"] = 'Ungültiges Datumsformat.'; +$_lang["mgrlog_dateto"] = 'Datum bis'; +$_lang["mgrlog_emptysrch"] = 'Ihre Suchanfrage ergab keine Treffer.'; +$_lang["mgrlog_field"] = 'Feld'; +$_lang["mgrlog_itemid"] = 'Element-ID'; +$_lang["mgrlog_itemname"] = 'Elementname'; +$_lang["mgrlog_msg"] = 'Nachricht'; +$_lang["mgrlog_noquery"] = 'Es wurde noch keine Suchanfrage eingegeben.'; +$_lang["mgrlog_qresults"] = 'Suchergebnisse'; +$_lang["mgrlog_query"] = 'Suchabfragen loggen'; +$_lang["mgrlog_query_msg"] = 'Bitte treffen Sie eine Auswahl, um die Protokoll-Einträge anzusehen. Sie können Einträge innerhalb eines bestimmten Zeitraums durchsuchen. Aber berücksichtigen Sie, dass das eingegebene Datum nicht inklusive ist – um alle Einträge für den 01-01-2009 auszuwählen, setzen Sie „Datum von“ auf den 01-01-2009 und „Datum bis“ auf den 02-01-2009.

          Eine Nachricht und eine Aktion sind üblicherweise dasselbe. Wenn Sie nach einer bestimmten Nachricht suchen, ist es am besten die Aktion „Einzelne/Alle“ auszuwählen.'; +$_lang["mgrlog_results"] = 'Anzahl der Ergebnisse'; +$_lang["mgrlog_searchlogs"] = 'Such-Protokoll'; +$_lang["mgrlog_sortinst"] = 'Sie können die Tabelle sortieren, indem Sie auf die Spaltenüberschriften klicken. Sollten die Protokolldateien zu groß werden, können Sie diese löschen. Dadurch werden alle Protokolleinträge bis zum heutigen Tag entfernt – das Löschen der Protokolleinträge kann nicht rückgängig gemacht werden!'; +$_lang["mgrlog_time"] = 'Zeit'; +$_lang["mgrlog_user"] = 'Benutzer'; +$_lang["mgrlog_username"] = 'Benutzername'; +$_lang["mgrlog_value"] = 'Wert'; +$_lang["mgrlog_view"] = 'Benutzerprotokolle anzeigen'; +$_lang["module_code"] = 'Modul-Code (PHP)'; +$_lang["module_config"] = 'Modul Konfiguration'; +$_lang["module_desc"] = 'Beschreibung'; +$_lang["module_disabled"] = 'Modul deaktivieren'; +$_lang["module_edit_click_title"] = 'Klicken Sie hier, um das Modul zu bearbeiten'; +$_lang["module_group_access_msg"] = 'Wählen Sie die Benutzergruppen aus, die dieses Modul innerhalb des MODX-Managers ausführen dürfen.'; +$_lang["module_management"] = 'Modul-Verwaltung'; +$_lang["module_management_msg"] = 'In dieser Übersicht können Sie Module ausführen und bearbeiten. Um ein Modul zu starten, klicken Sie auf das Symbol des Moduls, für die Bearbeitung auf den Namen.'; +$_lang["module_msg"] = 'Hier können Sie Module verwalten und bearbeiten. Ein Modul ist eine Zusammenfassung von Elementen wie Plugins, Snippets, usw.'; +$_lang["module_name"] = 'Modulname'; +$_lang["module_resource_msg"] = 'Hier können Sie die Ressourcen verwalten, die dieses Modul benötigt. Benutzen Sie die entsprechenden Buttons.'; +$_lang["module_resource_title"] = 'Modulabhängigkeiten'; +$_lang["module_title"] = 'Modul erstellen/bearbeiten'; +$_lang["module_viewdepend_msg"] = 'Hier können Sie die Abhängigkeiten dieses Moduls bearbeiten und verwalten.'; +$_lang["modules"] = 'Module'; +$_lang["modx_news"] = 'EVO Neuigkeiten'; +$_lang["modx_news_tab"] = 'EVO Neuigkeiten'; +$_lang["modx_news_title"] = 'EVO Neuigkeiten'; +$_lang["modx_security_notices"] = 'EVO Sicherheitshinweise'; +$_lang["modx_version"] = 'EVO-Version'; +$_lang["monday"] = 'Montag'; +$_lang["move"] = 'Verschieben'; +$_lang["move_resource"] = 'Ressource Verschieben'; +$_lang["move_resource_message"] = 'Sie können diese Ressource und alle Unter-Ressourcen durch die Wahl eines neuen Containers verschieben. Wenn Sie eine Ressource wählen, die kein Container ist, wird diese Ressource automatisch in einen Container umgewandelt. Bitte wählen Sie einen neuen Container aus dem Ressourcen-Baum aus.'; +$_lang["move_resource_new_parent"] = 'Bitte wählen Sie einen neuen Container aus dem Ressourcen-Baum aus.'; +$_lang["move_resource_title"] = 'Ressource verschieben'; +$_lang["name"] = 'Name'; +$_lang["new_category"] = 'Neue Kategorie'; +$_lang["new_file_permissions_message"] = 'Wenn Sie eine neue Datei mit dem Datei-Manager hochladen, wird versucht die Dateirechte wie hier angegeben zu setzen. In manchen Installationen (zum Beispiel in Microsofts IIS), ist dies nicht möglich. In diesem Fall Dann müssen Sie die Rechte der Datei manuell setzen.'; +$_lang["new_file_permissions_title"] = 'Neue Dateirechte'; +$_lang["new_folder_permissions_message"] = 'Wenn Sie eine neues Verzeichnis mit dem Datei-Manager erstellen, wird versucht die Verzeichnisrechte wie hier angegeben zu setzen. In manchen Installationen (zum Beispiel in Microsofts IIS), ist dies nicht möglich. In diesem Fall Dann müssen Sie die Rechte der Datei manuell setzen.'; +$_lang["new_folder_permissions_title"] = 'Neue Verzeichnis-Zugriffsrechte'; +$_lang["new_htmlsnippet"] = 'Neues Chunk'; +$_lang["new_keyword"] = 'Neues Schlüsselwort:'; +$_lang["new_module"] = 'Neues Modul '; +$_lang["new_parent"] = 'Neues Überelement'; +$_lang["new_plugin"] = 'Neues Plugin'; +$_lang["new_role"] = 'Neue Rolle'; +$_lang["new_snippet"] = 'Neues Snippet'; +$_lang["new_template"] = 'Neues Template'; +$_lang["new_tmplvars"] = 'Neue Template-Variable'; +$_lang["new_user"] = 'Neuer Manager-Benutzer'; +$_lang["new_web_user"] = 'Neuer Web-Benutzer'; +$_lang["new_resource"] = 'Neue Ressource'; +$_lang["no"] = 'Nein'; +$_lang["no_active_users_found"] = 'Keine aktiven Benutzer gefunden.'; +$_lang["no_activity_message"] = 'Sie haben bis jetzt noch keine Ressourcen bearbeitet oder erstellt.'; +$_lang["no_category"] = 'nicht kategorisiert'; +$_lang["no_docs_pending_publishing"] = 'Es stehen keine Ressourcen zum zeitgesteuerten Veröffentlichen an.'; +$_lang["no_docs_pending_pubunpub"] = 'Keine Ereignisse.'; +$_lang["no_docs_pending_unpublishing"] = 'Es stehen keine Ressourcen zum zeitgesteuerten Zurückziehen an.'; +$_lang["no_edits_creates"] = 'Keine bearbeiteten oder erstellten Ressourcen gefunden.'; +$_lang["no_groups_found"] = 'Keine Gruppen gefunden.'; +$_lang["no_keywords_found"] = 'Keine Keywords vorhanden.'; +$_lang["no_records_found"] = 'Keine Einträge gefunden.'; +$_lang["no_results"] = 'Es wurden keine Ergebnisse gefunden'; +$_lang["nologentries_message"] = 'Geben Sie die Anzahl der Einträge an, die im Protokoll angezeigt werden sollen.'; +$_lang["nologentries_title"] = 'Anzahl der Log-Einträge'; +$_lang["nomessages_message"] = 'Geben Sie wie viele Nachrichten im Posteingang angezeigt werden sollen.'; +$_lang["nomessages_title"] = 'Anzahl der Nachrichten'; +$_lang["none"] = 'Keine'; +$_lang["noresults_message"] = 'Anzahl der anzuzeigenden Ergebnisse in Listen und Suchergebnissen.'; +$_lang["noresults_title"] = 'Ergebnisse'; +$_lang["not_deleted"] = 'wurde nicht gelöscht.'; +$_lang["not_set"] = 'Nicht gesetzt'; +$_lang["offline"] = 'Offline'; +$_lang["online"] = 'Online'; +$_lang["onlineusers_action"] = 'Aktion'; +$_lang["onlineusers_actionid"] = 'Aktions-ID'; +$_lang["onlineusers_ipaddress"] = 'IP-Adresse des Benutzers'; +$_lang["onlineusers_lasthit"] = 'Letzte Aktion'; +$_lang["onlineusers_message"] = 'Diese Liste zeigt Ihnen die aktiven Benutzer der letzten 20 Minuten an. (Zur Zeit ist es '; +$_lang["onlineusers_title"] = 'Folgende Benutzer sind online'; +$_lang["onlineusers_user"] = 'Benutzer'; +$_lang["onlineusers_userid"] = 'Benutzer-ID'; +$_lang["optimize_table"] = 'Klicken Sie hier, um die Tabelle zu optimieren'; +$_lang["page_data_alias"] = 'Alias'; +$_lang["page_data_cacheable"] = 'Cache aktiv'; +$_lang["page_data_cacheable_help"] = 'Markieren Sie diese Option, falls Ihre Ressource cachebar sein soll. Falls Ihre Ressource Snippets nutzt, muss diese Option deaktiviert sein.'; +$_lang["page_data_cached"] = 'Quelltext aus dem Cache:'; +$_lang["page_data_changes"] = 'Änderungen'; +$_lang["page_data_contentType"] = 'Inhaltstyp'; +$_lang["page_data_contentType_help"] = 'Wählen Sie den Inhaltstyp für diese Ressource. Wenn Sie sich nicht sicher sind welchen Typ die Ressource haben soll, lassen Sie die Einstellung auf „text/html“.'; +$_lang["page_data_created"] = 'Erstellt'; +$_lang["page_data_edited"] = 'Bearbeitet'; +$_lang["page_data_editor"] = 'Rich-Text-Editor benutzen'; +$_lang["page_data_folder"] = 'Ressource ist ein Container'; +$_lang["page_data_general"] = 'Allgemein'; +$_lang["page_data_markup"] = 'Auszeichnung / Struktur'; +$_lang["page_data_mgr_access"] = 'Manager-Zugriff'; +$_lang["page_data_notcached"] = 'Diese Ressource wurde noch nicht gecached.'; +$_lang["page_data_publishdate"] = 'Veröffentlichen am'; +$_lang["page_data_publishdate_help"] = 'Falls Sie ein Datum setzen, wird die Ressource zum angegebenen Zeitpunkt veröffentlicht.'; +$_lang["page_data_published"] = 'Veröffentlicht'; +$_lang["page_data_searchable"] = 'Durchsuchbar'; +$_lang["page_data_searchable_help"] = 'Ist diese Option aktiv, kann die Ressource durchsucht werden. Sie können dieses Feld auch für jede andere Aktion in Ihren Snippets nutzen.'; +$_lang["page_data_source"] = 'Quelltext'; +$_lang["page_data_status"] = 'Status'; +$_lang["page_data_template"] = 'Template'; +$_lang["page_data_template_help"] = 'Hier können Sie das Template für die Ressource wählen.'; +$_lang["page_data_title"] = 'Daten der Ressource'; +$_lang["page_data_unpublishdate"] = 'Zurückziehen am'; +$_lang["page_data_unpublishdate_help"] = 'Falls Sie ein Datum setzen, wird die Ressource zum angegebenen Zeitpunkt zurückgezogen.'; +$_lang["page_data_unpublished"] = 'Unveröffentlicht'; +$_lang["page_data_web_access"] = 'Web-Zugriff'; +$_lang["pagetitle"] = 'Ressource-Titel'; +$_lang["pagination_table_first"] = 'Anfang'; +$_lang["pagination_table_gotopage"] = 'Gehe zu Seite'; +$_lang["pagination_table_last"] = 'Ende'; +$_lang["paging_first"] = 'Anfang'; +$_lang["paging_last"] = 'Ende'; +$_lang["paging_next"] = 'Vor'; +$_lang["paging_prev"] = 'Zurück'; +$_lang["paging_showing"] = 'Zeige'; +$_lang["paging_to"] = 'von'; +$_lang["paging_total"] = 'insgesamt'; +$_lang["parameter"] = 'Parameter'; +$_lang["parse_docblock"] = 'DocBlock parsen'; +$_lang["parse_docblock_msg"] = 'Achtung (!): Wenn aktiviert, wird durch Analyse des DocBlocks der aktuelle Name, Konfiguration, Beschreibung und Kategorie auf die Standardeinstellungen zurückgesetzt.'; +$_lang["password"] = 'Passwort'; +$_lang["password_change_request"] = 'Neues Passwort angefordert'; +$_lang["password_gen_gen"] = 'EVO soll ein Passwort generieren.'; +$_lang["password_gen_length"] = 'Das Passwort muss mindestes 6 Zeichen lang sein.'; +$_lang["password_gen_method"] = 'Wie möchten Sie das Passwort erzeugen?'; +$_lang["password_gen_specify"] = 'Das Passwort wird von mir eingegeben:'; +$_lang["password_method"] = 'Wie möchten Sie den Benutzer über sein neues Passwort benachrichtigen?'; +$_lang["password_method_email"] = 'Neues Passwort per E-Mail senden.'; +$_lang["password_method_screen"] = 'Neues Passwort am Bildschirm ausgeben.'; +$_lang["password_msg"] = 'Das neue Passwort für %s ist %s.'; +$_lang["php_version_check"] = 'EVO ist kompatibel mit PHP 5.6.0 und höher. Dieser Server nutzt aktuell die Version %s%. Bitte installieren Sie eine neuere Version von PHP. '; +$_lang["plugin"] = 'Plugin'; +$_lang["plugins"] = 'Plugins'; +$_lang["plugin_code"] = 'Plugin-Code (PHP)'; +$_lang["plugin_config"] = 'Plugin-Konfiguration'; +$_lang["plugin_desc"] = 'Beschreibung'; +$_lang["plugin_disabled"] = 'Plugin deaktiviert'; +$_lang["plugin_event_msg"] = 'Wählen Sie hier die Systemereignisse aus, bei denen dieses Plugin ausgeführt werden soll.'; +$_lang["plugin_management_msg"] = 'Hier können Sie auswählen welches Plugin Sie bearbeiten möchten.'; +$_lang["plugin_msg"] = 'Hier können Sie Plugins erstellen und bearbeiten. Plugins bestehen aus PHP-Quellcode und werden aufgrund von definierten Systemereignissen ausgeführt.'; +$_lang["plugin_name"] = 'Plugin-Name'; +$_lang["plugin_priority"] = 'Ausführungsreihenfolge festlegen'; +$_lang["plugin_priority_instructions"] = 'Hier können Sie durch Drag & Drop die Plugins unter jedem Event-Titel neu anordnen. Das erste Plugin das ausgeführt werden soll, muss ganz oben platziert werden.'; +$_lang["plugin_priority_title"] = 'Reihenfolge der Ausführung der Plugns'; +$_lang["purge_plugin"] = 'Veraltete Plugins entfernen'; +$_lang["purge_plugin_confirm"] = 'Sind Sie sicher, dass Sie alle veralteten Plugins löschen möchten?'; +$_lang["plugin_title"] = 'Plugin erstellen/bearbeiten'; +$_lang["preview"] = 'Vorschau'; +$_lang["preview_msg"] = 'Dies ist eine Vorschau Ihrer zuletzt gespeicherten Änderungen. Klicken Sie Speichern und aktualisieren um Ihren aktuellen Änderungen zu speichern.'; +$_lang["preview_resource"] = 'Ressource-Vorschau'; +$_lang["private"] = 'Privat'; +$_lang["public"] = 'Öffentlich'; +$_lang["publish_date"] = 'Veröffentlichungstermin'; +$_lang["publish_events"] = 'Veröffentlichungen'; +$_lang["publish_resource"] = 'Veröffentlichen'; +$_lang["rb_base_dir_message"] = 'Geben Sie den physischen Pfad auf dem Web-Server zu Ihrem Datei-Verzeichnis ein. Abhängig von Ihrem Webserver ist diese Einstellung im Normalfall automatisch vorausgefüllt. Hinweis: Für die korrekte Funktion muss das Datei-Verzeichnis die Unterverzeichnisse „images“, „docs“, „flash“ und „media“ beinhalten.'; +$_lang["rb_base_dir_title"] = 'Datei-Basispfad'; +$_lang["rb_base_url_message"] = 'Geben Sie den virtuellen Pfad zum Datei-Basispfad an. Der virtuelle Pfad ist identisch mit der URL in Ihrem Web-Browser.'; +$_lang["rb_base_url_title"] = 'Datei-URL'; +$_lang["rb_message"] = 'Wählen Sie „Ja“, um den Datei-Browser zu aktivieren. Der Datei-Browser ermöglicht Benutzern, allgemeine Dateien wie Bilder, Animationen oder Mediendateien auf den Server zu laden und zu verwalten.'; +$_lang["rb_title"] = 'Datei-Browser aktivieren'; +$_lang["rb_webuser_message"] = 'Soll ein Web-Benutzer den Datei-Browser verwenden dürfen? Hinweis: Wenn Web-Benutzer den Datei-Browser verwenden dürfen, können sie alle Dateien einsehen auf die Manager-Benutzer Zugriff haben. Diese Möglichkeit sollte daher nur vertrauenswürdigen Web-Benutzern eingeräumt werden.'; +$_lang["rb_webuser_title"] = 'Web-Benutzer?'; +$_lang["recent_docs"] = 'Kürzlich bearbeitete Ressourcen'; +$_lang["recommend_setting_change_title"] = 'Empfohlene Änderung der Konfiguration'; +$_lang["recommend_setting_change_description"] = 'Ihre Seite überprüft momentan nicht die HTTP_REFERER von eingehenden Requests. Wir empfehlen dringend, diese Einstellung vorzunehmen, um das Risiko von CSRF-Attacken (Cross Site Request Forgery) zu reduzieren.'; +$_lang["references"] = 'Referenzen'; +$_lang["refresh_cache"] = 'Cache: %s Dateien wurden im Cache-Verzeichnis gefunden. Gelöschte Dateien %d.

          Der Cache wird erneuert, sobald die Seiten das erste mal aufgerufen werden.'; +$_lang["refresh_published"] = '%s Ressourcen wurden veröffentlicht.'; +$_lang["refresh_site"] = 'Cache leeren'; +$_lang["refresh_title"] = 'Website aktualisieren, Cache leeren'; +$_lang["refresh_tree"] = 'Ressourcen-Baum aktualisieren'; +$_lang["refresh_unpublished"] = '%s Ressourcen wurden zurückgezogen.'; +$_lang["release_date"] = 'Veröffentlichungsdatum'; +$_lang["remember_last_tab"] = 'Tabs merken'; +$_lang["remember_last_tab_message"] = 'Manager Tabs laden den zuletzt geöffneten anstatt dem ersten Tab.'; +$_lang["remember_username"] = 'Benutzername merken'; +$_lang["remove"] = 'Entfernen'; +$_lang["remove_date"] = 'Datum löschen'; +$_lang["remove_locks"] = 'Sperren entfernen'; +$_lang["rename"] = 'Umbenennen'; +$_lang["reports"] = 'Berichte'; +$_lang["report_issues"] = 'Probleme melden'; +$_lang["require_tagname"] = 'Ein Tag-Name ist zwingend erforderlich'; +$_lang["require_tagvalue"] = 'Ein Tag-Wert ist zwingend erforderlich'; +$_lang["reserved_name_warning"] = 'Sie benutzen einen vorreservierten Namen.'; +$_lang["reset"] = 'Zurücksetzen'; +$_lang["reset_failedlogins"] = 'Zurücksetzen'; +$_lang["reset_sort_order"] = 'Sortierung zurücksetzen'; +$_lang["resource"] = 'Ressource'; +$_lang["resource_alias"] = 'Ressource-Alias'; +$_lang["resource_alias_help"] = 'Hier können Sie die URL der Ressource angeben um diese auch über http://beispiel.de/alias verfügbar zu machen. Funktioniert nur bei aktivierten benutzerfreundlichen URLs.'; +$_lang["resource_content"] = 'Inhalt der Ressource'; +$_lang["resource_description"] = 'Beschreibung'; +$_lang["resource_description_help"] = 'Sie können hier eine optionale Beschreibung der Ressource eingeben.'; +$_lang["resource_duplicate"] = 'Ressource duplizieren'; +$_lang["resource_long_title_help"] = 'Hier können Sie einen längeren Titel für die Ressource eingeben. Der Langtitel kann für Header-Tags verwendet werden, nützlich für die Suchmaschinen-Indizierung sein und aussagekräftig Ihre Seite beschreiben.'; +$_lang["resource_metatag_help"] = 'Wählen Sie jene Meta-Tags und Schlüsselwörter aus, die dieser Ressource zugeordnet werden sollen. Für eine Mehrfachauswahl halten Sie die STRG- / CTRL-Taste gedrückt.'; +$_lang["resource_opt_contentdispo"] = 'Inhaltstyp'; +$_lang["resource_opt_contentdispo_help"] = 'Mit diesem Feld können Sie festlegen, ob der Browser diese Ressource wie üblich im Browser-Fenster darstellt oder als Datei-Download anbietet.'; +$_lang["resource_opt_emptycache"] = 'Cache leeren'; +$_lang["resource_opt_emptycache_help"] = 'Eine Markierung dieses Feldes löscht den Cache für diese Ressource nach dem Speichern. Dadurch werden Ihre Besucher keine ältere Version der Ressource sehen.'; +$_lang["resource_opt_folder"] = 'Container'; +$_lang["resource_opt_folder_help"] = 'Markieren Sie diese Einstellung, wenn diese Ressource als Container für andere Ressourcen zur Verfügung stehen soll. Ein Container ist wie ein Ordner für weitere Ressourcen, kann selbst aber auch Inhalte enthalten.'; +$_lang["resource_opt_menu_index"] = 'Menüindex'; +$_lang["resource_opt_menu_index_help"] = 'Der Menüindex kann in Menü-Snippets die Position der Ressource in Menülisten bestimmen oder auch für jeden anderen Zweck in Snippets verwendet werden.'; +$_lang["resource_opt_menu_title"] = 'Menütitel'; +$_lang["resource_opt_menu_title_help"] = 'Im Menütitel kann optional ein kurzer Titel angegeben werden, der für Links zu dieser Ressource in Menü-Snippets verwendet wird.'; +$_lang["resource_opt_published"] = 'Veröffentlicht'; +$_lang["resource_opt_published_help"] = 'Markieren Sie diese Option, wenn Ihr Ressource direkt nach dem speichern veröffentlicht werden soll.'; +$_lang["resource_opt_richtext"] = 'Rich-Text'; +$_lang["resource_opt_richtext_help"] = 'Markieren Sie diese Option, wenn Sie zum Bearbeiten der Ressource den Rich-Text-Editor nutzen möchten. Fall Ihr Ressource Javascript oder Formulare beinhalten soll, deaktivieren Sie diese Option, damit der HTML-Editor Ihr Ressource nicht zerstört.'; +$_lang["resource_opt_show_menu"] = 'Im Menü anzeigen'; +$_lang["resource_opt_show_menu_help"] = 'Aktivieren Sie diese Option um die Ressource in Menülisten anzuzeigen. Setzt voraus, dass Ihre Menü-Snippets diese Angabe interpretieren.'; +$_lang["resource_opt_trackvisit_help"] = 'Besucherzugriffe auf dieser Seite protokollieren'; +$_lang["resource_overview"] = 'Ressourcen-Übersicht'; +$_lang["resource_parent"] = 'Container'; +$_lang["resource_parent_help"] = 'Klicken Sie auf eine Ressource im Baum, um diese als übergeordnete Ressource zu wählen.'; +$_lang["resource_permissions_error"] = 'Weisen Sie diese Resource mindestens einer Ressourcen-Gruppe zu, zu der Sie Zugriff haben.'; +$_lang["resource_setting"] = 'Ressourcen-Eigenschaften'; +$_lang["resource_summary"] = 'Zusammenfassung'; +$_lang["resource_summary_help"] = 'Geben Sie eine kurze inhaltliche Zusammenfassung der Ressource ein.'; +$_lang["resource_title"] = 'Titel'; +$_lang["resource_title_help"] = 'Geben Sie hier den Namen/Titel der Ressource ein. Vermeiden Sie die Benutzung von Backslashes im Namen!'; +$_lang["resource_to_be_moved"] = 'Ressource, die verschoben werden soll'; +$_lang["resource_type"] = 'Ressourcentyp'; +$_lang["resource_type_message"] = 'Weblinks referenzieren andere Ressourcen im Internet ebenso wie andere EVO-Ressourcen, externe Websites, Bilder oder Dateien. Weblinks sollten vom Medientyp text/html sein und Inline-Content-Disposition haben.'; +$_lang["resource_type_weblink"] = 'Weblink'; +$_lang["resource_type_webpage"] = 'Website'; +$_lang["resource_weblink_help"] = 'Geben Sie hier die Adresse des Objektes ein, welches Sie mit dem Weblink verlinken möchten. Alternativ können Sie den Datei-Browser verwenden, oder klicken Sie auf das Icon und wählen Sie eine Resource aus dem Resourcen-Baum.'; +$_lang["resources_in_container"] = 'Ressourcen in diesem Container.'; +$_lang["resources_in_container_no"] = 'Dieser Container enthält keine Unter-Ressourcen.'; +$_lang["role"] = 'Rolle'; +$_lang["role_about"] = 'Anzeige der „Über“-Seite'; +$_lang["role_access_persmissions"] = 'Zugriffsberechtigungen'; +$_lang["role_actionok"] = 'Ausgeführte Aktionen anzeigen'; +$_lang["role_assets_images"] = 'assets/images verwalten'; +$_lang["role_assets_files"] = 'assets/files verwalten'; +$_lang["role_bk_manager"] = 'Backup-Manager benutzen'; +$_lang["role_cache_refresh"] = 'Seitencache leeren'; +$_lang["role_category_manager"] = 'Kategorie-Manager benutzen'; +$_lang["role_change_password"] = 'Passwort ändern'; +$_lang["role_change_resourcetype"] = 'Ressourcentyp ändern'; +$_lang["role_chunk_management"] = 'Chunk-Management'; +$_lang["role_config_management"] = 'Konfigurations-Verwaltung'; +$_lang["role_content_management"] = 'Inhalts-Verwaltung'; +$_lang["role_create_chunk"] = 'Neue Chunks erstellen'; +$_lang["role_create_doc"] = 'Neue Ressourcen erstellen'; +$_lang["role_create_plugin"] = 'Neue Plugins erstellen'; +$_lang["role_create_snippet"] = 'Neue Snippets erstellen'; +$_lang["role_create_template"] = 'Neue Templates erstellen'; +$_lang["role_credits"] = 'Danksagungen'; +$_lang["role_delete_chunk"] = 'Chunks löschen'; +$_lang["role_delete_doc"] = 'Ressourcen löschen'; +$_lang["role_delete_eventlog"] = 'Ereignisprotokoll löschen'; +$_lang["role_delete_module"] = 'Module löschen'; +$_lang["role_delete_plugin"] = 'Plugins löschen'; +$_lang["role_delete_role"] = 'Rollen löschen'; +$_lang["role_delete_snippet"] = 'Snippets löschen'; +$_lang["role_delete_template"] = 'Templates löschen'; +$_lang["role_delete_user"] = 'Manager-Benutzer löschen'; +$_lang["role_delete_web_user"] = 'Web-Benutzer löschen'; +$_lang["role_edit_chunk"] = 'Chunks bearbeiten'; +$_lang["role_edit_doc"] = 'Ressourcen bearbeiten'; +$_lang["role_edit_doc_metatags"] = 'Meta-Tags und Schlüsselwörter bearbeiten'; +$_lang["role_edit_module"] = 'Module bearbeiten'; +$_lang["role_edit_plugin"] = 'Plugins bearbeiten'; +$_lang["role_edit_role"] = 'Rollen bearbeiten'; +$_lang["role_edit_settings"] = 'Konfiguration bearbeiten'; +$_lang["role_edit_snippet"] = 'Snippets bearbeiten'; +$_lang["role_edit_template"] = 'Templates bearbeiten'; +$_lang["role_edit_user"] = 'Manager-Benutzer bearbeiten'; +$_lang["role_edit_web_user"] = 'Web-Benutzer bearbeiten'; +$_lang["role_empty_trash"] = 'Gelöschte Ressourcen endgültig entfernen'; +$_lang["role_errors"] = 'Fehlerdialoge anzeigen'; +$_lang["role_eventlog_management"] = 'Ereignisverwaltung'; +$_lang["role_export_static"] = 'Statisches HTML exportieren'; +$_lang["role_file_management"] = 'Datei-Manager'; +$_lang["role_file_manager"] = 'Datei-Manager (voller Root-Zugriff)'; +$_lang["role_frames"] = 'Manager-Frames ermitteln'; +$_lang["role_help"] = 'Anzeigen der Hilfeseiten'; +$_lang["role_home"] = 'Manager Startseite ermitteln'; +$_lang["role_import_static"] = 'HTML importieren'; +$_lang["role_logout"] = 'Abmeldung aus dem MODX-Manager'; +$_lang["role_manage_metatags"] = 'Meta-Tags und Schlüsselwörter verwalten'; +$_lang["role_management_msg"] = 'Hier können Sie eine Rolle zum Bearbeiten wählen.'; +$_lang["role_management_title"] = 'Rollen'; +$_lang["role_messages"] = 'Nachrichten anzeigen und senden'; +$_lang["role_module_management"] = 'Modul-Verwaltung'; +$_lang["role_name"] = 'Rollenname'; +$_lang["role_new_module"] = 'Neues Modul erstellen'; +$_lang["role_new_role"] = 'Neue Rolle erstellen'; +$_lang["role_new_user"] = 'Neuen Manager-Benutzer erstellen'; +$_lang["role_new_web_user"] = 'Neuen Web-Benutzer erstellen'; +$_lang["role_plugin_management"] = 'Plugin-Verwaltung'; +$_lang["role_publish_doc"] = 'Ressource veröffentlichen'; +$_lang["role_remove_locks"] = 'Sperren entfernen'; +$_lang["role_role_management"] = 'Rollenverwaltung'; +$_lang["role_run_module"] = 'Module ausführen'; +$_lang["role_save_chunk"] = 'Chunks speichern'; +$_lang["role_save_doc"] = 'Ressource speichern'; +$_lang["role_save_module"] = 'Modul speichern'; +$_lang["role_save_password"] = 'Passwort speichern'; +$_lang["role_save_plugin"] = 'Plugins speichern'; +$_lang["role_save_role"] = 'Rollen speichern'; +$_lang["role_save_snippet"] = 'Snippet speichern'; +$_lang["role_save_template"] = 'Template speichern'; +$_lang["role_save_user"] = 'Manager-Benutzer speichern'; +$_lang["role_save_web_user"] = 'Web-Benutzer speichern'; +$_lang["role_snippet_management"] = 'Snippet-Verwaltung'; +$_lang["role_template_management"] = 'Template-Verwaltung'; +$_lang["role_title"] = 'Rolle erzeugen/bearbeiten'; +$_lang["role_udperms"] = 'Rechteverwaltung'; +$_lang["role_user_management"] = 'Manager-Benutzer verwalten'; +$_lang["role_view_docdata"] = 'Ressource-Daten anzeigen'; +$_lang["role_view_eventlog"] = 'Ereignisprotokoll anzeigen'; +$_lang["role_view_logs"] = 'Systemlogs anzeigen'; +$_lang["role_view_unpublished"] = 'Zeige unveröffentlichte Ressourcen'; +$_lang["role_web_access_persmissions"] = 'Web-Benutzer-Zugriffskontrolle'; +$_lang["role_web_user_management"] = 'Web-Benutzerverwaltung'; +$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; +$_lang["rss_url_news_message"] = 'URL des EVO-News-Feeds eintragen.'; +$_lang["rss_url_news_title"] = 'RSS-News-Feed'; +$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; +$_lang["rss_url_security_message"] = 'URL des EVO-News-Feeds eintragen.'; +$_lang["rss_url_security_title"] = 'RSS-Security-Feed'; +$_lang["run_module"] = 'Modul starten'; +$_lang["saturday"] = 'Samstag'; +$_lang["save"] = 'Speichern'; +$_lang["save_all_changes"] = 'Änderungen speichern'; +$_lang["save_tag"] = 'Tag speichern'; +$_lang["saving"] = 'Speichern, bitte warten …'; +$_lang["search"] = 'Suchen'; +$_lang["search_criteria"] = 'Suchkriterium'; +$_lang["search_criteria_content"] = 'Suche im Inhalt'; +$_lang["search_criteria_content_msg"] = 'Findet alle Ressource in deren Inhalt der eingegebene Text vorkommt.'; +$_lang["search_criteria_id"] = 'Suche nach ID'; +$_lang["search_criteria_id_msg"] = 'Findet die Ressource dessen ID mit der eingegebenen übereinstimmt.'; +$_lang["search_criteria_top"] = 'Hauptfelder durchsuchen'; +$_lang["search_criteria_top_msg"] = 'Titel, langer Title, Alias, ID'; +$_lang["search_criteria_template_id"] = 'Suche nach Template ID'; +$_lang["search_criteria_template_id_msg"] = 'Findet alle Ressourcen die das Template mit der angegebenen ID benutzen.'; +$_lang["search_criteria_url_msg"] = 'Finde Ressource durch exakte URL'; +$_lang["search_criteria_longtitle"] = 'Suche nach Langtitel'; +$_lang["search_criteria_longtitle_msg"] = 'Findet alle Ressource in deren Langtitel der eingegebene Text vorkommt.'; +$_lang["search_criteria_title"] = 'Suche nach Titel'; +$_lang["search_criteria_title_msg"] = 'Findet alle Ressourcen in deren Titel der eingegebene Text vorkommt.'; +$_lang["search_empty"] = 'Ihre Suche ergab keine Treffer. Bitte ändern Sie Ihre Suchanfrage und versuchen Sie es noch einmal.'; +$_lang["search_item_deleted"] = 'Diese Ressource wurde gelöscht'; +$_lang["search_results"] = 'Suchergebnisse'; +$_lang["search_results_returned_desc"] = 'Beschreibung'; +$_lang["search_results_returned_id"] = 'ID'; +$_lang["search_results_returned_msg"] = 'Ihre Suchanfrage ergab %s Treffer. Wenn zu viele Ergebnisse gefunden wurden, versuchen Sie die Suche zu verfeinern. Das erste Symbol in jeder Spalte zeigt Ihnen die Ressource-Postion im Baum an. Ganz rechts können Sie den Ressource-Status ablesen.'; +$_lang["search_results_returned_title"] = 'Titel'; +$_lang["search_view_docdata"] = 'Diese Ressource anzeigen'; +$_lang["security"] = 'Benutzer'; +$_lang["security_notices_tab"] = 'Sicherheitsmeldungen'; +$_lang["security_notices_title"] = 'Sicherheitsmeldungen'; +$_lang["select_date"] = 'Datum auswählen'; +$_lang["send"] = 'Senden'; +$_lang["server_protocol_http"] = 'http'; +$_lang["server_protocol_https"] = 'https'; +$_lang["server_protocol_message"] = 'Falls Sie eine https-Verbindung nutzen möchten, geben Sie dies hier an.'; +$_lang["server_protocol_title"] = 'Servertyp'; +$_lang["serveroffset"] = 'Server-Zeitverschiebung'; +$_lang["serveroffset_message"] = 'Wählen Sie die Anzahl der Stunden, die zwischen der Server-Zeit und Ihrer Ortszeit liegen. Die derzeitige Server-Zeit ist [%s], die derzeitige Server-Zeit bei Nutzung der Zeitverschiebung ist [%s].'; +$_lang["serveroffset_title"] = 'Server-Zeitverschiebung'; +$_lang["servertime"] = 'Server-Zeit'; +$_lang["set_automatic"] = 'Automatisch einstellen'; +$_lang["set_default"] = 'Zurücksetzen'; +$_lang["set_default_all"] = 'Alle zurücksetzen'; +$_lang["settings_after_install"] = 'Da es sich um eine neue Installation handelt, ist es erforderlich dass Sie diese Einstellungen prüfen und gegebenenfalls anpassen. Drücken Sie danach auf \'Speichern\'.'; +$_lang["settings_config"] = 'Konfiguration'; +$_lang["settings_dependencies"] = 'Abhängigkeiten'; +$_lang["settings_events"] = 'Systemereignisse'; +$_lang["settings_furls"] = 'Benutzerfreundliche URL'; +$_lang["settings_general"] = 'Allgemein'; +$_lang["settings_group_tv_message"] = 'Wählen Sie aus ob Template-Variablen in Sektionen oder Tabs (benannt nach TV-Kategorien) gruppiert werden sollen beim Editieren von Ressourcen.'; +$_lang["settings_group_tv_options"] = 'Nein,Sektionen im Allgemein-Tab,Tabs im Allgemein-Tab,Sektionen in neuem Tab,Tabs in neuem Tab,Neue Tabs'; +$_lang["settings_misc"] = 'Sonstiges'; +$_lang["settings_security"] = 'Sicherheit'; +$_lang["settings_KC"] = 'Datei-Browser'; +$_lang["settings_page_settings"] = 'Seiteneinstellungen'; +$_lang["settings_photo"] = 'Foto'; +$_lang["settings_properties"] = 'Eigenschaften'; +$_lang["show_fullscreen_btn_message"] = 'Button "Vollbild-Modus" anzeigen'; +$_lang["show_newresource_btn_message"] = 'Button "Neue Ressource" anzeigen'; +$_lang["settings_show_picker_message"] = 'Ermöglicht die Anpassung des Manager-Templates und Speicherung via localStorage.'; +$_lang["show_fullscreen_btn"] = 'Vollbild-Modus'; +$_lang["show_newresource_btn"] = 'Neue Ressource'; +$_lang["settings_site"] = 'Seiten'; +$_lang["settings_strip_image_paths_message"] = 'Mit dieser Einstellung werden die Bildpfade relativ statt absolut gesetzt. Das ist sehr empfehlenswert wenn die Installation umgezogen wird (z.B. von der Entwicklungsseite zur Produktionsseite). Wenn Sie nicht wissen was gemeint ist – lassen Sie die Einstellung auf „Nein“.'; +$_lang["settings_strip_image_paths_title"] = 'Bild-Pfade zurückschreiben?'; +$_lang["settings_templvars"] = 'Template-Variablen'; +$_lang["settings_title"] = 'MODX-Konfiguration'; +$_lang["settings_ui"] = 'Benutzeroberfläche'; +$_lang["settings_users"] = 'Benutzer'; +$_lang["show_meta"] = 'META Keywords Tab anzeigen'; +$_lang["show_meta_message"] = 'Den (in Zukunft nicht mehr unterstützten) META Keywords Tab beim Ressource bearbeiten anzeigen.'; +$_lang["show_tree"] = 'Baum anzeigen'; +$_lang["show_picker"] = 'Aktiviere Farbwähler'; +$_lang["showing"] = 'Anzeige'; +$_lang["signupemail_message"] = 'Hier können Sie die Vorlage der E-Mail eingeben, die das System automatisch an Ihre Benutzer schickt, wenn die entsprechenden Benutzerkonten erstellt werden. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Webmasters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis:Sie sollten auf jeden Fall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Benutzer auch die entsprechenden Anmeldedaten erhalten.'; +$_lang["signupemail_title"] = 'Aktivierungs-E-Mail'; +$_lang["site"] = 'Website'; +$_lang["site_schedule"] = 'Terminplan'; +$_lang["sitename_message"] = 'Geben Sie den Namen Ihrer Website ein.'; +$_lang["sitename_title"] = 'Website-Name'; +$_lang["sitestart_message"] = 'Geben Sie die ID der Ressource ein, welche die Startseite sein soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; +$_lang["sitestart_title"] = 'Startseite'; +$_lang["sitestatus_message"] = 'Wählen Sie „Online“, um Ihre Seite zu veröffentlichen. Wenn Sie „Offline“ wählen wird den Besuchern Ihrer Seite die „Seite zur Zeit nicht erreichbar“ angezeigt.'; +$_lang["sitestatus_title"] = 'Status der Seite'; +$_lang["siteunavailable_message"] = 'Diese Nachricht wird angezeigt, wenn Sie Ihre Seite „Offline“ geschaltet haben oder ein Fehler auftritt.'; +$_lang["siteunavailable_message_default"] = 'Diese Seite ist derzeit nicht verfügbar.'; +$_lang["siteunavailable_page_message"] = 'Geben Sie die Ressource-ID der Ressource ein, die beim Status „Offline“ angezeigt werden soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; +$_lang["siteunavailable_page_title"] = 'Offline-Seite'; +$_lang["siteunavailable_title"] = 'Seite nicht erreichbar'; +$_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; +$_lang["snippet_code"] = 'Snippet-Code (PHP)'; +$_lang["snippet_desc"] = 'Snippet-Beschreibung'; +$_lang["snippet_execonsave"] = 'Snippet nach dem Speichern ausführen.'; +$_lang["snippet_management_msg"] = 'Hier können Sie ein Snippet wählen, das Sie bearbeiten möchten.'; +$_lang["snippet_msg"] = 'Hier können Sie Snippets anlegen und bearbeiten. Beachten Sie, dass Snippets reiner PHP-Code sind. Wenn das Snippet einen Wert in einem Template oder einer Ressource ausgeben soll, müssen Sie diesen wert innerhalb des Snippets mit PHP ausgeben.'; +$_lang["snippet_name"] = 'Snippet-Name'; +$_lang["snippet_properties"] = 'Standardeigenschaften'; +$_lang["snippet_title"] = 'Snippet erstellen/bearbeiten'; +$_lang["sort_alphabetically"] = 'Alphabetisch sortieren'; +$_lang["sort_asc"] = 'Aufsteigend'; +$_lang["sort_desc"] = 'Absteigend'; +$_lang["sort_menuindex"] = 'Menüindex sortieren'; +$_lang["sort_tree"] = 'Baum sortieren'; +$_lang['sort_updating'] = 'Wird aktualisiert ...'; +$_lang['sort_updated'] = 'Aktualisierung beendet!'; +$_lang['sort_nochildren'] = 'Dieser Container enthält keine Unter-Ressourcen.'; +$_lang["sort_elements_msg"] = 'Reihenfolge der aufgelisteten Elemente durch Drag&Drop sortieren.'; +$_lang["source"] = 'Quelle'; +$_lang["stay"] = 'Bearbeitung fortsetzen'; +$_lang["stay_new"] = 'Weiter hinzufügen'; +$_lang["submit"] = 'Absenden'; +$_lang["sunday"] = 'Sonntag'; +$_lang["sys_alert"] = 'Systemalarm'; +$_lang["sysinfo_activity_message"] = 'Die Liste zeigt Ihnen die zuletzt bearbeiteten Dateien.'; +$_lang["sysinfo_userid"] = 'Benutzer'; +$_lang["system"] = 'System'; +$_lang["system_email_signup"] = ' + +Hallo [+uid+] -$_lang["about_msg"] = 'MODX ist ein unter der GNU-GPL-Lizenz veröffentlichtes PHP-Framework und Content Management System.'; -$_lang["about_title"] = 'Über MODX'; -$_lang["access_permission_denied"] = 'Sie haben nicht die notwendige Zugriffsberechtigung für diese Ressource.'; -$_lang["access_permission_parent_denied"] = 'Sie haben nicht die notwendige Zugriffsberechtigung, um eine Ressource an dieser Stelle zu erstellen oder hierher zu verschieben.'; -$_lang["access_permissions"] = 'Zugriffsberechtigung'; -$_lang["access_permissions_add_resource_group"] = 'Eine neue Ressourcen-Gruppe erstellen'; -$_lang["access_permissions_add_user_group"] = 'Eine neue Benutzergruppe erstellen'; -$_lang["access_permissions_docs_collision"] = 'Durch einen Konflikt zwischen Web-Benutzergruppen und Manager-Benutzergruppen für diese Rolle, ist diese Ressource öffentlich zugänglich. Kontaktieren Sie Ihren Seiten-Administrator für weitere Hilfe.'; -$_lang["access_permissions_docs_message"] = 'Wählen Sie aus welchen Ressourcen-Gruppe diese Ressource zugeordnet ist'; -$_lang["access_permissions_group_link"] = 'Einen neuen Gruppen-Link erstellen'; -$_lang["access_permissions_introtext"] = 'Hier können Sie Benutzer- und Ressourcen-Gruppen für die Zugriffsberechtigung bearbeiten. Um einen Benutzer einer Benutzergruppe zuzuordnen, bearbeiten Sie den Benutzer und wählen die zugehörige(n) Gruppe(n). Um eine Ressource einer Benutzergruppe zuzuordnen, bearbeiten Sie die Ressource und wählen die zugehörige(n) Gruppe(n).'; -$_lang["access_permissions_link_to_group"] = 'zur Ressourcen-Gruppe'; -$_lang["access_permissions_link_user_group"] = 'Benutzergruppe verlinken'; -$_lang["access_permissions_links"] = 'Benutzer- / Ressourcen-Gruppen-Links'; -$_lang["access_permissions_links_tab"] = 'Hier legen Sie fest welche Benutzergruppen auf die Ressourcen-Gruppen Zugriffsrechte haben (z.B. Ressourcen bearbeiten oder anlegen). Um eine Ressourcen-Gruppe mit einer Benutzergruppe zu verknüpfen, wählen Sie die entsprechende Gruppe aus dem Dropdown-Menü und klicken anschließend auf „Absenden“. Um einen Link für eine bestimmte Gruppe zu entfernen, klicken Sie auf „Entfernen“. Die Verknüpfung wird sofort gelöscht.'; -$_lang["access_permissions_no_resources_in_group"] = 'Keine.'; -$_lang["access_permissions_no_users_in_group"] = 'Keine.'; -$_lang["access_permissions_off"] = 'Zugriffsberechtigungen wurden nicht aktiviert. Sämtliche Einstellungen, die Sie hier vornehmen bleiben wirkungslos, bis die Zugriffsberechtigungen wieder aktiviert werden.'; -$_lang["access_permissions_resource_groups"] = 'Ressourcen-Gruppen'; -$_lang["access_permissions_resources_in_group"] = 'Ressourcen in Gruppe: '; -$_lang["access_permissions_resources_tab"] = 'Hier sehen Sie die angelegten Ressourcen-Gruppen. Sie können auch neue Gruppen anlegen, Gruppen umbenennen, Gruppen löschen und sehen welche Ressourcen in den unterschiedlichen Gruppen enthalten sind (den Namen der Ressource sehen Sie, in dem Sie mit der Maus über die ID fahren). Um eine Ressource zu einer Gruppe hinzuzufügen oder von einer Gruppe zu entfernen, ändern Sie die entsprechende Ressource direkt.'; -$_lang["access_permissions_user_groups"] = 'Benutzergruppen'; -$_lang["access_permissions_user_message"] = 'Hier können Sie auswählen welcher Benutzergruppe dieser Benutzer zugeordnet ist:'; -$_lang["access_permissions_users_in_group"] = 'Benutzer in Gruppe:'; -$_lang["access_permissions_users_tab"] = 'Hier sehen Sie die angelegten Benutzergruppen. Sie können auch neue Gruppen anlegen, Gruppen umbenennen, Gruppen löschen und die Zugehörigkeit der Benutzer zu Gruppen sehen. Um ein Benutzer zu einer Gruppe hinzuzufügen oder zu entfernen, bearbeiten Sie direkt den entsprechenden Benutzer. Administratoren (Benutzer mit der Rollen ID 1) haben immer Zugriff auf alle Ressourcen und müssen keiner speziellen Gruppen angehören.'; -$_lang["account_email"] = 'E-Mail-Adresse'; -$_lang["actioncomplete"] = 'Aktion war erfolgreich!
          Bitte warten Sie, bis MODX sich neu aufgebaut hat.'; -$_lang["activity_message"] = 'Diese Liste zeigt alle Ressourcen, die zuletzt bearbeitet oder erstellt wurden:'; -$_lang["activity_title"] = 'Kürzlich bearbeitete oder erstellte Ressourcen'; -$_lang["add"] = 'Hinzufügen'; -$_lang["add_chunk"] = 'Chunk hinzufügen'; -$_lang["add_doc"] = 'Ressource hinzufügen'; -$_lang["add_folder"] = 'Ordner hinzufügen'; -$_lang["add_plugin"] = 'Plugin hinzufügen'; -$_lang["add_resource"] = 'Ressource hinzufügen'; -$_lang["add_snippet"] = 'Snippet hinzufügen'; -$_lang["add_tag"] = 'Tag hinzufügen'; -$_lang["add_template"] = 'Template hinzufügen'; -$_lang["add_tv"] = 'Template-Variable hinzufügen'; -$_lang["add_weblink"] = 'Web-Link hinzufügen'; -$_lang["administrator_role_message"] = 'Diese Rolle kann nicht gelöscht oder bearbeitet werden.'; -$_lang["administrators"] = 'Administratoren'; -$_lang["after_saving"] = 'Nach dem Speichern'; -$_lang["alert_delete_self"] = 'Sie können sich nicht selber löschen!'; -$_lang["alias"] = 'Alias'; -$_lang["all_doc_groups"] = 'Alle Ressourcen-Gruppen (öffentlich)'; -$_lang["all_events"] = 'Alle Ereignisse'; -$_lang["all_usr_groups"] = 'Alle Benutzergruppen (öffentlich)'; -$_lang["allow_mgr_access"] = 'Manager-Zugriff'; -$_lang["allow_mgr_access_message"] = 'Wählen Sie diese Option, um den Zugriff auf den Manager aktivieren oder zu deaktivieren. Hinweis: Wenn diese Option gesetzt ist, wird der Benutzer zur Manager-Anmeldung oder auf die Startseite weitergeleitet.'; -$_lang["already_deleted"] = 'wurde schon gelöscht.'; -$_lang["attachment"] = 'Anhang'; -$_lang["author_infos"] = 'Author information'; -$_lang["automatic_alias_message"] = 'Wählen Sie „ja“, damit das System beim Sichern automatisch einen eindeutigen Alias basierend auf den Seitentitel der Ressource vergibt.'; -$_lang["automatic_alias_title"] = 'Automatisch erstellter Alias'; -$_lang["backup"] = 'Backup'; -$_lang["bk_manager"] = 'Backup'; -$_lang["block_message"] = 'Dieser Benutzer wird gesperrt sein, nachdem Sie die Benutzerdaten gespeichert haben!'; -$_lang["blocked_minutes_message"] = 'Hier können Sie einstellen, wie viele Minuten ein Benutzer gesperrt wird, wenn er die maximale Anzahl von fehlgeschlagenen Anmeldeversuchen erreicht hat. Bitte geben Sie nur Zahlen ein, keine Kommas oder Leerstellen.'; -$_lang["blocked_minutes_title"] = 'Sperrzeit in Minuten'; -$_lang["cache_files_deleted"] = 'Die folgenden Dateien wurden gelöscht:'; -$_lang["cancel"] = 'Abbrechen'; -$_lang["captcha_code"] = 'Sicherheits-Code'; -$_lang["captcha_message"] = 'Aktivieren Sie Captcha-Validierung, um die Sicherheit zu erhöhen.'; -$_lang["captcha_title"] = 'Captcha aktivieren'; -$_lang["captcha_words_default"] = 'MODX,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; -$_lang["captcha_words_message"] = 'Wenn Captcha aktiviert ist können Sie eine Liste von Captcha-Wörter eingeben. Trennen Sie die Wörter mit Kommas. Das Eingabe Feld ist mit 255 Zeichen beschränkt.'; -$_lang["captcha_words_title"] = 'Captcha-Wörter'; -$_lang["category_heading"] = 'Kategorie'; -$_lang["category_msg"] = 'Hier können Sie alle Elemente nach Kategorien sortiert bearbeiten.'; -$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; -$_lang["cfg_base_url"] = 'MODX_BASE_URL'; -$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; -$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; -$_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Name ändern'; -$_lang["change_password"] = 'Passwort ändern'; -$_lang["change_password_confirm"] = 'Passwort bestätigen'; -$_lang["change_password_message"] = 'Bitte geben Sie Ihr neues Passwort ein und bestätigen Sie dieses durch erneute Eingabe. Das Passwort muss zwischen 6 und 15 Zeichen lang sein.'; -$_lang["change_password_new"] = 'Neues Passwort'; -$_lang["charset_message"] = 'Wählen Sie die Zeichenkodierung für die [(modx_charset)]-Systemvariable. Diese Einstellung beeinflusst nicht den Manager.'; -$_lang["charset_title"] = 'Zeichenkodierung'; -$_lang["chunk"] = 'Chunk'; -$_lang["chunk_code"] = 'Chunk-Code (HTML)'; -$_lang["chunk_multiple_id"] = 'Fehler: Mehrere Chunks benutzen die selbe ID.'; -$_lang["chunk_no_exist"] = 'Chunk existiert nicht.'; -$_lang["cleaningup"] = 'Aufräumen'; -$_lang["clean_uploaded_filename"] = 'Benutzen Sie Transliteration in Datei Uploads'; -$_lang["clean_uploaded_filename_message"] = 'Benutzen Sie die Standard- oder Aliaseinstellungen um Umlaute und Sonderzeichen aus dem Dateinamen zu entfernen. Entfernen Sie nicht die Dateiendung!'; -$_lang["clear_log"] = 'Protokoll löschen'; -$_lang["click_to_context"] = 'Klicken Sie hier, für das Kontextmenü'; -$_lang["click_to_edit_title"] = 'Klicken Sie hier, um den Eintrag zu bearbeiten'; -$_lang["click_to_view_details"] = 'Klicken Sie hier, um die Details anzuzeigen'; -$_lang["close"] = 'Schließen'; -$_lang["code"] = 'Code'; -$_lang["collapse_tree"] = 'Baum einklappen'; -$_lang["comment"] = 'Kommentar'; -$_lang["configcheck_admin"] = 'Bitte kontaktieren Sie einen Systemadministrator und informieren Sie Ihn über diese Nachricht!'; -$_lang["configcheck_cache"] = 'Das Cache-Verzeichnis ist nicht beschreibbar'; -$_lang["configcheck_cache_msg"] = 'MODX kann das Cache-Verzeichnis nicht beschreiben. MODX wird wie erwartet funktionieren, das Caching ist jedoch deaktiviert. Um das Problem zu beheben, machen Sie das Verzeichnis „cache“ im Verzeichnis „assets“ beschreibbar.'; -$_lang["configcheck_configinc"] = 'Die Konfigurationsdatei ist weiterhin beschreibbar'; -$_lang["configcheck_configinc_msg"] = 'Böswillige Menschen könnten möglicherweise verheerende Schäden an Ihrer Website und allem was damit verbunden ist anrichten. Wichtig: Bitte ändern Sie die Zugriffsrechte der Konfigurationsdatei (/[+MGR_DIR+]/includes/config.inc.php) auf nur-lesen!'; -$_lang["configcheck_default_msg"] = 'Eine nicht weiter spezifizierte Warnung ist aufgetreten.'; -$_lang["configcheck_errorpage_unavailable"] = 'Die Fehlerseite Ihres Webauftrittes ist nicht verfügbar.'; -$_lang["configcheck_errorpage_unavailable_msg"] = 'Ihre Fehlerseite ist für normale Besucher nicht abrufbar oder existiert nicht. Dies kann zu einer Endlosschleife und vielen Fehlermeldungen in Ihren Webserver-Statistiken führen. Stellen Sie sicher, dass der Seite keine Benutzergruppen zugeordnet sind.'; -$_lang["configcheck_errorpage_unpublished"] = 'Die Fehlerseite Ihres Webauftrittes wurde nicht veröffentlicht oder noch nicht erstellt.'; -$_lang["configcheck_errorpage_unpublished_msg"] = 'Ihre Fehlerseite ist der Allgemeinheit nicht zugänglich. Veröffentlichen Sie die Seite oder stellen Sie sicher, dass in der Konfiguration eine vorhandene Seite aus dem Ressourcen-Baum ausgewählt ist.'; -$_lang["configcheck_hide_warning"] = 'Nicht mehr anzeigen.'; -$_lang["configcheck_images"] = 'Das Bilderverzeichnis ist nicht beschreibbar'; -$_lang["configcheck_images_msg"] = 'Das Verzeichnis „images“ ist nicht beschreibbar. Die Funktionen des Bilder-Managers im Editor werden nicht funktionieren!'; -$_lang["configcheck_installer"] = 'Installationsverzeichnis ist noch vorhanden'; -$_lang["configcheck_installer_msg"] = 'Das Installationsverzeichnis enthält die Installationsroutinen von MODX. Um zu verhindern, dass eine nicht berechtigte Person die Installationsroutine möglicherweise nochmals starten kann, sollten Sie den Ordner /install jetzt vom Server löschen.'; -$_lang["configcheck_lang_difference"] = 'Die Sprachdatei enthält eine falsche Anzahl an Einträgen'; -$_lang["configcheck_lang_difference_msg"] = 'Die zur Zeit ausgewählte Sprache (Deutsch) enthält nicht die gleiche Anzahl an Einträgen wie die Standardsprache (Englisch). Dies stellt kein Problem für die Arbeit mit MODX dar, bedeutet jedoch, dass Sie die Sprachdatei aktualisieren sollten.'; -$_lang["configcheck_notok"] = 'Eine oder mehrere Optionen der Konfiguration sind nicht in Ordnung: '; -$_lang["configcheck_ok"] = 'Überprüfung bestanden – keine Warnungen vorhanden.'; -$_lang["configcheck_php_gdzip"] = 'PHP-Erweiterungen GD und/oder ZIP wurden nicht gefunden'; -$_lang["configcheck_php_gdzip_msg"] = 'MODX benötigt die GD- und ZIP-PHP-Erweiterungen. MODX funktioniert zwar auch ohne diese Erweiterungen, aber Sie werden nicht das volle Potential des eingebauten Datei-Managers, Image-Editors oder Captchas für die Anmeldung ausschöpfen können.'; -$_lang["configcheck_register_globals"] = 'register_globals ist in Ihrer php.ini Konfigurationsdatei auf ON gesetzt'; -$_lang["configcheck_register_globals_msg"] = 'Diese Konfiguration macht Ihre Website wesentlich anfälliger für Cross-Site-Scripting-Attacken (XSS). Sie sollten Ihren Web-Hosting-Provider kontaktieren, um herauszufinden wie Sie diese Einstellung ändern können.'; -$_lang["configcheck_title"] = 'Konfigurationsprüfung'; -$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin gefunden'; -$_lang["configcheck_templateswitcher_present_delete"] = 'TemplateSwitcher entfernen'; -$_lang["configcheck_templateswitcher_present_disable"] = 'TemplateSwitcher deaktivieren'; -$_lang["configcheck_templateswitcher_present_msg"] = 'Das Plugin TemplateSwitcher wurde gefunden. Es kann Cache und Performanceprobleme hervorrufen und sollte nur benutzt werden, wenn die Funktionalität von der Webseite benötigt wird.'; -$_lang["configcheck_unauthorizedpage_unavailable"] = 'Die Seite für unautorisierte Zugriffe wurde nicht veröffentlicht oder existiert nicht.'; -$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Die Seite für unautorisierte Zugriffe ist für normale Besucher nicht abrufbar oder existiert nicht. Dies kann zu einer Endlosschleife und vielen Fehlermeldungen in Ihren Webserver-Statistiken führen. Stellen Sie sicher, dass der Seite keine Benutzergruppen zugeordnet sind.'; -$_lang["configcheck_unauthorizedpage_unpublished"] = 'Die Seite für unautorisierte Zugriffe aus den Einstellungen Ihrer Konfiguration ist nicht veröffentlicht.'; -$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Die Seite unautorisierte Zugriffe ist der Allgemeinheit nicht zugänglich. Veröffentlichen Sie die Seite oder stellen Sie sicher, dass in der Konfiguration eine vorhandene Seite aus dem Ressourcen-Baum ausgewählt ist.'; -$_lang["configcheck_validate_referer"] = 'Sicherheitshinweis: HTTP Header Validierung'; -$_lang["configcheck_validate_referer_msg"] = 'Die Konfigurationseinstellung HTTP_REFERER Header validieren? ist AUSGESCHALTET. Wir empfehlen, diese anzuschalten. Zu den Einstellungen'; -$_lang["configcheck_warning"] = 'Konfigurationswarnung:'; -$_lang["configcheck_what"] = 'Was bedeutet das?'; -$_lang["confirm_block"] = 'Sind Sie sicher, dass Sie diesen Benutzer sperren wollen?'; -$_lang["confirm_delete_eventlog"] = 'Wollen Sie das Ereignisprotokoll wirklich löschen?'; -$_lang["confirm_delete_file"] = 'Sind Sie sicher, dass Sie diese Datei löschen wollen?\n\nDas könnte könnte dazu führen, dass Ihre Seite nicht mehr richtig funktioniert. Löschen Sie diese Datei nur, wenn Sie genau wissen was sie tun!'; -$_lang["confirm_delete_group"] = 'Sind Sie sicher, dass Sie diese Gruppe löschen möchten?'; -$_lang["confirm_delete_htmlsnippet"] = 'Sind Sie sicher, dass Sie diesen Chunk löschen möchten?'; -$_lang["confirm_delete_keywords"] = 'Sind Sie sicher dass Sie diese Schlüsselwörter löschen wollen?'; -$_lang["confirm_delete_module"] = 'Sind Sie sicher, dass Sie dieses Modul löschen möchten?'; -$_lang["confirm_delete_plugin"] = 'Sind Sie sicher, dass Sie dieses Plugin löschen möchten?'; -$_lang["confirm_delete_record"] = 'Sind Sie sicher, dass Sie die ausgewählten Einträge löschen möchten?'; -$_lang["confirm_delete_resource"] = 'Sind Sie sicher, das Sie diese Ressource löschen möchten?\nAlle Unter-Ressourcen werden ebenfalls gelöscht.'; -$_lang["confirm_delete_role"] = 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?'; -$_lang["confirm_delete_snippet"] = 'Sind Sie sicher, das Sie dieses Snippet löschen möchten?'; -$_lang["confirm_delete_tags"] = 'Sind Sie sicher, dass Sie die ausgewählten Meta-Tags löschen möchten?'; -$_lang["confirm_delete_template"] = 'Sind Sie sicher, dass Sie dieses Template löschen möchten?'; -$_lang["confirm_delete_tmplvars"] = 'Sind Sie sicher, dass Sie diese Template-Variable inklusive der gespeicherten Inhalte löschen möchten?'; -$_lang["confirm_delete_user"] = 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?'; -$_lang["confirm_duplicate_record"] = 'Sind Sie sicher, dass Sie diesen Eintrag duplizieren möchten?'; -$_lang["confirm_empty_trash"] = 'Beim leeren des Mülleimers werden alle gelöschten Ressourcen dauerhaft entfernt.\n\nFortfahren?'; -$_lang["confirm_load_depends"] = 'Sind Sie sicher, dass Sie das „Abhängigkeiten-verwalten“-Fenster öffnen wollen ohne Ihre Anpassungen zu sichern?'; -$_lang["confirm_name_change"] = 'Die Änderung des Benutzernamens kann möglicherweise Auswirkungen auf die Funktion von Anwendungen Dritter haben, die Daten von MODX verwenden.\n\nSind Sie sicher, dass Sie den Benutzernamen ändern wollen?'; -$_lang["confirm_publish"] = '\n\nDie Veröffentlichung der Ressource löscht alle Veröffentlichungsdaten die eventuell gesetzt wurden. Wenn Sie die Daten beibehalten möchten, wählen Sie stattdessen „Ressource bearbeiten“.\n\nFortfahren?'; -$_lang["confirm_remove_locks"] = 'Manchmal schließen Benutzer ihren Browser während sie Ressourcen oder Elemente bearbeiten. Dabei bleiben diese dann in einem gesperrten Zustand. Wenn Sie OK klicken werden alle Sperren entfernt.\n\nFortfahren?'; -$_lang["confirm_reset_sort_order"] = 'Sind Sie sicher, dass Sie den Sortier-Index aller aufgelisteten Elemente auf 0 zurücksetzen möchten?'; -$_lang["confirm_resource_duplicate"] = 'Sind Sie sicher, dass Sie diese Ressource duplizieren möchten?\nAlle enthaltenen Unter-Ressourcen werden ebenfalls dupliziert.'; -$_lang["confirm_setting_language_change"] = 'Sie haben den Standardwert verändert, Änderungen werden nicht gesichert. Fortfahren?'; -$_lang["confirm_unblock"] = 'Sind Sie sicher, dass Sie diesen Benutzer freischalten möchten?'; -$_lang["confirm_undelete"] = '\n\nAlle gelöschten Ressourcen werden wieder hergestellt. Ressourcen die vorher aus dem Papierkorb entfernt wurden, werden nicht wiederhergestellt.'; -$_lang["confirm_unpublish"] = '\n\nDas Zurückziehen der Ressource entfernt alle Veröffentlichungsdaten. Wenn Sie die Daten beibehalten möchten, wählen Sie „Ressource bearbeiten“.\n\nFortfahren?'; -$_lang["confirm_unzip_file"] = 'Sind Sie sicher, dass Sie diese Datei entpacken möchten?\n\nBestehende Dateien werden überschrieben.'; -$_lang["could_not_find_user"] = 'Benutzer konnte nicht gefunden werden.'; -$_lang["create_folder_here"] = 'Container hier erstellen'; -$_lang["create_resource_here"] = 'Ressource hier erstellen'; -$_lang["create_resource_title"] = 'Ressource erstellen'; -$_lang["create_weblink_here"] = 'Web-Link hier erstellen'; -$_lang["createdon"] = 'Erstellungsdatum'; -$_lang["create_new"] = 'Neu anlegen'; -$_lang["credits"] = 'Danksagungen'; -$_lang["credits_shouts_msg"] = '

          MODX wird auf modx.com weiterentwickelt und gepflegt.

          '; -$_lang["custom_contenttype_message"] = 'Hier können Sie eigene Inhalts-Typen hinzufügen. Geben Sie hierzu den Typ ein und klicken dann auf hinzufügen.'; -$_lang["custom_contenttype_title"] = 'Eigene Inhaltstypen'; -$_lang["database_charset"] = 'Datenbank-Zeichensatz'; -$_lang["database_collation"] = 'Datenbank-Kollations-Zeichensatz'; -$_lang["database_name"] = 'Datenbank-Name'; -$_lang["database_overhead"] = 'Hinweis: Der Overhead ist von MySQL reservierter Speicher, der nicht verwendet wird. Sie können diesen Speicher freigeben, indem Sie auf die Overhead-Angabe der jeweiligen Tabelle klicken.'; -$_lang["database_server"] = 'Datenbank-Server'; -$_lang["database_table_clickbackup"] = 'Backup erstellen und die ausgewählten Tabellen herunterladen'; -$_lang["database_table_clickhere"] = 'Hier klicken'; -$_lang["database_table_datasize"] = 'Datenmenge'; -$_lang["database_table_droptablestatements"] = 'Erzeuge DROP TABLE Anweisungen.'; -$_lang["database_table_effectivesize"] = 'Effektive Größe'; -$_lang["database_table_indexsize"] = 'Index-Größe'; -$_lang["database_table_overhead"] = 'Overhead'; -$_lang["database_table_records"] = 'Datensätze'; -$_lang["database_table_tablename"] = 'Tabellenname'; -$_lang["database_table_totals"] = 'Summen'; -$_lang["database_table_totalsize"] = 'Gesamtgröße'; -$_lang["database_tables"] = 'Datenbank-Tabellen'; -$_lang["database_version"] = 'Datenbank-Version'; -$_lang["date"] = 'Datum'; -$_lang["datechanged"] = 'Änderungsdatum'; -$_lang["datepicker_offset"] = 'Zeitspanne Datumswähler'; -$_lang["datepicker_offset_message"] = 'Die Anzahl der vergangenen Jahre die der Datumswähler anzeigen soll.'; -$_lang["datetime_format"] = 'Datumsformat'; -$_lang["datetime_format_message"] = 'Das Format für Datumsangaben im Manager.'; -$_lang["default"] = 'Default:'; -$_lang["defaultcache_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als cachebar anzulegen.'; -$_lang["defaultcache_title"] = 'Voreinstellung Cache'; -$_lang["defaultmenuindex_message"] = 'Wählen Sie „Ja“, um den Menüindex bei neuen Ressourcen automatisch zu erhöhen.'; -$_lang["defaultmenuindex_title"] = 'Voreinstellung Menüindex-Inkrementierung'; -$_lang["defaultpublish_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als veröffentlicht anzulegen.'; -$_lang["defaultpublish_title"] = 'Voreinstellung Veröffentlichung'; -$_lang["defaultsearch_message"] = 'Wählen Sie „Ja“, um alle neuen Ressourcen voreingestellt als durchsuchbar anzulegen.'; -$_lang["defaultsearch_title"] = 'Voreinstellung Durchsuchbar'; -$_lang["defaulttemplate_message"] = 'Wählen Sie das Standard-Template das Sie für neue Ressourcen verwenden möchten. Sie können auch andere Templates im Ressourcen-Editor auswählen, diese Einstellung betrefft nur die Standardeinstellung.'; -$_lang["defaulttemplate_title"] = 'Standard-Template'; -$_lang["defaulttemplate_logic_title"] = 'automatische Template Zuweisung'; -$_lang["defaulttemplate_logic_general_message"] = 'neue Ressourcen erben die folgenden Templates. Wird keins gefunden, wird das nächst Höhere vererbt:'; -$_lang["defaulttemplate_logic_system_message"] = 'System: das Standard System-Template.'; -$_lang["defaulttemplate_logic_parent_message"] = 'Eltern: das gleiche Template wie der Eltern-Container.'; -$_lang["defaulttemplate_logic_sibling_message"] = 'Nachbar: das gleiche Template wie andere Ressourcen im selben Container.'; -$_lang["delete"] = 'Löschen'; -$_lang["delete_resource"] = 'Ressource Löschen'; -$_lang["delete_tags"] = 'Tag löschen'; -$_lang["deleting_file"] = 'Löschen der Datei „%s“: '; -$_lang["description"] = 'Beschreibung'; -$_lang["deselect_keywords"] = 'Keyword-Auswahl aufheben'; -$_lang["deselect_metatags"] = 'Metatag-Auswahl aufheben'; -$_lang["disabled"] = 'Deaktiviert'; -$_lang["doc_data_title"] = 'Daten der Ressource anzeigen'; -$_lang["documentation"] = 'Dokumentation'; -$_lang["duplicate"] = 'Duplizieren'; -$_lang["duplicate_alias_found"] = 'Die Ressource „%s“ verwendet bereits den Alias „%s“. Bitte geben Sie einen eindeutigen Alias ein.'; -$_lang["duplicate_alias_message"] = 'Wählen Sie „ja“, um zweideutige Alias-Namen zu erlauben. Hinweis: Diese Option sollte zusammen mit der Option „Benutzerfreundliche URLs“ verwendet werden, um etwaige Probleme bei der Ressourcen-Referenzierung zu vermeiden.'; -$_lang["duplicate_alias_title"] = 'Doppelte Aliase zulassen'; -$_lang["duplicate_name_found_general"] = 'Es existiert bereits ein %s mit dem Namen „%s“. Bitte geben Sie einen eindeutigen Namen ein.'; -$_lang["duplicate_name_found_module"] = 'Es existiert bereits ein Modul mit dem Namen „%s“. Bitte geben Sie einen eindeutigen Namen ein.'; -$_lang["duplicated_el_suffix"] = 'Duplicate'; -$_lang["edit"] = 'Bearbeiten'; -$_lang["edit_resource"] = 'Ressource Bearbeiten'; -$_lang["edit_resource_title"] = 'Ressource erstellen/bearbeiten'; -$_lang["edit_settings"] = 'Konfiguration'; -$_lang["editedon"] = 'Änderungsdatum'; -$_lang["editing_file"] = 'zu ändernde Datei: '; -$_lang["editor_css_path_message"] = 'Geben Sie hier den Pfad zur CSS-Datei an, die Sie im Editor verwenden möchten. Falls Sie keine CSS-Datei verwenden möchten, lassen Sie das Feld leer.'; -$_lang["editor_css_path_title"] = 'Pfad zur CSS-Datei'; -$_lang["element"] = 'Element'; -$_lang["element_categories"] = 'Alle Elemente'; -$_lang["element_management"] = 'Elemente-Verwaltung'; -$_lang["element_name"] = 'Element-Namen'; -$_lang["element_selector_msg"] = 'Wählen Sie die entsprechenden Elemente aus und klicken anschließend auf „einfügen“.'; -$_lang["element_selector_title"] = 'Elemente-Auswahl'; -$_lang["elements"] = 'Elemente'; -$_lang["email"] = 'E-Mail'; -$_lang["email_sent"] = 'E-Mail erfolgreich gesendet.'; -$_lang["emailsender_message"] = 'Dies ist die Emailadresse des Administrators, und wird zum Beispiel als Senderadresse für Formulare oder Empfänger für System-Benachrichtigungen benutzt.'; -$_lang["emailsender_title"] = 'E-Mail-Adresse'; -$_lang["emailsubject_default"] = 'Ihre Anmeldedaten'; -$_lang["emailsubject_message"] = 'Hier können Sie den Inhalt des Betreffs eingeben.'; -$_lang["emailsubject_title"] = 'E-Mail-Betreff'; -$_lang["empty_folder"] = 'Dieser Container ist leer'; -$_lang["empty_recycle_bin"] = 'Papierkorb leeren'; -$_lang["empty_recycle_bin_empty"] = 'Es sind keine gelöschten Ressourcen zum Entfernen vorhanden.'; -$_lang["enable_resource"] = 'Element-Datei aktivieren.'; -$_lang["enable_sharedparams"] = 'Gemeinsame Parameter aktivieren'; -$_lang["enable_sharedparams_msg"] = 'Hinweis: Diese eindeutige Identifikationsnummer (GUID) wird dazu benutzt, um das Modul eindeutig zu identifizieren und entsprechende Verknüpfungen zwischen Modulen und Plugins, Snippets und gemeinsamen Parametern zu gewährleisten. '; -$_lang["enabled"] = 'Aktiviert'; -$_lang["error"] = 'Fehler'; -$_lang["error_sending_email"] = 'E-Mail konnte nicht gesendet werden'; -$_lang["errorpage_message"] = 'Geben Sie die ID der Ressource ein, welche aufgerufen wird, wenn eine Seite angefordert wird die nicht vorhanden ist. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; -$_lang["errorpage_title"] = 'Fehlerseite'; -$_lang["event_id"] = 'Ereignis-ID'; -$_lang["eventlog"] = 'Systemereignisprotokoll'; -$_lang["eventlog_msg"] = 'Informations-, Warn- und Fehlermeldungen des MODX-Managers werden im Systemereignisprotokoll gespeichert. Unter „Quelle“ ist das jeweils verursachende Modul angegeben.'; -$_lang["eventlog_viewer"] = 'Systemereignisse'; -$_lang["everybody"] = 'Jeder'; -$_lang["existing_category"] = 'Bestehende Kategorie'; -$_lang["expand_tree"] = 'Baum aufklappen'; -$_lang["export_site"] = 'Seite exportieren'; -$_lang["export_site_cacheable"] = 'Inklusive nicht gecachter Dateien:'; -$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; -$_lang["export_site_failed"] = 'Fehlgeschlagen!'; -$_lang["export_site_failed_no_open"] = 'Datei kann nicht geöffnet werden: '; -$_lang["export_site_failed_no_retrieve"] = 'Die Ressource kann nicht aufgerufen werden.'; -$_lang["export_site_failed_no_write"] = 'Datei kann nicht geschrieben werden.'; -$_lang["export_site_html"] = 'Seite nach HTML exportieren'; -$_lang["export_site_maxtime"] = 'Maximale Export-Zeit:'; -$_lang["export_site_maxtime_message"] = 'Hier können Sie festlegen wie lange MODX brauchen darf, um die Site zu exportieren (überschreibt die PHP-Voreinstellungen). 0 für unbegrenzt. Achtung: 0 ist eine sehr hohe Einstellung und kann die Performance Ihres Servers beeinflussen.'; -$_lang["export_site_message"] = '

          Diese Funktion exportiert die gesamte Seite in HTML-Dateien. Allerdings verlieren Sie viel von der gesamten MODX-Funktionalität:

          • Seitenzugriffe auf der exportierten Site werden nicht aufgezeichnet
          • Interaktive Snippets arbeiten nicht in der exportierten Site
          • Nur reguläre Ressourcen werden exportiert – Links werden nicht exportiert.
          • Der Exportprozess könnte abbrechen wenn Snippets enthalten sind die eine Header-Weiterleitung vornehmen
          • Abhängig davon wie Sie Ihre Ressourcen, Style Sheets und Bilder verknüpft haben, könnte das Design zerstört werden. Um dieses Problem zu lösen können Sie die exportierten Dateien in das gleiche Verzeichnis kopieren, in dem die Datei index.php liegt.

          Bitte füllen Sie das Formular aus und klicken auf „Export“ um den Export zu starten. Die Dateien werden am angegebenen Ort gespeichert. Es werden wenn möglich die Alias-Namen als Dateinamen verwendet. Während des Exports der Seite ist es ratsam die Einstellung „Benutzerfreundliche URLs“ auf „Ja“ zu setzen. Je nach Größe der Seite wird der Export eine Weile dauern.

          Wichtig: Bestehende Dateien werden bei Namensgleichheit überschrieben!

          '; -$_lang["export_site_numberdocs"] = '

          %s Ressourcen für den Export gefunden.

          '; -$_lang["export_site_prefix"] = 'Datei-Präfix:'; -$_lang["export_site_start"] = 'Export starten'; -$_lang["export_site_success"] = 'Erfolgreich!'; -$_lang["export_site_success_skip_dir"] = 'Dieses Verzeichnis überspringen.'; -$_lang["export_site_success_skip_doc"] = 'Diese Ressource überspringen.'; -$_lang["export_site_suffix"] = 'Datei-Suffix:'; -$_lang["export_site_target_unwritable"] = 'Datei kann nicht gespeichert werden – Überprüfen Sie den Schreibzugriff im Zielverzeichnis und versuchen Sie es erneut!'; -$_lang["export_site_time"] = 'Export beendet. Dauer für den Export %s Sekunden'; -$_lang["failed_login_message"] = 'Hier können Sie die Anzahl fehlgeschlagener Anmeldeversuche einstellen, die erlaubt sind bevor ein Benutzer gesperrt wird.'; -$_lang["failed_login_title"] = 'Fehlgeschlagene Anmeldeversuche'; -$_lang["fe_editor_lang_message"] = 'Wählen Sie die Sprache, die für den Frontend-Editor verwendet werden soll.'; -$_lang["fe_editor_lang_title"] = 'Sprache des Frontend-Editors'; -$_lang["file_delete_file"] = 'Datei löschen'; -$_lang["file_delete_folder"] = 'Verzeichnis löschen'; -$_lang["file_deleted"] = 'Erfolgreich!'; -$_lang["file_download_file"] = 'Datei-Download'; -$_lang["file_download_unzip"] = 'Datei entpacken'; -$_lang["file_folder_chmod_error"] = 'Die Rechte können nicht verändert werden. Sie müssen die Rechte außerhalb von MODX ändern.'; -$_lang["file_folder_created"] = 'Verzeichnis erfolgreich erstellt!'; -$_lang["file_folder_deleted"] = 'Verzeichnis erfolgreich gelöscht!'; -$_lang["file_folder_not_created"] = 'Verzeichniserstellung nicht möglich'; -$_lang["file_folder_not_deleted"] = 'Verzeichnis kann nicht gelöscht werden. Stellen Sie sicher, dass das Verzeichnis leer ist.'; -$_lang["file_not_deleted"] = 'Nicht erfolgreich!'; -$_lang["file_not_saved"] = 'Datei kann nicht gespeichert werden. Überprüfen Sie den Schreibzugriff im Zielverzeichnis!'; -$_lang["file_saved"] = 'Datei erfolgreich aktualisiert!'; -$_lang["file_unzip"] = 'Unzip erfolgreich!'; -$_lang["file_unzip_fail"] = 'Unzip fehlgeschlagen!'; -$_lang["filemanager_path_message"] = 'Unter Umständen erkennt Ihr Webserver (z.B. IIS) den Pfad nicht immer korrekt, überprüfen Sie deshalb diese Einstellung.'; -$_lang["filemanager_path_title"] = 'Datei-Manager-Pfad'; -$_lang["files_access_denied"] = 'Zugriff verweigert!'; -$_lang["files_data"] = 'Größe'; -$_lang["files_dir_listing"] = 'Verzeichnisübersicht für:'; -$_lang["files_directories"] = 'Verzeichnisse'; -$_lang["files_dirwritable"] = 'Verzeichnis beschreibbar?'; -$_lang["files_editfile"] = 'Datei bearbeiten'; -$_lang["files_file_type"] = 'Dateityp: '; -$_lang["files_filename"] = 'Dateiname'; -$_lang["files_fileoptions"] = 'Optionen'; -$_lang["files_files"] = 'Dateien'; -$_lang["files_filesize"] = 'Dateigröße'; -$_lang["files_filetype_notok"] = 'Das Hochladen einer Datei von diesem Typ ist nicht erlaubt!'; -$_lang["files_management"] = 'Dateien verwalten'; -$_lang["files_management_no_permission"] = 'Sie haben nicht genug Rechte um diese Dateien einzusehen oder zu bearbeiten. Bitten Sie den Administrator Ihnen Zugriff auf %s zu gewähren.'; -$_lang["files_modified"] = 'Datum'; -$_lang["files_top_level"] = 'Zum Hauptverzeichnis'; -$_lang["files_up_level"] = 'Ein Verzeichnis nach oben wechseln'; -$_lang["files_upload_copyfailed"] = 'Upload fehlgeschlagen. Das Kopieren der Datei in den Zielordner ist nicht möglich!'; -$_lang["files_upload_error"] = 'Fehler'; -$_lang["files_upload_error0"] = 'Ein Problem beim Upload ist aufgetreten.'; -$_lang["files_upload_error1"] = 'Die Datei ist für einen Upload zu groß.'; -$_lang["files_upload_error2"] = 'Die Datei ist für einen Upload zu groß.'; -$_lang["files_upload_error3"] = 'Die Datei wurde nur teilweise übertragen.'; -$_lang["files_upload_error4"] = 'Sie müssen eine Datei für den Upload auswählen.'; -$_lang["files_upload_error5"] = 'Beim Upload ist ein Problem aufgetreten.'; -$_lang["files_upload_inhibited_msg"] = 'Datei-Upload fehlgeschlagen. Stellen Sie sicher, dass der Upload unterstützt wird und PHP in dieses Verzeichnis schreiben darf.'; -$_lang["files_upload_ok"] = 'Upload erfolgreich!'; -$_lang["files_upload_permissions_error"] = 'Mögliche Probleme mit den Zugriffsrechten: das Upload-Verzeichnis muss auf dem Web-Server beschreibbar sein.'; -$_lang["files_uploadfile"] = 'Datei hochladen'; -$_lang["files_uploadfile_msg"] = 'Datei zum Hochladen wählen:'; -$_lang["files_uploading"] = 'Upload %s in Verzeichnis %s/'; -$_lang["files_viewfile"] = 'Datei anzeigen'; -$_lang["folder"] = 'Verzeichnis'; -$_lang["forgot_password_email_fine_print"] = '* Die oben angegebene URL verliert nach Änderung Ihres Kennworts oder spätestens nach einem Tag ihre Gültigkeit.'; -$_lang["forgot_password_email_instructions"] = 'Anschließend können Sie Ihr Kennwort im Benutzermenü der Zugangsverwaltung ändern.'; -$_lang["forgot_password_email_intro"] = 'Es wurde ein neues Kennwort für Ihren Zugang angefordert.'; -$_lang["forgot_password_email_link"] = 'Klicken Sie hier, um ein neues Kennwort zu erstellen.'; -$_lang["forgot_your_password"] = 'Kennwort vergessen?'; -$_lang["friday"] = 'Freitag'; -$_lang["friendly_alias_message"] = 'Wenn Sie benutzerfreundliche URLs verwenden, und die Ressource einen Alias-Eintrag hat, wird das Alias als benutzerfreundliche URL verwendet. Falls Sie keine benutzerfreundlichen URLs verwenden, generiert MODX den Link mit einer durchlaufenden Nummerierung.'; -$_lang["friendly_alias_title"] = 'Aliasnamen nutzen'; -$_lang["friendlyurls_message"] = 'Diese Option erlaubt Ihnen die Benutzung benutzerfreundlicher URLs auf Apache-Webservern mit aktiviertem mod_rewrite oder auf dem IIS-Webserver mit entsprechenden Modulen. Öffnen sie bei MODX enthaltene .htaccess-Datei im Root-Verzeichnis für mehr Informationen.'; -$_lang["friendlyurls_title"] = 'Benutzerfreundliche URLs nutzen'; -$_lang["friendlyurlsprefix_message"] = 'Hier können Sie ein Präfix für die benutzerfreundlichen URLs angeben. Wenn Sie z.B. „page“ als Präfix angeben, wird die URL /index.php?id=2 in /page2.html umgewandelt (vorausgesetzt das Suffix wurde auf .html gesetzt).'; -$_lang["friendlyurlsprefix_title"] = 'Präfix für benutzerfreundliche URLs'; -$_lang["friendlyurlsuffix_message"] = 'Hier können Sie ein Suffix angeben.'; -$_lang["friendlyurlsuffix_title"] = 'Suffix für benutzerfreundliche URLs'; -$_lang["functionnotimpl"] = 'Sorry!'; -$_lang["functionnotimpl_message"] = 'Diese Funktion ist noch nicht implementiert'; -$_lang["further_info"] = 'Weiterführende Informationen'; -$_lang["go"] = 'Los'; -$_lang["group_access_permissions"] = 'Benutzergruppenberechtigungen'; -$_lang["guid"] = 'Eindeutige Identifikationsnummer (GUID)'; -$_lang["help"] = 'Hilfe'; -$_lang["help_msg"] = 'Wenn Sie Hilfe bei der Nutzung von MODX benötigen, finden Sie Rat und Unterstützung in folgenden Foren:
          MODX-Forum Deutschland
          Internationales MODX-Forum
          Auch immer hilfreich: ein Blick in die Dokumentation.'; -$_lang["help_title"] = 'Hilfe'; -$_lang["hide_tree"] = 'Baum verbergern'; -$_lang["home"] = 'Start'; -$_lang["htmlsnippet_desc"] = 'Chunk-Beschreibung'; -$_lang["htmlsnippet_management_msg"] = 'Hier können Sie das zu bearbeitende Chunk auswählen'; -$_lang["htmlsnippet_msg"] = 'Hier können Sie Chunks hinzufügen oder bearbeiten. Achtung, Chunks bestehen aus reinem HTML-Code – PHP-Code wird nicht ausgeführt.'; -$_lang["htmlsnippet_name"] = 'Chunk-Name'; -$_lang["htmlsnippet_title"] = 'Chunk erstellen/bearbeiten '; -$_lang["icon"] = 'Symbol'; -$_lang["id"] = 'ID'; -$_lang["illegal_parent_child"] = 'Container-Zuweisung:\n\nDie Ressource ist dem gewählten Container zugehörig.'; -$_lang["illegal_parent_self"] = 'Container-Zuweisung:\n\nDie Ressource kann nicht sich selbst zugewiesen werden.'; -$_lang["images_management"] = 'Bilder verwalten'; -$_lang["import_files_found"] = '%s Ressourcen für den Import gefunden …

          '; -$_lang["import_params"] = 'Importieren von gemeinsamen Parametern'; -$_lang["import_params_msg"] = 'Sie können die Parameter und Einstellungen mittels obiger Auswahlliste importieren. Hinweis: Damit Module in dieser Liste erscheinen, muss das jeweilige Plugin/Snippet in der Abhängigkeitsliste des Moduls stehen und das Modul muss die Option „Gemeinsame Parameter“ aktiviert haben. '; -$_lang["import_parent_resource"] = 'Container:'; -$_lang["import_site"] = 'Seite importieren'; -$_lang["import_site_failed"] = 'Fehler!'; -$_lang["import_site_failed_db_error"] = 'Ein Datenbank-Fehler ist aufgetreten beim Versuch das Dokument zu kopieren: '; -$_lang["import_site_failed_no_open_dir"] = 'Das Verzeichnis konnte nicht geöffnet werden: '; -$_lang["import_site_failed_no_retrieve_file"] = 'Die Datei konnte nicht geöffnet werden: '; -$_lang["import_site_html"] = 'Website aus HTML-Dateien importieren'; -$_lang["import_site_importing_document"] = 'Importiere Datei %s '; -$_lang["import_site_maxtime"] = 'Maximale Importdauer:'; -$_lang["import_site_maxtime_message"] = 'Hier können Sie die Dauer (in Sekunden) angeben, die das System für einen Import maximal benötigen darf. Nach Ablauf dieser Zeit wird der Import abgebrochen. Von der Angabe von 0 Sekunden oder einen extrem hohen Zeitspanne wird dringend abgeraten, da dies zu Komplikationen mit Ihrem Webserver führen kann.'; -$_lang["import_site_message"] = '

          Mit dieser Importfunktion können Sie eine bestehende Website im HTML-Format in das MODX-System importieren. Die zu importierenden HTML-Dateien bzw. Verzeichnisse müssen unter „assets/import“ abgelegt werden.

          Nach dem ausfüllen des unten stehenden Formulars können Sie den Import starten. Die importierten Daten werden im ausgewählten Ort gesichert. Soweit möglich, werden Dateinamen als Ressourcen-Titel und der HTML-Titel als Seitentitel verwendet.

          '; -$_lang["import_site_skip"] = 'ausgelassen'; -$_lang["import_site_start"] = 'Import starten'; -$_lang["import_site_success"] = 'OK'; -$_lang["import_site_time"] = 'Import in %s Sekunden durchgeführt.'; -$_lang["inbox"] = 'Inbox'; -$_lang["info"] = 'Info'; -$_lang["information"] = 'Information'; -$_lang["inline"] = 'Browser-Fenster'; -$_lang["insert"] = 'Einfügen'; -$_lang["maxImageWidth"] = 'Maximale Bildbreite'; -$_lang["maxImageHeight"] = 'Maximale Bildhöhe'; -$_lang["thumbWidth"] = 'Maximale Vorschaubild-Breite'; -$_lang["thumbHeight"] = 'Maximale Vorschaubild-Höhe'; -$_lang["thumbsDir"] = 'Thumbnails directory location'; -$_lang["jpegQuality"] = 'JPEG Komprimierung'; -$_lang["denyZipDownload"] = 'Download von ZIP-Dateien deaktivieren'; -$_lang["denyExtensionRename"] = 'Umbenennen von Dateierweiterungen deaktivieren'; -$_lang["maxImageWidth_message"] = 'Sobald ein hochgeladenes Bild diese Größe überschreitet, wird es automatisch verkleinert. Auf 0 stellen zum Deaktivieren'; -$_lang["maxImageHeight_message"] = 'Sobald ein hochgeladenes Bild diese Größe überschreitet, wird es automatisch verkleinert. Auf 0 stellen zum Deaktivieren'; -$_lang["thumbWidth_message"] = 'Maximale Vorschaubild-Breite.'; -$_lang["thumbHeight_message"] = 'Maximale Vorschaubild-Höhe.'; -$_lang["thumbsDir_message"] = 'Name des Vorschaubild-Verzeichnisses'; -$_lang["jpegQuality_message"] = 'JPEG Komprimierungsqualität für Vorschaubilder und verkleinerte Bilder'; -$_lang["showHiddenFiles"] = 'Versteckte Dateien im Datei-Browser anzeigen'; -$_lang["keyword"] = 'Schlüsselwort'; -$_lang["keywords"] = 'Schlüsselwörter'; -$_lang["keywords_intro"] = 'Hier legen Sie die Schlüsselwörter fest, die Ihrer Ressource zugewiesen werden können.'; -$_lang["language_message"] = 'Wählen Sie die Sprache für den MODX-Manager.'; -$_lang["language_title"] = 'Manager Sprache'; -$_lang["last_update"] = 'Letzte Aktualisierung'; -$_lang["launch_site"] = 'Anzeigen'; -$_lang["license"] = 'Lizenz'; -$_lang["link_attributes"] = 'Link-Attribute'; -$_lang["link_attributes_help"] = 'Hier können Sie HTML-Attribute für den Link angeben (z.B. target= oder rel=).'; -$_lang["list_mode"] = 'Listenmodus ein/aus – alle Einträge anzeigen.'; -$_lang["loading_doc_tree"] = 'Laden des Ressourcen-Baums …'; -$_lang["loading_menu"] = 'Laden des Menüs …'; -$_lang["loading_page"] = 'Bitte warten Sie während MODX die Seite lädt …'; -$_lang["localtime"] = 'Ortszeit'; -$_lang["lock_htmlsnippet"] = 'Chunk für Bearbeitung sperren'; -$_lang["lock_htmlsnippet_msg"] = 'Nur Administratoren (Rollen-ID 1) können diesen Chunk bearbeiten.'; -$_lang["lock_module"] = 'Modul für die Bearbeitung sperren'; -$_lang["lock_module_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Modul bearbeiten.'; -$_lang["lock_msg"] = 'Der Benutzer %s bearbeitet gerade die Ressource %s. Bitte warten Sie bis dieser Benutzer seine Arbeit beendet und die Ressource wieder freigegeben hat.'; -$_lang["lock_plugin"] = 'Plugin für die Bearbeitung sperren'; -$_lang["lock_plugin_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Plugin bearbeiten.'; -$_lang["lock_settings_msg"] = 'Der Benutzer %s bearbeitet gerade diese Einstellungen. Bitte warten Sie bis dieser seine Arbeit beendet und die Ressource wieder freigegeben hat.'; -$_lang["lock_snippet"] = 'Snippet für die Bearbeitung sperren.'; -$_lang["lock_snippet_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Snippet bearbeiten.'; -$_lang["lock_template"] = 'Template für die Bearbeitung sperren.'; -$_lang["lock_template_msg"] = 'Nur Administratoren (Rollen-ID 1) können dieses Template bearbeiten.'; -$_lang["lock_tmplvars"] = 'Template-Variable gegen Bearbeitung sperren'; -$_lang["lock_tmplvars_msg"] = 'Nur Administratoren (Rollen-ID 1) können diese Template-Variable bearbeiten.'; -$_lang["locked"] = 'Gesperrt'; -$_lang["login_allowed_days"] = 'Wochentagsbeschränkung'; -$_lang["login_allowed_days_message"] = 'Wählen Sie die Wochentage aus, an denen der Benutzer Zugriff erhält.'; -$_lang["login_allowed_ip"] = 'IP-Adressbeschränkung'; -$_lang["login_allowed_ip_message"] = 'Geben Sie hier die IP-Adressen an, von denen aus der Benutzer eine Zugriffsberechtigung erhält. Hinweis: Mehrere IP-Adressen können mit einem Komma getrennt werden.'; -$_lang["login_button"] = 'Anmelden'; -$_lang["login_cancelled_install_in_progress"] = 'Installation/Update der Site läuft.
          Bitte versuchen Sie es in einigen Minuten erneut!
          '; -$_lang["login_cancelled_site_was_updated"] = 'Installation/Update der Site wurde abgeschlossen. Bitte melden Sie sich erneut an!
          '; -$_lang["login_captcha_message"] = ' Der Administrator hat die Captcha-Validierung aktiviert, Sie müssen daher auch den Sicherheits-Code eingeben. \n\nWenn der Sicherheits-Code schlecht lesbar ist, klicken Sie bitte auf den Code, damit ein neuer Code generiert wird.'; -$_lang["login_homepage"] = 'Anmeldeseite'; -$_lang["login_homepage_message"] = 'Geben Sie die Ressource-ID an, zu welcher der Web-Benutzer nach einer erfolgreichen Anmeldung weitergeleitet wird. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist und der entsprechende Web-Benutzer die notwendigen Zugriffsberechtigungen besitzt um darauf zuzugreifen!'; -$_lang["login_message"] = 'Bitte melden Sie sich an, um mit MODX zu arbeiten.
          Beachten Sie bei Ihrer Eingabe die Groß- und Kleinschreibung.'; -$_lang["logo_slogan"] = 'MODX-Content-Management-System \n\n& Application-Framework.\n\nCreative. Freedom.'; -$_lang["logout"] = 'Abmelden'; -$_lang["long_title"] = 'Langer Titel'; -$_lang["mail_check_timeperiod_message"] = 'Wie oft soll nach neuen Nachrichten im Manager gesucht werden (Angabe in Sekunden)?'; -$_lang["mail_check_timeperiod_title"] = 'Nachrichten-Überprüfungsfrequenz'; -$_lang["manage_depends"] = 'Abhängigkeiten verwalten'; -$_lang["manage_files"] = 'Datei-Manager'; -$_lang["manage_htmlsnippets"] = 'Chunks'; -$_lang["manage_metatags"] = 'Meta-Angaben verwalten'; -$_lang["manage_modules"] = 'Module verwalten'; -$_lang["manage_plugins"] = 'Plugins'; -$_lang["manage_snippets"] = 'Snippets'; -$_lang["manage_templates"] = 'Template-Verwaltung'; -$_lang["manager"] = 'Manager'; -$_lang["manager_lockout_message"] = '

          Sie sind gegenwärtig im MODX-Manager angemeldet. Wenn Sie Ihre Login-Session beenden wollen, klicken Sie bitte den Abmelden-Button.

          Um zu Ihrer Start- oder Home-Seite zu gelangen, klicken Sie bitte den Start-Button.'; -$_lang["manager_permissions"] = 'Manager-Zugriffberechtigungen'; -$_lang["manager_theme"] = 'Manager-Template'; -$_lang["manager_theme_message"] = 'Wählen Sie das Template für den MODX-Manager aus.'; -$_lang["messages"] = 'Nachrichten'; -$_lang["messages_all"] = 'alle'; -$_lang["messages_compose"] = 'Nachricht verfassen'; -$_lang["messages_forward"] = 'Weiterleiten'; -$_lang["messages_from"] = 'Von'; -$_lang["messages_group"] = 'eine Gruppe'; -$_lang["messages_inbox"] = 'Posteingang'; -$_lang["messages_message"] = 'Nachricht'; -$_lang["messages_no_messages"] = 'Sie haben keine Nachrichten.'; -$_lang["messages_not_allowed_to_read"] = 'Sie sind nicht berechtigt, diese Nachricht zu lesen!'; -$_lang["messages_private"] = 'Privat'; -$_lang["messages_read_message"] = 'Nachrichten lesen'; -$_lang["messages_reply"] = 'Antworten'; -$_lang["messages_select_group"] = 'Gruppe wählen'; -$_lang["messages_select_user"] = 'Benutzer wählen'; -$_lang["messages_send"] = 'Senden'; -$_lang["messages_send_to"] = 'Senden an'; -$_lang["messages_sent"] = 'gesendet am'; -$_lang["messages_subject"] = 'Betreff'; -$_lang["messages_system_user"] = '[System]'; -$_lang["messages_title"] = 'Nachrichten'; -$_lang["messages_user"] = 'ein Benutzer'; -$_lang["meta_keywords"] = 'Meta-Angaben'; -$_lang["metatag_intro"] = 'In diesem Bereich verwalten Sie Meta-Angaben, die Ihren Ressourcenn beim Bearbeiten zugewiesen werden können.'; -$_lang["metatag_notice"] = 'Im HTML-Nachschlagewerk SELFHTML finden Sie eine Zusammenstellung geläufiger Meta-Angaben, sowie Hinweise zu deren Anwendung.'; -$_lang["metatags"] = 'Meta-Angaben'; -$_lang["mgr_access_permissions"] = 'Manager-Zugriffsberechtigungen'; -$_lang["mgr_login_start"] = 'Benutzer-Startbildschirm'; -$_lang["mgr_login_start_message"] = 'Geben Sie die Ressource-ID an, zu welcher der Web-Benutzer nach einer erfolgreichen Anmeldung weitergeleitet werden soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist und der entsprechende Web-Benutzer die notwendigen Zugriffsberechtigungen besitzt um darauf zuzugreifen!'; -$_lang["mgrlog_action"] = 'Aktion'; -$_lang["mgrlog_actionid"] = 'Aktions-ID'; -$_lang["mgrlog_anyall"] = 'Einzelne/Alle'; -$_lang["mgrlog_datecheckfalse"] = 'checkdate() gibt „false“ zurück.'; -$_lang["mgrlog_datefr"] = 'Datum von'; -$_lang["mgrlog_dateinvalid"] = 'Ungültiges Datumsformat.'; -$_lang["mgrlog_dateto"] = 'Datum bis'; -$_lang["mgrlog_emptysrch"] = 'Ihre Suchanfrage ergab keine Treffer.'; -$_lang["mgrlog_field"] = 'Feld'; -$_lang["mgrlog_itemid"] = 'Element-ID'; -$_lang["mgrlog_itemname"] = 'Elementname'; -$_lang["mgrlog_msg"] = 'Nachricht'; -$_lang["mgrlog_noquery"] = 'Es wurde noch keine Suchanfrage eingegeben.'; -$_lang["mgrlog_qresults"] = 'Suchergebnisse'; -$_lang["mgrlog_query"] = 'Suchabfragen loggen'; -$_lang["mgrlog_query_msg"] = 'Bitte treffen Sie eine Auswahl, um die Protokoll-Einträge anzusehen. Sie können Einträge innerhalb eines bestimmten Zeitraums durchsuchen. Aber berücksichtigen Sie, dass das eingegebene Datum nicht inklusive ist – um alle Einträge für den 01-01-2009 auszuwählen, setzen Sie „Datum von“ auf den 01-01-2009 und „Datum bis“ auf den 02-01-2009.

          Eine Nachricht und eine Aktion sind üblicherweise dasselbe. Wenn Sie nach einer bestimmten Nachricht suchen, ist es am besten die Aktion „Einzelne/Alle“ auszuwählen.'; -$_lang["mgrlog_results"] = 'Anzahl der Ergebnisse'; -$_lang["mgrlog_searchlogs"] = 'Such-Protokoll'; -$_lang["mgrlog_sortinst"] = 'Sie können die Tabelle sortieren, indem Sie auf die Spaltenüberschriften klicken. Sollten die Protokolldateien zu groß werden, können Sie diese löschen. Dadurch werden alle Protokolleinträge bis zum heutigen Tag entfernt – das Löschen der Protokolleinträge kann nicht rückgängig gemacht werden!'; -$_lang["mgrlog_time"] = 'Zeit'; -$_lang["mgrlog_user"] = 'Benutzer'; -$_lang["mgrlog_username"] = 'Benutzername'; -$_lang["mgrlog_value"] = 'Wert'; -$_lang["mgrlog_view"] = 'Benutzerprotokolle anzeigen'; -$_lang["module_code"] = 'Modul-Code (PHP)'; -$_lang["module_config"] = 'Modul Konfiguration'; -$_lang["module_desc"] = 'Beschreibung'; -$_lang["module_disabled"] = 'Modul deaktivieren'; -$_lang["module_edit_click_title"] = 'Klicken Sie hier, um das Modul zu bearbeiten'; -$_lang["module_group_access_msg"] = 'Wählen Sie die Benutzergruppen aus, die dieses Modul innerhalb des MODX-Managers ausführen dürfen.'; -$_lang["module_management"] = 'Modul-Verwaltung'; -$_lang["module_management_msg"] = 'In dieser Übersicht können Sie Module ausführen und bearbeiten. Um ein Modul zu starten, klicken Sie auf das Symbol des Moduls, für die Bearbeitung auf den Namen.'; -$_lang["module_msg"] = 'Hier können Sie Module verwalten und bearbeiten. Ein Modul ist eine Zusammenfassung von Elementen wie Plugins, Snippets, usw.'; -$_lang["module_name"] = 'Modulname'; -$_lang["module_resource_msg"] = 'Hier können Sie die Ressourcen verwalten, die dieses Modul benötigt. Benutzen Sie die entsprechenden Buttons.'; -$_lang["module_resource_title"] = 'Modulabhängigkeiten'; -$_lang["module_title"] = 'Modul erstellen/bearbeiten'; -$_lang["module_viewdepend_msg"] = 'Hier können Sie die Abhängigkeiten dieses Moduls bearbeiten und verwalten.'; -$_lang["modules"] = 'Module'; -$_lang["modx_news"] = 'MODX-Nachrichten'; -$_lang["modx_news_tab"] = 'MODX-Nachrichten'; -$_lang["modx_news_title"] = 'MODX-Nachrichten'; -$_lang["modx_security_notices"] = 'MODX-Sicherheitshinweise'; -$_lang["modx_version"] = 'MODX-Version'; -$_lang["monday"] = 'Montag'; -$_lang["move"] = 'Verschieben'; -$_lang["move_resource"] = 'Ressource Verschieben'; -$_lang["move_resource_message"] = 'Sie können diese Ressource und alle Unter-Ressourcen durch die Wahl eines neuen Containers verschieben. Wenn Sie eine Ressource wählen, die kein Container ist, wird diese Ressource automatisch in einen Container umgewandelt. Bitte wählen Sie einen neuen Container aus dem Ressourcen-Baum aus.'; -$_lang["move_resource_new_parent"] = 'Bitte wählen Sie einen neuen Container aus dem Ressourcen-Baum aus.'; -$_lang["move_resource_title"] = 'Ressource verschieben'; -$_lang["name"] = 'Name'; -$_lang["new_category"] = 'Neue Kategorie'; -$_lang["new_file_permissions_message"] = 'Wenn Sie eine neue Datei mit dem Datei-Manager hochladen, wird versucht die Dateirechte wie hier angegeben zu setzen. In manchen Installationen (zum Beispiel in Microsofts IIS), ist dies nicht möglich. In diesem Fall Dann müssen Sie die Rechte der Datei manuell setzen.'; -$_lang["new_file_permissions_title"] = 'Neue Dateirechte'; -$_lang["new_folder_permissions_message"] = 'Wenn Sie eine neues Verzeichnis mit dem Datei-Manager erstellen, wird versucht die Verzeichnisrechte wie hier angegeben zu setzen. In manchen Installationen (zum Beispiel in Microsofts IIS), ist dies nicht möglich. In diesem Fall Dann müssen Sie die Rechte der Datei manuell setzen.'; -$_lang["new_folder_permissions_title"] = 'Neue Verzeichnis-Zugriffsrechte'; -$_lang["new_htmlsnippet"] = 'Neues Chunk'; -$_lang["new_keyword"] = 'Neues Schlüsselwort:'; -$_lang["new_module"] = 'Neues Modul '; -$_lang["new_parent"] = 'Neues Überelement'; -$_lang["new_plugin"] = 'Neues Plugin'; -$_lang["new_role"] = 'Neue Rolle'; -$_lang["new_snippet"] = 'Neues Snippet'; -$_lang["new_template"] = 'Neues Template'; -$_lang["new_tmplvars"] = 'Neue Template-Variable'; -$_lang["new_user"] = 'Neuer Benutzer'; -$_lang["new_web_user"] = 'Neuer Web-Benutzer'; -$_lang["new_resource"] = 'Neue Ressource'; -$_lang["no"] = 'Nein'; -$_lang["no_active_users_found"] = 'Keine aktiven Benutzer gefunden.'; -$_lang["no_activity_message"] = 'Sie haben bis jetzt noch keine Ressourcen bearbeitet oder erstellt.'; -$_lang["no_category"] = 'nicht kategorisiert'; -$_lang["no_docs_pending_publishing"] = 'Es stehen keine Ressourcen zum zeitgesteuerten Veröffentlichen an.'; -$_lang["no_docs_pending_pubunpub"] = 'Keine Ereignisse.'; -$_lang["no_docs_pending_unpublishing"] = 'Es stehen keine Ressourcen zum zeitgesteuerten Zurückziehen an.'; -$_lang["no_edits_creates"] = 'Keine bearbeiteten oder erstellten Ressourcen gefunden.'; -$_lang["no_groups_found"] = 'Keine Gruppen gefunden.'; -$_lang["no_keywords_found"] = 'Keine Keywords vorhanden.'; -$_lang["no_records_found"] = 'Keine Einträge gefunden.'; -$_lang["no_results"] = 'Es wurden keine Ergebnisse gefunden'; -$_lang["nologentries_message"] = 'Geben Sie die Anzahl der Einträge an, die im Protokoll angezeigt werden sollen.'; -$_lang["nologentries_title"] = 'Anzahl der Log-Einträge'; -$_lang["nomessages_message"] = 'Geben Sie wie viele Nachrichten im Posteingang angezeigt werden sollen.'; -$_lang["nomessages_title"] = 'Anzahl der Nachrichten'; -$_lang["none"] = 'Keine'; -$_lang["noresults_message"] = 'Anzahl der anzuzeigenden Ergebnisse in Listen und Suchergebnissen.'; -$_lang["noresults_title"] = 'Ergebnisse'; -$_lang["not_deleted"] = 'wurde nicht gelöscht.'; -$_lang["not_set"] = 'Nicht gesetzt'; -$_lang["offline"] = 'Offline'; -$_lang["online"] = 'Online'; -$_lang["onlineusers_action"] = 'Aktion'; -$_lang["onlineusers_actionid"] = 'Aktions-ID'; -$_lang["onlineusers_ipaddress"] = 'IP-Adresse des Benutzers'; -$_lang["onlineusers_lasthit"] = 'Letzte Aktion'; -$_lang["onlineusers_message"] = 'Diese Liste zeigt Ihnen die aktiven Benutzer der letzten 20 Minuten an. (Zur Zeit ist es '; -$_lang["onlineusers_title"] = 'Folgende Benutzer sind online'; -$_lang["onlineusers_user"] = 'Benutzer'; -$_lang["onlineusers_userid"] = 'Benutzer-ID'; -$_lang["optimize_table"] = 'Klicken Sie hier, um die Tabelle zu optimieren'; -$_lang["page_data_cacheable"] = 'Cache aktiv'; -$_lang["page_data_cacheable_help"] = 'Markieren Sie diese Option, falls Ihre Ressource cachebar sein soll. Falls Ihre Ressource Snippets nutzt, muss diese Option deaktiviert sein.'; -$_lang["page_data_cached"] = 'Quelltext aus dem Cache:'; -$_lang["page_data_changes"] = 'Änderungen'; -$_lang["page_data_contentType"] = 'Inhaltstyp'; -$_lang["page_data_contentType_help"] = 'Wählen Sie den Inhaltstyp für diese Ressource. Wenn Sie sich nicht sicher sind welchen Typ die Ressource haben soll, lassen Sie die Einstellung auf „text/html“.'; -$_lang["page_data_created"] = 'Erstellt'; -$_lang["page_data_edited"] = 'Bearbeitet'; -$_lang["page_data_editor"] = 'Rich-Text-Editor benutzen'; -$_lang["page_data_folder"] = 'Ressource ist ein Container'; -$_lang["page_data_general"] = 'Allgemein'; -$_lang["page_data_markup"] = 'Auszeichnung / Struktur'; -$_lang["page_data_mgr_access"] = 'Manager-Zugriff'; -$_lang["page_data_notcached"] = 'Diese Ressource wurde noch nicht gecached.'; -$_lang["page_data_publishdate"] = 'Veröffentlichen am'; -$_lang["page_data_publishdate_help"] = 'Falls Sie ein Datum setzen, wird die Ressource zum angegebenen Zeitpunkt veröffentlicht.'; -$_lang["page_data_published"] = 'Veröffentlicht'; -$_lang["page_data_searchable"] = 'Durchsuchbar'; -$_lang["page_data_searchable_help"] = 'Ist diese Option aktiv, kann die Ressource durchsucht werden. Sie können dieses Feld auch für jede andere Aktion in Ihren Snippets nutzen.'; -$_lang["page_data_source"] = 'Quelltext'; -$_lang["page_data_status"] = 'Status'; -$_lang["page_data_template"] = 'Template'; -$_lang["page_data_template_help"] = 'Hier können Sie das Template für die Ressource wählen.'; -$_lang["page_data_title"] = 'Daten der Ressource'; -$_lang["page_data_unpublishdate"] = 'Zurückziehen am'; -$_lang["page_data_unpublishdate_help"] = 'Falls Sie ein Datum setzen, wird die Ressource zum angegebenen Zeitpunkt zurückgezogen.'; -$_lang["page_data_unpublished"] = 'Unveröffentlicht'; -$_lang["page_data_web_access"] = 'Web-Zugriff'; -$_lang["pagetitle"] = 'Ressource-Titel'; -$_lang["pagination_table_first"] = 'Anfang'; -$_lang["pagination_table_gotopage"] = 'Gehe zu Seite'; -$_lang["pagination_table_last"] = 'Ende'; -$_lang["paging_first"] = 'Anfang'; -$_lang["paging_last"] = 'Ende'; -$_lang["paging_next"] = 'Vor'; -$_lang["paging_prev"] = 'Zurück'; -$_lang["paging_showing"] = 'Zeige'; -$_lang["paging_to"] = 'von'; -$_lang["paging_total"] = 'insgesamt'; -$_lang["parameter"] = 'Parameter'; -$_lang["parse_docblock"] = 'DocBlock parsen'; -$_lang["parse_docblock_msg"] = 'Achtung (!): Wenn aktiviert, wird durch Analyse des DocBlocks der aktuelle Name, Konfiguration, Beschreibung und Kategorie auf die Standardeinstellungen zurückgesetzt.'; -$_lang["password"] = 'Passwort'; -$_lang["password_change_request"] = 'Neues Passwort angefordert'; -$_lang["password_gen_gen"] = 'MODX soll ein Passwort generieren.'; -$_lang["password_gen_length"] = 'Das Passwort muss mindestes 6 Zeichen lang sein.'; -$_lang["password_gen_method"] = 'Wie möchten Sie das Passwort erzeugen?'; -$_lang["password_gen_specify"] = 'Das Passwort wird von mir eingegeben:'; -$_lang["password_method"] = 'Wie möchten Sie den Benutzer über sein neues Passwort benachrichtigen?'; -$_lang["password_method_email"] = 'Neues Passwort per E-Mail senden.'; -$_lang["password_method_screen"] = 'Neues Passwort am Bildschirm ausgeben.'; -$_lang["password_msg"] = 'Das neue Passwort für %s ist %s.'; -$_lang["php_version_check"] = 'MODX ist kompatibel mit PHP 5.0.0 und höher. Bitte installieren Sie eine neuere Version von PHP.'; -$_lang["plugin"] = 'Plugin'; -$_lang["plugin_code"] = 'Plugin-Code (PHP)'; -$_lang["plugin_config"] = 'Plugin-Konfiguration'; -$_lang["plugin_desc"] = 'Beschreibung'; -$_lang["plugin_disabled"] = 'Plugin deaktiviert'; -$_lang["plugin_event_msg"] = 'Wählen Sie hier die Systemereignisse aus, bei denen dieses Plugin ausgeführt werden soll.'; -$_lang["plugin_management_msg"] = 'Hier können Sie auswählen welches Plugin Sie bearbeiten möchten.'; -$_lang["plugin_msg"] = 'Hier können Sie Plugins erstellen und bearbeiten. Plugins bestehen aus PHP-Quellcode und werden aufgrund von definierten Systemereignissen ausgeführt.'; -$_lang["plugin_name"] = 'Plugin-Name'; -$_lang["plugin_priority"] = 'Ausführungsreihenfolge festlegen'; -$_lang["plugin_priority_instructions"] = 'Hier können Sie durch Drag & Drop die Plugins unter jedem Event-Titel neu anordnen. Das erste Plugin das ausgeführt werden soll, muss ganz oben platziert werden.'; -$_lang["plugin_priority_title"] = 'Reihenfolge der Ausführung der Plugns'; -$_lang["purge_plugin"] = 'Veraltete Plugins entfernen'; -$_lang["plugin_title"] = 'Plugin erstellen/bearbeiten'; -$_lang["preview"] = 'Vorschau'; -$_lang["preview_msg"] = 'Dies ist eine Vorschau der zuletzt gespeicherten Änderungen. Klicken Sie hier zum Speichern und Aktualisieren.'; -$_lang["preview_resource"] = 'Ressource-Vorschau'; -$_lang["private"] = 'Privat'; -$_lang["public"] = 'Öffentlich'; -$_lang["publish_date"] = 'Veröffentlichungstermin'; -$_lang["publish_events"] = 'Veröffentlichungen'; -$_lang["publish_resource"] = 'Veröffentlichen'; -$_lang["rb_base_dir_message"] = 'Geben Sie den physischen Pfad auf dem Web-Server zu Ihrem Datei-Verzeichnis ein. Abhängig von Ihrem Webserver ist diese Einstellung im Normalfall automatisch vorausgefüllt. Hinweis: Für die korrekte Funktion muss das Datei-Verzeichnis die Unterverzeichnisse „images“, „docs“, „flash“ und „media“ beinhalten.'; -$_lang["rb_base_dir_title"] = 'Datei-Basispfad'; -$_lang["rb_base_url_message"] = 'Geben Sie den virtuellen Pfad zum Datei-Basispfad an. Der virtuelle Pfad ist identisch mit der URL in Ihrem Web-Browser.'; -$_lang["rb_base_url_title"] = 'Datei-URL'; -$_lang["rb_message"] = 'Wählen Sie „Ja“, um den Datei-Browser zu aktivieren. Der Datei-Browser ermöglicht Benutzern, allgemeine Dateien wie Bilder, Animationen oder Mediendateien auf den Server zu laden und zu verwalten.'; -$_lang["rb_title"] = 'Datei-Browser aktivieren'; -$_lang["rb_webuser_message"] = 'Soll ein Web-Benutzer den Datei-Browser verwenden dürfen? Hinweis: Wenn Web-Benutzer den Datei-Browser verwenden dürfen, können sie alle Dateien einsehen auf die Manager-Benutzer Zugriff haben. Diese Möglichkeit sollte daher nur vertrauenswürdigen Web-Benutzern eingeräumt werden.'; -$_lang["rb_webuser_title"] = 'Web-Benutzer?'; -$_lang["recent_docs"] = 'Kürzlich bearbeitete Ressourcen'; -$_lang["recommend_setting_change_title"] = 'Empfohlene Änderung der Konfiguration'; -$_lang["recommend_setting_change_description"] = 'Ihre Seite überprüft momentan nicht die HTTP_REFERER von eingehenden Requests. Wir empfehlen dringend, diese Einstellung vorzunehmen, um das Risiko von CSRF-Attacken (Cross Site Request Forgery) zu reduzieren.'; -$_lang["references"] = 'Referenzen'; -$_lang["refresh_cache"] = 'Cache: %s Dateien wurden im Cache-Verzeichnis gefunden. Gelöschte Dateien %d.

          Der Cache wird erneuert, sobald die Seiten das erste mal aufgerufen werden.'; -$_lang["refresh_published"] = '%s Ressourcen wurden veröffentlicht.'; -$_lang["refresh_site"] = 'Cache leeren'; -$_lang["refresh_title"] = 'Website aktualisieren, Cache leeren'; -$_lang["refresh_tree"] = 'Ressourcen-Baum aktualisieren'; -$_lang["refresh_unpublished"] = '%s Ressourcen wurden zurückgezogen.'; -$_lang["release_date"] = 'Veröffentlichungsdatum'; -$_lang["remember_last_tab"] = 'Tabs merken'; -$_lang["remember_last_tab_message"] = 'Manager Tabs laden den zuletzt geöffneten anstatt dem ersten Tab.'; -$_lang["remember_username"] = 'Benutzername merken'; -$_lang["remove"] = 'Entfernen'; -$_lang["remove_date"] = 'Datum löschen'; -$_lang["remove_locks"] = 'Sperren entfernen'; -$_lang["rename"] = 'Umbenennen'; -$_lang["reports"] = 'Berichte'; -$_lang["report_issues"] = 'Probleme melden'; -$_lang["require_tagname"] = 'Ein Tag-Name ist zwingend erforderlich'; -$_lang["require_tagvalue"] = 'Ein Tag-Wert ist zwingend erforderlich'; -$_lang["reserved_name_warning"] = 'Sie benutzen einen vorreservierten Namen.'; -$_lang["reset"] = 'Zurücksetzen'; -$_lang["reset_failedlogins"] = 'Zurücksetzen'; -$_lang["reset_sort_order"] = 'Sortierung zurücksetzen'; -$_lang["resource"] = 'Ressource'; -$_lang["resource_alias"] = 'Ressource-Alias'; -$_lang["resource_alias_help"] = 'Hier können Sie die URL der Ressource angeben um diese auch über http://beispiel.de/alias verfügbar zu machen. Funktioniert nur bei aktivierten benutzerfreundlichen URLs.'; -$_lang["resource_content"] = 'Inhalt der Ressource'; -$_lang["resource_description"] = 'Beschreibung'; -$_lang["resource_description_help"] = 'Sie können hier eine optionale Beschreibung der Ressource eingeben.'; -$_lang["resource_duplicate"] = 'Ressource duplizieren'; -$_lang["resource_long_title_help"] = 'Hier können Sie einen längeren Titel für die Ressource eingeben. Der Langtitel kann für Header-Tags verwendet werden, nützlich für die Suchmaschinen-Indizierung sein und aussagekräftig Ihre Seite beschreiben.'; -$_lang["resource_metatag_help"] = 'Wählen Sie jene Meta-Tags und Schlüsselwörter aus, die dieser Ressource zugeordnet werden sollen. Für eine Mehrfachauswahl halten Sie die STRG- / CTRL-Taste gedrückt.'; -$_lang["resource_opt_contentdispo"] = 'Inhaltstyp'; -$_lang["resource_opt_contentdispo_help"] = 'Mit diesem Feld können Sie festlegen, ob der Browser diese Ressource wie üblich im Browser-Fenster darstellt oder als Datei-Download anbietet.'; -$_lang["resource_opt_emptycache"] = 'Cache leeren'; -$_lang["resource_opt_emptycache_help"] = 'Eine Markierung dieses Feldes löscht den Cache für diese Ressource nach dem Speichern.'; -$_lang["resource_opt_folder"] = 'Container'; -$_lang["resource_opt_folder_help"] = 'Markieren Sie diese Einstellung, wenn diese Ressource als Container für andere Ressourcen zur Verfügung stehen soll. Ein Container ist wie ein Ordner für weitere Ressourcen, kann selbst aber auch Inhalte enthalten.'; -$_lang["resource_opt_menu_index"] = 'Menüindex'; -$_lang["resource_opt_menu_index_help"] = 'Der Menüindex kann in Menü-Snippets die Position der Ressource in Menülisten bestimmen oder auch für jeden anderen Zweck in Snippets verwendet werden.'; -$_lang["resource_opt_menu_title"] = 'Menütitel'; -$_lang["resource_opt_menu_title_help"] = 'Im Menütitel kann optional ein kurzer Titel angegeben werden, der für Links zu dieser Ressource in Menü-Snippets verwendet wird.'; -$_lang["resource_opt_published"] = 'Veröffentlicht'; -$_lang["resource_opt_published_help"] = 'Markieren Sie diese Option, wenn Ihr Ressource direkt nach dem speichern veröffentlicht werden soll.'; -$_lang["resource_opt_richtext"] = 'Rich-Text'; -$_lang["resource_opt_richtext_help"] = 'Markieren Sie diese Option, wenn Sie zum Bearbeiten der Ressource den Rich-Text-Editor nutzen möchten. Fall Ihr Ressource Javascript oder Formulare beinhalten soll, deaktivieren Sie diese Option, damit der HTML-Editor Ihr Ressource nicht zerstört.'; -$_lang["resource_opt_show_menu"] = 'Im Menü anzeigen'; -$_lang["resource_opt_show_menu_help"] = 'Aktivieren Sie diese Option um die Ressource in Menülisten anzuzeigen. Setzt voraus, dass Ihre Menü-Snippets diese Angabe interpretieren.'; -$_lang["resource_opt_trackvisit_help"] = 'Besucherzugriffe auf dieser Seite protokollieren'; -$_lang["resource_overview"] = 'Ressourcen-Übersicht'; -$_lang["resource_parent"] = 'Container'; -$_lang["resource_parent_help"] = 'Klicken Sie auf eine Ressource im Baum, um diese als übergeordnete Ressource zu wählen.'; -$_lang["resource_permissions_error"] = 'Weisen Sie diese Resource mindestens einer Ressourcen-Gruppe zu, zu der Sie Zugriff haben.'; -$_lang["resource_setting"] = 'Ressourcen-Eigenschaften'; -$_lang["resource_summary"] = 'Zusammenfassung'; -$_lang["resource_summary_help"] = 'Geben Sie eine kurze inhaltliche Zusammenfassung der Ressource ein.'; -$_lang["resource_title"] = 'Titel'; -$_lang["resource_title_help"] = 'Geben Sie hier den Namen/Titel der Ressource ein. Vermeiden Sie die Benutzung von Backslashes im Namen!'; -$_lang["resource_to_be_moved"] = 'Ressource, die verschoben werden soll'; -$_lang["resource_type"] = 'Ressourcentyp'; -$_lang["resource_type_message"] = 'Weblinks referenzieren andere Ressourcen im Internet ebenso wie andere MODX Ressourcen, externe Websites, Bilder oder Dateien. Weblinks sollten vom Medientyp text/html sein und Inline-Content-Disposition haben.'; -$_lang["resource_type_weblink"] = 'Weblink'; -$_lang["resource_type_webpage"] = 'Website'; -$_lang["resource_weblink_help"] = 'Geben Sie hier die Adresse des Objekts ein, auf welches Sie verlinken möchten.'; -$_lang["resources_in_container"] = 'Ressourcen in diesem Container.'; -$_lang["resources_in_container_no"] = 'Dieser Container enthält keine Unter-Ressourcen.'; -$_lang["role"] = 'Rolle'; -$_lang["role_about"] = 'Anzeige der „Über“-Seite'; -$_lang["role_access_persmissions"] = 'Zugriffsberechtigungen'; -$_lang["role_actionok"] = 'Ausgeführte Aktionen anzeigen'; -$_lang["role_assets_images"] = 'assets/images verwalten'; -$_lang["role_assets_files"] = 'assets/files verwalten'; -$_lang["role_bk_manager"] = 'Backup-Manager benutzen'; -$_lang["role_cache_refresh"] = 'Seitencache leeren'; -$_lang["role_change_password"] = 'Passwort ändern'; -$_lang["role_change_resourcetype"] = 'Ressourcentyp ändern'; -$_lang["role_chunk_management"] = 'Chunk-Management'; -$_lang["role_config_management"] = 'Konfigurations-Verwaltung'; -$_lang["role_content_management"] = 'Inhalts-Verwaltung'; -$_lang["role_create_chunk"] = 'Neue Chunks erstellen'; -$_lang["role_create_doc"] = 'Neue Ressourcen erstellen'; -$_lang["role_create_plugin"] = 'Neue Plugins erstellen'; -$_lang["role_create_snippet"] = 'Neue Snippets erstellen'; -$_lang["role_create_template"] = 'Neue Templates erstellen'; -$_lang["role_credits"] = 'Danksagungen'; -$_lang["role_delete_chunk"] = 'Chunks löschen'; -$_lang["role_delete_doc"] = 'Ressourcen löschen'; -$_lang["role_delete_eventlog"] = 'Ereignisprotokoll löschen'; -$_lang["role_delete_module"] = 'Module löschen'; -$_lang["role_delete_plugin"] = 'Plugins löschen'; -$_lang["role_delete_role"] = 'Rollen löschen'; -$_lang["role_delete_snippet"] = 'Snippets löschen'; -$_lang["role_delete_template"] = 'Templates löschen'; -$_lang["role_delete_user"] = 'Benutzer löschen'; -$_lang["role_delete_web_user"] = 'Web-Benutzer löschen'; -$_lang["role_edit_chunk"] = 'Chunks bearbeiten'; -$_lang["role_edit_doc"] = 'Ressourcen bearbeiten'; -$_lang["role_edit_doc_metatags"] = 'Meta-Tags und Schlüsselwörter bearbeiten'; -$_lang["role_edit_module"] = 'Module bearbeiten'; -$_lang["role_edit_plugin"] = 'Plugins bearbeiten'; -$_lang["role_edit_role"] = 'Rollen bearbeiten'; -$_lang["role_edit_settings"] = 'Konfiguration bearbeiten'; -$_lang["role_edit_snippet"] = 'Snippets bearbeiten'; -$_lang["role_edit_template"] = 'Templates bearbeiten'; -$_lang["role_edit_user"] = 'Benutzer bearbeiten'; -$_lang["role_edit_web_user"] = 'Web-Benutzer bearbeiten'; -$_lang["role_empty_trash"] = 'Gelöschte Ressourcen endgültig entfernen'; -$_lang["role_errors"] = 'Fehlerdialoge anzeigen'; -$_lang["role_eventlog_management"] = 'Ereignisverwaltung'; -$_lang["role_export_static"] = 'Statisches HTML exportieren'; -$_lang["role_file_management"] = 'Datei-Manager'; -$_lang["role_file_manager"] = 'Datei-Manager (voller Root-Zugriff)'; -$_lang["role_frames"] = 'Manager-Frames ermitteln'; -$_lang["role_help"] = 'Anzeigen der Hilfeseiten'; -$_lang["role_home"] = 'Manager Startseite ermitteln'; -$_lang["role_import_static"] = 'HTML importieren'; -$_lang["role_logout"] = 'Abmeldung aus dem MODX-Manager'; -$_lang["role_manage_metatags"] = 'Meta-Tags und Schlüsselwörter verwalten'; -$_lang["role_management_msg"] = 'Hier können Sie eine Rolle zum Bearbeiten wählen.'; -$_lang["role_management_title"] = 'Rollen'; -$_lang["role_messages"] = 'Nachrichten anzeigen und senden'; -$_lang["role_module_management"] = 'Modul-Verwaltung'; -$_lang["role_name"] = 'Rollenname'; -$_lang["role_new_module"] = 'Neues Modul erstellen'; -$_lang["role_new_role"] = 'Neue Rolle erstellen'; -$_lang["role_new_user"] = 'Neuen Benutzer erstellen'; -$_lang["role_new_web_user"] = 'Neuen Web-Benutzer erstellen'; -$_lang["role_plugin_management"] = 'Plugin-Verwaltung'; -$_lang["role_publish_doc"] = 'Ressource veröffentlichen'; -$_lang["role_remove_locks"] = 'Sperren entfernen'; -$_lang["role_role_management"] = 'Rollenverwaltung'; -$_lang["role_run_module"] = 'Module ausführen'; -$_lang["role_save_chunk"] = 'Chunks speichern'; -$_lang["role_save_doc"] = 'Ressource speichern'; -$_lang["role_save_module"] = 'Modul speichern'; -$_lang["role_save_password"] = 'Passwort speichern'; -$_lang["role_save_plugin"] = 'Plugins speichern'; -$_lang["role_save_role"] = 'Rollen speichern'; -$_lang["role_save_snippet"] = 'Snippet speichern'; -$_lang["role_save_template"] = 'Template speichern'; -$_lang["role_save_user"] = 'Benutzer speichern'; -$_lang["role_save_web_user"] = 'Web-Benutzer speichern'; -$_lang["role_snippet_management"] = 'Snippet-Verwaltung'; -$_lang["role_template_management"] = 'Template-Verwaltung'; -$_lang["role_title"] = 'Rolle erzeugen/bearbeiten'; -$_lang["role_udperms"] = 'Rechteverwaltung'; -$_lang["role_user_management"] = 'Benutzerverwaltung'; -$_lang["role_view_docdata"] = 'Ressource-Daten anzeigen'; -$_lang["role_view_eventlog"] = 'Ereignisprotokoll anzeigen'; -$_lang["role_view_logs"] = 'Systemlogs anzeigen'; -$_lang["role_view_unpublished"] = 'Zeige unveröffentlichte Ressourcen'; -$_lang["role_web_access_persmissions"] = 'Web-Benutzer-Zugriffskontrolle'; -$_lang["role_web_user_management"] = 'Web-Benutzerverwaltung'; -$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'URL des MODX-News-Feeds eintragen.'; -$_lang["rss_url_news_title"] = 'RSS-News-Feed'; -$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'URL des MODX-Security-Feeds eintragen.'; -$_lang["rss_url_security_title"] = 'RSS-Security-Feed'; -$_lang["run_module"] = 'Modul starten'; -$_lang["saturday"] = 'Samstag'; -$_lang["save"] = 'Speichern'; -$_lang["save_all_changes"] = 'Änderungen speichern'; -$_lang["save_tag"] = 'Tag speichern'; -$_lang["saving"] = 'Speichern, bitte warten …'; -$_lang["search"] = 'Suchen'; -$_lang["search_criteria"] = 'Suchkriterium'; -$_lang["search_criteria_content"] = 'Suche im Inhalt'; -$_lang["search_criteria_content_msg"] = 'Findet alle Ressource in deren Inhalt der eingegebene Text vorkommt.'; -$_lang["search_criteria_id"] = 'Suche nach ID'; -$_lang["search_criteria_id_msg"] = 'Findet die Ressource dessen ID mit der eingegebenen übereinstimmt.'; -$_lang["search_criteria_top"] = 'Hauptfelder durchsuchen'; -$_lang["search_criteria_top_msg"] = 'Titel, langer Title, Alias, ID'; -$_lang["search_criteria_template_id"] = 'Suche nach Template ID'; -$_lang["search_criteria_template_id_msg"] = 'Findet alle Ressourcen die das Template mit der angegebenen ID benutzen.'; -$_lang["search_criteria_url_msg"] = 'Finde Ressource durch exakte URL'; -$_lang["search_criteria_longtitle"] = 'Suche nach Langtitel'; -$_lang["search_criteria_longtitle_msg"] = 'Findet alle Ressource in deren Langtitel der eingegebene Text vorkommt.'; -$_lang["search_criteria_title"] = 'Suche nach Titel'; -$_lang["search_criteria_title_msg"] = 'Findet alle Ressourcen in deren Titel der eingegebene Text vorkommt.'; -$_lang["search_empty"] = 'Ihre Suche ergab keine Treffer. Bitte ändern Sie Ihre Suchanfrage und versuchen Sie es noch einmal.'; -$_lang["search_item_deleted"] = 'Diese Ressource wurde gelöscht'; -$_lang["search_results"] = 'Suchergebnisse'; -$_lang["search_results_returned_desc"] = 'Beschreibung'; -$_lang["search_results_returned_id"] = 'ID'; -$_lang["search_results_returned_msg"] = 'Ihre Suchanfrage ergab %s Treffer. Wenn zu viele Ergebnisse gefunden wurden, versuchen Sie die Suche zu verfeinern. Das erste Symbol in jeder Spalte zeigt Ihnen die Ressource-Postion im Baum an. Ganz rechts können Sie den Ressource-Status ablesen.'; -$_lang["search_results_returned_title"] = 'Titel'; -$_lang["search_view_docdata"] = 'Diese Ressource anzeigen'; -$_lang["security"] = 'Sicherheit'; -$_lang["security_notices_tab"] = 'Sicherheitsmeldungen'; -$_lang["security_notices_title"] = 'Sicherheitsmeldungen'; -$_lang["select_date"] = 'Datum auswählen'; -$_lang["send"] = 'Senden'; -$_lang["server_protocol_http"] = 'http'; -$_lang["server_protocol_https"] = 'https'; -$_lang["server_protocol_message"] = 'Falls Sie eine https-Verbindung nutzen möchten, geben Sie dies hier an.'; -$_lang["server_protocol_title"] = 'Servertyp'; -$_lang["serveroffset"] = 'Server-Zeitverschiebung'; -$_lang["serveroffset_message"] = 'Wählen Sie die Anzahl der Stunden, die zwischen der Server-Zeit und Ihrer Ortszeit liegen. Die derzeitige Server-Zeit ist [%s], die derzeitige Server-Zeit bei Nutzung der Zeitverschiebung ist [%s].'; -$_lang["serveroffset_title"] = 'Server-Zeitverschiebung'; -$_lang["servertime"] = 'Server-Zeit'; -$_lang["set_automatic"] = 'Automatisch einstellen'; -$_lang["set_default"] = 'Zurücksetzen'; -$_lang["set_default_all"] = 'Alle zurücksetzen'; -$_lang["settings_after_install"] = 'Da es sich um eine neue Installation handelt wird Ihnen empfohlen, die Einstellungen zu überprüfen und gegebenenfalls zu ändern.

          '; -$_lang["settings_config"] = 'Konfiguration'; -$_lang["settings_dependencies"] = 'Abhängigkeiten'; -$_lang["settings_events"] = 'Systemereignisse'; -$_lang["settings_furls"] = 'Benutzerfreundliche URL'; -$_lang["settings_general"] = 'Allgemein'; -$_lang["settings_misc"] = 'Sonstiges'; -$_lang["settings_security"] = 'Sicherheit'; -$_lang["settings_KC"] = 'Datei-Browser'; -$_lang["settings_page_settings"] = 'Seiteneinstellungen'; -$_lang["settings_photo"] = 'Foto'; -$_lang["settings_properties"] = 'Eigenschaften'; -$_lang["settings_site"] = 'Seiten'; -$_lang["settings_strip_image_paths_message"] = 'Mit dieser Einstellung werden die Bildpfade relativ statt absolut gesetzt. Das ist sehr empfehlenswert wenn die Installation umgezogen wird (z.B. von der Entwicklungsseite zur Produktionsseite). Wenn Sie nicht wissen was gemeint ist – lassen Sie die Einstellung auf „Nein“.'; -$_lang["settings_strip_image_paths_title"] = 'Bild-Pfade zurückschreiben?'; -$_lang["settings_templvars"] = 'Template-Variablen'; -$_lang["settings_title"] = 'MODX-Konfiguration'; -$_lang["settings_ui"] = 'Benutzeroberfläche'; -$_lang["settings_users"] = 'Benutzer'; -$_lang["show_meta"] = 'META Keywords Tab anzeigen'; -$_lang["show_meta_message"] = 'Den (in Zukunft nicht mehr unterstützten) META Keywords Tab beim Ressource bearbeiten anzeigen.'; -$_lang["show_tree"] = 'Baum anzeigen'; -$_lang["showing"] = 'Anzeige'; -$_lang["signupemail_message"] = 'Hier können Sie die Vorlage der E-Mail eingeben, die das System automatisch an Ihre Benutzer schickt, wenn die entsprechenden Benutzerkonten erstellt werden. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Webmasters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis:Sie sollten auf jeden Fall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Benutzer auch die entsprechenden Anmeldedaten erhalten.'; -$_lang["signupemail_title"] = 'Aktivierungs-E-Mail'; -$_lang["site"] = 'Website'; -$_lang["site_schedule"] = 'Terminplan'; -$_lang["sitename_message"] = 'Geben Sie den Namen Ihrer Website ein.'; -$_lang["sitename_title"] = 'Website-Name'; -$_lang["sitestart_message"] = 'Geben Sie die ID der Ressource ein, welche die Startseite sein soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; -$_lang["sitestart_title"] = 'Startseite'; -$_lang["sitestatus_message"] = 'Wählen Sie „Online“, um Ihre Seite zu veröffentlichen. Wenn Sie „Offline“ wählen wird den Besuchern Ihrer Seite die „Seite zur Zeit nicht erreichbar“ angezeigt.'; -$_lang["sitestatus_title"] = 'Status der Seite'; -$_lang["siteunavailable_message"] = 'Diese Nachricht wird angezeigt, wenn Sie Ihre Seite „Offline“ geschaltet haben oder ein Fehler auftritt.'; -$_lang["siteunavailable_message_default"] = 'Diese Seite ist derzeit nicht verfügbar.'; -$_lang["siteunavailable_page_message"] = 'Geben Sie die Ressource-ID der Ressource ein, die beim Status „Offline“ angezeigt werden soll. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; -$_lang["siteunavailable_page_title"] = 'Offline-Seite'; -$_lang["siteunavailable_title"] = 'Seite nicht erreichbar'; -$_lang["snippet"] = 'Snippet'; -$_lang["snippet_code"] = 'Snippet-Code (PHP)'; -$_lang["snippet_desc"] = 'Snippet-Beschreibung'; -$_lang["snippet_execonsave"] = 'Snippet nach dem Speichern ausführen.'; -$_lang["snippet_management_msg"] = 'Hier können Sie ein Snippet wählen, das Sie bearbeiten möchten.'; -$_lang["snippet_msg"] = 'Hier können Sie Snippets anlegen und bearbeiten. Beachten Sie, dass Snippets reiner PHP-Code sind. Wenn das Snippet einen Wert in einem Template oder einer Ressource ausgeben soll, müssen Sie diesen wert innerhalb des Snippets mit PHP ausgeben.'; -$_lang["snippet_name"] = 'Snippet-Name'; -$_lang["snippet_properties"] = 'Standardeigenschaften'; -$_lang["snippet_title"] = 'Snippet erstellen/bearbeiten'; -$_lang["sort_alphabetically"] = 'Alphabetisch sortieren'; -$_lang["sort_asc"] = 'Aufsteigend'; -$_lang["sort_desc"] = 'Absteigend'; -$_lang["sort_menuindex"] = 'Menüindex sortieren'; -$_lang["sort_tree"] = 'Baum sortieren'; -$_lang['sort_updating'] = 'Wird aktualisiert ...'; -$_lang['sort_updated'] = 'Aktualisierung beendet!'; -$_lang['sort_nochildren'] = 'Dieser Container enthält keine Unter-Ressourcen.'; -$_lang["sort_elements_msg"] = 'Reihenfolge der aufgelisteten Elemente durch Drag&Drop sortieren.'; -$_lang["source"] = 'Quelle'; -$_lang["stay"] = 'Bearbeitung fortsetzen'; -$_lang["stay_new"] = 'Weiter hinzufügen'; -$_lang["submit"] = 'Absenden'; -$_lang["sunday"] = 'Sonntag'; -$_lang["sys_alert"] = 'Systemalarm'; -$_lang["sysinfo_activity_message"] = 'Die Liste zeigt Ihnen die zuletzt bearbeiteten Dateien.'; -$_lang["sysinfo_userid"] = 'Benutzer'; -$_lang["system_email_signup"] = 'Hallo [+uid+]! - -Hier sind Ihre Anmeldedaten für [+sname+] MODX-Manager: +hier sind Ihren Anmeldedetails für [+sname+] : Benutzername: [+uid+] Passwort: [+pwd+] -Sobald Sie sich in Ihrem Account ([+surl+]) angemeldet haben, können Sie Ihr Passwort ändern. +Sobald Sie sich im Manager ([+surl+]) angemeldet haben, können Sie Ihr Passwort ändern. -Mit freundlichen Grüßen -Ihr Website-Administrator'; +Mit freundlichen Grüßen, +Ihr Website-Administrator +'; $_lang["system_email_webreminder"] = 'Hallo [+uid+]! Um Ihr neues Passwort zu aktivieren, klicken Sie bitte auf folgenden Link @@ -1003,383 +1041,471 @@ Wenn Sie diese E-Mail unverlangt bekommen, ignorieren Sie sie bitte einfach. Mit freundlichen Grüßen -Ihr Website-Administrator'; -$_lang["system_email_websignup"] = 'Hallo [+uid+], +Ihr Website-Administrator'; +$_lang["system_email_websignup"] = 'Hallo [+uid+]! -Hier sind Ihre Anmeldedetails für [+sname+]: +Hier sind Ihre Anmeldendaten für [+sname+]: Benutzername: [+uid+] Passwort: [+pwd+] -Sobald Sie sich auf [+sname+] ([+surl+]) angemeldet haben, können Sie Ihr Passwort ändern. +Sobald Sie sich in Ihrem Account ([+surl+]) angemeldet haben, können Sie Ihr Passwort ändern. Mit freundlichen Grüßen -Ihr Website-Administrator'; -$_lang["table_hoverinfo"] = 'Wenn Sie mit dem Mauszeiger über einen Tabellennamen fahren, wird Ihnen (sofern verfügbar) eine kurze Beschreibung der Funktion dieser Tabelle angezeigt.'; -$_lang["table_prefix"] = 'Tabellen-Präfix'; -$_lang["tag"] = 'Tag'; -$_lang["template"] = 'Template'; -$_lang["template_assignedtv_tab"] = 'Zugewiesene Template-Variablen'; -$_lang["template_code"] = 'Template-Code (HTML)'; -$_lang["template_desc"] = 'Template-Beschreibung'; -$_lang["template_edit_tab"] = 'Template bearbeiten'; -$_lang["template_management_msg"] = 'Hier können Sie ein Template wählen, das Sie bearbeiten möchten.'; -$_lang["template_msg"] = 'Hier können Sie Templates anlegen und bearbeiten. Die Änderung an einem Template wird nur angezeigt, wenn Sie den Cache leeren. Sie können aber die Vorschaufunktion nutzen, um das Template anzuzeigen.'; -$_lang["template_name"] = 'Template-Name'; -$_lang["template_no_tv"] = 'Diesem Template wurden noch keine Template-Variablen zugewiesen.'; -$_lang["template_notassigned_tv"] = 'Diese Template-Variablen können zugewiesen werden.'; -$_lang["template_reset_all"] = 'Alle Ressourcen auf das Standard-Template zurücksetzen'; -$_lang["template_reset_specific"] = 'Template nur bei Ressourcen mit dem aktuellen Template „%s“ setzen'; -$_lang["template_selectable"] = 'Template ist auswählbar, wenn eine Resource erstellt oder bearbeitet wird.'; -$_lang["template_title"] = 'Template erstellen/bearbeiten'; -$_lang["template_tv_edit"] = 'Reihenfolge der Template-Variablen bearbeiten'; -$_lang["template_tv_edit_message"] = 'Reihenfolge der Template-Variablen für dieses Template durch Drag & Drop sortieren.'; -$_lang["template_tv_edit_title"] = 'Reihenfolge Template-Variablen'; -$_lang["template_tv_msg"] = 'Liste der Template-Variablen, die diesem Template zugeordnet wurden.'; -$_lang["thursday"] = 'Donnerstag'; -$_lang["tmplvar_access_msg"] = 'Wählen Sie jene Ressourcen-Gruppen aus, die diese Template-Variable bearbeiten dürfen.'; -$_lang["tmplvar_change_template_msg"] = 'Wenn Sie das Template ändern, werden die Template-Variablen neu geladen. Achtung: alle nicht gespeicherten Änderungen gehen hierbei verloren!\n\nSind Sie sicher, dass Sie das Template ändern möchten?'; -$_lang["tmplvar_inuse"] = 'Folgende Ressourcen verwenden derzeit diese Template-Variable. Wollen Sie mit dem Löschen fortfahren?'; -$_lang["tmplvar_tmpl_access"] = 'Template-Berechtigungen'; -$_lang["tmplvar_tmpl_access_msg"] = 'Wählen Sie hier jene Templates aus, die diese Template-Variable verarbeiten dürfen.'; -$_lang["tmplvar"] = 'Template-Variable'; -$_lang["tmplvars"] = 'Template-Variablen'; -$_lang["tmplvars_binding_msg"] = 'Dieses Feld unterstützt Datenbindung mittels des @ Befehls'; -$_lang["tmplvars_caption"] = 'Bezeichnung'; -$_lang["tmplvars_default"] = 'Standardwert'; -$_lang["tmplvars_description"] = 'Beschreibung'; -$_lang["tmplvars_elements"] = 'Eingabeoptionswerte'; -$_lang["tmplvars_inherited"] = 'Wert geerbt'; -$_lang["tmplvars_management_msg"] = 'Hier können Sie Ihre Template-Variablen bearbeiten.'; -$_lang["tmplvars_msg"] = 'Hier können Sie Template-Variablen erstellen und bearbeiten. Die Template-Variablen müssen für die jeweiligen Templates aktiviert werden, damit Snippets und Ressourcen darauf wie normale Variablen zugreifen können.'; -$_lang["tmplvars_name"] = 'Name der Template-Variable'; -$_lang["tmplvars_novars"] = 'Keine Template-Variablen gefunden'; -$_lang["tmplvars_rank"] = 'Sortierung'; -$_lang["tmplvars_rank_edit_message"] = 'Reihenfolge der aufgelisteten Template-Variablen durch Drag&Drop sortieren.'; -$_lang["tmplvars_reset_params"] = 'Parameter zurücksetzen'; -$_lang["tmplvars_title"] = 'Template-Variable erstellen/bearbeiten'; -$_lang["tmplvars_type"] = 'Eingabetyp'; -$_lang["tmplvars_widget"] = 'Objektauswahl'; -$_lang["tmplvars_widget_prop"] = 'Objekt Eigenschaften'; -$_lang["to"] = 'bis'; -$_lang["tools"] = 'Werkzeuge'; -$_lang["top_howmany_message"] = 'Die Länge der Top Liste. Zum Beispiel: Top 10 Liste.'; -$_lang["top_howmany_title"] = 'Top Liste'; -$_lang["total"] = 'insgesamt'; -$_lang["track_visitors_message"] = 'Die Protokollierung der Besucher ermöglicht die Erstellung einer Besucherstatistik, es verlangsamt allerdings die Darstellung der Seite ein wenig .'; -$_lang["track_visitors_title"] = 'Besucherprotokollierung'; -$_lang["tree_page_click"] = 'Klickverhalten'; -$_lang["tree_page_click_message"] = 'Standardverhalten beim Klicken im Manager Tree.'; -$_lang["use_breadcrumbs"] = 'Brotkrumenpfad anzeigen'; -$_lang["use_breadcrumbs_message"] = 'Zeigt einen Brotkrumenpfad an wenn eine Resource erstellt oder bearbeitet wird.'; -$_lang["tree_show_protected"] = 'Zeige geschützte Ressourcen'; -$_lang["tree_show_protected_message"] = 'Wenn auf „Nein“ gesetzt, erscheinen geschützte Ressourcen (inklusive der Unter-Ressourcen) nicht im Strukturbaum, das heißt Manager-Benutzer ohne Berechtigung diese Ressourcen zu bearbeiten sehen sie nicht. „Nein“ ist die Standardeinstellung.'; -$_lang["truncate_table"] = 'Klicken Sie hier, um die Tabelle zu schließen'; -$_lang["tuesday"] = 'Dienstag'; -$_lang["tv"] = 'TV'; -$_lang["type"] = 'Typ'; -$_lang["udperms_allowroot_message"] = 'Möchten Sie Ihren Benutzern die Erstellung von Ressourcen im Hauptverzeichnis der Seite erlauben? '; -$_lang["udperms_allowroot_title"] = 'Hauptverzeichnis-Erlaubnis'; -$_lang["udperms_message"] = 'Die Zugriffskontrolle erlaubt Ihnen festzulegen, welche Seiten von welchem Benutzer bearbeitet werden können. Die Zugriffskontrolle erlaubt Ihnen mit Hilfe von Benutzergruppen und Ressourcen-Gruppen festzulegen, welche Seiten von welchem Benutzer bearbeitet werden können.'; -$_lang["udperms_title"] = 'Benutzerzugriffskontrolle'; -$_lang["unable_set_link"] = 'Der Link konnte nicht gesetzt werden!'; -$_lang["unable_set_parent"] = 'Setzen des neuen Containers nicht möglich!'; -$_lang["unauthorizedpage_message"] = 'Geben Sie die ID der Ressource an, zu welchem Benutzer bei einem unautorisierten Zugriff weitergeleitet werden. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; -$_lang["unauthorizedpage_title"] = 'unautorisierter Zugriff'; -$_lang["unblock_message"] = 'Dieser Benutzer wird freigeschaltet sein, nachdem Sie die Benutzerdaten gespeichert haben.'; -$_lang["undelete_resource"] = 'Wiederherstellen'; -$_lang["unpublish_date"] = 'Termin zum Zurückziehen'; -$_lang["unpublish_events"] = 'Zurückziehungen'; -$_lang["unpublish_resource"] = 'Zurückziehen'; -$_lang["untitled_resource"] = 'Unbenannte Ressource'; -$_lang["untitled_weblink"] = 'Unbenannter Web-Link'; -$_lang["update_params"] = 'Parameteranzeige aktualisieren'; -$_lang["update_settings_from_language"] = 'Aktuelle ersetzen durch:'; -$_lang["upload_maxsize_message"] = 'Geben Sie hier die maximale Dateigröße für den Datei-Upload mit dem Datei-Manager an. Die Größenangabe ist in Bytes. Achtung: je größer die Datei desto länger dauert der Upload!'; -$_lang["upload_maxsize_title"] = 'Maximale Upload-Dateigröße'; -$_lang["uploadable_files_message"] = 'Hier können Sie angeben welche Dateitypen über den Filemanager hochgeladen werden können. Bitte geben Sie die Dateierweiterungen mit Komma getrennt ein.'; -$_lang["uploadable_files_title"] = 'Hochladbare Dateitypen'; -$_lang["uploadable_flash_message"] = 'Datei-Upload nach „assets/flash/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; -$_lang["uploadable_flash_title"] = 'Hochladbare Flash-Dateien'; -$_lang["uploadable_images_message"] = 'Bilder-Upload nach „assets/images/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; -$_lang["uploadable_images_title"] = 'Hochladbare Bildformate'; -$_lang["uploadable_media_message"] = 'Medien-Upload nach „assets/media/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; -$_lang["uploadable_media_title"] = 'Hochladbare Medien-Formate'; -$_lang["use_alias_path_message"] = 'Wenn Sie diese Option mit „Ja“ einstellen, werden Ihre Ressourcen mit den vollen Pfadangaben angezeigt, falls Ihre Ressourcen ein Alias eingetragen haben. Beispiel: Eine Ressource mit dem Alias „Kind“ ist innerhalb des Containers mit dem Alias „Eltern“ abgelegt. Die URL für diese Ressource würde nun http://beispiel.de/Eltern/Kind.html lauten.'; -$_lang["use_alias_path_title"] = 'Benutze benutzerfreundliche Alias-Pfadangaben'; -$_lang["use_editor_message"] = 'Möchten Sie den Rich-Text-Editor benutzen? Wenn Sie HTML schreiben möchten, deaktivieren Sie diese Einstellung. Diese Einstellung gilt für alle Benutzer und Ressourcen.'; -$_lang["use_editor_title"] = 'Editor aktivieren'; -$_lang["user"] = 'Benutzer'; -$_lang["user_block"] = 'Deaktiviert'; -$_lang["user_blockedafter"] = 'Gesperrt ab'; -$_lang["user_blockeduntil"] = 'Gesperrt bis'; -$_lang["user_changeddata"] = 'Ihre Daten wurden geändert. Bitte melden Sie sich erneut an.'; -$_lang["user_country"] = 'Land'; -$_lang["user_dob"] = 'Geburtsdatum'; -$_lang["user_doesnt_exist"] = 'Benutzer existiert nicht.'; -$_lang["user_edit_self_msg"] = 'Eventuell müssen Sie sich ab- und wieder anmelden, nachdem Sie Ihre Daten geädert haben.'; -$_lang["user_email"] = 'E-Mail-Adresse'; -$_lang["user_failedlogincount"] = 'Fehlgeschlagene Anmeldungen'; -$_lang["user_fax"] = 'Fax'; -$_lang["user_female"] = 'weiblich'; -$_lang["user_full_name"] = 'Name'; -$_lang["user_gender"] = 'Geschlecht'; -$_lang["user_is_blocked"] = 'Dieser Benutzer ist deaktiviert!'; -$_lang["user_logincount"] = 'Anzahl der Anmeldungen'; -$_lang["user_male"] = 'männlich'; -$_lang["user_management_msg"] = 'Hier können Sie einen Benutzer zur Bearbeitung auswählen.'; -$_lang["user_management_title"] = 'Manager-Benutzer'; -$_lang["user_mobile"] = 'Handynummer'; -$_lang["user_phone"] = 'Telefonnummer'; -$_lang["user_photo"] = 'Benutzerfoto'; -$_lang["user_photo_message"] = 'Geben Sie wahlweise eine URL an oder einen lokalen Pfad für Datei-Upload an.'; -$_lang["user_prevlogin"] = 'Letzte Anmeldung'; -$_lang["user_role"] = 'Benutzerrolle'; -$_lang["user_state"] = 'Region'; -$_lang["user_title"] = 'Benutzer erstellen/bearbeiten'; -$_lang["user_upload_message"] = 'Wenn Sie diesem Benutzer das Hochladen jeglicher Dateitypen untersagen wollen, stellen Sie sicher, dass die „Einstellungen der Systemkonfiguration benutzen“-Checkbox nicht ausgewählt ist und lassen Sie das Feld leer.'; -$_lang["user_use_config"] = 'Einstellungen der Systemkonfiguration benutzen'; -$_lang["user_zip"] = 'PLZ'; -$_lang["username"] = 'Benutzername'; -$_lang["users"] = 'Sicherheit'; -$_lang["valid_hostnames_message"] = 'Verhindern Sie den Missbrauch der site_url Systemeinstellung für eine XSS-Attacke (Cross Site Scripting), indem sie eine durch Kommata getrennte Liste von gültigen Hostnamen für diese Installation angeben. Diese Attacken sind bei bestimmten Shared Host Konfiguationen und bei direkt über eine IP zugänglichen Hosts möglich. Es wird der erste Hostname in der Liste verwendet, wenn der HTTP_HOST keinem gültigen Hostnamen entspricht.'; -$_lang["valid_hostnames_title"] = 'Gültige Hostnamen'; -$_lang["validate_referer_message"] = 'Die HTTP_REFERER-Header können überprüft werden um das Risiko zu verringern, dass Inhaltsredakteure Opfer eines CSRF-Angriffs (Cross Site Request Forgery) werden und unbeabsichtigte Aktionen im Manager durchführen. Einige Konfigurationen unterstützen diese Option nicht, wenn der Server keine HTTP_REFERER-Header sendet.'; -$_lang["validate_referer_title"] = 'HTTP_REFERER-Header überprüfen?'; -$_lang["value"] = 'Wert'; -$_lang["version"] = 'Version'; -$_lang["view"] = 'Ansehen'; -$_lang["view_child_resources_in_container"] = 'Ressourcen in Container anzeigen'; -$_lang["view_log"] = 'Protokoll anzeigen'; -$_lang["view_logging"] = 'Benutzerprotokoll'; -$_lang["view_sysinfo"] = 'Systeminfo'; -$_lang["warning"] = 'Warnung!'; -$_lang["warning_not_saved"] = 'Die Änderungen an Ihrer Ressource wurden bis jetzt nicht gespeichert. Sie können zur vorherigen Ansicht zurück wechseln oder die Ansicht verlassen. Ihre geänderten Daten gehen dann verloren.'; -$_lang["warning_visibility"] = 'Konfigurationswarnungen sind sichtbar für'; -$_lang["warning_visibility_message"] = 'Steuerung der Konfigurationswarnungen auf der Manager-Startseite'; -$_lang["web_access_permissions"] = 'Web-Benutzer-Zugriffsberechtigungen'; -$_lang["web_access_permissions_user_groups"] = 'Web-Benutzergruppen'; -$_lang["web_permissions"] = 'Web-Berechtigungen'; -$_lang["web_user_management_msg"] = 'Hier können Sie auswählen, welche Web-Benutzer Sie bearbeiten möchten. Web-Benutzer können sich nur an der Website anmelden, nicht jedoch im MODX-Manager.'; -$_lang["web_user_management_title"] = 'Web-Benutzer'; -$_lang["web_user_title"] = 'Web-Benutzer erstellen/bearbeiten'; -$_lang["web_users"] = 'Web-Benutzer'; -$_lang["weblink"] = 'Web-Link'; -$_lang["webpwdreminder_message"] = 'Definieren Sie hier die Vorlage der E-Mail, die Ihre Web-Benutzer erhalten wenn sie ein neues Passwort anfordern. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Website Verwalters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis:Sie sollten auf jeden Fall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Web-Benutzer auch die entsprechenden Anmeldedaten erhalten!'; -$_lang["webpwdreminder_title"] = 'Erinnerungs-E-Mail'; -$_lang["websignupemail_message"] = 'Hier können Sie die Nachricht definieren, die an Ihre Benutzer geschickt wird, wenn sie sich anmelden. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Website Verwalters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis: Sie sollten auf jedenfall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Web-Benutzer auch die entsprechenden Anmeldedaten erhalten!'; -$_lang["websignupemail_title"] = 'Registrierungsbestätigung'; -$_lang["wednesday"] = 'Mittwoch'; -$_lang["welcome_messages"] = 'Ihr Posteingang enthält %d Nachricht(en). %s davon sind ungelesen.'; -$_lang["welcome_title"] = 'Willkommen bei MODX'; -$_lang["which_editor_message"] = 'Hier legen Sie fest welchen Rich-Text-Editor Sie verwenden wollen.'; -$_lang["which_editor_title"] = 'Eingesetzter Editor'; -$_lang["working"] = 'Arbeite …'; -$_lang["wrap_lines"] = 'Automatischer Zeilenumbruch'; -$_lang["xhtml_urls_message"] = 'Ersetzt „&“-Zeichen in URLs, die von MODX erzeugt werden mit validen &amp; HTML-Entities.'; -$_lang["xhtml_urls_title"] = 'XHTML-URLs'; -$_lang["yes"] = 'Ja'; -$_lang["you_got_mail"] = 'Sie haben eine E-Mail erhalten'; -$_lang["yourinfo_message"] = 'Dieser Bereich zeigt Ihnen einige Informationen über Sie:'; -$_lang["yourinfo_previous_login"] = 'Ihre letzte Anmeldung:'; -$_lang["yourinfo_role"] = 'Ihre Rolle ist:'; -$_lang["yourinfo_title"] = 'Ihre Informationen'; -$_lang["yourinfo_total_logins"] = 'Anzahl der Anmeldungen:'; -$_lang["yourinfo_username"] = 'Sie sind angemeldet als:'; - -$_lang["a17_error_reporting_title"] = 'PHP-Warnungen/Fehler'; -$_lang["a17_error_reporting_msg"] = 'PHP-Warnungen/Fehler mit dieser Stufe erkennen.'; -$_lang["a17_error_reporting_opt0"] = 'Alle PHP-Warnungen/Fehler ignorieren'; -$_lang["a17_error_reporting_opt1"] = 'Geringfügige PHP-Warnungen ignorieren (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; -$_lang["a17_error_reporting_opt2"] = 'Alle PHP-Warnungen/Fehler außer E_NOTICE erkennen'; -$_lang["a17_error_reporting_opt99"] = 'Alle PHP-Warnungen/Fehler erkennen'; - -$_lang["pwd_hash_algo_title"] = 'Hash Algorithmus'; -$_lang["pwd_hash_algo_message"] = 'Algorithmus für den Passwort-Hash.'; - -$_lang["enable_bindings_title"] = '@Bindings aktivieren'; -$_lang["enable_bindings_message"] = 'Verhindert die Ausführung von PHP-Code innerhalb von @Bindings in Template-Variablen. Nützlich, wenn Sie Manager-Benutzer haben, die keinen PHP-Code einsetzen dürfen, aber Template-Variablen bearbeiten und erstellen dürfen. Die Ausgabe einer Template-Variable mit @Binding lautet in diesem Fall „@Bindings disabled“.'; -$_lang["enable_filter_title"] = 'Filter/Modifier aktivieren'; -$_lang["enable_filter_message"] = 'Filter ermöglichen es, Inhalte von MODX-Tags / TVs innerhalb Ihrer Templates dynamisch zu manipulieren, analog zu PHx. Mehr Informationen'; // todo: change link to documentation -$_lang["enable_filter_phx_warning"] = 'Bei aktiviertem PHx-Plugin sind die nativen MODX-Filter standardmäßig deaktiviert.'; - -$_lang["enable_filter_phx_warning"] = 'Bei aktiviertem PHx-Plugin sind die nativen MODX-Filter standardmäßig deaktiviert.'; - -$_lang["bkmgr_alert_mkdir"] = 'Es konnte keine Wiederherstellungs-Datei erstellt werden. Bitte überprüfen Sie die Verzeichnis-Rechte von [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          Einzelne Tabellen dieser Installation können mit SQL Befehlen wiederhergestellt werden.

          '; -$_lang["bkmgr_restore_title"] = 'Wiederherstellen'; -$_lang["bkmgr_import_ok"] = 'Die Wiederherstellung wurde erfolgreich durchgeführt.'; -$_lang["bkmgr_snapshot_ok"] = 'Ein Wiederherstellungspunkt wurde erfolgreich gespeichert.'; -$_lang["bkmgr_run_sql_file_label"] = 'SQL Datei hochladen'; -$_lang["bkmgr_run_sql_direct_label"] = 'SQL Befehle direkt ausführen'; -$_lang["bkmgr_run_sql_submit"] = 'SQL Befehle ausführen'; -$_lang["bkmgr_run_sql_result"] = 'Ergebnis'; -$_lang["bkmgr_snapshot_title"] = 'Wiederherstellungspunkt speichern und laden'; -$_lang["bkmgr_snapshot_msg"] = '

          Der Inhalt der Datenbank wird in einer Datei gespeichert und kann von dort wiederhergestellt werden.
          Speicherplatz: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; -$_lang["bkmgr_snapshot_submit"] = 'Wiederherstellungspunkt hinzufügen'; -$_lang["bkmgr_snapshot_list_title"] = 'Liste der Wiederherstellungspunkte'; -$_lang["bkmgr_restore_submit"] = 'Diesen Wiederherstellungspunkt zurückspielen'; -$_lang["bkmgr_restore_confirm"] = 'Are you sure you want to revert backup\n[+filename+] ?'; -$_lang["bkmgr_snapshot_nothing"] = 'Keine Wiederherstellungspunkte vorhanden'; - -$_lang["files.dynamic.php1"] = 'Textdatei erstellen'; -$_lang["files.dynamic.php2"] = 'Dieses Verzeichnis kann nicht dargestellt werden.'; -$_lang["files.dynamic.php3"] = 'Es ist ein Problem mit einem Dateinamen aufgetreten.'; -$_lang["files.dynamic.php4"] = 'Die Textdatei wurde erstellt.'; -$_lang["files_dynamic_new_folder_name"] = 'Name des neuen Verzeichnisses:'; -$_lang["files_dynamic_new_file_name"] = 'Name der neuen Datei:'; -$_lang["not_readable_dir"] = 'Das Verzeichnis kann nicht gelesen werden.'; -$_lang["confirm_delete_dir"] = 'Wollen sie dieses Verzeichnis wirklich löschen?'; -$_lang["confirm_delete_dir_recursive"] = 'Wollen sie dieses Verzeichnis wirklich löschen?\n\nAlle Dateien und Verzeichnisse innerhalb dieses Verzeichnisses werden ebenfalls gelöscht.'; - -$_lang["make_folders_title"] = 'Container URL mit abschließendem Schrägstrich'; -$_lang["make_folders_message"] = 'Die URL einer Container-Ressource wird mit einem abschließenden Schrägstrich ausgegeben.'; - -$_lang["check_files_onlogin_title"] = 'Systemdateien überwachen'; -$_lang["check_files_onlogin_message"] = 'Die Dateien in dieser Liste werden bei jedem einloggen auf Veränderungen überprüft. Diese Überprüfung garantiert keine absolute Sicherheit, kann Sie aber nach einem erfolgreichen Angriff auf ein kompromittiertes System aufmerksam machen.'; - -$_lang["configcheck_sysfiles_mod"] = 'Wichtige Systemdateien wurden geändert.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'MODX wurde so konfiguriert, dass wichtige Systemdateien überwacht werden, um mögliche Angriffsversuche frühzeitig zu entdecken. Änderungen an diesen Systemdateien bedeuten nicht zwingend, dass die MODX Installation erfolgreich angegriffen wurde. Aber Sie sollten die überwachten Dateien (siehe in MODX-Konfiguration -> Benutzerverwaltung -> Systemdateien überwachen) überprüfen. Wenn die Dateien unverändert sind oder ein Systemverantwortlicher sie geändert hat, dann speichern Sie die MODX-Konfiguration erneut ab, um diese Meldung zu deaktivieren. Die folgenden Dateien wurden geändert:'; - -$_lang['email_method_title'] = 'Sendmail Methode'; -$_lang['email_method_mail'] = 'PHP mail() Funktion'; -$_lang['email_method_smtp'] = 'SMTP Server'; -$_lang['smtp_auth_title'] = 'SMTP Auth'; -$_lang['smtp_host_title'] = 'SMTP Host'; -$_lang['smtp_secure_title'] = 'SMTP Verschlüsselung'; -$_lang['smtp_username_title'] = 'SMTP Benutzername'; -$_lang['smtp_password_title'] = 'SMTP Passwort'; -$_lang['smtp_port_title'] = 'SMTP Port'; - -$_lang["setting_resource_tree_node_name"] = 'Titel eines Knotens im Ressourcen-Baum'; -$_lang["setting_resource_tree_node_name_desc"] = 'Wählen Sie das Ressourcen-Feld, welches als Titel eines Knotens ausgegeben wird, wenn der Ressourcen-Baum dargestellt wird.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Hinweis: Ab MODX 1.1 ist es möglich den Anzeigename der einzelnen Ressourcen im Ressourcenbaum selber vorzunehmen. Die o.g. Einstellung wird genutzt, wenn als Anzeigename "Default" ausgewählt wurde.'; - -$_lang["resource_opt_alvisibled"] = 'Alias im Alias-Pfad ausgeben'; -$_lang["resource_opt_alvisibled_help"] = 'Den Alias dieser Ressource im generierten Alias-Pfad ausgeben.'; -$_lang['resource_opt_is_published'] = 'Veröffentlicht'; -$_lang["docid_incrmnt_method_title"] = 'Vergabe einer neuen Ressourcen-ID '; -$_lang["docid_incrmnt_method_0"] = 'DB Autoinkrement'; -$_lang["docid_incrmnt_method_1"] = 'Kleinste fehlende ID'; -$_lang["docid_incrmnt_method_2"] = 'Größte ID + 1'; - -$_lang["cache_type_title"] = 'Ressourcen-Cache'; -$_lang["cache_type_1"] = 'Der Cache basiert nur auf der Ressoucen-ID (Standard)'; -$_lang["cache_type_2"] = 'Der Cache basiert auf Ressoucen-ID and $_GET Parametern'; -$_lang["seostrict_title"] = 'SEO strikte URLs benutzen'; -$_lang["seostrict_message"] = 'Erzwingt die Benutzung von strikten URLs um doppelten Inhalt zu vermeiden.'; -$_lang["aliaslistingfolder_title"] = 'AliasListing aktivieren'; -$_lang["aliaslistingfolder_message"] = 'Reduziert den Speicherverbrauch bei einer großen Anzahl von Ressourcen (+10.000)'; - -$_lang["settings_friendlyurls_alert"] = 'Wenn Sie benutzerfreundliche URLs aktivieren wollen, ist es notwendig, die „ht.access“ Datei im Webroot der MODX Installation in „.htaccess“ umzubenennen.'; -$_lang["settings_friendlyurls_alert2"] = 'Da MODX in einem Unterverzeichnis installiert worden ist, ist es notwendig, den Inhalt der „.htaccess“ Datei zu verändern.'; - -$_lang["user_street"] = 'Straße'; -$_lang["user_city"] = 'Stadt'; -$_lang["user_other"] = 'anders'; - -$_lang["import_site.static.php1"] = 'Ressourcen-Baum zurücksetzen'; -$_lang["import_site.static.php2"] = 'Ressourcen-Baum zurücksetzen und alle Ressoucen-IDs neu initialisieren.'; -$_lang["import_site.static.php3"] = 'Ziel'; -$_lang["import_site.static.php4"] = 'Nur den <body></body> Bereich'; -$_lang["import_site.static.php5"] = 'Den gesamten Dateiinhalt'; - -$_lang["a83_ignore_ids_title"] = 'IDs ignorieren (kommasepariert)'; -$_lang["export_site.static.php1"] = 'Ziel'; -$_lang["export_site.static.php2"] = 'Nur bearbeitete Ressourcen'; -$_lang["export_site.static.php3"] = 'Alle Ressourcen'; -$_lang["export_site.static.php4"] = 'Suchen nach'; -$_lang["export_site.static.php5"] = 'Ersetzen mit'; -$_lang["export_site.static.php6"] = 'Ziel'; -$_lang["export_site.static.php7"] = 'Dateien können nicht in [+rb_base_url+] gespeichert werden'; - -$_lang["mutate_settings.dynamic.php6"] = 'E-Mail Benachrichtigung bei MODX Fehlern'; -$_lang["mutate_settings.dynamic.php7"] = 'Nicht benachrichtigen'; -$_lang["mutate_settings.dynamic.php8"] = '[(emailsender)] ([+emailsender+]) wird bei einem MODX Systemfehler per E-Mail benachrichtigt. Die Details zur jeweiligen Fehlermeldung können im MODX Systemereignisprotokoll angeschaut werden.'; - -$_lang["error_no_privileges"] = "Sie haben nicht genügend Rechte, um diese Aktion auszuführen!"; -$_lang["error_no_optimise_tablename"] = "Die zu optimierende Tabelle wurde nicht gefunden!"; -$_lang["error_no_truncate_tablename"] = "Die zu leerende Tabelle wurde nicht gefunden!"; -$_lang["error_double_action"] = "Doppelte Aktion (GET & POST) angeben!"; -$_lang["error_no_id"] = "Es wurde keine Ressourcen ID in der Abfrage angegeben!"; -$_lang["error_id_nan"] = "Die übergebene ID ist nicht numerisch!"; -$_lang["error_no_parent"] = "Konnte den Namen der Eltern-Ressource nicht finden!"; -$_lang["error_many_results"] = "Es wurden zu viele Ergebnisse aus der Datenbank zurückgegeben!"; -$_lang["error_no_results"] = "Es wurden zu wenige/keine Ergebnisse aus der Datenbank zurückgegeben!"; -$_lang["error_no_user_selected"] = "Es wurde kein Benutzer als Empfänger der Nachricht ausgewählt!"; -$_lang["error_no_group_selected"] = "Es wurde keine Benutzergruppe als Empfänger der Nachricht ausgewählt!"; -$_lang["error_movedocument1"] = "Eine Ressource kann nicht ihre eigene Elternressource sein!"; -$_lang["error_movedocument2"] = "Es wurde keine Ressourcen ID in der Abfrage angegeben!"; -$_lang["error_movedocument3"] = "Es wurde keine Elternressource in der Abfrage angegeben!"; - -$_lang["login_processor_unknown_user"] = "Benutzername oder Passwort falsch eingegeben!"; -$_lang["login_processor_wrong_password"] = "Benutzername oder Passwort falsch eingegeben!"; -$_lang["login_processor_many_failed_logins"] = "Aufgrund von zu vielen fehlerhaften Anmeldeversuchen wurden Sie gesperrt!"; -$_lang["login_processor_blocked1"] = "Sie wurden gesperrt und können sich nicht anmelden!"; -$_lang["login_processor_blocked2"] = "Sie wurden gesperrt und können sich nicht anmelden! Probieren Sie es später noch einmal!"; -$_lang["login_processor_blocked3"] = "Sie wurden automatisch zu einem bestimmten Datum gesperrt und können sich nicht mehr anmelden!"; -$_lang["login_processor_bad_code"] = "Der Sicherheitscode stimmt nicht überein! Bitte loggen Sie sich erneut ein!"; -$_lang["login_processor_remotehost_ip"] = "Der gespeicherte Hostname ist nicht unter Ihrer IP-Adresse erreichbar!"; -$_lang["login_processor_remote_ip"] = "Sie können sich von dieser IP-Adresse nicht einloggen."; -$_lang["login_processor_date"] = "Sie wurden gesperrt und können sich nicht anmelden! Probieren Sie es später noch einmal!"; -$_lang["login_processor_captcha_config"] = "Das Captcha ist falsch konfiguriert."; - -$_lang["dp_dayNames"] = "['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']"; -$_lang["dp_monthNames"] = "['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']"; -$_lang["dp_startDay"] = "1"; - -$_lang["check_all"] = "Alles auswählen"; -$_lang["check_none"] = "Nichts auswählen"; -$_lang["check_toggle"] = "Auswahl umkehren"; - -$_lang["version_notices"] = "Versionshinweise"; - -$_lang["em_button_shift"] = "(Shift-Mausklick um mehrere Fenster zu öffnen)"; - -$_lang["reset_sysfiles_checksum_button"] = "Checksummen aktualisieren"; -$_lang["reset_sysfiles_checksum_alert"] = "Sind Sie sicher, dass Sie die Checksummen aktualisieren möchten?"; - -$_lang["file_browser_disabled_msg"] = "Der Datei-Browser ist deaktiviert."; -$_lang["which_browser_default_title"]= "Standard Datei-Browser"; -$_lang["which_browser_default_msg"]= "Wählen Sie den bevorzugten Standard Datei-Browser. Falls erforderlich kann der Datei-Browser in den Benutzereinstellungen je Benutzer angepasst werden."; -$_lang["which_browser_title"]= "Datei-Browser"; -$_lang["which_browser_msg"]= "Sie können einen Datei-Browser speziell für diesen Nutzer auswählen. "Standard" nutzt den in der MODX-Konfiguration gesetzten Standard Datei-Browser,"; -$_lang["option_default"] = "Standard"; - -$_lang['evo_downloads_title'] = "Evolution Downloads"; -$_lang['help_translating_title'] = "Helfen Sie, MODX Evolution zu übersetzen"; -$_lang['download'] = "Download"; -$_lang['downloads'] = "Downloads"; -$_lang["previous_releases"] = "Vorgängerversionen"; -$_lang["extras"] = "Extras"; - -$_lang["display_locks"] = "Sperren anzeigen"; -$_lang["role_display_locks"] = "Sperren anzeigen"; -$_lang["session_timeout"] = "Zeitlimit pro Session"; -$_lang["session_timeout_msg"] = "MODX sendet pro Minute eine Anfrage an den Server um das Mailersymbol zu aktualisieren und die Session aufrecht zu erhalten. Wenn die letzte Anfrage diesen Zeitraum überschreitet, wird die entsprechende Session als ungültig erklärt und Recourcen-Sperren automatisch entfernt (in Minuten angeben, >2min, standard 15min)"; -$_lang["unlock_element_id_warning"] = "Sind Sie sicher, dass Sie [+element_type+] ID[+id+] entsperren möchten?"; -$_lang["lock_element_type_1"] = "Template"; -$_lang["lock_element_type_2"] = "Template-Variable"; -$_lang["lock_element_type_3"] = "Chunk"; -$_lang["lock_element_type_4"] = "Snippet"; -$_lang["lock_element_type_5"] = "Plugin"; -$_lang["lock_element_type_6"] = "Modul"; -$_lang["lock_element_type_7"] = "Ressource"; -$_lang["lock_element_type_8"] = "Rolle"; -$_lang["lock_element_editing"] = "[+element_type+] in Bearbeitung durch Sie seit\n[+lasthit_df+]"; -$_lang["lock_element_locked_by"] = "[+element_type+] in Bearbeitung durch Benutzer\n[+username+] seit [+lasthit_df+]"; - -$_lang["minifyphp_incache_title"] = 'PHP-Code im Seitencache minimieren'; -$_lang["minifyphp_incache_message"] = 'PHP-Codes minimieren (Snippets und Plugins) bevor sie im Seitencache gespeichert werden. Ref: #938'; - -$_lang["logout_reminder_msg"] = "Erinnerung: Es scheint als haben Sie am [+date+] vergessen sich abzumelden. Bitte beachten Sie in Zukunft, sich nach Beendigung Ihrer Arbeiten abzumelden."; - -$_lang["allow_eval_title"] = "PHP-eval() in Snippet-Aufrufen erlauben"; -$_lang["allow_eval_msg"] = "Für Entwickler: Bitte nutzen Sie bei zukünftigen Entwicklungen \$modx->safeEval() anstelle von eval()."; -$_lang["allow_eval_with_scan"] = "Nur zulässige Funktionen ausführen"; -$_lang["allow_eval_with_scan_at_post"] = "Alle ausführen, jedoch bei POST-Anfragen nur zulässige Funktionen"; -$_lang["allow_eval_everytime_eval"] = "Alle Funktionen ausführen (nur für Fehlersuche / Debugging)"; -$_lang["allow_eval_dont_eval"] = "Keine Funktionen ausführen"; - -$_lang["safe_functions_at_eval_title"] = "Zulässige Funktionen"; -$_lang["safe_functions_at_eval_msg"] = "Komma-separierte Liste"; +Ihr Website-Administrator'; +$_lang["table_hoverinfo"] = 'Wenn Sie mit dem Mauszeiger über einen Tabellennamen fahren, wird Ihnen (sofern verfügbar) eine kurze Beschreibung der Funktion dieser Tabelle angezeigt.'; +$_lang["table_prefix"] = 'Tabellen-Präfix'; +$_lang["tag"] = 'Tag'; +$_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; +$_lang["template_assignedtv_tab"] = 'Zugewiesene Template-Variablen'; +$_lang["template_code"] = 'Template-Code (HTML)'; +$_lang["template_desc"] = 'Template-Beschreibung'; +$_lang["template_edit_tab"] = 'Template bearbeiten'; +$_lang["template_management_msg"] = 'Hier können Sie ein Template wählen, das Sie bearbeiten möchten.'; +$_lang["template_msg"] = 'Hier können Sie Templates anlegen und bearbeiten. Die Änderung an einem Template wird nur angezeigt, wenn Sie den Cache leeren. Sie können aber die Vorschaufunktion nutzen, um das Template anzuzeigen.'; +$_lang["template_name"] = 'Template-Name'; +$_lang["template_no_tv"] = 'Diesem Template wurden noch keine Template-Variablen zugewiesen.'; +$_lang["template_notassigned_tv"] = 'Diese Template-Variablen können zugewiesen werden.'; +$_lang["template_reset_all"] = 'Alle Ressourcen auf das Standard-Template zurücksetzen'; +$_lang["template_reset_specific"] = 'Template nur bei Ressourcen mit dem aktuellen Template „%s“ setzen'; +$_lang["template_selectable"] = 'Template ist auswählbar, wenn eine Resource erstellt oder bearbeitet wird.'; +$_lang["template_title"] = 'Template erstellen/bearbeiten'; +$_lang["template_tv_edit"] = 'Reihenfolge der Template-Variablen bearbeiten'; +$_lang["template_tv_edit_message"] = 'Reihenfolge der Template-Variablen für dieses Template durch Drag & Drop sortieren.'; +$_lang["template_tv_edit_title"] = 'Reihenfolge Template-Variablen'; +$_lang["template_tv_msg"] = 'Liste der Template-Variablen, die diesem Template zugeordnet wurden.'; +$_lang["thursday"] = 'Donnerstag'; +$_lang["tmplvar_access_msg"] = 'Wählen Sie jene Ressourcen-Gruppen aus, die diese Template-Variable bearbeiten dürfen.'; +$_lang["tmplvar_change_template_msg"] = 'Wenn Sie das Template ändern, werden die Template-Variablen neu geladen. Achtung: alle nicht gespeicherten Änderungen gehen hierbei verloren!\n\nSind Sie sicher, dass Sie das Template ändern möchten?'; +$_lang["tmplvar_inuse"] = 'Folgende Ressourcen verwenden derzeit diese Template-Variable. Wollen Sie mit dem Löschen fortfahren?'; +$_lang["tmplvar_tmpl_access"] = 'Template-Berechtigungen'; +$_lang["tmplvar_tmpl_access_msg"] = 'Wählen Sie hier jene Templates aus, die diese Template-Variable verarbeiten dürfen.'; +$_lang["tmplvar"] = 'Template-Variable'; +$_lang["tmplvars"] = 'Template-Variablen'; +$_lang["tmplvars_binding_msg"] = 'Dieses Feld unterstützt Datenbindung mittels des @ Befehls'; +$_lang["tmplvars_caption"] = 'Bezeichnung'; +$_lang["tmplvars_default"] = 'Standardwert'; +$_lang["tmplvars_description"] = 'Beschreibung'; +$_lang["tmplvars_elements"] = 'Eingabeoptionswerte'; +$_lang["tmplvars_inherited"] = 'Wert geerbt'; +$_lang["tmplvars_management_msg"] = 'Hier können Sie Ihre Template-Variablen bearbeiten.'; +$_lang["tmplvars_msg"] = 'Hier können Sie Template-Variablen erstellen und bearbeiten. Die Template-Variablen müssen für die jeweiligen Templates aktiviert werden, damit Snippets und Ressourcen darauf wie normale Variablen zugreifen können.'; +$_lang["tmplvars_name"] = 'Name der Template-Variable'; +$_lang["tmplvars_novars"] = 'Keine Template-Variablen gefunden'; +$_lang["tmplvars_rank"] = 'Sortierung'; +$_lang["tmplvars_rank_edit_message"] = 'Reihenfolge der aufgelisteten Template-Variablen durch Drag&Drop sortieren.'; +$_lang["tmplvars_reset_params"] = 'Parameter zurücksetzen'; +$_lang["tmplvars_title"] = 'Template-Variable erstellen/bearbeiten'; +$_lang["tmplvars_type"] = 'Eingabetyp'; +$_lang["tmplvars_widget"] = 'Objektauswahl'; +$_lang["tmplvars_widget_prop"] = 'Objekt Eigenschaften'; +$_lang["to"] = 'bis'; +$_lang["toggle_fullscreen"] = 'Vollbild-Modus'; +$_lang["tools"] = 'Werkzeuge'; +$_lang["top_howmany_message"] = 'Die Länge der Top Liste. Zum Beispiel: Top 10 Liste.'; +$_lang["top_howmany_title"] = 'Top Liste'; +$_lang["total"] = 'insgesamt'; +$_lang["track_visitors_message"] = 'Die Protokollierung der Besucher ermöglicht die Erstellung einer Besucherstatistik, es verlangsamt allerdings die Darstellung der Seite ein wenig .'; +$_lang["track_visitors_title"] = 'Besucherprotokollierung'; +$_lang["tree_page_click"] = 'Klickverhalten'; +$_lang["tree_page_click_message"] = 'Standardverhalten beim Klicken im Manager Tree.'; +$_lang["use_breadcrumbs"] = 'Brotkrumenpfad anzeigen'; +$_lang["use_breadcrumbs_message"] = 'Zeigt einen Brotkrumenpfad an wenn eine Resource erstellt oder bearbeitet wird.'; +$_lang["tree_show_protected"] = 'Zeige geschützte Ressourcen'; +$_lang["tree_show_protected_message"] = 'Wenn auf „Nein“ gesetzt, erscheinen geschützte Ressourcen (inklusive der Unter-Ressourcen) nicht im Strukturbaum, das heißt Manager-Benutzer ohne Berechtigung diese Ressourcen zu bearbeiten sehen sie nicht. „Nein“ ist die Standardeinstellung.'; +$_lang["truncate_table"] = 'Klicken Sie hier, um die Tabelle zu schließen'; +$_lang["tuesday"] = 'Dienstag'; +$_lang["tv"] = 'TV'; +$_lang["type"] = 'Typ'; +$_lang["udperms_allowroot_message"] = 'Möchten Sie Ihren Benutzern die Erstellung von Ressourcen im Hauptverzeichnis der Seite erlauben? '; +$_lang["udperms_allowroot_title"] = 'Hauptverzeichnis-Erlaubnis'; +$_lang["udperms_message"] = 'Die Zugriffskontrolle erlaubt Ihnen festzulegen, welche Seiten von welchem Benutzer bearbeitet werden können. Die Zugriffskontrolle erlaubt Ihnen mit Hilfe von Benutzergruppen und Ressourcen-Gruppen festzulegen, welche Seiten von welchem Benutzer bearbeitet werden können.'; +$_lang["udperms_title"] = 'Benutzerzugriffskontrolle'; +$_lang["unable_set_link"] = 'Der Link konnte nicht gesetzt werden!'; +$_lang["unable_set_parent"] = 'Setzen des neuen Containers nicht möglich!'; +$_lang["unauthorizedpage_message"] = 'Geben Sie die ID der Ressource an, zu welchem Benutzer bei einem unautorisierten Zugriff weitergeleitet werden. Hinweis: Stellen Sie sicher, das diese Ressource vorhanden und veröffentlicht ist!'; +$_lang["unauthorizedpage_title"] = 'unautorisierter Zugriff'; +$_lang["unblock_message"] = 'Dieser Benutzer wird freigeschaltet sein, nachdem Sie die Benutzerdaten gespeichert haben.'; +$_lang["undelete_resource"] = 'Wiederherstellen'; +$_lang["unpublish_date"] = 'Termin zum Zurückziehen'; +$_lang["unpublish_events"] = 'Zurückziehungen'; +$_lang["unpublish_resource"] = 'Zurückziehen'; +$_lang["untitled_resource"] = 'Unbenannte Ressource'; +$_lang["untitled_weblink"] = 'Unbenannter Web-Link'; +$_lang["update_params"] = 'Parameteranzeige aktualisieren'; +$_lang["update_settings_from_language"] = 'Aktuelle ersetzen durch:'; +$_lang["upload_maxsize_message"] = 'Geben Sie hier die maximale Dateigröße für den Datei-Upload mit dem Datei-Manager an. Die Größenangabe ist in Bytes. Achtung: je größer die Datei desto länger dauert der Upload!'; +$_lang["upload_maxsize_title"] = 'Maximale Upload-Dateigröße'; +$_lang["uploadable_files_message"] = 'Hier können Sie angeben welche Dateitypen über den Filemanager hochgeladen werden können. Bitte geben Sie die Dateierweiterungen mit Komma getrennt ein.'; +$_lang["uploadable_files_title"] = 'Hochladbare Dateitypen'; +$_lang["uploadable_flash_message"] = 'Datei-Upload nach „assets/flash/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; +$_lang["uploadable_flash_title"] = 'Hochladbare Flash-Dateien'; +$_lang["uploadable_images_message"] = 'Bilder-Upload nach „assets/images/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; +$_lang["uploadable_images_title"] = 'Hochladbare Bildformate'; +$_lang["uploadable_media_message"] = 'Medien-Upload nach „assets/media/“ mit dem Datei-Browser. Mehrere Dateien bitte mit Komma trennen.'; +$_lang["uploadable_media_title"] = 'Hochladbare Medien-Formate'; +$_lang["use_alias_path_message"] = 'Wenn Sie diese Option mit „Ja“ einstellen, werden Ihre Ressourcen mit den vollen Pfadangaben angezeigt, falls Ihre Ressourcen ein Alias eingetragen haben. Beispiel: Eine Ressource mit dem Alias „Kind“ ist innerhalb des Containers mit dem Alias „Eltern“ abgelegt. Die URL für diese Ressource würde nun http://beispiel.de/Eltern/Kind.html lauten.'; +$_lang["use_alias_path_title"] = 'Benutze benutzerfreundliche Alias-Pfadangaben'; +$_lang["use_editor_message"] = 'Möchten Sie den Rich-Text-Editor benutzen? Wenn Sie HTML schreiben möchten, deaktivieren Sie diese Einstellung. Diese Einstellung gilt für alle Benutzer und Ressourcen.'; +$_lang["use_editor_title"] = 'Editor aktivieren'; +$_lang["use_global_tabs"] = 'Globale Tabs verwenden'; +$_lang["user"] = 'Benutzer'; +$_lang["user_block"] = 'Deaktiviert'; +$_lang["user_blockedafter"] = 'Gesperrt ab'; +$_lang["user_blockeduntil"] = 'Gesperrt bis'; +$_lang["user_changeddata"] = 'Ihre Daten wurden geändert. Bitte melden Sie sich erneut an.'; +$_lang["user_country"] = 'Land'; +$_lang["user_dob"] = 'Geburtsdatum'; +$_lang["user_doesnt_exist"] = 'Benutzer existiert nicht.'; +$_lang["user_edit_self_msg"] = 'Eventuell müssen Sie sich ab- und wieder anmelden, nachdem Sie Ihre Daten geädert haben.'; +$_lang["user_email"] = 'E-Mail-Adresse'; +$_lang["user_failedlogincount"] = 'Fehlgeschlagene Anmeldungen'; +$_lang["user_fax"] = 'Fax'; +$_lang["user_female"] = 'weiblich'; +$_lang["user_full_name"] = 'Name'; +$_lang["user_gender"] = 'Geschlecht'; +$_lang["user_is_blocked"] = 'Dieser Benutzer ist deaktiviert!'; +$_lang["user_logincount"] = 'Anzahl der Logins'; +$_lang["user_male"] = 'männlich'; +$_lang["user_management_msg"] = 'Hier können Sie einen Benutzer zur Bearbeitung auswählen.'; +$_lang["user_management_title"] = 'Manager-Benutzer'; +$_lang["user_mobile"] = 'Handynummer'; +$_lang["user_phone"] = 'Telefonnummer'; +$_lang["user_photo"] = 'Benutzerfoto'; +$_lang["user_photo_message"] = 'Geben Sie wahlweise eine URL an oder einen lokalen Pfad für Datei-Upload an.'; +$_lang["user_prevlogin"] = 'Letzte Anmeldung'; +$_lang["user_role"] = 'Benutzerrolle'; +$_lang["user_state"] = 'Region'; +$_lang["user_title"] = 'Manager-Benutzer erstellen/bearbeiten'; +$_lang["user_upload_message"] = 'Wenn Sie diesem Benutzer das Hochladen jeglicher Dateitypen untersagen wollen, stellen Sie sicher, dass die „Einstellungen der Systemkonfiguration benutzen“-Checkbox nicht ausgewählt ist und lassen Sie das Feld leer.'; +$_lang["user_use_config"] = 'Einstellungen der Systemkonfiguration benutzen'; +$_lang["user_zip"] = 'PLZ'; +$_lang["username"] = 'Benutzername'; +$_lang["users"] = 'Benutzer'; +$_lang["valid_hostnames_message"] = 'Verhindern Sie den Missbrauch der site_url Systemeinstellung für eine XSS-Attacke (Cross Site Scripting), indem sie eine durch Kommata getrennte Liste von gültigen Hostnamen für diese Installation angeben. Diese Attacken sind bei bestimmten Shared Host Konfiguationen und bei direkt über eine IP zugänglichen Hosts möglich. Es wird der erste Hostname in der Liste verwendet, wenn der HTTP_HOST keinem gültigen Hostnamen entspricht.'; +$_lang["valid_hostnames_title"] = 'Gültige Hostnamen'; +$_lang["validate_referer_message"] = 'Die HTTP_REFERER-Header können überprüft werden um das Risiko zu verringern, dass Inhaltsredakteure Opfer eines CSRF-Angriffs (Cross Site Request Forgery) werden und unbeabsichtigte Aktionen im Manager durchführen. Einige Konfigurationen unterstützen diese Option nicht, wenn der Server keine HTTP_REFERER-Header sendet.'; +$_lang["validate_referer_title"] = 'HTTP_REFERER-Header überprüfen?'; +$_lang["value"] = 'Wert'; +$_lang["version"] = 'Version'; +$_lang["view"] = 'Ansehen'; +$_lang["view_child_resources_in_container"] = 'Ressourcen in Container anzeigen'; +$_lang["view_log"] = 'Protokoll anzeigen'; +$_lang["view_logging"] = 'Benutzerprotokoll'; +$_lang["view_sysinfo"] = 'Systeminfo'; +$_lang["warning"] = 'Warnung!'; +$_lang["warning_not_saved"] = 'Die Änderungen an Ihrer Ressource wurden bis jetzt nicht gespeichert. Sie können zur vorherigen Ansicht zurück wechseln oder die Ansicht verlassen. Ihre geänderten Daten gehen dann verloren.'; +$_lang["warning_visibility"] = 'Konfigurationswarnungen sind sichtbar für'; +$_lang["warning_visibility_message"] = 'Steuerung der Konfigurationswarnungen auf der Manager-Startseite'; +$_lang["web_access_permissions"] = 'Web-Benutzer-Zugriffsberechtigungen'; +$_lang["web_access_permissions_user_groups"] = 'Web-Benutzergruppen'; +$_lang["web_permissions"] = 'Web-Berechtigungen'; +$_lang["web_user_management_msg"] = 'Hier können Sie auswählen, welche Web-Benutzer Sie bearbeiten möchten. Web-Benutzer können sich nur an der Website anmelden, nicht jedoch im MODX-Manager.'; +$_lang["web_user_management_title"] = 'Web-Benutzer'; +$_lang["web_user_title"] = 'Web-Benutzer erstellen/bearbeiten'; +$_lang["web_users"] = 'Web-Benutzer'; +$_lang["weblink"] = 'Web-Link'; +$_lang["webpwdreminder_message"] = 'Definieren Sie hier die Vorlage der E-Mail, die Ihre Web-Benutzer erhalten wenn sie ein neues Passwort anfordern. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Website Verwalters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis:Sie sollten auf jeden Fall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Web-Benutzer auch die entsprechenden Anmeldedaten erhalten!'; +$_lang["webpwdreminder_title"] = 'Erinnerungs-E-Mail'; +$_lang["websignupemail_message"] = 'Hier können Sie die Nachricht definieren, die an Ihre Benutzer geschickt wird, wenn sie sich anmelden. Folgende Platzhalter werden vom System ersetzt, wenn die Nachricht versendet wird:

          [+sname+] – Name dieser Website
          [+saddr+] – E-Mail-Adresse des Website Verwalters
          [+surl+] – URL der Website
          [+uid+] – Name des Benutzerkontos
          [+pwd+] – Passwort des Benutzerkontos
          [+ufn+] – Name des Benutzers

          Hinweis: Sie sollten auf jedenfall [+uid+] und [+pwd+] in der Vorlage anführen, damit Ihre Web-Benutzer auch die entsprechenden Anmeldedaten erhalten!'; +$_lang["websignupemail_title"] = 'Registrierungsbestätigung'; +$_lang["allow_multiple_emails_title"] = 'Doppelte Emailadressen für Web-Benutzer erlauben'; +$_lang["allow_multiple_emails_message"] = 'Erlaubt es Web-Benutzern dieselbe Emailadresse für mehrere Benutzerkonten zu verwenden, zum Beispiel wenn einem Benutzer seine eigene Emailadresse nicht zur Verfügung steht oder es nur eine einzige Familien-Emailadresse gibt.
          Achtung: Sämtliche Passwort-Wiederherstellungs- und Registrierungs-Funktionen müssen von vornherein diese Einstellung beachten.'; +$_lang["wednesday"] = 'Mittwoch'; +$_lang["welcome_messages"] = 'Ihr Posteingang enthält %d Nachricht(en). %s davon sind ungelesen.'; +$_lang["welcome_title"] = 'Willkommen im EVO Manager'; +$_lang["which_editor_message"] = 'Hier legen Sie fest welchen Rich-Text-Editor Sie verwenden wollen. Sie können weitere RTEs auf der EVO Download-Seite finden.'; +$_lang["which_editor_title"] = 'Eingesetzter Editor'; +$_lang["working"] = 'Arbeite …'; +$_lang["wrap_lines"] = 'Automatischer Zeilenumbruch'; +$_lang["xhtml_urls_message"] = 'Ersetzt „&“-Zeichen in URLs, die von EVO erzeugt werden mit validen &amp; HTML-Entities.'; +$_lang["xhtml_urls_title"] = 'XHTML-URLs'; +$_lang["yes"] = 'Ja'; +$_lang["you_got_mail"] = 'Sie haben eine E-Mail erhalten'; +$_lang["yourinfo_message"] = 'Dieser Bereich zeigt Ihnen einige Informationen über Sie:'; +$_lang["yourinfo_previous_login"] = 'Ihre letzte Anmeldung:'; +$_lang["yourinfo_role"] = 'Ihre Rolle ist:'; +$_lang["yourinfo_title"] = 'Ihre Informationen'; +$_lang["yourinfo_total_logins"] = 'Anzahl der Anmeldungen:'; +$_lang["yourinfo_username"] = 'Sie sind angemeldet als:'; + +$_lang["a17_error_reporting_title"] = 'PHP-Warnungen/Fehler'; +$_lang["a17_error_reporting_msg"] = 'PHP-Warnungen/Fehler mit dieser Stufe erkennen.'; +$_lang["a17_error_reporting_opt0"] = 'Alle PHP-Warnungen/Fehler ignorieren'; +$_lang["a17_error_reporting_opt1"] = 'Geringfügige PHP-Warnungen ignorieren (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; +$_lang["a17_error_reporting_opt2"] = 'Alle PHP-Warnungen/Fehler außer E_NOTICE erkennen'; +$_lang["a17_error_reporting_opt99"] = 'Alle PHP-Warnungen/Fehler erkennen'; + +$_lang["pwd_hash_algo_title"] = 'Hash Algorithmus'; +$_lang["pwd_hash_algo_message"] = 'Algorithmus für den Passwort-Hash.'; + +$_lang["enable_bindings_title"] = '@Bindings aktivieren'; +$_lang["enable_bindings_message"] = 'Verhindert die Ausführung von PHP-Code innerhalb von @Bindings in Template-Variablen. Nützlich, wenn Sie Manager-Benutzer haben, die keinen PHP-Code einsetzen dürfen, aber Template-Variablen bearbeiten und erstellen dürfen. Die Ausgabe einer Template-Variable mit @Binding lautet in diesem Fall „@Bindings disabled“.'; +$_lang["enable_filter_title"] = 'Filter/Modifier aktivieren'; +$_lang["enable_filter_message"] = 'Filter ermöglichen es, Inhalte von MODX-Tags / TVs innerhalb Ihrer Templates dynamisch zu manipulieren, analog zu PHx. Mehr Informationen'; // todo: change link to documentation +$_lang["enable_filter_phx_warning"] = 'Bei aktiviertem PHx-Plugin sind die nativen MODX-Filter standardmäßig deaktiviert.'; + +$_lang["enable_filter_phx_warning"] = 'Bei aktiviertem PHx-Plugin sind die nativen MODX-Filter standardmäßig deaktiviert.'; + +$_lang["enable_at_syntax_title"] = '<@SYNTAX> aktivieren'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) ist eine simple Template-Syntax.'; + +$_lang["bkmgr_alert_mkdir"] = 'Es konnte keine Wiederherstellungs-Datei erstellt werden. Bitte überprüfen Sie die Verzeichnis-Rechte von [+snapshot_path+]'; +$_lang["bkmgr_restore_msg"] = '

          Einzelne Tabellen dieser Installation können mit SQL Befehlen wiederhergestellt werden.

          '; +$_lang["bkmgr_restore_title"] = 'Wiederherstellen'; +$_lang["bkmgr_import_ok"] = 'Die Wiederherstellung wurde erfolgreich durchgeführt.'; +$_lang["bkmgr_snapshot_ok"] = 'Ein Wiederherstellungspunkt wurde erfolgreich gespeichert.'; +$_lang["bkmgr_run_sql_file_label"] = 'SQL Datei hochladen'; +$_lang["bkmgr_run_sql_direct_label"] = 'SQL Befehle direkt ausführen'; +$_lang["bkmgr_run_sql_submit"] = 'SQL Befehle ausführen'; +$_lang["bkmgr_run_sql_result"] = 'Ergebnis'; +$_lang["bkmgr_snapshot_title"] = 'Wiederherstellungspunkt speichern und laden'; +$_lang["bkmgr_snapshot_msg"] = '

          Der Inhalt der Datenbank wird in einer Datei gespeichert und kann von dort wiederhergestellt werden.
          Speicherplatz: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_submit"] = 'Wiederherstellungspunkt hinzufügen'; +$_lang["bkmgr_snapshot_list_title"] = 'Liste der Wiederherstellungspunkte'; +$_lang["bkmgr_restore_submit"] = 'Diesen Wiederherstellungspunkt zurückspielen'; +$_lang["bkmgr_restore_confirm"] = 'Sind Sie sicher, dass Sie dieses Backup zurückspielen möchten\n[+filename+] ?'; +$_lang["bkmgr_snapshot_nothing"] = 'Keine Wiederherstellungspunkte vorhanden'; + +$_lang["files.dynamic.php1"] = 'Textdatei erstellen'; +$_lang["files.dynamic.php2"] = 'Dieses Verzeichnis kann nicht dargestellt werden.'; +$_lang["files.dynamic.php3"] = 'Es ist ein Problem mit einem Dateinamen aufgetreten.'; +$_lang["files.dynamic.php4"] = 'Die Textdatei wurde erstellt.'; +$_lang["files.dynamic.php5"] = 'Datei konnte nicht dupliziert werden.'; +$_lang["files.dynamic.php6"] = 'Datei oder Verzeichnis konnte nicht umbenannt werden.'; +$_lang["files_dynamic_new_folder_name"] = 'Name des neuen Verzeichnisses:'; +$_lang["files_dynamic_new_file_name"] = 'Name der neuen Datei:'; +$_lang["not_readable_dir"] = 'Das Verzeichnis kann nicht gelesen werden.'; +$_lang["confirm_delete_dir"] = 'Wollen sie dieses Verzeichnis wirklich löschen?'; +$_lang["confirm_delete_dir_recursive"] = 'Wollen sie dieses Verzeichnis wirklich löschen?\n\nAlle Dateien und Verzeichnisse innerhalb dieses Verzeichnisses werden ebenfalls gelöscht.'; + +$_lang["make_folders_title"] = 'Container URL mit abschließendem Schrägstrich'; +$_lang["make_folders_message"] = 'Die URL einer Container-Ressource wird mit einem abschließenden Schrägstrich ausgegeben.'; + +$_lang["check_files_onlogin_title"] = 'Systemdateien überwachen'; +$_lang["check_files_onlogin_message"] = 'Die Dateien in dieser Liste werden bei jedem einloggen auf Veränderungen überprüft. Diese Überprüfung garantiert keine absolute Sicherheit, kann Sie aber nach einem erfolgreichen Angriff auf ein kompromittiertes System aufmerksam machen.'; + +$_lang["configcheck_sysfiles_mod"] = 'Wichtige Systemdateien wurden geändert.'; +$_lang["configcheck_sysfiles_mod_msg"] = 'EVO wurde so konfiguriert, dass wichtige Systemdateien überwacht werden, um mögliche Angriffsversuche frühzeitig zu entdecken. Änderungen an diesen Systemdateien bedeuten nicht zwingend, dass die EVO Installation erfolgreich angegriffen wurde. Aber Sie sollten die überwachten Dateien (siehe in EVO-Konfiguration -> Benutzerverwaltung -> Systemdateien überwachen) überprüfen. Wenn die Dateien unverändert sind oder ein Systemverantwortlicher sie geändert hat, dann speichern Sie die EVO-Konfiguration erneut ab, um diese Meldung zu deaktivieren. Die folgenden Dateien wurden geändert:'; + +$_lang['email_method_title'] = 'Sendmail Methode'; +$_lang['email_method_mail'] = 'PHP mail() Funktion'; +$_lang['email_method_smtp'] = 'SMTP Server'; +$_lang['smtp_auth_title'] = 'SMTP Auth'; +$_lang['smtp_host_title'] = 'SMTP Host'; +$_lang['smtp_secure_title'] = 'SMTP Verschlüsselung'; +$_lang['smtp_username_title'] = 'SMTP Benutzername'; +$_lang['smtp_password_title'] = 'SMTP Passwort'; +$_lang['smtp_port_title'] = 'SMTP Port'; + +$_lang["setting_resource_tree_node_name"] = 'Titel eines Knotens im Ressourcen-Baum'; +$_lang["setting_resource_tree_node_name_desc"] = 'Wählen Sie das Ressourcen-Feld, welches als Titel eines Knotens ausgegeben wird, wenn der Ressourcen-Baum dargestellt wird.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Hinweis: Ab EVO 1.1 ist es möglich den Anzeigename der einzelnen Ressourcen im Ressourcenbaum selber vorzunehmen. Die o.g. Einstellung wird genutzt, wenn als Anzeigename "Default" ausgewählt wurde.'; + +$_lang["resource_opt_alvisibled"] = 'Alias im Alias-Pfad ausgeben'; +$_lang["resource_opt_alvisibled_help"] = 'Den Alias dieser Ressource im generierten Alias-Pfad ausgeben.'; +$_lang['resource_opt_is_published'] = 'Veröffentlicht'; +$_lang["docid_incrmnt_method_title"] = 'Vergabe einer neuen Ressourcen-ID '; +$_lang["docid_incrmnt_method_0"] = 'DB Autoinkrement'; +$_lang["docid_incrmnt_method_1"] = 'Kleinste fehlende ID'; +$_lang["docid_incrmnt_method_2"] = 'Größte ID + 1'; + +$_lang["enable_cache_title"] = 'Ressourcen-Cache'; +$_lang["disabled_at_login"] = 'Deaktiviert wenn eingeloggt'; + +$_lang["cache_type_title"] = 'Ressourcen-Cache'; +$_lang["cache_type_1"] = 'Der Cache basiert nur auf der Ressoucen-ID (Standard)'; +$_lang["cache_type_2"] = 'Der Cache basiert auf Ressoucen-ID and $_GET Parametern'; +$_lang["seostrict_title"] = 'SEO strikte URLs benutzen'; +$_lang["seostrict_message"] = 'Erzwingt die Benutzung von strikten URLs um doppelten Inhalt zu vermeiden.'; +$_lang["aliaslistingfolder_title"] = 'AliasListing aktivieren'; +$_lang["aliaslistingfolder_message"] = 'Reduziert den Speicherverbrauch bei einer großen Anzahl von Ressourcen (+10.000)'; + +$_lang["settings_friendlyurls_alert"] = 'Wenn Sie benutzerfreundliche URLs aktivieren wollen, ist es notwendig, die „ht.access“ Datei im Webroot der EVO Installation in „.htaccess“ umzubenennen.'; +$_lang["settings_friendlyurls_alert2"] = 'Da EVO in einem Unterverzeichnis installiert worden ist, ist es notwendig, den Inhalt der „.htaccess“ Datei zu verändern.'; + +$_lang["user_street"] = 'Straße'; +$_lang["user_city"] = 'Stadt'; +$_lang["user_other"] = 'anders'; + +$_lang["import_site.static.php1"] = 'Ressourcen-Baum zurücksetzen'; +$_lang["import_site.static.php2"] = 'Ressourcen-Baum zurücksetzen und alle Ressoucen-IDs neu initialisieren.'; +$_lang["import_site.static.php3"] = 'Ziel'; +$_lang["import_site.static.php4"] = 'Nur den <body></body> Bereich'; +$_lang["import_site.static.php5"] = 'Den gesamten Dateiinhalt'; + +$_lang["a83_ignore_ids_title"] = 'IDs ignorieren (kommasepariert)'; +$_lang["export_site.static.php1"] = 'Ziel'; +$_lang["export_site.static.php2"] = 'Nur bearbeitete Ressourcen'; +$_lang["export_site.static.php3"] = 'Alle Ressourcen'; +$_lang["export_site.static.php4"] = 'Suchen nach'; +$_lang["export_site.static.php5"] = 'Ersetzen mit'; +$_lang["export_site.static.php6"] = 'Ziel'; +$_lang["export_site.static.php7"] = 'Dateien können nicht in [+rb_base_url+] gespeichert werden'; + +$_lang["mutate_settings.dynamic.php6"] = 'E-Mail Benachrichtigung bei EVO Fehlern'; +$_lang["mutate_settings.dynamic.php7"] = 'Nicht benachrichtigen'; +$_lang["mutate_settings.dynamic.php8"] = '[(emailsender)] ([+emailsender+]) wird bei einem EVO Systemfehler per E-Mail benachrichtigt. Die Details zur jeweiligen Fehlermeldung können im EVO Systemereignisprotokoll angeschaut werden.'; + +$_lang["error_no_privileges"] = "Sie haben nicht genügend Rechte, um diese Aktion auszuführen!"; +$_lang["error_no_optimise_tablename"] = "Die zu optimierende Tabelle wurde nicht gefunden!"; +$_lang["error_no_truncate_tablename"] = "Die zu leerende Tabelle wurde nicht gefunden!"; +$_lang["error_double_action"] = "Doppelte Aktion (GET & POST) angeben!"; +$_lang["error_no_id"] = "Es wurde keine Ressourcen ID in der Abfrage angegeben!"; +$_lang["error_id_nan"] = "Die übergebene ID ist nicht numerisch!"; +$_lang["error_no_parent"] = "Konnte den Namen der Eltern-Ressource nicht finden!"; +$_lang["error_many_results"] = "Es wurden zu viele Ergebnisse aus der Datenbank zurückgegeben!"; +$_lang["error_no_results"] = "Es wurden zu wenige/keine Ergebnisse aus der Datenbank zurückgegeben!"; +$_lang["error_no_user_selected"] = "Es wurde kein Benutzer als Empfänger der Nachricht ausgewählt!"; +$_lang["error_no_group_selected"] = "Es wurde keine Benutzergruppe als Empfänger der Nachricht ausgewählt!"; +$_lang["error_movedocument1"] = "Eine Ressource kann nicht ihre eigene Elternressource sein!"; +$_lang["error_movedocument2"] = "Es wurde keine Ressourcen ID in der Abfrage angegeben!"; +$_lang["error_movedocument3"] = "Es wurde keine Elternressource in der Abfrage angegeben!"; +$_lang["error_internet_connection"] = "Server nicht verfügbar. Bitte prüfen Sie Ihre Internetverbindung!"; + +$_lang["login_processor_unknown_user"] = "Benutzername oder Passwort falsch eingegeben!"; +$_lang["login_processor_wrong_password"] = "Benutzername oder Passwort falsch eingegeben!"; +$_lang["login_processor_many_failed_logins"] = "Aufgrund von zu vielen fehlerhaften Anmeldeversuchen wurden Sie gesperrt!"; +$_lang["login_processor_blocked1"] = "Sie wurden gesperrt und können sich nicht anmelden!"; +$_lang["login_processor_blocked2"] = "Sie wurden gesperrt und können sich nicht anmelden! Probieren Sie es später noch einmal!"; +$_lang["login_processor_blocked3"] = "Sie wurden automatisch zu einem bestimmten Datum gesperrt und können sich nicht mehr anmelden!"; +$_lang["login_processor_bad_code"] = "Der Sicherheitscode stimmt nicht überein! Bitte loggen Sie sich erneut ein!"; +$_lang["login_processor_remotehost_ip"] = "Der gespeicherte Hostname ist nicht unter Ihrer IP-Adresse erreichbar!"; +$_lang["login_processor_remote_ip"] = "Sie können sich von dieser IP-Adresse nicht einloggen."; +$_lang["login_processor_date"] = "Sie wurden gesperrt und können sich nicht anmelden! Probieren Sie es später noch einmal!"; +$_lang["login_processor_captcha_config"] = "Das Captcha ist falsch konfiguriert."; + +$_lang["dp_dayNames"] = "['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']"; +$_lang["dp_monthNames"] = "['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']"; +$_lang["dp_startDay"] = "1"; + +$_lang["check_all"] = "Alles auswählen"; +$_lang["check_none"] = "Nichts auswählen"; +$_lang["check_toggle"] = "Auswahl umkehren"; + +$_lang["version_notices"] = "Versionshinweise"; + +$_lang["em_button_shift"] = "(Shift-Mausklick um mehrere Fenster zu öffnen)"; + +$_lang["reset_sysfiles_checksum_button"] = "Checksummen aktualisieren"; +$_lang["reset_sysfiles_checksum_alert"] = "Sind Sie sicher, dass Sie die Checksummen aktualisieren möchten?"; + +$_lang["file_browser_disabled_msg"] = "Der Datei-Browser ist deaktiviert."; +$_lang["which_browser_default_title"]= "Standard Datei-Browser"; +$_lang["which_browser_default_msg"]= "Wählen Sie den bevorzugten Standard Datei-Browser. Falls erforderlich kann der Datei-Browser in den Benutzereinstellungen je Benutzer angepasst werden."; +$_lang["which_browser_title"]= "Datei-Browser"; +$_lang["which_browser_msg"]= "Sie können einen Datei-Browser speziell für diesen Nutzer auswählen. "Standard" nutzt den in der MODX-Konfiguration gesetzten Standard Datei-Browser,"; +$_lang["option_default"] = "Standard"; +$_lang["position"] = "Position"; +$_lang["are_you_sure"] = "Sind Sie sicher?"; + +$_lang['evo_downloads_title'] = "Evolution Downloads"; +$_lang['help_translating_title'] = "Helfen Sie, MODX Evolution zu übersetzen"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Vorgängerversionen"; +$_lang["extras"] = "Extras"; + +$_lang["display_locks"] = "Sperren anzeigen"; +$_lang["role_display_locks"] = "Sperren anzeigen"; +$_lang["session_timeout"] = "Zeitlimit pro Session"; +$_lang["session_timeout_msg"] = "EVO sendet pro Minute eine Anfrage an den Server um das Mailersymbol zu aktualisieren und die Session aufrecht zu erhalten. Wenn die letzte Anfrage diesen Zeitraum überschreitet, wird die entsprechende Session als ungültig erklärt und Recourcen-Sperren automatisch entfernt (in Minuten angeben, >2min, standard 15min)"; +$_lang["unlock_element_id_warning"] = "Sind Sie sicher, dass Sie [+element_type+] ID[+id+] entsperren möchten?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template-Variable"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plugin"; +$_lang["lock_element_type_6"] = "Modul"; +$_lang["lock_element_type_7"] = "Ressource"; +$_lang["lock_element_type_8"] = "Rolle"; +$_lang["lock_element_editing"] = "[+element_type+] in Bearbeitung durch Sie seit\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "[+element_type+] in Bearbeitung durch Benutzer\n[+username+] seit [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Reduziere PHP-Code im Site-Cache'; +$_lang["minifyphp_incache_message"] = 'Reduziere PHP-Code innerhalb Snippets und Plugins, bevor Sie im Site-Cache gespeichert werden #938'; + +$_lang["logout_reminder_msg"] = "Erinnerung: Es scheint als haben Sie am [+date+] vergessen sich abzumelden. Bitte beachten Sie in Zukunft, sich nach Beendigung Ihrer Arbeiten abzumelden."; + +$_lang["allow_eval_title"] = "PHP-eval() in Snippet-Aufrufen erlauben"; +$_lang["allow_eval_msg"] = "Für Entwickler: Bitte nutzen Sie bei zukünftigen Entwicklungen \$modx->safeEval() anstelle von eval()."; +$_lang["allow_eval_with_scan"] = "Nur zulässige Funktionen ausführen"; +$_lang["allow_eval_with_scan_at_post"] = "Alle ausführen, jedoch bei POST-Anfragen nur zulässige Funktionen"; +$_lang["allow_eval_everytime_eval"] = "Alle Funktionen ausführen (nur für Fehlersuche / Debugging)"; +$_lang["allow_eval_dont_eval"] = "Keine Funktionen ausführen"; + +$_lang["safe_functions_at_eval_title"] = "Zulässige Funktionen"; +$_lang["safe_functions_at_eval_msg"] = "Komma-separierte Liste"; + +$_lang["multiple_sessions_msg"] = "Information: Es wurden weitere aktive Sessions (insgesamt [+total+]) gefunden für den Benutzer [+username+]."; +$_lang["iconv_not_available"] = "Es ist wichtig, die Erweiterung iconv zu installieren/aktivieren. Bitte kontaktieren Sie diesbezüglich Ihren Hoster oder Administrator, wenn Sie nicht wissen was zu tun ist."; + +$_lang["cm_create_new_category"] = "Neue Kategorie erstellen"; +$_lang["cm_category_name"] = "Kategorie-Name"; +$_lang["cm_category_position"] = "Kategorie-Position"; +$_lang["cm_no_x_assigned"] = "Kein %s zugewiesen"; +$_lang["cm_save_categorization"] = "Kategorisierung speichern"; +$_lang["cm_update_categories"] = "Kategorien aktualisieren"; +$_lang["cm_assigned_elements"] = "Zugewiesene Elemente"; +$_lang["cm_edit_name"] = "Name bearbeiten"; +$_lang["cm_mark_for_deletion"] = "Markieren zum löschen"; +$_lang["cm_delete_now"] = "Sofort löschen"; +$_lang["cm_delete_element_x_now"] = ""%s" sofort löschen"; +$_lang["cm_select_element_group"] = "Wählen Sie eine Elemente-Gruppe"; +$_lang["cm_global_messages"] = "Allgemeine Nachrichten"; +$_lang["cm_add_new_category"] = "Neue Kategorie hinzufügen"; +$_lang["cm_edit_categories"] = "Kategorien bearbeiten"; +$_lang["cm_sort_categories"] = "Kategorien sortieren"; +$_lang["cm_categorize_elements"] = "Elemente kategorisieren"; +$_lang["cm_translation"] = "Übersetzung"; +$_lang["cm_translations"] = "Übersetzungen"; +$_lang["cm_categorize_x"] = "Kategorisiere %s"; +$_lang["cm_unknown_error"] = "Fehler"; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) wurde Kategorie %s(%s) zugewiesen"; +$_lang["cm_no_categorization"] = "Es wurden keine Änderungen vorgenommen."; +$_lang["cm_no_changes"] = "Es wurden keine Änderungen festgestellt."; +$_lang["cm_x_changes_made"] = "%s Änderungen gespeichert"; +$_lang["cm_enter_name_for_category"] = "Bitte geben Sie den Namen für die neue Kategorie ein."; +$_lang["cm_category_x_exists"] = "Kategorie %s existiert bereits."; +$_lang["cm_category_x_saved_at_position_y"] = "Die neue Kategorie %s wurde gespeichert an Position %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Kategorie %s wurde verschoben zu Position %s"; +$_lang["cm_category_x_deleted"] = "Kategorie %s wurde gelöscht"; +$_lang["cm_category_x_renamed_to_y"] = "Kategorie %s wurde umbenannt zu %s"; +$_lang["cm_translation_for_x_empty"] = "Übersetzung ist leer für %s "; +$_lang["cm_translation_for_x_to_y_success"] = "Übersetzung für %s nach %s wurde erfolgreich gespeichert"; +$_lang["cm_save_new_sorting"] = "Sortierung speichern"; +$_lang["cm_translate_phrases"] = "Wortgruppen übersetzen"; +$_lang["cm_translate_module_phrases"] = "Modul-Wortgruppen übersetzen"; +$_lang["cm_native_phrase"] = "Original-Wortlaut"; + +$_lang["btn_view_options"] = 'Darstellungs-Optionen'; +$_lang["view_options_msg"] = 'Die Art der Darstellung & Auflistung der Elemente kann mittels des Buttons "Ansicht" angepasst werden. Diese Einstellungen werden browserintern mittels HTML5 localStorage gespeichert.'; +$_lang["viewopts_title"] = 'Darstellungs-Optionen'; +$_lang["viewopts_cb_buttons"] = 'Buttons'; +$_lang["viewopts_cb_descriptions"] = 'Beschreibungen'; +$_lang["viewopts_cb_icons"] = 'Icons'; +$_lang["viewopts_radio_list"] = 'Liste'; +$_lang["viewopts_radio_inline"] = 'Reihenweise'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Schriftgröße'; +$_lang["viewopts_cb_alltabs"] = 'auf alle Tabs anwenden'; + +$_lang['email_sender_method'] = 'Absender-Adresse'; +$_lang['auto'] = 'Automatische Erkennung'; +$_lang['use_emailsender'] = 'Benutze [(emailsender)]'; +$_lang['email_sender_method_message'] = 'Die Absender-Adresse wird normalerweise als Return-Path Header durch den Versender verwendet, und empfängt daher Mails welche nicht zugestellt werden konnten (Bounces). Die automatische Erkennung ist in der Regel ausreichend.'; + +$_lang['login_form_position_title'] = 'Position des Login-Formulars'; +$_lang['login_form_position_left'] = 'links'; +$_lang['login_form_position_center'] = 'zentriert'; +$_lang['login_form_position_right'] = 'rechts'; +$_lang['login_logo_title'] = 'Logo im Login-Formular'; +$_lang['login_logo_message'] = 'Empfehlung für Logos: 360px breit, PNG-Format'; +$_lang['login_bg_title'] = 'Hintergrundbild der Login-Seite'; +$_lang['login_bg_message'] = 'Empfehlung für Hintergrundbilder: 1920px breit'; + +$_lang['manager_menu_position_title'] = 'Position des Hauptmenüs'; +$_lang['manager_menu_position_top'] = 'Oben'; +$_lang['manager_menu_position_left'] = 'links'; +$_lang['invalid_event_response'] = 'Der Event "%s" verursachte eine invalide Ausgabe.'; diff --git a/manager/includes/lang/hebrew.inc.php b/manager/includes/lang/hebrew.inc.php index eb9580a9..cf346947 100755 --- a/manager/includes/lang/hebrew.inc.php +++ b/manager/includes/lang/hebrew.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Password notification method'; $_lang["password_method_email"] = 'Send the new password by e-mail.'; $_lang["password_method_screen"] = 'Show the new password on screen.'; -$_lang["password_msg"] = 'The new password for %s is %s.'; -$_lang["php_version_check"] = 'MODX is compatible with PHP version 5.0.0 and higher. Please upgrade your PHP installation!'; +$_lang["password_msg"] = 'The new password for %s is %s
          '; +$_lang["php_version_check"] = 'MODX is compatible with PHP version 5.6.0 and higher. Please upgrade your PHP installation!'; $_lang["plugin"] = 'התקן'; $_lang["plugin_code"] = 'קוד התקן (php)'; $_lang["plugin_config"] = 'הגדרות התקן'; diff --git a/manager/includes/lang/italian.inc.php b/manager/includes/lang/italian.inc.php index d60a0e07..c5640d2e 100755 --- a/manager/includes/lang/italian.inc.php +++ b/manager/includes/lang/italian.inc.php @@ -1,966 +1,978 @@ -PHP Application Framework e Content Management System distribuito sotto licenza GNU GPL.'; -$_lang["about_title"] = 'Cos\'è EVO'; -$_lang["access_permission_denied"] = 'Non avete i permessi per accedere alla Risorsa.'; -$_lang["access_permission_parent_denied"] = 'Non avete il permesso di creare o spostare qui una Risorsa! Scegliete un\'altra destinazione.'; -$_lang["access_permissions"] = 'Permessi di accesso'; -$_lang["access_permissions_add_resource_group"] = 'Crea un nuovo Gruppo di Risorse'; -$_lang["access_permissions_add_user_group"] = 'Crea un nuovo Gruppo di Utenti'; -$_lang["access_permissions_docs_collision"] = 'A causa di un conflitto fra il Web User Groups e il Manager User Groups del vostro Ruolo, questa Risorsa sarà pubblica. Contattare un amministratore di sistema per maggiori chiarimenti.'; -$_lang["access_permissions_docs_message"] = 'Qui potete selezionare a quali gruppi appartiene la Risorsa'; -$_lang["access_permissions_group_link"] = 'Crea un nuovo gruppo'; -$_lang["access_permissions_introtext"] = 'Qui potete gestire i Gruppi di Utenti e i Gruppi di Risorse. Per aggiungere un utente a un gruppo, modificate l\'utente e selezionate il gruppo di cui deve fare parte. Per assegnare una Risorsa ad un Gruppo di Utenti, modificate la Risorsa e selezionate i gruppi a cui deve appartenere.'; -$_lang["access_permissions_link_to_group"] = 'al Gruppo Risorse'; -$_lang["access_permissions_link_user_group"] = 'Link a Gruppo Utenti'; -$_lang["access_permissions_links"] = 'Collegamenti Gruppi di Utenti/Risorse'; -$_lang["access_permissions_links_tab"] = 'Qui potete specificare a quali Gruppi di Utenti è permesso l\'accesso ai Gruppi di Risorse (ad es.: possono modificare o creare Risorse). Per collegare un Gruppo di Risorse a un Gruppo di Utenti, selezionatelo dalla lista a tendina, e fate clic su \'Aggiungi gruppo\'. Per rimuovere il collegamento ad un certo gruppo premete \'Rimuovi ->\'. Il collegamento sarà immediatamente eliminato.'; -$_lang["access_permissions_no_resources_in_group"] = 'Nessuno.'; -$_lang["access_permissions_no_users_in_group"] = 'Nessuno.'; -$_lang["access_permissions_off"] = 'I permessi di accesso non sono stati attivati. Questo significa che qualsiasi modifica qui eseguita non avrà alcun effetto finchè i permessi di accesso non saranno attivati.'; -$_lang["access_permissions_resource_groups"] = 'Gruppi di Risorse'; -$_lang["access_permissions_resources_in_group"] = 'Risorse nel gruppo: '; -$_lang["access_permissions_resources_tab"] = 'Qui potete vedere i Gruppi di Risorse che sono stati impostati. Potete anche crearne di nuovi, rinominarli, eliminarli e vedere quali Risorse sono presenti nei differenti gruppi (posizionate il mouse sull\'ID della Risorsa per vederne il nome). Per aggiungere una Risorsa ad un gruppo o per rimuoverla da un gruppo, modificate direttamente la Risorsa.'; -$_lang["access_permissions_user_groups"] = 'Gruppi di Utenti'; -$_lang["access_permissions_user_message"] = 'Qui potete selezionare a quali Gruppi di Utenti appartiene l\'utente:'; -$_lang["access_permissions_users_in_group"] = 'Utenti del gruppo: '; -$_lang["access_permissions_users_tab"] = 'Qui potete vedere i Gruppi di Utenti che sono stati impostati. Potete anche crearne di nuovi, rinominarli, eliminarli e vedere quali utenti fanno parte dei differenti gruppi. Per aggiungere un nuovo utente a un gruppo o per rimuoverlo da un gruppo, modificate direttamente l\'utente. Gli amministratori (utenti a cui è assegnato il Ruolo con ID 1) hanno sempre accesso a tutte le Risorse, quindi non hanno necessità di essere aggiunti ad alcun gruppo.'; -$_lang["account_email"] = 'Indirizzo email'; -$_lang["actioncomplete"] = 'Azione completata con successo!
          Vi preghiamo di attendere che EVO ripulisca.'; -$_lang["activity_message"] = 'Questa lista mostra le ultime Risorse che avete creato o modificato:'; -$_lang["activity_title"] = 'Risorse modificate o create di recente'; -$_lang["add"] = 'Aggiungi'; -$_lang["add_chunk"] = 'Aggiungi Chunk'; -$_lang["add_doc"] = 'Aggiungi Risorsa'; -$_lang["add_folder"] = 'Nuova cartella'; -$_lang["add_plugin"] = 'Aggiungi Plugin'; -$_lang["add_resource"] = 'Nuova Risorsa'; -$_lang["add_snippet"] = 'Aggiungi Snippet'; -$_lang["add_tag"] = 'Aggiungi tag'; -$_lang["add_template"] = 'Aggiungi Template'; -$_lang["add_tv"] = 'Aggiungi Variabile di Template'; -$_lang["add_weblink"] = 'Nuovo Link Web'; -$_lang["administrator_role_message"] = 'Questo Ruolo non può essere modificato o eliminato.'; -$_lang["administrators"] = 'Amministratori'; -$_lang["after_saving"] = 'Dopo il salvataggio'; -$_lang["alert_delete_self"] = 'Non potete eliminare voi stessi!'; -$_lang["alias"] = 'Alias'; -$_lang["all_doc_groups"] = 'Tutti i Gruppi di Risorse (Pubblico)'; -$_lang["all_events"] = 'Tutti gli eventi'; -$_lang["all_usr_groups"] = 'Tutti i Gruppi di Utenti (Pubblico)'; -$_lang["allow_mgr_access"] = 'Accesso all\'interfaccia di amministrazione'; -$_lang["allow_mgr_access_message"] = 'Selezionate questa opzione per abilitare o disabilitare l\'accesso dell\'utente al Manager. NOTA: Se selezionate \'No\' l\'utente verrà ridiretto alla Pagina di accesso del Manager o alla Home Page del sito.'; -$_lang["already_deleted"] = 'è già stato eliminato.'; -$_lang["attachment"] = 'Allegato'; -$_lang["author_infos"] = 'Info sull\'autore'; -$_lang["automatic_alias_message"] = 'Selezionate \'Si\' affinchè il sistema, al momento del salvataggio, generi automaticamente un alias basato sul titolo della Risorsa.'; -$_lang["automatic_alias_title"] = 'Genera automaticamente l\'alias:'; -$_lang["backup"] = 'Backup'; -$_lang["bk_manager"] = 'Backup'; -$_lang["block_message"] = 'L\'utente sarà bloccato dopo aver salvato i suoi dati!'; -$_lang["blocked_minutes_message"] = 'Qui potete inserire per quanti minuti un utente sarà bloccato dopo aver superato il numero consentito di login errati. Inserite solo numeri, senza punti o virgole.'; -$_lang["blocked_minutes_title"] = 'Minuti di blocco:'; -$_lang["cache_files_deleted"] = 'Sono stati eliminati i seguenti files:'; -$_lang["cancel"] = 'Annulla'; -$_lang["captcha_code"] = 'Codice di sicurezza'; -$_lang["captcha_message"] = 'Abilitatelo per aumentare la sicurezza richiedendo agli utenti di inserire un codice illeggibile dalle macchine (e dagli script degli hackers).'; -$_lang["captcha_title"] = 'Usa codici CAPTCHA:'; -$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; -$_lang["captcha_words_message"] = 'Qui potete inserire una lista di parole CAPTCHA da usare quando CAPTCHA è abilitato. Separate le parole con virgole. Questo campo è limitato a 255 caratteri.'; -$_lang["captcha_words_title"] = 'Parole CAPTCHA:'; -$_lang["category_heading"] = 'Categoria'; -$_lang["category_manager"] = 'Gestione Categorie'; -$_lang["category_management"] = 'Gestione Categorie'; -$_lang["manage_categories"] = 'Gestione Categorie'; -$_lang["category_msg"] = 'Qui potete vedere tutte le Risorse per categoria.'; -$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; -$_lang["cfg_base_url"] = 'MODX_BASE_URL'; -$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; -$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; -$_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Cambia nome'; -$_lang["change_password"] = 'Cambia password'; -$_lang["change_password_confirm"] = 'Conferma password'; -$_lang["change_password_message"] = 'Inserite la nuova password e successivamente riscrivetela per conferma. La password deve essere lunga da 6 a 15 caratteri.'; -$_lang["change_password_new"] = 'Nuova password'; -$_lang["charset_message"] = 'Selezionate la codifica caratteri per la variabile di sistema [(modx_charset)]. Questa impostazione non ha impatto sul Manager.'; -$_lang["charset_title"] = 'Codifica caratteri:'; -$_lang["chunk"] = 'Chunk'; -$_lang["chunk_code"] = 'Codice del Chunk (HTML)'; -$_lang["chunk_multiple_id"] = 'Errore: Diversi Chunks hanno lo stesso ID.'; -$_lang["chunk_no_exist"] = 'Il Chunk non esiste.'; -$_lang["cleaningup"] = 'Sto ripulendo'; -$_lang["clean_uploaded_filename"] = 'Normalizzare automaticamente i nomi dei files caricati'; -$_lang["clean_uploaded_filename_message"] = 'Usa la configurazione di default o quella di transalias per eliminare dal nome dei files caricati i caratteri speciali, mantenendo i punti (.)'; -$_lang["clear_log"] = 'Pulisci log'; -$_lang["click_to_context"] = 'Cliccate per accedere al menu contestuale'; -$_lang["click_to_edit_title"] = 'Cliccate qui per modificare questo record'; -$_lang["click_to_view_details"] = 'Cliccate qui per vedere i dettagli'; -$_lang["close"] = 'Chiudi'; -$_lang["code"] = 'Codice'; -$_lang["collapse_tree"] = 'Comprimi struttura ad albero'; -$_lang["comment"] = 'Commenti'; -$_lang["configcheck_admin"] = 'Vi preghiamo di contattare l\'amministratore di sistema e avvisarlo di questo messaggio!'; -$_lang["configcheck_cache"] = 'impossibile scrivere nella directory della cache'; -$_lang["configcheck_cache_msg"] = 'EVO non può scrivere nella cartella cache. EVO continuerà a funzionare come previsto, ma non sarà possibile fare caching. Per risolvere, rendete la cartella /_cache/ scrivibile.'; -$_lang["configcheck_configinc"] = 'Il file di configurazione (/[+MGR_DIR+]/includes/config.inc.php) è ancora scrivibile'; -$_lang["configcheck_configinc_msg"] = 'Qualche malintenzionato potrebbe combinare guai sul vostro sito e tutto ciò che è collegato ad esso. Sul serio. Impostate il file di configurazione (/[+MGR_DIR+]/includes/config.inc.php) in sola lettura!'; -$_lang["configcheck_default_msg"] = 'E\' stato trovato un avviso non specificato. Questo è strano.'; -$_lang["configcheck_errorpage_unavailable"] = 'La pagina di Errore del vostro sito non è disponibile.'; -$_lang["configcheck_errorpage_unavailable_msg"] = 'Ciò significa che la pagina di Errore non esiste o non è accessibile da parte dei normali visitatori web. Questo può generare un loop ricorsivo e scrivere numerosi errori nel log del vostro sito. Verificate che non ci siano Gruppi di Utenti Web assegnati a questa pagina.'; -$_lang["configcheck_errorpage_unpublished"] = 'La pagina di Errore del vostro sito non esiste o non è stata pubblicata.'; -$_lang["configcheck_errorpage_unpublished_msg"] = 'Ciò significa che la pagina di Errore non è accessibile da parte del pubblico. Pubblicate la pagina o selezionate una Risorsa esistente nella struttura ad albero del vostro sito dal menu Strumenti -> Configurazione.'; -$_lang["configcheck_filemanager_path"] = 'La configurazione del percorso del File Manager sembra errata.'; -$_lang["configcheck_filemanager_path_msg"] = 'Questo può accadere, per esempio, quando si sposta l\'installazione di EVO in una differente cartella o server. Per favore, controlla e aggiorna la configurazione di sistema di EVO.'; -$_lang["configcheck_hide_warning"] = 'Non mostrare più questo messaggio.'; -$_lang["configcheck_images"] = 'Impossibile scrivere nella directory delle immagini'; -$_lang["configcheck_images_msg"] = 'La cartella immagini non è scrivibile o non esiste. Questo significa che il sistema di gestione immagini dell\'editor non funzionerà!'; -$_lang["configcheck_installer"] = 'L\'Installer è ancora presente'; -$_lang["configcheck_installer_msg"] = 'La directory /install contiene il programma di installazione di EVO. Immaginate cosa potrebbe succedere se un malintenzionato trovasse questa directory ed eseguisse l\'installazione. Forse non riuscirebbe a fare molto visto che gli servirebbe anche la password per la connessione al database, ma è decisamente meglio cancellare questa directory dal server.'; -$_lang["configcheck_lang_difference"] = 'Numero errato di voci nel file di lingua'; -$_lang["configcheck_lang_difference_msg"] = 'La lingua correntemente selezionata ha un differente numero di voci rispetto alla lingua di default. Pur non essendo necessariamente un problema, questo significa che il file di lingua richiede un aggiornamento.'; -$_lang["configcheck_notok"] = 'Verificare alcuni dettagli della configurazione: '; -$_lang["configcheck_ok"] = 'Controllo OK - Nessun avviso da segnalare.'; -$_lang["configcheck_php_gdzip"] = 'Le estensioni PHP GD e/o Zip non sono state trovate'; -$_lang["configcheck_php_gdzip_msg"] = 'EVO richiede le estensioni PHP GD e Zip. EVO funziona anche senza, ma non potrete utilizzare File Manager, Image Editor e Captcha.'; -$_lang["configcheck_rb_base_dir"] = 'La configurazione del File base path sembra errata.'; -$_lang["configcheck_rb_base_dir_msg"] = 'Questo può accadere, per esempio, quando si sposta l\'installazione di EVO in una differente cartella o server. Per favore, controlla e aggiorna la configurazione di sistema di EVO.'; -$_lang["configcheck_register_globals"] = 'Nel vostro file di configurazione php.ini, il valore register_globals è impostato su ON'; -$_lang["configcheck_register_globals_msg"] = 'Questa configurazione rende il vostro sito molto più suscettibile agli attacchi di Cross Site Scripting (XSS). Contattate il vostro fornitore di hosting per capire cosa si può fare per disabilitare questa impostazione.'; -$_lang["configcheck_title"] = 'Controllo della configurazione'; -$_lang["configcheck_templateswitcher_present"] = 'Rilevato il Plugin TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_delete"] = 'Elimina TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_disable"] = 'Disabilita TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_msg"] = 'Il Plugin TemplateSwitcher puo\' creare problemi di prestazioni e caching, vi consigliamo di utilizzarlo solo se necessario.'; -$_lang["configcheck_unauthorizedpage_unavailable"] = 'La pagina Non Autorizzato del vostro sito non esiste o non è stata pubblicata.'; -$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Ciò significa che la pagina di Non Autorizzato non esiste o non è accessibile da parte dei normali visitatori web. Questo fatto generare un loop ricorsivo e scrivere numerosi errori nel log del vostro sito. Verificate che non ci siano Gruppi di Utenti Web assegnati a questa pagina.'; -$_lang["configcheck_unauthorizedpage_unpublished"] = 'La pagina Non Autorizzato del vostro sito non è stata pubblicata.'; -$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Ciò significa che la pagina di Non Autorizzato non è accessibile ai visitatori. Pubblicate la pagina o selezionate una Risorsa esistente nella struttura ad albero del vostro sito dal menu Strumenti -> Configurazione.'; -$_lang["configcheck_validate_referer"] = 'Avviso di Sicurezza: Validazione headers HTTP'; -$_lang["configcheck_validate_referer_msg"] = 'L\'opzione di Validazione degli headers HTTP_REFERER? non è attivata. Raccomandiamo di attivarla. Vai alle Opzioni di Configurazione'; -$_lang["configcheck_warning"] = 'Avviso di configurazione:'; -$_lang["configcheck_what"] = 'Che cosa significa?'; -$_lang["confirm_block"] = 'Siete sicuri di voler bloccare l\'utente?'; -$_lang["confirm_delete_category"] = 'Sei sicuro di voler cancellare questa categoria?'; -$_lang["confirm_delete_eventlog"] = 'Siete sicuri di voler cancellare questo log?'; -$_lang["confirm_delete_file"] = 'Siete sicuri di voler eliminare il file?\n\nQuesto potrebbe impedire al sito di funzionare regolarmente! Eliminatelo solo se avete la certezza che quello che state facendo non pregiudica nulla.'; -$_lang["confirm_delete_group"] = 'Sei sicuro di voler eliminare questo gruppo?'; -$_lang["confirm_delete_htmlsnippet"] = 'Siete sicuri di voler eliminare il Chunk?'; -$_lang["confirm_delete_keywords"] = 'Siete sicuri di voler eliminare le parole chiave?'; -$_lang["confirm_delete_module"] = 'Siete sicuri di voler cancellare questo Modulo?'; -$_lang["confirm_delete_plugin"] = 'Siete sicuri di voler eliminare questo Plugin?'; -$_lang["confirm_delete_record"] = 'Siete sicuri di voler eliminare i records selezionati?'; -$_lang["confirm_delete_resource"] = 'Siete sicuri di voler eliminare questa Risorsa?\nSaranno eliminate anche tutte le Risorse in essa contenute.'; -$_lang["confirm_delete_role"] = 'Siete sicuri di voler eliminare questo Ruolo?'; -$_lang["confirm_delete_snippet"] = 'Siete sicuri di voler eliminare lo Snippet?'; -$_lang["confirm_delete_tags"] = 'Siete sicuri di voler cancellare questo META tag?'; -$_lang["confirm_delete_template"] = 'Siete sicuri di voler eliminare il Template?'; -$_lang["confirm_delete_tmplvars"] = 'Siete sicuri di voler rimuovere la Variabile di Template e tutti i suoi valori memorizzati?'; -$_lang["confirm_delete_user"] = 'Siete sicuri di voler eliminare l\'utente?'; -$_lang["confirm_duplicate_record"] = 'Siete sicuri di voler duplicare questo record?'; -$_lang["confirm_empty_trash"] = 'Volete rimuovere permanentemente tutte le Risorse eliminate?\n\nProcedere?'; -$_lang["confirm_load_depends"] = 'Siete sicuri di voler caricare la finestra di Impostazione Dipendenze senza salvare le modifiche?'; -$_lang["confirm_name_change"] = 'Cambiare nome utente può avere effetto su altre applicazioni collegate al Sistema di Gestione dei Contenuti. \n\n Siete sicuri di voler cambiare il nome utente?'; -$_lang["confirm_publish"] = '\n\nPubblicando ora la Risorsa rimuoverete ogni data di pubblicazione o ritiro che potreste aver impostato. Se invece volete cambiare o mantenere le date di pubblicazione/ritiro, allora scegliete la \'modifica\' della Risorsa.\n\nProcedere?'; -$_lang["confirm_remove_locks"] = 'Gli utenti a volte chiudono il browser mentre stanno modificando Risorse, Templates o Snippets lasciando con ogni probabilità questi oggetti in stato di blocco.\nPremendo OK rimuoverete TUTTI i blocchi attualmente presenti.\n\nProcedere?'; -$_lang["confirm_reset_sort_order"] = 'Sei sicuro di voler azzerare l\'\"ordinamento / indice\" di tutti gli elementi elencati a 0?'; -$_lang["confirm_resource_duplicate"] = 'Siete sicuri di voler duplicare questa Risorsa/Cartella? Saranno anche duplicate tutte le Risorse/Catelle che contiene.'; -$_lang["confirm_setting_language_change"] = 'Avete modificato il valore di default e si perderanno le modifiche. Procedere?'; -$_lang["confirm_unblock"] = 'Siete sicuri di voler sbloccare l\'utente?'; -$_lang["confirm_undelete"] = '\n\nTutte le Risorse eliminate insieme alla Risorsa genitore potranno essere recuperate, ma non quelle eliminate in precedenza.'; -$_lang["confirm_unpublish"] = '\n\nRitirando ora la Risorsa rimuoverete ogni data di pubblicazione o ritiro che potreste aver impostato. Se invece volete cambiare o mantenere le date di pubblicazione e ritiro scegliete la \'modifica\' della Risorsa.\n\nProcedere?'; -$_lang["confirm_unzip_file"] = 'Siete sicuri di voler decomprimere il file?\n\nI file esistenti potrebbero essere sovrascritti.'; -$_lang["could_not_find_user"] = 'Utente non trovato'; -$_lang["create_folder_here"] = 'Crea una cartella'; -$_lang["create_resource_here"] = 'Crea una Risorsa'; -$_lang["create_resource_title"] = 'Crea Risorsa'; -$_lang["create_weblink_here"] = 'Crea un Link Web'; -$_lang["createdon"] = 'Data di creazione'; -$_lang["create_new"] = 'Crea nuovo'; -$_lang["credits"] = 'Crediti'; -$_lang["credits_shouts_msg"] = '

          EVO è gestito e mantenuto da evo.im.

          '; -$_lang["custom_contenttype_message"] = 'Qui potete impostare il \'content type\' delle Risorse pubblicate. Per aggiungere un nuovo \'content type\' inseritelo nel campo e fate clic sul pulsante \'Aggiungi\'.'; -$_lang["custom_contenttype_title"] = 'Tipo di Contenuto personalizzato:'; -$_lang["database_charset"] = 'Set di Caratteri del Database'; -$_lang["database_collation"] = 'Collation del Database'; -$_lang["database_name"] = 'Nome del Database'; -$_lang["database_overhead"] = 'Nota: L\'Overhead è lo spazio inutilizzato riservato da MySQL. Per liberare questo spazio, cliccate sulla cifra overhead della tabella.'; -$_lang["database_server"] = 'Server del Database'; -$_lang["database_table_clickbackup"] = 'Effettua il backup e scarica le tabelle selezionate'; -$_lang["database_table_clickhere"] = 'Cliccate qui'; -$_lang["database_table_datasize"] = 'Dimensione dei dati'; -$_lang["database_table_droptablestatements"] = 'Genera dichiarazioni DROP TABLE.'; -$_lang["database_table_effectivesize"] = 'Dimensioni effettive'; -$_lang["database_table_indexsize"] = 'Dimensioni dell\'indice'; -$_lang["database_table_overhead"] = 'Overhead'; -$_lang["database_table_records"] = 'Numero di records'; -$_lang["database_table_tablename"] = 'Nome della tabella'; -$_lang["database_table_totals"] = 'Totali:'; -$_lang["database_table_totalsize"] = 'Dimensione totale'; -$_lang["database_tables"] = 'Tabelle del Database'; -$_lang["database_version"] = 'Versione Database:'; -$_lang["date"] = 'Data'; -$_lang["datechanged"] = 'Data ultima modifica'; -$_lang["datepicker_offset"] = 'Offset del Datepicker: '; -$_lang["datepicker_offset_message"] = 'Il numero di anni nel passato da mostrare nel datepicker.'; -$_lang["datetime_format"] = 'Formato Data:'; -$_lang["datetime_format_message"] = 'Il formato delle date nel Manager.'; -$_lang["default"] = 'Default:'; -$_lang["defaultcache_message"] = 'Selezionate \'Si\' se volete che di default tutte le nuove Risorse possano essere salvate nella cache.'; -$_lang["defaultcache_title"] = 'Inserisci in cache di default:'; -$_lang["defaultmenuindex_message"] = 'Selezionate \'Si\' per attivare di default l\'incremento automatico dell\'indice dei menu.'; -$_lang["defaultmenuindex_title"] = 'Incremento automatico indice dei Menu:'; -$_lang["defaultpublish_message"] = 'Selezionate \'Si\' se volete che tutte le nuove Risorse siano pubblicate di default.'; -$_lang["defaultpublish_title"] = 'Pubblicato di default:'; -$_lang["defaultsearch_message"] = 'Selezionate \'Si\' se volete che di default tutte le nuove Risorse siano ricercabili.'; -$_lang["defaultsearch_title"] = 'Ricercabile di default:'; -$_lang["defaulttemplate_message"] = 'Selezionate il Template di default che desiderate usare per le nuove Risorse. Potete sempre selezionarne di volta in volta uno diverso nell\'editor di Risorse, questa impostazione semplicemente ne preseleziona uno.'; -$_lang["defaulttemplate_title"] = 'Template di default:'; -$_lang["defaulttemplate_logic_title"] = 'Assegnazione Automatica del Template:'; -$_lang["defaulttemplate_logic_general_message"] = 'Le nuove Risorse avranno i seguenti Templates, verranno utilizzati i livelli piu\' alti se non trovati:'; -$_lang["defaulttemplate_logic_system_message"] = 'System: il Template di default del Sistema.'; -$_lang["defaulttemplate_logic_parent_message"] = 'Parent: lo stesso Template della cartella.'; -$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: lo stesso Template delle Risorse nella stessa cartella.'; -$_lang["delete"] = 'Elimina'; -$_lang["delete_resource"] = 'Elimina Risorsa'; -$_lang["delete_tags"] = 'Cancella tag'; -$_lang["deleting_file"] = 'Eliminazione file `%s`: '; -$_lang["description"] = 'Descrizione'; -$_lang["deselect_keywords"] = 'Cancella parole chiave'; -$_lang["deselect_metatags"] = 'Cancella META tag'; -$_lang["disabled"] = 'Disabilitati'; -$_lang["doc_data_title"] = 'Visualizza dati della Risorsa'; -$_lang["documentation"] = 'Documentazione'; -$_lang["duplicate"] = 'Duplica'; -$_lang["duplicate_alias_found"] = 'La Risorsa \'%s\' utilizza già l\'alias \'%s\'. Inserire un altro alias.'; -$_lang["duplicate_alias_message"] = 'Qui potete selezionare \'Si\' per permettere gli alias duplicati. NOTA: Questa opzione deve essere usata con l\'opzione \'Percorso URL Semplici\' attiva per evitare problemi di riferimenti alle Risorse.'; -$_lang["duplicate_alias_title"] = 'Permetti alias duplicati:'; -$_lang["duplicate_name_found_general"] = 'E\' già presente un %s chiamato \'%s\'. Inserite un nome univoco.'; -$_lang["duplicate_name_found_module"] = 'E\' già presente un Modulo chiamato \'%s\'. Inserite un nome univoco.'; -$_lang["duplicated_el_suffix"] = 'Duplica'; -$_lang["edit"] = 'Modifica'; -$_lang["edit_resource"] = 'Modifica Risorsa'; -$_lang["edit_resource_title"] = 'Crea/modifica Risorsa'; -$_lang["edit_settings"] = 'Configurazione'; -$_lang["editedon"] = 'Data modifica'; -$_lang["editing_file"] = 'Modifica file: '; -$_lang["editor_css_path_message"] = 'Inserite il percorso del file CSS che volete usare con l\'editor. Vi consigliamo di inserire il percorso dalla root del vostro server, ad esempio: /assets/site/style.css. Se non volete caricare lo stile nell\'editor, lasciate vuoto questo campo.'; -$_lang["editor_css_path_title"] = 'Percorso del file CSS:'; -$_lang["element"] = 'Elemento'; -$_lang["element_categories"] = 'Vista Combinata'; -$_lang["element_filter_msg"] = 'Scrivi qui per filtrare la lista'; -$_lang["element_management"] = 'Gestione Elementi'; -$_lang["element_name"] = 'Nome Elemento'; -$_lang["element_selector_msg"] = 'Selezionate l\'Elemento e cliccate sul pulsante \'Aggiungi\'.'; -$_lang["element_selector_title"] = 'Selettore Elementi'; -$_lang["elements"] = 'Elementi'; -$_lang["email"] = 'Email'; -$_lang["email_sent"] = 'Email inviata'; -$_lang["emailsender_message"] = 'L\'indirizzo e-mail dell\'amministratore del sito. Ad esempio, questo indirizzo e-mail verrà utilizzato come destinazione di notifica del sistema di e-mail, ecc'; -$_lang["emailsender_title"] = 'Indirizzo e-mail:'; -$_lang["emailsubject_default"] = 'Le vostre credenziali per il login'; -$_lang["emailsubject_message"] = 'Qui potete specificare l\'oggetto della e-mail di iscrizione.'; -$_lang["emailsubject_title"] = 'Oggetto e-mail:'; -$_lang["empty_folder"] = 'Questa cartella è vuota'; -$_lang["empty_recycle_bin"] = 'Rimuovi le Risorse eliminate'; -$_lang["empty_recycle_bin_empty"] = 'Non sono presenti Risorse eliminate da cancellare.'; -$_lang["enable_resource"] = 'Abilita Risorsa.'; -$_lang["enable_sharedparams"] = 'Abilita condivisione parametri'; -$_lang["enable_sharedparams_msg"] = 'NOTA: L\'id unico globale (GUID) sarà usato per identificare in maniera univoca questo Modulo e i suoi parametri condivisi. Il GUID è anche utilizzato per creare un collegamento tra il Modulo ed i Plugins o Snippets che accedono ai suoi parametri condivisi. '; -$_lang["enabled"] = 'Abilitati'; -$_lang["error"] = 'Errore'; -$_lang["error_sending_email"] = 'Errore invio mail'; -$_lang["errorpage_message"] = 'Inserite l\'ID della Risorsa da mostrare agli utenti che hanno richiesto una Risorsa che non esiste. NOTA: assicuratevi che l\'ID inserito appartenga a una Risorsa esistente e che sia stata pubblicata!'; -$_lang["errorpage_title"] = 'Pagina di errore:'; -$_lang["event_id"] = 'ID Evento'; -$_lang["eventlog"] = 'Log degli Eventi'; -$_lang["eventlog_msg"] = 'Il Log degli Eventi mostra gli avvisi ed i messaggi di errore generati dal sistema di gestione dei contenuti. La colonna \'Sorgente\' mostra la sezione del sistema di gestione dei contenuti in cui il messaggio è stato mostrato.'; -$_lang["eventlog_viewer"] = 'Log degli Eventi'; -$_lang["everybody"] = 'Tutti'; -$_lang["existing_category"] = 'Categoria attuale'; -$_lang["expand_tree"] = 'Espandi struttura ad albero'; -$_lang["export_site"] = 'Esporta sito in HTML (statico)'; -$_lang["export_site_cacheable"] = 'Includi file non inseribili in cache:'; -$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; -$_lang["export_site_failed"] = 'Fallita!'; -$_lang["export_site_failed_no_open"] = 'Impossibile aprire il file: '; -$_lang["export_site_failed_no_retrieve"] = 'Impossibile trovare la Risorsa.'; -$_lang["export_site_failed_no_write"] = 'Impossibile scrivere il file.'; -$_lang["export_site_html"] = 'Esporta sito in HTML'; -$_lang["export_site_maxtime"] = 'Tempo massimo di esportazione:'; -$_lang["export_site_maxtime_message"] = 'Qui potete specificare il numero di secondi che il sistema può impiegare per importare il sito (ignorando le impostazioni PHP). Inserite 0 per un tempo illimitato. Attenzione, un\'impostazione 0 o molto alta può causare un timeout del server, quindi non è raccomandata.'; -$_lang["export_site_message"] = '

          Usando questa funzione potete esportare l\'intero sito in HTML. Considerate che così facendo perderete molte funzionalità di EVO:

          • Gli accessi alle pagine dei files esportati non saranno registrati.
          • Gli Snippets interattivi NON funzionano nei file esportati.
          • Solo le normali Risorse saranno esportate, i Link Web non lo saranno.
          • Il processo di esportazione potrebbe fallire se le Risorse contengono Snippets che inviano headers HTTP di redirezione.
          • A seconda di come avete scritto i documenti, i fogli di stile e le immagini, il layout del sito potrebbe rompersi. Per sistemarlo, potete provare a salvare/spostare i file esportati nella stessa cartella dove risiede il file index.php di EVO.

          Compilate il form e premete \'Avvia esportazione\' per avviare il processo. I file creati saranno salvati nel punto specificato usando, ove possibile, gli alias dei documenti come nomi dei file. Nell\'esportare il sito, sarebbe meglio aver attivato gli \'URL Semplici\' nella configurazione di EVO. In base alla dimensione del sito, l\'esportazione potrebbe impiegare un po\' di tempo.

          Ogni file già esistente sarà sovrascritto dai nuovi file se hanno gli stessi nomi!

          '; -$_lang["export_site_numberdocs"] = '

          Trovate %s Risorse da esportare...

          '; -$_lang["export_site_prefix"] = 'Prefisso file:'; -$_lang["export_site_start"] = 'Avvia esportazione'; -$_lang["export_site_success"] = 'Riuscita!'; -$_lang["export_site_success_skip_dir"] = 'Saltare questa directory.'; -$_lang["export_site_success_skip_doc"] = 'Saltare questa Risorsa.'; -$_lang["export_site_suffix"] = 'Suffisso file:'; -$_lang["export_site_target_unwritable"] = 'La cartella target non è scrivibile. Vi preghiamo di assicurarvi che la cartella sia scrivibile e di riprovare.'; -$_lang["export_site_time"] = 'Esportazione terminata. L\'operazione è stata completata in %s secondi.'; -$_lang["failed_login_message"] = 'Qui potete inserire il numero delle volte che è consentito sbagliare l\'autenticazione prima che l\'account venga bloccato.'; -$_lang["failed_login_title"] = 'Autenticazioni errate consentite:'; -$_lang["fe_editor_lang_message"] = 'Selezionare il linguaggio dell\'editor quando usato nel front-end.'; -$_lang["fe_editor_lang_title"] = 'Lingua dell\'editor del Front-end:'; -$_lang["file_delete_file"] = 'Elimina File'; -$_lang["file_delete_folder"] = 'Elimina Cartella'; -$_lang["file_deleted"] = 'Riuscita!'; -$_lang["file_download_file"] = 'Scarica File'; -$_lang["file_download_unzip"] = 'Decomprimi File zip'; -$_lang["file_folder_chmod_error"] = 'Impossibile modificare i permessi: dovete effettuare la modifica dei permessi con un programma esterno a EVO.'; -$_lang["file_folder_created"] = 'Cartella creata con successo!'; -$_lang["file_folder_deleted"] = 'Cartella eliminata con successo!'; -$_lang["file_folder_not_created"] = 'Impossibile trovare la cartella'; -$_lang["file_folder_not_deleted"] = 'Impossibile eliminare la cartella. Verificare che sia vuota prima di eliminarla!'; -$_lang["file_not_deleted"] = 'Fallita!'; -$_lang["file_not_saved"] = 'Impossibile salvare il file, assicuratevi che la cartella di destinazione sia scrivibile!'; -$_lang["file_saved"] = 'File aggiornato con successo!'; -$_lang["file_unzip"] = 'Decompressione cartella effettuata con successo!'; -$_lang["file_unzip_fail"] = 'Decompressione cartella fallita!'; -$_lang["filemanager_path_message"] = 'IIS spesso non riesce a determinare correttamente la cartella principale usata dal File Manager per determinare ciò che potete vedere. Se avete problemi nell\'uso del File Manager, assicuratevi che il percorso punti alla root dell\'installazione di EVO.'; -$_lang["filemanager_path_title"] = 'Percorso del File Manager:'; -$_lang["files_access_denied"] = 'Accesso negato!'; -$_lang["files_data"] = 'Dati'; -$_lang["files_dir_listing"] = 'Elenco cartelle per:'; -$_lang["files_directories"] = 'Cartelle'; -$_lang["files_directory_is_empty"] = 'La cartella è vuota'; -$_lang["files_dirwritable"] = 'Cartella scrivibile?'; -$_lang["files_editfile"] = 'Modifica file'; -$_lang["files_file_type"] = 'Tipo file: '; -$_lang["files_filename"] = 'Nome file'; -$_lang["files_fileoptions"] = 'Opzioni'; -$_lang["files_files"] = 'File'; -$_lang["files_filesize"] = 'Dimensione file'; -$_lang["files_filetype_notok"] = 'Non è consentito il caricamento di questo tipo di file!'; -$_lang["files_management"] = 'Gestisci documenti'; -$_lang["files_management_no_permission"] = 'Non si dispone di autorizzazioni sufficienti per visualizzare o modificare tali file. Chiedere all\'amministratore l\'accesso a %s.'; -$_lang["files_modified"] = 'Modificato'; -$_lang["files_top_level"] = 'Al livello superiore'; -$_lang["files_up_level"] = 'Su di un livello'; -$_lang["files_upload_copyfailed"] = 'La copia del file nella cartella di destinazione non è riuscita - caricamento fallito!'; -$_lang["files_upload_error"] = 'Errore'; -$_lang["files_upload_error0"] = 'Si è verificato un problema durante il caricamento.'; -$_lang["files_upload_error1"] = 'Il file che state provando a caricare è troppo grande.'; -$_lang["files_upload_error2"] = 'Il file che state provando a caricare è troppo grande.'; -$_lang["files_upload_error3"] = 'Il file che state provando a caricare è stato copiato solo in parte.'; -$_lang["files_upload_error4"] = 'Dovete selezionare un file da caricare.'; -$_lang["files_upload_error5"] = 'Si è verificato un problema durante il caricamento.'; -$_lang["files_upload_inhibited_msg"] = 'Il caricamento file è inibito - assicuratevi che il caricamento sia supportato e che la cartella sia scrivibile da PHP.
          '; -$_lang["files_upload_ok"] = 'File caricato con successo!'; -$_lang["files_upload_permissions_error"] = 'Possibile errore nei permessi di scrittura - la directory deve poter essere scrivibile dal webserver.'; -$_lang["files_uploadfile"] = 'Carica file'; -$_lang["files_uploadfile_msg"] = 'Selezionate un file da caricare:'; -$_lang["files_uploading"] = 'Sto caricando %s in %s/
          '; -$_lang["files_viewfile"] = 'Visualizza file'; -$_lang["folder"] = 'Cartella'; -$_lang["forgot_password_email_fine_print"] = '* L\'indirizzo precedente non sarà più valido una volta che avrete cambiato la password o da domani.'; -$_lang["forgot_password_email_instructions"] = 'Da lì potrete cambiare la vostra password dal menu Il Mio Account.'; -$_lang["forgot_password_email_intro"] = 'E\' stata fatta una richiesta per cambiare la password del vostro account.'; -$_lang["forgot_password_email_link"] = 'Fate clic qui per completare il processo.'; -$_lang["forgot_your_password"] = 'Hai dimenticato la Password?'; -$_lang["friday"] = 'Venerdì'; -$_lang["friendly_alias_message"] = 'Se state usando gli URL Semplici, e la Risorsa ha un alias, quest\'ultimo avrà sempre precedenza sull\'URL Semplice. Impostando questa opzione su \'Si\', il prefisso e il suffisso dell\'URL Semplice saranno anche applicati all\'alias. Per esempio, se la Risorsa con l\'ID 1 ha per alias `introduction` e voi avete impostato un prefisso come `` e un suffisso come `.html`, settando questa opzione su `Si` sarà generato `introduction.html`. Se non ci sono alias, EVO genererà `1.html` come link.'; -$_lang["friendly_alias_title"] = 'Usa URL Semplici:'; -$_lang["friendlyurls_message"] = 'L\'opzione permette di usare gli URL Semplici per i motori di ricerca con EVO. Notate che l\'opzione ha effetto solo per le installazioni di EVO su Apache e che avrete anche bisogno di scrivere un file .htaccess perchè possa funzionare. Per maggiori informazioni, guardate il file .htaccess incluso nella distribuzione.'; -$_lang["friendlyurls_title"] = 'Usa URL Semplici:'; -$_lang["friendlyurlsprefix_message"] = 'Qui potete specificare il prefisso da usare con gli URL semplici. Ad esempio, un prefisso impostato su \'pagina\' trasformerà l\'URL /index.php?id=2 nell\'URL semplice /pagina2.html (assumendo che il suffisso sia impostato su .html). In questo modo potete specificare cosa gli utenti (e i motori di ricerca) vedranno per i links nel sito.'; -$_lang["friendlyurlsprefix_title"] = 'Prefisso per gli URL Semplici:'; -$_lang["friendlyurlsuffix_message"] = 'Qui potete specificare il suffisso degli URL semplici. Specificando \'.html\' sarà aggiunto .html a tutti gli URL semplici.'; -$_lang["friendlyurlsuffix_title"] = 'Suffisso per gli URL Semplici:'; -$_lang["functionnotimpl"] = 'Spiacente!'; -$_lang["functionnotimpl_message"] = 'Questa funzione non è ancora stata implementata.'; -$_lang["further_info"] = 'Ulteriori informazioni'; -$_lang["global_tabs"] = 'Global Tabs'; -$_lang["go"] = 'Vai'; -$_lang["group_access_permissions"] = 'Gruppi di accesso'; -$_lang['group_tvs'] = 'Raggruppa TV'; -$_lang["guid"] = 'GUID'; -$_lang["help"] = 'Aiuto'; -$_lang["help_msg"] = '

          Se avete bisogno di aiuto nell\'utilizzo di EVO, vi consigliamo di visitare i Forum EVO. Inoltre, il sito EVO contiene tutta la documentazione riguardo l\'uso di EVO o su come configurarlo, la risposta che state cercando potrebbe essere qui.

          Prevediamo anche di offrire servizi di supporto di tipo commerciale per EVO. Se siete interessati, inviateci un messaggio email.'; -$_lang["help_title"] = 'Aiuto'; -$_lang["hide_tree"] = 'Nascondi struttura ad albero'; -$_lang["home"] = 'Home'; -$_lang["htmlsnippet"] = 'Chunk'; -$_lang["htmlsnippets"] = 'Chunks'; -$_lang["htmlsnippet_desc"] = 'Descrizione'; -$_lang["htmlsnippet_management_msg"] = 'Qui potete scegliere i Chunks da modificare o crearne di nuovi.'; -$_lang["htmlsnippet_msg"] = 'Qui potete aggiungere/modificare i Chunks. Ricordate, i Chunks sono codice HTML \'raw\' (grezzo), quindi qualsiasi codice PHP al loro interno non verrà processato.'; -$_lang["htmlsnippet_name"] = 'Nome Chunk'; -$_lang["htmlsnippet_title"] = 'Crea/Modifica Chunk'; -$_lang["icon"] = 'Icona'; -$_lang["icon_description"] = 'classe CSS. i.e. fa fa-star'; -$_lang["id"] = 'ID'; -$_lang["illegal_parent_child"] = 'Assegnazione parentela:\n\nLa Risorsa è un sottodocumento della Risorsa selezionata.'; -$_lang["illegal_parent_self"] = 'Assegnazione parentela:\n\nLa Risorsa selezionata non può essere assegnata a se stessa.'; -$_lang["images_management"] = 'Gestisci immagini'; -$_lang["import_files_found"] = 'Trovate %s Risorse da importare...'; -$_lang["import_params"] = 'Importa i parametri condivisi del Modulo'; -$_lang["import_params_msg"] = 'Potete importare i parametri e le impostazioni di un Modulo selezionando il nome del Modulo dalla lista sottostante. NOTA: Affinchè un Modulo appaia nel menu questo Plugin/Snippet deve essere incluso nell\'elenco di dipendenza del Modulo ed il Modulo deve avere la attiva la condivisione dei parametri. '; -$_lang["import_parent_resource"] = 'Risorsa genitore:'; -$_lang["import_site"] = 'Importa Sito'; -$_lang["import_site_failed"] = 'Fallito!'; -$_lang["import_site_failed_db_error"] = 'Si è verificato un errore del database cercando di duplicare la Risorsa: '; -$_lang["import_site_failed_no_open_dir"] = 'Impossibile aprire la directory: '; -$_lang["import_site_failed_no_retrieve_file"] = 'Impossibile trovare il file: '; -$_lang["import_site_html"] = 'Importa sito da HTML'; -$_lang["import_site_importing_document"] = 'Importazione in corso %s '; -$_lang["import_site_maxtime"] = 'Tempo massimo importazione:'; -$_lang["import_site_maxtime_message"] = 'Qui potete specificare il numero di secondi che il sistema può impiegare per importare il sito (ignorando le impostazioni PHP). Inserite 0 per un tempo illimitato. Attenzione, un\'impostazione 0 o molto alta può causare un timeout del server, quindi non è raccomandata.'; -$_lang["import_site_message"] = '

          Usando questa funzione potete importare nel database un intero sito HTML. Da notare che ci sarà poi bisogno di copiare i vostri file html nella cartella assets/import.

          Compilate il form per avviare il processo di importazione. I files importati saranno salvati nella posizione selezionata, usando dove possibile i nomi dei files come alias delle Risorse, il titolo della Risorsa come titolo della pagina.

          '; -$_lang["import_site_skip"] = 'Saltato!'; -$_lang["import_site_start"] = 'Avvia importazione'; -$_lang["import_site_success"] = 'Effettuato!'; -$_lang["import_site_time"] = 'Importazione completata in %s secondi.'; -$_lang["inbox"] = 'Inbox'; -$_lang["info"] = 'Info'; -$_lang["information"] = 'Informazioni'; -$_lang["inline"] = 'In linea'; -$_lang["insert"] = 'Inserisci'; -$_lang["maxImageWidth"] = 'Larghezza massima immagine:'; -$_lang["maxImageHeight"] = 'Altezza massima immagine:'; -$_lang["thumbWidth"] = 'Larghezza massima della miniatura:'; -$_lang["thumbHeight"] = 'Altezza massima della miniatura:'; -$_lang["thumbsDir"] = 'Percorso della cartella delle miniature:'; -$_lang["jpegQuality"] = 'Compressione JPEG:'; -$_lang["denyZipDownload"] = 'Disabilita il download degli archivi zip:'; -$_lang["denyExtensionRename"] = 'Disabilita la modifica delle estensioni dei file:'; -$_lang["maxImageWidth_message"] = 'Se la risoluzione dell\'immagine caricata supera questa impostazione verrà automaticamente ridimensionata. Impostare 0 per disabilitare.'; -$_lang["maxImageHeight_message"] = 'Se la risoluzione dell\'immagine caricata supera questa impostazione verrà automaticamente ridimensionata. Impostare 0 per disabilitare.'; -$_lang["thumbWidth_message"] = 'Larghezza massima della miniatura.'; -$_lang["thumbHeight_message"] = 'Altezza massima della miniatura.'; -$_lang["thumbsDir_message"] = 'Il nome della directory delle miniature'; -$_lang["jpegQuality_message"] = 'Qualità della compressione JPEG delle miniature ridimensionate.'; -$_lang["showHiddenFiles"] = 'Mostra i file nascosti nel File Browser:'; -$_lang["keyword"] = 'Parola chiave'; -$_lang["keywords"] = 'Parole chiave'; -$_lang["keywords_intro"] = 'Per modificare una parola chiave, digitate semplicemente la nuova parola nel campo di testo a fianco di quella che volete cambiare. Per eliminare una parola chiave, spuntate il box \'Elimina\' per quella parola. Se impostate l\'eliminazione di una parola chiave e allo stesso tempo ne modificate il nome, essa verrà eliminata vanificando l\'operazione di rinomina!'; -$_lang["language_message"] = 'Selezionate la lingua da usare nel Manager EVO.'; -$_lang["language_title"] = 'Lingua del Manager'; -$_lang["last_update"] = 'Ultimo aggiornamento'; -$_lang["launch_site"] = 'Mostra sito'; -$_lang["license"] = 'Licenza'; -$_lang["link_attributes"] = 'Attributi del link'; -$_lang["link_attributes_help"] = 'Qui potete inserire gli attributi per i link a questa pagina, come target= o rel=.'; -$_lang["list_mode"] = 'Abilita/disabilita modalità lista - elencare tutti i record nella griglia.'; -$_lang["loading_doc_tree"] = 'Sto caricando la struttura ad albero delle Risorse...'; -$_lang["loading_menu"] = 'Sto caricando il menu...'; -$_lang["loading_page"] = 'Vi preghiamo di attendere che EVO carichi la pagina...'; -$_lang["localtime"] = 'Orario locale'; -$_lang["lock_htmlsnippet"] = 'Impedisci la modifica del Chunk'; -$_lang["lock_htmlsnippet_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare il Chunk.'; -$_lang["lock_module"] = 'Impedisci la modifica del Modulo'; -$_lang["lock_module_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questo Modulo.'; -$_lang["lock_msg"] = '%s sta attualmente modificando %s. Attendete che l\'altro utente finisca e poi riprova.'; -$_lang["lock_plugin"] = 'Impedisci la modifica del Plugin'; -$_lang["lock_plugin_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questo Plugin.'; -$_lang["lock_settings_msg"] = '%s sta attualmente modificando queste impostazioni. Attendete che l\'altro utente finisca e poi riprovate.'; -$_lang["lock_snippet"] = 'Impedisci la modifica dello Snippet'; -$_lang["lock_snippet_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare lo Snippet.'; -$_lang["lock_template"] = 'Impedisci la modifica del Template'; -$_lang["lock_template_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare il Template.'; -$_lang["lock_tmplvars"] = 'Impedisci la modifica della Variabile di Template'; -$_lang["lock_tmplvars_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questa variabile'; -$_lang["locked"] = 'Bloccato'; -$_lang["login_allowed_days"] = 'Giorni consentiti'; -$_lang["login_allowed_days_message"] = 'Selezionate i giorni della settimana nei quali questo utente sarà autorizzato a collegarsi.'; -$_lang["login_allowed_ip"] = 'Indirizzo IP autorizzato'; -$_lang["login_allowed_ip_message"] = 'Inserite l\'indirizzo IP dal quale questo utente si può collegare. NOTA: Se volete inserire più indirizzi IP separateli con una virgola (,)'; -$_lang["login_button"] = 'Accedi'; -$_lang["login_cancelled_install_in_progress"] = 'Installazione o aggiornamento di questo sito in corso.
          Riprova tra qualche minuto

          '; -$_lang["login_cancelled_site_was_updated"] = 'Installazione o aggiornamento completata su questo sito, effettuare nuovamente il login!
          '; -$_lang["login_captcha_message"] = 'Inserite il codice di sicurezza mostrato all\'interno dell\'immagine grafica. Se avete difficoltà nel leggere il codice, cliccateci sopra per generarne un altro a caso, oppure contattate l\'amministratore del sito.'; -$_lang["login_homepage"] = 'Autenticazione Pagina d\'inizio'; -$_lang["login_homepage_message"] = 'Inserite l\'ID della Risorsa da mostrare all\'utente dopo che ha eseguito l\'autenticazione. NOTA: assicuratevi che la Risorsa indicata esista, sia pubblicata e accessibile all\'utente!'; -$_lang["login_message"] = 'Inserisci le tue credenziali per effettuare l\'accesso.
          Il sistema fa distinzione fra le maiuscole/minuscole del nome utente e della password.'; -$_lang["logo_slogan"] = 'Sistema di gestione dei contenuti EVO - \nCreate e fate di più con meno'; -$_lang["logout"] = 'Uscita'; -$_lang["long_title"] = 'Titolo esteso'; -$_lang["mail_check_timeperiod_message"] = 'Intervallo di tempo dopo il quale controllare se ci sono nuovi messaggi nel Manager, in secondi.'; -$_lang["mail_check_timeperiod_title"] = 'Frequenza di controllo messaggi:'; -$_lang["manage_depends"] = 'Configurazione Dipendenze'; -$_lang["manage_files"] = 'Gestione File'; -$_lang["manage_htmlsnippets"] = 'Chunks'; -$_lang["manage_metatags"] = 'Gestione META tag e parole chiave'; -$_lang["manage_modules"] = 'Gestione moduli'; -$_lang["manage_plugins"] = 'Plugins'; -$_lang["manage_snippets"] = 'Snippets'; -$_lang["manage_templates"] = 'Templates'; -$_lang["manage_documents"] = 'Documenti'; -$_lang["manager"] = 'Manager'; -$_lang["manager_lockout_message"] = '

          Siete entrati nel Manager EVO. Se desiderate uscire dalla sessione, fate clic sul pulsante "Uscita".

          Per andare alla pagina inziale fate clic sul pulsante "Home".'; -$_lang["manager_permissions"] = 'Gestione Permessi'; -$_lang["manager_theme"] = 'Tema del Manager EVO:'; -$_lang["manager_theme_message"] = 'Selezionate un tema per il Manager EVO.'; -$_lang["messages"] = 'Messaggi'; -$_lang["messages_all"] = 'Tutti'; -$_lang["messages_compose"] = 'Componi messaggio'; -$_lang["messages_forward"] = 'Inoltra'; -$_lang["messages_from"] = 'Da'; -$_lang["messages_group"] = 'Un gruppo'; -$_lang["messages_inbox"] = 'Inbox'; -$_lang["messages_message"] = 'Messaggio'; -$_lang["messages_no_messages"] = 'Nessun messaggio nella Inbox.'; -$_lang["messages_not_allowed_to_read"] = 'Non siete autorizzati a leggere questo messaggio!'; -$_lang["messages_private"] = 'Privato'; -$_lang["messages_read_message"] = 'Leggi messaggio'; -$_lang["messages_reply"] = 'Rispondi'; -$_lang["messages_select_group"] = 'Seleziona un gruppo'; -$_lang["messages_select_user"] = 'Seleziona un Utente'; -$_lang["messages_send"] = 'Invia'; -$_lang["messages_send_to"] = 'Invia a'; -$_lang["messages_sent"] = 'Inviato il'; -$_lang["messages_subject"] = 'Oggetto'; -$_lang["messages_system_user"] = '[System]'; -$_lang["messages_title"] = 'Messaggi'; -$_lang["messages_user"] = 'Un Utente'; -$_lang["meta_keywords"] = 'META e parole chiave'; -$_lang["metatag_intro"] = 'In questa pagina potete eliminare, creare o modificare i META tag e le parole chiave. Per collegare le parole chiave alle Risorse, modificate la Risorsa in questione e selezionate le parole chiave desiderate dalla lista. Per aggiungere una parola chiave digitate la nuova parola e poi cliccate \'Aggiungi tag\'.'; -$_lang["metatag_notice"] = 'Per ulteriori informazioni, consultate la Guida di Riferimento HTML. Questa non è una lista completa di tutti i possibili META tag.'; -$_lang["metatags"] = 'META tag'; -$_lang["mgr_access_permissions"] = 'Gestione permessi di accesso'; -$_lang["mgr_login_start"] = 'Pagina di accesso del Manager'; -$_lang["mgr_login_start_message"] = 'Inserite l\'ID della Risorsa che volete mostrare agli utenti dopo l\'accesso al Manager. NOTA: assicuratevi che l\'ID appartenga ad una Risorsa esistente e che sia stata pubblicata!'; -$_lang["mgrlog_action"] = 'Azione'; -$_lang["mgrlog_actionid"] = 'ID Azione'; -$_lang["mgrlog_anyall"] = 'Qualunque/Tutti'; -$_lang["mgrlog_datecheckfalse"] = 'checkdate() ha restituito false.'; -$_lang["mgrlog_datefr"] = 'Data iniziale'; -$_lang["mgrlog_dateinvalid"] = 'Formato data errato.'; -$_lang["mgrlog_dateto"] = 'Data finale'; -$_lang["mgrlog_emptysrch"] = 'La vostra ricerca non ha prodotto risultati.'; -$_lang["mgrlog_field"] = 'Campo'; -$_lang["mgrlog_itemid"] = 'ID oggetto'; -$_lang["mgrlog_itemname"] = 'Nome oggetto'; -$_lang["mgrlog_msg"] = 'Messaggio'; -$_lang["mgrlog_noquery"] = 'Non è ancora stata effettuata una ricerca.'; -$_lang["mgrlog_qresults"] = 'Risultati della ricerca'; -$_lang["mgrlog_query"] = 'Selezione dei log di sistema'; -$_lang["mgrlog_query_msg"] = 'Selezionate quali informazioni volete vedere. Potete selezionare un intervallo di date, ma ricordate che le date che immettete non sono entrambe incluse. Ad esempio per selezionare tutti i dati di log del giorno 1 gennaio 2014, impostate \'Data iniziale\' su 01-01-2014 e \'Data finale\' su 02-01-2014.

          Messaggio ed azione sono in genere coincidenti. Se state cercando un messaggio specifico, è meglio impostare l\'azione su \'Qualunque/Tutti\'.'; -$_lang["mgrlog_results"] = 'Numero di risultati'; -$_lang["mgrlog_searchlogs"] = 'Ricerca log'; -$_lang["mgrlog_sortinst"] = 'Potete ordinare la tabella facendo clic sulle intestazioni delle colonne. Se i logs dovessero diventare troppo grandi, potete cancellare tutti i logs. Con la cancellazione vengono rimossi tutti i dati dei logs raccolti fino ad oggi e questa azione una volta avviata non può essere annullata!'; -$_lang["mgrlog_time"] = 'Ora'; -$_lang["mgrlog_user"] = 'Utente'; -$_lang["mgrlog_username"] = 'Nome utente'; -$_lang["mgrlog_value"] = 'Valore'; -$_lang["mgrlog_view"] = 'Mostra i logs del Manager'; -$_lang["module_code"] = 'Codice del Modulo (PHP)'; -$_lang["module_config"] = 'Configurazione del Modulo'; -$_lang["module_desc"] = 'Descrizione'; -$_lang["module_disabled"] = 'Modulo disabilitato'; -$_lang["module_edit_click_title"] = 'Cliccate qui per modificare il Modulo'; -$_lang["module_group_access_msg"] = 'Selezionate i gruppi autorizzati ad eseguire il Modulo.'; -$_lang["module_management"] = 'Gestione Moduli'; -$_lang["module_management_msg"] = 'Qui potete scegliere il Modulo che desiderate eseguire o modificare. Per eseguire un Modulo, fate clic sull\'icona del Modulo a sinistra sulla griglia. Per modificare un Modulo, fate clic sul suo nome.'; -$_lang["module_msg"] = 'Qui potete creare o modificare i Moduli. Un Modulo è un insieme di Elementi che interagiscono fra loro (ad es. Plugins, Snippets, ecc.).'; -$_lang["module_name"] = 'Nome del Modulo'; -$_lang["module_resource_msg"] = 'Qui potete aggiungere o rimuovere Risorse dalle quali dipende questo Modulo. Cliccate sul pulsante Aggiungi per aggiungere una Risorsa.'; -$_lang["module_resource_title"] = 'Dipendenze Moduli'; -$_lang["module_title"] = 'Crea/modifica Moduli'; -$_lang["module_viewdepend_msg"] = 'Qui potete vedere gli Elementi dai quali dipende il Modulo. Cliccate sul pulsante \'Configurazione Dipendenze\' per modificare le dipendenze'; -$_lang["modules"] = 'Moduli'; -$_lang["modx_news"] = 'Ultime Notizie EVO'; -$_lang["modx_news_tab"] = 'Novità EVO'; -$_lang["modx_news_title"] = 'Novità EVO'; -$_lang["modx_security_notices"] = 'Avvisi di Protezione EVO'; -$_lang["modx_version"] = 'Versione EVO'; -$_lang["monday"] = 'Lunedì'; -$_lang["move"] = 'Sposta'; -$_lang["move_resource"] = 'Sposta Risorsa'; -$_lang["move_resource_message"] = 'Potete spostare una Risorsa e tutti i suoi sottodocumenti selezionando un nuovo genitore nella struttura ad albero. Se selezionate una Risorsa che non è una cartella, essa sarà trasformata in cartella. Fate clic sulla nuova Risorsa genitore nella struttura ad albero delle Risorse.'; -$_lang["move_resource_new_parent"] = 'Vi preghiamo di selezionare una nuova Risorsa genitore nella struttura ad albero delle Risorse.'; -$_lang["move_resource_title"] = 'Sposta Risorsa'; -$_lang["name"] = 'Nome'; -$_lang["new_category"] = 'Nuova Categoria'; -$_lang["new_file_permissions_message"] = 'Durante il caricamento di un nuovo file nel sistema di gestione file, il sistema cercherà di cambiare i permessi del file secondo questa impostazione. Questo però potrebbe non funzionare in alcune configurazioni, come ad esempio IIS, nel qual caso dovrete procedere ad una modifica manuale dei permessi.'; -$_lang["new_file_permissions_title"] = 'Permessi dei nuovi files:'; -$_lang["new_folder_permissions_message"] = 'Durante la creazione di una nuova cartella nel sistema di gestione file, il sistema cercherà di cambiare i permessi della cartella secondo questa impostazione. Questo però potrebbe non funzionare in alcune configurazioni, come ad esempio IIS, nel qual caso dovrete procedere ad una modifica manuale dei permessi.'; -$_lang["new_folder_permissions_title"] = 'Permessi nuova cartella:'; -$_lang["new_htmlsnippet"] = 'Nuovo Chunk'; -$_lang["new_keyword"] = 'Aggiungi nuova parola chiave:'; -$_lang["new_module"] = 'Nuovo Modulo'; -$_lang["new_parent"] = 'Nuova Risorsa genitore'; -$_lang["new_plugin"] = 'Nuovo Plugin'; -$_lang["new_role"] = 'Nuovo Ruolo'; -$_lang["new_snippet"] = 'Nuovo Snippet'; -$_lang["new_template"] = 'Nuovo Template'; -$_lang["new_tmplvars"] = 'Nuova Variabile di Template'; -$_lang["new_user"] = 'Nuovo utente'; -$_lang["new_web_user"] = 'Nuovo utente Web'; -$_lang["new_resource"] = 'Nuova Risorsa'; -$_lang["no"] = 'No'; -$_lang["no_active_users_found"] = 'Non sono stati trovati utenti attivi.'; -$_lang["no_activity_message"] = 'Non avete ancora creato o modificato alcuna Risorsa.'; -$_lang["no_category"] = 'senza Categoria'; -$_lang["no_docs_pending_publishing"] = 'Nessuna Risorsa in attesa di pubblicazione.'; -$_lang["no_docs_pending_pubunpub"] = 'Nessun evento programmato trovato'; -$_lang["no_docs_pending_unpublishing"] = 'Nessuna Risorsa in attesa del ritiro dalla pubblicazione.'; -$_lang["no_edits_creates"] = 'No edits or creates found.'; -$_lang["no_groups_found"] = 'Nessun gruppo trovato.'; -$_lang["no_keywords_found"] = 'Non ci sono parole chiave'; -$_lang["no_records_found"] = 'Nessun record.'; -$_lang["no_results"] = 'Nessun risultato trovato'; -$_lang["nologentries_message"] = 'Inserite il numero di righe da visualizzare per pagina quando visualizzate i logs.'; -$_lang["nologentries_title"] = 'Numero di voci di log:'; -$_lang["nomessages_message"] = 'Inserite il numero di messaggi da visualizzare nella inbox quando leggete i messaggi.'; -$_lang["nomessages_title"] = 'Numero di messaggi:'; -$_lang["none"] = 'Nessuno'; -$_lang["noresults_message"] = 'Inserite il numero di risultati da mostrare negli elenchi ed i risultati di ricerca .'; -$_lang["noresults_title"] = 'Numero di risultati:'; -$_lang["not_deleted"] = 'non è stato eliminato.'; -$_lang["not_set"] = 'Non impostato'; -$_lang["offline"] = 'Offline'; -$_lang["online"] = 'Online'; -$_lang["onlineusers_action"] = 'Azione'; -$_lang["onlineusers_actionid"] = 'ID dell\'azione'; -$_lang["onlineusers_ipaddress"] = 'Indirizzo IP dell\'utente'; -$_lang["onlineusers_lasthit"] = 'Ultimo contatto'; -$_lang["onlineusers_message"] = 'Questa lista mostra tutti gli utenti attivi negli ultimi 20 minuti (adesso sono le '; -$_lang["onlineusers_title"] = 'Utenti online'; -$_lang["onlineusers_user"] = 'Utente'; -$_lang["onlineusers_userid"] = 'ID dell\'utente'; -$_lang["optimize_table"] = 'Cliccate qui per ottimizzare questa tabella'; -$_lang["page_data_alias"] = 'Alias'; -$_lang["page_data_cacheable"] = 'Situabile in cache'; -$_lang["page_data_cacheable_help"] = 'Selezionando questo campo permetterete alla Risorsa di essere salvata nella cache. Se la Risorsa contiene Snippets, assicuratevi che il campo non sia selezionato.'; -$_lang["page_data_cached"] = 'Sorgente recuperata dalla cache:'; -$_lang["page_data_changes"] = 'Modifiche'; -$_lang["page_data_contentType"] = 'Tipo contenuto'; -$_lang["page_data_contentType_help"] = 'Selezionate il tipo di contenuto della Risorsa. Se non avete idea del tipo di contenuto che la Risorsa deve avere, lasciatelo semplicemente come text/html.'; -$_lang["page_data_created"] = 'Creato'; -$_lang["page_data_edited"] = 'Modificato'; -$_lang["page_data_editor"] = 'Modifica con l\'editor rich text'; -$_lang["page_data_folder"] = 'La Risorsa è una cartella'; -$_lang["page_data_general"] = 'Generale'; -$_lang["page_data_markup"] = 'Markup/ struttura'; -$_lang["page_data_mgr_access"] = 'Accesso al Manager EVO'; -$_lang["page_data_notcached"] = 'Questa Risorsa non è stata (ancora) inserita nella cache.'; -$_lang["page_data_publishdate"] = 'Data di pubblicazione'; -$_lang["page_data_publishdate_help"] = 'Se impostate una data di pubblicazione, la Risorsa sarà pubblicata automaticamente alla data prescelta. Cliccate sull\'icona del calendario per selezionare una data di pubblicazione o sull\'icona a fianco per rimuoverla. Se non è inserita una data di pubblicazione la Risorsa non sarà pubblicata automaticamente e occorrerà pubblicarla manualmente.'; -$_lang["page_data_published"] = 'Pubblicata'; -$_lang["page_data_searchable"] = 'Ricercabile'; -$_lang["page_data_searchable_help"] = 'Spuntando questa casella permettete alla Risorsa di essere ricercabile. Potete anche usare la casella per altri scopi nei vostri Snippets.'; -$_lang["page_data_source"] = 'Sorgente'; -$_lang["page_data_status"] = 'Stato'; -$_lang["page_data_template"] = 'Template'; -$_lang["page_data_template_help"] = 'Qui potete selezionare il Template da usare per la Risorsa.'; -$_lang["page_data_title"] = 'Dati pagina'; -$_lang["page_data_unpublishdate"] = 'Data di ritiro'; -$_lang["page_data_unpublishdate_help"] = 'Se impostate una data di ritiro, la Risorsa sarà ritirata alla data prescelta. Cliccate sull\'icona del calendario per selezionare una data di ritiro o sull\'icona a fianco per rimuoverla. Se non è prevista una data di ritiro la Risorsa non verrà mai ritirata automaticamente.'; -$_lang["page_data_unpublished"] = 'Ritirato'; -$_lang["page_data_web_access"] = 'Accesso dal web'; -$_lang["pagetitle"] = 'Titolo della Risorsa'; -$_lang["pagination_table_first"] = 'Primo'; -$_lang["pagination_table_gotopage"] = 'Vai alla pagina'; -$_lang["pagination_table_last"] = 'Ultimo'; -$_lang["paging_first"] = 'primo'; -$_lang["paging_last"] = 'ultimo'; -$_lang["paging_next"] = 'successivo'; -$_lang["paging_prev"] = 'precedente'; -$_lang["paging_showing"] = 'Mostra'; -$_lang["paging_to"] = 'a'; -$_lang["paging_total"] = 'totale'; -$_lang["parameter"] = 'Parametro'; -$_lang["parse_docblock"] = 'Analizza DocBlock'; -$_lang["parse_docblock_msg"] = 'Attenzione (!): Ripristina Il nome, la configurazione, la descrizione e la categoria di default analizzando il codice sorgente.'; -$_lang["password"] = 'Password'; -$_lang["password_change_request"] = 'Richiesta di cambio password'; -$_lang["password_gen_gen"] = 'Lascia che EVO generi una password.'; -$_lang["password_gen_length"] = 'La password dev\'essere lunga almeno 6 caratteri.'; -$_lang["password_gen_method"] = 'Come volete creare la password dell\'utente?'; -$_lang["password_gen_specify"] = 'Lasciami specificare la password:'; -$_lang["password_method"] = 'Come volete notificare la nuova password all\'utente?'; -$_lang["password_method_email"] = 'Invia la nuova password per e-mail.'; -$_lang["password_method_screen"] = 'Mostra la nuova password sullo schermo.'; -$_lang["password_msg"] = 'La nuova password per %s è %s.'; -$_lang["php_version_check"] = 'EVO è compatibile con PHP versione 5.0.0 o superiore. Il vostro server usa la versione %s%. Si prega di aggiornare l\'installazione di PHP!'; -$_lang["plugin"] = 'Plugin'; -$_lang["plugins"] = 'Plugins'; -$_lang["plugin_code"] = 'Codice del Plugin (PHP)'; -$_lang["plugin_config"] = 'Configura Plugin'; -$_lang["plugin_desc"] = 'Descrizione'; -$_lang["plugin_disabled"] = 'Plugin Disabilitato'; -$_lang["plugin_event_msg"] = 'Selezionate gli Eventi di Sistema che intendete gestire con questo Plugin.'; -$_lang["plugin_management_msg"] = 'Qui potete selezionare i Plugins da modificare o crearne di nuovi.'; -$_lang["plugin_msg"] = 'Qui potete aggiungere/modificare i Plugins. I Plugins sono \'puro\' codice PHP che viene eseguito quando si verificano alcuni eventi di sistema.'; -$_lang["plugin_name"] = 'Nome Plugin'; -$_lang["plugin_priority"] = 'Modifica l\'ordine di esecuzione dei Plugins in base all\'evento'; -$_lang["plugin_priority_instructions"] = 'Spostate e ordinate i Plugins per ogni Evento di Sistema. Per ogni lista i Plugins più in alto verranno eseguiti prima.'; -$_lang["plugin_priority_title"] = 'Ordine di esecuzione del Plugin'; -$_lang["purge_plugin"] = 'Elimina i plugin obsoleti'; -$_lang["plugin_title"] = 'Crea/Modifica Plugin'; -$_lang["preview"] = 'Anteprima'; -$_lang["preview_msg"] = 'Questa è solo l\'anteprima delle modifiche. Clicca su Salva e Aggiorna per salvare le modifiche'; -$_lang["preview_resource"] = 'Anteprima Risorsa'; -$_lang["private"] = 'Privato'; -$_lang["public"] = 'Pubblico'; -$_lang["publish_date"] = 'Data di pubblicazione'; -$_lang["publish_events"] = 'Eventi di pubblicazione'; -$_lang["publish_resource"] = 'Pubblica Risorsa'; -$_lang["rb_base_dir_message"] = 'Inserite il percorso fisico alla directory del File Browser. Questa impostazione di solito è generata automaticamente. Se state usando IIS, tuttavia, EVO potrebbe non riuscire ad impostare il percorso corretto e il File Browser mostrerà un errore. In questo caso potete correggere il percorso alla cartella delle immagini (il percorso come lo vedreste in Windows Explorer). NOTA: La directory del File Browser, per funzionare correttamente, deve contenere le sottocartelle images, files, flash e media.'; -$_lang["rb_base_dir_title"] = 'Percorso delle Risorse:'; -$_lang["rb_base_url_message"] = 'Inserite il percorso virtuale alla directory del File Browser. Questo percorso in genere è generato automaticamente. Se state usando IIS, tuttavia, EVO potrebbe non riuscire ad impostare il percorso corretto e il File Browser potrebbe mostrare un errore. In questo caso potete inserire qui il percorso corretto alla cartella delle immagini (l\'URL che inserireste in Internet Explorer).'; -$_lang["rb_base_url_title"] = 'URL del File Browser:'; -$_lang["rb_message"] = 'Selezionate Si se volete abilitare il File Browser. Questo permetterà agli utenti di cercare e caricare sul server immagini, file flash e media.'; -$_lang["rb_title"] = 'Abilita File Browser:'; -$_lang["rb_webuser_message"] = 'Volete consentire ad un Utente Web di usare il File Browser? ATTENZIONE: Consentire agli Utenti Web di usare il File Browser rende visibili i files di gestione degli utenti. Usare questa opzione solo per utenti affidabili.'; -$_lang["rb_webuser_title"] = 'Gli Utenti Web usano il File Browser:'; -$_lang["recent_docs"] = 'Risorse recenti'; -$_lang["recommend_setting_change_title"] = 'Modifiche consigliate'; -$_lang["recommend_setting_change_description"] = 'Il vostro sito non è configurato per validare gli headers HTTP_REFERER per l\'accesso al Manager. Vi raccomandiamo di abilitare questa impostazione per ridurre i rischi di un attacco CSRF (Cross Site Request Forgery).'; -$_lang["references"] = 'Riferimenti'; -$_lang["refresh_cache"] = 'Cache: Sono stati trovati %s file nella cartella cache e sono stati eliminati %d file di cache.

          I nuovi file di cache saranno creati non appena le pagine saranno richieste.'; -$_lang["refresh_published"] = '%s Risorse sono state pubblicate.'; -$_lang["refresh_site"] = 'Svuota cache'; -$_lang["refresh_title"] = 'Aggiorna sito'; -$_lang["refresh_tree"] = 'Aggiorna struttura ad albero'; -$_lang["refresh_unpublished"] = '%s Risorse sono state ritirate.'; -$_lang["release_date"] = 'Data di rilascio'; -$_lang["remember_last_tab"] = 'Ricorda i tabs:'; -$_lang["remember_last_tab_message"] = 'Le pagine del Manager con tabs mostreranno l\'ultimo tab utilizzato anzichè il primo tab'; -$_lang["remember_username"] = 'Ricordami'; -$_lang["remove"] = 'Rimuovi ->'; -$_lang["remove_date"] = 'Rimuovi data'; -$_lang["remove_locks"] = 'Rimuovi Blocchi'; -$_lang["rename"] = 'Rinomina'; -$_lang["reports"] = 'Resoconti'; -$_lang["report_issues"] = 'Segnala un problema'; -$_lang["require_tagname"] = 'E\' necessario immettere un nome per il tag'; -$_lang["require_tagvalue"] = 'E\' necessario immettere un valore per il tag'; -$_lang["reserved_name_warning"] = 'Avete utilizzato un nome riservato.'; -$_lang["reset"] = 'Resetta'; -$_lang["reset_failedlogins"] = 'reset'; -$_lang["reset_sort_order"] = 'Resetta ordine'; -$_lang["resource"] = 'Risorsa'; -$_lang["resource_alias"] = 'Alias Risorsa'; -$_lang["resource_alias_help"] = 'Qui potete inserire un alias per la Risorsa. Questo renderà la Risorsa accessibile come http://vostrosito.it/alias. Funziona solo se state usando gli URL Semplici.'; -$_lang["resource_content"] = 'Contenuto della Risorsa'; -$_lang["resource_description"] = 'Descrizione'; -$_lang["resource_description_help"] = 'Qui potete inserire una descrizione opzionale della Risorsa.'; -$_lang["resource_duplicate"] = 'Duplica Risorsa'; -$_lang["resource_long_title_help"] = 'Qui potete inserire un titolo esteso per la Risorsa. Questo è utile per i motori di ricerca e potrebbe descrivere meglio la Risorsa.'; -$_lang["resource_metatag_help"] = 'Selezionate i META tag e le parole chiave che volete assegnare alla Risorsa. Tenete premuto il tasto control per selezionare più tag o parole.'; -$_lang["resource_opt_contentdispo"] = 'Pubblicazione del contenuto'; -$_lang["resource_opt_contentdispo_help"] = 'Utilizzate il campo Pubblicazione del Contenuto per stabilire come questa Risorsa verrà inviata al browser. Per files da scaricare selezionare l\'opzione Allegato.'; -$_lang["resource_opt_emptycache"] = 'Svuota cache'; -$_lang["resource_opt_emptycache_help"] = 'Lasciando questo campo selezionato permetterete a EVO di svuotare la cache dopo che avrete salvato la Risorsa. Così i visitatori non vedranno più la vecchia versione della Risorsa.'; -$_lang["resource_opt_folder"] = 'Cartella'; -$_lang["resource_opt_folder_help"] = 'Spuntate la casella se volete che la Risorsa faccia anche da cartella per altre Risorse. Non avete bisogno di preoccuparvi troppo di questo, EVO generalmente si occupa automaticamente delle impostazioni delle cartelle.'; -$_lang["resource_opt_menu_index"] = 'Indice menu'; -$_lang["resource_opt_menu_index_help"] = 'Indice menu è un campo che potete usare per ordinare le Risorse nei menu. Potete anche usare il campo per altri scopi nei vostri Snippet.'; -$_lang["resource_opt_menu_title"] = 'Titolo nel menu'; -$_lang["resource_opt_menu_title_help"] = 'Il titolo nel menu è un campo che potete usare per visualizzare un titolo abbreviato per la Risorsa all\'interno di menu o moduli.'; -$_lang["resource_opt_published"] = 'Pubblicata'; -$_lang["resource_opt_published_help"] = 'Spuntate questa casella per pubblicare immediatamente la Risorsa dopo averla salvata.'; -$_lang["resource_opt_richtext"] = 'Rich text'; -$_lang["resource_opt_richtext_help"] = 'Lasciate selezionata questa casella se volete usare l\'editor rich text per modificare le Risorse. Se le Risorse contengono JavaScript o forms HTML deselezionatela e modificateli in modalità HTML evitando così che l\'editor ne danneggi il contenuto.'; -$_lang["resource_opt_show_menu"] = 'Mostra nel menu'; -$_lang["resource_opt_show_menu_help"] = 'Selezionate questa opzione per mostrare la Risorsa nel menu. Attenzione, alcuni script per menu potrebbero ignorare questa opzione.'; -$_lang["resource_opt_trackvisit_help"] = 'Registra ogni utente che visita questa pagina'; -$_lang["resource_overview"] = 'Dettagli Risorsa'; -$_lang["resource_parent"] = 'Risorsa genitore'; -$_lang["resource_parent_help"] = 'Selezionate una Risorsa nella struttura ad albero per impostarla come genitore di questa Risorsa.'; -$_lang["resource_permissions_error"] = 'Assegnate questa Risorsa ad almeno un Gruppo Risorse al quale avete accesso.'; -$_lang["resource_setting"] = 'Impostazioni Risorsa'; -$_lang["resource_summary"] = 'Sommario'; -$_lang["resource_summary_help"] = 'Inserire un breve sommario della Risorsa'; -$_lang["resource_title"] = 'Titolo'; -$_lang["resource_title_help"] = 'Digitate qui il nome/titolo della Risorsa. Evitate l\'uso del backslash (\) !'; -$_lang["resource_to_be_moved"] = 'Risorsa da spostare'; -$_lang["resource_type"] = 'Tipo di Risorsa'; -$_lang["resource_type_message"] = 'Un Link Web è un collegamento ad una Risorsa su Internet. Questa Risorsa può essere interna a EVO, una pagina su un altro sito, un\'immagine o un altro file su Internet. I Link Web dovrebbero avere Media Type text/html e Inline Content-Disposition.'; -$_lang["resource_type_weblink"] = 'Link Web'; -$_lang["resource_type_webpage"] = 'Pagina Web'; -$_lang["resource_weblink_help"] = 'Digitate qui l\'indirizzo dell\'oggetto a cui volete collegare questo Link Web. In alternativa inserire dal Browser File o utilizzare l\'icona di selezione collegamento e selezionare una risorsa dalla struttura del sito.'; -$_lang["resources_in_container"] = 'Risorse in questo contenitore'; -$_lang["resources_in_container_no"] = 'Questo contenitore non contiene alcuna Risorsa.'; -$_lang["role"] = 'Ruolo'; -$_lang["role_about"] = 'Visualizza la pagina About'; -$_lang["role_access_persmissions"] = 'Permessi di accesso'; -$_lang["role_actionok"] = 'Visualizza la schermata di azione completata'; -$_lang["role_assets_images"] = 'Accesso a assets/images'; -$_lang["role_assets_files"] = 'Accesso a assets/files'; -$_lang["role_bk_manager"] = 'Usa il sistema di gestione delle copie di sicurezza'; -$_lang["role_cache_refresh"] = 'Svuota la cache del sito'; -$_lang["role_category_manager"] = 'Usa in Gestore Categorie'; -$_lang["role_change_password"] = 'Cambia password'; -$_lang["role_change_resourcetype"] = 'Cambia tipo di risorsa'; -$_lang["role_chunk_management"] = 'Gestione Chunk'; -$_lang["role_config_management"] = 'Gestione configurazione'; -$_lang["role_content_management"] = 'Gestione contenuto'; -$_lang["role_create_chunk"] = 'Crea un nuovo Chunk'; -$_lang["role_create_doc"] = 'Crea nuove Risorse'; -$_lang["role_create_plugin"] = 'Crea un nuovo Plugin'; -$_lang["role_create_snippet"] = 'Crea nuovi Snippets'; -$_lang["role_create_template"] = 'Crea nuovi Templates del sito'; -$_lang["role_credits"] = 'Visualizza i crediti'; -$_lang["role_delete_chunk"] = 'Cancella Chunk'; -$_lang["role_delete_doc"] = 'Elimina Risorse'; -$_lang["role_delete_eventlog"] = 'Cancella Log degli Eventi'; -$_lang["role_delete_module"] = 'Cancella Modulo'; -$_lang["role_delete_plugin"] = 'Cancella Plugin'; -$_lang["role_delete_role"] = 'Elimina ruoli'; -$_lang["role_delete_snippet"] = 'Elimina Snippet'; -$_lang["role_delete_template"] = 'Elimina Template'; -$_lang["role_delete_user"] = 'Elimina utenti'; -$_lang["role_delete_web_user"] = 'Cancella utente web'; -$_lang["role_edit_chunk"] = 'Modifica Chunk'; -$_lang["role_edit_doc"] = 'Modifica una Risorsa'; -$_lang["role_edit_doc_metatags"] = 'Modifica META tag e parole chiave della Risorsa'; -$_lang["role_edit_module"] = 'Modifica Modulo'; -$_lang["role_edit_plugin"] = 'Modifica Plugin'; -$_lang["role_edit_role"] = 'Modifica ruoli'; -$_lang["role_edit_settings"] = 'Cambia le impostazioni del sito'; -$_lang["role_edit_snippet"] = 'Modifica Snippet'; -$_lang["role_edit_template"] = 'Modifica Template del sito'; -$_lang["role_edit_user"] = 'Modifica utenti'; -$_lang["role_edit_web_user"] = 'Modifica utente web'; -$_lang["role_empty_trash"] = 'Elimina in modo permanente le Risorse cancellate'; -$_lang["role_errors"] = 'Visualizza i messaggi di errore'; -$_lang["role_eventlog_management"] = 'Gestione Log degli Eventi'; -$_lang["role_export_static"] = 'Esporta in HTML statico'; -$_lang["role_file_management"] = 'Gestione File'; -$_lang["role_file_manager"] = 'Usa il file manager (accesso root completo)'; -$_lang["role_frames"] = 'Visualizza i frames del Manager EVO'; -$_lang["role_help"] = 'Visualizza le pagine di aiuto'; -$_lang["role_home"] = 'Visualizza la pagina introduttiva del Manager EVO'; -$_lang["role_import_static"] = 'Importa HTML'; -$_lang["role_logout"] = 'Esci dal Manager EVO'; -$_lang["role_manage_metatags"] = 'Gestione META tag e parole chiave'; -$_lang["role_management_msg"] = 'Qui potete scegliere il Ruolo da modificare o creare un nuovo Ruolo.'; -$_lang["role_management_title"] = 'Gestione Ruoli'; -$_lang["role_messages"] = 'Visualizza ed invia messaggi'; -$_lang["role_module_management"] = 'Gestione Moduli'; -$_lang["role_name"] = 'Nome Ruolo'; -$_lang["role_new_module"] = 'Crea nuovo Modulo'; -$_lang["role_new_role"] = 'Crea nuovi ruoli'; -$_lang["role_new_user"] = 'Crea nuovi utenti'; -$_lang["role_new_web_user"] = 'Crea nuovo utete web'; -$_lang["role_plugin_management"] = 'Gestione Plugin'; -$_lang["role_publish_doc"] = 'Pubblica Risorse'; -$_lang["role_remove_locks"] = 'Togli i blocchi'; -$_lang["role_role_management"] = 'Gestione Ruolo'; -$_lang["role_run_module"] = 'Esegui Modulo'; -$_lang["role_save_chunk"] = 'Salva Chunk'; -$_lang["role_save_doc"] = 'Salva Risorse'; -$_lang["role_save_module"] = 'Salva Modulo'; -$_lang["role_save_password"] = 'Salva password'; -$_lang["role_save_plugin"] = 'Salva Plugin'; -$_lang["role_save_role"] = 'Salva ruoli'; -$_lang["role_save_snippet"] = 'Salva Snippet'; -$_lang["role_save_template"] = 'Salva Template'; -$_lang["role_save_user"] = 'Salva utenti'; -$_lang["role_save_web_user"] = 'Salva utente web'; -$_lang["role_snippet_management"] = 'Gestione Snippet'; -$_lang["role_template_management"] = 'Gestione Template'; -$_lang["role_title"] = 'Crea/Modifica Ruolo'; -$_lang["role_udperms"] = 'Gestione permessi'; -$_lang["role_user_management"] = 'Gestione utente'; -$_lang["role_view_docdata"] = 'Visualizza i dati di una Risorsa'; -$_lang["role_view_eventlog"] = 'Vedi Log degli Eventi'; -$_lang["role_view_logs"] = 'Visualizza i log di sistema'; -$_lang["role_view_unpublished"] = 'Vedi le Risorse non pubblicate'; -$_lang["role_web_access_persmissions"] = 'Permessi di accesso Web'; -$_lang["role_web_user_management"] = 'Gestione utente web'; -$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'Inserire l\'URL per il Feed RSS Novità EVO.'; -$_lang["rss_url_news_title"] = 'Feed RSS Novità EVO:'; -$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'Inserire l\'URL per il Feed RSS Avvisi di Protezione EVO.'; -$_lang["rss_url_security_title"] = 'Feed RSS Avvisi di Protezione EVO:'; -$_lang["run_module"] = 'Esegui Modulo'; -$_lang["saturday"] = 'Sabato'; -$_lang["save"] = 'Salva'; -$_lang["save_all_changes"] = 'Salva tutte le modifiche'; -$_lang["save_tag"] = 'Salva tag'; -$_lang["saving"] = 'Salvataggio in corso, vi preghiamo di attendere...'; -$_lang["search"] = 'Ricerca'; -$_lang["search_criteria"] = 'Criteri di ricerca'; -$_lang["search_criteria_content"] = 'Cerca per contenuto'; -$_lang["search_criteria_content_msg"] = 'Trovate tutte le Risorse che hanno questo testo nel loro contenuto.'; -$_lang["search_criteria_id"] = 'Cerca per ID'; -$_lang["search_criteria_id_msg"] = 'Inserite l\'ID di una Risorsa per individuarla rapidamente.'; -$_lang["search_criteria_top"] = 'Cerca nei campi principali'; -$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; -$_lang["search_criteria_template_id"] = 'Cerca per ID del template'; -$_lang["search_criteria_template_id_msg"] = 'Trova tutte le Risorse che utilizzano il template specificato'; -$_lang["search_criteria_url_msg"] = 'Cerca una risorsa per url esatta'; -$_lang["search_criteria_longtitle"] = 'Cerca per titolo esteso'; -$_lang["search_criteria_longtitle_msg"] = 'Trovate tutte le Risorse che nel titolo esteso contengono questo testo.'; -$_lang["search_criteria_title"] = 'Cerca per titolo'; -$_lang["search_criteria_title_msg"] = 'Trovate tutte le Risorse che nel titolo contengono questo testo.'; -$_lang["search_empty"] = 'La ricerca non ha prodotto risultati. Estendete i criteri di ricerca e provate nuovamente.'; -$_lang["search_item_deleted"] = 'Questo elemento è stato eliminato'; -$_lang["search_results"] = 'Risultati della ricerca'; -$_lang["search_results_returned_desc"] = 'Descrizione'; -$_lang["search_results_returned_id"] = 'ID'; -$_lang["search_results_returned_msg"] = 'I criteri di ricerca hanno restituito %s Risorse. Se i risultati sono troppi, provate con una ricerca più specifica. Le due colonne più a sinistra permettono di trovare la Risorsa nella struttura ad albero o di visualizzarla. Le due colonne più a destra mostrano, rispettivamente, se una Risorsa è stata eliminata e qual\'è il suo stato di pubblicazione.'; -$_lang["search_results_returned_title"] = 'Titolo'; -$_lang["search_view_docdata"] = 'Visualizza questo elemento'; -$_lang["security"] = 'Utenti'; -$_lang["security_notices_tab"] = 'Avvisi di Protezione'; -$_lang["security_notices_title"] = 'Avvisi di Protezione'; -$_lang["select_date"] = 'Seleziona data'; -$_lang["send"] = 'Invia'; -$_lang["server_protocol_http"] = 'http'; -$_lang["server_protocol_https"] = 'https'; -$_lang["server_protocol_message"] = 'Specificate qui se il sito è su una connessione https.'; -$_lang["server_protocol_title"] = 'Tipo server:'; -$_lang["serveroffset"] = 'Scostamento orario del server'; -$_lang["serveroffset_message"] = 'Selezionate il numero di ore di differenza tra il vostro fuso orario e quello del server. L\'ora attuale sul server è [%s], mentre con lo scostamento che avete impostato l\'ora è [%s].'; -$_lang["serveroffset_title"] = 'Scostamento orario del server:'; -$_lang["servertime"] = 'Orario del Server'; -$_lang["set_automatic"] = 'Impostazione automatica'; -$_lang["set_default"] = 'Imposta default'; -$_lang["set_default_all"] = 'Imposta defaults'; -$_lang["settings_after_install"] = 'Dato che questa è una nuova installazione, vi preghiamo di controllare queste impostazioni e di cambiare quelle che desiderate. Dopo aver controllato le impostazioni, premete \'Salva\' per aggiornare la configurazione di sistema.

          '; -$_lang["settings_config"] = 'Configurazione'; -$_lang["settings_dependencies"] = 'Dipendenze'; -$_lang["settings_events"] = 'Eventi di Sistema'; -$_lang["settings_furls"] = 'Impostazioni URL Semplici'; -$_lang["settings_general"] = 'Informazioni Generali'; -$_lang["settings_group_tv_message"] = 'Scegli se le Template Variabili devono essere raggruppate in sezioni o schede (nominate dalla categoria TV) quando si modifica una risorsa'; -$_lang["settings_group_tv_options"] = 'No, Sezioni in General tab, Tabs in General tab, Sezioni in nuove tab, Tabs in nuove tab, Nuove tabs'; -$_lang["settings_misc"] = 'Impostazioni varie'; -$_lang["settings_security"] = 'Sicurezza'; -$_lang["settings_KC"] = 'File Browser'; -$_lang["settings_page_settings"] = 'Impostazioni Pagina'; -$_lang["settings_photo"] = 'Foto'; -$_lang["settings_properties"] = 'Proprietà'; -$_lang["show_fullscreen_btn_message"] = 'Mostra nel menu il bottone Attiva / disattiva schermo intero'; -$_lang["show_newresource_btn_message"] = 'Mostra il menu Nuova Risorsa'; -$_lang["settings_show_picker_message"] = 'Personalizza il tema del manager e salva in localstorage'; -$_lang["show_fullscreen_btn"] = 'Attiva / disattiva schermo intero'; -$_lang["show_newresource_btn"] = 'Menu Nuova Risorsa'; -$_lang["settings_site"] = 'Impostazioni sito'; -$_lang["settings_strip_image_paths_message"] = 'Se questo valore è impostato su \'No\', EVO imposterà come assoluti gli URL di quello che caricate col File Browser (immagini, file, flash, ecc.). Impostando su \'Si\' si avranno degli URL relativi, utili se dovete spostare l\'installazione di EVO, ad esempio da un sito di test ad uno di produzione. Se non avete idea di cosa significa, lasciate impostato su \'Si\'.'; -$_lang["settings_strip_image_paths_title"] = 'Riscrivere gli URL del Browser:'; -$_lang["settings_templvars"] = 'Variabili di Template'; -$_lang["settings_title"] = 'Impostazioni EVO'; -$_lang["settings_ui"] = 'Impostazioni editor e interfaccia'; -$_lang["settings_users"] = 'Impostazioni utente'; -$_lang["show_meta"] = 'Mostra le META Keywords:'; -$_lang["show_meta_message"] = 'Mostra META Keywords (deprecato) quando si modificano le Risorse nel Manager.'; -$_lang["show_tree"] = 'Mostra struttura ad albero'; -$_lang["show_picker"] = 'Mostra Color Switcher'; -$_lang["showing"] = 'Visualizzo'; +Framework PHP e Sistema di Gestione dei Contenuti (CMS) distribuito con licenza GNU GPL.'; +$_lang["about_title"] = 'Cos\'è EVO'; +$_lang["access_permission_denied"] = 'Non avete i permessi per accedere alla Risorsa.'; +$_lang["access_permission_parent_denied"] = 'Non avete il permesso di creare o spostare qui una Risorsa! Scegliete un\'altra destinazione.'; +$_lang["access_permissions"] = 'Permessi di accesso'; +$_lang["access_permissions_add_resource_group"] = 'Crea un nuovo Gruppo di Risorse'; +$_lang["access_permissions_add_user_group"] = 'Crea un nuovo Gruppo di Utenti'; +$_lang["access_permissions_docs_collision"] = 'A causa di un conflitto fra il Web User Groups e il Manager User Groups del vostro Ruolo, questa Risorsa sarà pubblica. Contattare un amministratore di sistema per maggiori chiarimenti.'; +$_lang["access_permissions_docs_message"] = 'Qui potete selezionare a quali gruppi appartiene la Risorsa'; +$_lang["access_permissions_group_link"] = 'Crea un nuovo gruppo'; +$_lang["access_permissions_introtext"] = 'Qui potete gestire i Gruppi di Utenti e i Gruppi di Risorse. Per aggiungere un utente a un gruppo, modificate l\'utente e selezionate il gruppo di cui deve fare parte. Per assegnare una Risorsa ad un Gruppo di Utenti, modificate la Risorsa e selezionate i gruppi a cui deve appartenere.'; +$_lang["access_permissions_link_to_group"] = 'al Gruppo Risorse'; +$_lang["access_permissions_link_user_group"] = 'Link a Gruppo Utenti'; +$_lang["access_permissions_links"] = 'Collegamenti Gruppi di Utenti/Risorse'; +$_lang["access_permissions_links_tab"] = 'Qui potete specificare a quali Gruppi di Utenti è permesso l\'accesso ai Gruppi di Risorse (ad es.: possono modificare o creare Risorse). Per collegare un Gruppo di Risorse a un Gruppo di Utenti, selezionatelo dalla lista a tendina, e fate clic su \'Aggiungi gruppo\'. Per rimuovere il collegamento ad un certo gruppo premete \'Rimuovi ->\'. Il collegamento sarà immediatamente eliminato.'; +$_lang["access_permissions_no_resources_in_group"] = 'Nessuno.'; +$_lang["access_permissions_no_users_in_group"] = 'Nessuno.'; +$_lang["access_permissions_off"] = 'I permessi di accesso non sono stati attivati. Questo significa che qualsiasi modifica qui eseguita non avrà alcun effetto finchè i permessi di accesso non saranno attivati.'; +$_lang["access_permissions_resource_groups"] = 'Gruppi di Risorse'; +$_lang["access_permissions_resources_in_group"] = 'Risorse nel gruppo: '; +$_lang["access_permissions_resources_tab"] = 'Qui potete vedere i Gruppi di Risorse che sono stati impostati. Potete anche crearne di nuovi, rinominarli, eliminarli e vedere quali Risorse sono presenti nei differenti gruppi (posizionate il mouse sull\'ID della Risorsa per vederne il nome). Per aggiungere una Risorsa ad un gruppo o per rimuoverla da un gruppo, modificate direttamente la Risorsa.'; +$_lang["access_permissions_user_groups"] = 'Gruppi di Utenti'; +$_lang["access_permissions_user_message"] = 'Qui potete selezionare a quali Gruppi di Utenti appartiene l\'utente:'; +$_lang["access_permissions_users_in_group"] = 'Utenti del gruppo: '; +$_lang["access_permissions_users_tab"] = 'Qui potete vedere i Gruppi di Utenti che sono stati impostati. Potete anche crearne di nuovi, rinominarli, eliminarli e vedere quali utenti fanno parte dei differenti gruppi. Per aggiungere un nuovo utente a un gruppo o per rimuoverlo da un gruppo, modificate direttamente l\'utente. Gli amministratori (utenti a cui è assegnato il Ruolo con ID 1) hanno sempre accesso a tutte le Risorse, quindi non hanno necessità di essere aggiunti ad alcun gruppo.'; +$_lang["account_email"] = 'Indirizzo email'; +$_lang["actioncomplete"] = 'Azione completata con successo!
          Vi preghiamo di attendere che EVO ripulisca.'; +$_lang["activity_message"] = 'Questa lista mostra le ultime Risorse che avete creato o modificato:'; +$_lang["activity_title"] = 'Risorse modificate o create di recente'; +$_lang["add"] = 'Aggiungi'; +$_lang["add_chunk"] = 'Aggiungi Chunk'; +$_lang["add_doc"] = 'Aggiungi Risorsa'; +$_lang["add_folder"] = 'Nuova cartella'; +$_lang["add_plugin"] = 'Aggiungi Plugin'; +$_lang["add_resource"] = 'Nuova Risorsa'; +$_lang["add_snippet"] = 'Aggiungi Snippet'; +$_lang["add_tag"] = 'Aggiungi tag'; +$_lang["add_template"] = 'Aggiungi Template'; +$_lang["add_tv"] = 'Aggiungi Variabile di Template'; +$_lang["add_weblink"] = 'Nuovo Link Web'; +$_lang["administrator_role_message"] = 'Questo Ruolo non può essere modificato o eliminato.'; +$_lang["administrators"] = 'Amministratori'; +$_lang["after_saving"] = 'Dopo il salvataggio'; +$_lang["alert_delete_self"] = 'Non potete eliminare voi stessi!'; +$_lang["alias"] = 'Alias'; +$_lang["all_doc_groups"] = 'Tutti i Gruppi di Risorse (Pubblico)'; +$_lang["all_events"] = 'Tutti gli eventi'; +$_lang["all_usr_groups"] = 'Tutti i Gruppi di Utenti (Pubblico)'; +$_lang["allow_mgr_access"] = 'Accesso all\'interfaccia di amministrazione'; +$_lang["allow_mgr_access_message"] = 'Selezionate questa opzione per abilitare o disabilitare l\'accesso dell\'utente al Manager. NOTA: Se selezionate \'No\' l\'utente verrà ridiretto alla Pagina di accesso del Manager o alla Home Page del sito.'; +$_lang["already_deleted"] = 'è già stato eliminato.'; +$_lang["attachment"] = 'Allegato'; +$_lang["author_infos"] = 'Info sull\'autore'; +$_lang["automatic_alias_message"] = 'Selezionate \'Si\' affinchè il sistema, al momento del salvataggio, generi automaticamente un alias basato sul titolo della Risorsa.'; +$_lang["automatic_alias_title"] = 'Genera automaticamente l\'alias:'; +$_lang["backup"] = 'Backup'; +$_lang["bk_manager"] = 'Backup'; +$_lang["block_message"] = 'L\'utente sarà bloccato dopo aver salvato i suoi dati!'; +$_lang["blocked_minutes_message"] = 'Qui potete inserire per quanti minuti un utente sarà bloccato dopo aver superato il numero consentito di login errati. Inserite solo numeri, senza punti o virgole.'; +$_lang["blocked_minutes_title"] = 'Minuti di blocco:'; +$_lang["cache_files_deleted"] = 'Sono stati eliminati i seguenti files:'; +$_lang["cancel"] = 'Annulla'; +$_lang["captcha_code"] = 'Codice di sicurezza'; +$_lang["captcha_message"] = 'Abilitatelo per aumentare la sicurezza richiedendo agli utenti di inserire un codice illeggibile dalle macchine (e dagli script degli hackers).'; +$_lang["captcha_title"] = 'Usa codici CAPTCHA:'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_message"] = 'Qui potete inserire una lista di parole CAPTCHA da usare quando CAPTCHA è abilitato. Separate le parole con virgole. Questo campo è limitato a 255 caratteri.'; +$_lang["captcha_words_title"] = 'Parole CAPTCHA:'; +$_lang["category_heading"] = 'Categoria'; +$_lang["category_manager"] = 'Gestione Categorie'; +$_lang["category_management"] = 'Gestione Categorie'; +$_lang["manage_categories"] = 'Gestione Categorie'; +$_lang["category_msg"] = 'Qui potete vedere tutte le Risorse per categoria.'; +$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; +$_lang["cfg_base_url"] = 'MODX_BASE_URL'; +$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; +$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; +$_lang["cfg_site_url"] = 'MODX_SITE_URL'; +$_lang["change_name"] = 'Cambia nome'; +$_lang["change_password"] = 'Cambia password'; +$_lang["change_password_confirm"] = 'Conferma password'; +$_lang["change_password_message"] = 'Inserite la nuova password e successivamente riscrivetela per conferma. La password deve essere lunga da 6 a 15 caratteri.'; +$_lang["change_password_new"] = 'Nuova password'; +$_lang["charset_message"] = 'Selezionate la codifica caratteri per la variabile di sistema [(modx_charset)]. Questa impostazione non ha impatto sul Manager.'; +$_lang["charset_title"] = 'Codifica caratteri:'; +$_lang["chunk"] = 'Chunk'; +$_lang["chunk_code"] = 'Codice del Chunk (HTML)'; +$_lang["chunk_multiple_id"] = 'Errore: Diversi Chunks hanno lo stesso ID.'; +$_lang["chunk_no_exist"] = 'Il Chunk non esiste.'; +$_lang["cleaningup"] = 'Sto ripulendo'; +$_lang["clean_uploaded_filename"] = 'Normalizzare automaticamente i nomi dei files caricati'; +$_lang["clean_uploaded_filename_message"] = 'Usa la configurazione di default o quella di transalias per eliminare dal nome dei files caricati i caratteri speciali, mantenendo i punti (.)'; +$_lang["clear_log"] = 'Pulisci log'; +$_lang["click_to_context"] = 'Cliccate per accedere al menu contestuale'; +$_lang["click_to_edit_title"] = 'Cliccate qui per modificare questo record'; +$_lang["click_to_view_details"] = 'Cliccate qui per vedere i dettagli'; +$_lang["close"] = 'Chiudi'; +$_lang["code"] = 'Codice'; +$_lang["collapse_tree"] = 'Comprimi struttura ad albero'; +$_lang["comment"] = 'Commenti'; +$_lang["configcheck_admin"] = 'Vi preghiamo di contattare l\'amministratore di sistema e avvisarlo di questo messaggio!'; +$_lang["configcheck_cache"] = 'impossibile scrivere nella directory della cache'; +$_lang["configcheck_cache_msg"] = 'EVO non può scrivere nella cartella cache. EVO continuerà a funzionare come previsto, ma non sarà possibile fare caching. Per risolvere, rendete la cartella /_cache/ scrivibile.'; +$_lang["configcheck_configinc"] = 'Il file di configurazione (/[+MGR_DIR+]/includes/config.inc.php) è ancora scrivibile'; +$_lang["configcheck_configinc_msg"] = 'Qualche malintenzionato potrebbe combinare guai sul vostro sito e tutto ciò che è collegato ad esso. Sul serio. Impostate il file di configurazione (/[+MGR_DIR+]/includes/config.inc.php) in sola lettura!'; +$_lang["configcheck_default_msg"] = 'E\' stato trovato un avviso non specificato. Questo è strano.'; +$_lang["configcheck_errorpage_unavailable"] = 'La pagina di Errore del vostro sito non è disponibile.'; +$_lang["configcheck_errorpage_unavailable_msg"] = 'Ciò significa che la pagina di Errore non esiste o non è accessibile da parte dei normali visitatori web. Questo può generare un loop ricorsivo e scrivere numerosi errori nel log del vostro sito. Verificate che non ci siano Gruppi di Utenti Web assegnati a questa pagina.'; +$_lang["configcheck_errorpage_unpublished"] = 'La pagina di Errore del vostro sito non esiste o non è stata pubblicata.'; +$_lang["configcheck_errorpage_unpublished_msg"] = 'Ciò significa che la pagina di Errore non è accessibile da parte del pubblico. Pubblicate la pagina o selezionate una Risorsa esistente nella struttura ad albero del vostro sito dal menu Strumenti -> Configurazione.'; +$_lang["configcheck_filemanager_path"] = 'L\'impostazione File Manager path sembra errata.'; +$_lang["configcheck_filemanager_path_msg"] = 'Questo può accadere, per esempio, quando si sposta l\'installazione di EVO in una differente cartella o server. Per favore, controlla e aggiorna la configurazione di sistema di EVO.'; +$_lang["configcheck_hide_warning"] = 'Non mostrare più questo messaggio.'; +$_lang["configcheck_images"] = 'Impossibile scrivere nella directory delle immagini'; +$_lang["configcheck_images_msg"] = 'La cartella immagini non è scrivibile o non esiste. Questo significa che il sistema di gestione immagini dell\'editor non funzionerà!'; +$_lang["configcheck_installer"] = 'L\'Installer è ancora presente'; +$_lang["configcheck_installer_msg"] = 'La directory /install contiene il programma di installazione di EVO. Immaginate cosa potrebbe succedere se un malintenzionato trovasse questa directory ed eseguisse l\'installazione. Forse non riuscirebbe a fare molto visto che gli servirebbe anche la password per la connessione al database, ma è decisamente meglio cancellare questa directory dal server.'; +$_lang["configcheck_lang_difference"] = 'Numero errato di voci nel file di lingua'; +$_lang["configcheck_lang_difference_msg"] = 'La lingua correntemente selezionata ha un differente numero di voci rispetto alla lingua di default. Pur non essendo necessariamente un problema, questo significa che il file di lingua richiede un aggiornamento.'; +$_lang["configcheck_notok"] = 'Verificare alcuni dettagli della configurazione: '; +$_lang["configcheck_ok"] = 'Controllo OK - Nessun avviso da segnalare.'; +$_lang["configcheck_php_gdzip"] = 'Le estensioni PHP GD e/o Zip non sono state trovate'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO richiede le estensioni PHP GD e Zip. EVO funziona anche senza, ma non potrete utilizzare File Manager, Image Editor e Captcha.'; +$_lang["configcheck_rb_base_dir"] = 'L\'impostazione File base path sembra errata.'; +$_lang["configcheck_rb_base_dir_msg"] = 'Questo può accadere, per esempio, quando si sposta l\'installazione di EVO in una differente cartella o server. Per favore, controlla e aggiorna la configurazione di sistema di EVO.'; +$_lang["configcheck_register_globals"] = 'Nel vostro file di configurazione php.ini, il valore register_globals è impostato su ON'; +$_lang["configcheck_register_globals_msg"] = 'Questa configurazione rende il vostro sito molto più suscettibile agli attacchi di Cross Site Scripting (XSS). Contattate il vostro fornitore di hosting per capire cosa si può fare per disabilitare questa impostazione.'; +$_lang["configcheck_title"] = 'Controllo della configurazione'; +$_lang["configcheck_templateswitcher_present"] = 'Rilevato il Plugin TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_delete"] = 'Elimina TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_disable"] = 'Disabilita TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_msg"] = 'Il Plugin TemplateSwitcher puo\' creare problemi di prestazioni e caching, vi consigliamo di utilizzarlo solo se necessario.'; +$_lang["configcheck_unauthorizedpage_unavailable"] = 'La pagina Non Autorizzato del vostro sito non esiste o non è stata pubblicata.'; +$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Ciò significa che la pagina di Non Autorizzato non esiste o non è accessibile da parte dei normali visitatori web. Questo fatto generare un loop ricorsivo e scrivere numerosi errori nel log del vostro sito. Verificate che non ci siano Gruppi di Utenti Web assegnati a questa pagina.'; +$_lang["configcheck_unauthorizedpage_unpublished"] = 'La pagina Non Autorizzato del vostro sito non è stata pubblicata.'; +$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Ciò significa che la pagina di Non Autorizzato non è accessibile ai visitatori. Pubblicate la pagina o selezionate una Risorsa esistente nella struttura ad albero del vostro sito dal menu Strumenti -> Configurazione.'; +$_lang["configcheck_validate_referer"] = 'Avviso di Sicurezza: Validazione headers HTTP'; +$_lang["configcheck_validate_referer_msg"] = 'L\'opzione di Validazione degli headers HTTP_REFERER? non è attivata. Raccomandiamo di attivarla. Vai alle Opzioni di Configurazione'; +$_lang["configcheck_warning"] = 'Avviso di configurazione:'; +$_lang["configcheck_what"] = 'Che cosa significa?'; +$_lang["confirm_block"] = 'Siete sicuri di voler bloccare l\'utente?'; +$_lang["confirm_delete_category"] = 'Sei sicuro di voler cancellare questa categoria?'; +$_lang["confirm_delete_eventlog"] = 'Siete sicuri di voler cancellare questo log?'; +$_lang["confirm_delete_file"] = 'Siete sicuri di voler eliminare il file?\n\nQuesto potrebbe impedire al sito di funzionare regolarmente! Eliminatelo solo se avete la certezza che quello che state facendo non pregiudica nulla.'; +$_lang["confirm_delete_group"] = 'Sei sicuro di voler eliminare questo gruppo?'; +$_lang["confirm_delete_htmlsnippet"] = 'Siete sicuri di voler eliminare il Chunk?'; +$_lang["confirm_delete_keywords"] = 'Siete sicuri di voler eliminare le parole chiave?'; +$_lang["confirm_delete_module"] = 'Siete sicuri di voler cancellare questo Modulo?'; +$_lang["confirm_delete_plugin"] = 'Siete sicuri di voler eliminare questo Plugin?'; +$_lang["confirm_delete_record"] = 'Siete sicuri di voler eliminare i records selezionati?'; +$_lang["confirm_delete_resource"] = 'Siete sicuri di voler eliminare questa Risorsa?\nSaranno eliminate anche tutte le Risorse in essa contenute.'; +$_lang["confirm_delete_role"] = 'Siete sicuri di voler eliminare questo Ruolo?'; +$_lang["confirm_delete_snippet"] = 'Siete sicuri di voler eliminare lo Snippet?'; +$_lang["confirm_delete_tags"] = 'Siete sicuri di voler cancellare questo META tag?'; +$_lang["confirm_delete_template"] = 'Siete sicuri di voler eliminare il Template?'; +$_lang["confirm_delete_tmplvars"] = 'Siete sicuri di voler rimuovere la Variabile di Template e tutti i suoi valori memorizzati?'; +$_lang["confirm_delete_user"] = 'Siete sicuri di voler eliminare l\'utente?'; +$_lang["confirm_duplicate_record"] = 'Siete sicuri di voler duplicare questo record?'; +$_lang["confirm_empty_trash"] = 'Volete rimuovere permanentemente tutte le Risorse eliminate?\n\nProcedere?'; +$_lang["confirm_load_depends"] = 'Siete sicuri di voler caricare la finestra di Impostazione Dipendenze senza salvare le modifiche?'; +$_lang["confirm_name_change"] = 'Cambiare nome utente può avere effetto su altre applicazioni collegate al Sistema di Gestione dei Contenuti. \n\n Siete sicuri di voler cambiare il nome utente?'; +$_lang["confirm_publish"] = '\n\nPubblicando ora la Risorsa rimuoverete ogni data di pubblicazione o ritiro che potreste aver impostato. Se invece volete cambiare o mantenere le date di pubblicazione/ritiro, allora scegliete la \'modifica\' della Risorsa.\n\nProcedere?'; +$_lang["confirm_remove_locks"] = 'Gli utenti a volte chiudono il browser mentre stanno modificando Risorse, Templates o Snippets lasciando con ogni probabilità questi oggetti in stato di blocco.\nPremendo OK rimuoverete TUTTI i blocchi attualmente presenti.\n\nProcedere?'; +$_lang["confirm_reset_sort_order"] = 'Sei sicuro di voler azzerare l\'\"ordinamento / indice\" di tutti gli elementi elencati a 0?'; +$_lang["confirm_resource_duplicate"] = 'Siete sicuri di voler duplicare questa Risorsa/Cartella? Saranno anche duplicate tutte le Risorse/Catelle che contiene.'; +$_lang["confirm_setting_language_change"] = 'Avete modificato il valore di default e si perderanno le modifiche. Procedere?'; +$_lang["confirm_unblock"] = 'Siete sicuri di voler sbloccare l\'utente?'; +$_lang["confirm_undelete"] = '\n\nTutte le Risorse eliminate insieme alla Risorsa genitore potranno essere recuperate, ma non quelle eliminate in precedenza.'; +$_lang["confirm_unpublish"] = '\n\nRitirando ora la Risorsa rimuoverete ogni data di pubblicazione o ritiro che potreste aver impostato. Se invece volete cambiare o mantenere le date di pubblicazione e ritiro scegliete la \'modifica\' della Risorsa.\n\nProcedere?'; +$_lang["confirm_unzip_file"] = 'Siete sicuri di voler decomprimere il file?\n\nI file esistenti potrebbero essere sovrascritti.'; +$_lang["could_not_find_user"] = 'Utente non trovato'; +$_lang["create_folder_here"] = 'Crea una cartella'; +$_lang["create_resource_here"] = 'Crea una Risorsa'; +$_lang["create_resource_title"] = 'Crea Risorsa'; +$_lang["create_weblink_here"] = 'Crea un Link Web'; +$_lang["createdon"] = 'Data di creazione'; +$_lang["create_new"] = 'Crea nuovo'; +$_lang["credits"] = 'Crediti'; +$_lang["credits_shouts_msg"] = '

          EVO è gestito e mantenuto da evo.im.

          '; +$_lang["custom_contenttype_message"] = 'Qui potete impostare il \'content type\' delle Risorse pubblicate. Per aggiungere un nuovo \'content type\' inseritelo nel campo e fate clic sul pulsante \'Aggiungi\'.'; +$_lang["custom_contenttype_title"] = 'Tipo di Contenuto personalizzato:'; +$_lang["database_charset"] = 'Set di Caratteri del Database'; +$_lang["database_collation"] = 'Collation del Database'; +$_lang["database_name"] = 'Nome del Database'; +$_lang["database_overhead"] = 'Nota: L\'Overhead è lo spazio inutilizzato riservato da MySQL. Per liberare questo spazio, cliccate sulla cifra overhead della tabella.'; +$_lang["database_server"] = 'Server del Database'; +$_lang["database_table_clickbackup"] = 'Effettua il backup e scarica le tabelle selezionate'; +$_lang["database_table_clickhere"] = 'Cliccate qui'; +$_lang["database_table_datasize"] = 'Dimensione dei dati'; +$_lang["database_table_droptablestatements"] = 'Genera dichiarazioni DROP TABLE.'; +$_lang["database_table_effectivesize"] = 'Dimensioni effettive'; +$_lang["database_table_indexsize"] = 'Dimensioni dell\'indice'; +$_lang["database_table_overhead"] = 'Overhead'; +$_lang["database_table_records"] = 'Numero di records'; +$_lang["database_table_tablename"] = 'Nome della tabella'; +$_lang["database_table_totals"] = 'Totali:'; +$_lang["database_table_totalsize"] = 'Dimensione totale'; +$_lang["database_tables"] = 'Tabelle del Database'; +$_lang["database_version"] = 'Versione Database:'; +$_lang["date"] = 'Data'; +$_lang["datechanged"] = 'Data ultima modifica'; +$_lang["datepicker_offset"] = 'Offset del Datepicker: '; +$_lang["datepicker_offset_message"] = 'Il numero di anni nel passato da mostrare nel datepicker.'; +$_lang["datetime_format"] = 'Formato Data:'; +$_lang["datetime_format_message"] = 'Il formato delle date nel Manager.'; +$_lang["default"] = 'Default:'; +$_lang["defaultcache_message"] = 'Selezionate \'Si\' se volete che di default tutte le nuove Risorse possano essere salvate nella cache.'; +$_lang["defaultcache_title"] = 'Inserisci in cache di default:'; +$_lang["defaultmenuindex_message"] = 'Selezionate \'Si\' per attivare di default l\'incremento automatico dell\'indice dei menu.'; +$_lang["defaultmenuindex_title"] = 'Incremento automatico indice dei Menu:'; +$_lang["defaultpublish_message"] = 'Selezionate \'Si\' se volete che tutte le nuove Risorse siano pubblicate di default.'; +$_lang["defaultpublish_title"] = 'Pubblicato di default:'; +$_lang["defaultsearch_message"] = 'Selezionate \'Si\' se volete che di default tutte le nuove Risorse siano ricercabili.'; +$_lang["defaultsearch_title"] = 'Ricercabile di default:'; +$_lang["defaulttemplate_message"] = 'Selezionate il Template di default che desiderate usare per le nuove Risorse. Potete sempre selezionarne di volta in volta uno diverso nell\'editor di Risorse, questa impostazione semplicemente ne preseleziona uno.'; +$_lang["defaulttemplate_title"] = 'Template di default:'; +$_lang["defaulttemplate_logic_title"] = 'Assegnazione Automatica del Template:'; +$_lang["defaulttemplate_logic_general_message"] = 'Le nuove Risorse avranno i seguenti Templates, verranno utilizzati i livelli piu\' alti se non trovati:'; +$_lang["defaulttemplate_logic_system_message"] = 'System: il Template di default del Sistema.'; +$_lang["defaulttemplate_logic_parent_message"] = 'Parent: lo stesso Template della cartella.'; +$_lang["defaulttemplate_logic_sibling_message"] = 'Sibling: lo stesso Template delle Risorse nella stessa cartella.'; +$_lang["delete"] = 'Elimina'; +$_lang["delete_resource"] = 'Elimina Risorsa'; +$_lang["delete_tags"] = 'Cancella tag'; +$_lang["deleting_file"] = 'Eliminazione file `%s`: '; +$_lang["description"] = 'Descrizione'; +$_lang["deselect_keywords"] = 'Cancella parole chiave'; +$_lang["deselect_metatags"] = 'Cancella META tag'; +$_lang["disabled"] = 'Disabilitati'; +$_lang["doc_data_title"] = 'Visualizza dati della Risorsa'; +$_lang["documentation"] = 'Documentazione'; +$_lang["duplicate"] = 'Duplica'; +$_lang["duplicate_alias_found"] = 'La Risorsa \'%s\' utilizza già l\'alias \'%s\'. Inserire un altro alias.'; +$_lang["duplicate_alias_message"] = 'Qui potete selezionare \'Si\' per permettere gli alias duplicati. NOTA: Questa opzione deve essere usata con l\'opzione \'Percorso URL Semplici\' attiva per evitare problemi di riferimenti alle Risorse.'; +$_lang["duplicate_alias_title"] = 'Permetti alias duplicati:'; +$_lang["duplicate_name_found_general"] = 'E\' già presente un %s chiamato \'%s\'. Inserite un nome univoco.'; +$_lang["duplicate_name_found_module"] = 'E\' già presente un Modulo chiamato \'%s\'. Inserite un nome univoco.'; +$_lang["duplicated_el_suffix"] = 'Duplica'; +$_lang["edit"] = 'Modifica'; +$_lang["edit_resource"] = 'Modifica Risorsa'; +$_lang["edit_resource_title"] = 'Crea/modifica Risorsa'; +$_lang["edit_settings"] = 'Configurazione'; +$_lang["editedon"] = 'Data modifica'; +$_lang["editing_file"] = 'Modifica file: '; +$_lang["editor_css_path_message"] = 'Inserite il percorso del file CSS che volete usare con l\'editor. Vi consigliamo di inserire il percorso dalla root del vostro server, ad esempio: /assets/site/style.css. Se non volete caricare lo stile nell\'editor, lasciate vuoto questo campo.'; +$_lang["editor_css_path_title"] = 'Percorso del file CSS:'; +$_lang["element"] = 'Elemento'; +$_lang["element_categories"] = 'Vista Combinata'; +$_lang["element_filter_msg"] = 'Scrivi qui per filtrare la lista'; +$_lang["element_management"] = 'Gestione Elementi'; +$_lang["element_name"] = 'Nome Elemento'; +$_lang["element_selector_msg"] = 'Selezionate l\'Elemento e cliccate sul pulsante \'Aggiungi\'.'; +$_lang["element_selector_title"] = 'Selettore Elementi'; +$_lang["elements"] = 'Elementi'; +$_lang["email"] = 'Email'; +$_lang["email_sent"] = 'Email inviata'; +$_lang["emailsender_message"] = 'L\'indirizzo e-mail dell\'amministratore del sito. Ad esempio, questo indirizzo e-mail verrà utilizzato come destinazione di notifica del sistema di e-mail, ecc'; +$_lang["emailsender_title"] = 'Indirizzo e-mail:'; +$_lang["emailsubject_default"] = 'Le vostre credenziali per il login'; +$_lang["emailsubject_message"] = 'Qui potete specificare l\'oggetto della e-mail di iscrizione.'; +$_lang["emailsubject_title"] = 'Oggetto e-mail:'; +$_lang["empty_folder"] = 'Questa cartella è vuota'; +$_lang["empty_recycle_bin"] = 'Rimuovi le Risorse eliminate'; +$_lang["empty_recycle_bin_empty"] = 'Non sono presenti Risorse eliminate da cancellare.'; +$_lang["enable_resource"] = 'Abilita Risorsa.'; +$_lang["enable_sharedparams"] = 'Abilita condivisione parametri'; +$_lang["enable_sharedparams_msg"] = 'NOTA: L\'id unico globale (GUID) sarà usato per identificare in maniera univoca questo Modulo e i suoi parametri condivisi. Il GUID è anche utilizzato per creare un collegamento tra il Modulo ed i Plugins o Snippets che accedono ai suoi parametri condivisi. '; +$_lang["enabled"] = 'Abilitati'; +$_lang["error"] = 'Errore'; +$_lang["error_sending_email"] = 'Errore invio mail'; +$_lang["errorpage_message"] = 'Inserite l\'ID della Risorsa da mostrare agli utenti che hanno richiesto una Risorsa che non esiste. NOTA: assicuratevi che l\'ID inserito appartenga a una Risorsa esistente e che sia stata pubblicata!'; +$_lang["errorpage_title"] = 'Pagina di errore:'; +$_lang["event_id"] = 'ID Evento'; +$_lang["eventlog"] = 'Log degli Eventi'; +$_lang["eventlog_msg"] = 'Il Log degli Eventi mostra gli avvisi ed i messaggi di errore generati dal sistema di gestione dei contenuti. La colonna \'Sorgente\' mostra la sezione del sistema di gestione dei contenuti in cui il messaggio è stato mostrato.'; +$_lang["eventlog_viewer"] = 'Log degli Eventi'; +$_lang["everybody"] = 'Tutti'; +$_lang["existing_category"] = 'Categoria attuale'; +$_lang["expand_tree"] = 'Espandi struttura ad albero'; +$_lang["export_site"] = 'Esporta sito in HTML (statico)'; +$_lang["export_site_cacheable"] = 'Includi file non inseribili in cache:'; +$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; +$_lang["export_site_failed"] = 'Fallita!'; +$_lang["export_site_failed_no_open"] = 'Impossibile aprire il file: '; +$_lang["export_site_failed_no_retrieve"] = 'Impossibile trovare la Risorsa.'; +$_lang["export_site_failed_no_write"] = 'Impossibile scrivere il file.'; +$_lang["export_site_html"] = 'Esporta sito in HTML'; +$_lang["export_site_maxtime"] = 'Tempo massimo di esportazione:'; +$_lang["export_site_maxtime_message"] = 'Qui potete specificare il numero di secondi che il sistema può impiegare per importare il sito (ignorando le impostazioni PHP). Inserite 0 per un tempo illimitato. Attenzione, un\'impostazione 0 o molto alta può causare un timeout del server, quindi non è raccomandata.'; +$_lang["export_site_message"] = '

          Usando questa funzione potete esportare l\'intero sito in HTML. Considerate che così facendo perderete molte funzionalità di EVO:

          • Gli accessi alle pagine dei files esportati non saranno registrati.
          • Gli Snippets interattivi NON funzionano nei file esportati.
          • Solo le normali Risorse saranno esportate, i Link Web non lo saranno.
          • Il processo di esportazione potrebbe fallire se le Risorse contengono Snippets che inviano headers HTTP di redirezione.
          • A seconda di come avete scritto i documenti, i fogli di stile e le immagini, il layout del sito potrebbe rompersi. Per sistemarlo, potete provare a salvare/spostare i file esportati nella stessa cartella dove risiede il file index.php di EVO.

          Compilate il form e premete \'Avvia esportazione\' per avviare il processo. I file creati saranno salvati nel punto specificato usando, ove possibile, gli alias dei documenti come nomi dei file. Nell\'esportare il sito, sarebbe meglio aver attivato gli \'URL Semplici\' nella configurazione di EVO. In base alla dimensione del sito, l\'esportazione potrebbe impiegare un po\' di tempo.

          Ogni file già esistente sarà sovrascritto dai nuovi file se hanno gli stessi nomi!

          '; +$_lang["export_site_numberdocs"] = '

          Trovate %s Risorse da esportare...

          '; +$_lang["export_site_prefix"] = 'Prefisso file:'; +$_lang["export_site_start"] = 'Avvia esportazione'; +$_lang["export_site_success"] = 'Riuscita!'; +$_lang["export_site_success_skip_dir"] = 'Saltare questa directory.'; +$_lang["export_site_success_skip_doc"] = 'Saltare questa Risorsa.'; +$_lang["export_site_suffix"] = 'Suffisso file:'; +$_lang["export_site_target_unwritable"] = 'La cartella target non è scrivibile. Vi preghiamo di assicurarvi che la cartella sia scrivibile e di riprovare.'; +$_lang["export_site_time"] = 'Esportazione terminata. L\'operazione è stata completata in %s secondi.'; +$_lang["failed_login_message"] = 'Qui potete inserire il numero delle volte che è consentito sbagliare l\'autenticazione prima che l\'account venga bloccato.'; +$_lang["failed_login_title"] = 'Autenticazioni errate consentite:'; +$_lang["fe_editor_lang_message"] = 'Selezionare il linguaggio dell\'editor quando usato nel front-end.'; +$_lang["fe_editor_lang_title"] = 'Lingua dell\'editor del Front-end:'; +$_lang["file_delete_file"] = 'Elimina File'; +$_lang["file_delete_folder"] = 'Elimina Cartella'; +$_lang["file_deleted"] = 'Riuscita!'; +$_lang["file_download_file"] = 'Scarica File'; +$_lang["file_download_unzip"] = 'Decomprimi File zip'; +$_lang["file_folder_chmod_error"] = 'Impossibile modificare i permessi: dovete effettuare la modifica dei permessi con un programma esterno a EVO.'; +$_lang["file_folder_created"] = 'Cartella creata con successo!'; +$_lang["file_folder_deleted"] = 'Cartella eliminata con successo!'; +$_lang["file_folder_not_created"] = 'Impossibile trovare la cartella'; +$_lang["file_folder_not_deleted"] = 'Impossibile eliminare la cartella. Verificare che sia vuota prima di eliminarla!'; +$_lang["file_not_deleted"] = 'Fallita!'; +$_lang["file_not_saved"] = 'Impossibile salvare il file, assicuratevi che la cartella di destinazione sia scrivibile!'; +$_lang["file_saved"] = 'File aggiornato con successo!'; +$_lang["file_unzip"] = 'Decompressione cartella effettuata con successo!'; +$_lang["file_unzip_fail"] = 'Decompressione cartella fallita!'; +$_lang["filemanager_path_message"] = 'IIS spesso non riesce a determinare correttamente la cartella principale usata dal File Manager per determinare ciò che potete vedere. Se avete problemi nell\'uso del File Manager, assicuratevi che il percorso punti alla root dell\'installazione di EVO.'; +$_lang["filemanager_path_title"] = 'Percorso del File Manager:'; +$_lang["files_access_denied"] = 'Accesso negato!'; +$_lang["files_data"] = 'Dati'; +$_lang["files_dir_listing"] = 'Elenco cartelle per:'; +$_lang["files_directories"] = 'Cartelle'; +$_lang["files_directory_is_empty"] = 'La cartella è vuota'; +$_lang["files_dirwritable"] = 'Cartella scrivibile?'; +$_lang["files_editfile"] = 'Modifica file'; +$_lang["files_file_type"] = 'Tipo file: '; +$_lang["files_filename"] = 'Nome file'; +$_lang["files_fileoptions"] = 'Opzioni'; +$_lang["files_files"] = 'File'; +$_lang["files_filesize"] = 'Dimensione file'; +$_lang["files_filetype_notok"] = 'Non è consentito il caricamento di questo tipo di file!'; +$_lang["files_management"] = 'Gestisci documenti'; +$_lang["files_management_no_permission"] = 'Non si dispone di autorizzazioni sufficienti per visualizzare o modificare tali file. Chiedere all\'amministratore l\'accesso a %s.'; +$_lang["files_modified"] = 'Modificato'; +$_lang["files_top_level"] = 'Al livello superiore'; +$_lang["files_up_level"] = 'Su di un livello'; +$_lang["files_upload_copyfailed"] = 'La copia del file nella cartella di destinazione non è riuscita - caricamento fallito!'; +$_lang["files_upload_error"] = 'Errore'; +$_lang["files_upload_error0"] = 'Si è verificato un problema durante il caricamento.'; +$_lang["files_upload_error1"] = 'Il file che state provando a caricare è troppo grande.'; +$_lang["files_upload_error2"] = 'Il file che state provando a caricare è troppo grande.'; +$_lang["files_upload_error3"] = 'Il file che state provando a caricare è stato copiato solo in parte.'; +$_lang["files_upload_error4"] = 'Dovete selezionare un file da caricare.'; +$_lang["files_upload_error5"] = 'Si è verificato un problema durante il caricamento.'; +$_lang["files_upload_inhibited_msg"] = 'Il caricamento file è inibito - assicuratevi che il caricamento sia supportato e che la cartella sia scrivibile da PHP.
          '; +$_lang["files_upload_ok"] = 'File caricato con successo!'; +$_lang["files_upload_permissions_error"] = 'Possibile errore nei permessi di scrittura - la directory deve poter essere scrivibile dal webserver.'; +$_lang["files_uploadfile"] = 'Carica file'; +$_lang["files_uploadfile_msg"] = 'Selezionate un file da caricare:'; +$_lang["files_uploading"] = 'Sto caricando %s in %s/
          '; +$_lang["files_viewfile"] = 'Visualizza file'; +$_lang["folder"] = 'Cartella'; +$_lang["forgot_password_email_fine_print"] = '* L\'indirizzo precedente non sarà più valido una volta che avrete cambiato la password o da domani.'; +$_lang["forgot_password_email_instructions"] = 'Da lì potrete cambiare la vostra password dal menu Il Mio Account.'; +$_lang["forgot_password_email_intro"] = 'E\' stata fatta una richiesta per cambiare la password del vostro account.'; +$_lang["forgot_password_email_link"] = 'Fate clic qui per completare il processo.'; +$_lang["forgot_your_password"] = 'Hai dimenticato la Password?'; +$_lang["friday"] = 'Venerdì'; +$_lang["friendly_alias_message"] = 'Se state usando gli URL Semplici, e la Risorsa ha un alias, quest\'ultimo avrà sempre precedenza sull\'URL Semplice. Impostando questa opzione su \'Si\', il prefisso e il suffisso dell\'URL Semplice saranno anche applicati all\'alias. Per esempio, se la Risorsa con l\'ID 1 ha per alias `introduction` e voi avete impostato un prefisso come `` e un suffisso come `.html`, settando questa opzione su `Si` sarà generato `introduction.html`. Se non ci sono alias, EVO genererà `1.html` come link.'; +$_lang["friendly_alias_title"] = 'Usa URL Semplici:'; +$_lang["friendlyurls_message"] = 'L\'opzione permette di usare gli URL Semplici per i motori di ricerca con EVO. Notate che l\'opzione ha effetto solo per le installazioni di EVO su Apache e che avrete anche bisogno di scrivere un file .htaccess perchè possa funzionare. Per maggiori informazioni, guardate il file .htaccess incluso nella distribuzione.'; +$_lang["friendlyurls_title"] = 'Usa URL Semplici:'; +$_lang["friendlyurlsprefix_message"] = 'Qui potete specificare il prefisso da usare con gli URL semplici. Ad esempio, un prefisso impostato su \'pagina\' trasformerà l\'URL /index.php?id=2 nell\'URL semplice /pagina2.html (assumendo che il suffisso sia impostato su .html). In questo modo potete specificare cosa gli utenti (e i motori di ricerca) vedranno per i links nel sito.'; +$_lang["friendlyurlsprefix_title"] = 'Prefisso per gli URL Semplici:'; +$_lang["friendlyurlsuffix_message"] = 'Qui potete specificare il suffisso degli URL semplici. Specificando \'.html\' sarà aggiunto .html a tutti gli URL semplici.'; +$_lang["friendlyurlsuffix_title"] = 'Suffisso per gli URL Semplici:'; +$_lang["functionnotimpl"] = 'Spiacente!'; +$_lang["functionnotimpl_message"] = 'Questa funzione non è ancora stata implementata.'; +$_lang["further_info"] = 'Ulteriori informazioni'; +$_lang["global_tabs"] = 'Global Tabs'; +$_lang["go"] = 'Vai'; +$_lang["group_access_permissions"] = 'Gruppi di accesso'; +$_lang['group_tvs'] = 'Raggruppa TV'; +$_lang["guid"] = 'GUID'; +$_lang["help"] = 'Aiuto'; +$_lang["help_msg"] = '

          Se avete bisogno di aiuto nell\'utilizzo di EVO, vi consigliamo di visitare i Forum EVO. Inoltre, il sito EVO contiene tutta la documentazione riguardo l\'uso di EVO o su come configurarlo, la risposta che state cercando potrebbe essere qui.

          Prevediamo anche di offrire servizi di supporto di tipo commerciale per EVO. Se siete interessati, inviateci un messaggio email.'; +$_lang["help_title"] = 'Aiuto'; +$_lang["hide_tree"] = 'Nascondi struttura ad albero'; +$_lang["home"] = 'Dashboard'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; +$_lang["htmlsnippet_desc"] = 'Descrizione'; +$_lang["htmlsnippet_management_msg"] = 'Qui potete scegliere i Chunks da modificare o crearne di nuovi.'; +$_lang["htmlsnippet_msg"] = 'Qui potete aggiungere/modificare i Chunks. Ricordate, i Chunks sono codice HTML \'raw\' (grezzo), quindi qualsiasi codice PHP al loro interno non verrà processato.'; +$_lang["htmlsnippet_name"] = 'Nome Chunk'; +$_lang["htmlsnippet_title"] = 'Crea/Modifica Chunk'; +$_lang["icon"] = 'Icona'; +$_lang["icon_description"] = 'classe CSS. i.e. fa fa-star'; +$_lang["id"] = 'ID'; +$_lang["illegal_parent_child"] = 'Assegnazione parentela:\n\nLa Risorsa è un sottodocumento della Risorsa selezionata.'; +$_lang["illegal_parent_self"] = 'Assegnazione parentela:\n\nLa Risorsa selezionata non può essere assegnata a se stessa.'; +$_lang["images_management"] = 'Gestisci immagini'; +$_lang["import_files_found"] = 'Trovate %s Risorse da importare...'; +$_lang["import_params"] = 'Importa i parametri condivisi del Modulo'; +$_lang["import_params_msg"] = 'Potete importare i parametri e le impostazioni di un Modulo selezionando il nome del Modulo dalla lista sottostante. NOTA: Affinchè un Modulo appaia nel menu questo Plugin/Snippet deve essere incluso nell\'elenco di dipendenza del Modulo ed il Modulo deve avere la attiva la condivisione dei parametri. '; +$_lang["import_parent_resource"] = 'Risorsa genitore:'; +$_lang["import_site"] = 'Importa Sito'; +$_lang["import_site_failed"] = 'Fallito!'; +$_lang["import_site_failed_db_error"] = 'Si è verificato un errore del database cercando di duplicare la Risorsa: '; +$_lang["import_site_failed_no_open_dir"] = 'Impossibile aprire la directory: '; +$_lang["import_site_failed_no_retrieve_file"] = 'Impossibile trovare il file: '; +$_lang["import_site_html"] = 'Importa sito da HTML'; +$_lang["import_site_importing_document"] = 'Importazione in corso %s '; +$_lang["import_site_maxtime"] = 'Tempo massimo importazione:'; +$_lang["import_site_maxtime_message"] = 'Qui potete specificare il numero di secondi che il sistema può impiegare per importare il sito (ignorando le impostazioni PHP). Inserite 0 per un tempo illimitato. Attenzione, un\'impostazione 0 o molto alta può causare un timeout del server, quindi non è raccomandata.'; +$_lang["import_site_message"] = '

          Usando questa funzione potete importare nel database un intero sito HTML. Da notare che ci sarà poi bisogno di copiare i vostri file html nella cartella assets/import.

          Compilate il form per avviare il processo di importazione. I files importati saranno salvati nella posizione selezionata, usando dove possibile i nomi dei files come alias delle Risorse, il titolo della Risorsa come titolo della pagina.

          '; +$_lang["import_site_skip"] = 'Saltato!'; +$_lang["import_site_start"] = 'Avvia importazione'; +$_lang["import_site_success"] = 'Effettuato!'; +$_lang["import_site_time"] = 'Importazione completata in %s secondi.'; +$_lang["inbox"] = 'Inbox'; +$_lang["info"] = 'Info'; +$_lang["information"] = 'Informazioni'; +$_lang["inline"] = 'In linea'; +$_lang["insert"] = 'Inserisci'; +$_lang["maxImageWidth"] = 'Larghezza massima immagine:'; +$_lang["maxImageHeight"] = 'Altezza massima immagine:'; +$_lang["clientResize"] = 'Ridimensiona le immagini dal browser'; +$_lang["clientResize_message"] = 'Se abilitato le immagini verranno ridimensionate dal browser prima di essere caricate'; +$_lang["noThumbnailsRecreation"] = 'Crea le anteprime solo al caricamento'; +$_lang["noThumbnailsRecreation_message"] = 'Il File Browser genererà le anteprime solo al caricamento; se non c\'è l\'anteprima per qualche immagine, non verrà creata'; +$_lang["thumbWidth"] = 'Larghezza massima della miniatura:'; +$_lang["thumbHeight"] = 'Altezza massima della miniatura:'; +$_lang["thumbsDir"] = 'Percorso della cartella delle miniature:'; +$_lang["jpegQuality"] = 'Compressione JPEG:'; +$_lang["denyZipDownload"] = 'Disabilita il download degli archivi zip:'; +$_lang["denyExtensionRename"] = 'Disabilita la modifica delle estensioni dei file:'; +$_lang["maxImageWidth_message"] = 'Se la risoluzione dell\'immagine caricata supera questa impostazione verrà automaticamente ridimensionata. Impostare 0 per disabilitare.'; +$_lang["maxImageHeight_message"] = 'Se la risoluzione dell\'immagine caricata supera questa impostazione verrà automaticamente ridimensionata. Impostare 0 per disabilitare.'; +$_lang["thumbWidth_message"] = 'Larghezza massima della miniatura.'; +$_lang["thumbHeight_message"] = 'Altezza massima della miniatura.'; +$_lang["thumbsDir_message"] = 'Il nome della directory delle miniature'; +$_lang["jpegQuality_message"] = 'Qualità della compressione JPEG delle miniature ridimensionate.'; +$_lang["showHiddenFiles"] = 'Mostra i file nascosti nel File Browser:'; +$_lang["keyword"] = 'Parola chiave'; +$_lang["keywords"] = 'Parole chiave'; +$_lang["keywords_intro"] = 'Per modificare una parola chiave, digitate semplicemente la nuova parola nel campo di testo a fianco di quella che volete cambiare. Per eliminare una parola chiave, spuntate il box \'Elimina\' per quella parola. Se impostate l\'eliminazione di una parola chiave e allo stesso tempo ne modificate il nome, essa verrà eliminata vanificando l\'operazione di rinomina!'; +$_lang["language_message"] = 'Selezionate la lingua da usare nel Manager EVO.'; +$_lang["language_title"] = 'Lingua del Manager'; +$_lang["last_update"] = 'Ultimo aggiornamento'; +$_lang["launch_site"] = 'Mostra sito'; +$_lang["license"] = 'Licenza'; +$_lang["link_attributes"] = 'Attributi del link'; +$_lang["link_attributes_help"] = 'Qui potete inserire gli attributi per i link a questa pagina, come target= o rel=.'; +$_lang["list_mode"] = 'Abilita/disabilita modalità lista - elencare tutti i record nella griglia.'; +$_lang["loading_doc_tree"] = 'Sto caricando la struttura ad albero delle Risorse...'; +$_lang["loading_menu"] = 'Sto caricando il menu...'; +$_lang["loading_page"] = 'Vi preghiamo di attendere che EVO carichi la pagina...'; +$_lang["localtime"] = 'Orario locale'; +$_lang["lock_htmlsnippet"] = 'Impedisci la modifica del Chunk'; +$_lang["lock_htmlsnippet_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare il Chunk.'; +$_lang["lock_module"] = 'Impedisci la modifica del Modulo'; +$_lang["lock_module_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questo Modulo.'; +$_lang["lock_msg"] = '%s sta attualmente modificando %s. Attendete che l\'altro utente finisca e poi riprova.'; +$_lang["lock_plugin"] = 'Impedisci la modifica del Plugin'; +$_lang["lock_plugin_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questo Plugin.'; +$_lang["lock_settings_msg"] = '%s sta attualmente modificando queste impostazioni. Attendete che l\'altro utente finisca e poi riprovate.'; +$_lang["lock_snippet"] = 'Impedisci la modifica dello Snippet'; +$_lang["lock_snippet_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare lo Snippet.'; +$_lang["lock_template"] = 'Impedisci la modifica del Template'; +$_lang["lock_template_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare il Template.'; +$_lang["lock_tmplvars"] = 'Impedisci la modifica della Variabile di Template'; +$_lang["lock_tmplvars_msg"] = 'Solo gli amministratori (Ruolo ID 1) possono modificare questa variabile'; +$_lang["locked"] = 'Bloccato'; +$_lang["login_allowed_days"] = 'Giorni consentiti'; +$_lang["login_allowed_days_message"] = 'Selezionate i giorni della settimana nei quali questo utente sarà autorizzato a collegarsi.'; +$_lang["login_allowed_ip"] = 'Indirizzo IP autorizzato'; +$_lang["login_allowed_ip_message"] = 'Inserite l\'indirizzo IP dal quale questo utente si può collegare. NOTA: Se volete inserire più indirizzi IP separateli con una virgola (,)'; +$_lang["login_button"] = 'Accedi'; +$_lang["login_cancelled_install_in_progress"] = 'Installazione o aggiornamento di questo sito in corso.
          Riprova tra qualche minuto

          '; +$_lang["login_cancelled_site_was_updated"] = 'Installazione o aggiornamento completata su questo sito, effettuare nuovamente il login!
          '; +$_lang["login_captcha_message"] = 'Inserite il codice di sicurezza mostrato all\'interno dell\'immagine grafica. Se avete difficoltà nel leggere il codice, cliccateci sopra per generarne un altro a caso, oppure contattate l\'amministratore del sito.'; +$_lang["login_homepage"] = 'Autenticazione Pagina d\'inizio'; +$_lang["login_homepage_message"] = 'Inserite l\'ID della Risorsa da mostrare all\'utente dopo che ha eseguito l\'autenticazione. NOTA: assicuratevi che la Risorsa indicata esista, sia pubblicata e accessibile all\'utente!'; +$_lang["login_message"] = 'Inserisci le tue credenziali per effettuare l\'accesso.
          Il sistema fa distinzione fra le maiuscole/minuscole del nome utente e della password.'; +$_lang["logo_slogan"] = 'Sistema di gestione dei contenuti EVO - \nCreate e fate di più con meno'; +$_lang["logout"] = 'Uscita'; +$_lang["long_title"] = 'Titolo esteso'; +$_lang["mail_check_timeperiod_message"] = 'Intervallo di tempo dopo il quale controllare se ci sono nuovi messaggi nel Manager, in secondi.'; +$_lang["mail_check_timeperiod_title"] = 'Frequenza di controllo messaggi:'; +$_lang["manage_depends"] = 'Configurazione Dipendenze'; +$_lang["manage_files"] = 'Gestione File'; +$_lang["manage_htmlsnippets"] = 'Chunks'; +$_lang["manage_metatags"] = 'Gestione META tag e parole chiave'; +$_lang["manage_modules"] = 'Gestione moduli'; +$_lang["manage_plugins"] = 'Plugins'; +$_lang["manage_snippets"] = 'Snippets'; +$_lang["manage_templates"] = 'Templates'; +$_lang["manage_documents"] = 'Documenti'; +$_lang["manager"] = 'Manager'; +$_lang["manager_lockout_message"] = '

          Siete entrati nel Manager EVO. Se desiderate uscire dalla sessione, fate clic sul pulsante "Uscita".

          Per andare alla pagina inziale fate clic sul pulsante "Home".'; +$_lang["manager_permissions"] = 'Gestione Permessi'; +$_lang["manager_theme"] = 'Tema del Manager EVO:'; +$_lang["manager_theme_message"] = 'Selezionate un tema per il Manager EVO.'; +$_lang["manager_theme_mode"] = 'Schema colori:'; +$_lang["manager_theme_mode1"] = 'è tutto chiaro'; +$_lang["manager_theme_mode2"] = 'l\'header è scuro'; +$_lang["manager_theme_mode3"] = 'l\'header e la sidebar sono scuri'; +$_lang["manager_theme_mode4"] = 'è tutto scuro'; +$_lang['manager_theme_mode_message'] = 'Questa impostazione viene utilizzata come "predefinita" e può essere sovrascritta dall\'utente con il pulsante "Modalità Colore del Tema", nell\'albero delle risorse: '; +$_lang['manager_theme_mode_title'] = 'Modalità colore del Tema'; +$_lang["messages"] = 'Messaggi'; +$_lang["messages_all"] = 'Tutti'; +$_lang["messages_compose"] = 'Componi messaggio'; +$_lang["messages_forward"] = 'Inoltra'; +$_lang["messages_from"] = 'Da'; +$_lang["messages_group"] = 'Un gruppo'; +$_lang["messages_inbox"] = 'Inbox'; +$_lang["messages_message"] = 'Messaggio'; +$_lang["messages_no_messages"] = 'Nessun messaggio nella Inbox.'; +$_lang["messages_not_allowed_to_read"] = 'Non siete autorizzati a leggere questo messaggio!'; +$_lang["messages_private"] = 'Privato'; +$_lang["messages_read_message"] = 'Leggi messaggio'; +$_lang["messages_reply"] = 'Rispondi'; +$_lang["messages_select_group"] = 'Seleziona un gruppo'; +$_lang["messages_select_user"] = 'Seleziona un Utente'; +$_lang["messages_send"] = 'Invia'; +$_lang["messages_send_to"] = 'Invia a'; +$_lang["messages_sent"] = 'Inviato il'; +$_lang["messages_subject"] = 'Oggetto'; +$_lang["messages_system_user"] = '[System]'; +$_lang["messages_title"] = 'Messaggi'; +$_lang["messages_user"] = 'Un Utente'; +$_lang["meta_keywords"] = 'META e parole chiave'; +$_lang["metatag_intro"] = 'In questa pagina potete eliminare, creare o modificare i META tag e le parole chiave. Per collegare le parole chiave alle Risorse, modificate la Risorsa in questione e selezionate le parole chiave desiderate dalla lista. Per aggiungere una parola chiave digitate la nuova parola e poi cliccate \'Aggiungi tag\'.'; +$_lang["metatag_notice"] = 'Per ulteriori informazioni, consultate la Guida di Riferimento HTML. Questa non è una lista completa di tutti i possibili META tag.'; +$_lang["metatags"] = 'META tag'; +$_lang["mgr_access_permissions"] = 'Gestione permessi di accesso'; +$_lang["mgr_login_start"] = 'Pagina di accesso del Manager'; +$_lang["mgr_login_start_message"] = 'Inserite l\'ID della Risorsa che volete mostrare agli utenti dopo l\'accesso al Manager. NOTA: assicuratevi che l\'ID appartenga ad una Risorsa esistente e che sia stata pubblicata!'; +$_lang["mgrlog_action"] = 'Azione'; +$_lang["mgrlog_actionid"] = 'ID Azione'; +$_lang["mgrlog_anyall"] = 'Qualunque/Tutti'; +$_lang["mgrlog_datecheckfalse"] = 'checkdate() ha restituito false.'; +$_lang["mgrlog_datefr"] = 'Data iniziale'; +$_lang["mgrlog_dateinvalid"] = 'Formato data errato.'; +$_lang["mgrlog_dateto"] = 'Data finale'; +$_lang["mgrlog_emptysrch"] = 'La vostra ricerca non ha prodotto risultati.'; +$_lang["mgrlog_field"] = 'Campo'; +$_lang["mgrlog_itemid"] = 'ID oggetto'; +$_lang["mgrlog_itemname"] = 'Nome oggetto'; +$_lang["mgrlog_msg"] = 'Messaggio'; +$_lang["mgrlog_noquery"] = 'Non è ancora stata effettuata una ricerca.'; +$_lang["mgrlog_qresults"] = 'Risultati della ricerca'; +$_lang["mgrlog_query"] = 'Selezione dei log di sistema'; +$_lang["mgrlog_query_msg"] = 'Selezionate quali informazioni volete vedere. Potete selezionare un intervallo di date, ma ricordate che le date che immettete non sono entrambe incluse. Ad esempio per selezionare tutti i dati di log del giorno 1 gennaio 2014, impostate \'Data iniziale\' su 01-01-2014 e \'Data finale\' su 02-01-2014.

          Messaggio ed azione sono in genere coincidenti. Se state cercando un messaggio specifico, è meglio impostare l\'azione su \'Qualunque/Tutti\'.'; +$_lang["mgrlog_results"] = 'Numero di risultati'; +$_lang["mgrlog_searchlogs"] = 'Ricerca log'; +$_lang["mgrlog_sortinst"] = 'Potete ordinare la tabella facendo clic sulle intestazioni delle colonne. Se i logs dovessero diventare troppo grandi, potete cancellare tutti i logs. Con la cancellazione vengono rimossi tutti i dati dei logs raccolti fino ad oggi e questa azione una volta avviata non può essere annullata!'; +$_lang["mgrlog_time"] = 'Ora'; +$_lang["mgrlog_user"] = 'Utente'; +$_lang["mgrlog_username"] = 'Nome utente'; +$_lang["mgrlog_value"] = 'Valore'; +$_lang["mgrlog_view"] = 'Mostra i logs del Manager'; +$_lang["module_code"] = 'Codice del Modulo (PHP)'; +$_lang["module_config"] = 'Configurazione del Modulo'; +$_lang["module_desc"] = 'Descrizione'; +$_lang["module_disabled"] = 'Modulo disabilitato'; +$_lang["module_edit_click_title"] = 'Cliccate qui per modificare il Modulo'; +$_lang["module_group_access_msg"] = 'Selezionate i gruppi autorizzati ad eseguire il Modulo.'; +$_lang["module_management"] = 'Gestione Moduli'; +$_lang["module_management_msg"] = 'Qui potete scegliere il Modulo che desiderate eseguire o modificare. Per eseguire un Modulo, fate clic sull\'icona del Modulo a sinistra sulla griglia. Per modificare un Modulo, fate clic sul suo nome.'; +$_lang["module_msg"] = 'Qui potete creare o modificare i Moduli. Un Modulo è un insieme di Elementi che interagiscono fra loro (ad es. Plugins, Snippets, ecc.).'; +$_lang["module_name"] = 'Nome del Modulo'; +$_lang["module_resource_msg"] = 'Qui potete aggiungere o rimuovere Risorse dalle quali dipende questo Modulo. Cliccate sul pulsante Aggiungi per aggiungere una Risorsa.'; +$_lang["module_resource_title"] = 'Dipendenze Moduli'; +$_lang["module_title"] = 'Crea/modifica Moduli'; +$_lang["module_viewdepend_msg"] = 'Qui potete vedere gli Elementi dai quali dipende il Modulo. Cliccate sul pulsante \'Configurazione Dipendenze\' per modificare le dipendenze'; +$_lang["modules"] = 'Moduli'; +$_lang["modx_news"] = 'Ultime Notizie EVO'; +$_lang["modx_news_tab"] = 'Novità EVO'; +$_lang["modx_news_title"] = 'Novità EVO'; +$_lang["modx_security_notices"] = 'Avvisi di Protezione EVO'; +$_lang["modx_version"] = 'Versione EVO'; +$_lang["monday"] = 'Lunedì'; +$_lang["move"] = 'Sposta'; +$_lang["move_resource"] = 'Sposta Risorsa'; +$_lang["move_resource_message"] = 'Potete spostare una Risorsa e tutti i suoi sottodocumenti selezionando un nuovo genitore nella struttura ad albero. Se selezionate una Risorsa che non è una cartella, essa sarà trasformata in cartella. Fate clic sulla nuova Risorsa genitore nella struttura ad albero delle Risorse.'; +$_lang["move_resource_new_parent"] = 'Vi preghiamo di selezionare una nuova Risorsa genitore nella struttura ad albero delle Risorse.'; +$_lang["move_resource_title"] = 'Sposta Risorsa'; +$_lang["name"] = 'Nome'; +$_lang["new_category"] = 'Nuova Categoria'; +$_lang["new_file_permissions_message"] = 'Durante il caricamento di un nuovo file nel sistema di gestione file, il sistema cercherà di cambiare i permessi del file secondo questa impostazione. Questo però potrebbe non funzionare in alcune configurazioni, come ad esempio IIS, nel qual caso dovrete procedere ad una modifica manuale dei permessi.'; +$_lang["new_file_permissions_title"] = 'Permessi dei nuovi files:'; +$_lang["new_folder_permissions_message"] = 'Durante la creazione di una nuova cartella nel sistema di gestione file, il sistema cercherà di cambiare i permessi della cartella secondo questa impostazione. Questo però potrebbe non funzionare in alcune configurazioni, come ad esempio IIS, nel qual caso dovrete procedere ad una modifica manuale dei permessi.'; +$_lang["new_folder_permissions_title"] = 'Permessi nuova cartella:'; +$_lang["new_htmlsnippet"] = 'Nuovo Chunk'; +$_lang["new_keyword"] = 'Aggiungi nuova parola chiave:'; +$_lang["new_module"] = 'Nuovo Modulo'; +$_lang["new_parent"] = 'Nuova Risorsa genitore'; +$_lang["new_plugin"] = 'Nuovo Plugin'; +$_lang["new_role"] = 'Nuovo Ruolo'; +$_lang["new_snippet"] = 'Nuovo Snippet'; +$_lang["new_template"] = 'Nuovo Template'; +$_lang["new_tmplvars"] = 'Nuova Variabile di Template'; +$_lang["new_user"] = 'Nuovo utente'; +$_lang["new_web_user"] = 'Nuovo utente Web'; +$_lang["new_resource"] = 'Nuova Risorsa'; +$_lang["no"] = 'No'; +$_lang["no_active_users_found"] = 'Non sono stati trovati utenti attivi.'; +$_lang["no_activity_message"] = 'Non avete ancora creato o modificato alcuna Risorsa.'; +$_lang["no_category"] = 'senza Categoria'; +$_lang["no_docs_pending_publishing"] = 'Nessuna Risorsa in attesa di pubblicazione.'; +$_lang["no_docs_pending_pubunpub"] = 'Nessun evento programmato trovato'; +$_lang["no_docs_pending_unpublishing"] = 'Nessuna Risorsa in attesa del ritiro dalla pubblicazione.'; +$_lang["no_edits_creates"] = 'No edits or creates found.'; +$_lang["no_groups_found"] = 'Nessun gruppo trovato.'; +$_lang["no_keywords_found"] = 'Non ci sono parole chiave'; +$_lang["no_records_found"] = 'Nessun record.'; +$_lang["no_results"] = 'Nessun risultato trovato'; +$_lang["nologentries_message"] = 'Inserite il numero di righe da visualizzare per pagina quando visualizzate i logs.'; +$_lang["nologentries_title"] = 'Numero di voci di log:'; +$_lang["nomessages_message"] = 'Inserite il numero di messaggi da visualizzare nella inbox quando leggete i messaggi.'; +$_lang["nomessages_title"] = 'Numero di messaggi:'; +$_lang["none"] = 'Nessuno'; +$_lang["noresults_message"] = 'Inserite il numero di risultati da mostrare negli elenchi ed i risultati di ricerca .'; +$_lang["noresults_title"] = 'Numero di risultati:'; +$_lang["not_deleted"] = 'non è stato eliminato.'; +$_lang["not_set"] = 'Non impostato'; +$_lang["offline"] = 'Offline'; +$_lang["online"] = 'Online'; +$_lang["onlineusers_action"] = 'Azione'; +$_lang["onlineusers_actionid"] = 'ID dell\'azione'; +$_lang["onlineusers_ipaddress"] = 'Indirizzo IP dell\'utente'; +$_lang["onlineusers_lasthit"] = 'Ultimo contatto'; +$_lang["onlineusers_message"] = 'Utenti attivi negli ultimi 20 minuti (adesso sono le '; +$_lang["onlineusers_title"] = 'Utenti online'; +$_lang["onlineusers_user"] = 'Utente'; +$_lang["onlineusers_userid"] = 'ID dell\'utente'; +$_lang["optimize_table"] = 'Cliccate qui per ottimizzare questa tabella'; +$_lang["page_data_alias"] = 'Alias'; +$_lang["page_data_cacheable"] = 'Situabile in cache'; +$_lang["page_data_cacheable_help"] = 'Selezionando questo campo permetterete alla Risorsa di essere salvata nella cache. Se la Risorsa contiene Snippets, assicuratevi che il campo non sia selezionato.'; +$_lang["page_data_cached"] = 'Sorgente recuperata dalla cache:'; +$_lang["page_data_changes"] = 'Modifiche'; +$_lang["page_data_contentType"] = 'Tipo contenuto'; +$_lang["page_data_contentType_help"] = 'Selezionate il tipo di contenuto della Risorsa. Se non avete idea del tipo di contenuto che la Risorsa deve avere, lasciatelo semplicemente come text/html.'; +$_lang["page_data_created"] = 'Creato'; +$_lang["page_data_edited"] = 'Modificato'; +$_lang["page_data_editor"] = 'Modifica con l\'editor rich text'; +$_lang["page_data_folder"] = 'La Risorsa è una cartella'; +$_lang["page_data_general"] = 'Generale'; +$_lang["page_data_markup"] = 'Markup/ struttura'; +$_lang["page_data_mgr_access"] = 'Accesso al Manager EVO'; +$_lang["page_data_notcached"] = 'Questa Risorsa non è stata (ancora) inserita nella cache.'; +$_lang["page_data_publishdate"] = 'Data di pubblicazione'; +$_lang["page_data_publishdate_help"] = 'Se impostate una data di pubblicazione, la Risorsa sarà pubblicata automaticamente alla data prescelta. Cliccate sull\'icona del calendario per selezionare una data di pubblicazione o sull\'icona a fianco per rimuoverla. Se non è inserita una data di pubblicazione la Risorsa non sarà pubblicata automaticamente e occorrerà pubblicarla manualmente.'; +$_lang["page_data_published"] = 'Pubblicata'; +$_lang["page_data_searchable"] = 'Ricercabile'; +$_lang["page_data_searchable_help"] = 'Spuntando questa casella permettete alla Risorsa di essere ricercabile. Potete anche usare la casella per altri scopi nei vostri Snippets.'; +$_lang["page_data_source"] = 'Sorgente'; +$_lang["page_data_status"] = 'Stato'; +$_lang["page_data_template"] = 'Template'; +$_lang["page_data_template_help"] = 'Qui potete selezionare il Template da usare per la Risorsa.'; +$_lang["page_data_title"] = 'Dati pagina'; +$_lang["page_data_unpublishdate"] = 'Data di ritiro'; +$_lang["page_data_unpublishdate_help"] = 'Se impostate una data di ritiro, la Risorsa sarà ritirata alla data prescelta. Cliccate sull\'icona del calendario per selezionare una data di ritiro o sull\'icona a fianco per rimuoverla. Se non è prevista una data di ritiro la Risorsa non verrà mai ritirata automaticamente.'; +$_lang["page_data_unpublished"] = 'Ritirato'; +$_lang["page_data_web_access"] = 'Accesso dal web'; +$_lang["pagetitle"] = 'Titolo della Risorsa'; +$_lang["pagination_table_first"] = 'Primo'; +$_lang["pagination_table_gotopage"] = 'Vai alla pagina'; +$_lang["pagination_table_last"] = 'Ultimo'; +$_lang["paging_first"] = 'primo'; +$_lang["paging_last"] = 'ultimo'; +$_lang["paging_next"] = 'successivo'; +$_lang["paging_prev"] = 'precedente'; +$_lang["paging_showing"] = 'Mostra'; +$_lang["paging_to"] = 'a'; +$_lang["paging_total"] = 'totale'; +$_lang["parameter"] = 'Parametro'; +$_lang["parse_docblock"] = 'Analizza DocBlock'; +$_lang["parse_docblock_msg"] = 'Attenzione (!): Ripristina Il nome, la configurazione, la descrizione e la categoria di default analizzando il codice sorgente.'; +$_lang["password"] = 'Password'; +$_lang["password_change_request"] = 'Richiesta di cambio password'; +$_lang["password_gen_gen"] = 'Lascia che EVO generi una password.'; +$_lang["password_gen_length"] = 'La password dev\'essere lunga almeno 6 caratteri.'; +$_lang["password_gen_method"] = 'Come volete creare la password dell\'utente?'; +$_lang["password_gen_specify"] = 'Lasciami specificare la password:'; +$_lang["password_method"] = 'Come volete notificare la nuova password all\'utente?'; +$_lang["password_method_email"] = 'Invia la nuova password per e-mail.'; +$_lang["password_method_screen"] = 'Mostra la nuova password sullo schermo.'; +$_lang["password_msg"] = 'La nuova password per %s è %s.'; +$_lang["php_version_check"] = 'EVO è compatibile con PHP versione 5.6.0 o superiore. Il vostro server usa la versione %s%. Si prega di aggiornare l\'installazione di PHP!'; +$_lang["plugin"] = 'Plugin'; +$_lang["plugins"] = 'Plugins'; +$_lang["plugin_code"] = 'Codice del Plugin (PHP)'; +$_lang["plugin_config"] = 'Configura Plugin'; +$_lang["plugin_desc"] = 'Descrizione'; +$_lang["plugin_disabled"] = 'Plugin Disabilitato'; +$_lang["plugin_event_msg"] = 'Selezionate gli Eventi di Sistema che intendete gestire con questo Plugin.'; +$_lang["plugin_management_msg"] = 'Qui potete selezionare i Plugins da modificare o crearne di nuovi.'; +$_lang["plugin_msg"] = 'Qui potete aggiungere/modificare i Plugins. I Plugins sono \'puro\' codice PHP che viene eseguito quando si verificano alcuni eventi di sistema.'; +$_lang["plugin_name"] = 'Nome Plugin'; +$_lang["plugin_priority"] = 'Modifica l\'ordine di esecuzione dei Plugins in base all\'evento'; +$_lang["plugin_priority_instructions"] = 'Spostate e ordinate i Plugins per ogni Evento di Sistema. Per ogni lista i Plugins più in alto verranno eseguiti prima.'; +$_lang["plugin_priority_title"] = 'Ordine di esecuzione del Plugin'; +$_lang["purge_plugin"] = 'Elimina i plugin obsoleti'; +$_lang["purge_plugin_confirm"] = 'Siete sicuri di voler cancellare i plugins obsoleti?'; +$_lang["plugin_title"] = 'Crea/Modifica Plugin'; +$_lang["preview"] = 'Anteprima'; +$_lang["preview_msg"] = 'Questa è solo l\'anteprima delle modifiche. Clicca su Salva e Aggiorna per salvare le modifiche'; +$_lang["preview_resource"] = 'Anteprima Risorsa'; +$_lang["private"] = 'Privato'; +$_lang["public"] = 'Pubblico'; +$_lang["publish_date"] = 'Data di pubblicazione'; +$_lang["publish_events"] = 'Eventi di pubblicazione'; +$_lang["publish_resource"] = 'Pubblica Risorsa'; +$_lang["rb_base_dir_message"] = 'Inserite il percorso fisico alla directory del File Browser. Questa impostazione di solito è generata automaticamente. Se state usando IIS, tuttavia, EVO potrebbe non riuscire ad impostare il percorso corretto e il File Browser mostrerà un errore. In questo caso potete correggere il percorso alla cartella delle immagini (il percorso come lo vedreste in Windows Explorer). NOTA: La directory del File Browser, per funzionare correttamente, deve contenere le sottocartelle images, files, flash e media.'; +$_lang["rb_base_dir_title"] = 'Percorso delle Risorse:'; +$_lang["rb_base_url_message"] = 'Inserite il percorso virtuale alla directory del File Browser. Questo percorso in genere è generato automaticamente. Se state usando IIS, tuttavia, EVO potrebbe non riuscire ad impostare il percorso corretto e il File Browser potrebbe mostrare un errore. In questo caso potete inserire qui il percorso corretto alla cartella delle immagini (l\'URL che inserireste in Internet Explorer).'; +$_lang["rb_base_url_title"] = 'URL del File Browser:'; +$_lang["rb_message"] = 'Selezionate Si se volete abilitare il File Browser. Questo permetterà agli utenti di cercare e caricare sul server immagini, file flash e media.'; +$_lang["rb_title"] = 'Abilita File Browser:'; +$_lang["rb_webuser_message"] = 'Volete consentire ad un Utente Web di usare il File Browser? ATTENZIONE: Consentire agli Utenti Web di usare il File Browser rende visibili i files di gestione degli utenti. Usare questa opzione solo per utenti affidabili.'; +$_lang["rb_webuser_title"] = 'Gli Utenti Web usano il File Browser:'; +$_lang["recent_docs"] = 'Risorse recenti'; +$_lang["recommend_setting_change_title"] = 'Modifiche consigliate'; +$_lang["recommend_setting_change_description"] = 'Il vostro sito non è configurato per validare gli headers HTTP_REFERER per l\'accesso al Manager. Vi raccomandiamo di abilitare questa impostazione per ridurre i rischi di un attacco CSRF (Cross Site Request Forgery).'; +$_lang["references"] = 'Riferimenti'; +$_lang["refresh_cache"] = 'Cache: Sono stati trovati %s file nella cartella cache e sono stati eliminati %d file di cache.

          I nuovi file di cache saranno creati non appena le pagine saranno richieste.'; +$_lang["refresh_published"] = '%s Risorse sono state pubblicate.'; +$_lang["refresh_site"] = 'Svuota Cache'; +$_lang["refresh_title"] = 'Aggiorna sito'; +$_lang["refresh_tree"] = 'Aggiorna struttura ad albero'; +$_lang["refresh_unpublished"] = '%s Risorse sono state ritirate.'; +$_lang["release_date"] = 'Data di rilascio'; +$_lang["remember_last_tab"] = 'Ricorda i tabs:'; +$_lang["remember_last_tab_message"] = 'Le pagine del Manager con tabs mostreranno l\'ultimo tab utilizzato anzichè il primo tab'; +$_lang["remember_username"] = 'Ricordami'; +$_lang["remove"] = 'Rimuovi ->'; +$_lang["remove_date"] = 'Rimuovi data'; +$_lang["remove_locks"] = 'Rimuovi Blocchi'; +$_lang["rename"] = 'Rinomina'; +$_lang["reports"] = 'Resoconti'; +$_lang["report_issues"] = 'Segnala un problema'; +$_lang["require_tagname"] = 'E\' necessario immettere un nome per il tag'; +$_lang["require_tagvalue"] = 'E\' necessario immettere un valore per il tag'; +$_lang["reserved_name_warning"] = 'Avete utilizzato un nome riservato.'; +$_lang["reset"] = 'Resetta'; +$_lang["reset_failedlogins"] = 'reset'; +$_lang["reset_sort_order"] = 'Resetta ordine'; +$_lang["resource"] = 'Risorsa'; +$_lang["resource_alias"] = 'Alias Risorsa'; +$_lang["resource_alias_help"] = 'Qui potete inserire un alias per la Risorsa. Questo renderà la Risorsa accessibile come http://vostrosito.it/alias. Funziona solo se state usando gli URL Semplici.'; +$_lang["resource_content"] = 'Contenuto della Risorsa'; +$_lang["resource_description"] = 'Descrizione'; +$_lang["resource_description_help"] = 'Qui potete inserire una descrizione opzionale della Risorsa.'; +$_lang["resource_duplicate"] = 'Duplica Risorsa'; +$_lang["resource_long_title_help"] = 'Qui potete inserire un titolo esteso per la Risorsa. Questo è utile per i motori di ricerca e potrebbe descrivere meglio la Risorsa.'; +$_lang["resource_metatag_help"] = 'Selezionate i META tag e le parole chiave che volete assegnare alla Risorsa. Tenete premuto il tasto control per selezionare più tag o parole.'; +$_lang["resource_opt_contentdispo"] = 'Pubblicazione del contenuto'; +$_lang["resource_opt_contentdispo_help"] = 'Utilizzate il campo Pubblicazione del Contenuto per stabilire come questa Risorsa verrà inviata al browser. Per files da scaricare selezionare l\'opzione Allegato.'; +$_lang["resource_opt_emptycache"] = 'Svuota la cache'; +$_lang["resource_opt_emptycache_help"] = 'Lasciando questo campo selezionato permetterete a EVO di svuotare la cache dopo che avrete salvato la Risorsa. Così i visitatori non vedranno più la vecchia versione della Risorsa.'; +$_lang["resource_opt_folder"] = 'Cartella'; +$_lang["resource_opt_folder_help"] = 'Spuntate la casella se volete che la Risorsa faccia anche da cartella per altre Risorse. Non avete bisogno di preoccuparvi troppo di questo, EVO generalmente si occupa automaticamente delle impostazioni delle cartelle.'; +$_lang["resource_opt_menu_index"] = 'Indice menu'; +$_lang["resource_opt_menu_index_help"] = 'Indice menu è un campo che potete usare per ordinare le Risorse nei menu. Potete anche usare il campo per altri scopi nei vostri Snippet.'; +$_lang["resource_opt_menu_title"] = 'Titolo nel menu'; +$_lang["resource_opt_menu_title_help"] = 'Il titolo nel menu è un campo che potete usare per visualizzare un titolo abbreviato per la Risorsa all\'interno di menu o moduli.'; +$_lang["resource_opt_published"] = 'Pubblicata'; +$_lang["resource_opt_published_help"] = 'Spuntate questa casella per pubblicare immediatamente la Risorsa dopo averla salvata.'; +$_lang["resource_opt_richtext"] = 'Rich text'; +$_lang["resource_opt_richtext_help"] = 'Lasciate selezionata questa casella se volete usare l\'editor rich text per modificare le Risorse. Se le Risorse contengono JavaScript o forms HTML deselezionatela e modificateli in modalità HTML evitando così che l\'editor ne danneggi il contenuto.'; +$_lang["resource_opt_show_menu"] = 'Mostra nel menu'; +$_lang["resource_opt_show_menu_help"] = 'Selezionate questa opzione per mostrare la Risorsa nel menu. Attenzione, alcuni script per menu potrebbero ignorare questa opzione.'; +$_lang["resource_opt_trackvisit_help"] = 'Registra ogni utente che visita questa pagina'; +$_lang["resource_overview"] = 'Dettagli Risorsa'; +$_lang["resource_parent"] = 'Risorsa genitore'; +$_lang["resource_parent_help"] = 'Selezionate una Risorsa nella struttura ad albero per impostarla come genitore di questa Risorsa.'; +$_lang["resource_permissions_error"] = 'Assegnate questa Risorsa ad almeno un Gruppo Risorse al quale avete accesso.'; +$_lang["resource_setting"] = 'Impostazioni Risorsa'; +$_lang["resource_summary"] = 'Sommario'; +$_lang["resource_summary_help"] = 'Inserire un breve sommario della Risorsa'; +$_lang["resource_title"] = 'Titolo'; +$_lang["resource_title_help"] = 'Digitate qui il nome/titolo della Risorsa. Evitate l\'uso del backslash (\) !'; +$_lang["resource_to_be_moved"] = 'Risorsa da spostare'; +$_lang["resource_type"] = 'Tipo di Risorsa'; +$_lang["resource_type_message"] = 'Un Link Web è un collegamento ad una Risorsa su Internet. Questa Risorsa può essere interna a EVO, una pagina su un altro sito, un\'immagine o un altro file su Internet. I Link Web dovrebbero avere Media Type text/html e Inline Content-Disposition.'; +$_lang["resource_type_weblink"] = 'Link Web'; +$_lang["resource_type_webpage"] = 'Pagina Web'; +$_lang["resource_weblink_help"] = 'Digitate qui l\'indirizzo dell\'oggetto a cui volete collegare questo Link Web. In alternativa inserire dal Browser File o utilizzare l\'icona di selezione collegamento e selezionare una risorsa dalla struttura del sito.'; +$_lang["resources_in_container"] = 'Risorse in questo contenitore'; +$_lang["resources_in_container_no"] = 'Questo contenitore non contiene alcuna Risorsa.'; +$_lang["role"] = 'Ruolo'; +$_lang["role_about"] = 'Visualizza la pagina About'; +$_lang["role_access_persmissions"] = 'Permessi di accesso'; +$_lang["role_actionok"] = 'Visualizza la schermata di azione completata'; +$_lang["role_assets_images"] = 'Accesso a assets/images'; +$_lang["role_assets_files"] = 'Accesso a assets/files'; +$_lang["role_bk_manager"] = 'Usa il sistema di gestione delle copie di sicurezza'; +$_lang["role_cache_refresh"] = 'Svuota la cache del sito'; +$_lang["role_category_manager"] = 'Usa in Gestore Categorie'; +$_lang["role_change_password"] = 'Cambia password'; +$_lang["role_change_resourcetype"] = 'Cambia tipo di risorsa'; +$_lang["role_chunk_management"] = 'Gestione Chunk'; +$_lang["role_config_management"] = 'Gestione configurazione'; +$_lang["role_content_management"] = 'Gestione contenuto'; +$_lang["role_create_chunk"] = 'Crea un nuovo Chunk'; +$_lang["role_create_doc"] = 'Crea nuove Risorse'; +$_lang["role_create_plugin"] = 'Crea un nuovo Plugin'; +$_lang["role_create_snippet"] = 'Crea nuovi Snippets'; +$_lang["role_create_template"] = 'Crea nuovi Templates del sito'; +$_lang["role_credits"] = 'Visualizza i crediti'; +$_lang["role_delete_chunk"] = 'Cancella Chunk'; +$_lang["role_delete_doc"] = 'Elimina Risorse'; +$_lang["role_delete_eventlog"] = 'Cancella Log degli Eventi'; +$_lang["role_delete_module"] = 'Cancella Modulo'; +$_lang["role_delete_plugin"] = 'Cancella Plugin'; +$_lang["role_delete_role"] = 'Elimina ruoli'; +$_lang["role_delete_snippet"] = 'Elimina Snippet'; +$_lang["role_delete_template"] = 'Elimina Template'; +$_lang["role_delete_user"] = 'Elimina utenti'; +$_lang["role_delete_web_user"] = 'Cancella utente web'; +$_lang["role_edit_chunk"] = 'Modifica Chunk'; +$_lang["role_edit_doc"] = 'Modifica una Risorsa'; +$_lang["role_edit_doc_metatags"] = 'Modifica META tag e parole chiave della Risorsa'; +$_lang["role_edit_module"] = 'Modifica Modulo'; +$_lang["role_edit_plugin"] = 'Modifica Plugin'; +$_lang["role_edit_role"] = 'Modifica ruoli'; +$_lang["role_edit_settings"] = 'Cambia le impostazioni del sito'; +$_lang["role_edit_snippet"] = 'Modifica Snippet'; +$_lang["role_edit_template"] = 'Modifica Template del sito'; +$_lang["role_edit_user"] = 'Modifica utenti'; +$_lang["role_edit_web_user"] = 'Modifica utente web'; +$_lang["role_empty_trash"] = 'Elimina in modo permanente le Risorse cancellate'; +$_lang["role_errors"] = 'Visualizza i messaggi di errore'; +$_lang["role_eventlog_management"] = 'Gestione Log degli Eventi'; +$_lang["role_export_static"] = 'Esporta in HTML statico'; +$_lang["role_file_management"] = 'Gestione File'; +$_lang["role_file_manager"] = 'Usa il file manager (accesso root completo)'; +$_lang["role_frames"] = 'Visualizza i frames del Manager EVO'; +$_lang["role_help"] = 'Visualizza le pagine di aiuto'; +$_lang["role_home"] = 'Visualizza la pagina introduttiva del Manager EVO'; +$_lang["role_import_static"] = 'Importa HTML'; +$_lang["role_logout"] = 'Esci dal Manager EVO'; +$_lang["role_manage_metatags"] = 'Gestione META tag e parole chiave'; +$_lang["role_management_msg"] = 'Qui potete scegliere il Ruolo da modificare o creare un nuovo Ruolo.'; +$_lang["role_management_title"] = 'Gestione Ruoli'; +$_lang["role_messages"] = 'Visualizza ed invia messaggi'; +$_lang["role_module_management"] = 'Gestione Moduli'; +$_lang["role_name"] = 'Nome Ruolo'; +$_lang["role_new_module"] = 'Crea nuovo Modulo'; +$_lang["role_new_role"] = 'Crea nuovi ruoli'; +$_lang["role_new_user"] = 'Crea nuovi utenti'; +$_lang["role_new_web_user"] = 'Crea nuovo utete web'; +$_lang["role_plugin_management"] = 'Gestione Plugin'; +$_lang["role_publish_doc"] = 'Pubblica Risorse'; +$_lang["role_remove_locks"] = 'Togli i blocchi'; +$_lang["role_role_management"] = 'Gestione Ruolo'; +$_lang["role_run_module"] = 'Esegui Modulo'; +$_lang["role_save_chunk"] = 'Salva Chunk'; +$_lang["role_save_doc"] = 'Salva Risorse'; +$_lang["role_save_module"] = 'Salva Modulo'; +$_lang["role_save_password"] = 'Salva password'; +$_lang["role_save_plugin"] = 'Salva Plugin'; +$_lang["role_save_role"] = 'Salva ruoli'; +$_lang["role_save_snippet"] = 'Salva Snippet'; +$_lang["role_save_template"] = 'Salva Template'; +$_lang["role_save_user"] = 'Salva utenti'; +$_lang["role_save_web_user"] = 'Salva utente web'; +$_lang["role_snippet_management"] = 'Gestione Snippet'; +$_lang["role_template_management"] = 'Gestione Template'; +$_lang["role_title"] = 'Crea/Modifica Ruolo'; +$_lang["role_udperms"] = 'Gestione permessi'; +$_lang["role_user_management"] = 'Gestione utente'; +$_lang["role_view_docdata"] = 'Visualizza i dati di una Risorsa'; +$_lang["role_view_eventlog"] = 'Vedi Log degli Eventi'; +$_lang["role_view_logs"] = 'Visualizza i log di sistema'; +$_lang["role_view_unpublished"] = 'Vedi le Risorse non pubblicate'; +$_lang["role_web_access_persmissions"] = 'Permessi di accesso Web'; +$_lang["role_web_user_management"] = 'Gestione utente web'; +$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; +$_lang["rss_url_news_message"] = 'Inserire l\'URL per il Feed RSS Novità EVO.'; +$_lang["rss_url_news_title"] = 'Feed RSS Novità EVO:'; +$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; +$_lang["rss_url_security_message"] = 'Inserire l\'URL per il Feed RSS Avvisi di Protezione EVO.'; +$_lang["rss_url_security_title"] = 'Feed RSS Avvisi di Protezione EVO:'; +$_lang["run_module"] = 'Esegui Modulo'; +$_lang["saturday"] = 'Sabato'; +$_lang["save"] = 'Salva'; +$_lang["save_all_changes"] = 'Salva tutte le modifiche'; +$_lang["save_tag"] = 'Salva tag'; +$_lang["saving"] = 'Salvataggio in corso, vi preghiamo di attendere...'; +$_lang["search"] = 'Ricerca'; +$_lang["search_criteria"] = 'Criteri di ricerca'; +$_lang["search_criteria_content"] = 'Cerca per contenuto'; +$_lang["search_criteria_content_msg"] = 'Trova tutte le Risorse che hanno questo testo nel loro contenuto.'; +$_lang["search_criteria_id"] = 'Cerca per ID'; +$_lang["search_criteria_id_msg"] = 'Inserite l\'ID di una Risorsa per individuarla rapidamente.'; +$_lang["search_criteria_top"] = 'Cerca nei campi principali'; +$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; +$_lang["search_criteria_template_id"] = 'Cerca per ID del template'; +$_lang["search_criteria_template_id_msg"] = 'Trova tutte le Risorse che utilizzano il template specificato'; +$_lang["search_criteria_url_msg"] = 'Cerca una risorsa per URL.'; +$_lang["search_criteria_longtitle"] = 'Cerca per titolo esteso'; +$_lang["search_criteria_longtitle_msg"] = 'Trova tutte le Risorse che nel titolo esteso contengono questo testo.'; +$_lang["search_criteria_title"] = 'Cerca per titolo'; +$_lang["search_criteria_title_msg"] = 'Trova tutte le Risorse che nel titolo contengono questo testo.'; +$_lang["search_empty"] = 'La ricerca non ha prodotto risultati. Estendete i criteri di ricerca e provate nuovamente.'; +$_lang["search_item_deleted"] = 'Questo elemento è stato eliminato'; +$_lang["search_results"] = 'Risultati della ricerca'; +$_lang["search_results_returned_desc"] = 'Descrizione'; +$_lang["search_results_returned_id"] = 'ID'; +$_lang["search_results_returned_msg"] = 'I criteri di ricerca hanno restituito %s Risorse. Se i risultati sono troppi, provate con una ricerca più specifica. Le due colonne più a sinistra permettono di trovare la Risorsa nella struttura ad albero o di visualizzarla. Le due colonne più a destra mostrano, rispettivamente, se una Risorsa è stata eliminata e qual\'è il suo stato di pubblicazione.'; +$_lang["search_results_returned_title"] = 'Titolo'; +$_lang["search_view_docdata"] = 'Visualizza questo elemento'; +$_lang["security"] = 'Utenti'; +$_lang["security_notices_tab"] = 'Avvisi di Protezione'; +$_lang["security_notices_title"] = 'Avvisi di Protezione'; +$_lang["select_date"] = 'Seleziona data'; +$_lang["send"] = 'Invia'; +$_lang["server_protocol_http"] = 'http'; +$_lang["server_protocol_https"] = 'https'; +$_lang["server_protocol_message"] = 'Specificate qui se il sito è su una connessione https.'; +$_lang["server_protocol_title"] = 'Tipo server:'; +$_lang["serveroffset"] = 'Scostamento orario del server'; +$_lang["serveroffset_message"] = 'Selezionate il numero di ore di differenza tra il vostro fuso orario e quello del server. L\'ora attuale sul server è [%s], mentre con lo scostamento che avete impostato l\'ora è [%s].'; +$_lang["serveroffset_title"] = 'Scostamento orario del server:'; +$_lang["servertime"] = 'Orario del Server'; +$_lang["set_automatic"] = 'Impostazione automatica'; +$_lang["set_default"] = 'Imposta default'; +$_lang["set_default_all"] = 'Imposta defaults'; +$_lang["settings_after_install"] = 'Dato che questa è una nuova installazione, vi preghiamo di controllare queste impostazioni e di cambiare quelle che desiderate. Dopo aver controllato le impostazioni, premete \'Salva\' per aggiornare la configurazione di sistema.

          '; +$_lang["settings_config"] = 'Configurazione'; +$_lang["settings_dependencies"] = 'Dipendenze'; +$_lang["settings_events"] = 'Eventi di Sistema'; +$_lang["settings_furls"] = 'Impostazioni URL Semplici'; +$_lang["settings_general"] = 'Informazioni Generali'; +$_lang["settings_group_tv_message"] = 'Scegli se le Template Variabili devono essere raggruppate in sezioni o schede (nominate dalla categoria TV) quando si modifica una risorsa'; +$_lang["settings_group_tv_options"] = 'No, Sezioni in General tab, Tabs in General tab, Sezioni in nuove tab, Tabs in nuove tab, Nuove tabs'; +$_lang["settings_misc"] = 'Impostazioni varie'; +$_lang["settings_security"] = 'Sicurezza'; +$_lang["settings_KC"] = 'File Browser'; +$_lang["settings_page_settings"] = 'Impostazioni Pagina'; +$_lang["settings_photo"] = 'Foto'; +$_lang["settings_properties"] = 'Proprietà'; +$_lang["show_fullscreen_btn_message"] = 'Mostra nel menu il bottone Attiva / disattiva schermo intero'; +$_lang["show_newresource_btn_message"] = 'Mostra il menu Nuova Risorsa'; +$_lang["settings_show_picker_message"] = 'Personalizza il tema del manager e salva in localstorage'; +$_lang["show_fullscreen_btn"] = 'Attiva / disattiva schermo intero'; +$_lang["show_newresource_btn"] = 'Menu Nuova Risorsa'; +$_lang["settings_site"] = 'Impostazioni sito'; +$_lang["settings_strip_image_paths_message"] = 'Se questo valore è impostato su \'No\', EVO imposterà come assoluti gli URL di quello che caricate col File Browser (immagini, file, flash, ecc.). Impostando su \'Si\' si avranno degli URL relativi, utili se dovete spostare l\'installazione di EVO, ad esempio da un sito di test ad uno di produzione. Se non avete idea di cosa significa, lasciate impostato su \'Si\'.'; +$_lang["settings_strip_image_paths_title"] = 'Riscrivere gli URL del Browser:'; +$_lang["settings_templvars"] = 'Variabili di Template'; +$_lang["settings_title"] = 'Impostazioni EVO'; +$_lang["settings_ui"] = 'Impostazioni editor e interfaccia'; +$_lang["settings_users"] = 'Impostazioni utente'; +$_lang["show_meta"] = 'Mostra le META Keywords:'; +$_lang["show_meta_message"] = 'Mostra META Keywords (deprecato) quando si modificano le Risorse nel Manager.'; +$_lang["show_tree"] = 'Mostra struttura ad albero'; +$_lang["show_picker"] = 'Mostra Color Switcher'; +$_lang["showing"] = 'Visualizzo'; $_lang["signupemail_message"] = 'Qui potete impostare il messaggio con il quale inviare la userid e la password agli utenti a cui create un account.
          Nota: I seguenti Placeholders sono valorizzati da EVO all\'invio del messaggio:

          [+sname+] - Nome del vostro sito web
          @@ -969,521 +981,548 @@ [+uid+] - Userid dell\'utente
          [+pwd+] - Password dell\'utente
          [+ufn+] - Nome completo dell\'utente

          -Vi consigliamo di lasciare i due Placeholders [+uid+] e [+pwd+] nel corpo della e-mail altrimenti il nome utente e password non saranno inviati e l\'utente non potrà collegarsi!'; -$_lang["signupemail_title"] = 'E-mail per l\'iscrizione:'; -$_lang["site"] = 'Sito'; -$_lang["site_schedule"] = 'Pianificazione Sito'; -$_lang["sitename_message"] = 'Inserite qui il nome del vostro sito web.'; -$_lang["sitename_title"] = 'Nome del sito:'; -$_lang["sitestart_message"] = 'Inserite l\'ID della Risorsa che volete usare come Home Page. NOTA: assicuratevi che l\'ID inserito appartenga a una Risorsa esistente e che sia stata pubblicata!'; -$_lang["sitestart_title"] = 'Il sito inizia da:'; -$_lang["sitestatus_message"] = 'Selezionate \'Online\' per pubblicare il sito sul web. Se selezionate \'Offline\', i visitatori vedranno il \'Messaggio Sito non disponibile\' e non potranno consultarlo.'; -$_lang["sitestatus_title"] = 'Stato del sito:'; -$_lang["siteunavailable_message"] = 'Messaggio da visualizzare quando il sito è offline o si è verificato un errore.'; -$_lang["siteunavailable_message_default"] = 'Questo sito non è al momento disponibile.'; -$_lang["siteunavailable_page_message"] = 'Inserite l\'ID che volete mostrare quando il sito è offline. NOTA: assicuratevi che l\'ID appartenga ad una Risorsa esistente e che sia stata pubblicata!'; -$_lang["siteunavailable_page_title"] = 'Pagina sito non disponibile:'; -$_lang["siteunavailable_title"] = 'Messaggio sito non disponibile:'; -$_lang["snippet"] = 'Snippet'; -$_lang["snippets"] = 'Snippets'; -$_lang["snippet_code"] = 'Codice dello Snippet (PHP)'; -$_lang["snippet_desc"] = 'Descrizione Snippet'; -$_lang["snippet_execonsave"] = 'Esegui lo Snippet dopo il salvataggio.'; -$_lang["snippet_management_msg"] = 'Qui potete scegliere gli Snippets da modificare o crearne di nuovi.'; -$_lang["snippet_msg"] = 'Qui potete aggiungere/modificare gli Snippets. Ricordate che gli Snippets sono codice PHP \'raw\' (grezzo) e se prevedete che l\'output venga mostrato in un punto preciso del Template dovete avere una variabile nello snippet che abbia il nome dello snippet stesso - in pratica, l\'output dello Snippet dev\'essere salvato in una variabile che porta il nome dello Snippet stesso.'; -$_lang["snippet_name"] = 'Nome Snippet'; -$_lang["snippet_properties"] = 'Proprietà di default'; -$_lang["snippet_title"] = 'Crea/modifica Snippet'; -$_lang["sort_alphabetically"] = 'Ordine alfabetico'; -$_lang["sort_asc"] = 'Ascendente'; -$_lang["sort_desc"] = 'Discendente'; -$_lang["sort_menuindex"] = 'Ordina per indice di menu'; -$_lang["sort_tree"] = 'Ordina la struttura ad albero'; -$_lang['sort_updating'] = 'Aggiornamento ...'; -$_lang['sort_updated'] = 'Aggiornato'; -$_lang['sort_nochildren'] = 'La cartella superiore non contiene documenti'; -$_lang["sort_elements_msg"] = 'Trascinare per riordinare gli elementi della lista.'; -$_lang["source"] = 'Sorgente'; -$_lang["stay"] = 'Continua la modifica dopo il salvataggio'; -$_lang["stay_new"] = 'Aggiungi un altro'; -$_lang["submit"] = 'Invia'; -$_lang["sunday"] = 'Domenica'; -$_lang["sys_alert"] = 'Avviso di sistema'; -$_lang["sysinfo_activity_message"] = 'Questa lista mostra le Risorse modificate di recente dagli utenti.'; -$_lang["sysinfo_userid"] = 'Utente'; -$_lang["system"] = 'Sistema'; -$_lang["system_email_signup"] = ' - -Salve [+uid+] - -qui ci sono le credenziali di autenticazione per il sistema di gestione dei contenuti di [+sname+] : - -Username: [+uid+] -Password: [+pwd+] - -Quando ti sarai autenticato nel sistema di gestione ([+surl+]), potrai cambiare la tua password. - -Cordiali Saluti, - - l\'amministratore del Sito -'; -$_lang["system_email_webreminder"] = 'Salve [+uid+] - -Per attivare la tua password clicca sul link sottostante: - -[+surl+] - -In seguito potrai usare la seguente password per accedere: - -Password:[+pwd+] - -e non hai richiesto questa mail, ignorala. - -Cordiali Saluti, -l\'amministratore del Sito'; -$_lang["system_email_websignup"] = 'Salve [+uid+] - -qui ci sono le credenziali di autenticazione per [+sname+]: - -Nome utente: [+uid+] -Password: [+pwd+] - -Quando ti sarai autenticato in [+sname+] ([+surl+]), potrai cambiare la tua password. - -Cordiali Saluti, - l\'amministratore del Sito'; -$_lang["table_hoverinfo"] = 'Portate il cursore sopra il nome di una tabella per vedere una breve descrizione della funzione della tabella (non tutte le tabelle hanno dei commenti impostati o tradotti).'; -$_lang["table_prefix"] = 'Prefisso Tabella'; -$_lang["tag"] = 'Tag'; -$_lang["template"] = 'Template'; -$_lang["templates"] = 'Templates'; -$_lang["template_assignedtv_tab"] = 'Variabili di Template Assegnate'; -$_lang["template_code"] = 'Codice del Template (HTML)'; -$_lang["template_desc"] = 'Descrizione'; -$_lang["template_edit_tab"] = 'Modifica Template'; -$_lang["template_management_msg"] = 'Qui potete scegliere il Template da modificare o creare un nuovo Template.'; -$_lang["template_msg"] = 'Qui potete creare/modificare i Templates. I Template modificati o nuovi non saranno visibili nelle pagine in cache finchè la cache stessa non verrà svuotata. Ad ogni modo, potete usare la funzione di anteprima su una pagina per vedere il Template in azione.'; -$_lang["template_name"] = 'Nome del Template'; -$_lang["template_no_tv"] = 'A questo Template non sono ancora state assegnate delle Variabili di Template.'; -$_lang["template_notassigned_tv"] = 'Queste variabili di template sono disponibili per l\'assegnazione.'; -$_lang["template_reset_all"] = 'Impostate il nuovo Template di default su tutte le pagine'; -$_lang["template_reset_specific"] = 'Impostate il nuovo Template di default solo sulle pagine con \'%s\''; -$_lang["template_selectable"] = 'Template selezionabile durante la creazione o la modifica di risorse.'; -$_lang["template_title"] = 'Crea/Modifica Template'; -$_lang["template_tv_edit"] = 'Modifica l\'ordine delle Variabili di Template'; -$_lang["template_tv_edit_message"] = 'Trascinare per riordinare le Variabili di Template di questo Template.'; -$_lang["template_tv_edit_title"] = 'Ordine delle Variabili di Template'; -$_lang["template_tv_msg"] = 'Le variabili di template assegnate a questo Template sono elencate qui in basso.'; -$_lang["thursday"] = 'Giovedì'; -$_lang["tmplvar_access_msg"] = 'Selezionate i Gruppi di Risorse autorizzati a modificare il contenuto o il valore di questa Variabile di Template'; -$_lang["tmplvar_change_template_msg"] = 'Cambiando questo Template verranno ricaricate le Variabili di Template. Tutte le modifiche non salvate verranno perse.\n\n Siete sicuri di voler modificare il Template?'; -$_lang["tmplvar_inuse"] = 'Le seguenti Risorse utilizzano questa Variabile di Template. Per confermare la cancellazione, cliccare su elimina. Altrimenti cliccare su cancella.'; -$_lang["tmplvar_tmpl_access"] = 'Accesso Template'; -$_lang["tmplvar_tmpl_access_msg"] = 'Selezionate quali Templates possono utilizzare questa Variabile di Template'; -$_lang["tmplvar"] = 'Variabile di Template'; -$_lang["tmplvars"] = 'Variabili di Template'; -$_lang["tmplvars_binding_msg"] = 'Questo campo supporta connessioni a sorgenti dati che usano il comando @ '; -$_lang["tmplvars_caption"] = 'Didascalia'; -$_lang["tmplvars_default"] = 'Valore di default'; -$_lang["tmplvars_description"] = 'Descrizione'; -$_lang["tmplvars_elements"] = 'Opzioni valori di input'; -$_lang["tmplvars_inherited"] = 'Value inherited'; -$_lang["tmplvars_management_msg"] = 'Qui potete gestire e creare le Variabili di Template per le vostre Risorse.'; -$_lang["tmplvars_msg"] = 'Qui potete creare o modificare le Variabili di Template. Le Variabili di Template devono essere assegnate ad un Template per poter essere utilizzate da Snippets e Risorse.'; -$_lang["tmplvars_name"] = 'Nome variabile'; -$_lang["tmplvars_novars"] = 'Nessuna Variabile di Template trovata'; -$_lang["tmplvars_rank"] = 'Ordinamento'; -$_lang["tmplvars_rank_edit_message"] = 'Trascina per riordinare le variabili di template'; -$_lang["tmplvars_reset_params"] = 'Resetta parametri'; -$_lang["tmplvars_title"] = 'Crea/Modifica Variable di Template'; -$_lang["tmplvars_type"] = 'Tipo di input'; -$_lang["tmplvars_widget"] = 'Widget'; -$_lang["tmplvars_widget_prop"] = 'Proprietà Widget'; -$_lang["to"] = 'a'; -$_lang["toggle_fullscreen"] = 'Attiva/Disattiva schermo intero'; -$_lang["tools"] = 'Strumenti'; -$_lang["top_howmany_message"] = 'Nel visualizzare i resoconti, quanto deve essere grande la lista \'I primi ...\'?'; -$_lang["top_howmany_title"] = 'Quanti \'I primi\':'; -$_lang["total"] = 'totale'; -$_lang["track_visitors_message"] = 'Seleziona per mostrare le risorse secondarie nell\'albero del documento'; -$_lang["track_visitors_title"] = 'Mostra le risorse secondarie'; -$_lang["tree_page_click"] = 'Azione del click su una pagina:'; -$_lang["tree_page_click_message"] = 'Cosa succede facendo click su una pagina nell\'albero del sito.'; -$_lang["use_breadcrumbs"] = 'Mostra navigazione'; -$_lang["use_breadcrumbs_message"] = 'Mostra la navigazione quando crei o modifichi una risorsa'; -$_lang["tree_show_protected"] = 'Mostra pagine protette:'; -$_lang["tree_show_protected_message"] = 'Se è selezionato \'No\' le pagine protette (e tutte le pagine figlie) non appariranno nell\'albero delle Risorse. \'No\' è l\'impostazione di default di EVO.'; -$_lang["truncate_table"] = 'Cliccate qui per troncare questa tabella'; -$_lang["tuesday"] = 'Martedì'; -$_lang["tv"] = 'TV'; -$_lang["type"] = 'Tipo'; -$_lang["udperms_allowroot_message"] = 'Volete permettere agli utenti di creare nuove Risorse e cartelle nella root del sito? '; -$_lang["udperms_allowroot_title"] = 'Permetti creazione nella root:'; -$_lang["udperms_message"] = 'I permessi di accesso vi consentono di specificare quali pagine possono essere modificate dagli utenti. Avete bisogno di assegnare gli utenti ai Gruppi di Utenti, le Risorse ai Gruppi di Risorse, ed infine dovrete specificare quali Gruppi di Utenti hanno accesso a quali Gruppi di Risorse. Appena saranno attivati i permessi, solo gli amministratori potranno modificare qualsiasi Risorsa.'; -$_lang["udperms_title"] = 'Usa i permessi di accesso:'; -$_lang["unable_set_link"] = 'Impossibile impostare il collegamento!'; -$_lang["unable_set_parent"] = 'Impossibile impostare una nuova Risorsa genitore!'; -$_lang["unauthorizedpage_message"] = 'Digitate l\'ID della Risorsa che volete mostrare agli utenti che hanno richiesto una Risorsa protetta o non autorizzata. NOTA: assicuratevi che la Risorsa indicata esista, sia pubblicata e accessibile all\'utente!'; -$_lang["unauthorizedpage_title"] = 'Pagina non autorizzata:'; -$_lang["unblock_message"] = 'L\'utente non sarà più bloccato dopo aver salvato i suoi dati.'; -$_lang["undelete_resource"] = 'Ripristina Risorsa'; -$_lang["unpublish_date"] = 'Data di ritiro dalla pubblicazione'; -$_lang["unpublish_events"] = 'Eventi di ritiro dalla pubblicazione'; -$_lang["unpublish_resource"] = 'Ritira Risorsa'; -$_lang["untitled_resource"] = 'Risorsa senza titolo'; -$_lang["untitled_weblink"] = 'Link Web senza titolo'; -$_lang["update_params"] = 'Aggiorna parametri di visualizzazione'; -$_lang["update_settings_from_language"] = 'Sostituire con:'; -$_lang["upload_maxsize_message"] = 'Qui potete inserire le dimensioni massime dei file che si possono caricare tramite il sistema di gestione file. Le dimensioni devo essere impostate in bytes. NOTA: File troppo grandi impiegano molto tempo a caricare!'; -$_lang["upload_maxsize_title"] = 'Massima dimensione caricamento:'; -$_lang["uploadable_files_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare nella cartella assets/files con il File Browser. Inserite le estensioni per i vari tipi di file separate da virgole.'; -$_lang["uploadable_files_title"] = 'Tipi di file caricabili:'; -$_lang["uploadable_flash_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare con il File Browser nella cartella \'assets/flash/\'. Inserite le estensioni per i tipi di file Flash separate da virgole.'; -$_lang["uploadable_flash_title"] = 'Tipi di Flash caricabili:'; -$_lang["uploadable_images_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare con il File browser nella cartella \'assets/images/\'. Inserite le estensioni per i tipi di immagine separate da virgole.'; -$_lang["uploadable_images_title"] = 'Tipi di immagini caricabili:'; -$_lang["uploadable_media_message"] = 'Qui potete inserire una lista dei tipi di file che si possono caricare con il File Manager nella cartella \'assets/media/\'. Inserite le estensioni per i tipi di media separate da virgole.'; -$_lang["uploadable_media_title"] = 'Tipi di media caricabili:'; -$_lang["use_alias_path_message"] = 'Abilitando questa opzione verrà generato un percorso virtuale per la Risorsa. Ad esempio, se la Risorsa "figlio.html" sta dentro la Risorsa Cartella "genitore" il percorso completo sarà "/genitore/figlio.html".'; -$_lang["use_alias_path_title"] = 'Usa percorso completo per l\'alias:'; -$_lang["use_editor_message"] = 'Volete abilitare l\'editor rich text? Se ritenete più comodo scrivere direttamente in HTML, con questa impostazione potete disabilitarlo. Da notare che le impostazioni si applicano a tutte le Risorse e a tutti gli utenti!'; -$_lang["use_editor_title"] = 'Abilita editor rich text:'; -$_lang["use_global_tabs"] = 'Usa Global Tabs'; -$_lang["user"] = 'Utente'; -$_lang["user_block"] = 'Bloccato'; -$_lang["user_blockedafter"] = 'Bloccato dopo'; -$_lang["user_blockeduntil"] = 'Bloccato fino'; -$_lang["user_changeddata"] = 'I vostri dati sono stati modificati. Vi preghiamo di effettuare nuovamente l\'accesso.'; -$_lang["user_country"] = 'Nazione'; -$_lang["user_dob"] = 'Data di nascita'; -$_lang["user_doesnt_exist"] = 'L\'utente non esiste'; -$_lang["user_edit_self_msg"] = 'Se cambiate lo vostre informazioni utente dopo il salvataggio potreste aver bisogno di scollegarvi e di ricollegarvi nuovamente.

          Se avete scelto di generare automaticamente una nuova password vi verrà inviata per e-mail, verificate l\'indirizzo e-mail che avete inserito.'; -$_lang["user_email"] = 'Indirizzo e-mail'; -$_lang["user_failedlogincount"] = 'Login falliti'; -$_lang["user_fax"] = 'Numero di fax'; -$_lang["user_female"] = 'Femmina'; -$_lang["user_full_name"] = 'Nome completo'; -$_lang["user_gender"] = 'Sesso'; -$_lang["user_is_blocked"] = 'L\'utente è bloccato!'; -$_lang["user_logincount"] = 'Numero di autenticazioni'; -$_lang["user_male"] = 'Maschio'; -$_lang["user_management_msg"] = 'Qui potete scegliere l\'utente da modificare o creare un nuovo utente. Questi utenti sono quelli che possono accedere al sistema di gestione dei contenuti.'; -$_lang["user_management_title"] = 'Gestione Utenti'; -$_lang["user_mobile"] = 'Numero di cellulare'; -$_lang["user_phone"] = 'Numero di telefono'; -$_lang["user_photo"] = 'Foto dell\'Utente'; -$_lang["user_photo_message"] = 'Inserite l\'url dell\'immagine o caricate l\'immagine sul server.'; -$_lang["user_prevlogin"] = 'Ultima autenticazione'; -$_lang["user_role"] = 'Ruolo dell\'utente'; -$_lang["user_state"] = 'Regione'; -$_lang["user_title"] = 'Crea/modifica utente'; -$_lang["user_upload_message"] = 'Se volete impedire che questo utente possa caricare files di questo tipo, assicuratevi che la casella \'Use Main Configuration Setting\' non sia selezionata e lasciate vuoto il campo.'; -$_lang["user_use_config"] = 'Usare le Impostazioni di Sistema'; -$_lang["user_zip"] = 'CAP'; -$_lang["username"] = 'Nome utente'; -$_lang["users"] = 'Utenti'; -$_lang["valid_hostnames_message"] = 'Inserendo una lista di nomi di host consentiti per questa installazione di EVO è possibile prevenire che con un attacco XSS si possa falsificare l\'impostazione di sistema site_url. Può essere importante farlo per alcuni tipi di server condivisi o altri server direttamente accessibili da un indirizzo IP. Il primo nome di host della lista verà usato quando HTTP_HOST non corrisponde ad alcun nome di host valido.'; -$_lang["valid_hostnames_title"] = 'Nomi di host consentiti:'; -$_lang["validate_referer_message"] = 'Validare gli headers HTTP_REFERER per ridurre il rischio di essere vittime di un attacco CSRF (Cross Site Request Forgery). Alcune configurazioni possono non essere in grado di gestire questa opzione se il server non invia gli headers HTTP_REFERER.'; -$_lang["validate_referer_title"] = 'Validazione degli headers HTTP_REFERER:'; -$_lang["value"] = 'Valore'; -$_lang["version"] = 'Versione'; -$_lang["view"] = 'Mostra'; -$_lang["view_child_resources_in_container"] = 'Vedi le Risorse contenute'; -$_lang["view_log"] = 'Vedi log'; -$_lang["view_logging"] = 'Log del Manager'; -$_lang["view_sysinfo"] = 'Informazioni di Sistema'; -$_lang["warning"] = 'Attenzione!'; -$_lang["warning_not_saved"] = 'Le modifiche che avete effettuato non sono state ancora salvate. Potete scegliere di rimanere sulla pagina corrente per salvarle (\'Annulla\'), oppure potete abbandonarla perdendo ogni modifica che avete fatto (\'OK\').'; -$_lang["warning_visibility"] = 'Avvisi di configurazione visibili a:'; -$_lang["warning_visibility_message"] = 'Controlla la visualizzazione degli avvisi mostrati nella pagina iniziale del Manager'; -$_lang["web_access_permissions"] = 'Permessi di accesso Web'; -$_lang["web_access_permissions_user_groups"] = 'Gruppi di Utenti Web'; -$_lang["web_permissions"] = 'Permessi Web'; -$_lang["web_user_management_msg"] = 'Qui potete selezionare l\'utente web da modificare. Gli utenti web sono gli utenti autorizzati ad accedere al sito.'; -$_lang["web_user_management_title"] = 'Gestione Utenti Web'; -$_lang["web_user_title"] = 'Crea/modifica Utenti Web'; -$_lang["web_users"] = 'Utenti web'; -$_lang["weblink"] = 'Link Web'; -$_lang["webpwdreminder_message"] = 'Inserite il messaggio da inviare in mail, quando gli utenti chiedono una nuova password via email. IL sistema di gestione dei contenuti invierà loro una e-mail contenente la nuova password e le informazioni di attivazione.
          Nota: I seguenti segnaposto saranno sostituiti dal sistema di gestione del contenuto quando invierà il messaggio:

          [+sname+] - Nome del sito,
          [+saddr+] - Indirizzo email del sito,
          [+surl+] - Url del sito,
          [+uid+] - Login o id dell\'utente,
          [+pwd+] - Password utente,
          [+ufn+] - Nome completo dell\'utente.

          Lasciate [+uid+] e [+pwd+] nella e-mail, altrimenti il nome utente e la password non verranno inviati!'; -$_lang["webpwdreminder_title"] = 'Email recupero dati autenticazione:'; -$_lang["websignupemail_message"] = 'Qui potete impostare il messaggio e-mail contenente nome utente e password inviato agli utenti quando gli create un nuovo account.
          Nota:
          I seguenti Placeholders saranno sostituiti dal sistema di gestione dei contenuti quando invierà il messaggio:

          [+sname+] - Nome del sito,
          [+saddr+] - Indirizzo email del sito,
          [+surl+] - Url del sito,
          [+uid+] - Login o id dell\'utente,
          [+pwd+] - Password utente,
          [+ufn+] - Nome completo dell\'utente.

          Lasciate [+uid+] e [+pwd+] nella e-mail, altrimenti il nome utente e la password non verranno inviati!'; -$_lang["websignupemail_title"] = 'Indirizzo E-mail di registrazione:'; -$_lang["wednesday"] = 'Mercoledì'; -$_lang["welcome_messages"] = 'La vostra inbox contiene %d messaggi(o), di cui %s non letto/i.'; -$_lang["welcome_title"] = 'Benvenuto nel sistema di gestione dei contenuti EVO'; -$_lang["which_editor_message"] = 'Qui potete selezionare quale editor rich text preferite usare. Potete scaricare ed installare altri editor dalla sezione downloads del sito EVO '; -$_lang["which_editor_title"] = 'Editor da usare:'; -$_lang["working"] = 'Sto elaborando...'; -$_lang["wrap_lines"] = 'Manda le linee a capo automaticamente'; -$_lang["xhtml_urls_message"] = 'Sostituisce la e commerciale (ampersand (&)) negli indirizzi generati da EVO con l\' entità HTML &amp;'; -$_lang["xhtml_urls_title"] = 'URL XHTML:'; -$_lang["yes"] = 'Si'; -$_lang["you_got_mail"] = 'Avete una mail'; -$_lang["yourinfo_message"] = 'Questa sezione mostra alcune vostre informazioni:'; -$_lang["yourinfo_previous_login"] = 'La vostra ultima connessione al sistema:'; -$_lang["yourinfo_role"] = 'Il vostro Ruolo è:'; -$_lang["yourinfo_title"] = 'Le vostre informazioni'; -$_lang["yourinfo_total_logins"] = 'Numero totale di connessioni:'; -$_lang["yourinfo_username"] = 'Siete autenticati come:'; - -$_lang["a17_error_reporting_title"] = 'Livello di dettaglio degli errori PHP:'; -$_lang["a17_error_reporting_msg"] = 'Imposta il livello di rilevamento degli errori PHP.'; -$_lang["a17_error_reporting_opt0"] = 'Ignora tutti gli errori'; -$_lang["a17_error_reporting_opt1"] = 'Ignora gli errori di basso livello (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; -$_lang["a17_error_reporting_opt2"] = 'Rileva tutti gli errori eccetto E_NOTICE'; -$_lang["a17_error_reporting_opt99"] = 'Rileva tutti gli errori'; - -$_lang["pwd_hash_algo_title"] = 'Algoritmo di hash:'; -$_lang["pwd_hash_algo_message"] = 'Password algoritmo di hash.'; - -$_lang["enable_bindings_title"] = 'Abilita comandi @Bindings:'; -$_lang["enable_bindings_message"] = 'Impedisce l\'esecuzione di funzioni PHP attraverso Variabili di Template di tipo @Bindings. Utile se avete utenti del manager che non devono poter creare codice PHP, ma che possono creare o modificare le Variabili di Template. L\'output di qualsiasi Variabile di Template @Bindings risulta "@Bindings disabled".'; -$_lang["enable_filter_title"] = 'Abilita filtri'; -$_lang["enable_filter_message"] = 'I filtri consentono di manipolare il modo in cui viene mostrato un tag. Inoltre, consentono di modificare i valori dall\'interno template. Funzionalità analoghe a PHx. Maggiori info'; // todo: change link to documentation -$_lang["enable_filter_phx_warning"] = 'Quando PHx è abilitato, i filtri sono disabilitati.'; - -$_lang["enable_filter_phx_warning"] = 'Quando PHx è abilitato, i filtri sono disabilitati.'; - -$_lang["enable_at_syntax_title"] = 'Abilita <@SYNTAX>'; -$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) è una sintassi di template semplice e leggera. Questo è progettato per considerare la coesistenza con tag HTML e stringhe di contenuto.'; - -$_lang["bkmgr_alert_mkdir"] = 'Non è possibile creare un file nella cartella. Controlla i permessi di scrittura di [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          Tabelle del database che potrebbero essere recuperate dall\'SQL:

          '; -$_lang["bkmgr_restore_title"] = 'Ripristina'; -$_lang["bkmgr_import_ok"] = 'Riristino SQL eseguito correttamente.'; -$_lang["bkmgr_snapshot_ok"] = 'Lo snapshot è stato salvato con successo.'; -$_lang["bkmgr_run_sql_file_label"] = 'Eseguire da file SQL'; -$_lang["bkmgr_run_sql_direct_label"] = 'Eseguire direttamente le stringhe SQL'; -$_lang["bkmgr_run_sql_submit"] = 'Eseguire ripristino'; -$_lang["bkmgr_run_sql_result"] = 'Risultati'; -$_lang["bkmgr_snapshot_title"] = 'Salvataggio e recupero snapshots'; -$_lang["bkmgr_snapshot_msg"] = '

          I contenuti del database vengono salvati e ripristinati da una directory del server.
          Percorso del salvataggio : [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; -$_lang["bkmgr_snapshot_submit"] = 'Aggiungi uno snapshot'; -$_lang["bkmgr_snapshot_list_title"] = 'Lista degli snapshots'; -$_lang["bkmgr_restore_submit"] = 'Ripristina questi dati'; -$_lang["bkmgr_restore_confirm"] = 'Sei sicuro di voler ripristinare il backup\n[+filename+] ? '; -$_lang["bkmgr_snapshot_nothing"] = 'Nessuno snapshot disponibile'; - -$_lang["files.dynamic.php1"] = 'Nuovo file di testo'; -$_lang["files.dynamic.php2"] = 'Questa cartella non può essere mostrata.'; -$_lang["files.dynamic.php3"] = 'C\'è un problema con il nome del file'; -$_lang["files.dynamic.php4"] = 'File di testo creato.'; -$_lang["files.dynamic.php5"] = 'Il file non può essere duplicato.'; -$_lang["files.dynamic.php6"] = 'il file o la directory non possono essere rinominati.'; -$_lang["files_dynamic_new_folder_name"] = 'Inserire il nome della nuova directory:'; -$_lang["files_dynamic_new_file_name"] = 'Inserire il nome del nuovo file:'; -$_lang["not_readable_dir"] = 'Non posso accedere a questa cartella.'; -$_lang["confirm_delete_dir"] = 'Sei sicuro di voler cancellare questa cartella?'; -$_lang["confirm_delete_dir_recursive"] = 'Siete sicuri di voler cancellare questa directory?\n\nAnche tutti i file che contiene saranno cancellati.'; - -$_lang["make_folders_title"] = 'Terminare l\'URL del Container con slash (/)'; -$_lang["make_folders_message"] = 'Aggiunge uno slash (/) all\'URL delle Risorse che sono impostate come cartelle quando si usano gli Url Semplici.'; - -$_lang["check_files_onlogin_title"] = 'Controllo dei files di sistema:'; -$_lang["check_files_onlogin_message"] = 'Attivando questa opzione, i files di sistema più importanti saranno controllati e sarete avvisati nel caso siano stati modificati (ad es. in caso attacchi via script al sito web). Pur non essendo una garanzia infallibile, può essere utile per capire quando è stato compromesso un file di sistema EVO e/o tutto il sito web.'; - -$_lang["configcheck_sysfiles_mod"] = 'Sono stati modificati alcuni importanti file di sistema.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'È stato configurato EVO per controllare i file più importanti del sistema da possibili attacchi al sito web. Questo avviso non significa necessariamente che il tuo sito è stato compromesso, tuttavia, è necessario esaminare i file controllati nell\'installazione (impostazione in Impostazioni di sistema -> Utente -> Controlla i file del sistema al login). Se i file sono inalterati o modificati dagli amministratori del sito. Ri-salvare le impostazioni per eliminare questo messaggio. Sono state trovate modifiche nei seguenti file '; - -$_lang['email_method_title'] = 'Metodo di invio mail:'; -$_lang['email_method_mail'] = 'Funzione mail() di PHP'; -$_lang['email_method_smtp'] = 'Server SMTP'; -$_lang['smtp_auth_title'] = 'SMTP-AUTH:'; -$_lang['smtp_host_title'] = 'Host SMTP:'; -$_lang['smtp_secure_title'] = 'SMTP criptato'; -$_lang['smtp_username_title'] = 'Utente SMTP:'; -$_lang['smtp_password_title'] = 'Password SMTP:'; -$_lang['smtp_port_title'] = 'Porta SMTP:'; - -$_lang["setting_resource_tree_node_name"] = 'Nome utilizzato nell\'albero delle Risorse:'; -$_lang["setting_resource_tree_node_name_desc"] = 'Selezionare quale proprietà della Risorsa sarà mostrata nell\'albero come nome della Risorsa. Di default è pagetitle.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Nota: Dalla versione EVO 1.1 è possibile modificare il nome mostrato nell\'albero delle risorse. Questa impostazione viene utilizzata quando il nome visualizzato nell\'albero delle risorse è impostato a "Default".'; - -$_lang["resource_opt_alvisibled"] = 'Usa l\'alias attuale nel percorso'; -$_lang["resource_opt_alvisibled_help"] = 'L\'alias di questa risora è inserito nel percorso degli Url Semplici'; -$_lang['resource_opt_is_published'] = 'Published'; -$_lang["docid_incrmnt_method_title"] = 'Metodo di incremento per l\'ID della Risorsa:'; -$_lang["docid_incrmnt_method_0"] = 'Incremento automatico DB'; -$_lang["docid_incrmnt_method_1"] = 'ID libero più basso'; -$_lang["docid_incrmnt_method_2"] = 'ID più grande + 1'; - -$_lang["enable_cache_title"] = 'Cache delle risorse'; -$_lang["disabled_at_login"] = 'Disabilitato all\'accesso'; - -$_lang["cache_type_title"] = 'Tipologia della cache dei documenti:'; -$_lang["cache_type_1"] = 'La cache si basa solo sull\'ID della Risorsa (standard)'; -$_lang["cache_type_2"] = 'La cache si basa sull\'ID della risorsa e sui parametri $_GET'; -$_lang["seostrict_title"] = 'Usa URL univoci:'; -$_lang["seostrict_message"] = 'Forza l\'uso di URL SEO univoche per prevenire contenuti duplicati (se necessario)'; -$_lang["aliaslistingfolder_title"] = 'Usa AliasListing solo per le cartelle'; -$_lang["aliaslistingfolder_message"] = 'Riduce il consumo di memoria quando si ha un gran numero di risorse'; - -$_lang["settings_friendlyurls_alert"] = 'E\' necessario rinominare il file ht.access presente nella root dell\'installazione di EVO in .htaccess per poter utilizzare gli URL Semplici.'; -$_lang["settings_friendlyurls_alert2"] = 'Dasto che EVO è installato in una sottodirectory è necessario modificare di conseguenza il file .htaccess.'; - -$_lang["user_street"] = 'Strada'; -$_lang["user_city"] = 'Città'; -$_lang["user_other"] = 'Altro'; - -$_lang["import_site.static.php1"] = 'Resetta l\'albero delle Risorse'; -$_lang["import_site.static.php2"] = 'Resetta l\'albero e inizializza tutti gli ID delle Risorse.'; -$_lang["import_site.static.php3"] = 'Target'; -$_lang["import_site.static.php4"] = 'Soltanto la parte <body></body>'; -$_lang["import_site.static.php5"] = 'Tutto il contenuto del file'; - -$_lang["a83_ignore_ids_title"] = 'Ignora questi ID (separati da virgola)'; -$_lang["export_site.static.php1"] = 'Target'; -$_lang["export_site.static.php2"] = 'Soltanto le Risorse modificate'; -$_lang["export_site.static.php3"] = 'Tutte le Risorse'; -$_lang["export_site.static.php4"] = 'Cerca '; -$_lang["export_site.static.php5"] = 'Sostituisci con'; -$_lang["export_site.static.php6"] = 'Target'; -$_lang["export_site.static.php7"] = 'Impossibile salvare i files su [+rb_base_url+]'; - -$_lang["mutate_settings.dynamic.php6"] = 'Invia una mail per gli errori EVO:'; -$_lang["mutate_settings.dynamic.php7"] = 'Non notificare'; -$_lang["mutate_settings.dynamic.php8"] = 'Verrà inviata una mail con la descrizione dell\'errore EVO a [(emailsender)] ([+emailsender+]). Si potranno vedere i dettagli dell\'errore dal Log Eventi.'; - -$_lang["error_no_privileges"] = "Non avete i diritti necessari per effettuare questa operazione!"; -$_lang["error_no_optimise_tablename"] = "Impossibile trovare la tabella da ottimizzare!"; -$_lang["error_no_truncate_tablename"] = "Impossibile trovare la tabella da troncare!"; -$_lang["error_double_action"] = "E' stata inviata una doppia azione (GET e POST)!"; -$_lang["error_no_id"] = "Nella richiesta manca l'ID del documento!"; -$_lang["error_id_nan"] = "L'ID passato nella richiesta è NaN!"; -$_lang["error_no_parent"] = "Impossibile trovare il nome del documento genitore!"; -$_lang["error_many_results"] = "Sono stati trovati troppi risultati nel database!"; -$_lang["error_no_results"] = "Sono stati trovati pochi risultati (o nessuno) nel database!"; -$_lang["error_no_user_selected"] = "Non è stato selezionato l'utente a cui inviare questo messaggio!"; -$_lang["error_no_group_selected"] = "Non è stato selezionato il gruppo a cui inviare questo messaggio!"; -$_lang["error_movedocument1"] = "Il documento non può essere genitore di se stesso!"; -$_lang["error_movedocument2"] = "Nella richiesta manca l'ID del documento!"; -$_lang["error_movedocument3"] = "Nella richiesta non è stato indicato il nuovo genitore!"; -$_lang["error_internet_connection"] = "Il server non è disponibile. Controlla la tua connessione Internet!"; - -$_lang["login_processor_unknown_user"] = "Username o password errati!"; -$_lang["login_processor_wrong_password"] = "Username o password errati!"; -$_lang["login_processor_many_failed_logins"] = "Accesso bloccato a causa di troppi tentativi falliti!"; -$_lang["login_processor_blocked1"] = "Impossibile accedere, l'accesso è stato bloccato!"; -$_lang["login_processor_blocked2"] = "L'accesso è stato bloccato! Riprovare più tardi."; -$_lang["login_processor_blocked3"] = "Dopo una certa data sarai bloccato e non potrai più accedere!"; -$_lang["login_processor_bad_code"] = "Codice di sicurezza errato! Riprovare!"; -$_lang["login_processor_remotehost_ip"] = "In nome del tuo host non corrisponde al tuo indirizzo IP!"; -$_lang["login_processor_remote_ip"] = "Non ti puoi collegare da questa località!"; -$_lang["login_processor_date"] = "Non puoi accedere adesso. Prova in un altro momento."; -$_lang["login_processor_captcha_config"] = "Captcha non è configurato correttamente."; - -$_lang["dp_dayNames"] = "['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'] "; -$_lang["dp_monthNames"] = "['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giusgno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre']"; -$_lang["dp_startDay"] = "1"; - -$_lang["check_all"] = "Seleziona tutto"; -$_lang["check_none"] = "Annulla selezione"; -$_lang["check_toggle"] = "Inverti selezione"; - -$_lang["version_notices"] = "Novità in questa versione"; - -$_lang["em_button_shift"] = "(Shift-click del mouse per aprire più finestre)"; - -$_lang["reset_sysfiles_checksum_button"] = "Resetta Controllo"; -$_lang["reset_sysfiles_checksum_alert"] = "Sei sicuro di voler resettare il controllo dei file di sistema?"; - -$_lang["file_browser_disabled_msg"] = "Il File Browser non è abilitato"; -$_lang["which_browser_default_title"]= "Default File Browser"; -$_lang["which_browser_default_msg"]= "Scegli il browser di file come default. Nelle Impostazioni utente è possibile scegliere un browser personalizzato per ogni utente, o lasciarlo impostato al "default"."; -$_lang["which_browser_title"]= "File Browser"; -$_lang["which_browser_msg"]= "È possibile scegliere un browser di file personalizzato per ogni utente. Per utilizzare l'impostazione predefinita, lasciarlo su "Default"."; -$_lang["option_default"] = "Default"; -$_lang["position"] = "Posizione"; -$_lang["are_you_sure"] = "Sei sicuro?"; - -$_lang['evo_downloads_title'] = "Evolution Downloads"; -$_lang['help_translating_title'] = "Contribuisci alla traduzione di EVO Evolution"; -$_lang['download'] = "Download"; -$_lang['downloads'] = "Downloads"; -$_lang["previous_releases"] = "Precedente Release "; -$_lang["extras"] = "Extras"; - -$_lang["display_locks"] = "Mostra Blocchi"; -$_lang["role_display_locks"] = "Mostra Blocchi"; -$_lang["session_timeout"] = "Timeout Sessione"; -$_lang["session_timeout_msg"] = "EVO effettua il ping al server una volta ogni minuto per aggiornare il controllo di posta. Se l'ultimo ping supera questa impostazione, la sessione associata sarà considerata non valida e tutti i blocchi relativi saranno rimossi automaticamente. Inserisci il valore in minuti (> 2 minuti, di default 15 minuti)."; -$_lang["unlock_element_id_warning"] = "Sei sicuro di voler sbloccare questo [+element_type+] (ID [+id+])?"; -$_lang["lock_element_type_1"] = "Template"; -$_lang["lock_element_type_2"] = "Template-Variable"; -$_lang["lock_element_type_3"] = "Chunk"; -$_lang["lock_element_type_4"] = "Snippet"; -$_lang["lock_element_type_5"] = "Plugin"; -$_lang["lock_element_type_6"] = "Modulo"; -$_lang["lock_element_type_7"] = "Risorsa"; -$_lang["lock_element_type_8"] = "Ruolo"; -$_lang["lock_element_editing"] = "Stai modificando questo [+element_type+] da\n[+lasthit_df+]"; -$_lang["lock_element_locked_by"] = "Questo [+element_type+] è bloccato dall'\n[+username+] da [+lasthit_df+]"; - -$_lang["minifyphp_incache_title"] = 'Minimizza il codice php nella cache'; -$_lang["minifyphp_incache_message"] = 'Minimizza il codice php(snippets e plugins) e salva nel file di chache, ref:#938'; - -$_lang["logout_reminder_msg"] = "Promemoria: Sembra che il [+date+] ti sei dimenticato di effettuare il logout. Si prega di prestare attenzione in futuro nel fare logout quando si ha finito di lavorare."; - -$_lang["allow_eval_title"] = "Utilizza Eval per eseguire il codice PHP nelle chiamate snippet"; -$_lang["allow_eval_msg"] = "Per gli sviluppatori : Si prega di utilizzare \$modx->safeEval()."; -$_lang["allow_eval_with_scan"] = "Esegui solo funzioni consentite"; -$_lang["allow_eval_with_scan_at_post"] = "Esegui tutto, eccetto in caso di POST, dove esegui solo funzioni consentite"; -$_lang["allow_eval_everytime_eval"] = "Illimitato (utilizzare solo per il debug)"; -$_lang["allow_eval_dont_eval"] = "Non consentire tutte le funzioni"; - -$_lang["safe_functions_at_eval_title"] = "Funzioni in cui consentire eval"; -$_lang["safe_functions_at_eval_msg"] = "Elenco separato da virgole"; - -$_lang["multiple_sessions_msg"] = "Informazione: Rilevate contemporaneamente sessioni multiple attive (totale [+total+]) per l'utente [+username+]."; -$_lang["iconv_not_available"] = "È importante installare / abilitare l'estensione iconv.. Contatta il tuo fornitore di l'host, se non sai come abilitarlo."; - -$_lang["cm_create_new_category"] = "Crea una nuova categoria"; -$_lang["cm_category_name"] = "Nome categoria"; -$_lang["cm_category_position"] = "Posizione categoria"; -$_lang["cm_no_x_assigned"] = "No %s assegnati"; -$_lang["cm_save_categorization"] = "Salva categorizzazione"; -$_lang["cm_update_categories"] = "Aggiorna categorie"; -$_lang["cm_assigned_elements"] = "Assegna elementi"; -$_lang["cm_edit_name"] = "Modifica nome"; -$_lang["cm_mark_for_deletion"] = "Segna per l'eliminazione"; -$_lang["cm_delete_now"] = "Elimina immediatamente"; -$_lang["cm_delete_element_x_now"] = "Elimina "%s" immediatamente"; -$_lang["cm_select_element_group"] = "Seleziona un gruppo di elementi"; -$_lang["cm_global_messages"] = "Messaggi globali"; -$_lang["cm_add_new_category"] = "Aggiungi categoria"; -$_lang["cm_edit_categories"] = "Modifica categoria"; -$_lang["cm_sort_categories"] = "Ordina categorie"; -$_lang["cm_categorize_elements"] = "Categorizza elementi"; -$_lang["cm_translation"] = "Traduzione"; -$_lang["cm_translations"] = "Traduzioni"; -$_lang["cm_categorize_x"] = "Categorizza %s"; -$_lang["cm_unknown_error"] = "Qualcosa è andato storto."; -$_lang["cm_x_assigned_to_category_y"] = "%s(%s) è stato assegnato alla categoria %s(%s)"; -$_lang["cm_no_categorization"] = "Nessuna categorizzazione effettuata"; -$_lang["cm_no_changes"] = "Nessuna modifica effettuata."; -$_lang["cm_x_changes_made"] = "%s modifiche effettuate"; -$_lang["cm_enter_name_for_category"] = "Inserisci un nome per la categoria"; -$_lang["cm_category_x_exists"] = "La categoria %s già esiste ."; -$_lang["cm_category_x_saved_at_position_y"] = "La nuova categoria %s è stata salvata nella posizione %s."; -$_lang["cm_category_x_moved_to_position_y"] = "Categoria %s spostata alla posizione %s"; -$_lang["cm_category_x_deleted"] = "La categoria %s è stata cancellata"; -$_lang["cm_category_x_renamed_to_y"] = "La categoria %sè stata rinominata %s"; -$_lang["cm_translation_for_x_empty"] = "La traduzione per %s è assente"; -$_lang["cm_translation_for_x_to_y_success"] = "La traduzione di %s a%s è stata salvata"; -$_lang["cm_save_new_sorting"] = "Salva nuovo ordine"; -$_lang["cm_translate_phrases"] = "Traduci frase"; -$_lang["cm_translate_module_phrases"] = "Traduci frasi del modulo"; -$_lang["cm_native_phrase"] = "Frase nativa"; - -$_lang["btn_view_options"] = 'Opzioni di visualizzazione'; -$_lang["view_options_msg"] = 'La visualizzazione e l\'elenco degli elementi possono essere personalizzati tramite il pulsante "Opzioni di visualizzazione". Le impostazioni vengono salvate e ripristinate per Browser usando localStorage di HTML5.'; -$_lang["viewopts_title"] = 'Opzioni di visualizzazione'; -$_lang["viewopts_cb_buttons"] = 'Bottoni'; -$_lang["viewopts_cb_descriptions"] = 'Descrizioni'; -$_lang["viewopts_cb_icons"] = 'Icone'; -$_lang["viewopts_radio_list"] = 'Lista'; -$_lang["viewopts_radio_inline"] = 'Inline'; -$_lang["viewopts_radio_flex"] = 'Flex'; -$_lang["viewopts_fontsize"] = 'Dimensione font'; -$_lang["viewopts_cb_alltabs"] = 'Tutti i Tab'; +Vi consigliamo di lasciare i due Placeholders [+uid+] e [+pwd+] nel corpo della e-mail altrimenti il nome utente e password non saranno inviati e l\'utente non potrà collegarsi!'; +$_lang["signupemail_title"] = 'E-mail per l\'iscrizione:'; +$_lang["site"] = 'Sito'; +$_lang["site_schedule"] = 'Pianificazione Sito'; +$_lang["sitename_message"] = 'Inserite qui il nome del vostro sito web.'; +$_lang["sitename_title"] = 'Nome del sito:'; +$_lang["sitestart_message"] = 'Inserite l\'ID della Risorsa che volete usare come Home Page. NOTA: assicuratevi che l\'ID inserito appartenga a una Risorsa esistente e che sia stata pubblicata!'; +$_lang["sitestart_title"] = 'Il sito inizia da:'; +$_lang["sitestatus_message"] = 'Selezionate \'Online\' per pubblicare il sito sul web. Se selezionate \'Offline\', i visitatori vedranno il \'Messaggio Sito non disponibile\' e non potranno consultarlo.'; +$_lang["sitestatus_title"] = 'Stato del sito:'; +$_lang["siteunavailable_message"] = 'Messaggio da visualizzare quando il sito è offline o si è verificato un errore.'; +$_lang["siteunavailable_message_default"] = 'Questo sito non è al momento disponibile.'; +$_lang["siteunavailable_page_message"] = 'Inserite l\'ID che volete mostrare quando il sito è offline. NOTA: assicuratevi che l\'ID appartenga ad una Risorsa esistente e che sia stata pubblicata!'; +$_lang["siteunavailable_page_title"] = 'Pagina sito non disponibile:'; +$_lang["siteunavailable_title"] = 'Messaggio sito non disponibile:'; +$_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; +$_lang["snippet_code"] = 'Codice dello Snippet (PHP)'; +$_lang["snippet_desc"] = 'Descrizione Snippet'; +$_lang["snippet_execonsave"] = 'Esegui lo Snippet dopo il salvataggio.'; +$_lang["snippet_management_msg"] = 'Qui potete scegliere gli Snippets da modificare o crearne di nuovi.'; +$_lang["snippet_msg"] = 'Qui potete aggiungere/modificare gli Snippets. Ricordate che gli Snippets sono codice PHP \'raw\' (grezzo) e se prevedete che l\'output venga mostrato in un punto preciso del Template dovete avere una variabile nello snippet che abbia il nome dello snippet stesso - in pratica, l\'output dello Snippet dev\'essere salvato in una variabile che porta il nome dello Snippet stesso.'; +$_lang["snippet_name"] = 'Nome Snippet'; +$_lang["snippet_properties"] = 'Proprietà di default'; +$_lang["snippet_title"] = 'Crea/modifica Snippet'; +$_lang["sort_alphabetically"] = 'Ordine alfabetico'; +$_lang["sort_asc"] = 'Ascendente'; +$_lang["sort_desc"] = 'Discendente'; +$_lang["sort_menuindex"] = 'Ordina per indice menu'; +$_lang["sort_tree"] = 'Ordina la struttura ad albero'; +$_lang['sort_updating'] = 'Aggiornamento ...'; +$_lang['sort_updated'] = 'Aggiornato'; +$_lang['sort_nochildren'] = 'La cartella superiore non contiene documenti'; +$_lang["sort_elements_msg"] = 'Trascinare per riordinare gli elementi della lista.'; +$_lang["source"] = 'Sorgente'; +$_lang["stay"] = 'Continua la modifica dopo il salvataggio'; +$_lang["stay_new"] = 'Aggiungi un altro'; +$_lang["submit"] = 'Invia'; +$_lang["sunday"] = 'Domenica'; +$_lang["sys_alert"] = 'Avviso di sistema'; +$_lang["sysinfo_activity_message"] = 'Risorse modificate di recente dagli utenti.'; +$_lang["sysinfo_userid"] = 'Utente'; +$_lang["system"] = 'Sistema'; +$_lang["system_email_signup"] = ' + +Salve [+uid+] + +qui ci sono le credenziali di autenticazione per il sistema di gestione dei contenuti di [+sname+] : + +Username: [+uid+] +Password: [+pwd+] + +Quando ti sarai autenticato nel sistema di gestione ([+surl+]), potrai cambiare la tua password. + +Cordiali Saluti, +  l\'amministratore del Sito +'; +$_lang["system_email_webreminder"] = 'Salve [+uid+] + +Per attivare la tua password clicca sul link sottostante: + +[+surl+] + +In seguito potrai usare la seguente password per accedere: + +Password:[+pwd+] + +e non hai richiesto questa mail, ignorala. + +Cordiali Saluti, +l\'amministratore del Sito'; +$_lang["system_email_websignup"] = 'Salve [+uid+] + +qui ci sono le credenziali di autenticazione per [+sname+]: + +Nome utente: [+uid+] +Password: [+pwd+] + +Quando ti sarai autenticato in [+sname+] ([+surl+]), potrai cambiare la tua password. + +Cordiali Saluti, + l\'amministratore del Sito'; +$_lang["table_hoverinfo"] = 'Portate il cursore sopra il nome di una tabella per vedere una breve descrizione della funzione della tabella (non tutte le tabelle hanno dei commenti impostati o tradotti).'; +$_lang["table_prefix"] = 'Prefisso Tabella'; +$_lang["tag"] = 'Tag'; +$_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; +$_lang["template_assignedtv_tab"] = 'Variabili di Template Assegnate'; +$_lang["template_code"] = 'Codice del Template (HTML)'; +$_lang["template_desc"] = 'Descrizione'; +$_lang["template_edit_tab"] = 'Modifica Template'; +$_lang["template_management_msg"] = 'Qui potete scegliere il Template da modificare o creare un nuovo Template.'; +$_lang["template_msg"] = 'Qui potete creare/modificare i Templates. I Template modificati o nuovi non saranno visibili nelle pagine in cache finchè la cache stessa non verrà svuotata. Ad ogni modo, potete usare la funzione di anteprima su una pagina per vedere il Template in azione.'; +$_lang["template_name"] = 'Nome del Template'; +$_lang["template_no_tv"] = 'A questo Template non sono ancora state assegnate delle Variabili di Template.'; +$_lang["template_notassigned_tv"] = 'Queste variabili di template sono disponibili per l\'assegnazione.'; +$_lang["template_reset_all"] = 'Impostate il nuovo Template di default su tutte le pagine'; +$_lang["template_reset_specific"] = 'Impostate il nuovo Template di default solo sulle pagine con \'%s\''; +$_lang["template_selectable"] = 'Template selezionabile durante la creazione o la modifica di risorse.'; +$_lang["template_title"] = 'Crea/Modifica Template'; +$_lang["template_tv_edit"] = 'Modifica l\'ordine delle Variabili di Template'; +$_lang["template_tv_edit_message"] = 'Trascinare per riordinare le Variabili di Template di questo Template.'; +$_lang["template_tv_edit_title"] = 'Ordine delle Variabili di Template'; +$_lang["template_tv_msg"] = 'Le variabili di template assegnate a questo Template sono elencate qui in basso.'; +$_lang["thursday"] = 'Giovedì'; +$_lang["tmplvar_access_msg"] = 'Selezionate i Gruppi di Risorse autorizzati a modificare il contenuto o il valore di questa Variabile di Template'; +$_lang["tmplvar_change_template_msg"] = 'Cambiando questo Template verranno ricaricate le Variabili di Template. Tutte le modifiche non salvate verranno perse.\n\n Siete sicuri di voler modificare il Template?'; +$_lang["tmplvar_inuse"] = 'Le seguenti Risorse utilizzano questa Variabile di Template. Per confermare la cancellazione, cliccare su elimina. Altrimenti cliccare su cancella.'; +$_lang["tmplvar_tmpl_access"] = 'Accesso Template'; +$_lang["tmplvar_tmpl_access_msg"] = 'Selezionate quali Templates possono utilizzare questa Variabile di Template'; +$_lang["tmplvar"] = 'Variabile di Template'; +$_lang["tmplvars"] = 'Variabili di Template'; +$_lang["tmplvars_binding_msg"] = 'Questo campo supporta connessioni a sorgenti dati che usano il comando @ '; +$_lang["tmplvars_caption"] = 'Didascalia'; +$_lang["tmplvars_default"] = 'Valore di default'; +$_lang["tmplvars_description"] = 'Descrizione'; +$_lang["tmplvars_elements"] = 'Opzioni valori di input'; +$_lang["tmplvars_inherited"] = 'Value inherited'; +$_lang["tmplvars_management_msg"] = 'Qui potete gestire e creare le Variabili di Template per le vostre Risorse.'; +$_lang["tmplvars_msg"] = 'Qui potete creare o modificare le Variabili di Template. Le Variabili di Template devono essere assegnate ad un Template per poter essere utilizzate da Snippets e Risorse.'; +$_lang["tmplvars_name"] = 'Nome variabile'; +$_lang["tmplvars_novars"] = 'Nessuna Variabile di Template trovata'; +$_lang["tmplvars_rank"] = 'Ordinamento'; +$_lang["tmplvars_rank_edit_message"] = 'Trascina per riordinare le variabili di template'; +$_lang["tmplvars_reset_params"] = 'Resetta parametri'; +$_lang["tmplvars_title"] = 'Crea/Modifica Variable di Template'; +$_lang["tmplvars_type"] = 'Tipo di input'; +$_lang["tmplvars_widget"] = 'Widget'; +$_lang["tmplvars_widget_prop"] = 'Proprietà Widget'; +$_lang["to"] = 'a'; +$_lang["toggle_fullscreen"] = 'Attiva/Disattiva schermo intero'; +$_lang["tools"] = 'Strumenti'; +$_lang["top_howmany_message"] = 'Nel visualizzare i resoconti, quanto deve essere grande la lista \'I primi ...\'?'; +$_lang["top_howmany_title"] = 'Quanti \'I primi\':'; +$_lang["total"] = 'totale'; +$_lang["track_visitors_message"] = 'Seleziona per mostrare le risorse secondarie nell\'albero del documento'; +$_lang["track_visitors_title"] = 'Mostra le risorse secondarie'; +$_lang["tree_page_click"] = 'Azione del click su una pagina:'; +$_lang["tree_page_click_message"] = 'Cosa succede facendo click su una pagina nell\'albero del sito.'; +$_lang["use_breadcrumbs"] = 'Mostra navigazione'; +$_lang["use_breadcrumbs_message"] = 'Mostra la navigazione quando crei o modifichi una risorsa'; +$_lang["tree_show_protected"] = 'Mostra pagine protette:'; +$_lang["tree_show_protected_message"] = 'Se è selezionato \'No\' le pagine protette (e tutte le pagine figlie) non appariranno nell\'albero delle Risorse. \'No\' è l\'impostazione di default di EVO.'; +$_lang["truncate_table"] = 'Cliccate qui per troncare questa tabella'; +$_lang["tuesday"] = 'Martedì'; +$_lang["tv"] = 'TV'; +$_lang["type"] = 'Tipo'; +$_lang["udperms_allowroot_message"] = 'Volete permettere agli utenti di creare nuove Risorse e cartelle nella root del sito? '; +$_lang["udperms_allowroot_title"] = 'Permetti creazione nella root:'; +$_lang["udperms_message"] = 'I permessi di accesso vi consentono di specificare quali pagine possono essere modificate dagli utenti. Avete bisogno di assegnare gli utenti ai Gruppi di Utenti, le Risorse ai Gruppi di Risorse, ed infine dovrete specificare quali Gruppi di Utenti hanno accesso a quali Gruppi di Risorse. Appena saranno attivati i permessi, solo gli amministratori potranno modificare qualsiasi Risorsa.'; +$_lang["udperms_title"] = 'Usa i permessi di accesso:'; +$_lang["unable_set_link"] = 'Impossibile impostare il collegamento!'; +$_lang["unable_set_parent"] = 'Impossibile impostare una nuova Risorsa genitore!'; +$_lang["unauthorizedpage_message"] = 'Digitate l\'ID della Risorsa che volete mostrare agli utenti che hanno richiesto una Risorsa protetta o non autorizzata. NOTA: assicuratevi che la Risorsa indicata esista, sia pubblicata e accessibile all\'utente!'; +$_lang["unauthorizedpage_title"] = 'Pagina non autorizzata:'; +$_lang["unblock_message"] = 'L\'utente non sarà più bloccato dopo aver salvato i suoi dati.'; +$_lang["undelete_resource"] = 'Ripristina Risorsa'; +$_lang["unpublish_date"] = 'Data di ritiro dalla pubblicazione'; +$_lang["unpublish_events"] = 'Eventi di ritiro dalla pubblicazione'; +$_lang["unpublish_resource"] = 'Ritira Risorsa'; +$_lang["untitled_resource"] = 'Risorsa senza titolo'; +$_lang["untitled_weblink"] = 'Link Web senza titolo'; +$_lang["update_params"] = 'Aggiorna parametri di visualizzazione'; +$_lang["update_settings_from_language"] = 'Sostituire con:'; +$_lang["upload_maxsize_message"] = 'Qui potete inserire le dimensioni massime dei file che si possono caricare tramite il sistema di gestione file. Le dimensioni devo essere impostate in bytes. NOTA: File troppo grandi impiegano molto tempo a caricare!'; +$_lang["upload_maxsize_title"] = 'Massima dimensione caricamento:'; +$_lang["uploadable_files_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare nella cartella assets/files con il File Browser. Inserite le estensioni per i vari tipi di file separate da virgole.'; +$_lang["uploadable_files_title"] = 'Tipi di file caricabili:'; +$_lang["uploadable_flash_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare con il File Browser nella cartella \'assets/flash/\'. Inserite le estensioni per i tipi di file Flash separate da virgole.'; +$_lang["uploadable_flash_title"] = 'Tipi di Flash caricabili:'; +$_lang["uploadable_images_message"] = 'Qui potete inserire la lista dei tipi di file che si possono caricare con il File browser nella cartella \'assets/images/\'. Inserite le estensioni per i tipi di immagine separate da virgole.'; +$_lang["uploadable_images_title"] = 'Tipi di immagini caricabili:'; +$_lang["uploadable_media_message"] = 'Qui potete inserire una lista dei tipi di file che si possono caricare con il File Manager nella cartella \'assets/media/\'. Inserite le estensioni per i tipi di media separate da virgole.'; +$_lang["uploadable_media_title"] = 'Tipi di media caricabili:'; +$_lang["use_alias_path_message"] = 'Abilitando questa opzione verrà generato un percorso virtuale per la Risorsa. Ad esempio, se la Risorsa "figlio.html" sta dentro la Risorsa Cartella "genitore" il percorso completo sarà "/genitore/figlio.html".'; +$_lang["use_alias_path_title"] = 'Usa percorso completo per l\'alias:'; +$_lang["use_editor_message"] = 'Volete abilitare l\'editor rich text? Se ritenete più comodo scrivere direttamente in HTML, con questa impostazione potete disabilitarlo. Da notare che le impostazioni si applicano a tutte le Risorse e a tutti gli utenti!'; +$_lang["use_editor_title"] = 'Abilita editor rich text:'; +$_lang["use_global_tabs"] = 'Usa Global Tabs'; +$_lang["user"] = 'Utente'; +$_lang["user_block"] = 'Bloccato'; +$_lang["user_blockedafter"] = 'Bloccato dopo'; +$_lang["user_blockeduntil"] = 'Bloccato fino'; +$_lang["user_changeddata"] = 'I vostri dati sono stati modificati. Vi preghiamo di effettuare nuovamente l\'accesso.'; +$_lang["user_country"] = 'Nazione'; +$_lang["user_dob"] = 'Data di nascita'; +$_lang["user_doesnt_exist"] = 'L\'utente non esiste'; +$_lang["user_edit_self_msg"] = 'Se cambiate lo vostre informazioni utente dopo il salvataggio potreste aver bisogno di scollegarvi e di ricollegarvi nuovamente.
          Se avete scelto di generare automaticamente una nuova password vi verrà inviata per e-mail, verificate l\'indirizzo e-mail che avete inserito.'; +$_lang["user_email"] = 'Indirizzo e-mail'; +$_lang["user_failedlogincount"] = 'Login falliti'; +$_lang["user_fax"] = 'Numero di fax'; +$_lang["user_female"] = 'Femmina'; +$_lang["user_full_name"] = 'Nome completo'; +$_lang["user_gender"] = 'Sesso'; +$_lang["user_is_blocked"] = 'L\'utente è bloccato!'; +$_lang["user_logincount"] = 'Contatore login'; +$_lang["user_male"] = 'Maschio'; +$_lang["user_management_msg"] = 'Qui potete scegliere l\'utente da modificare o creare un nuovo utente. Questi utenti sono quelli che possono accedere al sistema di gestione dei contenuti.'; +$_lang["user_management_title"] = 'Gestione Utenti'; +$_lang["user_mobile"] = 'Numero di cellulare'; +$_lang["user_phone"] = 'Numero di telefono'; +$_lang["user_photo"] = 'Foto dell\'Utente'; +$_lang["user_photo_message"] = 'Inserite l\'url dell\'immagine o caricate l\'immagine sul server.'; +$_lang["user_prevlogin"] = 'Ultima autenticazione'; +$_lang["user_role"] = 'Ruolo dell\'utente'; +$_lang["user_state"] = 'Regione'; +$_lang["user_title"] = 'Crea/modifica utente'; +$_lang["user_upload_message"] = 'Se volete impedire che questo utente possa caricare files di questo tipo, assicuratevi che la casella \'Use Main Configuration Setting\' non sia selezionata e lasciate vuoto il campo.'; +$_lang["user_use_config"] = 'Usare le Impostazioni di Sistema'; +$_lang["user_zip"] = 'CAP'; +$_lang["username"] = 'Nome utente'; +$_lang["users"] = 'Utenti'; +$_lang["valid_hostnames_message"] = 'Inserendo una lista di nomi di host consentiti per questa installazione di EVO è possibile prevenire che con un attacco XSS si possa falsificare l\'impostazione di sistema site_url. Può essere importante farlo per alcuni tipi di server condivisi o altri server direttamente accessibili da un indirizzo IP. Il primo nome di host della lista verà usato quando HTTP_HOST non corrisponde ad alcun nome di host valido.'; +$_lang["valid_hostnames_title"] = 'Nomi di host consentiti:'; +$_lang["validate_referer_message"] = 'Validare gli headers HTTP_REFERER per ridurre il rischio di essere vittime di un attacco CSRF (Cross Site Request Forgery). Alcune configurazioni possono non essere in grado di gestire questa opzione se il server non invia gli headers HTTP_REFERER.'; +$_lang["validate_referer_title"] = 'Validazione degli headers HTTP_REFERER:'; +$_lang["value"] = 'Valore'; +$_lang["version"] = 'Versione'; +$_lang["view"] = 'Mostra'; +$_lang["view_child_resources_in_container"] = 'Vedi le Risorse contenute'; +$_lang["view_log"] = 'Vedi log'; +$_lang["view_logging"] = 'Log del Manager'; +$_lang["view_sysinfo"] = 'Informazioni di Sistema'; +$_lang["warning"] = 'Attenzione!'; +$_lang["warning_not_saved"] = 'Le modifiche che avete effettuato non sono state ancora salvate. Potete scegliere di rimanere sulla pagina corrente per salvarle (\'Annulla\'), oppure potete abbandonarla perdendo ogni modifica che avete fatto (\'OK\').'; +$_lang["warning_visibility"] = 'Avvisi di configurazione visibili a:'; +$_lang["warning_visibility_message"] = 'Controlla la visualizzazione degli avvisi mostrati nella pagina iniziale del Manager'; +$_lang["web_access_permissions"] = 'Permessi di accesso Web'; +$_lang["web_access_permissions_user_groups"] = 'Gruppi di Utenti Web'; +$_lang["web_permissions"] = 'Permessi Web'; +$_lang["web_user_management_msg"] = 'Qui potete selezionare l\'utente web da modificare. Gli utenti web sono gli utenti autorizzati ad accedere al sito.'; +$_lang["web_user_management_title"] = 'Gestione Utenti Web'; +$_lang["web_user_title"] = 'Crea/modifica Utenti Web'; +$_lang["web_users"] = 'Utenti web'; +$_lang["weblink"] = 'Link Web'; +$_lang["webpwdreminder_message"] = 'Inserite il messaggio da inviare in mail, quando gli utenti chiedono una nuova password via email. IL sistema di gestione dei contenuti invierà loro una e-mail contenente la nuova password e le informazioni di attivazione.
          Nota: I seguenti segnaposto saranno sostituiti dal sistema di gestione del contenuto quando invierà il messaggio:

          [+sname+] - Nome del sito,
          [+saddr+] - Indirizzo email del sito,
          [+surl+] - Url del sito,
          [+uid+] - Login o id dell\'utente,
          [+pwd+] - Password utente,
          [+ufn+] - Nome completo dell\'utente.

          Lasciate [+uid+] e [+pwd+] nella e-mail, altrimenti il nome utente e la password non verranno inviati!'; +$_lang["webpwdreminder_title"] = 'Email recupero dati autenticazione:'; +$_lang["websignupemail_message"] = 'Qui potete impostare il messaggio e-mail contenente nome utente e password inviato agli utenti quando gli create un nuovo account.
          Nota: I seguenti Placeholders saranno sostituiti dal sistema di gestione dei contenuti quando invierà il messaggio:

          [+sname+] - Nome del sito,
          [+saddr+] - Indirizzo email del sito,
          [+surl+] - Url del sito,
          [+uid+] - Login o id dell\'utente,
          [+pwd+] - Password utente,
          [+ufn+] - Nome completo dell\'utente.

          Lasciate [+uid+] e [+pwd+] nella e-mail, altrimenti il nome utente e la password non verranno inviati!'; +$_lang["websignupemail_title"] = 'Indirizzo E-mail di registrazione:'; +$_lang["allow_multiple_emails_title"] = 'Indirizzo email duplicato per l\'Utente Web'; +$_lang["allow_multiple_emails_message"] = 'Consente agli Utenti Web di condividere lo stesso indirizzo email, ad esempio quando un utente non ha un suo indirizzo email o tutti usano un solo indirizzo familiare.
          Nota: se si imposta questa opzione occorre tenerne conto nella registrazione o recupero della password.'; +$_lang["wednesday"] = 'Mercoledì'; +$_lang["welcome_messages"] = 'La vostra inbox contiene %d messaggi(o), di cui %s non letto/i.'; +$_lang["welcome_title"] = 'Benvenuto nel sistema di gestione dei contenuti EVO'; +$_lang["which_editor_message"] = 'Qui potete selezionare quale editor rich text preferite usare. Potete scaricare ed installare altri editor dalla sezione downloads del sito EVO '; +$_lang["which_editor_title"] = 'Editor da usare:'; +$_lang["working"] = 'Sto elaborando...'; +$_lang["wrap_lines"] = 'Manda le linee a capo automaticamente'; +$_lang["xhtml_urls_message"] = 'Sostituisce la e commerciale (ampersand (&)) negli indirizzi generati da EVO con l\' entità HTML &amp;'; +$_lang["xhtml_urls_title"] = 'URL XHTML:'; +$_lang["yes"] = 'Si'; +$_lang["you_got_mail"] = 'Avete una mail'; +$_lang["yourinfo_message"] = 'Questa sezione mostra alcune vostre informazioni:'; +$_lang["yourinfo_previous_login"] = 'La vostra ultima connessione al sistema:'; +$_lang["yourinfo_role"] = 'Il vostro Ruolo è:'; +$_lang["yourinfo_title"] = 'Le vostre informazioni'; +$_lang["yourinfo_total_logins"] = 'Numero totale di connessioni:'; +$_lang["yourinfo_username"] = 'Siete autenticati come:'; + +$_lang["a17_error_reporting_title"] = 'Livello di dettaglio degli errori PHP:'; +$_lang["a17_error_reporting_msg"] = 'Imposta il livello di rilevamento degli errori PHP.'; +$_lang["a17_error_reporting_opt0"] = 'Ignora tutti gli errori'; +$_lang["a17_error_reporting_opt1"] = 'Ignora gli errori di basso livello (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; +$_lang["a17_error_reporting_opt2"] = 'Rileva tutti gli errori eccetto E_NOTICE'; +$_lang["a17_error_reporting_opt99"] = 'Rileva tutti gli errori'; + +$_lang["pwd_hash_algo_title"] = 'Algoritmo di hash:'; +$_lang["pwd_hash_algo_message"] = 'Password algoritmo di hash.'; + +$_lang["enable_bindings_title"] = 'Abilita comandi @Bindings:'; +$_lang["enable_bindings_message"] = 'Impedisce l\'esecuzione di funzioni PHP attraverso Variabili di Template di tipo @Bindings. Utile se avete utenti del manager che non devono poter creare codice PHP, ma che possono creare o modificare le Variabili di Template. L\'output di qualsiasi Variabile di Template @Bindings risulta "@Bindings disabled".'; +$_lang["enable_filter_title"] = 'Abilita filtri'; +$_lang["enable_filter_message"] = 'I filtri consentono di manipolare il modo in cui viene mostrato un tag. Inoltre, consentono di modificare i valori dall\'interno template. Funzionalità analoghe a PHx. Maggiori info'; // todo: change link to documentation +$_lang["enable_filter_phx_warning"] = 'Quando PHx è abilitato, i filtri sono disabilitati.'; + +$_lang["enable_filter_phx_warning"] = 'Quando PHx è abilitato, i filtri sono disabilitati.'; + +$_lang["enable_at_syntax_title"] = 'Abilita <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) è una sintassi di template semplice e leggera. Questo è progettato per considerare la coesistenza con tag HTML e stringhe di contenuto.'; + +$_lang["bkmgr_alert_mkdir"] = 'Non è possibile creare un file nella cartella. Controlla i permessi di scrittura di [+snapshot_path+]'; +$_lang["bkmgr_restore_msg"] = '

          Tabelle del database che potrebbero essere recuperate dall\'SQL:

          '; +$_lang["bkmgr_restore_title"] = 'Ripristina'; +$_lang["bkmgr_import_ok"] = 'Riristino SQL eseguito correttamente.'; +$_lang["bkmgr_snapshot_ok"] = 'Lo snapshot è stato salvato con successo.'; +$_lang["bkmgr_run_sql_file_label"] = 'Eseguire da file SQL'; +$_lang["bkmgr_run_sql_direct_label"] = 'Eseguire direttamente le stringhe SQL'; +$_lang["bkmgr_run_sql_submit"] = 'Eseguire ripristino'; +$_lang["bkmgr_run_sql_result"] = 'Risultati'; +$_lang["bkmgr_snapshot_title"] = 'Salvataggio e recupero snapshots'; +$_lang["bkmgr_snapshot_msg"] = '

          I contenuti del database vengono salvati e ripristinati da una directory del server.
          Percorso del salvataggio : [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_submit"] = 'Aggiungi uno snapshot'; +$_lang["bkmgr_snapshot_list_title"] = 'Lista degli snapshots'; +$_lang["bkmgr_restore_submit"] = 'Ripristina questi dati'; +$_lang["bkmgr_restore_confirm"] = 'Sei sicuro di voler ripristinare il backup\n[+filename+] ? '; +$_lang["bkmgr_snapshot_nothing"] = 'Nessuno snapshot disponibile'; + +$_lang["files.dynamic.php1"] = 'Nuovo file di testo'; +$_lang["files.dynamic.php2"] = 'Questa cartella non può essere mostrata.'; +$_lang["files.dynamic.php3"] = 'C\'è un problema con il nome del file'; +$_lang["files.dynamic.php4"] = 'File di testo creato.'; +$_lang["files.dynamic.php5"] = 'Il file non può essere duplicato.'; +$_lang["files.dynamic.php6"] = 'il file o la directory non possono essere rinominati.'; +$_lang["files_dynamic_new_folder_name"] = 'Inserire il nome della nuova directory:'; +$_lang["files_dynamic_new_file_name"] = 'Inserire il nome del nuovo file:'; +$_lang["not_readable_dir"] = 'Non posso accedere a questa cartella.'; +$_lang["confirm_delete_dir"] = 'Sei sicuro di voler cancellare questa cartella?'; +$_lang["confirm_delete_dir_recursive"] = 'Siete sicuri di voler cancellare questa directory?\n\nAnche tutti i file che contiene saranno cancellati.'; + +$_lang["make_folders_title"] = 'Terminare l\'URL del Container con slash (/)'; +$_lang["make_folders_message"] = 'Aggiunge uno slash (/) all\'URL delle Risorse che sono impostate come cartelle quando si usano gli URL Semplici.'; + +$_lang["check_files_onlogin_title"] = 'Controllo dei files di sistema:'; +$_lang["check_files_onlogin_message"] = 'Attivando questa opzione, i files di sistema più importanti saranno controllati e sarete avvisati nel caso siano stati modificati (ad es. in caso attacchi via script al sito web). Pur non essendo una garanzia infallibile, può essere utile per capire quando è stato compromesso un file di sistema EVO e/o tutto il sito web.'; + +$_lang["configcheck_sysfiles_mod"] = 'Sono stati modificati alcuni importanti file di sistema.'; +$_lang["configcheck_sysfiles_mod_msg"] = 'È stato configurato EVO per controllare i file più importanti del sistema da possibili attacchi al sito web. Questo avviso non significa necessariamente che il tuo sito è stato compromesso, tuttavia, è necessario esaminare i file controllati nell\'installazione (impostazione in Impostazioni di sistema -> Utente -> Controlla i file del sistema al login). Se i file sono inalterati o modificati dagli amministratori del sito. Ri-salvare le impostazioni per eliminare questo messaggio. Sono state trovate modifiche nei seguenti file '; + +$_lang['email_method_title'] = 'Metodo di invio mail:'; +$_lang['email_method_mail'] = 'Funzione mail() di PHP'; +$_lang['email_method_smtp'] = 'Server SMTP'; +$_lang['smtp_auth_title'] = 'SMTP-AUTH:'; +$_lang['smtp_host_title'] = 'Host SMTP:'; +$_lang['smtp_secure_title'] = 'SMTP criptato'; +$_lang['smtp_username_title'] = 'Utente SMTP:'; +$_lang['smtp_password_title'] = 'Password SMTP:'; +$_lang['smtp_port_title'] = 'Porta SMTP:'; + +$_lang["setting_resource_tree_node_name"] = 'Nome utilizzato nell\'albero delle Risorse:'; +$_lang["setting_resource_tree_node_name_desc"] = 'Selezionare quale proprietà della Risorsa sarà mostrata nell\'albero come nome della Risorsa. Di default è pagetitle.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Nota: Dalla versione EVO 1.1 è possibile modificare il nome mostrato nell\'albero delle risorse. Questa impostazione viene utilizzata quando il nome visualizzato nell\'albero delle risorse è impostato a "Default".'; + +$_lang["resource_opt_alvisibled"] = 'Usa l\'alias attuale nel percorso'; +$_lang["resource_opt_alvisibled_help"] = 'L\'alias di questa risora è inserito nel percorso degli Url Semplici'; +$_lang['resource_opt_is_published'] = 'Published'; +$_lang["docid_incrmnt_method_title"] = 'Metodo di incremento per l\'ID della Risorsa:'; +$_lang["docid_incrmnt_method_0"] = 'Incremento automatico DB'; +$_lang["docid_incrmnt_method_1"] = 'ID libero più basso'; +$_lang["docid_incrmnt_method_2"] = 'ID più grande + 1'; + +$_lang["enable_cache_title"] = 'Cache delle risorse'; +$_lang["disabled_at_login"] = 'Disabilitato all\'accesso'; + +$_lang["cache_type_title"] = 'Tipologia della cache dei documenti:'; +$_lang["cache_type_1"] = 'La cache si basa solo sull\'ID della Risorsa (standard)'; +$_lang["cache_type_2"] = 'La cache si basa sull\'ID della risorsa e sui parametri $_GET'; +$_lang["seostrict_title"] = 'Usa URL univoci:'; +$_lang["seostrict_message"] = 'Forza l\'uso di URL SEO univoche per prevenire contenuti duplicati (se necessario)'; +$_lang["aliaslistingfolder_title"] = 'Usa AliasListing solo per le cartelle'; +$_lang["aliaslistingfolder_message"] = 'Riduce il consumo di memoria quando si ha un gran numero di risorse'; + +$_lang["settings_friendlyurls_alert"] = 'E\' necessario rinominare il file ht.access presente nella root dell\'installazione di EVO in .htaccess per poter utilizzare gli URL Semplici.'; +$_lang["settings_friendlyurls_alert2"] = 'Dasto che EVO è installato in una sottodirectory è necessario modificare di conseguenza il file .htaccess.'; + +$_lang["user_street"] = 'Strada'; +$_lang["user_city"] = 'Città'; +$_lang["user_other"] = 'Altro'; + +$_lang["import_site.static.php1"] = 'Resetta l\'albero delle Risorse'; +$_lang["import_site.static.php2"] = 'Resetta l\'albero e inizializza tutti gli ID delle Risorse.'; +$_lang["import_site.static.php3"] = 'Target'; +$_lang["import_site.static.php4"] = 'Soltanto la parte <body></body>'; +$_lang["import_site.static.php5"] = 'Tutto il contenuto del file'; + +$_lang["a83_ignore_ids_title"] = 'Ignora questi ID (separati da virgola)'; +$_lang["export_site.static.php1"] = 'Target'; +$_lang["export_site.static.php2"] = 'Soltanto le Risorse modificate'; +$_lang["export_site.static.php3"] = 'Tutte le Risorse'; +$_lang["export_site.static.php4"] = 'Cerca '; +$_lang["export_site.static.php5"] = 'Sostituisci con'; +$_lang["export_site.static.php6"] = 'Target'; +$_lang["export_site.static.php7"] = 'Impossibile salvare i files su [+rb_base_url+]'; + +$_lang["mutate_settings.dynamic.php6"] = 'Invia una mail per gli errori EVO:'; +$_lang["mutate_settings.dynamic.php7"] = 'Non notificare'; +$_lang["mutate_settings.dynamic.php8"] = 'Verrà inviata una mail con la descrizione dell\'errore EVO a [(emailsender)] ([+emailsender+]). Si potranno vedere i dettagli dell\'errore dal Log Eventi.'; + +$_lang["error_no_privileges"] = "Non avete i diritti necessari per effettuare questa operazione!"; +$_lang["error_no_optimise_tablename"] = "Impossibile trovare la tabella da ottimizzare!"; +$_lang["error_no_truncate_tablename"] = "Impossibile trovare la tabella da troncare!"; +$_lang["error_double_action"] = "E' stata inviata una doppia azione (GET e POST)!"; +$_lang["error_no_id"] = "Nella richiesta manca l'ID del documento!"; +$_lang["error_id_nan"] = "L'ID passato nella richiesta è NaN!"; +$_lang["error_no_parent"] = "Impossibile trovare il nome del documento genitore!"; +$_lang["error_many_results"] = "Sono stati trovati troppi risultati nel database!"; +$_lang["error_no_results"] = "Sono stati trovati pochi risultati (o nessuno) nel database!"; +$_lang["error_no_user_selected"] = "Non è stato selezionato l'utente a cui inviare questo messaggio!"; +$_lang["error_no_group_selected"] = "Non è stato selezionato il gruppo a cui inviare questo messaggio!"; +$_lang["error_movedocument1"] = "Il documento non può essere genitore di se stesso!"; +$_lang["error_movedocument2"] = "Nella richiesta manca l'ID del documento!"; +$_lang["error_movedocument3"] = "Nella richiesta non è stato indicato il nuovo genitore!"; +$_lang["error_internet_connection"] = "Il server non è disponibile. Controlla la tua connessione Internet!"; + +$_lang["login_processor_unknown_user"] = "Username o password errati!"; +$_lang["login_processor_wrong_password"] = "Username o password errati!"; +$_lang["login_processor_many_failed_logins"] = "Accesso bloccato a causa di troppi tentativi falliti!"; +$_lang["login_processor_blocked1"] = "Impossibile accedere, l'accesso è stato bloccato!"; +$_lang["login_processor_blocked2"] = "L'accesso è stato bloccato! Riprovare più tardi."; +$_lang["login_processor_blocked3"] = "Dopo una certa data sarai bloccato e non potrai più accedere!"; +$_lang["login_processor_bad_code"] = "Codice di sicurezza errato! Riprovare!"; +$_lang["login_processor_remotehost_ip"] = "In nome del tuo host non corrisponde al tuo indirizzo IP!"; +$_lang["login_processor_remote_ip"] = "Non ti puoi collegare da questa località!"; +$_lang["login_processor_date"] = "Non puoi accedere adesso. Prova in un altro momento."; +$_lang["login_processor_captcha_config"] = "Captcha non è configurato correttamente."; + +$_lang["dp_dayNames"] = "['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'] "; +$_lang["dp_monthNames"] = "['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre']"; +$_lang["dp_startDay"] = "1"; + +$_lang["check_all"] = "Seleziona tutto"; +$_lang["check_none"] = "Annulla selezione"; +$_lang["check_toggle"] = "Inverti selezione"; + +$_lang["version_notices"] = "Novità in questa versione"; + +$_lang["em_button_shift"] = "(Shift-click del mouse per aprire più finestre)"; + +$_lang["reset_sysfiles_checksum_button"] = "Resetta Controllo"; +$_lang["reset_sysfiles_checksum_alert"] = "Sei sicuro di voler resettare il controllo dei file di sistema?"; + +$_lang["file_browser_disabled_msg"] = "Il File Browser non è abilitato"; +$_lang["which_browser_default_title"]= "Default File Browser"; +$_lang["which_browser_default_msg"]= "Scegli il browser di file come default. Nelle Impostazioni utente è possibile scegliere un browser personalizzato per ogni utente, o lasciarlo impostato al "default"."; +$_lang["which_browser_title"]= "File Browser"; +$_lang["which_browser_msg"]= "È possibile scegliere un browser di file personalizzato per ogni utente. Per utilizzare l'impostazione predefinita, lasciarlo su "Default"."; +$_lang["option_default"] = "Default"; +$_lang["position"] = "Posizione"; +$_lang["are_you_sure"] = "Sei sicuro?"; + +$_lang['evo_downloads_title'] = "Siti Web di EVO"; +$_lang['help_translating_title'] = "Contribuisci alla traduzione di EVO"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Precedente Release "; +$_lang["extras"] = "Extras"; + +$_lang["display_locks"] = "Mostra Blocchi"; +$_lang["role_display_locks"] = "Mostra Blocchi"; +$_lang["session_timeout"] = "Timeout Sessione"; +$_lang["session_timeout_msg"] = "EVO effettua il ping al server una volta ogni minuto per aggiornare il controllo di posta. Se l'ultimo ping supera questa impostazione, la sessione associata sarà considerata non valida e tutti i blocchi relativi saranno rimossi automaticamente. Inserisci il valore in minuti (> 2 minuti, di default 15 minuti)."; +$_lang["unlock_element_id_warning"] = "Sei sicuro di voler sbloccare questo [+element_type+] (ID [+id+])?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template-Variable"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plugin"; +$_lang["lock_element_type_6"] = "Modulo"; +$_lang["lock_element_type_7"] = "Risorsa"; +$_lang["lock_element_type_8"] = "Ruolo"; +$_lang["lock_element_editing"] = "Stai modificando questo [+element_type+] da\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "Questo [+element_type+] è bloccato dall'\n[+username+] da [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Minimizza il codice php nella cache'; +$_lang["minifyphp_incache_message"] = 'Minimizza il codice php (snippets e plugins) e salvalo nel file di cache, ref:#938'; + +$_lang["logout_reminder_msg"] = "Promemoria: Sembra che il [+date+] ti sei dimenticato di effettuare il logout. Si prega di prestare attenzione in futuro nel fare logout quando si ha finito di lavorare."; + +$_lang["allow_eval_title"] = "Utilizza Eval per eseguire il codice PHP nelle chiamate snippet"; +$_lang["allow_eval_msg"] = "Per gli sviluppatori : Si prega di utilizzare \$modx->safeEval()."; +$_lang["allow_eval_with_scan"] = "Esegui solo funzioni consentite"; +$_lang["allow_eval_with_scan_at_post"] = "Esegui tutto, eccetto in caso di POST, dove esegui solo funzioni consentite"; +$_lang["allow_eval_everytime_eval"] = "Illimitato (utilizzare solo per il debug)"; +$_lang["allow_eval_dont_eval"] = "Non consentire tutte le funzioni"; + +$_lang["safe_functions_at_eval_title"] = "Funzioni in cui consentire eval"; +$_lang["safe_functions_at_eval_msg"] = "Elenco separato da virgole"; + +$_lang["multiple_sessions_msg"] = "Informazione: Rilevate contemporaneamente sessioni multiple attive (totale [+total+]) per l'utente [+username+]."; +$_lang["iconv_not_available"] = "È importante installare / abilitare l'estensione iconv.. Contatta il tuo fornitore di l'host, se non sai come abilitarlo."; + +$_lang["cm_create_new_category"] = "Crea una nuova categoria"; +$_lang["cm_category_name"] = "Nome categoria"; +$_lang["cm_category_position"] = "Posizione categoria"; +$_lang["cm_no_x_assigned"] = "No %s assegnati"; +$_lang["cm_save_categorization"] = "Salva categorizzazione"; +$_lang["cm_update_categories"] = "Aggiorna categorie"; +$_lang["cm_assigned_elements"] = "Assegna elementi"; +$_lang["cm_edit_name"] = "Modifica nome"; +$_lang["cm_mark_for_deletion"] = "Segna per l'eliminazione"; +$_lang["cm_delete_now"] = "Elimina immediatamente"; +$_lang["cm_delete_element_x_now"] = "Elimina "%s" immediatamente"; +$_lang["cm_select_element_group"] = "Seleziona un gruppo di elementi"; +$_lang["cm_global_messages"] = "Messaggi globali"; +$_lang["cm_add_new_category"] = "Aggiungi categoria"; +$_lang["cm_edit_categories"] = "Modifica categoria"; +$_lang["cm_sort_categories"] = "Ordina categorie"; +$_lang["cm_categorize_elements"] = "Categorizza elementi"; +$_lang["cm_translation"] = "Traduzione"; +$_lang["cm_translations"] = "Traduzioni"; +$_lang["cm_categorize_x"] = "Categorizza %s"; +$_lang["cm_unknown_error"] = "Qualcosa è andato storto."; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) è stato assegnato alla categoria %s(%s)"; +$_lang["cm_no_categorization"] = "Nessuna categorizzazione effettuata"; +$_lang["cm_no_changes"] = "Nessuna modifica effettuata."; +$_lang["cm_x_changes_made"] = "%s modifiche effettuate"; +$_lang["cm_enter_name_for_category"] = "Inserisci un nome per la categoria"; +$_lang["cm_category_x_exists"] = "La categoria %s già esiste ."; +$_lang["cm_category_x_saved_at_position_y"] = "La nuova categoria %s è stata salvata nella posizione %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Categoria %s spostata alla posizione %s"; +$_lang["cm_category_x_deleted"] = "La categoria %s è stata cancellata"; +$_lang["cm_category_x_renamed_to_y"] = "La categoria %sè stata rinominata %s"; +$_lang["cm_translation_for_x_empty"] = "La traduzione per %s è assente"; +$_lang["cm_translation_for_x_to_y_success"] = "La traduzione di %s a%s è stata salvata"; +$_lang["cm_save_new_sorting"] = "Salva nuovo ordine"; +$_lang["cm_translate_phrases"] = "Traduci frase"; +$_lang["cm_translate_module_phrases"] = "Traduci frasi del modulo"; +$_lang["cm_native_phrase"] = "Frase nativa"; + +$_lang["btn_view_options"] = 'Opzioni di visualizzazione'; +$_lang["view_options_msg"] = 'La visualizzazione e l\'elenco degli elementi possono essere personalizzati tramite il pulsante "Opzioni di visualizzazione". Le impostazioni vengono salvate e ripristinate per ogni browser usando il localStorage di HTML5.'; +$_lang["viewopts_title"] = 'Opzioni di visualizzazione'; +$_lang["viewopts_cb_buttons"] = 'Bottoni'; +$_lang["viewopts_cb_descriptions"] = 'Descrizioni'; +$_lang["viewopts_cb_icons"] = 'Icone'; +$_lang["viewopts_radio_list"] = 'Lista'; +$_lang["viewopts_radio_inline"] = 'Inline'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Dimensione font'; +$_lang["viewopts_cb_alltabs"] = 'Tutti i Tab'; + +$_lang['email_sender_method'] = 'Il mittente del messaggio'; +$_lang['auto'] = 'Riconoscimento automatico'; +$_lang['use_emailsender'] = 'Usa il valore [(emailsender)]'; +$_lang['email_sender_method_message'] = 'Il mittente del messaggio. In genere verrà trasformato in un header Return-Path dal destinatario ed è l\'indirizzo al quale verranno notificati gli indirizzi errati. Attivare Il riconoscimento automatico andrà bene nella maggior parte dei casi.'; + +$_lang['login_form_position_title'] = 'Posizione del form di login'; +$_lang['login_form_position_left'] = 'sinistra'; +$_lang['login_form_position_center'] = 'centro'; +$_lang['login_form_position_right'] = 'destra'; +$_lang["login_form_style"] = 'Stile del form di login:'; +$_lang["login_form_style_dark"] = 'scuro'; +$_lang["login_form_style_light"] = 'chiaro'; +$_lang['login_logo_title'] = 'Immagine del logo per la pagina di login'; +$_lang['login_logo_message'] = 'Formato consigliato del logo: dimensione 360 px, tipo .png'; +$_lang['login_bg_title'] = 'Immagine di sfondo per la pagina di login'; +$_lang['login_bg_message'] = 'Ampiezza consigliata per l\'immagine di sfondo della pagina di login: 1920px'; + +$_lang['manager_menu_position_title'] = 'Posizione del menu principale'; +$_lang['manager_menu_position_top'] = 'alto'; +$_lang['manager_menu_position_left'] = 'sinistra'; +$_lang['invalid_event_response'] = 'L\'evento %s ha un output errato'; + +$_lang['chunk_processor'] = 'Classe di elaborazione dei chunk'; +$_lang['enable_mootools'] = 'Abilita Mootools nel manager'; +$_lang['enable_mootools_message'] = 'Carica nel manager la libreria Mootools.js per la retrocompatibilità'; diff --git a/manager/includes/lang/japanese-utf8.inc.php b/manager/includes/lang/japanese-utf8.inc.php index bbe1a347..9b69c4bf 100755 --- a/manager/includes/lang/japanese-utf8.inc.php +++ b/manager/includes/lang/japanese-utf8.inc.php @@ -666,7 +666,7 @@ $_lang["password_method_email"] = '対象ユーザにメールで通知する'; $_lang["password_method_screen"] = '生成したパスワードを次の画面で表示する'; $_lang["password_msg"] = '%sのパスワードは%sです。'; -$_lang["php_version_check"] = 'MODX EvolutionはPHPバージョン5.0.0またはそれ以上で動作します。インストールされているPHPをアップグレードしてください。'; +$_lang["php_version_check"] = 'MODX EvolutionはPHPバージョン5.6.0またはそれ以上で動作します。インストールされているPHPをアップグレードしてください。'; $_lang["plugin"] = 'プラグイン'; $_lang["plugin_code"] = 'プラグイン コード (php)'; $_lang["plugin_config"] = 'プラグイン設定'; diff --git a/manager/includes/lang/nederlands-utf8.inc.php b/manager/includes/lang/nederlands-utf8.inc.php index 8359d183..15d0823a 100755 --- a/manager/includes/lang/nederlands-utf8.inc.php +++ b/manager/includes/lang/nederlands-utf8.inc.php @@ -1,1480 +1,1480 @@ -PHP Applicatie Framework en Content Management Systeem met de licentie GNU GPL.'; -$_lang["about_title"] = 'Over Evolution'; -$_lang["access_permission_denied"] = 'U heeft niet de juiste toegangsrechten voor deze Pagina.'; -$_lang["access_permission_parent_denied"] = 'U heeft niet genoeg toegangsrechten om hier een Pagina aan te maken of te verplaatsen! Kies a.u.b. een andere locatie.'; -$_lang["access_permissions"] = 'Toegangsrechten'; -$_lang["access_permissions_add_resource_group"] = 'Maak een nieuwe Paginagroep'; -$_lang["access_permissions_add_user_group"] = 'Maak een nieuwe Gebruikersgroep'; -$_lang["access_permissions_docs_collision"] = 'Omdat de Webgebruikersgroepen en Gebruikersgroepen conflicteren voor uw Rol, zal deze Pagina onbeveiligd zijn. Neem contact op met uw website beheerder voor meer hulp.'; -$_lang["access_permissions_docs_message"] = 'Geef aan tot welke Paginagroepen deze Pagina behoort'; -$_lang["access_permissions_group_link"] = 'Maak een nieuwe groep koppeling'; -$_lang["access_permissions_introtext"] = 'Dit is de beheermodule van Gebruikers- en Paginagroepen die worden gebruikt in het toegangsbeheer. Om een Gebruiker toe te voegen aan een groep, volstaat het deze te bewerken en de groepen te kiezen waartoe deze moet behoren. Om een Pagina toe te wijzen aan een Gebruikersgroep, kiest u tijdens het bewerken van de Pagina voor de groepen waartoe de Pagina moet behoren.'; -$_lang["access_permissions_link_to_group"] = 'aan Paginagroep'; -$_lang["access_permissions_link_user_group"] = 'Koppel Gebruikersgroep'; -$_lang["access_permissions_links"] = 'Gebruikersgroep of Paginagroep koppelingen'; -$_lang["access_permissions_links_tab"] = 'Geef aan welke Gebruikersgroepen toegang hebben tot bepaalde Paginagroepen (m.a.w. welke groepen Subpagina\'s kunnen maken of bewerken). Om een Pagina toe te wijzen aan een groep kiest u de Pagina uit de lijst en klikt u daarna op \'Verzenden\'. Om een Pagina uit een groep te halen klikt u op \'Verwijder\'.'; -$_lang["access_permissions_no_resources_in_group"] = 'Geen.'; -$_lang["access_permissions_no_users_in_group"] = 'Geen.'; -$_lang["access_permissions_off"] = 'Toegangsbeheer is niet geactiveerd. Dit betekent dat wijzigingen die hier worden gemaakt geen effect hebben zolang toegangsbeheer niet is geactiveerd in uw Configuratie.'; -$_lang["access_permissions_resource_groups"] = 'Paginagroepen'; -$_lang["access_permissions_resources_in_group"] = 'Pagina\'s in deze groep: '; -$_lang["access_permissions_resources_tab"] = 'Bekijk hier de Paginagroepen. U kunt ook nieuwe groepen maken, bestaande bewerken of verwijderen of nagaan welke Pagina deel uitmaakt van een groep. Door met de muis over de ID van de Pagina te bewegen, ziet u de naam ervan. Door de Pagina te bewerken kunt u de groepsrechten wijzigen.'; -$_lang["access_permissions_user_groups"] = 'Gebruikersgroepen'; -$_lang["access_permissions_user_message"] = 'Geef aan tot welke groepen deze Gebruiker behoort:'; -$_lang["access_permissions_users_in_group"] = 'Gebruikers in deze groep:'; -$_lang["access_permissions_users_tab"] = 'Bekijk de Gebruikersgroepen. U kunt ook nieuwe groepen maken, bestaande bewerken of verwijderen, of nagaan wie deel uitmaakt van een groep. Om een Gebruiker uit een groep te halen of aan een groep toe te wijzen, wijzigt u de gegevens van de Gebruiker. Beheerders (dit zijn Gebruikers met profiel ID 1) hebben altijd toegang tot alle Pagina\'s dus hoeft u hen niet toe te voegen aan een groep.'; -$_lang["account_email"] = 'E-mail account'; -$_lang["actioncomplete"] = 'Actie is succesvol afgerond!
          - Moment geduld. EVO wordt opgeschoond.'; -$_lang["activity_message"] = 'Deze lijst toont de laatst bewerkte/gemaakte pagina\'s:'; -$_lang["activity_title"] = 'Recent gemaakte/bewerkte Pagina\'s'; -$_lang["add"] = 'Toevoegen'; -$_lang["add_chunk"] = 'Chunk toevoegen'; -$_lang["add_doc"] = 'Pagina toevoegen'; -$_lang["add_folder"] = 'Nieuwe Map'; -$_lang["add_plugin"] = 'Plug-in toevoegen'; -$_lang["add_resource"] = 'Nieuwe Pagina'; -$_lang["add_snippet"] = 'Snippet toevoegen'; -$_lang["add_tag"] = 'Tag toevoegen'; -$_lang["add_template"] = 'Template toevoegen'; -$_lang["add_tv"] = 'TV toevoegen'; -$_lang["add_weblink"] = 'Nieuwe Weblink'; -$_lang["administrator_role_message"] = 'Dit profiel kan niet worden bewerkt of verwijderd.'; -$_lang["administrators"] = 'Administrators'; -$_lang["after_saving"] = 'Na opslaan'; -$_lang["alert_delete_self"] = 'U kunt uzelf niet verwijderen!'; -$_lang["alias"] = 'Alias'; -$_lang["all_doc_groups"] = 'Alle Paginagroepen (onbeveiligd)'; -$_lang["all_events"] = 'Alle gebeurtenissen'; -$_lang["all_usr_groups"] = 'Alle Gebruikersgroepen (onbeveiligd)'; -$_lang["allow_mgr_access"] = 'Toegang tot het Content Management Systeem'; -$_lang["allow_mgr_access_message"] = 'Deze optie geeft de gebruiker toegang tot het Content Management Systeem. NB: \'Nee\' betekent dat de gebruiker wordt doorverwezen naar de login pagina of de eerste pagina van de website.'; -$_lang["already_deleted"] = 'is reeds verwijderd.'; -$_lang["attachment"] = 'Bijlage'; -$_lang["author_infos"] = 'Auteur informatie'; -$_lang["automatic_alias_message"] = 'Kies \'Ja\' om het systeem automatisch een alias op basis van de titel van de Pagina te laten genereren wanneer de Pagina wordt opgeslagen.'; -$_lang["automatic_alias_title"] = 'Genereer automatisch een alias'; -$_lang["backup"] = 'Backup'; -$_lang["bk_manager"] = 'Backup'; -$_lang["block_message"] = 'Deze Gebruiker zal geblokkeerd worden na het opslaan van zijn Gebruikersgegevens!'; -$_lang["blocked_minutes_message"] = 'Geef hier het aantal minuten op dat een Gebruiker geblokkeerd zal worden als hij zijn maximaal aantal toegestane aanmeldpogingen heeft bereikt. A.u.b. alleen getallen gebruiken (geen komma\'s, spaties etc.)'; -$_lang["blocked_minutes_title"] = 'Minuten geblokkeerd'; -$_lang["cache_files_deleted"] = 'Deze bestanden werden verwijderd:'; -$_lang["cancel"] = 'Annuleren'; -$_lang["captcha_code"] = 'Beveiligingscode'; -$_lang["captcha_message"] = 'Door CAPTCHA aan te zetten, worden Gebruikers verplicht een beveiligingscode over te typen. Deze code is in een Afbeelding verwerkt en is daardoor onleesbaar voor machines en automatische programma\'s die erop uit zijn in te breken op uw website.'; -$_lang["captcha_title"] = 'CAPTCHA codes gebruiken'; -$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join,Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; -$_lang["captcha_words_message"] = 'Vul hier een lijst van woorden in, van elkaar gescheiden door komma\'s, die gebruikt zal worden indien CAPTCHA is ingeschakeld. Het veld kan maximaal 255 tekens bevatten.'; -$_lang["captcha_words_title"] = 'CAPTCHA woorden'; -$_lang["category_heading"] = 'Categorie'; -$_lang["category_manager"] = 'Categorie Manager'; -$_lang["category_management"] = 'Categorie beheren'; -$_lang["manage_categories"] = 'Beheer categorieën'; -$_lang["category_msg"] = 'Bekijk en wijzig hier alle Elementen gegroepeerd per categorie.'; -$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; -$_lang["cfg_base_url"] = 'MODX_BASE_URL'; -$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; -$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; -$_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Naam wijzigen'; -$_lang["change_password"] = 'Wachtwoord wijzigen'; -$_lang["change_password_confirm"] = 'Wachtwoord bevestigen'; -$_lang["change_password_message"] = 'Voer uw nieuwe wachtwoord in en voer het nogmaals in om te bevestigen. Uw wachtwoord moet minimaal 6 tekens lang zijn.'; -$_lang["change_password_new"] = 'Nieuw wachtwoord'; -$_lang["charset_message"] = 'Kies de standaard karakterset codering voor de [(modx_charset)] systeem variabele. Dit beïnvloed niet het Content Management Systeem.'; -$_lang["charset_title"] = 'Karakterset codering'; -$_lang["chunk"] = 'Chunk'; -$_lang["chunk_code"] = 'Chunk code (html)'; -$_lang["chunk_multiple_id"] = 'Fout: Meerdere Chunks delen deze unieke ID.'; -$_lang["chunk_no_exist"] = 'Chunk bestaat niet.'; -$_lang["cleaningup"] = 'Opschonen'; -$_lang["clean_uploaded_filename"] = 'Gebruik Transliteratie voor Bestanden Uploaden'; -$_lang["clean_uploaded_filename_message"] = 'Gebruik de standaard of transalias instelling voor de bestandsnaam om speciale karakters op te schonen'; -$_lang["clear_log"] = 'Logboek leegmaken'; -$_lang["click_to_context"] = 'Klik om het context menu te openen'; -$_lang["click_to_edit_title"] = 'Klik hier om deze regel te bewerken'; -$_lang["click_to_view_details"] = 'Klik hier voor details'; -$_lang["close"] = 'Sluiten'; -$_lang["code"] = 'Code'; -$_lang["collapse_tree"] = 'Website boomstructuur inschuiven'; -$_lang["comment"] = 'Opmerking'; -$_lang["configcheck_admin"] = 'Neem a.u.b. contact op met een systeembeheerder en geef deze melding door!'; -$_lang["configcheck_cache"] = 'Kan niet schrijven in de cache Map'; -$_lang["configcheck_cache_msg"] = 'EVO kan niet naar de cache map schrijven. EVO functioneert nog steeds zoals verwacht, maar er vindt geen caching plaats. Om dit op te lossen, maak de /cache/ map schrijfbaar.'; -$_lang["configcheck_configinc"] = 'Configuratiebestand heeft nog schrijfrechten'; -$_lang["configcheck_configinc_msg"] = 'Kwaadwillenden zouden mogelijk schade aan uw website kunnen toebrengen met alle gevolgen van dien. Zet uw configuratiebestand (/[+MGR_DIR+]/includes/config.inc.php) op alleen-lezen!'; -$_lang["configcheck_default_msg"] = 'Er is een ongedefinieerde waarschuwing gevonden. Dit is zeer vreemd.'; -$_lang["configcheck_errorpage_unavailable"] = 'Er is geen \'Fout\'-pagina voor uw website beschikbaar.'; -$_lang["configcheck_errorpage_unavailable_msg"] = 'Dit houdt in dat uw \'Fout\'-pagina niet toegankelijk is voor normale Webgebruikers of niet bestaat. Dit kan leiden tot een oneindige lus en veel foutmeldingen in uw logbestand. Zorg ervoor dat de Pagina niet aan een Webgebruikersgroep is toegewezen.'; -$_lang["configcheck_errorpage_unpublished"] = 'De \'Fout\'-pagina voor uw website is niet gepubliceerd of bestaat niet.'; -$_lang["configcheck_errorpage_unpublished_msg"] = 'Dit houdt in dat uw \'Fout\'-pagina niet toegankelijk is voor bezoekers. Publiceer de Pagina of zorg ervoor dat het is toegewezen aan een bestaande Pagina in de inhoudsopgave van uw website met het Beheer > Configuratie menu.'; -$_lang["configcheck_filemanager_path"] = 'Het momenteel ingestelde Bestandsbeheer pad lijkt onjuist te zijn.'; -$_lang["configcheck_filemanager_path_msg"] = 'Dit kan bijvoorbeeld gebeuren door uw installatie naar een andere directory of server te verhuizen. Controleer en update uw Evo systeemconfiguratie.'; -$_lang["configcheck_hide_warning"] = 'Niet meer tonen.'; -$_lang["configcheck_images"] = 'De Map images is niet schrijfbaar'; -$_lang["configcheck_images_msg"] = 'De Map images is niet schrijfbaar of bestaat niet. Dit betekent dat de Afbeeldingen beheer opties in de teksteditor niet werken!'; -$_lang["configcheck_installer"] = 'Het installatiebestand is nog niet verwijderd'; -$_lang["configcheck_installer_msg"] = 'De map /install bevat het installatieprogramma voor EVO. Stelt u zich eens voor wat er zou kunnen gebeuren als een boosaardig persoon deze map vindt en het installatieprogramma uitvoert! Ze komen waarschijnlijk niet te ver, omdat ze wat gebruikersinformatie voor de database moeten invoeren, maar het is nog steeds het beste om deze map van je server te verwijderen.'; -$_lang["configcheck_lang_difference"] = 'Ongeldig aantal regels in het vertaalbestand'; -$_lang["configcheck_lang_difference_msg"] = 'De taal die u heeft geselecteerd (Nederlands) heeft een verschillend aantal eenheden ten opzichte van de standaardtaal. Dit hoeft niet tot problemen te leiden, maar het is wel aan te raden om het huidige vertaalbestand te updaten.'; -$_lang["configcheck_notok"] = 'Één of meer configuratie opties zijn onjuist gebleken: '; -$_lang["configcheck_ok"] = 'Controle is geslaagd - er zijn geen onjuistheden gevonden.'; -$_lang["configcheck_php_gdzip"] = 'GD en/of Zip PHP extensies niet gevonden'; -$_lang["configcheck_php_gdzip_msg"] = 'EVO heeft de GD- en Zip-extensie ingeschakeld voor PHP. Hoewel EVO zonder deze functies werkt, kunt u niet volledig profiteren van de ingebouwde bestandsbeheerder, afbeeldingseditor of Captcha voor aanmeldingen.'; -$_lang["configcheck_rb_base_dir"] = 'Het momenteel ingestelde basis Bestandsbeheer pad lijkt onjuist te zijn.'; -$_lang["configcheck_rb_base_dir_msg"] = 'Dit kan bijvoorbeeld gebeuren door uw installatie naar een andere directory of server te verplaatsen. Controleer en update uw Evo systeemconfiguratie.'; -$_lang["configcheck_register_globals"] = 'register_globals staat op AAN in uw php.ini configuratiebestand'; -$_lang["configcheck_register_globals_msg"] = 'Deze instelling maakt uw website veel gevoeliger voor Cross Site Scripting (XSS) aanvallen. Neem contact op met uw host over hoe u deze instelling kunt uitzetten.'; -$_lang["configcheck_title"] = 'Configuratietest'; -$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin gevonden'; -$_lang["configcheck_templateswitcher_present_delete"] = 'Verwijder TemplateSwitcher'; -$_lang["configcheck_templateswitcher_present_disable"] = 'TemplateSwitcher uitschakelen'; -$_lang["configcheck_templateswitcher_present_msg"] = 'De TemplateSwitcher plugin geeft cache en prestatie problemen en er zou alleen gebruik van gemaakt moeten worden wanneer deze functie echt nodig is voor uw website.'; -$_lang["configcheck_unauthorizedpage_unavailable"] = 'Uw \'Niet Gemachtigd\'-pagina is niet gepubliceerd of bestaat niet.'; -$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Dit houdt in dat uw \'Niet Gemachtigd\'-pagina niet toegankelijk is voor normale Webgebruikers of niet bestaat. Dit kan leiden tot een oneindige lus en veel foutmeldingen in uw logbestand. Zorg ervoor dat de Pagina niet aan een Webgebruikersgroep is toegewezen.'; -$_lang["configcheck_unauthorizedpage_unpublished"] = 'De \'Niet Gemachtigd\'-pagina die in de configuratie instellingen is aangegeven is niet gepubliceerd.'; -$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Dit houdt in dat uw \'Niet Gemachtigd\'-pagina niet toegankelijk is voor bezoekers. Publiceer de Pagina of zorg ervoor dat het is toegewezen aan een bestaande Pagina in de inhoudsopgave van uw website met het Beheer > Configuratie menu.'; -$_lang["configcheck_validate_referer"] = 'Beveiliging Waarschuwing: HTTP Header Validatie'; -$_lang["configcheck_validate_referer_msg"] = 'De configuratie instelling Validate HTTP_REFERER headers? staat UIT. We raden aan deze AAN te zetten. Ga naar de Configuratie opties'; -$_lang["configcheck_warning"] = 'Configuratie waarschuwing:'; -$_lang["configcheck_what"] = 'Wat betekent dit?'; -$_lang["confirm_block"] = 'Weet u zeker dat u deze Gebruiker wilt blokkeren?'; -$_lang["confirm_delete_category"] = 'Weet u zeker dat u deze categorie wilt verwijderen?'; -$_lang["confirm_delete_eventlog"] = 'Weet u zeker dat u het logboek (events) wilt leegmaken?'; -$_lang["confirm_delete_file"] = 'Weet u zeker dat u dit bestand wilt verwijderen?\n\nHet zou kunnen dat hierdoor uw website niet meer werkt! Verwijder dit bestand uitsluitend indien u zeker bent dat u hiermee niks stuk maakt.'; -$_lang["confirm_delete_group"] = 'Weet u zeker dat u deze Groep wilt verwijderen?'; -$_lang["confirm_delete_htmlsnippet"] = 'Weet u zeker dat u deze Chunk wilt verwijderen?'; -$_lang["confirm_delete_keywords"] = 'Weet u zeker dat u deze keywords wilt verwijderen?'; -$_lang["confirm_delete_module"] = 'Weet u zeker dat u deze Module wilt verwijderen?'; -$_lang["confirm_delete_plugin"] = 'Weet u zeker dat u deze Plug-in wilt verwijderen?'; -$_lang["confirm_delete_record"] = 'Weet u zeker dat u de geselecteerde regels wilt verwijderen?'; -$_lang["confirm_delete_resource"] = 'Weet u zeker dat u deze Pagina wilt verwijderen?\nDan worden tevens alle Subpagina\'s verwijderd.'; -$_lang["confirm_delete_role"] = 'Weet u zeker dat u deze Rol wilt verwijderen?'; -$_lang["confirm_delete_snippet"] = 'Weet u zeker dat u deze Snippet wilt verwijderen?'; -$_lang["confirm_delete_tags"] = 'Weet u zeker dat u de geselecteerde \'META tags\' wilt verwijderen?'; -$_lang["confirm_delete_template"] = 'Weet u zeker dat u deze Template wilt verwijderen?'; -$_lang["confirm_delete_tmplvars"] = 'Weet u zeker dat u deze Template Variabele en alle opgeslagen waarden wilt verwijderen?'; -$_lang["confirm_delete_user"] = 'Weet u zeker dat u deze Gebruiker wilt verwijderen?'; -$_lang["confirm_duplicate_record"] = 'Weet u zeker dat u deze regel wilt dupliceren?'; -$_lang["confirm_empty_trash"] = 'Als u de prullenbak leegmaakt worden alle gemarkeerde Pagina\'s permanent verwijderd!\n\nDoorgaan?'; -$_lang["confirm_load_depends"] = 'Weet u zeker dat u dit scherm wilt verlaten? De afhankelijkheden van deze Module gaan daarbij verloren!'; -$_lang["confirm_name_change"] = 'Het veranderen van de Gebruikersnaam kan invloed hebben op gekoppelde applicaties.\n\n Weet u zeker dat u de Gebruikersnaam wilt veranderen?'; -$_lang["confirm_publish"] = '\n\nAls u deze Pagina nu publiceert, dan zal eventuele data van deze publicatie verloren gaan. Als u data t.a.v. (geen) publicatie wilt instellen of behouden, bewerk dan het bestand via de optie \'bewerken\'.\n\nDoorgaan?'; -$_lang["confirm_remove_locks"] = 'Soms sluiten Gebruikers hun browservenster gedurende het bewerken van Pagina\'s, Templates, Snippets of parsers. Het gevolg hiervan is dat het item waaraan ze aan het werken waren, geblokkeerd worden voor andere gebruikers. Door op OK te drukken worden alle blokkeringen opgeheven.\n\nDoorgaan?'; -$_lang["confirm_reset_sort_order"] = 'Weet u zeker dat u de \"sorteervolgorde/index\" van alle vermelde elementen naar 0 wilt resetten?'; -$_lang["confirm_resource_duplicate"] = 'Weet u zeker dat u deze Pagina wilt dupliceren?\nSubmappen en Pagina\'s zullen ook gedupliceerd worden.\n\n NB: Externe gegevens (bijv. keywords, aangepaste Template Variabelen, enz...) worden niet gedupliceerd.'; -$_lang["confirm_setting_language_change"] = 'U heeft de standaard waarde gewijzigd en zal de wijzigingen verliezen. Doorgaan?'; -$_lang["confirm_unblock"] = 'Weet u zeker dat u voor deze Gebruiker de blokkering wilt opheffen?'; -$_lang["confirm_undelete"] = '\n\nVan alle Subpagina\'s die gelijktijdig met deze Pagina verwijderd zijn, zal de verwijdering ongedaan worden gemaakt! Alle Subpagina\'s die eerder verwijderd zijn zullen verwijderd blijven.'; -$_lang["confirm_unpublish"] = '\n\nAls u de publicatie van deze Pagina ongedaan wilt maken, dan zal eventuele data van deze publicatie verloren gaan. Als u data van deze publicatie wilt behouden, bewerk dan het bestand met de optie \'bewerken\'.\n\nDoorgaan?'; -$_lang["confirm_unzip_file"] = 'Weet u zeker dat dit bestand uitgepakt moet worden?\n\nBestaande bestanden zullen overschreven worden.'; -$_lang["could_not_find_user"] = 'Gebruiker niet gevonden'; -$_lang["create_folder_here"] = 'Nieuwe Map hier aanmaken'; -$_lang["create_resource_here"] = 'Nieuwe Pagina'; -$_lang["create_resource_title"] = 'Nieuw Element'; -$_lang["create_weblink_here"] = 'Nieuwe Weblink'; -$_lang["createdon"] = 'Datum aangemaakt'; -$_lang["create_new"] = 'Nieuwe aanmaken'; -$_lang["credits"] = 'Dankwoord'; -$_lang["credits_shouts_msg"] = '

          EVO wordt beheerd en bijgehouden op evo.im.

          '; -$_lang["custom_contenttype_message"] = 'Voeg eigen \'content types\' toe. Vul een nieuw type in en klik op de knop \'Toevoegen\' om een nieuw type toe te voegen'; -$_lang["custom_contenttype_title"] = 'Toegevoegde content types'; -$_lang["database_charset"] = 'Database Karakterset'; -$_lang["database_collation"] = 'Database Collatie Karakterset'; -$_lang["database_name"] = 'Database naam'; -$_lang["database_overhead"] = 'Opmerking: Overhead is ongebruikte ruimte gereserveerd door MySQL. Om deze ruimte vrij te maken klikt u op de link in de kolom Overhead van de tabel.'; -$_lang["database_server"] = 'Database server'; -$_lang["database_table_clickbackup"] = 'Backup & download'; -$_lang["database_table_clickhere"] = 'Klik hier'; -$_lang["database_table_datasize"] = 'Bestandsgrootte'; -$_lang["database_table_droptablestatements"] = 'Genereer DROP TABLE commando\'s.'; -$_lang["database_table_effectivesize"] = 'Effectieve grootte'; -$_lang["database_table_indexsize"] = 'Index grootte'; -$_lang["database_table_overhead"] = 'Overhead'; -$_lang["database_table_records"] = 'Rijen'; -$_lang["database_table_tablename"] = 'Tabel naam'; -$_lang["database_table_totals"] = 'Totaal'; -$_lang["database_table_totalsize"] = 'Totale grootte'; -$_lang["database_tables"] = 'Database tabellen'; -$_lang["database_version"] = 'Database versie'; -$_lang["date"] = 'Datum'; -$_lang["datechanged"] = 'Wijzigingsdatum'; -$_lang["datepicker_offset"] = 'Kalender verschil'; -$_lang["datepicker_offset_message"] = 'Het aantal jaar in het verleden dat getoond dient te worden in de kalender.'; -$_lang["datetime_format"] = 'Datum formaat'; -$_lang["datetime_format_message"] = 'Het formaat van de datums in het Content Management Systeem.'; -$_lang["default"] = 'Standaard:'; -$_lang["defaultcache_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard cachebaar te maken.'; -$_lang["defaultcache_title"] = 'Standaard cachebaar'; -$_lang["defaultmenuindex_message"] = 'Kies \'Ja\' om automatisch verhogen van de menu-index standaard te maken.'; -$_lang["defaultmenuindex_title"] = 'Standaard menu indexering'; -$_lang["defaultpublish_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard te publiceren.'; -$_lang["defaultpublish_title"] = 'Standaard gepubliceerd'; -$_lang["defaultsearch_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard doorzoekbaar te maken.'; -$_lang["defaultsearch_title"] = 'Standaard doorzoekbaar'; -$_lang["defaulttemplate_message"] = 'Kies hier de standaard Template voor nieuwe Pagina\'s. In de Pagina-editor kunt u eventueel een andere Template kiezen; de keuze die u hier maakt bepaalt louter welke template standaard ingesteld staat.'; -$_lang["defaulttemplate_title"] = 'Standaard template'; -$_lang["defaulttemplate_logic_title"] = 'Automatisch Template toewijzen'; -$_lang["defaulttemplate_logic_general_message"] = 'Nieuwe pagina\'s zullen de volgende template hebben, en terugvallen op hogere niveau\'s:'; -$_lang["defaulttemplate_logic_system_message"] = 'Systeem: Systeem Standaard Template.'; -$_lang["defaulttemplate_logic_parent_message"] = 'Onderliggend: dezelfde template als de onderliggende map.'; -$_lang["defaulttemplate_logic_sibling_message"] = 'Zelfde niveau: dezelfde template als andere pagina\'s in de zelfde map.'; -$_lang["delete"] = 'Verwijderen'; -$_lang["delete_resource"] = 'Verwijder Pagina'; -$_lang["delete_tags"] = 'Tags verwijderen'; -$_lang["deleting_file"] = 'Verwijderen bestand `%s`: '; -$_lang["description"] = 'Beschrijving'; -$_lang["deselect_keywords"] = 'Zoekwoorden opschonen'; -$_lang["deselect_metatags"] = 'Verwijder \'META tags\''; -$_lang["disabled"] = 'Uitgeschakeld'; -$_lang["doc_data_title"] = 'Paginadata weergeven'; -$_lang["documentation"] = 'Documentatie'; -$_lang["duplicate"] = 'Dupliceren'; -$_lang["duplicate_alias_found"] = 'Pagina \'%s\' heeft de alias \'%s\' al in gebruik. Kies een unieke alias voor deze Pagina.'; -$_lang["duplicate_alias_message"] = 'Kies \'Ja\' om dubbele aliassen toe te staan wanneer een Pagina wordt opgeslagen. NB: Deze optie kan niet worden gebruikt in combinatie met \'Zoekmachine vriendelijke URL\'s\'.'; -$_lang["duplicate_alias_title"] = 'Dubbele aliassen toestaan'; -$_lang["duplicate_name_found_general"] = 'Er is al een %s genaamd \'%s\'. Geef a.u.b. een unieke naam op.'; -$_lang["duplicate_name_found_module"] = 'Er is al een Module genaamd \'%s\'. Geef a.u.b. een unieke naam op.'; -$_lang["duplicated_el_suffix"] = 'Dupliceer'; -$_lang["edit"] = 'Bewerk'; -$_lang["edit_resource"] = 'Bewerk Pagina'; -$_lang["edit_resource_title"] = 'Maak/wijzig Pagina'; -$_lang["edit_settings"] = 'Configuratie'; -$_lang["editedon"] = 'Datum wijziging'; -$_lang["editing_file"] = 'Bewerkt bestand: '; -$_lang["editor_css_path_message"] = 'Geef het pad op naar het CSS-bestand dat u wilt gebruiken binnen de teksteditor. De beste manier om dit pad op te geven is vanaf de \'root\' (basismap) van de server, bijvoorbeeld: /assets/site/style.css. Laat dit veld leeg indien u geen CSS-bestand wilt gebruiken in de teksteditor.'; -$_lang["editor_css_path_title"] = 'Pad naar CSS-bestand'; -$_lang["element"] = 'Element'; -$_lang["element_categories"] = 'Gecombineerde weergave'; -$_lang["element_filter_msg"] = 'Zoek in lijst'; -$_lang["element_management"] = 'Elementen beheren'; -$_lang["element_name"] = 'Element naam'; -$_lang["element_selector_msg"] = 'Selecteer de Element(en) uit onderstaande lijst en klik op de knop \'Toevoegen\'.'; -$_lang["element_selector_title"] = 'Selecteer een Element'; -$_lang["elements"] = 'Elementen'; -$_lang["email"] = 'E-mail adres'; -$_lang["email_sent"] = 'E-mail verzonden'; -$_lang["emailsender_message"] = 'Het e-mailadres van de beheerder van deze site. Dit e-mailadres zal worden gebruikt voor systeem notificaties ed.'; -$_lang["emailsender_title"] = 'E-mail adres'; -$_lang["emailsubject_default"] = 'Uw inloggegevens'; -$_lang["emailsubject_message"] = 'Specificeer het onderwerp van de aanmeldings e-mail.'; -$_lang["emailsubject_title"] = 'Onderwerp e-mail'; -$_lang["empty_folder"] = 'Deze Map is leeg'; -$_lang["empty_recycle_bin"] = 'Prullenbak leegmaken'; -$_lang["empty_recycle_bin_empty"] = 'Er zijn geen verwijderde Pagina\'s om permanent te verwijderen.'; -$_lang["enable_resource"] = 'Elementen inschakelen'; -$_lang["enable_sharedparams"] = 'Delen van parameters inschakelen'; -$_lang["enable_sharedparams_msg"] = 'NB: Bovenstaande \'Globally Unique ID (GUID)\' wordt gebruikt om deze Module en de gedeelde parameters uniek te identificeren. De GUID wordt ook gebruikt om een link te creëeren tussen de Module en Plug-ins of Snippets die de gedeelde parameters gebruiken. '; -$_lang["enabled"] = 'Ingeschakeld'; -$_lang["error"] = 'Fout'; -$_lang["error_sending_email"] = 'Fout bij verzenden e-mail'; -$_lang["errorpage_message"] = 'Vul hier een gepubliceerde en publiek toegankelijke Pagina ID in waar u Gebruikers naar wilt doorsturen als ze een niet-bestaande Pagina willen bekijken.'; -$_lang["errorpage_title"] = 'Fout pagina'; -$_lang["event_id"] = 'Gebeurtenis (event) Id'; -$_lang["eventlog"] = 'Logboek (gebeurtenissen)'; -$_lang["eventlog_msg"] = 'In het logboek voor gebeurtenissen worden informatie, waarschuwingen en foutmeldingen opgeslagen van het \'Content Management Systeem\'. De kolom \'bron\' geeft het onderdeel van het \'Content Management Systeem\' waarop het bericht betrekking heeft.'; -$_lang["eventlog_viewer"] = 'Systeem gebeurtenissen'; -$_lang["everybody"] = 'Iedereen'; -$_lang["existing_category"] = 'Bestaande categorie'; -$_lang["expand_tree"] = 'Website boomstructuur uitklappen'; -$_lang["export_site"] = 'Exporteer Website'; -$_lang["export_site_cacheable"] = 'Ook niet-cachebare bestanden:'; -$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; -$_lang["export_site_failed"] = 'Mislukt!'; -$_lang["export_site_failed_no_open"] = 'Kan bestand niet openen: '; -$_lang["export_site_failed_no_retrieve"] = 'Kan Pagina niet ophalen.'; -$_lang["export_site_failed_no_write"] = 'Kan niet naar bestand schrijven.'; -$_lang["export_site_html"] = 'Exporteer website naar HTML'; -$_lang["export_site_maxtime"] = 'Maximale export tijd:'; -$_lang["export_site_maxtime_message"] = 'Specificeer het aantal seconden dat EVO mag gebruiken om de site te exporteren (overschrijven van PHP-instellingen). Voer 0 in voor onbeperkte tijd. Let op, het instellen van 0 of een heel hoog aantal kan vreemde dingen doen op uw server en wordt niet aanbevolen.'; -$_lang["export_site_message"] = '

          Gebruik dit om de hele site te exporteren naar statische HTML-bestanden. Houd er echter rekening mee dat u in dat geval veel van de EVO functionaliteit verliest:

          • Het lezen van pagina\'s op de geëxporteerde bestanden wordt niet opgenomen.
          • Interactieve fragmenten werkt NIET in geëxporteerde bestanden
          • Alleen gewone resources worden geëxporteerd, webkoppelingen worden niet geëxporteerd.
          • Het exportproces kan mislukken als uw bronnen fragmenten bevatten die doorsturingen bevatten.
          • li>
          • Afhankelijk van hoe u uw bronnen, stylesheets en afbeeldingen hebt geschreven, is het ontwerp van uw site mogelijk beschadigd. Om dit op te lossen, bewaart/verplaats je de geëxporteerde bestanden naar dezelfde map waar het hoofdindexbestand EVO index.php zich bevindt.

          Vul het formulier in en druk op \'Exporteren\' om het exporteren te starten werkwijze. De gecreëerde bestanden worden opgeslagen in de map/assets/export, waarbij de URL-aliassen van Resources worden gebruikt als bestandsnamen, indien mogelijk. Tijdens het exporteren van uw site is het het beste om het EVO configuratie tem \'Friendly URL aliases\' in te stellen op \'yes\'. Afhankelijk van de grootte van uw site kan het exporteren even duren.

          Bestaande bestanden worden overschreven door de nieuwe bestanden als hun namen identiek zijn!

          '; -$_lang["export_site_numberdocs"] = '

          %s Pagina\'s gevonden om te exporteren ...

          '; -$_lang["export_site_prefix"] = 'Bestand voorvoegsel:'; -$_lang["export_site_start"] = 'Start exporteren'; -$_lang["export_site_success"] = 'Gelukt!'; -$_lang["export_site_success_skip_dir"] = 'Sla deze Map over.'; -$_lang["export_site_success_skip_doc"] = 'Sla deze Pagina over.'; -$_lang["export_site_suffix"] = 'Bestand achtervoegsel:'; -$_lang["export_site_target_unwritable"] = 'De Map waarnaar u wilt exporteren is niet toegankelijk. Verzeker uzelf ervan dat u schrijfrechten in deze Map heeft, en probeer het daarna opnieuw.'; -$_lang["export_site_time"] = 'Exporteren gereed. Het exporteren duurde %s seconden.'; -$_lang["failed_login_message"] = 'Geef het maximum aantal aanmeldpogingen op voordat een Gebruiker geblokkeerd wordt.'; -$_lang["failed_login_title"] = 'Mislukte aanmeldpogingen'; -$_lang["fe_editor_lang_message"] = 'Kies een taal die de editor gebruikt als front-end editor taal.'; -$_lang["fe_editor_lang_title"] = 'Front-end editor taal'; -$_lang["file_delete_file"] = 'Verwijder bestand'; -$_lang["file_delete_folder"] = 'Verwijder Map'; -$_lang["file_deleted"] = 'Gelukt!'; -$_lang["file_download_file"] = 'Bestand downloaden'; -$_lang["file_download_unzip"] = 'Bestand uitpakken'; -$_lang["file_folder_chmod_error"] = 'Geen rechten om machtigingen te wijzigen.'; -$_lang["file_folder_created"] = 'Map is aangemaakt!'; -$_lang["file_folder_deleted"] = 'Map is verwijderd!'; -$_lang["file_folder_not_created"] = 'Kan Map niet aanmaken'; -$_lang["file_folder_not_deleted"] = 'Map kan niet verwijderd worden. Zorg ervoor dat de Map leeg is alvorens deze te verwijderen!'; -$_lang["file_not_deleted"] = 'Mislukt!'; -$_lang["file_not_saved"] = 'Het bestand kan niet worden bewaard. Verzeker uzelf ervan dat u schijfrechten in deze Map heeft!'; -$_lang["file_saved"] = 'Bestand succesvol bewaard!'; -$_lang["file_unzip"] = 'Uitpakken is gelukt!'; -$_lang["file_unzip_fail"] = 'Uitpakken is mislukt!'; -$_lang["filemanager_path_message"] = 'In IIS wordt de instelling document root vaak niet correct ingevuld. Deze wordt door de bestandsbeheerder gebruikt om te bepalen wat u kunt zien. Als u problemen ondervindt bij het gebruik van Bestandsbeheer, zorg er dan voor dat dit pad naar de hoofdmap van uw EVO installatie wijst.'; -$_lang["filemanager_path_title"] = 'Pad naar de bestanden'; -$_lang["files_access_denied"] = 'Toegang geweigerd!'; -$_lang["files_data"] = 'Gegevens'; -$_lang["files_dir_listing"] = 'Bestandenlijst voor:'; -$_lang["files_directories"] = 'Mappen'; -$_lang["files_directory_is_empty"] = 'Deze map is leeg'; -$_lang["files_dirwritable"] = 'Map schrijfbaar?'; -$_lang["files_editfile"] = 'Bestand bewerken'; -$_lang["files_file_type"] = 'Bestandstype: '; -$_lang["files_filename"] = 'Bestandsnaam'; -$_lang["files_fileoptions"] = 'Opties'; -$_lang["files_files"] = 'Bestanden'; -$_lang["files_filesize"] = 'Bestandsgrootte'; -$_lang["files_filetype_notok"] = 'Het uploaden van dergelijke bestanden is niet toegestaan!'; -$_lang["files_management"] = 'Bestandsbeheer'; -$_lang["files_management_no_permission"] = 'Je hebt niet genoeg rechten om deze bestanden te bekijken of te bewerken. Vraag de beheerder toegang voor %s.'; -$_lang["files_modified"] = 'Gewijzigd'; -$_lang["files_top_level"] = 'Naar het hoogste niveau'; -$_lang["files_up_level"] = 'Een niveau omhoog'; -$_lang["files_upload_copyfailed"] = 'Het bestand kon niet naar de gewenste Map gekopieerd worden - uploaden mislukt!'; -$_lang["files_upload_error"] = 'Fout'; -$_lang["files_upload_error0"] = 'Er was een probleem bij het uploaden.'; -$_lang["files_upload_error1"] = 'Het bestand dat u probeert te uploaden is te groot.'; -$_lang["files_upload_error2"] = 'Het bestand dat u probeert te uploaden is te groot.'; -$_lang["files_upload_error3"] = 'Het bestand dat u probeert te uploaden is slechts gedeeltelijk geupload.'; -$_lang["files_upload_error4"] = 'Selecteer een bestand om te uploaden.'; -$_lang["files_upload_error5"] = 'Er was een probleem bij het uploaden.'; -$_lang["files_upload_inhibited_msg"] = 'Upload optie niet toegelaten - controleer of uploaden ondersteund wordt en of de Map voor PHP schrijfbaar is.'; -$_lang["files_upload_ok"] = 'Het uploaden van het bestand is succesvol verlopen!'; -$_lang["files_upload_permissions_error"] = 'Mogelijk rechten probleem - de Map waar u naartoe wilt uploaden heeft schrijfrechten nodig van uw webserver.'; -$_lang["files_uploadfile"] = 'Bestand uploaden'; -$_lang["files_uploadfile_msg"] = 'Selecteer een bestand om te uploaden:'; -$_lang["files_uploading"] = '%s naar %s/ uploaden.'; -$_lang["files_viewfile"] = 'Bestand weergeven'; -$_lang["folder"] = 'Map'; -$_lang["forgot_password_email_fine_print"] = '* De URL hierboven verloopt als u uw wachtwoord verandert of na vandaag.'; -$_lang["forgot_password_email_instructions"] = 'Daar kunt u uw wachtwoord wijzigen via de menu-optie Mijn Profiel.'; -$_lang["forgot_password_email_intro"] = 'Er is een verzoek gedaan om het wachtwoord van uw account te wijzigen.'; -$_lang["forgot_password_email_link"] = 'Klik hier om het proces af te ronden.'; -$_lang["forgot_your_password"] = 'Wachtwoord vergeten?'; -$_lang["friday"] = 'Vrijdag'; -$_lang["friendly_alias_message"] = 'Wanneer \'Friendly URLs\' is ingeschakeld wordt er een pagina URL gebruikt in plaats van het pagina ID. Dit wordt voor zoekoptimalisatie aangeraden.'; -$_lang["friendly_alias_title"] = 'Gebruik zoekmachine vriendelijke URL\'s'; -$_lang["friendlyurls_message"] = 'Gebruik zoekmachine vriendelijke URL\'s op Apache webservers met mod_rewrite of IIS met externe Plug-ins. Zie voor meer informatie het bij de distributie toegevoegde .htaccess bestand.'; -$_lang["friendlyurls_title"] = 'Zoekmachine vriendelijke URL\'s'; -$_lang["friendlyurlsprefix_message"] = 'Een voorvoegsel van \'pagina\' zorgt ervoor dat de normale URL /index.php?id=2 naar de zoekmachine vriendelijke URL /pagina2.html wordt omgezet (ervan uitgaande dat het achtervoegsel op .html staat ingesteld!).'; -$_lang["friendlyurlsprefix_title"] = 'Voorvoegsel zoekmachine vriendelijke URL\'s'; -$_lang["friendlyurlsuffix_message"] = 'Elk achtervoegsel die u invoert zal werken, inclusief een leeg achtervoegsel. Bijvoorbeeld \'.html\' zorgt ervoor dat er achter alle zoekmachine vriendelijke URL\'s \'.html\' wordt toegevoegd.'; -$_lang["friendlyurlsuffix_title"] = 'Achtervoegsel zoekmachine vriendelijke URL\'s'; -$_lang["functionnotimpl"] = 'Sorry!'; -$_lang["functionnotimpl_message"] = 'Deze functie is nog niet ontwikkeld.'; -$_lang["further_info"] = 'Meer informatie'; -$_lang["global_tabs"] = 'Algemene tabbladen'; -$_lang["go"] = 'Start'; -$_lang["group_access_permissions"] = 'Groepstoegang'; -$_lang['group_tvs'] = 'TV groep'; -$_lang["guid"] = 'GUID'; -$_lang["help"] = 'Help'; -$_lang["help_msg"] = '

          U kunt ondersteuning verkrijgen door de EVO-forums te bezoeken of bekijk de EVO documentatie site.

          '; -$_lang["help_title"] = 'Help'; -$_lang["hide_tree"] = 'Website boomstructuur verbergen'; -$_lang["home"] = 'Start'; -$_lang["htmlsnippet"] = 'Chunk'; -$_lang["htmlsnippets"] = 'Chunks'; -$_lang["htmlsnippet_desc"] = 'Beschrijving'; -$_lang["htmlsnippet_management_msg"] = 'Hier kunt u Chunks toevoegen en bewerken.'; -$_lang["htmlsnippet_msg"] = 'Chunk toevoegen of bewerken. Denk eraan, Chunks zijn stukjes HTML code en kunnen geen PHP code bevatten.'; -$_lang["htmlsnippet_name"] = 'Naam Chunk'; -$_lang["htmlsnippet_title"] = 'Maak/wijzig Chunk'; -$_lang["icon"] = 'Icoon'; -$_lang["icon_description"] = 'CSS class b.v. \'fa fa-star\''; -$_lang["id"] = 'ID'; -$_lang["illegal_parent_child"] = 'Hoofdpagina toekenning:\n\nPagina is een kind van de geselecteerde Pagina.'; -$_lang["illegal_parent_self"] = 'Hoofdpagina toekenning::\n\nDe geselecteerde Pagina kan niet zijn eigen Hoofdpagina zijn.'; -$_lang["images_management"] = 'Beheer afbeeldingen'; -$_lang["import_files_found"] = '%s Pagina\'s gevonden om te importeren...'; -$_lang["import_params"] = 'Gedeelde Module parameters importeren'; -$_lang["import_params_msg"] = 'De parameters en instellingen van een Module kunnen worden geïmporteerd door de naam van de Module te selecteren uit het bovenstaande menu. NB: Modules verschijnen in het menu wanneer de Module is ingesteld voor het \'delen van parameters\' en wanneer bij de Module is opgegeven dat de Module afhankelijk is van deze Snippet/Plug-in.'; -$_lang["import_parent_resource"] = 'Hoofdpagina:'; -$_lang["import_site"] = 'Importeer Website'; -$_lang["import_site_failed"] = 'Fout!'; -$_lang["import_site_failed_db_error"] = 'Een database fout trad op tijdens het klonen van de Pagina: '; -$_lang["import_site_failed_no_open_dir"] = 'Kon de Map niet openen: '; -$_lang["import_site_failed_no_retrieve_file"] = 'Kon bestand niet ophalen: '; -$_lang["import_site_html"] = 'Importeer website vanuit HTML'; -$_lang["import_site_importing_document"] = 'Bestand importeren %s '; -$_lang["import_site_maxtime"] = 'Maximum tijd voor importeren:'; -$_lang["import_site_maxtime_message"] = 'Hier kunt u de maximale tijd specificeren die het Content Management Systeem mag gebruiken om de website te importeren (dit heeft voorrang op de PHP instellingen). Gebruik 0 voor \'oneindige\' tijd. Let op: door 0 of een erg lange tijd in te stellen kunnen er vreemde dingen gebeuren met uw server en wordt derhalve niet aanbevolen.'; -$_lang["import_site_message"] = 'Importeer een volledige HTML website naar uw database. Let op: De bestanden die geïmporteerd moeten worden moeten in de \'assets/import\' Map geplaatst worden.

          Vul het formulier in en kies \'Importeer\' om het process te starten. De geïmporteerde bestanden worden in de geselecteerde locatie opgeslagen waarbij (indien mogelijk) gebruik gemaakt wordt van de bestandsnamen voor Pagina aliassen waar mogelijk en de Paginatitel tag voor de Paginatitel.'; -$_lang["import_site_skip"] = 'Overgeslagen!'; -$_lang["import_site_start"] = 'Start importeren'; -$_lang["import_site_success"] = 'OK!'; -$_lang["import_site_time"] = 'Importeren gereed. Het importeren duurde %s seconden.'; -$_lang["inbox"] = 'Inbox'; -$_lang["info"] = 'Info'; -$_lang["information"] = 'Informatie'; -$_lang["inline"] = 'Geïntegreerd'; -$_lang["insert"] = 'Invoegen'; -$_lang["maxImageWidth"] = 'Maximum afbeelding breedte'; -$_lang["maxImageHeight"] = 'Maximum afbeelding hoogte'; -$_lang["thumbWidth"] = 'Maximum thumbnail breedte'; -$_lang["thumbHeight"] = 'Maximum thumbnail hoogte'; -$_lang["thumbsDir"] = 'Thumbnail locatie'; -$_lang["jpegQuality"] = 'JPEG compressie'; -$_lang["denyZipDownload"] = 'Zip bestanden downloaden uitschakelen'; -$_lang["denyExtensionRename"] = 'Uitschakelen hernoemen van bestandsextenties'; -$_lang["maxImageWidth_message"] = 'Bij het uploaden van een afbeelding met een te grootte resolutie wordt deze automatisch verkleind. Stel 0 in om dit te vermijden.'; -$_lang["maxImageHeight_message"] = 'Bij het uploaden van een afbeelding met een te grootte resolutie wordt deze automatisch verkleind. Stel 0 in om dit te vermijden.'; -$_lang["thumbWidth_message"] = 'Maximum thumbnail breedte.'; -$_lang["thumbHeight_message"] = 'Maximum thumbnail hoogte.'; -$_lang["thumbsDir_message"] = 'De naam van de map (preview).'; -$_lang["jpegQuality_message"] = 'JPEG compressie kwaliteit van thumbnails en verschaalde afbeeldingen'; -$_lang["showHiddenFiles"] = 'Toon verborgen bestanden in de Bestandsbrowser'; -$_lang["keyword"] = 'Keyword'; -$_lang["keywords"] = 'Keywords (sleutelwoorden)'; -$_lang["keywords_intro"] = 'Een keyword kan worden veranderd door in het invulveld naast het keyword de nieuwe waarde op te geven. Vink \'verwijder keyword\' aan om een keyword te verwijderen. Let erop dat verwijderen voorrang heeft op bewerken.'; -$_lang["language_message"] = 'Selecteer de taal voor de Manager.'; -$_lang["language_title"] = 'Manager taalkeuze'; -$_lang["last_update"] = 'Laatste update'; -$_lang["launch_site"] = 'Website bekijken'; -$_lang["license"] = 'Licentie'; -$_lang["link_attributes"] = 'Link attributen'; -$_lang["link_attributes_help"] = 'Hier kunt u attributen opgeven voor de link naar deze Pagina, zoals target="_blank" of rel="external".'; -$_lang["list_mode"] = 'Lijst weergave aan/uit - geeft alle rijen in de tabel weer.'; -$_lang["loading_doc_tree"] = 'Website boomstructuur wordt geladen...'; -$_lang["loading_menu"] = 'Menu wordt geladen...'; -$_lang["loading_page"] = 'Even geduld, de pagina wordt geladen..'; -$_lang["localtime"] = 'Lokale tijd'; -$_lang["lock_htmlsnippet"] = 'Blokkeer Chunk wijzigingen.'; -$_lang["lock_htmlsnippet_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Chunk wijzigen.'; -$_lang["lock_module"] = 'Blokkeer Module wijzigingen.'; -$_lang["lock_module_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Module bewerken.'; -$_lang["lock_msg"] = '%s bewerkt nu %s. Bewerking is niet mogelijk totdat deze Gebruiker klaar is.'; -$_lang["lock_plugin"] = 'Blokkeer Plug-in wijzigingen.'; -$_lang["lock_plugin_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Plug-in wijzigen.'; -$_lang["lock_settings_msg"] = '%s is deze instellingen aan het bewerken. Bewerking is niet mogelijk totdat deze Gebruiker klaar is.'; -$_lang["lock_snippet"] = 'Blokkeer Snippet wijzigingen.'; -$_lang["lock_snippet_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Snippet wijzigen.'; -$_lang["lock_template"] = 'Blokkeer Template wijzigingen.'; -$_lang["lock_template_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Template wijzigen.'; -$_lang["lock_tmplvars"] = 'Blokkeer Template Variabele wijzigingen.'; -$_lang["lock_tmplvars_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Template Variabele wijzigen.'; -$_lang["locked"] = 'Geblokkeerd'; -$_lang["login_allowed_days"] = 'Toegestane dagen'; -$_lang["login_allowed_days_message"] = 'Selecteer de dagen dat deze Gebruiker mag inloggen.'; -$_lang["login_allowed_ip"] = 'Toegestane IP Adressen'; -$_lang["login_allowed_ip_message"] = 'Voer de IP adressen in waarop deze Gebruiker zich mag aanmelden. NB: Meerdere IP adressen worden gescheiden met een komma (,)'; -$_lang["login_button"] = 'Aanmelden'; -$_lang["login_cancelled_install_in_progress"] = 'Installatie / update van deze website is momenteel in gang gezet. Probeer het a.u.b. nogmaals over een paar minuten!'; -$_lang["login_cancelled_site_was_updated"] = 'Installatie / update op deze website is uitgevoerd, meld u a.u.b. nogmaals aan!'; -$_lang["login_captcha_message"] = ' De beheerder heeft de Captcha validatie ingeschakeld. Dit betekent dat u deze beveiligingscode hier moet ingeven.\n\nIndien de code slecht leesbaar is, kan u op de code zelf klikken om een nieuwe code te laten aanmaken.'; -$_lang["login_homepage"] = 'Login Startpagina'; -$_lang["login_homepage_message"] = 'Voer de ID in van de Pagina waarnaar Gebruikers worden verwezen als ze aangemeld zijn. NB: Zorg ervoor dat de ID dat u invoert een bestaand, gepubliceerd en voor deze Gebruiker toegankelijke Pagina is!'; -$_lang["login_message"] = 'Om Evolution te gebruiken dient u zich eerst aan te melden. Let op: hierbij wordt onderscheid gemaakt tussen hoofd- en kleine letters!'; -$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; -$_lang["logout"] = 'Afmelden'; -$_lang["long_title"] = 'Uitgebreide titel'; -$_lang["mail_check_timeperiod_message"] = 'Hoe vaak in het Content Management Systeem gecontroleerd wordt op nieuwe berichten, in seconden.'; -$_lang["mail_check_timeperiod_title"] = 'Controleer e-mail tijdsinterval'; -$_lang["manage_depends"] = 'Beheer afhankelijkheden'; -$_lang["manage_files"] = 'Bestandsbeheer'; -$_lang["manage_htmlsnippets"] = 'Chunks'; -$_lang["manage_metatags"] = 'Beheer META tags en keywords'; -$_lang["manage_modules"] = 'Modulebeheer'; -$_lang["manage_plugins"] = 'Plug-ins'; -$_lang["manage_snippets"] = 'Snippets'; -$_lang["manage_templates"] = 'Templates'; -$_lang["manage_documents"] = 'Documenten'; -$_lang["manager"] = 'Content Management Systeem'; -$_lang["manager_lockout_message"] = 'U bent momenteel aangemeld bij het Content Management Systeem. Als u uw sessie wilt sluiten, klik dan a.u.b. op de knop "Afmelden".

          Wilt u naar uw start- of homepage klik dan op de knop "Start".'; -$_lang["manager_permissions"] = 'Toegangsbeheer'; -$_lang["manager_theme"] = 'Manager thema'; -$_lang["manager_theme_message"] = 'Selecteer een thema voor het Content Management Systeem.'; -$_lang["messages"] = 'Berichten'; -$_lang["messages_all"] = 'Iedereen'; -$_lang["messages_compose"] = 'Bericht opstellen'; -$_lang["messages_forward"] = 'Doorsturen'; -$_lang["messages_from"] = 'Van'; -$_lang["messages_group"] = 'Een groep'; -$_lang["messages_inbox"] = 'Inbox'; -$_lang["messages_message"] = 'Bericht'; -$_lang["messages_no_messages"] = 'Er zijn geen berichten in de Inbox.'; -$_lang["messages_not_allowed_to_read"] = 'U bent niet bevoegd om dit bericht te lezen!'; -$_lang["messages_private"] = 'Privé'; -$_lang["messages_read_message"] = 'Bericht lezen'; -$_lang["messages_reply"] = 'Beantwoord'; -$_lang["messages_select_group"] = 'Selecteer een groep'; -$_lang["messages_select_user"] = 'Selecteer een Gebruiker'; -$_lang["messages_send"] = 'Verzenden'; -$_lang["messages_send_to"] = 'Verzend aan'; -$_lang["messages_sent"] = 'Verstuurd op'; -$_lang["messages_subject"] = 'Onderwerp'; -$_lang["messages_system_user"] = '[Systeem]'; -$_lang["messages_title"] = 'Berichten'; -$_lang["messages_user"] = 'Een Gebruiker'; -$_lang["meta_keywords"] = 'META keywords'; -$_lang["metatag_intro"] = 'Op deze Pagina kunt u \'META tags\' toevoegen, verwijderen en bewerken. De \'META tags\' kunt u aan Pagina\'s toevoegen op de META keywords tab bij het bewerken van een Pagina. Vul een naam en een waarde in voor een nieuwe tag en klik op de \'Tag toevoegen\' knop om een nieuwe \'tag\' toe te voegen. Klik op de naam van een \'tag\' om deze te bewerken.'; -$_lang["metatag_notice"] = 'Misschien wilt u een HTML Reference Guide raadplegen voor meer informatie. Dit is geen complete lijst van mogelijke Meta Tags.'; -$_lang["metatags"] = 'META tags'; -$_lang["mgr_access_permissions"] = 'Content Management Systeem toegangsbeheer'; -$_lang["mgr_login_start"] = 'Content Management Systeem Login Startpagina'; -$_lang["mgr_login_start_message"] = 'Geef de ID van de Pagina dat wordt getoond nadat een Gebruiker is ingelogd. NB: Let erop dat de ID bestaat, dat de Pagina gepubliceerd is en dat de Pagina toegankelijk is voor de Gebruiker!'; -$_lang["mgrlog_action"] = 'Handeling'; -$_lang["mgrlog_actionid"] = 'Handeling ID'; -$_lang["mgrlog_anyall"] = 'Enkele/Alles'; -$_lang["mgrlog_datecheckfalse"] = 'checkdate() retourneerde \'false\'.'; -$_lang["mgrlog_datefr"] = 'Datum van'; -$_lang["mgrlog_dateinvalid"] = 'Onjuiste datumindeling.'; -$_lang["mgrlog_dateto"] = 'Datum tot'; -$_lang["mgrlog_emptysrch"] = 'Uw zoekopdracht gaf geen resultaten (d.w.z. geen overeenkomstige loggegevens gevonden).'; -$_lang["mgrlog_field"] = 'Veld'; -$_lang["mgrlog_itemid"] = 'Item ID'; -$_lang["mgrlog_itemname"] = 'Item naam'; -$_lang["mgrlog_msg"] = 'Bericht'; -$_lang["mgrlog_noquery"] = 'Nog geen zoekopdracht opgegeven.'; -$_lang["mgrlog_qresults"] = 'Zoekresultaten'; -$_lang["mgrlog_query"] = 'Zoek loggegevens'; -$_lang["mgrlog_query_msg"] = 'Maak a.u.b. een selectie om de logboeken te bekijken. U kunt log regels op datum selecteren, maar let erop dat de ingegeven einddatums niet inbegrepen zijn - om elke log regel te selecteren van 01-01-2004, vul bij \'datum van\' 01-01-2004 in en bij \'datum tot\' 02-01-2004.

          Melding en aktie zijn meestal hetzelfde. Als u een specifieke melding zoekt, kunt u het beste de aktie op \'Enkele/Alles\' zetten.'; -$_lang["mgrlog_results"] = 'Aantal gevonden'; -$_lang["mgrlog_searchlogs"] = 'Logboeken doorzoeken'; -$_lang["mgrlog_sortinst"] = 'Sorteer de tabel door op de kolom-kop te klikken. Als de logboeken te groot worden, leeg de logfile om alle huidige loggegevens te wissen. Dit kan niet ongedaan gemaakt worden!'; -$_lang["mgrlog_time"] = 'Tijd'; -$_lang["mgrlog_user"] = 'Gebruiker'; -$_lang["mgrlog_username"] = 'Gebruikersnaam'; -$_lang["mgrlog_value"] = 'waarde'; -$_lang["mgrlog_view"] = 'Bekijk Content Management Systeem logboeken'; -$_lang["module_code"] = 'Module code (php)'; -$_lang["module_config"] = 'Module configuratie'; -$_lang["module_desc"] = 'Beschrijving'; -$_lang["module_disabled"] = 'Module uitgeschakeld'; -$_lang["module_edit_click_title"] = 'Klik hier om de Module te bewerken'; -$_lang["module_group_access_msg"] = 'Selecteer de Gebruikersgroepen die deze Module binnen het Content Management Systeem mogen uitvoeren.'; -$_lang["module_management"] = 'Modulebeheer'; -$_lang["module_management_msg"] = 'Hier kunt u Modules toevoegen, bewerken en uitvoeren.
          Klik op het icoon van de Module om de Module uit te voeren. Klik op de naam van de Module om de Module te bewerken.'; -$_lang["module_msg"] = 'Module toevoegen of bewerken. Een Module is een verzameling van Elementen zoals Plug-ins, Snippets, etc.'; -$_lang["module_name"] = 'Modulenaam'; -$_lang["module_resource_msg"] = 'Elementen waarvan deze Module afhankelijk is kunnen hier worden aangepast. Kies de knop \'toevoegen\' hieronder om een Element toe te voegen.'; -$_lang["module_resource_title"] = 'Module afhankelijkheden'; -$_lang["module_title"] = 'Modules bewerken/toevoegen'; -$_lang["module_viewdepend_msg"] = 'Een Module is afhankelijk van bepaalde Elementen. Klik op de knop \'Beheer afhankelijkheden\' om deze te bewerken.'; -$_lang["modules"] = 'Modules'; -$_lang["modx_news"] = 'Nieuwsmeldingen'; -$_lang["modx_news_tab"] = 'EVO Nieuws'; -$_lang["modx_news_title"] = 'EVO Nieuws'; -$_lang["modx_security_notices"] = 'Beveiligingswaarschuwingen'; -$_lang["modx_version"] = 'EVO versie'; -$_lang["monday"] = 'Maandag'; -$_lang["move"] = 'Verplaatsen'; -$_lang["move_resource"] = 'Verplaats Pagina'; -$_lang["move_resource_message"] = 'Verplaats een Pagina inclusief Subpagina\'s door een nieuw Hoofdpagina in de Website boomstructuur te selecteren. Als de geselecteerde Pagina geen Map is, wordt er een Map van gemaakt. Selecteer een nieuw Hoofdpagina in de Website boomstructuur.'; -$_lang["move_resource_new_parent"] = 'Selecteer een nieuwe Hoofdpagina in de Website boomstructuur.'; -$_lang["move_resource_title"] = 'Pagina verplaatsen'; -$_lang["name"] = 'Naam'; -$_lang["new_category"] = 'Nieuwe categorie'; -$_lang["new_file_permissions_message"] = 'Bij het uploaden van een nieuw bestand in het Bestandsbeheer, zal het Bestandsbeheer proberen de bestandsrechten aan te passen volgens de instellingen die hier zijn opgegeven. Het kan zijn dat dit niet met alle installaties werkt, zoals met IIS, in welk geval u de rechten handmatig moet instellen.'; -$_lang["new_file_permissions_title"] = 'Nieuwe bestandsrechten'; -$_lang["new_folder_permissions_message"] = 'Als u een nieuwe Map aanmaakt in het Bestandsbeheer, zal het Bestandsbeheer proberen de Maprechten aan te passen volgens de instellingen die hier zijn opgegeven. Het kan zijn dat dit niet met alle installaties werkt, zoals met IIS, in welk geval u de rechten handmatig moet instellen.'; -$_lang["new_folder_permissions_title"] = 'Nieuwe map rechten'; -$_lang["new_htmlsnippet"] = 'Nieuwe Chunk toevoegen'; -$_lang["new_keyword"] = 'Voeg een keyword toe:'; -$_lang["new_module"] = 'Nieuwe Module toevoegen'; -$_lang["new_parent"] = 'Nieuwe Hoofdpagina toevoegen'; -$_lang["new_plugin"] = 'Nieuwe Plug-in toevoegen'; -$_lang["new_role"] = 'Nieuwe Rol'; -$_lang["new_snippet"] = 'Nieuwe Snippet toevoegen'; -$_lang["new_template"] = 'Nieuwe Template toevoegen'; -$_lang["new_tmplvars"] = 'Nieuwe Template Variabele toevoegen'; -$_lang["new_user"] = 'Nieuwe Manager gebruiker'; -$_lang["new_web_user"] = 'Nieuwe Webgebruiker toevoegen'; -$_lang["new_resource"] = 'Nieuwe pagina'; -$_lang["no"] = 'Nee'; -$_lang["no_active_users_found"] = 'Geen actieve Gebruikers gevonden.'; -$_lang["no_activity_message"] = 'U heeft nog geen Pagina\'s gemaakt/gewijzigd.'; -$_lang["no_category"] = 'Niet gecategoriseerd'; -$_lang["no_docs_pending_publishing"] = 'Geen Pagina\'s om te publiceren.'; -$_lang["no_docs_pending_pubunpub"] = 'Geen gebeurtenissen gevonden.'; -$_lang["no_docs_pending_unpublishing"] = 'Geen Pagina\'s om publicatie te beëindigen.'; -$_lang["no_edits_creates"] = 'Geen wijzigingen of toevoegingen gevonden.'; -$_lang["no_groups_found"] = 'Geen groepen gevonden.'; -$_lang["no_keywords_found"] = 'Er zijn momenteel geen keywords.'; -$_lang["no_records_found"] = 'Geen resultaten gevonden.'; -$_lang["no_results"] = 'Geen resultaten gevonden.'; -$_lang["nologentries_message"] = 'Voer hier het aantal logresultaten in dat per Pagina in het logboek moet worden weergegeven.'; -$_lang["nologentries_title"] = 'Aantal log resultaten'; -$_lang["nomessages_message"] = 'U kunt hier het aantal berichten instellen dat bij het bekijken van berichten in de inbox moet worden weergegeven.'; -$_lang["nomessages_title"] = 'Aantal berichten'; -$_lang["none"] = 'Geen'; -$_lang["noresults_message"] = 'Het aantal regels dat wordt weergegeven in lijsten met bijvoorbeeld zoekresultaten'; -$_lang["noresults_title"] = 'Aantal regels'; -$_lang["not_deleted"] = 'is niet verwijderd!'; -$_lang["not_set"] = 'Niet ingesteld'; -$_lang["offline"] = 'Offline'; -$_lang["online"] = 'Online'; -$_lang["onlineusers_action"] = 'Handeling'; -$_lang["onlineusers_actionid"] = 'Handeling ID'; -$_lang["onlineusers_ipaddress"] = 'IP adres Gebruiker'; -$_lang["onlineusers_lasthit"] = 'Laatste bezoek'; -$_lang["onlineusers_message"] = 'In deze lijst vindt u de actieve Gebruikers van de laatste 20 minuten (De huidige tijd is '; -$_lang["onlineusers_title"] = 'Gebruikers online'; -$_lang["onlineusers_user"] = 'Gebruiker'; -$_lang["onlineusers_userid"] = 'Gebruikers ID'; -$_lang["optimize_table"] = 'Klik hier om deze tabel te optimaliseren'; -$_lang["page_data_alias"] = 'Alias'; -$_lang["page_data_cacheable"] = 'Cache-baar'; -$_lang["page_data_cacheable_help"] = 'Dit zorgt ervoor dat deze Pagina in de cache opgeslagen kan worden. Zorg dat deze optie niet aangevinkt is als uw Pagina Snippets bevat!'; -$_lang["page_data_cached"] = 'Bron uit cache gehaald:'; -$_lang["page_data_changes"] = 'Veranderingen'; -$_lang["page_data_contentType"] = 'Soort inhoud'; -$_lang["page_data_contentType_help"] = 'Kies de soort van inhoud voor deze Pagina. Bent u hierover onzeker, laat dan de keuze op text/html.'; -$_lang["page_data_created"] = 'Gemaakt'; -$_lang["page_data_edited"] = 'Gewijzigd'; -$_lang["page_data_editor"] = 'Bewerk met de geavanceerde teksteditor'; -$_lang["page_data_folder"] = 'Pagina is een Map'; -$_lang["page_data_general"] = 'Algemeen'; -$_lang["page_data_markup"] = 'Opmaak/structuur'; -$_lang["page_data_mgr_access"] = 'Content Management Systeem toegang'; -$_lang["page_data_notcached"] = 'Deze Pagina is (nog) niet gecached.'; -$_lang["page_data_publishdate"] = 'Publicatiedatum'; -$_lang["page_data_publishdate_help"] = 'Wanneer u een publicatiedatum instelt, wordt de Pagina vanaf deze datum gepubliceerd. Klik op het kalenderpictogram om een datum te selecteren, of op het pictogram ernaast om de publicatiedatum te verwijderen. Dit houdt in dat de Pagina niet automatisch wordt gepubliceerd.'; -$_lang["page_data_published"] = 'Gepubliceerd'; -$_lang["page_data_searchable"] = 'Doorzoekbaar'; -$_lang["page_data_searchable_help"] = 'U kunt deze optie aanvinken om het doorzoeken van de Pagina toe te staan. U kunt het ook voor andere doeleinden gebruiken in uw Snippets.'; -$_lang["page_data_source"] = 'Bron'; -$_lang["page_data_status"] = 'Status'; -$_lang["page_data_template"] = 'Template'; -$_lang["page_data_template_help"] = 'Hier kunt u de Template voor de Pagina selecteren.'; -$_lang["page_data_title"] = 'Pagina gegevens'; -$_lang["page_data_unpublishdate"] = 'Datum einde publicatie'; -$_lang["page_data_unpublishdate_help"] = 'Wanneer u een datum einde publicatie instelt, wordt vanaf deze datum de publicatie beëindigd. Klik op het kalenderpictogram om een datum te selecteren, of op het pictogram ernaast om de datum waarop de publicatie beëindigd wordt, te verwijderen. Dit houdt in dat de publicatie van de Pagina niet automatisch beëindigd wordt.'; -$_lang["page_data_unpublished"] = 'Niet-gepubliceerd'; -$_lang["page_data_web_access"] = 'Webtoegang'; -$_lang["pagetitle"] = 'Titel van de Pagina'; -$_lang["pagination_table_first"] = 'Eerste'; -$_lang["pagination_table_gotopage"] = 'Ga naar Pagina'; -$_lang["pagination_table_last"] = 'Laatste'; -$_lang["paging_first"] = 'eerste'; -$_lang["paging_last"] = 'laatste'; -$_lang["paging_next"] = 'volgende'; -$_lang["paging_prev"] = 'vorige'; -$_lang["paging_showing"] = 'Toon'; -$_lang["paging_to"] = 'tot'; -$_lang["paging_total"] = 'totaal'; -$_lang["parameter"] = 'Parameter'; -$_lang["parse_docblock"] = 'Parse DocBlock'; -$_lang["parse_docblock_msg"] = 'Let op (!): Hersteld de oorspronkelijke naam, configuratie, beschrijving en categorie naar standaard instellingen door het parsen van de broncode.'; -$_lang["password"] = 'Wachtwoord'; -$_lang["password_change_request"] = 'Verzoek wachtwoord wijzigen'; -$_lang["password_gen_gen"] = 'Wachtwoord laten genereren'; -$_lang["password_gen_length"] = 'Het wachtwoord moet minstens 6 karakters lang zijn.'; -$_lang["password_gen_method"] = 'Hoe wilt u het wachtwoord voor deze Gebruiker aanmaken?'; -$_lang["password_gen_specify"] = 'Laat mij het wachtwoord specificeren:'; -$_lang["password_method"] = 'Hoe wilt u deze Gebruiker op de hoogte stellen van het nieuwe wachtwoord?'; -$_lang["password_method_email"] = 'Verstuur het nieuwe wachtwoord via e-mail.'; -$_lang["password_method_screen"] = 'Geef het nieuwe wachtwoord op het beeldscherm weer.'; -$_lang["password_msg"] = 'Het nieuwe wachtwoord voor %s is %s.'; -$_lang["php_version_check"] = 'Je gebruikt PHP versie %s%. Voer een upgrade van uw PHP-installatie uit!'; -$_lang["plugin"] = 'Plug-in'; -$_lang["plugins"] = 'Plugins'; -$_lang["plugin_code"] = 'Plug-in code (php)'; -$_lang["plugin_config"] = 'Plug-in configuratie'; -$_lang["plugin_desc"] = 'Beschrijving'; -$_lang["plugin_disabled"] = 'Plug-in uitgeschakeld'; -$_lang["plugin_event_msg"] = 'Selecteer de gebeurtenissen (events) waar deze Plug-in op moet reageren.'; -$_lang["plugin_management_msg"] = 'Hier kunt u Plug-ins toevoegen of bewerken.'; -$_lang["plugin_msg"] = 'Hier kunt u Plug-ins toevoegen of bewerken. Plug-ins zijn \'ruwe\' PHP instructies die uitgevoerd worden als de geselecteerde systeemgebeurtenissen (events) optreden.'; -$_lang["plugin_name"] = 'Naam Plug-in'; -$_lang["plugin_priority"] = 'Wijzig Plug-in event volgorde'; -$_lang["plugin_priority_instructions"] = 'Om de volgorde van de Plug-ins te veranderen versleep onder elke gebeurtenis (event) de titel. De eerste Plug-in die uitgevoerd dient te worden dient bovenaan te staan.'; -$_lang["plugin_priority_title"] = 'Plug-in uitvoer volgorde'; -$_lang["purge_plugin"] = 'Verwijder verouderde Plug-ins'; -$_lang["plugin_title"] = 'Aanmaken/bewerken Plug-in'; -$_lang["preview"] = 'Voorbeeld'; -$_lang["preview_msg"] = 'Dit is een voorbeeld van uw laatst opgeslagen wijzigingen. Klik hier om uw huidige wijzigingen op te slaan en te vernieuwen.'; -$_lang["preview_resource"] = 'Pagina voorbeeld'; -$_lang["private"] = 'Gesloten'; -$_lang["public"] = 'Open'; -$_lang["publish_date"] = 'Publicatiedatum'; -$_lang["publish_events"] = 'Publiceer gebeurtenissen'; -$_lang["publish_resource"] = 'Publiceer Pagina'; -$_lang["rb_base_dir_message"] = 'Voer het fysieke pad naar de map Bestandsbrowser in. Deze instelling wordt meestal automatisch gegenereerd. Als u IIS echter gebruikt, is het mogelijk dat EVO het pad niet zelfstandig kan bewerken, waardoor de bestandsbrowser een foutmelding geeft.'; -$_lang["rb_base_dir_title"] = 'Pad naar de bestanden'; -$_lang["rb_base_url_message"] = 'Voer de virtuele pad naar de bestanden map in. Deze instelling wordt meestal automatisch gegenereerd. Als u IIS echter gebruikt, is het mogelijk dat EVO de URL niet zelf kan bewerken, waardoor de bestandsbrowser een foutmelding vertoont. In dat geval kunt u hier de URL van de afbeeldingenlijst invoeren.'; -$_lang["rb_base_url_title"] = 'URL naar de bestanden'; -$_lang["rb_message"] = 'Kies \'ja\' om de bestandsbeheer in te schakelen. Met bestandsbeheer is het voor Gebruikers eenvoudig mogelijk om bestanden zoals afbeeldingen, flash en media op de server te plaatsen.'; -$_lang["rb_title"] = 'Bestandsbeheer inschakelen'; -$_lang["rb_webuser_message"] = 'Wilt u de Webgebruikers toestaan de bestanden op de server te beheren? WAARSCHUWING: Door dit toe te staan kunnen Webgebruikers dezelfde bestanden beheren als de website beheerder(s). Gebruik dit alleen voor Webgebruikers die u vertrouwd.'; -$_lang["rb_webuser_title"] = 'Webgebruikers'; -$_lang["recent_docs"] = 'Recente Pagina\'s'; -$_lang["recommend_setting_change_title"] = 'Aan te raden aangepaste instelling '; -$_lang["recommend_setting_change_description"] = 'Uw website is niet geconfigureerd om de HTTP_REFERER te valideren voor inkomende Manager aanvragen. We raden aan deze instelling aan te zetten om CSRF (Cross Site Request Forgery) aanvallen te minimaliseren.'; -$_lang["references"] = 'Referenties'; -$_lang["refresh_cache"] = 'Cache: %s bestanden in cache-map gevonden en %d bestanden verwijderd.

          Nieuwe cache-bestanden worden aangemaakt wanneer Pagina\'s worden opgevraagd.'; -$_lang["refresh_published"] = '%s Pagina\'s zijn gepubliceerd.'; -$_lang["refresh_site"] = 'Cache legen'; -$_lang["refresh_title"] = 'Website vernieuwen'; -$_lang["refresh_tree"] = 'Website boomstructuur vernieuwen'; -$_lang["refresh_unpublished"] = '%s Pagina\'s zijn niet gepubliceerd.'; -$_lang["release_date"] = 'Publicatie datum'; -$_lang["remember_last_tab"] = 'Tabs onthouden'; -$_lang["remember_last_tab_message"] = 'Manager pagina\'s met Tabs laden met de laatst bekeken tab in plaats van standaard de eerst bekeken tab'; -$_lang["remember_username"] = 'Onthoud mij'; -$_lang["remove"] = 'Verwijderen'; -$_lang["remove_date"] = 'Verwijder datum'; -$_lang["remove_locks"] = 'Blokkeringen opheffen'; -$_lang["rename"] = 'Hernoem'; -$_lang["reports"] = 'Rapportage'; -$_lang["report_issues"] = 'Problemen rapporteren'; -$_lang["require_tagname"] = 'Een naam voor de \'tag\' is vereist.'; -$_lang["require_tagvalue"] = 'Een waarde voor de \'tag\' is vereist.'; -$_lang["reserved_name_warning"] = 'U heeft een gereserveerde naam gebruikt.'; -$_lang["reset"] = 'Reset'; -$_lang["reset_failedlogins"] = 'reset'; -$_lang["reset_sort_order"] = 'Herstel sorteer instellingen'; -$_lang["resource"] = 'Pagina'; -$_lang["resource_alias"] = 'Pagina alias'; -$_lang["resource_alias_help"] = 'Hier kunt u voor deze Pagina een alias invoeren. Dit zal de Pagina toegangelijk maken als u gebruik maakt van http://uwsite.nl/alias. Dit werkt alleen als u gebruik maakt van zoekmachine vriendelijke URL\'s.'; -$_lang["resource_content"] = 'Paginainhoud'; -$_lang["resource_description"] = 'Beschrijving'; -$_lang["resource_description_help"] = 'Geef een eventuele beschrijving op van deze Pagina.'; -$_lang["resource_duplicate"] = 'Dupliceer Pagina'; -$_lang["resource_long_title_help"] = 'Geef een langere titel op van deze Pagina. Dit kan handig zijn voor zoekmachines en is misschien ook een betere beschrijving van uw Pagina.'; -$_lang["resource_metatag_help"] = 'Selecteer de \'META tags\' of keywords die u aan de Pagina wilt toekennen. Met de CTRL-toets (cmd in Mac OS) kunnen meerdere META tags worden geselecteerd'; -$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; -$_lang["resource_opt_contentdispo_help"] = 'Gebruik \'Content-Disposition\' om aan te geven hoe de Pagina wordt behandeld door de webbrowser. Gebruik \'Bijlage\' voor separate bestanden.'; -$_lang["resource_opt_emptycache"] = 'Cache leegmaken?'; -$_lang["resource_opt_emptycache_help"] = 'Als dit veld wordt aangevinkt, wordt de cache leeggemaakt nadat u de pagina hebt opgeslagen. Op deze manier zien uw bezoekers geen oudere versie van de pagina.'; -$_lang["resource_opt_folder"] = 'Map?'; -$_lang["resource_opt_folder_help"] = 'U kunt deze optie aanvinken om deze pagina als een map voor andere pagina\'s te gebruiken. U hoeft hier niet te veel aandacht aan te besteden, aangezien Evolution map instellingen over het algemeen automatisch verzorgt.'; -$_lang["resource_opt_menu_index"] = 'Menu index'; -$_lang["resource_opt_menu_index_help"] = 'De menu-index is een veld waarmee u het sorteren van Pagina\'s kunt beïnvloeden, voornamelijk in menu\'s en opsommingen. U kunt het ook voor andere doeleinden gebruiken in uw Snippets.'; -$_lang["resource_opt_menu_title"] = 'Menu titel'; -$_lang["resource_opt_menu_title_help"] = 'De menu titel is een optioneel veld dat gebruikt wordt om een korte titel te tonen in menu Snippet(s) of Modules.'; -$_lang["resource_opt_published"] = 'Gepubliceerd'; -$_lang["resource_opt_published_help"] = 'Vink deze optie aan zodat uw Pagina automatisch gepubliceerd wordt na het opslaan.'; -$_lang["resource_opt_richtext"] = 'Teksteditor gebruiken?'; -$_lang["resource_opt_richtext_help"] = 'Laat dit aangevinkt staan om de teksteditor voor geavanceerde tekstopmaak bij het bewerken Pagina\'s te gebruiken. Als uw Pagina Javascript code of formulieren bevat is het verstandig om deze optie uit te zetten, zodat u in HTML-modus kunt werken. Dit zorgt ervoor dat uw Pagina correct wordt weergegeven.'; -$_lang["resource_opt_show_menu"] = 'Zichtbaar in menu'; -$_lang["resource_opt_show_menu_help"] = 'Gebruikt door een aantal Plug-ins/Modules om deze Pagina niet te tonen in een menu.'; -$_lang["resource_opt_trackvisit_help"] = 'Sla elke bezoeker op deze Pagina op in het logboek.'; -$_lang["resource_overview"] = 'Pagina overzicht'; -$_lang["resource_parent"] = 'Hoofdpagina'; -$_lang["resource_parent_help"] = 'Selecteer een Pagina in de Website boomstructuur om het als Hoofdpagina van deze Pagina in te stellen.'; -$_lang["resource_permissions_error"] = 'Koppel deze Pagina aan tenminste 1 Paginagroep waar u toegang tot heeft.'; -$_lang["resource_setting"] = 'Pagina instellingen'; -$_lang["resource_summary"] = 'Samenvatting (introductietekst)'; -$_lang["resource_summary_help"] = 'Typ een korte beschrijving van de Pagina.'; -$_lang["resource_title"] = 'Titel'; -$_lang["resource_title_help"] = 'U kunt hier de titel van de Pagina opgeven. Vermijdt het gebruik van backslashes in de naam!'; -$_lang["resource_to_be_moved"] = 'De te verplaatsen Pagina'; -$_lang["resource_type"] = 'Resource Type'; -$_lang["resource_type_message"] = 'Verwijzingen naar weblinks Bronnen op internet, inclusief een andere interne bron, een externe pagina of een afbeelding of ander bestand op internet. Webkoppelingen moeten een tekst/html internetmediatype en inline content afhandeling hebben.'; -$_lang["resource_type_weblink"] = 'Weblink'; -$_lang["resource_type_webpage"] = 'Webpagina'; -$_lang["resource_weblink_help"] = 'Typ het adres van het object dat u wilt verwijzen met deze weblink. Als alternatief kunt u deze invoegen via de bestand browser of gebruik het selectie icoon en kies een bron van de site van de paginaboom aan de linker kant.'; -$_lang["resources_in_container"] = 'Pagina\'s in deze Map'; -$_lang["resources_in_container_no"] = 'Deze Map bevat geen Subpagina\'s.'; -$_lang["role"] = 'Rol'; -$_lang["role_about"] = 'Infopagina weergeven'; -$_lang["role_access_persmissions"] = 'Toegangsrechten'; -$_lang["role_actionok"] = '\'Bewerking is voltooid\'-scherm weergeven'; -$_lang["role_assets_images"] = 'Beheer afbeeldingen'; -$_lang["role_assets_files"] = 'Beheer bestanden'; -$_lang["role_bk_manager"] = 'Backupbeheer gebruiken'; -$_lang["role_cache_refresh"] = 'De cache van de website leegmaken'; -$_lang["role_category_manager"] = 'Gebruik de Categorie Manager'; -$_lang["role_change_password"] = 'Wachtwoord wijzigen'; -$_lang["role_change_resourcetype"] = 'Pagina type aanpassen'; -$_lang["role_chunk_management"] = 'Chunk beheer'; -$_lang["role_config_management"] = 'Configuratiebeheer'; -$_lang["role_content_management"] = 'Inhoud beheer'; -$_lang["role_create_chunk"] = 'Nieuwe Chunks maken'; -$_lang["role_create_doc"] = 'Nieuwe Pagina\'s maken'; -$_lang["role_create_plugin"] = 'Nieuwe Plug-ins maken'; -$_lang["role_create_snippet"] = 'Nieuwe Snippets maken'; -$_lang["role_create_template"] = 'Nieuwe website Templates maken'; -$_lang["role_credits"] = 'Dankwoord weergeven'; -$_lang["role_delete_chunk"] = 'Chunks verwijderen'; -$_lang["role_delete_doc"] = 'Pagina\'s verwijderen'; -$_lang["role_delete_eventlog"] = 'Verwijder logboek (events)'; -$_lang["role_delete_module"] = 'Module verwijderen'; -$_lang["role_delete_plugin"] = 'Plug-ins verwijderen'; -$_lang["role_delete_role"] = 'Rollen verwijderen'; -$_lang["role_delete_snippet"] = 'Snippets verwijderen'; -$_lang["role_delete_template"] = 'Templates verwijderen'; -$_lang["role_delete_user"] = 'Verwijder manager gebruikers'; -$_lang["role_delete_web_user"] = 'Webgebruikers verwijderen'; -$_lang["role_edit_chunk"] = 'Chunks bewerken'; -$_lang["role_edit_doc"] = 'Een Pagina bewerken'; -$_lang["role_edit_doc_metatags"] = '\'META tags\' en keywords van Pagina bewerken'; -$_lang["role_edit_module"] = 'Module bewerken'; -$_lang["role_edit_plugin"] = 'Plug-ins bewerken'; -$_lang["role_edit_role"] = 'Rollen bewerken'; -$_lang["role_edit_settings"] = 'Website instellingen veranderen'; -$_lang["role_edit_snippet"] = 'Snippets bewerken'; -$_lang["role_edit_template"] = 'Website Templates bewerken'; -$_lang["role_edit_user"] = 'Bewerk manager gebruikers'; -$_lang["role_edit_web_user"] = 'Webgebruikers bewerken'; -$_lang["role_empty_trash"] = 'Verwijderde Pagina\'s permanent verwijderen'; -$_lang["role_errors"] = 'Waarschuwingsvenster weergeven'; -$_lang["role_eventlog_management"] = 'Logboek beheer (events)'; -$_lang["role_export_static"] = 'Exporteer statische HTML'; -$_lang["role_file_management"] = 'Bestandsbeheer'; -$_lang["role_file_manager"] = 'Gebruik bestandsbeheer (volledige toegang)'; -$_lang["role_frames"] = 'Verzoek om Content Management Systeem venster'; -$_lang["role_help"] = 'Help Pagina\'s weergeven'; -$_lang["role_home"] = 'Verzoek om Content Management Systeem Intropagina'; -$_lang["role_import_static"] = 'Importeer HTML'; -$_lang["role_logout"] = 'Afmelden uit de beheerder'; -$_lang["role_manage_metatags"] = 'Beheer \'META tags\' en keywords'; -$_lang["role_management_msg"] = 'Hier kunt u kiezen welke Rol u wenst te wijzigen.'; -$_lang["role_management_title"] = 'Rollen'; -$_lang["role_messages"] = 'Berichten weergeven/versturen'; -$_lang["role_module_management"] = 'Modulebeheer'; -$_lang["role_name"] = 'Naam Rol'; -$_lang["role_new_module"] = 'Nieuwe Module maken'; -$_lang["role_new_role"] = 'Nieuwe Rollen maken'; -$_lang["role_new_user"] = 'Maak nieuwe manager gebruikers aan'; -$_lang["role_new_web_user"] = 'Webgebruikers toevoegen'; -$_lang["role_plugin_management"] = 'Plug-inbeheer'; -$_lang["role_publish_doc"] = 'Pagina\'s publiceren'; -$_lang["role_remove_locks"] = 'Blokkeringen opheffen'; -$_lang["role_role_management"] = 'Rollen'; -$_lang["role_run_module"] = 'Module uitvoeren'; -$_lang["role_save_chunk"] = 'Chunks opslaan'; -$_lang["role_save_doc"] = 'Pagina\'s opslaan'; -$_lang["role_save_module"] = 'Module opslaan'; -$_lang["role_save_password"] = 'Wachtwoord opslaan'; -$_lang["role_save_plugin"] = 'Plug-ins opslaan'; -$_lang["role_save_role"] = 'Rollen opslaan'; -$_lang["role_save_snippet"] = 'Snippets opslaan'; -$_lang["role_save_template"] = 'Templates opslaan'; -$_lang["role_save_user"] = 'Manager gebruikers opslaan'; -$_lang["role_save_web_user"] = 'Webgebruikers opslaan'; -$_lang["role_snippet_management"] = 'Snippetbeheer'; -$_lang["role_template_management"] = 'Templatebeheer'; -$_lang["role_title"] = 'Rol aanmaken/bewerken'; -$_lang["role_udperms"] = 'Toegangsrechtenbeheer'; -$_lang["role_user_management"] = 'Manager gebruikersbeheer'; -$_lang["role_view_docdata"] = 'Paginagegevens weergeven'; -$_lang["role_view_eventlog"] = 'Bekijk logboek (events)'; -$_lang["role_view_logs"] = 'Systeemlogboek weergeven'; -$_lang["role_view_unpublished"] = 'Bekijk niet gepubliceerde Pagina\'s'; -$_lang["role_web_access_persmissions"] = 'Webtoegangsbeheer'; -$_lang["role_web_user_management"] = 'Webgebruikersbeheer'; -$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'Voer de URL in voor de Nieuws Feed.'; -$_lang["rss_url_news_title"] = 'RSS nieuws feed'; -$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'Voer de URL in voor de beveiligingsfeed.'; -$_lang["rss_url_security_title"] = 'RSS Beveiliging Feed'; -$_lang["run_module"] = 'Module uitvoeren'; -$_lang["saturday"] = 'Zaterdag'; -$_lang["save"] = 'Opslaan'; -$_lang["save_all_changes"] = 'Bewaar alle wijzigingen'; -$_lang["save_tag"] = 'Tag opslaan'; -$_lang["saving"] = 'Bezig met opslaan, een moment geduld a.u.b...'; -$_lang["search"] = 'Zoeken'; -$_lang["search_criteria"] = 'Zoekcriteria'; -$_lang["search_criteria_content"] = 'Op inhoud zoeken'; -$_lang["search_criteria_content_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in de inhoud.'; -$_lang["search_criteria_id"] = 'Op ID zoeken'; -$_lang["search_criteria_id_msg"] = 'Voer de ID van de Pagina in om de Pagina snel te vinden.'; -$_lang["search_criteria_top"] = 'Zoeken in belangrijkste velden'; -$_lang["search_criteria_top_msg"] = 'Pagetitel, Uitgebreide titel, URL, ID'; -$_lang["search_criteria_template_id"] = 'Op template ID zoeken'; -$_lang["search_criteria_template_id_msg"] = 'Zoek alle pagina\'s die de gekozen template gebruikt.'; -$_lang["search_criteria_url_msg"] = 'Zoek pagina met exacte URL.'; -$_lang["search_criteria_longtitle"] = 'Zoek op uitgebreide titel'; -$_lang["search_criteria_longtitle_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in hun uitgebreide titel.'; -$_lang["search_criteria_title"] = 'Op titel zoeken'; -$_lang["search_criteria_title_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in hun titel.'; -$_lang["search_empty"] = 'Uw zoekopdracht heeft geen resultaten opgeleverd. Verruim uw zoekcriteria en probeer het nogmaals.'; -$_lang["search_item_deleted"] = 'Dit item is verwijderd'; -$_lang["search_results"] = 'Zoekresultaten'; -$_lang["search_results_returned_desc"] = 'Beschrijving'; -$_lang["search_results_returned_id"] = 'ID'; -$_lang["search_results_returned_msg"] = 'Uw zoekcriteria hebben %s Pagina\'s opgeleverd. Als het teveel resultaten heeft opgeleverd, probeer dan een specifiekere zoekopdracht. Met de twee linker kolommen kunt u het bestand in de Website boomstructuur vinden of de Pagina bekijken. De twee meest rechtse kolommen geven aan of een Pagina verwijderd is en wat de publicatiestatus is.

          '; -$_lang["search_results_returned_title"] = 'Titel'; -$_lang["search_view_docdata"] = 'Geef dit item weer'; -$_lang["security"] = 'Gebruikers'; -$_lang["security_notices_tab"] = 'Beveiligingswaarschuwingen'; -$_lang["security_notices_title"] = 'Beveiligingswaarschuwingen'; -$_lang["select_date"] = 'Selecteer een datum'; -$_lang["send"] = 'Verzenden'; -$_lang["server_protocol_http"] = 'http'; -$_lang["server_protocol_https"] = 'https'; -$_lang["server_protocol_message"] = 'Geef hier aan of uw website gebruik maakt van een https verbinding.'; -$_lang["server_protocol_title"] = 'Server type'; -$_lang["serveroffset"] = 'Server verschil'; -$_lang["serveroffset_message"] = 'Selecteer hier het aantal uren tijdsverschil tussen uw huidige locatie en de servertijd. De huidige tijd op de server is [%s], de huidige tijd op de server rekening houdend met het op dit moment opgeslagen tijdsverschil is [%s].'; -$_lang["serveroffset_title"] = 'Server tijdsverschil'; -$_lang["servertime"] = 'Server tijd'; -$_lang["set_automatic"] = 'Stel in als automatisch'; -$_lang["set_default"] = 'Stel in als standaard'; -$_lang["set_default_all"] = 'Stel standaarden in'; -$_lang["settings_after_install"] = 'Omdat dit een nieuwe installatie is, moet u deze instellingen bekijken en wijzigen waar nodig. Nadat u de instellingen hebt bekeken, drukt u op \'Opslaan\' om de instellingen bij te werken.'; -$_lang["settings_config"] = 'Configuratie'; -$_lang["settings_dependencies"] = 'Afhankelijkheden'; -$_lang["settings_events"] = 'Systeemgebeurtenissen'; -$_lang["settings_furls"] = 'Zoekmachine vriendelijke URL\'s'; -$_lang["settings_general"] = 'Algemeen'; -$_lang["settings_group_tv_message"] = 'Kies of Template Variabelen moeten worden gegroepeerd in secties of tabbladen (benoemd door tv-categorie) bij het bewerken van een pagina'; -$_lang["settings_group_tv_options"] = 'Nee, secties op het tabblad Algemeen, tabbladen op het tabblad Algemeen, secties op nieuw tabblad, tabbladen op nieuw tabblad, nieuwe tabbladen'; -$_lang["settings_misc"] = 'Overige'; -$_lang["settings_security"] = 'Beveiliging'; -$_lang["settings_KC"] = 'Bestandsbrowser'; -$_lang["settings_page_settings"] = 'Pagina instellingen'; -$_lang["settings_photo"] = 'Foto'; -$_lang["settings_properties"] = 'Instellingen'; -$_lang["show_fullscreen_btn_message"] = 'Toon Volledig scherm knop'; -$_lang["show_newresource_btn_message"] = 'Toon Nieuwe pagina knop'; -$_lang["settings_show_picker_message"] = 'Pas het thema van de manager aan en sla op in de lokale opslag'; -$_lang["show_fullscreen_btn"] = 'Volledig scherm switchen'; -$_lang["show_newresource_btn"] = 'Nieuwe pagina knop'; -$_lang["settings_site"] = 'Website'; -$_lang["settings_strip_image_paths_message"] = 'Als dit op \'Nee\' staat zal de bestandsbrowser src\'s (afbeeldingen, bestanden, enz.) als absolute URL\'s worden geplaatst. Relatieve URL\'s zijn handig als u uw installatie wilt verplaatsen, bijvoorbeeld van een demosite naar een productiesite. Als je geen idee hebt wat dit betekent, kun je het het beste gewoon laten staan op \'Ja\'.'; -$_lang["settings_strip_image_paths_title"] = 'Browserpaden herschrijven?'; -$_lang["settings_templvars"] = 'Template Variabelen'; -$_lang["settings_title"] = 'Systeem configuratie'; -$_lang["settings_ui"] = 'Interface & mogelijkheden'; -$_lang["settings_users"] = 'Gebruiker'; -$_lang["show_meta"] = 'Toon META Keywords tab'; -$_lang["show_meta_message"] = 'Toon de verouderde META Keywords tab wanneer Pagina\'s worden aangepast in the Manager.'; -$_lang["show_tree"] = 'Website boomstructuur weergeven'; -$_lang["show_picker"] = 'Toon manager kleurenpalet'; -$_lang["showing"] = 'Weergeven'; -$_lang["signupemail_message"] = 'Hier kunt u het bericht instellen die naar uw gebruikers verstuurd wordt wanneer u voor hun een account heeft aangemaakt en Evolution een e-mail laat sturen met hun gebruikersnaam en wachtwoord.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - gebruikersnaam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeldgegevens niet ontvangen!'; -$_lang["signupemail_title"] = 'Registratie e-mail'; -$_lang["site"] = 'Website'; -$_lang["site_schedule"] = 'Website planning'; -$_lang["sitename_message"] = 'Vul hier de naam van uw website in.'; -$_lang["sitename_title"] = 'Naam website'; -$_lang["sitestart_message"] = 'Vul hier de ID van de Pagina in dat u als startpagina wilt gebruiken.
          NB: Let op dat dit de ID van een bestaande Pagina is en het tevens gepubliceerd is!'; -$_lang["sitestart_title"] = 'Startpagina website'; -$_lang["sitestatus_message"] = 'Kies \'Online\' om uw website op het web te publiceren. Als u de optie \'Offline\' selecteerd, dan zullen uw bezoekers de \'Website niet beschikbaar\' bericht te zien krijgen. Ze kunnen uw website dan niet bekijken!'; -$_lang["sitestatus_title"] = 'Website status'; -$_lang["siteunavailable_message"] = 'Dit bericht krijgen Gebruikers te zien als de website offline is of als er een fout mocht optreden. NB: Dit bericht wordt enkel getoond indien de \'Website niet beschikbaar\'-pagina niet is ingesteld.'; -$_lang["siteunavailable_message_default"] = 'Deze website is momenteel niet beschikbaar.'; -$_lang["siteunavailable_page_message"] = 'Geef de ID van de Pagina dat wordt weergegeven wanneer de website niet beschikbaar (offline) is. NB: Let erop dat de ID bestaat en dat de Pagina gepubliceerd is!'; -$_lang["siteunavailable_page_title"] = 'Website niet beschikbaar pagina'; -$_lang["siteunavailable_title"] = 'Website niet beschikbaar bericht'; -$_lang["snippet"] = 'Snippet'; -$_lang["snippets"] = 'Snippets'; -$_lang["snippet_code"] = 'Snippet code (php)'; -$_lang["snippet_desc"] = 'Beschrijving'; -$_lang["snippet_execonsave"] = 'Snippet uitvoeren na opslaan.'; -$_lang["snippet_management_msg"] = 'Hier kunt u Snippets toevoegen en bewerken.'; -$_lang["snippet_msg"] = 'Snippet toevoegen of bewerken. LET OP, Snippets zijn \'ruwe\' PHP code, en als u verwacht dat de output van de Snippet op een specifiek punt binnen uw Template wordt getoond, dient u een waarde te retourneren binnen deze Snippet.'; -$_lang["snippet_name"] = 'Naam Snippet'; -$_lang["snippet_properties"] = 'Standaard instellingen'; -$_lang["snippet_title"] = 'Maak/wijzig Snippet'; -$_lang["sort_alphabetically"] = 'Sorteer alfabetisch'; -$_lang["sort_asc"] = 'Oplopend'; -$_lang["sort_desc"] = 'Aflopend'; -$_lang["sort_menuindex"] = 'Sorteer menu index'; -$_lang["sort_tree"] = 'Sorteer de Website boomstructuur'; -$_lang['sort_updating'] = 'Bijwerken ...'; -$_lang['sort_updated'] = 'Bijgewerkt!'; -$_lang['sort_nochildren'] = 'Deze map bevat geen subpagina\'s.'; -$_lang["sort_elements_msg"] = 'Versleep om de volgorde van de getoonde elementen te veranderen.'; -$_lang["source"] = 'Bron'; -$_lang["stay"] = 'Doorgaan met bewerken'; -$_lang["stay_new"] = 'Nog één toevoegen'; -$_lang["submit"] = 'Verzenden'; -$_lang["sunday"] = 'Zondag'; -$_lang["sys_alert"] = 'Systeem waarschuwing'; -$_lang["sysinfo_activity_message"] = 'Deze lijst toont de Pagina\'s die recent door uw Gebruikers werden gewijzigd.'; -$_lang["sysinfo_userid"] = 'Gebruiker'; -$_lang["system"] = 'Systeem'; -$_lang["system_email_signup"] = ' - -Hallo [+uid+] - -Hier zijn uw inloggegevens voor [+sname+] Content Manager: - -Gebruikersnaam: [+uid+] -Wachtwoord: [+pwd+] - -Zodra u zich aanmeldt bij Content Manager ([+surl+]), kunt u uw wachtwoord wijzigen. - -Met vriendelijke groet, -Website Admin -'; -$_lang["system_email_webreminder"] = 'Hallo [+uid+] - -Klik op de volgende link om uw nieuwe wachtwoord te activeren: - -[+surl+] - -Als dit lukt, kunt u het volgende wachtwoord gebruiken om in te loggen: - -Wachtwoord:[+pwd+] - -Als u deze e-mail niet heeft aangevraagd, negeert u deze. - -Met vriendelijke groet, -Website Admin'; -$_lang["system_email_websignup"] = 'Hallo [+uid+] - -Hier zijn uw inloggegevens voor [+sname+]: - -Gebruikersnaam: [+uid+] -Wachtwoord: [+pwd+] - -Nadat u zich hebt aangemeld bij [+sname+] ([+surl+]), kunt u uw wachtwoord wijzigen. - -Met vriendelijke groet, -Website Admin'; -$_lang["table_hoverinfo"] = 'Beweeg de muiscursor over een tabelnaam om een korte beschrijving te zien van de funktie van de tabel (niet voor alle tabellen is informatie beschikbaar).'; -$_lang["table_prefix"] = 'Tabel voorvoegsel (prefix)'; -$_lang["tag"] = 'Tag'; -$_lang["template"] = 'Template'; -$_lang["templates"] = 'Templates'; -$_lang["template_assignedtv_tab"] = 'Toegekende Template Variabelen'; -$_lang["template_code"] = 'Template code (html)'; -$_lang["template_desc"] = 'Beschrijving'; -$_lang["template_edit_tab"] = 'Wijzig Template'; -$_lang["template_management_msg"] = 'Hier kunt u Templates toevoegen en bewerken.'; -$_lang["template_msg"] = 'Template toevoegen of bewerken. Gewijzigde/nieuwe Templates zullen niet zichtbaar zijn in de gecachte Pagina\'s van uw website totdat de cache is leeggemaakt. U kunt echter de voorbeeldfunctie op een Pagina gebruiken om de Template te bekijken.'; -$_lang["template_name"] = 'Naam Template'; -$_lang["template_no_tv"] = 'Er zijn nog geen Template Variabelen aan deze Template toegewezen.'; -$_lang["template_notassigned_tv"] = 'Deze Template variabelen zijn beschikbaar voor het toewijzen.'; -$_lang["template_reset_all"] = 'Geef alle Pagina\'s het standaard Template'; -$_lang["template_reset_specific"] = 'Geef alleen \'%s\' Pagina\'s het standaard Template:'; -$_lang["template_selectable"] = 'Template selecteerbaar bij aanmaken of aanpassen van pagina\'s'; -$_lang["template_title"] = 'Maak/wijzig Template'; -$_lang["template_tv_edit"] = 'Wijzig TV sorteer volgorde'; -$_lang["template_tv_edit_message"] = 'Versleep om de volgorde van de Template Variabelen van deze Template te veranderen.'; -$_lang["template_tv_edit_title"] = 'Template Variabele volgorde'; -$_lang["template_tv_msg"] = 'De aan deze Template toegewezen Template Variabelen staan hieronder vermeld.'; -$_lang["thursday"] = 'Donderdag'; -$_lang["tmplvar_access_msg"] = 'Selecteer de Paginagroepen die de inhoud van deze Template Variabele mogen aanpassen'; -$_lang["tmplvar_change_template_msg"] = 'Door het aanpassen van deze Template zal deze Pagina de Template Variabelen opnieuw moeten inlezen. Alle niet opgeslagen veranderingen zullen verloren gaan.\n\n Weet u zeker dat u deze Template aan wilt passen?'; -$_lang["tmplvar_inuse"] = 'De volgende Pagina\'s gebruiken deze Template Variabele. Om door te gaan met het verwijderen van de Template Variabele klik op de knop Verwijderen, anders klik op Annuleren.'; -$_lang["tmplvar_tmpl_access"] = 'Template toegang'; -$_lang["tmplvar_tmpl_access_msg"] = 'Selecteer de Templates die deze Template Variabele mogen gebruiken'; -$_lang["tmplvar"] = 'Template Variabele'; -$_lang["tmplvars"] = 'Template Variabelen'; -$_lang["tmplvars_binding_msg"] = 'Dit veld ondersteund data bron verbindingen met behulp van @ commando\'s'; -$_lang["tmplvars_caption"] = 'Titel'; -$_lang["tmplvars_default"] = 'Standaard waarde'; -$_lang["tmplvars_description"] = 'Beschrijving'; -$_lang["tmplvars_elements"] = 'Invoer optie waarden'; -$_lang["tmplvars_inherited"] = 'Geërfde waarde'; -$_lang["tmplvars_management_msg"] = 'Beheer extra eigen content velden (Template Variabelen) voor uw Pagina\'s.'; -$_lang["tmplvars_msg"] = 'Template Variabelen toevoegen of bewerken. De Template Variabelen moeten aan een Template toegekend worden om ze vanuit Snippets en Pagina\'s te kunnen benaderen net als andere content Variabelen.'; -$_lang["tmplvars_name"] = 'Template Variabele naam'; -$_lang["tmplvars_novars"] = 'Geen Template Variabelen gevonden.'; -$_lang["tmplvars_rank"] = 'Sorteer volgorde'; -$_lang["tmplvars_rank_edit_message"] = 'Versleep om volgorde van de Template variabelen aan te passen.'; -$_lang["tmplvars_reset_params"] = 'Herstel parameters'; -$_lang["tmplvars_title"] = 'Template Variable aanmaken/aanpassen'; -$_lang["tmplvars_type"] = 'Invoer type'; -$_lang["tmplvars_widget"] = 'Widget'; -$_lang["tmplvars_widget_prop"] = 'Widget instellingen'; -$_lang["to"] = 'naar'; -$_lang["toggle_fullscreen"] = 'Volledig scherm switchen'; -$_lang["tools"] = 'Beheer'; -$_lang["top_howmany_message"] = 'Wanneer u de statistieken bekijkt, hoe lang wilt u de \'Top ...\' lijst hebben?'; -$_lang["top_howmany_title"] = 'Toon aantal statistieken'; -$_lang["total"] = 'totaal'; -$_lang["track_visitors_message"] = 'Vink aan om de onderliggende bronnen in de documentenstructuur weer te geven'; -$_lang["track_visitors_title"] = 'Toon onderliggende pagina\'s'; -$_lang["tree_page_click"] = 'Pagina klik gedrag'; -$_lang["tree_page_click_message"] = 'Het standaard gedrag bij het klikken op een pagina in de boomstructuur.'; -$_lang["use_breadcrumbs"] = 'Toon navigatie'; -$_lang["use_breadcrumbs_message"] = 'Toon de navigatie bij het maken of bewerken van pagina\'s in de Manager'; -$_lang["tree_show_protected"] = 'Toon beschermde pagina\'s'; -$_lang["tree_show_protected_message"] = 'Wanneer ingesteld op "Nee", worden beschermde bronnen (en al hun onderliggende bronnen) niet weergegeven in de boomstructuur.'; -$_lang["truncate_table"] = 'Klik hier om deze tabel in te korten'; -$_lang["tuesday"] = 'Dinsdag'; -$_lang["tv"] = 'TV'; -$_lang["type"] = 'Soort'; -$_lang["udperms_allowroot_message"] = 'Sta Gebruikers toe om nieuwe Pagina\'s en Mappen in de \'root\' (basismap) van de website te maken.'; -$_lang["udperms_allowroot_title"] = 'Rootmap toestaan'; -$_lang["udperms_message"] = 'Beïnvloed toegangsrechten tot Pagina\'s via Gebruikersgroepen en Paginagroepen.'; -$_lang["udperms_title"] = 'Toegangsrechten gebruiken'; -$_lang["unable_set_link"] = 'Niet mogelijk de link te maken!'; -$_lang["unable_set_parent"] = 'Het Hoofdpagina kon niet worden aangemaakt!'; -$_lang["unauthorizedpage_message"] = 'Voer een gepubliceerde en publiek toegankelijke Pagina ID in waarnaar Gebruikers worden doorgestuurd wanneer ze een beveiligde/ongeautoriseerde Pagina opvragen.'; -$_lang["unauthorizedpage_title"] = 'Geen toegang pagina'; -$_lang["unblock_message"] = 'Deze Gebruiker zal niet geblokkeerd zijn na het opslaan van zijn Gebruikersgegevens.'; -$_lang["undelete_resource"] = 'Herstel Pagina'; -$_lang["unpublish_date"] = 'Niet-publiceren datum'; -$_lang["unpublish_events"] = 'Niet-publiceren gebeurtenissen'; -$_lang["unpublish_resource"] = 'Publicatie ongedaan maken'; -$_lang["untitled_resource"] = 'Naamloze Pagina'; -$_lang["untitled_weblink"] = 'Naamloze Weblink'; -$_lang["update_params"] = 'Parameter weergave bijwerken'; -$_lang["update_settings_from_language"] = 'Vervangen met'; -$_lang["upload_maxsize_message"] = 'Voer de maximale bestandsgrootte in voor bestanden die via Bestandsbeheer geupload kunnen worden. De bestandsgrootte wordt opgegeven in bytes.
          NB: Het kan enige tijd duren om grote bestanden te uploaden!'; -$_lang["upload_maxsize_title"] = 'Maximale upload bestandsgrootte'; -$_lang["uploadable_files_message"] = 'Hier kunt u een lijst van bestanden opgeven die geupload kunnen worden naar \'assets/files/\' vanuit Bestandsbeheer. Voer de bestandsextensies in, gescheiden door een komma. '; -$_lang["uploadable_files_title"] = 'Uploadbare bestandstypes'; -$_lang["uploadable_flash_message"] = 'Hier kunt u een lijst van bestanden opgeven die geupload kunnen worden naar \'assets/flash/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de Flash types, van elkaar gescheiden door een komma. '; -$_lang["uploadable_flash_title"] = 'Uploadbare Flash bestandstypes'; -$_lang["uploadable_images_message"] = 'Hier kunt u een lijst van bestanden opgeven die ge-upload kunnen worden naar \'assets/images/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de Afbeelding types, van elkaar gescheiden door een komma. '; -$_lang["uploadable_images_title"] = 'Uploadbare afbeelding bestandstypes'; -$_lang["uploadable_media_message"] = 'Hier kunt u een lijst van bestanden opgeven die ge-upload kunnen worden naar \'assets/media/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de media types, van elkaar gescheiden door een komma. '; -$_lang["uploadable_media_title"] = 'Uploadbare Media bestandstypes'; -$_lang["use_alias_path_message"] = 'Door \'Ja\' te selecteren wordt er een virtueel pad gegenereerd naar de Pagina. Bijvoorbeeld, als een Pagina "kind.html" in de Container "ouder" staat, dan wordt de volledige zoekmachine vriendelijke URL "/ouder/kind.html".'; -$_lang["use_alias_path_title"] = 'Gebruik gebruiksvriendelijke alias paden'; -$_lang["use_editor_message"] = 'Bewerken met de geavanceerde teksteditor aanzetten. Deze setting geld voor alle Pagina\'s, maar kan worden overschreven in de instellingen van de Gebruiker.'; -$_lang["use_editor_title"] = 'Teksteditor aan/uitzetten'; -$_lang["use_global_tabs"] = 'Gebruik de algemene tabbladen'; -$_lang["user"] = 'Gebruiker'; -$_lang["user_block"] = 'Geblokkeerd'; -$_lang["user_blockedafter"] = 'Geblokkeerd na'; -$_lang["user_blockeduntil"] = 'Geblokkeerd tot'; -$_lang["user_changeddata"] = 'Uw gegevens zijn gewijzigd. A.u.b. opnieuw aanmelden.'; -$_lang["user_country"] = 'Land'; -$_lang["user_dob"] = 'Geboortedatum'; -$_lang["user_doesnt_exist"] = 'Gebruiker bestaat niet'; -$_lang["user_edit_self_msg"] = 'Wellicht dient u na het opslaan eerst af te melden en dan weer aan te melden om uw gegevens volledig te actualiseren.
          Nieuwe wachtwoorden worden via e-mail toegezonden of op het scherm getoond.'; -$_lang["user_email"] = 'E-mail adres'; -$_lang["user_failedlogincount"] = 'Aantal mislukte aanmeldpogingen'; -$_lang["user_fax"] = 'Fax'; -$_lang["user_female"] = 'Vrouw'; -$_lang["user_full_name"] = 'Volledige naam'; -$_lang["user_gender"] = 'Geslacht'; -$_lang["user_is_blocked"] = 'Deze Gebruiker is geblokkeerd!'; -$_lang["user_logincount"] = 'Aantal keren aangemeld'; -$_lang["user_male"] = 'Man'; -$_lang["user_management_msg"] = 'Hier kunt u Gebruikers toevoegen en bewerken.'; -$_lang["user_management_title"] = 'Gebruikers beheren'; -$_lang["user_mobile"] = 'Mobiel telefoonnummer'; -$_lang["user_phone"] = 'Telefoonnummer'; -$_lang["user_photo"] = 'Pasfoto'; -$_lang["user_photo_message"] = 'Voer een url voor de foto van deze Gebruiker in of gebruik de \'Invoegen\' knop om een foto te selecteren of te uploaden.'; -$_lang["user_prevlogin"] = 'Laatste keer aangemeld'; -$_lang["user_role"] = 'Rol'; -$_lang["user_state"] = 'Provincie'; -$_lang["user_title"] = 'Manager gebruiker creëren/bewerken'; -$_lang["user_upload_message"] = 'Als u wilt voorkomen dat deze Gebruiker bestanden in deze categorie kan uploaden, Zorg dan dat \'Gebruik Systeem Configuratie Instellingen\' niet is aangevinkt en laat het veld leeg.'; -$_lang["user_use_config"] = 'Gebruik Systeem Configuratie Instellingen'; -$_lang["user_zip"] = 'Postcode'; -$_lang["username"] = 'Gebruikersnaam'; -$_lang["users"] = 'Gebruikers'; -$_lang["valid_hostnames_message"] = 'Help XSS exploits misbruik te voorkomen met de systeem instelling site_url door een komma gescheiden lijst van geldige hostnamen voor deze installatie te gebruiken. Dit is belangrijk voor bepaalde typen gedeelde hosts of hosts rechtstreeks via een IP-adres te benaderen. De eerste hostnaam in de lijst wordt gebruikt als de HTTP_HOST wanneer deze niet overeenkomt met een geldige hostnaam.'; -$_lang["valid_hostnames_title"] = 'Geldige hostnamen'; -$_lang["validate_referer_message"] = 'Valideer de HTTP_REFERER headers om het risico te verkleinen dat uw website beheerders bedonderd worden door een CSRF (Cross Site Request Forgery) aanval. Soms is dit echter niet mogelijk als uw server geen HTTP_REFERER headers verzend.'; -$_lang["validate_referer_title"] = 'Valideer HTTP_REFERER headers'; -$_lang["value"] = 'Waarde'; -$_lang["version"] = 'Versie'; -$_lang["view"] = 'Bekijken'; -$_lang["view_child_resources_in_container"] = 'Bekijk Subpagina\'s in Map'; -$_lang["view_log"] = 'Bekijk logboek'; -$_lang["view_logging"] = 'CMS logboek'; -$_lang["view_sysinfo"] = 'Systeem Info'; -$_lang["warning"] = 'Waarschuwing!'; -$_lang["warning_not_saved"] = 'U heeft de wijzigingen nog niet opgeslagen! U kunt op deze Pagina blijven om de wijzigingen op te slaan (\'Annuleren\'), of u kunt deze Pagina verlaten, waardoor eventuele wijzigingen verloren gaan (\'OK\').'; -$_lang["warning_visibility"] = 'Configuratie meldingen zichtbaar voor'; -$_lang["warning_visibility_message"] = 'Bepaal de zichtbaarheid van de waarschuwingen op de Manager welkoms pagina'; -$_lang["web_access_permissions"] = 'Webgebruiker toegangsrechten'; -$_lang["web_access_permissions_user_groups"] = 'Webgebruikers groepen'; -$_lang["web_permissions"] = 'Toegangsbeheer (web)'; -$_lang["web_user_management_msg"] = 'Hier kunt u kiezen welke Webgebruiker u wilt bewerken. Webgebruikers zijn Gebruikers die alleen op de website kunnen aanmelden (en dus niet op het Content Management Systeem)'; -$_lang["web_user_management_title"] = 'Webgebruikers'; -$_lang["web_user_title"] = 'Aanmaken/bewerken Webgebruiker'; -$_lang["web_users"] = 'Webgebruikers'; -$_lang["weblink"] = 'Weblink'; -$_lang["webpwdreminder_message"] = 'Hier kunt u de boodschap instellen die naar uw gebruikers verstuurd wordt als zij een nieuw wachtwoord aanvragen per e-mail. Evolution zal een e-mail sturen met het nieuwe wachtwoord en activeringsinformatie.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - aanmeld naam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeld gegevens niet ontvangen!'; -$_lang["webpwdreminder_title"] = 'Herinnering e-mailadres'; -$_lang["websignupemail_message"] = 'Hier kunt u de boodschap instellen die naar uw gebruikers verstuurd wordt wanneer u voor hen een web account heeft aangemaakt en Evolution een e-mail laat sturen met hun gebruikersnaam en wachtwoord.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - aanmeld naam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeld gegevens niet ontvangen!'; -$_lang["websignupemail_title"] = 'Bevestiging e-mail bij aanmelding:
          (Webgebruiker)'; -$_lang["wednesday"] = 'Woensdag'; -$_lang["welcome_messages"] = 'In uw inbox staan %d bericht(en), waarvan %s ongelezen.'; -$_lang["welcome_title"] = 'Welkom bij uw Evolution CMS Content Manager'; -$_lang["which_editor_message"] = 'Selecteer uw Texteditor (RTE). U kunt extra RTE\'s downloaden en installeren vanaf de downloadpagina.'; -$_lang["which_editor_title"] = 'Kies uw teksteditor'; -$_lang["working"] = 'Wordt verwerkt...'; -$_lang["wrap_lines"] = 'Regels afbreken'; -$_lang["xhtml_urls_message"] = 'Vervangt ampersand (&) tekens in urls die worden gegenereerd door EVO met de validatie &amp; htmlentity'; -$_lang["xhtml_urls_title"] = 'XHTML URL\'s'; -$_lang["yes"] = 'Ja'; -$_lang["you_got_mail"] = 'U heeft een nieuw bericht'; -$_lang["yourinfo_message"] = 'In deze sectie wordt uw persoonlijke informatie weergegeven:'; -$_lang["yourinfo_previous_login"] = 'De laatste keer dat u zich heeft aangemeld:'; -$_lang["yourinfo_role"] = 'Uw rol is:'; -$_lang["yourinfo_title"] = 'Uw info'; -$_lang["yourinfo_total_logins"] = 'Aantal keer aangemeld:'; -$_lang["yourinfo_username"] = 'U bent aangemeld als:'; - -$_lang["a17_error_reporting_title"] = 'Detectie level van de PHP foutmelding'; -$_lang["a17_error_reporting_msg"] = 'Bepaal het level van de PHP foutmelding.'; -$_lang["a17_error_reporting_opt0"] = 'Negeer alle'; -$_lang["a17_error_reporting_opt1"] = 'Negeer de waarschuwing van een melding met laag niveau (deprecated)'; -$_lang["a17_error_reporting_opt2"] = 'Detecteer alle foutmeldingen behalve E_NOTICE'; -$_lang["a17_error_reporting_opt99"] = 'Detecteer alle'; - -$_lang["pwd_hash_algo_title"] = 'Hash algoritme'; -$_lang["pwd_hash_algo_message"] = 'Wachtwoord hash algoritme.'; - -$_lang["enable_bindings_title"] = '@Bindings commando\'s aanzetten'; -$_lang["enable_bindings_message"] = 'Voorkom het uitvoeren van PHP-functies via TV @Bindings. Handig wanneer u Manager gebruikers heeft die niet PHP-code kunnen creëren, maar wel in staat zijn om TV\'s te maken of te bewerken. Het tonen van een TV met een @Binding zal worden uitgeschakeld.'; -$_lang["enable_filter_title"] = 'Filters aanzetten'; -$_lang["enable_filter_message"] = 'Filters kunt u manipuleren van de manier waarop gegevens worden gepresenteerd of geparsed in een tag. Ze laten u waarden wijzigen vanuit uw Template. Dit is gelijk aan PHx. Meer info'; // todo: change link to documentation -$_lang["enable_filter_phx_warning"] = 'Wanneer de PHx plugin is ingeschakeld staan de ingebouwde filters standaard uitgeschakeld'; - -$_lang["enable_filter_phx_warning"] = 'Wanneer de PHx plugin is ingeschakeld staan de ingebouwde filters standaard uitgeschakeld'; - -$_lang["enable_at_syntax_title"] = '<@SYNTAX> aanzetten'; -$_lang["enable_at_syntax_message"] = '<@SYNTAX> is een eenvoudig en lichtgewicht. Dit is ontworpen om mede-existentie met HTML-tags en inhoudstrings te overwegen.'; - -$_lang["bkmgr_alert_mkdir"] = 'Een bestand kan niet worden gemaakt in een directory. Kijk wat de toestemming (permission) is van [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          Een website kan worden hersteld door het gebruik van een SQL bestand.

          '; -$_lang["bkmgr_restore_title"] = 'Herstellen'; -$_lang["bkmgr_import_ok"] = 'SQL herstel is op de Standaard manier uitgevoerd.'; -$_lang["bkmgr_snapshot_ok"] = 'De snapshot is als Standaard opgeslagen.'; -$_lang["bkmgr_run_sql_file_label"] = 'Uitvoeren door SQL bestand'; -$_lang["bkmgr_run_sql_direct_label"] = 'Direct uitvoeren van SQL commando strings'; -$_lang["bkmgr_run_sql_submit"] = 'Herstellen uitvoeren'; -$_lang["bkmgr_run_sql_result"] = 'Resultaat'; -$_lang["bkmgr_snapshot_title"] = 'Snapshot opgeslagen en hersteld'; -$_lang["bkmgr_snapshot_msg"] = '

          De inhoud van de database is opgeslagen en hersteld op de server.
          Opgeslagen locatie: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; -$_lang["bkmgr_snapshot_submit"] = 'Snapshot toevoegen'; -$_lang["bkmgr_snapshot_list_title"] = 'Lijst van Snapshots'; -$_lang["bkmgr_restore_submit"] = 'Deze gegevens (data) terugzetten'; -$_lang["bkmgr_restore_confirm"] = 'Weet je zeker dat je backup\n[+filename+] wilt terugzetten?'; -$_lang["bkmgr_snapshot_nothing"] = 'Geen Snapshot'; - -$_lang["files.dynamic.php1"] = 'Maak tekstbestand aan'; -$_lang["files.dynamic.php2"] = 'Deze locatie kan niet worden getoond.'; -$_lang["files.dynamic.php3"] = 'Er is een probleem in een bestandsnaam.'; -$_lang["files.dynamic.php4"] = 'Het tekstbestand is gemaakt.'; -$_lang["files.dynamic.php5"] = 'Bestand kan niet worden gedupliceerd.'; -$_lang["files.dynamic.php6"] = 'Bestand of map kan niet worden hernoemd.'; -$_lang["files_dynamic_new_folder_name"] = 'Voeg een nieuwe map naam toe:'; -$_lang["files_dynamic_new_file_name"] = 'Voeg een nieuwe bestandsnaam toe:'; -$_lang["not_readable_dir"] = 'Deze locatie kan niet gelezen worden.'; -$_lang["confirm_delete_dir"] = 'Weet u zeker dat u deze locatie wilt verwijderen?'; -$_lang["confirm_delete_dir_recursive"] = 'Weet u zeker dat u de locatie wilt verwijderen? \ N \ nAlle onderliggende bestanden worden ook verwijderd.'; - -$_lang["make_folders_title"] = 'Voeg eind slash toe aan de URL'; -$_lang["make_folders_message"] = 'Een slash toevoegen aan Pagina\'s die als mappen worden gebruikt wanneer u gebruik maakt van FURLs.'; - -$_lang["check_files_onlogin_title"] = 'Bekijk Core bestanden bij inloggen'; -$_lang["check_files_onlogin_message"] = 'Door deze optie in te schakelen, worden belangrijke systeembestanden gecontroleerd op aanpassingen die kenmerkend zijn voor gescripte website-aanvallen. Hoewel het geen garantie is, kan het u waarschuwen voor een aangetast systeembestand en website.'; - -$_lang["configcheck_sysfiles_mod"] = 'Belangrijke Systeem bestanden zijn aangepast!'; -$_lang["configcheck_sysfiles_mod_msg"] = 'U hebt EVO geconfigureerd om belangrijke systeembestanden te controleren op mogelijke website-scriptaanvallen. Deze waarschuwing betekent niet noodzakelijk dat uw site is gehackt, maar u moet de gecontroleerde bestanden in uw installatie bekijken (ingesteld in Systeemconfiguratie -> Gebruiker -> Controleer kernbestanden bij inloggen). Als u merkt dat uw bestanden ongewijzigd blijven of wijzigingen zijn aangebracht door sitebeheerders, gaat u naar Systeemconfiguratie en klikt u op om instellingen opnieuw op te slaan om dit bericht te sluiten. Wijzigingen in de volgende bestanden zijn gevonden:'; - -$_lang['email_method_title'] = 'Sendmail methode'; -$_lang['email_method_mail'] = 'mail() PHP functie'; -$_lang['email_method_smtp'] = 'SMTP Server'; -$_lang['smtp_auth_title'] = 'SMTP-AUTH'; -$_lang['smtp_host_title'] = 'SMTP host'; -$_lang['smtp_secure_title'] = 'Gecodeerde SMTP'; -$_lang['smtp_username_title'] = 'SMTP gebruikersnaam'; -$_lang['smtp_password_title'] = 'SMTP wachtwoord'; -$_lang['smtp_port_title'] = 'SMTP poort'; - -$_lang["setting_resource_tree_node_name"] = 'De hoofdnaam van de boomstructuur'; -$_lang["setting_resource_tree_node_name_desc"] = 'Specificeer het paginaveld om gebruik te maken van de hoofdnaam in de boomstructuur bij het renderen. Standaard staat deze op Pagina Titel, hoewel elk Pagina veld kan worden gebruikt, zoals menutitel en alias.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Opmerking: U kunt deze weergavenaam wijzigen in de sorteeroptie van de boomstructuur. Deze instelling wordt gebruikt wanneer Display Name in boomstructuur is ingesteld op Standaard.'; - -$_lang["resource_opt_alvisibled"] = 'Gebruik huidige alias als alias pad'; -$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; -$_lang['resource_opt_is_published'] = 'Gepubliceerd'; -$_lang["docid_incrmnt_method_title"] = 'Optel methode pagina ID'; -$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; -$_lang["docid_incrmnt_method_1"] = 'Minimaal aantal gemiste ID'; -$_lang["docid_incrmnt_method_2"] = 'Maximaal ID+1'; - -$_lang["enable_cache_title"] = 'Document caching'; -$_lang["disabled_at_login"] = 'Uitgeschakeld bij inloggen'; - -$_lang["cache_type_title"] = 'Document cache type'; -$_lang["cache_type_1"] = 'Cache is gebaseerd op document id (standaard)'; -$_lang["cache_type_2"] = 'Cache is gebaseerd op document id en $_GET parameters'; -$_lang["seostrict_title"] = 'Gebruik SEO Strict URLs'; -$_lang["seostrict_message"] = 'Gebruik van strikte URL\'s om dubbele inhoud te voorkomen (wanneer dit plaatsvindt)'; -$_lang["aliaslistingfolder_title"] = 'Gebruik AliasListing alleen bij mappen'; -$_lang["aliaslistingfolder_message"] = 'Vermindert het geheugengebruik wanneer de site veel pagina\'s heeft'; - -$_lang["settings_friendlyurls_alert"] = 'Het is noodzakelijk om het ht.access bestand in de EVO-installatiemap naar .htaccess te hernoemen voor het gebruik van de Friendly URL-functie.'; -$_lang["settings_friendlyurls_alert2"] = 'Omdat EVO in een submap is geïnstalleerd, is het noodzakelijk om de inhoud van .htaccess te wijzigen.'; - -$_lang["user_street"] = 'Adres'; -$_lang["user_city"] = 'Stad'; -$_lang["user_other"] = 'Anders'; - -$_lang["import_site.static.php1"] = 'Herstel boomstructuur'; -$_lang["import_site.static.php2"] = 'Herstel de boomstructuur, alle ID\'s zijn geïnitialiseerd.'; -$_lang["import_site.static.php3"] = 'Doel'; -$_lang["import_site.static.php4"] = 'alleen <body></body> '; -$_lang["import_site.static.php5"] = 'Bestand bevat alle'; - -$_lang["a83_ignore_ids_title"] = 'Negeer ID\'s (komma gescheiden)'; -$_lang["export_site.static.php1"] = 'Doel'; -$_lang["export_site.static.php2"] = 'Alleen aangepaste/bewerkte pagina\'s'; -$_lang["export_site.static.php3"] = 'Alle pagina\'s'; -$_lang["export_site.static.php4"] = 'Vervang string (voor)'; -$_lang["export_site.static.php5"] = 'Vervang string (na)'; -$_lang["export_site.static.php6"] = 'Doel'; -$_lang["export_site.static.php7"] = 'Bestanden kunnen niet worden aangepast naar [+rb_base_url+]'; - -$_lang["mutate_settings.dynamic.php6"] = 'Verzend e-mail bij fouten'; -$_lang["mutate_settings.dynamic.php7"] = 'not notify'; -$_lang["mutate_settings.dynamic.php8"] = 'Een e-mail met de foutbron wordt verzonden naar [(emailsender)] ([+emailsender+]) als er een fout optreedt. De details van de fout zijn te zien in het gebeurtenissenlogboek van de manager.'; - -$_lang["error_no_privileges"] = "Je hebt niet genoeg rechten hebt voor deze actie!"; -$_lang["error_no_optimise_tablename"] = "Tabel optimaliseren niet gevonden in aanvraag!"; -$_lang["error_no_truncate_tablename"] = "Tabel voor truncate niet gevonden!"; -$_lang["error_double_action"] = "Dubbele actie (GET & POST) geplaatst!"; -$_lang["error_no_id"] = "Document ID niet doorgegeven in aanvraag!"; -$_lang["error_id_nan"] = "Doorgegeven ID is NaN!"; -$_lang["error_no_parent"] = "Kon naam bovenliggende document niet vinden!"; -$_lang["error_many_results"] = "Te veel resultaten uit de database!"; -$_lang["error_no_results"] = "Te weinig / geen resultaten terug van database!"; -$_lang["error_no_user_selected"] = "Geen gebruiker geselecteerd als ontvanger van dit bericht!"; -$_lang["error_no_group_selected"] = "Geen groep geselecteerd als ontvanger van dit bericht!"; -$_lang["error_movedocument1"] = "Document kan niet zijn eigen onderliggende document zijn!"; -$_lang["error_movedocument2"] = "Document ID niet doorgegeven in aanvraag!"; -$_lang["error_movedocument3"] = "Nieuwe onderliggende document niet in aanvraag!"; -$_lang["error_internet_connection"] = "Server is niet beschikbaar. Controleer je internetverbinding!"; - -$_lang["login_processor_unknown_user"] = "Onjuiste gebruikersnaam of wachtwoord ingevoerd!"; -$_lang["login_processor_wrong_password"] = "Onjuiste gebruikersnaam of wachtwoord ingevoerd!"; -$_lang["login_processor_many_failed_logins"] = "Wegens te veel mislukte aanmeldingen ben je geblokkeerd!"; -$_lang["login_processor_blocked1"] = "U bent geblokkeerd en kan niet inloggen!"; -$_lang["login_processor_blocked2"] = "U bent geblokkeerd en kan niet inloggen! Probeer het later opnieuw."; -$_lang["login_processor_blocked3"] = "U wordt automatisch geblokkeerd na een bepaalde datum en kunt niet meer inloggen!"; -$_lang["login_processor_bad_code"] = "De veiligheidscode klopt niet! Probeer het opnieuw!"; -$_lang["login_processor_remotehost_ip"] = "Uw hostnaam verwijst niet terug naar uw IP!"; -$_lang["login_processor_remote_ip"] = "Het is niet toegestaan ​​om in te loggen vanaf deze locatie."; -$_lang["login_processor_date"] = "Het is niet toegestaan ​​om in te loggen op dit moment. Probeer het later opnieuw."; -$_lang["login_processor_captcha_config"] = "Captcha is niet correct geconfigureerd."; - -$_lang["dp_dayNames"] = "['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag']"; -$_lang["dp_monthNames"] = "['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December']"; -$_lang["dp_startDay"] = "1"; - -$_lang["check_all"] = "Selecteer alle"; -$_lang["check_none"] = "Deselecteer alle"; -$_lang["check_toggle"] = "Selectie aan/uit"; - -$_lang["version_notices"] = "Meldingen over versies"; - -$_lang["em_button_shift"] = "(Shift+muiseklik om meerdere vensters te openen)"; - -$_lang["reset_sysfiles_checksum_button"] = "Heropbouw Checksums"; -$_lang["reset_sysfiles_checksum_alert"] = "Weet u zeker dat u de systeembestanden checksums wil resetten?"; - -$_lang["file_browser_disabled_msg"] = "De Bestandsbrowser custom optie staat niet aangeschakeld."; -$_lang["which_browser_default_title"]= "Standaard bestandsbrowser"; -$_lang["which_browser_default_msg"]= "Kies de Bestandsbrowser welke u liever als standaard gebruikt. Bij de gebruikers instellingen kunt u kiezen voor een custom Bestandsbrowser per gebruiker."; -$_lang["which_browser_title"]= "Bestandsbrowser"; -$_lang["which_browser_msg"]= "U kunt kiezen om een aangepaste Bestandsbrowser te gebruiken voor deze gebruiker."; -$_lang["option_default"] = "Standaard"; -$_lang["position"] = "Positie"; -$_lang["are_you_sure"] = "Weet u het zeker?"; - -$_lang['evo_downloads_title'] = "Evolution Downloads"; -$_lang['help_translating_title'] = "Help Evolution vertalen"; -$_lang['download'] = "Download"; -$_lang['downloads'] = "Downloads"; -$_lang["previous_releases"] = "Vorige versies"; -$_lang["extras"] = "Extra's"; - -$_lang["display_locks"] = "Toon geblokkeerde"; -$_lang["role_display_locks"] = "Toon geblokkeerde"; -$_lang["session_timeout"] = "Sessie timeout"; -$_lang["session_timeout_msg"] = "EVO pingt de server volgens de instelling "Mail Check Time Period". Als de laatste ping deze instelling overschrijdt, wordt de bijbehorende sessie als ongeldig beschouwd en worden alle gerelateerde vergrendelingen automatisch verwijderd. Stel de waarde in minuten in (> 2min, standaard 15min)."; -$_lang["unlock_element_id_warning"] = "Weet u zeker dat je [+element_type+] (ID [+id+]) wilt vrijgeven voor bewerken?"; -$_lang["lock_element_type_1"] = "Template"; -$_lang["lock_element_type_2"] = "Template Variabele"; -$_lang["lock_element_type_3"] = "Chunk"; -$_lang["lock_element_type_4"] = "Snippet"; -$_lang["lock_element_type_5"] = "Plug-in"; -$_lang["lock_element_type_6"] = "Module"; -$_lang["lock_element_type_7"] = "Pagina"; -$_lang["lock_element_type_8"] = "Rol"; -$_lang["lock_element_editing"] = "U past element [+element_type+] aan sinds\n[+lasthit_df+]"; -$_lang["lock_element_locked_by"] = "[+element_type+] is geblokkeerd door gebruiker\n[+username+] sinds [+lasthit_df+]"; - -$_lang["minifyphp_incache_title"] = 'Minify php code in de site cache'; -$_lang["minifyphp_incache_message"] = 'Minify php code (snippets en plugins) en sla op in het site cache bestand. Zie: #938'; - -$_lang["logout_reminder_msg"] = "Ter herinnering: Het lijkt er op dat op [+datum+] je vergeten bent om uit te loggen. In de toekomst kun je dit beter wel doen na je werk!"; - -$_lang["allow_eval_title"] = "Eval php code in je snippet"; -$_lang["allow_eval_msg"] = "Voor ontwikkelaars: Gebruik \$modx->safeEval()."; -$_lang["allow_eval_with_scan"] = "Alleen functies uitvoeren die worden toegestaan"; -$_lang["allow_eval_with_scan_at_post"] = "Alles uitvoeren. Echter met POST alleen toegestaande functies uitvoeren"; -$_lang["allow_eval_everytime_eval"] = "Ongelimiteerd (gebruik alleen bij debugging)"; -$_lang["allow_eval_dont_eval"] = "Niet alle functies toelaten"; - -$_lang["safe_functions_at_eval_title"] = "Functies die eval mogen toestaan"; -$_lang["safe_functions_at_eval_msg"] = "Met komma's gescheiden lijst"; - -$_lang["multiple_sessions_msg"] = "Ter informatie: Meerdere actieve gebruiker sessies (in totaal [+totaal+]) gevonden voor de gebruiker [+gebruikersnaam+]."; -$_lang["iconv_not_available"] = "Heb is belangrijk om de extentie iconv te installeren of aan te zetten. Ga na bij uw hostingpartij om deze aan te zetten mocht u hier geen kaas van hebben gegeten."; - -$_lang["cm_create_new_category"] = "Creëer een nieuwe categorie"; -$_lang["cm_category_name"] = "Categorie naam"; -$_lang["cm_category_position"] = "Categorie positie"; -$_lang["cm_no_x_assigned"] = "Geen %s toegewezen"; -$_lang["cm_save_categorization"] = "Sla categorisering op"; -$_lang["cm_update_categories"] = "Categorieën updaten"; -$_lang["cm_assigned_elements"] = "Toegekende elementen"; -$_lang["cm_edit_name"] = "Naam aanpassen"; -$_lang["cm_mark_for_deletion"] = "Aanvinken voor verwijdering"; -$_lang["cm_delete_now"] = "Verwijder direct"; -$_lang["cm_delete_element_x_now"] = "Verwijder "%s" direct"; -$_lang["cm_select_element_group"] = "Selecteer een elementengroep"; -$_lang["cm_global_messages"] = "Globale meldingen"; -$_lang["cm_add_new_category"] = "Nieuwe categorie toevoegen"; -$_lang["cm_edit_categories"] = "Categorieën wijzigen"; -$_lang["cm_sort_categories"] = "Sorteer categorieën"; -$_lang["cm_categorize_elements"] = "Elementen categoriseren "; -$_lang["cm_translation"] = "Vertaling"; -$_lang["cm_translations"] = "Vertalingen"; -$_lang["cm_categorize_x"] = "Categoriseer %s"; -$_lang["cm_unknown_error"] = "Er is iets niet goed gegaan."; -$_lang["cm_x_assigned_to_category_y"] = "%s(%s) is toegewezen aan categorie %s(%s)"; -$_lang["cm_no_categorization"] = "Geen indeling gemaakt."; -$_lang["cm_no_changes"] = "Niets te veranderen, dus geen wijzigingen."; -$_lang["cm_x_changes_made"] = "%s aanpassingen gemaakt"; -$_lang["cm_enter_name_for_category"] = "Geef een naam voor de nieuwe categorie."; -$_lang["cm_category_x_exists"] = "Categorie %s bestaat al."; -$_lang["cm_category_x_saved_at_position_y"] = "De nieuwe caterogie %s is opgeslagen op positie %s."; -$_lang["cm_category_x_moved_to_position_y"] = "Categorie %s is verplaatst naar positie %s"; -$_lang["cm_category_x_deleted"] = "Categorie %s is verwijderd"; -$_lang["cm_category_x_renamed_to_y"] = "Categorie %s is hernoemd naar %s"; -$_lang["cm_translation_for_x_empty"] = "Vertaling voor %s is leeg"; -$_lang["cm_translation_for_x_to_y_success"] = "Vertaling van %s naar %s is succesvol opgeslagen"; -$_lang["cm_save_new_sorting"] = "Bewaar nieuwe volgorde"; -$_lang["cm_translate_phrases"] = "Vertaal zinnen"; -$_lang["cm_translate_module_phrases"] = "Vertaal module-zinnen"; -$_lang["cm_native_phrase"] = "Inheemse zin"; - -$_lang["btn_view_options"] = 'Toon opties'; -$_lang["view_options_msg"] = 'Tonen van elementen kan worden aangepast via "Toon opties" knop. Instellingen worden opgeslagen en bijgewerkt per browser door gebruik van HTML5 localStorage.'; -$_lang["viewopts_title"] = 'Toon opties'; -$_lang["viewopts_cb_buttons"] = 'Knoppen'; -$_lang["viewopts_cb_descriptions"] = 'Omschrijvingen'; -$_lang["viewopts_cb_icons"] = 'Iconen'; -$_lang["viewopts_radio_list"] = 'Lijst'; -$_lang["viewopts_radio_inline"] = 'Inline'; -$_lang["viewopts_radio_flex"] = 'Flex'; -$_lang["viewopts_fontsize"] = 'Fontgrootte'; -$_lang["viewopts_cb_alltabs"] = 'Alle tabs'; +PHP Applicatie Framework en Content Management Systeem met de licentie GNU GPL.'; +$_lang["about_title"] = 'Over Evolution'; +$_lang["access_permission_denied"] = 'U heeft niet de juiste toegangsrechten voor deze Pagina.'; +$_lang["access_permission_parent_denied"] = 'U heeft niet genoeg toegangsrechten om hier een Pagina aan te maken of te verplaatsen! Kies a.u.b. een andere locatie.'; +$_lang["access_permissions"] = 'Toegangsrechten'; +$_lang["access_permissions_add_resource_group"] = 'Maak een nieuwe Paginagroep'; +$_lang["access_permissions_add_user_group"] = 'Maak een nieuwe Gebruikersgroep'; +$_lang["access_permissions_docs_collision"] = 'Omdat de Webgebruikersgroepen en Gebruikersgroepen conflicteren voor uw Rol, zal deze Pagina onbeveiligd zijn. Neem contact op met uw website beheerder voor meer hulp.'; +$_lang["access_permissions_docs_message"] = 'Geef aan tot welke Paginagroepen deze Pagina behoort'; +$_lang["access_permissions_group_link"] = 'Maak een nieuwe groep koppeling'; +$_lang["access_permissions_introtext"] = 'Dit is de beheermodule van Gebruikers- en Paginagroepen die worden gebruikt in het toegangsbeheer. Om een Gebruiker toe te voegen aan een groep, volstaat het deze te bewerken en de groepen te kiezen waartoe deze moet behoren. Om een Pagina toe te wijzen aan een Gebruikersgroep, kiest u tijdens het bewerken van de Pagina voor de groepen waartoe de Pagina moet behoren.'; +$_lang["access_permissions_link_to_group"] = 'aan Paginagroep'; +$_lang["access_permissions_link_user_group"] = 'Koppel Gebruikersgroep'; +$_lang["access_permissions_links"] = 'Gebruikersgroep of Paginagroep koppelingen'; +$_lang["access_permissions_links_tab"] = 'Geef aan welke Gebruikersgroepen toegang hebben tot bepaalde Paginagroepen (m.a.w. welke groepen Subpagina\'s kunnen maken of bewerken). Om een Pagina toe te wijzen aan een groep kiest u de Pagina uit de lijst en klikt u daarna op \'Verzenden\'. Om een Pagina uit een groep te halen klikt u op \'Verwijder\'.'; +$_lang["access_permissions_no_resources_in_group"] = 'Geen.'; +$_lang["access_permissions_no_users_in_group"] = 'Geen.'; +$_lang["access_permissions_off"] = 'Toegangsbeheer is niet geactiveerd. Dit betekent dat wijzigingen die hier worden gemaakt geen effect hebben zolang toegangsbeheer niet is geactiveerd in uw Configuratie.'; +$_lang["access_permissions_resource_groups"] = 'Paginagroepen'; +$_lang["access_permissions_resources_in_group"] = 'Pagina\'s in deze groep: '; +$_lang["access_permissions_resources_tab"] = 'Bekijk hier de Paginagroepen. U kunt ook nieuwe groepen maken, bestaande bewerken of verwijderen of nagaan welke Pagina deel uitmaakt van een groep. Door met de muis over de ID van de Pagina te bewegen, ziet u de naam ervan. Door de Pagina te bewerken kunt u de groepsrechten wijzigen.'; +$_lang["access_permissions_user_groups"] = 'Gebruikersgroepen'; +$_lang["access_permissions_user_message"] = 'Geef aan tot welke groepen deze Gebruiker behoort:'; +$_lang["access_permissions_users_in_group"] = 'Gebruikers in deze groep:'; +$_lang["access_permissions_users_tab"] = 'Bekijk de Gebruikersgroepen. U kunt ook nieuwe groepen maken, bestaande bewerken of verwijderen, of nagaan wie deel uitmaakt van een groep. Om een Gebruiker uit een groep te halen of aan een groep toe te wijzen, wijzigt u de gegevens van de Gebruiker. Beheerders (dit zijn Gebruikers met profiel ID 1) hebben altijd toegang tot alle Pagina\'s dus hoeft u hen niet toe te voegen aan een groep.'; +$_lang["account_email"] = 'E-mail account'; +$_lang["actioncomplete"] = 'Actie is succesvol afgerond!
          - Moment geduld. EVO wordt opgeschoond.'; +$_lang["activity_message"] = 'Deze lijst toont de laatst bewerkte/gemaakte pagina\'s:'; +$_lang["activity_title"] = 'Recent gemaakte/bewerkte Pagina\'s'; +$_lang["add"] = 'Toevoegen'; +$_lang["add_chunk"] = 'Chunk toevoegen'; +$_lang["add_doc"] = 'Pagina toevoegen'; +$_lang["add_folder"] = 'Nieuwe Map'; +$_lang["add_plugin"] = 'Plug-in toevoegen'; +$_lang["add_resource"] = 'Nieuwe Pagina'; +$_lang["add_snippet"] = 'Snippet toevoegen'; +$_lang["add_tag"] = 'Tag toevoegen'; +$_lang["add_template"] = 'Template toevoegen'; +$_lang["add_tv"] = 'TV toevoegen'; +$_lang["add_weblink"] = 'Nieuwe Weblink'; +$_lang["administrator_role_message"] = 'Dit profiel kan niet worden bewerkt of verwijderd.'; +$_lang["administrators"] = 'Administrators'; +$_lang["after_saving"] = 'Na opslaan'; +$_lang["alert_delete_self"] = 'U kunt uzelf niet verwijderen!'; +$_lang["alias"] = 'Alias'; +$_lang["all_doc_groups"] = 'Alle Paginagroepen (onbeveiligd)'; +$_lang["all_events"] = 'Alle gebeurtenissen'; +$_lang["all_usr_groups"] = 'Alle Gebruikersgroepen (onbeveiligd)'; +$_lang["allow_mgr_access"] = 'Toegang tot het Content Management Systeem'; +$_lang["allow_mgr_access_message"] = 'Deze optie geeft de gebruiker toegang tot het Content Management Systeem. NB: \'Nee\' betekent dat de gebruiker wordt doorverwezen naar de login pagina of de eerste pagina van de website.'; +$_lang["already_deleted"] = 'is reeds verwijderd.'; +$_lang["attachment"] = 'Bijlage'; +$_lang["author_infos"] = 'Auteur informatie'; +$_lang["automatic_alias_message"] = 'Kies \'Ja\' om het systeem automatisch een alias op basis van de titel van de Pagina te laten genereren wanneer de Pagina wordt opgeslagen.'; +$_lang["automatic_alias_title"] = 'Genereer automatisch een alias'; +$_lang["backup"] = 'Backup'; +$_lang["bk_manager"] = 'Backup'; +$_lang["block_message"] = 'Deze Gebruiker zal geblokkeerd worden na het opslaan van zijn Gebruikersgegevens!'; +$_lang["blocked_minutes_message"] = 'Geef hier het aantal minuten op dat een Gebruiker geblokkeerd zal worden als hij zijn maximaal aantal toegestane aanmeldpogingen heeft bereikt. A.u.b. alleen getallen gebruiken (geen komma\'s, spaties etc.)'; +$_lang["blocked_minutes_title"] = 'Minuten geblokkeerd'; +$_lang["cache_files_deleted"] = 'Deze bestanden werden verwijderd:'; +$_lang["cancel"] = 'Annuleren'; +$_lang["captcha_code"] = 'Beveiligingscode'; +$_lang["captcha_message"] = 'Door CAPTCHA aan te zetten, worden Gebruikers verplicht een beveiligingscode over te typen. Deze code is in een Afbeelding verwerkt en is daardoor onleesbaar voor machines en automatische programma\'s die erop uit zijn in te breken op uw website.'; +$_lang["captcha_title"] = 'CAPTCHA codes gebruiken'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join,Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_message"] = 'Vul hier een lijst van woorden in, van elkaar gescheiden door komma\'s, die gebruikt zal worden indien CAPTCHA is ingeschakeld. Het veld kan maximaal 255 tekens bevatten.'; +$_lang["captcha_words_title"] = 'CAPTCHA woorden'; +$_lang["category_heading"] = 'Categorie'; +$_lang["category_manager"] = 'Categorie Manager'; +$_lang["category_management"] = 'Categorie beheren'; +$_lang["manage_categories"] = 'Beheer categorieën'; +$_lang["category_msg"] = 'Bekijk en wijzig hier alle Elementen gegroepeerd per categorie.'; +$_lang["cfg_base_path"] = 'MODX_BASE_PATH'; +$_lang["cfg_base_url"] = 'MODX_BASE_URL'; +$_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; +$_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; +$_lang["cfg_site_url"] = 'MODX_SITE_URL'; +$_lang["change_name"] = 'Naam wijzigen'; +$_lang["change_password"] = 'Wachtwoord wijzigen'; +$_lang["change_password_confirm"] = 'Wachtwoord bevestigen'; +$_lang["change_password_message"] = 'Voer uw nieuwe wachtwoord in en voer het nogmaals in om te bevestigen. Uw wachtwoord moet minimaal 6 tekens lang zijn.'; +$_lang["change_password_new"] = 'Nieuw wachtwoord'; +$_lang["charset_message"] = 'Kies de standaard karakterset codering voor de [(modx_charset)] systeem variabele. Dit beïnvloed niet het Content Management Systeem.'; +$_lang["charset_title"] = 'Karakterset codering'; +$_lang["chunk"] = 'Chunk'; +$_lang["chunk_code"] = 'Chunk code (html)'; +$_lang["chunk_multiple_id"] = 'Fout: Meerdere Chunks delen deze unieke ID.'; +$_lang["chunk_no_exist"] = 'Chunk bestaat niet.'; +$_lang["cleaningup"] = 'Opschonen'; +$_lang["clean_uploaded_filename"] = 'Gebruik Transliteratie voor Bestanden Uploaden'; +$_lang["clean_uploaded_filename_message"] = 'Gebruik de standaard of transalias instelling voor de bestandsnaam om speciale karakters op te schonen'; +$_lang["clear_log"] = 'Logboek leegmaken'; +$_lang["click_to_context"] = 'Klik om het context menu te openen'; +$_lang["click_to_edit_title"] = 'Klik hier om deze regel te bewerken'; +$_lang["click_to_view_details"] = 'Klik hier voor details'; +$_lang["close"] = 'Sluiten'; +$_lang["code"] = 'Code'; +$_lang["collapse_tree"] = 'Website boomstructuur inschuiven'; +$_lang["comment"] = 'Opmerking'; +$_lang["configcheck_admin"] = 'Neem a.u.b. contact op met een systeembeheerder en geef deze melding door!'; +$_lang["configcheck_cache"] = 'Kan niet schrijven in de cache Map'; +$_lang["configcheck_cache_msg"] = 'EVO kan niet naar de cache map schrijven. EVO functioneert nog steeds zoals verwacht, maar er vindt geen caching plaats. Om dit op te lossen, maak de /cache/ map schrijfbaar.'; +$_lang["configcheck_configinc"] = 'Configuratiebestand heeft nog schrijfrechten'; +$_lang["configcheck_configinc_msg"] = 'Kwaadwillenden zouden mogelijk schade aan uw website kunnen toebrengen met alle gevolgen van dien. Zet uw configuratiebestand (/[+MGR_DIR+]/includes/config.inc.php) op alleen-lezen!'; +$_lang["configcheck_default_msg"] = 'Er is een ongedefinieerde waarschuwing gevonden. Dit is zeer vreemd.'; +$_lang["configcheck_errorpage_unavailable"] = 'Er is geen \'Fout\'-pagina voor uw website beschikbaar.'; +$_lang["configcheck_errorpage_unavailable_msg"] = 'Dit houdt in dat uw \'Fout\'-pagina niet toegankelijk is voor normale Webgebruikers of niet bestaat. Dit kan leiden tot een oneindige lus en veel foutmeldingen in uw logbestand. Zorg ervoor dat de Pagina niet aan een Webgebruikersgroep is toegewezen.'; +$_lang["configcheck_errorpage_unpublished"] = 'De \'Fout\'-pagina voor uw website is niet gepubliceerd of bestaat niet.'; +$_lang["configcheck_errorpage_unpublished_msg"] = 'Dit houdt in dat uw \'Fout\'-pagina niet toegankelijk is voor bezoekers. Publiceer de Pagina of zorg ervoor dat het is toegewezen aan een bestaande Pagina in de inhoudsopgave van uw website met het Beheer > Configuratie menu.'; +$_lang["configcheck_filemanager_path"] = 'Het momenteel ingestelde Bestandsbeheer pad lijkt onjuist te zijn.'; +$_lang["configcheck_filemanager_path_msg"] = 'Dit kan bijvoorbeeld gebeuren door uw installatie naar een andere directory of server te verhuizen. Controleer en update uw Evo systeemconfiguratie.'; +$_lang["configcheck_hide_warning"] = 'Niet meer tonen.'; +$_lang["configcheck_images"] = 'De Map images is niet schrijfbaar'; +$_lang["configcheck_images_msg"] = 'De Map images is niet schrijfbaar of bestaat niet. Dit betekent dat de Afbeeldingen beheer opties in de teksteditor niet werken!'; +$_lang["configcheck_installer"] = 'Het installatiebestand is nog niet verwijderd'; +$_lang["configcheck_installer_msg"] = 'De map /install bevat het installatieprogramma voor EVO. Stelt u zich eens voor wat er zou kunnen gebeuren als een boosaardig persoon deze map vindt en het installatieprogramma uitvoert! Ze komen waarschijnlijk niet te ver, omdat ze wat gebruikersinformatie voor de database moeten invoeren, maar het is nog steeds het beste om deze map van je server te verwijderen.'; +$_lang["configcheck_lang_difference"] = 'Ongeldig aantal regels in het vertaalbestand'; +$_lang["configcheck_lang_difference_msg"] = 'De taal die u heeft geselecteerd (Nederlands) heeft een verschillend aantal eenheden ten opzichte van de standaardtaal. Dit hoeft niet tot problemen te leiden, maar het is wel aan te raden om het huidige vertaalbestand te updaten.'; +$_lang["configcheck_notok"] = 'Één of meer configuratie opties zijn onjuist gebleken: '; +$_lang["configcheck_ok"] = 'Controle is geslaagd - er zijn geen onjuistheden gevonden.'; +$_lang["configcheck_php_gdzip"] = 'GD en/of Zip PHP extensies niet gevonden'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO heeft de GD- en Zip-extensie ingeschakeld voor PHP. Hoewel EVO zonder deze functies werkt, kunt u niet volledig profiteren van de ingebouwde bestandsbeheerder, afbeeldingseditor of Captcha voor aanmeldingen.'; +$_lang["configcheck_rb_base_dir"] = 'Het momenteel ingestelde basis Bestandsbeheer pad lijkt onjuist te zijn.'; +$_lang["configcheck_rb_base_dir_msg"] = 'Dit kan bijvoorbeeld gebeuren door uw installatie naar een andere directory of server te verplaatsen. Controleer en update uw Evo systeemconfiguratie.'; +$_lang["configcheck_register_globals"] = 'register_globals staat op AAN in uw php.ini configuratiebestand'; +$_lang["configcheck_register_globals_msg"] = 'Deze instelling maakt uw website veel gevoeliger voor Cross Site Scripting (XSS) aanvallen. Neem contact op met uw host over hoe u deze instelling kunt uitzetten.'; +$_lang["configcheck_title"] = 'Configuratietest'; +$_lang["configcheck_templateswitcher_present"] = 'TemplateSwitcher Plugin gevonden'; +$_lang["configcheck_templateswitcher_present_delete"] = 'Verwijder TemplateSwitcher'; +$_lang["configcheck_templateswitcher_present_disable"] = 'TemplateSwitcher uitschakelen'; +$_lang["configcheck_templateswitcher_present_msg"] = 'De TemplateSwitcher plugin geeft cache en prestatie problemen en er zou alleen gebruik van gemaakt moeten worden wanneer deze functie echt nodig is voor uw website.'; +$_lang["configcheck_unauthorizedpage_unavailable"] = 'Uw \'Niet Gemachtigd\'-pagina is niet gepubliceerd of bestaat niet.'; +$_lang["configcheck_unauthorizedpage_unavailable_msg"] = 'Dit houdt in dat uw \'Niet Gemachtigd\'-pagina niet toegankelijk is voor normale Webgebruikers of niet bestaat. Dit kan leiden tot een oneindige lus en veel foutmeldingen in uw logbestand. Zorg ervoor dat de Pagina niet aan een Webgebruikersgroep is toegewezen.'; +$_lang["configcheck_unauthorizedpage_unpublished"] = 'De \'Niet Gemachtigd\'-pagina die in de configuratie instellingen is aangegeven is niet gepubliceerd.'; +$_lang["configcheck_unauthorizedpage_unpublished_msg"] = 'Dit houdt in dat uw \'Niet Gemachtigd\'-pagina niet toegankelijk is voor bezoekers. Publiceer de Pagina of zorg ervoor dat het is toegewezen aan een bestaande Pagina in de inhoudsopgave van uw website met het Beheer > Configuratie menu.'; +$_lang["configcheck_validate_referer"] = 'Beveiliging Waarschuwing: HTTP Header Validatie'; +$_lang["configcheck_validate_referer_msg"] = 'De configuratie instelling Validate HTTP_REFERER headers? staat UIT. We raden aan deze AAN te zetten. Ga naar de Configuratie opties'; +$_lang["configcheck_warning"] = 'Configuratie waarschuwing:'; +$_lang["configcheck_what"] = 'Wat betekent dit?'; +$_lang["confirm_block"] = 'Weet u zeker dat u deze Gebruiker wilt blokkeren?'; +$_lang["confirm_delete_category"] = 'Weet u zeker dat u deze categorie wilt verwijderen?'; +$_lang["confirm_delete_eventlog"] = 'Weet u zeker dat u het logboek (events) wilt leegmaken?'; +$_lang["confirm_delete_file"] = 'Weet u zeker dat u dit bestand wilt verwijderen?\n\nHet zou kunnen dat hierdoor uw website niet meer werkt! Verwijder dit bestand uitsluitend indien u zeker bent dat u hiermee niks stuk maakt.'; +$_lang["confirm_delete_group"] = 'Weet u zeker dat u deze Groep wilt verwijderen?'; +$_lang["confirm_delete_htmlsnippet"] = 'Weet u zeker dat u deze Chunk wilt verwijderen?'; +$_lang["confirm_delete_keywords"] = 'Weet u zeker dat u deze keywords wilt verwijderen?'; +$_lang["confirm_delete_module"] = 'Weet u zeker dat u deze Module wilt verwijderen?'; +$_lang["confirm_delete_plugin"] = 'Weet u zeker dat u deze Plug-in wilt verwijderen?'; +$_lang["confirm_delete_record"] = 'Weet u zeker dat u de geselecteerde regels wilt verwijderen?'; +$_lang["confirm_delete_resource"] = 'Weet u zeker dat u deze Pagina wilt verwijderen?\nDan worden tevens alle Subpagina\'s verwijderd.'; +$_lang["confirm_delete_role"] = 'Weet u zeker dat u deze Rol wilt verwijderen?'; +$_lang["confirm_delete_snippet"] = 'Weet u zeker dat u deze Snippet wilt verwijderen?'; +$_lang["confirm_delete_tags"] = 'Weet u zeker dat u de geselecteerde \'META tags\' wilt verwijderen?'; +$_lang["confirm_delete_template"] = 'Weet u zeker dat u deze Template wilt verwijderen?'; +$_lang["confirm_delete_tmplvars"] = 'Weet u zeker dat u deze Template Variabele en alle opgeslagen waarden wilt verwijderen?'; +$_lang["confirm_delete_user"] = 'Weet u zeker dat u deze Gebruiker wilt verwijderen?'; +$_lang["confirm_duplicate_record"] = 'Weet u zeker dat u deze regel wilt dupliceren?'; +$_lang["confirm_empty_trash"] = 'Als u de prullenbak leegmaakt worden alle gemarkeerde Pagina\'s permanent verwijderd!\n\nDoorgaan?'; +$_lang["confirm_load_depends"] = 'Weet u zeker dat u dit scherm wilt verlaten? De afhankelijkheden van deze Module gaan daarbij verloren!'; +$_lang["confirm_name_change"] = 'Het veranderen van de Gebruikersnaam kan invloed hebben op gekoppelde applicaties.\n\n Weet u zeker dat u de Gebruikersnaam wilt veranderen?'; +$_lang["confirm_publish"] = '\n\nAls u deze Pagina nu publiceert, dan zal eventuele data van deze publicatie verloren gaan. Als u data t.a.v. (geen) publicatie wilt instellen of behouden, bewerk dan het bestand via de optie \'bewerken\'.\n\nDoorgaan?'; +$_lang["confirm_remove_locks"] = 'Soms sluiten Gebruikers hun browservenster gedurende het bewerken van Pagina\'s, Templates, Snippets of parsers. Het gevolg hiervan is dat het item waaraan ze aan het werken waren, geblokkeerd worden voor andere gebruikers. Door op OK te drukken worden alle blokkeringen opgeheven.\n\nDoorgaan?'; +$_lang["confirm_reset_sort_order"] = 'Weet u zeker dat u de \"sorteervolgorde/index\" van alle vermelde elementen naar 0 wilt resetten?'; +$_lang["confirm_resource_duplicate"] = 'Weet u zeker dat u deze Pagina wilt dupliceren?\nSubmappen en Pagina\'s zullen ook gedupliceerd worden.\n\n NB: Externe gegevens (bijv. keywords, aangepaste Template Variabelen, enz...) worden niet gedupliceerd.'; +$_lang["confirm_setting_language_change"] = 'U heeft de standaard waarde gewijzigd en zal de wijzigingen verliezen. Doorgaan?'; +$_lang["confirm_unblock"] = 'Weet u zeker dat u voor deze Gebruiker de blokkering wilt opheffen?'; +$_lang["confirm_undelete"] = '\n\nVan alle Subpagina\'s die gelijktijdig met deze Pagina verwijderd zijn, zal de verwijdering ongedaan worden gemaakt! Alle Subpagina\'s die eerder verwijderd zijn zullen verwijderd blijven.'; +$_lang["confirm_unpublish"] = '\n\nAls u de publicatie van deze Pagina ongedaan wilt maken, dan zal eventuele data van deze publicatie verloren gaan. Als u data van deze publicatie wilt behouden, bewerk dan het bestand met de optie \'bewerken\'.\n\nDoorgaan?'; +$_lang["confirm_unzip_file"] = 'Weet u zeker dat dit bestand uitgepakt moet worden?\n\nBestaande bestanden zullen overschreven worden.'; +$_lang["could_not_find_user"] = 'Gebruiker niet gevonden'; +$_lang["create_folder_here"] = 'Nieuwe Map hier aanmaken'; +$_lang["create_resource_here"] = 'Nieuwe Pagina'; +$_lang["create_resource_title"] = 'Nieuw Element'; +$_lang["create_weblink_here"] = 'Nieuwe Weblink'; +$_lang["createdon"] = 'Datum aangemaakt'; +$_lang["create_new"] = 'Nieuwe aanmaken'; +$_lang["credits"] = 'Dankwoord'; +$_lang["credits_shouts_msg"] = '

          EVO wordt beheerd en bijgehouden op evo.im.

          '; +$_lang["custom_contenttype_message"] = 'Voeg eigen \'content types\' toe. Vul een nieuw type in en klik op de knop \'Toevoegen\' om een nieuw type toe te voegen'; +$_lang["custom_contenttype_title"] = 'Toegevoegde content types'; +$_lang["database_charset"] = 'Database Karakterset'; +$_lang["database_collation"] = 'Database Collatie Karakterset'; +$_lang["database_name"] = 'Database naam'; +$_lang["database_overhead"] = 'Opmerking: Overhead is ongebruikte ruimte gereserveerd door MySQL. Om deze ruimte vrij te maken klikt u op de link in de kolom Overhead van de tabel.'; +$_lang["database_server"] = 'Database server'; +$_lang["database_table_clickbackup"] = 'Backup & download'; +$_lang["database_table_clickhere"] = 'Klik hier'; +$_lang["database_table_datasize"] = 'Bestandsgrootte'; +$_lang["database_table_droptablestatements"] = 'Genereer DROP TABLE commando\'s.'; +$_lang["database_table_effectivesize"] = 'Effectieve grootte'; +$_lang["database_table_indexsize"] = 'Index grootte'; +$_lang["database_table_overhead"] = 'Overhead'; +$_lang["database_table_records"] = 'Rijen'; +$_lang["database_table_tablename"] = 'Tabel naam'; +$_lang["database_table_totals"] = 'Totaal'; +$_lang["database_table_totalsize"] = 'Totale grootte'; +$_lang["database_tables"] = 'Database tabellen'; +$_lang["database_version"] = 'Database versie'; +$_lang["date"] = 'Datum'; +$_lang["datechanged"] = 'Wijzigingsdatum'; +$_lang["datepicker_offset"] = 'Kalender verschil'; +$_lang["datepicker_offset_message"] = 'Het aantal jaar in het verleden dat getoond dient te worden in de kalender.'; +$_lang["datetime_format"] = 'Datum formaat'; +$_lang["datetime_format_message"] = 'Het formaat van de datums in het Content Management Systeem.'; +$_lang["default"] = 'Standaard:'; +$_lang["defaultcache_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard cachebaar te maken.'; +$_lang["defaultcache_title"] = 'Standaard cachebaar'; +$_lang["defaultmenuindex_message"] = 'Kies \'Ja\' om automatisch verhogen van de menu-index standaard te maken.'; +$_lang["defaultmenuindex_title"] = 'Standaard menu indexering'; +$_lang["defaultpublish_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard te publiceren.'; +$_lang["defaultpublish_title"] = 'Standaard gepubliceerd'; +$_lang["defaultsearch_message"] = 'Kies \'Ja\' om alle nieuwe Pagina\'s standaard doorzoekbaar te maken.'; +$_lang["defaultsearch_title"] = 'Standaard doorzoekbaar'; +$_lang["defaulttemplate_message"] = 'Kies hier de standaard Template voor nieuwe Pagina\'s. In de Pagina-editor kunt u eventueel een andere Template kiezen; de keuze die u hier maakt bepaalt louter welke template standaard ingesteld staat.'; +$_lang["defaulttemplate_title"] = 'Standaard template'; +$_lang["defaulttemplate_logic_title"] = 'Automatisch Template toewijzen'; +$_lang["defaulttemplate_logic_general_message"] = 'Nieuwe pagina\'s zullen de volgende template hebben, en terugvallen op hogere niveau\'s:'; +$_lang["defaulttemplate_logic_system_message"] = 'Systeem: Systeem Standaard Template.'; +$_lang["defaulttemplate_logic_parent_message"] = 'Onderliggend: dezelfde template als de onderliggende map.'; +$_lang["defaulttemplate_logic_sibling_message"] = 'Zelfde niveau: dezelfde template als andere pagina\'s in de zelfde map.'; +$_lang["delete"] = 'Verwijderen'; +$_lang["delete_resource"] = 'Verwijder Pagina'; +$_lang["delete_tags"] = 'Tags verwijderen'; +$_lang["deleting_file"] = 'Verwijderen bestand `%s`: '; +$_lang["description"] = 'Beschrijving'; +$_lang["deselect_keywords"] = 'Zoekwoorden opschonen'; +$_lang["deselect_metatags"] = 'Verwijder \'META tags\''; +$_lang["disabled"] = 'Uitgeschakeld'; +$_lang["doc_data_title"] = 'Paginadata weergeven'; +$_lang["documentation"] = 'Documentatie'; +$_lang["duplicate"] = 'Dupliceren'; +$_lang["duplicate_alias_found"] = 'Pagina \'%s\' heeft de alias \'%s\' al in gebruik. Kies een unieke alias voor deze Pagina.'; +$_lang["duplicate_alias_message"] = 'Kies \'Ja\' om dubbele aliassen toe te staan wanneer een Pagina wordt opgeslagen. NB: Deze optie kan niet worden gebruikt in combinatie met \'Zoekmachine vriendelijke URL\'s\'.'; +$_lang["duplicate_alias_title"] = 'Dubbele aliassen toestaan'; +$_lang["duplicate_name_found_general"] = 'Er is al een %s genaamd \'%s\'. Geef a.u.b. een unieke naam op.'; +$_lang["duplicate_name_found_module"] = 'Er is al een Module genaamd \'%s\'. Geef a.u.b. een unieke naam op.'; +$_lang["duplicated_el_suffix"] = 'Dupliceer'; +$_lang["edit"] = 'Bewerk'; +$_lang["edit_resource"] = 'Bewerk Pagina'; +$_lang["edit_resource_title"] = 'Maak/wijzig Pagina'; +$_lang["edit_settings"] = 'Configuratie'; +$_lang["editedon"] = 'Datum wijziging'; +$_lang["editing_file"] = 'Bewerkt bestand: '; +$_lang["editor_css_path_message"] = 'Geef het pad op naar het CSS-bestand dat u wilt gebruiken binnen de teksteditor. De beste manier om dit pad op te geven is vanaf de \'root\' (basismap) van de server, bijvoorbeeld: /assets/site/style.css. Laat dit veld leeg indien u geen CSS-bestand wilt gebruiken in de teksteditor.'; +$_lang["editor_css_path_title"] = 'Pad naar CSS-bestand'; +$_lang["element"] = 'Element'; +$_lang["element_categories"] = 'Gecombineerde weergave'; +$_lang["element_filter_msg"] = 'Zoek in lijst'; +$_lang["element_management"] = 'Elementen beheren'; +$_lang["element_name"] = 'Element naam'; +$_lang["element_selector_msg"] = 'Selecteer de Element(en) uit onderstaande lijst en klik op de knop \'Toevoegen\'.'; +$_lang["element_selector_title"] = 'Selecteer een Element'; +$_lang["elements"] = 'Elementen'; +$_lang["email"] = 'E-mail adres'; +$_lang["email_sent"] = 'E-mail verzonden'; +$_lang["emailsender_message"] = 'Het e-mailadres van de beheerder van deze site. Dit e-mailadres zal worden gebruikt voor systeem notificaties ed.'; +$_lang["emailsender_title"] = 'E-mail adres'; +$_lang["emailsubject_default"] = 'Uw inloggegevens'; +$_lang["emailsubject_message"] = 'Specificeer het onderwerp van de aanmeldings e-mail.'; +$_lang["emailsubject_title"] = 'Onderwerp e-mail'; +$_lang["empty_folder"] = 'Deze Map is leeg'; +$_lang["empty_recycle_bin"] = 'Prullenbak leegmaken'; +$_lang["empty_recycle_bin_empty"] = 'Er zijn geen verwijderde Pagina\'s om permanent te verwijderen.'; +$_lang["enable_resource"] = 'Elementen inschakelen'; +$_lang["enable_sharedparams"] = 'Delen van parameters inschakelen'; +$_lang["enable_sharedparams_msg"] = 'NB: Bovenstaande \'Globally Unique ID (GUID)\' wordt gebruikt om deze Module en de gedeelde parameters uniek te identificeren. De GUID wordt ook gebruikt om een link te creëeren tussen de Module en Plug-ins of Snippets die de gedeelde parameters gebruiken. '; +$_lang["enabled"] = 'Ingeschakeld'; +$_lang["error"] = 'Fout'; +$_lang["error_sending_email"] = 'Fout bij verzenden e-mail'; +$_lang["errorpage_message"] = 'Vul hier een gepubliceerde en publiek toegankelijke Pagina ID in waar u Gebruikers naar wilt doorsturen als ze een niet-bestaande Pagina willen bekijken.'; +$_lang["errorpage_title"] = 'Fout pagina'; +$_lang["event_id"] = 'Gebeurtenis (event) Id'; +$_lang["eventlog"] = 'Logboek (gebeurtenissen)'; +$_lang["eventlog_msg"] = 'In het logboek voor gebeurtenissen worden informatie, waarschuwingen en foutmeldingen opgeslagen van het \'Content Management Systeem\'. De kolom \'bron\' geeft het onderdeel van het \'Content Management Systeem\' waarop het bericht betrekking heeft.'; +$_lang["eventlog_viewer"] = 'Systeem gebeurtenissen'; +$_lang["everybody"] = 'Iedereen'; +$_lang["existing_category"] = 'Bestaande categorie'; +$_lang["expand_tree"] = 'Website boomstructuur uitklappen'; +$_lang["export_site"] = 'Exporteer Website'; +$_lang["export_site_cacheable"] = 'Ook niet-cachebare bestanden:'; +$_lang["export_site_exporting_document"] = '[+status+] [+url+] - [+pagetitle+] ([+id+])
          '; +$_lang["export_site_failed"] = 'Mislukt!'; +$_lang["export_site_failed_no_open"] = 'Kan bestand niet openen: '; +$_lang["export_site_failed_no_retrieve"] = 'Kan Pagina niet ophalen.'; +$_lang["export_site_failed_no_write"] = 'Kan niet naar bestand schrijven.'; +$_lang["export_site_html"] = 'Exporteer website naar HTML'; +$_lang["export_site_maxtime"] = 'Maximale export tijd:'; +$_lang["export_site_maxtime_message"] = 'Specificeer het aantal seconden dat EVO mag gebruiken om de site te exporteren (overschrijven van PHP-instellingen). Voer 0 in voor onbeperkte tijd. Let op, het instellen van 0 of een heel hoog aantal kan vreemde dingen doen op uw server en wordt niet aanbevolen.'; +$_lang["export_site_message"] = '

          Gebruik dit om de hele site te exporteren naar statische HTML-bestanden. Houd er echter rekening mee dat u in dat geval veel van de EVO functionaliteit verliest:

          • Het lezen van pagina\'s op de geëxporteerde bestanden wordt niet opgenomen.
          • Interactieve fragmenten werkt NIET in geëxporteerde bestanden
          • Alleen gewone resources worden geëxporteerd, webkoppelingen worden niet geëxporteerd.
          • Het exportproces kan mislukken als uw bronnen fragmenten bevatten die doorsturingen bevatten.
          • li>
          • Afhankelijk van hoe u uw bronnen, stylesheets en afbeeldingen hebt geschreven, is het ontwerp van uw site mogelijk beschadigd. Om dit op te lossen, bewaart/verplaats je de geëxporteerde bestanden naar dezelfde map waar het hoofdindexbestand EVO index.php zich bevindt.

          Vul het formulier in en druk op \'Exporteren\' om het exporteren te starten werkwijze. De gecreëerde bestanden worden opgeslagen in de map/assets/export, waarbij de URL-aliassen van Resources worden gebruikt als bestandsnamen, indien mogelijk. Tijdens het exporteren van uw site is het het beste om het EVO configuratie tem \'Friendly URL aliases\' in te stellen op \'yes\'. Afhankelijk van de grootte van uw site kan het exporteren even duren.

          Bestaande bestanden worden overschreven door de nieuwe bestanden als hun namen identiek zijn!

          '; +$_lang["export_site_numberdocs"] = '

          %s Pagina\'s gevonden om te exporteren ...

          '; +$_lang["export_site_prefix"] = 'Bestand voorvoegsel:'; +$_lang["export_site_start"] = 'Start exporteren'; +$_lang["export_site_success"] = 'Gelukt!'; +$_lang["export_site_success_skip_dir"] = 'Sla deze Map over.'; +$_lang["export_site_success_skip_doc"] = 'Sla deze Pagina over.'; +$_lang["export_site_suffix"] = 'Bestand achtervoegsel:'; +$_lang["export_site_target_unwritable"] = 'De Map waarnaar u wilt exporteren is niet toegankelijk. Verzeker uzelf ervan dat u schrijfrechten in deze Map heeft, en probeer het daarna opnieuw.'; +$_lang["export_site_time"] = 'Exporteren gereed. Het exporteren duurde %s seconden.'; +$_lang["failed_login_message"] = 'Geef het maximum aantal aanmeldpogingen op voordat een Gebruiker geblokkeerd wordt.'; +$_lang["failed_login_title"] = 'Mislukte aanmeldpogingen'; +$_lang["fe_editor_lang_message"] = 'Kies een taal die de editor gebruikt als front-end editor taal.'; +$_lang["fe_editor_lang_title"] = 'Front-end editor taal'; +$_lang["file_delete_file"] = 'Verwijder bestand'; +$_lang["file_delete_folder"] = 'Verwijder Map'; +$_lang["file_deleted"] = 'Gelukt!'; +$_lang["file_download_file"] = 'Bestand downloaden'; +$_lang["file_download_unzip"] = 'Bestand uitpakken'; +$_lang["file_folder_chmod_error"] = 'Geen rechten om machtigingen te wijzigen.'; +$_lang["file_folder_created"] = 'Map is aangemaakt!'; +$_lang["file_folder_deleted"] = 'Map is verwijderd!'; +$_lang["file_folder_not_created"] = 'Kan Map niet aanmaken'; +$_lang["file_folder_not_deleted"] = 'Map kan niet verwijderd worden. Zorg ervoor dat de Map leeg is alvorens deze te verwijderen!'; +$_lang["file_not_deleted"] = 'Mislukt!'; +$_lang["file_not_saved"] = 'Het bestand kan niet worden bewaard. Verzeker uzelf ervan dat u schijfrechten in deze Map heeft!'; +$_lang["file_saved"] = 'Bestand succesvol bewaard!'; +$_lang["file_unzip"] = 'Uitpakken is gelukt!'; +$_lang["file_unzip_fail"] = 'Uitpakken is mislukt!'; +$_lang["filemanager_path_message"] = 'In IIS wordt de instelling document root vaak niet correct ingevuld. Deze wordt door de bestandsbeheerder gebruikt om te bepalen wat u kunt zien. Als u problemen ondervindt bij het gebruik van Bestandsbeheer, zorg er dan voor dat dit pad naar de hoofdmap van uw EVO installatie wijst.'; +$_lang["filemanager_path_title"] = 'Pad naar de bestanden'; +$_lang["files_access_denied"] = 'Toegang geweigerd!'; +$_lang["files_data"] = 'Gegevens'; +$_lang["files_dir_listing"] = 'Bestandenlijst voor:'; +$_lang["files_directories"] = 'Mappen'; +$_lang["files_directory_is_empty"] = 'Deze map is leeg'; +$_lang["files_dirwritable"] = 'Map schrijfbaar?'; +$_lang["files_editfile"] = 'Bestand bewerken'; +$_lang["files_file_type"] = 'Bestandstype: '; +$_lang["files_filename"] = 'Bestandsnaam'; +$_lang["files_fileoptions"] = 'Opties'; +$_lang["files_files"] = 'Bestanden'; +$_lang["files_filesize"] = 'Bestandsgrootte'; +$_lang["files_filetype_notok"] = 'Het uploaden van dergelijke bestanden is niet toegestaan!'; +$_lang["files_management"] = 'Bestandsbeheer'; +$_lang["files_management_no_permission"] = 'Je hebt niet genoeg rechten om deze bestanden te bekijken of te bewerken. Vraag de beheerder toegang voor %s.'; +$_lang["files_modified"] = 'Gewijzigd'; +$_lang["files_top_level"] = 'Naar het hoogste niveau'; +$_lang["files_up_level"] = 'Een niveau omhoog'; +$_lang["files_upload_copyfailed"] = 'Het bestand kon niet naar de gewenste Map gekopieerd worden - uploaden mislukt!'; +$_lang["files_upload_error"] = 'Fout'; +$_lang["files_upload_error0"] = 'Er was een probleem bij het uploaden.'; +$_lang["files_upload_error1"] = 'Het bestand dat u probeert te uploaden is te groot.'; +$_lang["files_upload_error2"] = 'Het bestand dat u probeert te uploaden is te groot.'; +$_lang["files_upload_error3"] = 'Het bestand dat u probeert te uploaden is slechts gedeeltelijk geupload.'; +$_lang["files_upload_error4"] = 'Selecteer een bestand om te uploaden.'; +$_lang["files_upload_error5"] = 'Er was een probleem bij het uploaden.'; +$_lang["files_upload_inhibited_msg"] = 'Upload optie niet toegelaten - controleer of uploaden ondersteund wordt en of de Map voor PHP schrijfbaar is.'; +$_lang["files_upload_ok"] = 'Het uploaden van het bestand is succesvol verlopen!'; +$_lang["files_upload_permissions_error"] = 'Mogelijk rechten probleem - de Map waar u naartoe wilt uploaden heeft schrijfrechten nodig van uw webserver.'; +$_lang["files_uploadfile"] = 'Bestand uploaden'; +$_lang["files_uploadfile_msg"] = 'Selecteer een bestand om te uploaden:'; +$_lang["files_uploading"] = '%s naar %s/ uploaden.'; +$_lang["files_viewfile"] = 'Bestand weergeven'; +$_lang["folder"] = 'Map'; +$_lang["forgot_password_email_fine_print"] = '* De URL hierboven verloopt als u uw wachtwoord verandert of na vandaag.'; +$_lang["forgot_password_email_instructions"] = 'Daar kunt u uw wachtwoord wijzigen via de menu-optie Mijn Profiel.'; +$_lang["forgot_password_email_intro"] = 'Er is een verzoek gedaan om het wachtwoord van uw account te wijzigen.'; +$_lang["forgot_password_email_link"] = 'Klik hier om het proces af te ronden.'; +$_lang["forgot_your_password"] = 'Wachtwoord vergeten?'; +$_lang["friday"] = 'Vrijdag'; +$_lang["friendly_alias_message"] = 'Wanneer \'Friendly URLs\' is ingeschakeld wordt er een pagina URL gebruikt in plaats van het pagina ID. Dit wordt voor zoekoptimalisatie aangeraden.'; +$_lang["friendly_alias_title"] = 'Gebruik zoekmachine vriendelijke URL\'s'; +$_lang["friendlyurls_message"] = 'Gebruik zoekmachine vriendelijke URL\'s op Apache webservers met mod_rewrite of IIS met externe Plug-ins. Zie voor meer informatie het bij de distributie toegevoegde .htaccess bestand.'; +$_lang["friendlyurls_title"] = 'Zoekmachine vriendelijke URL\'s'; +$_lang["friendlyurlsprefix_message"] = 'Een voorvoegsel van \'pagina\' zorgt ervoor dat de normale URL /index.php?id=2 naar de zoekmachine vriendelijke URL /pagina2.html wordt omgezet (ervan uitgaande dat het achtervoegsel op .html staat ingesteld!).'; +$_lang["friendlyurlsprefix_title"] = 'Voorvoegsel zoekmachine vriendelijke URL\'s'; +$_lang["friendlyurlsuffix_message"] = 'Elk achtervoegsel die u invoert zal werken, inclusief een leeg achtervoegsel. Bijvoorbeeld \'.html\' zorgt ervoor dat er achter alle zoekmachine vriendelijke URL\'s \'.html\' wordt toegevoegd.'; +$_lang["friendlyurlsuffix_title"] = 'Achtervoegsel zoekmachine vriendelijke URL\'s'; +$_lang["functionnotimpl"] = 'Sorry!'; +$_lang["functionnotimpl_message"] = 'Deze functie is nog niet ontwikkeld.'; +$_lang["further_info"] = 'Meer informatie'; +$_lang["global_tabs"] = 'Algemene tabbladen'; +$_lang["go"] = 'Start'; +$_lang["group_access_permissions"] = 'Groepstoegang'; +$_lang['group_tvs'] = 'TV groep'; +$_lang["guid"] = 'GUID'; +$_lang["help"] = 'Help'; +$_lang["help_msg"] = '

          U kunt ondersteuning verkrijgen door de EVO-forums te bezoeken of bekijk de EVO documentatie site.

          '; +$_lang["help_title"] = 'Help'; +$_lang["hide_tree"] = 'Website boomstructuur verbergen'; +$_lang["home"] = 'Start'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; +$_lang["htmlsnippet_desc"] = 'Beschrijving'; +$_lang["htmlsnippet_management_msg"] = 'Hier kunt u Chunks toevoegen en bewerken.'; +$_lang["htmlsnippet_msg"] = 'Chunk toevoegen of bewerken. Denk eraan, Chunks zijn stukjes HTML code en kunnen geen PHP code bevatten.'; +$_lang["htmlsnippet_name"] = 'Naam Chunk'; +$_lang["htmlsnippet_title"] = 'Maak/wijzig Chunk'; +$_lang["icon"] = 'Icoon'; +$_lang["icon_description"] = 'CSS class b.v. \'fa fa-star\''; +$_lang["id"] = 'ID'; +$_lang["illegal_parent_child"] = 'Hoofdpagina toekenning:\n\nPagina is een kind van de geselecteerde Pagina.'; +$_lang["illegal_parent_self"] = 'Hoofdpagina toekenning::\n\nDe geselecteerde Pagina kan niet zijn eigen Hoofdpagina zijn.'; +$_lang["images_management"] = 'Beheer afbeeldingen'; +$_lang["import_files_found"] = '%s Pagina\'s gevonden om te importeren...'; +$_lang["import_params"] = 'Gedeelde Module parameters importeren'; +$_lang["import_params_msg"] = 'De parameters en instellingen van een Module kunnen worden geïmporteerd door de naam van de Module te selecteren uit het bovenstaande menu. NB: Modules verschijnen in het menu wanneer de Module is ingesteld voor het \'delen van parameters\' en wanneer bij de Module is opgegeven dat de Module afhankelijk is van deze Snippet/Plug-in.'; +$_lang["import_parent_resource"] = 'Hoofdpagina:'; +$_lang["import_site"] = 'Importeer Website'; +$_lang["import_site_failed"] = 'Fout!'; +$_lang["import_site_failed_db_error"] = 'Een database fout trad op tijdens het klonen van de Pagina: '; +$_lang["import_site_failed_no_open_dir"] = 'Kon de Map niet openen: '; +$_lang["import_site_failed_no_retrieve_file"] = 'Kon bestand niet ophalen: '; +$_lang["import_site_html"] = 'Importeer website vanuit HTML'; +$_lang["import_site_importing_document"] = 'Bestand importeren %s '; +$_lang["import_site_maxtime"] = 'Maximum tijd voor importeren:'; +$_lang["import_site_maxtime_message"] = 'Hier kunt u de maximale tijd specificeren die het Content Management Systeem mag gebruiken om de website te importeren (dit heeft voorrang op de PHP instellingen). Gebruik 0 voor \'oneindige\' tijd. Let op: door 0 of een erg lange tijd in te stellen kunnen er vreemde dingen gebeuren met uw server en wordt derhalve niet aanbevolen.'; +$_lang["import_site_message"] = 'Importeer een volledige HTML website naar uw database. Let op: De bestanden die geïmporteerd moeten worden moeten in de \'assets/import\' Map geplaatst worden.

          Vul het formulier in en kies \'Importeer\' om het process te starten. De geïmporteerde bestanden worden in de geselecteerde locatie opgeslagen waarbij (indien mogelijk) gebruik gemaakt wordt van de bestandsnamen voor Pagina aliassen waar mogelijk en de Paginatitel tag voor de Paginatitel.'; +$_lang["import_site_skip"] = 'Overgeslagen!'; +$_lang["import_site_start"] = 'Start importeren'; +$_lang["import_site_success"] = 'OK!'; +$_lang["import_site_time"] = 'Importeren gereed. Het importeren duurde %s seconden.'; +$_lang["inbox"] = 'Inbox'; +$_lang["info"] = 'Info'; +$_lang["information"] = 'Informatie'; +$_lang["inline"] = 'Geïntegreerd'; +$_lang["insert"] = 'Invoegen'; +$_lang["maxImageWidth"] = 'Maximum afbeelding breedte'; +$_lang["maxImageHeight"] = 'Maximum afbeelding hoogte'; +$_lang["thumbWidth"] = 'Maximum thumbnail breedte'; +$_lang["thumbHeight"] = 'Maximum thumbnail hoogte'; +$_lang["thumbsDir"] = 'Thumbnail locatie'; +$_lang["jpegQuality"] = 'JPEG compressie'; +$_lang["denyZipDownload"] = 'Zip bestanden downloaden uitschakelen'; +$_lang["denyExtensionRename"] = 'Uitschakelen hernoemen van bestandsextenties'; +$_lang["maxImageWidth_message"] = 'Bij het uploaden van een afbeelding met een te grootte resolutie wordt deze automatisch verkleind. Stel 0 in om dit te vermijden.'; +$_lang["maxImageHeight_message"] = 'Bij het uploaden van een afbeelding met een te grootte resolutie wordt deze automatisch verkleind. Stel 0 in om dit te vermijden.'; +$_lang["thumbWidth_message"] = 'Maximum thumbnail breedte.'; +$_lang["thumbHeight_message"] = 'Maximum thumbnail hoogte.'; +$_lang["thumbsDir_message"] = 'De naam van de map (preview).'; +$_lang["jpegQuality_message"] = 'JPEG compressie kwaliteit van thumbnails en verschaalde afbeeldingen'; +$_lang["showHiddenFiles"] = 'Toon verborgen bestanden in de Bestandsbrowser'; +$_lang["keyword"] = 'Keyword'; +$_lang["keywords"] = 'Keywords (sleutelwoorden)'; +$_lang["keywords_intro"] = 'Een keyword kan worden veranderd door in het invulveld naast het keyword de nieuwe waarde op te geven. Vink \'verwijder keyword\' aan om een keyword te verwijderen. Let erop dat verwijderen voorrang heeft op bewerken.'; +$_lang["language_message"] = 'Selecteer de taal voor de Manager.'; +$_lang["language_title"] = 'Manager taalkeuze'; +$_lang["last_update"] = 'Laatste update'; +$_lang["launch_site"] = 'Website bekijken'; +$_lang["license"] = 'Licentie'; +$_lang["link_attributes"] = 'Link attributen'; +$_lang["link_attributes_help"] = 'Hier kunt u attributen opgeven voor de link naar deze Pagina, zoals target="_blank" of rel="external".'; +$_lang["list_mode"] = 'Lijst weergave aan/uit - geeft alle rijen in de tabel weer.'; +$_lang["loading_doc_tree"] = 'Website boomstructuur wordt geladen...'; +$_lang["loading_menu"] = 'Menu wordt geladen...'; +$_lang["loading_page"] = 'Even geduld, de pagina wordt geladen..'; +$_lang["localtime"] = 'Lokale tijd'; +$_lang["lock_htmlsnippet"] = 'Blokkeer Chunk wijzigingen.'; +$_lang["lock_htmlsnippet_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Chunk wijzigen.'; +$_lang["lock_module"] = 'Blokkeer Module wijzigingen.'; +$_lang["lock_module_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Module bewerken.'; +$_lang["lock_msg"] = '%s bewerkt nu %s. Bewerking is niet mogelijk totdat deze Gebruiker klaar is.'; +$_lang["lock_plugin"] = 'Blokkeer Plug-in wijzigingen.'; +$_lang["lock_plugin_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Plug-in wijzigen.'; +$_lang["lock_settings_msg"] = '%s is deze instellingen aan het bewerken. Bewerking is niet mogelijk totdat deze Gebruiker klaar is.'; +$_lang["lock_snippet"] = 'Blokkeer Snippet wijzigingen.'; +$_lang["lock_snippet_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Snippet wijzigen.'; +$_lang["lock_template"] = 'Blokkeer Template wijzigingen.'; +$_lang["lock_template_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Template wijzigen.'; +$_lang["lock_tmplvars"] = 'Blokkeer Template Variabele wijzigingen.'; +$_lang["lock_tmplvars_msg"] = 'Alleen beheerders (profiel ID 1) kunnen deze Template Variabele wijzigen.'; +$_lang["locked"] = 'Geblokkeerd'; +$_lang["login_allowed_days"] = 'Toegestane dagen'; +$_lang["login_allowed_days_message"] = 'Selecteer de dagen dat deze Gebruiker mag inloggen.'; +$_lang["login_allowed_ip"] = 'Toegestane IP Adressen'; +$_lang["login_allowed_ip_message"] = 'Voer de IP adressen in waarop deze Gebruiker zich mag aanmelden. NB: Meerdere IP adressen worden gescheiden met een komma (,)'; +$_lang["login_button"] = 'Aanmelden'; +$_lang["login_cancelled_install_in_progress"] = 'Installatie / update van deze website is momenteel in gang gezet. Probeer het a.u.b. nogmaals over een paar minuten!'; +$_lang["login_cancelled_site_was_updated"] = 'Installatie / update op deze website is uitgevoerd, meld u a.u.b. nogmaals aan!'; +$_lang["login_captcha_message"] = ' De beheerder heeft de Captcha validatie ingeschakeld. Dit betekent dat u deze beveiligingscode hier moet ingeven.\n\nIndien de code slecht leesbaar is, kan u op de code zelf klikken om een nieuwe code te laten aanmaken.'; +$_lang["login_homepage"] = 'Login Startpagina'; +$_lang["login_homepage_message"] = 'Voer de ID in van de Pagina waarnaar Gebruikers worden verwezen als ze aangemeld zijn. NB: Zorg ervoor dat de ID dat u invoert een bestaand, gepubliceerd en voor deze Gebruiker toegankelijke Pagina is!'; +$_lang["login_message"] = 'Om Evolution te gebruiken dient u zich eerst aan te melden. Let op: hierbij wordt onderscheid gemaakt tussen hoofd- en kleine letters!'; +$_lang["logo_slogan"] = 'EVO Content Manager - \nCreate and do more with less'; +$_lang["logout"] = 'Afmelden'; +$_lang["long_title"] = 'Uitgebreide titel'; +$_lang["mail_check_timeperiod_message"] = 'Hoe vaak in het Content Management Systeem gecontroleerd wordt op nieuwe berichten, in seconden.'; +$_lang["mail_check_timeperiod_title"] = 'Controleer e-mail tijdsinterval'; +$_lang["manage_depends"] = 'Beheer afhankelijkheden'; +$_lang["manage_files"] = 'Bestandsbeheer'; +$_lang["manage_htmlsnippets"] = 'Chunks'; +$_lang["manage_metatags"] = 'Beheer META tags en keywords'; +$_lang["manage_modules"] = 'Modulebeheer'; +$_lang["manage_plugins"] = 'Plug-ins'; +$_lang["manage_snippets"] = 'Snippets'; +$_lang["manage_templates"] = 'Templates'; +$_lang["manage_documents"] = 'Documenten'; +$_lang["manager"] = 'Content Management Systeem'; +$_lang["manager_lockout_message"] = 'U bent momenteel aangemeld bij het Content Management Systeem. Als u uw sessie wilt sluiten, klik dan a.u.b. op de knop "Afmelden".

          Wilt u naar uw start- of homepage klik dan op de knop "Start".'; +$_lang["manager_permissions"] = 'Toegangsbeheer'; +$_lang["manager_theme"] = 'Manager thema'; +$_lang["manager_theme_message"] = 'Selecteer een thema voor het Content Management Systeem.'; +$_lang["messages"] = 'Berichten'; +$_lang["messages_all"] = 'Iedereen'; +$_lang["messages_compose"] = 'Bericht opstellen'; +$_lang["messages_forward"] = 'Doorsturen'; +$_lang["messages_from"] = 'Van'; +$_lang["messages_group"] = 'Een groep'; +$_lang["messages_inbox"] = 'Inbox'; +$_lang["messages_message"] = 'Bericht'; +$_lang["messages_no_messages"] = 'Er zijn geen berichten in de Inbox.'; +$_lang["messages_not_allowed_to_read"] = 'U bent niet bevoegd om dit bericht te lezen!'; +$_lang["messages_private"] = 'Privé'; +$_lang["messages_read_message"] = 'Bericht lezen'; +$_lang["messages_reply"] = 'Beantwoord'; +$_lang["messages_select_group"] = 'Selecteer een groep'; +$_lang["messages_select_user"] = 'Selecteer een Gebruiker'; +$_lang["messages_send"] = 'Verzenden'; +$_lang["messages_send_to"] = 'Verzend aan'; +$_lang["messages_sent"] = 'Verstuurd op'; +$_lang["messages_subject"] = 'Onderwerp'; +$_lang["messages_system_user"] = '[Systeem]'; +$_lang["messages_title"] = 'Berichten'; +$_lang["messages_user"] = 'Een Gebruiker'; +$_lang["meta_keywords"] = 'META keywords'; +$_lang["metatag_intro"] = 'Op deze Pagina kunt u \'META tags\' toevoegen, verwijderen en bewerken. De \'META tags\' kunt u aan Pagina\'s toevoegen op de META keywords tab bij het bewerken van een Pagina. Vul een naam en een waarde in voor een nieuwe tag en klik op de \'Tag toevoegen\' knop om een nieuwe \'tag\' toe te voegen. Klik op de naam van een \'tag\' om deze te bewerken.'; +$_lang["metatag_notice"] = 'Misschien wilt u een HTML Reference Guide raadplegen voor meer informatie. Dit is geen complete lijst van mogelijke Meta Tags.'; +$_lang["metatags"] = 'META tags'; +$_lang["mgr_access_permissions"] = 'Content Management Systeem toegangsbeheer'; +$_lang["mgr_login_start"] = 'Content Management Systeem Login Startpagina'; +$_lang["mgr_login_start_message"] = 'Geef de ID van de Pagina dat wordt getoond nadat een Gebruiker is ingelogd. NB: Let erop dat de ID bestaat, dat de Pagina gepubliceerd is en dat de Pagina toegankelijk is voor de Gebruiker!'; +$_lang["mgrlog_action"] = 'Handeling'; +$_lang["mgrlog_actionid"] = 'Handeling ID'; +$_lang["mgrlog_anyall"] = 'Enkele/Alles'; +$_lang["mgrlog_datecheckfalse"] = 'checkdate() retourneerde \'false\'.'; +$_lang["mgrlog_datefr"] = 'Datum van'; +$_lang["mgrlog_dateinvalid"] = 'Onjuiste datumindeling.'; +$_lang["mgrlog_dateto"] = 'Datum tot'; +$_lang["mgrlog_emptysrch"] = 'Uw zoekopdracht gaf geen resultaten (d.w.z. geen overeenkomstige loggegevens gevonden).'; +$_lang["mgrlog_field"] = 'Veld'; +$_lang["mgrlog_itemid"] = 'Item ID'; +$_lang["mgrlog_itemname"] = 'Item naam'; +$_lang["mgrlog_msg"] = 'Bericht'; +$_lang["mgrlog_noquery"] = 'Nog geen zoekopdracht opgegeven.'; +$_lang["mgrlog_qresults"] = 'Zoekresultaten'; +$_lang["mgrlog_query"] = 'Zoek loggegevens'; +$_lang["mgrlog_query_msg"] = 'Maak a.u.b. een selectie om de logboeken te bekijken. U kunt log regels op datum selecteren, maar let erop dat de ingegeven einddatums niet inbegrepen zijn - om elke log regel te selecteren van 01-01-2004, vul bij \'datum van\' 01-01-2004 in en bij \'datum tot\' 02-01-2004.

          Melding en aktie zijn meestal hetzelfde. Als u een specifieke melding zoekt, kunt u het beste de aktie op \'Enkele/Alles\' zetten.'; +$_lang["mgrlog_results"] = 'Aantal gevonden'; +$_lang["mgrlog_searchlogs"] = 'Logboeken doorzoeken'; +$_lang["mgrlog_sortinst"] = 'Sorteer de tabel door op de kolom-kop te klikken. Als de logboeken te groot worden, leeg de logfile om alle huidige loggegevens te wissen. Dit kan niet ongedaan gemaakt worden!'; +$_lang["mgrlog_time"] = 'Tijd'; +$_lang["mgrlog_user"] = 'Gebruiker'; +$_lang["mgrlog_username"] = 'Gebruikersnaam'; +$_lang["mgrlog_value"] = 'waarde'; +$_lang["mgrlog_view"] = 'Bekijk Content Management Systeem logboeken'; +$_lang["module_code"] = 'Module code (php)'; +$_lang["module_config"] = 'Module configuratie'; +$_lang["module_desc"] = 'Beschrijving'; +$_lang["module_disabled"] = 'Module uitgeschakeld'; +$_lang["module_edit_click_title"] = 'Klik hier om de Module te bewerken'; +$_lang["module_group_access_msg"] = 'Selecteer de Gebruikersgroepen die deze Module binnen het Content Management Systeem mogen uitvoeren.'; +$_lang["module_management"] = 'Modulebeheer'; +$_lang["module_management_msg"] = 'Hier kunt u Modules toevoegen, bewerken en uitvoeren.
          Klik op het icoon van de Module om de Module uit te voeren. Klik op de naam van de Module om de Module te bewerken.'; +$_lang["module_msg"] = 'Module toevoegen of bewerken. Een Module is een verzameling van Elementen zoals Plug-ins, Snippets, etc.'; +$_lang["module_name"] = 'Modulenaam'; +$_lang["module_resource_msg"] = 'Elementen waarvan deze Module afhankelijk is kunnen hier worden aangepast. Kies de knop \'toevoegen\' hieronder om een Element toe te voegen.'; +$_lang["module_resource_title"] = 'Module afhankelijkheden'; +$_lang["module_title"] = 'Modules bewerken/toevoegen'; +$_lang["module_viewdepend_msg"] = 'Een Module is afhankelijk van bepaalde Elementen. Klik op de knop \'Beheer afhankelijkheden\' om deze te bewerken.'; +$_lang["modules"] = 'Modules'; +$_lang["modx_news"] = 'Nieuwsmeldingen'; +$_lang["modx_news_tab"] = 'EVO Nieuws'; +$_lang["modx_news_title"] = 'EVO Nieuws'; +$_lang["modx_security_notices"] = 'Beveiligingswaarschuwingen'; +$_lang["modx_version"] = 'EVO versie'; +$_lang["monday"] = 'Maandag'; +$_lang["move"] = 'Verplaatsen'; +$_lang["move_resource"] = 'Verplaats Pagina'; +$_lang["move_resource_message"] = 'Verplaats een Pagina inclusief Subpagina\'s door een nieuw Hoofdpagina in de Website boomstructuur te selecteren. Als de geselecteerde Pagina geen Map is, wordt er een Map van gemaakt. Selecteer een nieuw Hoofdpagina in de Website boomstructuur.'; +$_lang["move_resource_new_parent"] = 'Selecteer een nieuwe Hoofdpagina in de Website boomstructuur.'; +$_lang["move_resource_title"] = 'Pagina verplaatsen'; +$_lang["name"] = 'Naam'; +$_lang["new_category"] = 'Nieuwe categorie'; +$_lang["new_file_permissions_message"] = 'Bij het uploaden van een nieuw bestand in het Bestandsbeheer, zal het Bestandsbeheer proberen de bestandsrechten aan te passen volgens de instellingen die hier zijn opgegeven. Het kan zijn dat dit niet met alle installaties werkt, zoals met IIS, in welk geval u de rechten handmatig moet instellen.'; +$_lang["new_file_permissions_title"] = 'Nieuwe bestandsrechten'; +$_lang["new_folder_permissions_message"] = 'Als u een nieuwe Map aanmaakt in het Bestandsbeheer, zal het Bestandsbeheer proberen de Maprechten aan te passen volgens de instellingen die hier zijn opgegeven. Het kan zijn dat dit niet met alle installaties werkt, zoals met IIS, in welk geval u de rechten handmatig moet instellen.'; +$_lang["new_folder_permissions_title"] = 'Nieuwe map rechten'; +$_lang["new_htmlsnippet"] = 'Nieuwe Chunk toevoegen'; +$_lang["new_keyword"] = 'Voeg een keyword toe:'; +$_lang["new_module"] = 'Nieuwe Module toevoegen'; +$_lang["new_parent"] = 'Nieuwe Hoofdpagina toevoegen'; +$_lang["new_plugin"] = 'Nieuwe Plug-in toevoegen'; +$_lang["new_role"] = 'Nieuwe Rol'; +$_lang["new_snippet"] = 'Nieuwe Snippet toevoegen'; +$_lang["new_template"] = 'Nieuwe Template toevoegen'; +$_lang["new_tmplvars"] = 'Nieuwe Template Variabele toevoegen'; +$_lang["new_user"] = 'Nieuwe Manager gebruiker'; +$_lang["new_web_user"] = 'Nieuwe Webgebruiker toevoegen'; +$_lang["new_resource"] = 'Nieuwe pagina'; +$_lang["no"] = 'Nee'; +$_lang["no_active_users_found"] = 'Geen actieve Gebruikers gevonden.'; +$_lang["no_activity_message"] = 'U heeft nog geen Pagina\'s gemaakt/gewijzigd.'; +$_lang["no_category"] = 'Niet gecategoriseerd'; +$_lang["no_docs_pending_publishing"] = 'Geen Pagina\'s om te publiceren.'; +$_lang["no_docs_pending_pubunpub"] = 'Geen gebeurtenissen gevonden.'; +$_lang["no_docs_pending_unpublishing"] = 'Geen Pagina\'s om publicatie te beëindigen.'; +$_lang["no_edits_creates"] = 'Geen wijzigingen of toevoegingen gevonden.'; +$_lang["no_groups_found"] = 'Geen groepen gevonden.'; +$_lang["no_keywords_found"] = 'Er zijn momenteel geen keywords.'; +$_lang["no_records_found"] = 'Geen resultaten gevonden.'; +$_lang["no_results"] = 'Geen resultaten gevonden.'; +$_lang["nologentries_message"] = 'Voer hier het aantal logresultaten in dat per Pagina in het logboek moet worden weergegeven.'; +$_lang["nologentries_title"] = 'Aantal log resultaten'; +$_lang["nomessages_message"] = 'U kunt hier het aantal berichten instellen dat bij het bekijken van berichten in de inbox moet worden weergegeven.'; +$_lang["nomessages_title"] = 'Aantal berichten'; +$_lang["none"] = 'Geen'; +$_lang["noresults_message"] = 'Het aantal regels dat wordt weergegeven in lijsten met bijvoorbeeld zoekresultaten'; +$_lang["noresults_title"] = 'Aantal regels'; +$_lang["not_deleted"] = 'is niet verwijderd!'; +$_lang["not_set"] = 'Niet ingesteld'; +$_lang["offline"] = 'Offline'; +$_lang["online"] = 'Online'; +$_lang["onlineusers_action"] = 'Handeling'; +$_lang["onlineusers_actionid"] = 'Handeling ID'; +$_lang["onlineusers_ipaddress"] = 'IP adres Gebruiker'; +$_lang["onlineusers_lasthit"] = 'Laatste bezoek'; +$_lang["onlineusers_message"] = 'In deze lijst vindt u de actieve Gebruikers van de laatste 20 minuten (De huidige tijd is '; +$_lang["onlineusers_title"] = 'Gebruikers online'; +$_lang["onlineusers_user"] = 'Gebruiker'; +$_lang["onlineusers_userid"] = 'Gebruikers ID'; +$_lang["optimize_table"] = 'Klik hier om deze tabel te optimaliseren'; +$_lang["page_data_alias"] = 'Alias'; +$_lang["page_data_cacheable"] = 'Cache-baar'; +$_lang["page_data_cacheable_help"] = 'Dit zorgt ervoor dat deze Pagina in de cache opgeslagen kan worden. Zorg dat deze optie niet aangevinkt is als uw Pagina Snippets bevat!'; +$_lang["page_data_cached"] = 'Bron uit cache gehaald:'; +$_lang["page_data_changes"] = 'Veranderingen'; +$_lang["page_data_contentType"] = 'Soort inhoud'; +$_lang["page_data_contentType_help"] = 'Kies de soort van inhoud voor deze Pagina. Bent u hierover onzeker, laat dan de keuze op text/html.'; +$_lang["page_data_created"] = 'Gemaakt'; +$_lang["page_data_edited"] = 'Gewijzigd'; +$_lang["page_data_editor"] = 'Bewerk met de geavanceerde teksteditor'; +$_lang["page_data_folder"] = 'Pagina is een Map'; +$_lang["page_data_general"] = 'Algemeen'; +$_lang["page_data_markup"] = 'Opmaak/structuur'; +$_lang["page_data_mgr_access"] = 'Content Management Systeem toegang'; +$_lang["page_data_notcached"] = 'Deze Pagina is (nog) niet gecached.'; +$_lang["page_data_publishdate"] = 'Publicatiedatum'; +$_lang["page_data_publishdate_help"] = 'Wanneer u een publicatiedatum instelt, wordt de Pagina vanaf deze datum gepubliceerd. Klik op het kalenderpictogram om een datum te selecteren, of op het pictogram ernaast om de publicatiedatum te verwijderen. Dit houdt in dat de Pagina niet automatisch wordt gepubliceerd.'; +$_lang["page_data_published"] = 'Gepubliceerd'; +$_lang["page_data_searchable"] = 'Doorzoekbaar'; +$_lang["page_data_searchable_help"] = 'U kunt deze optie aanvinken om het doorzoeken van de Pagina toe te staan. U kunt het ook voor andere doeleinden gebruiken in uw Snippets.'; +$_lang["page_data_source"] = 'Bron'; +$_lang["page_data_status"] = 'Status'; +$_lang["page_data_template"] = 'Template'; +$_lang["page_data_template_help"] = 'Hier kunt u de Template voor de Pagina selecteren.'; +$_lang["page_data_title"] = 'Pagina gegevens'; +$_lang["page_data_unpublishdate"] = 'Datum einde publicatie'; +$_lang["page_data_unpublishdate_help"] = 'Wanneer u een datum einde publicatie instelt, wordt vanaf deze datum de publicatie beëindigd. Klik op het kalenderpictogram om een datum te selecteren, of op het pictogram ernaast om de datum waarop de publicatie beëindigd wordt, te verwijderen. Dit houdt in dat de publicatie van de Pagina niet automatisch beëindigd wordt.'; +$_lang["page_data_unpublished"] = 'Niet-gepubliceerd'; +$_lang["page_data_web_access"] = 'Webtoegang'; +$_lang["pagetitle"] = 'Titel van de Pagina'; +$_lang["pagination_table_first"] = 'Eerste'; +$_lang["pagination_table_gotopage"] = 'Ga naar Pagina'; +$_lang["pagination_table_last"] = 'Laatste'; +$_lang["paging_first"] = 'eerste'; +$_lang["paging_last"] = 'laatste'; +$_lang["paging_next"] = 'volgende'; +$_lang["paging_prev"] = 'vorige'; +$_lang["paging_showing"] = 'Toon'; +$_lang["paging_to"] = 'tot'; +$_lang["paging_total"] = 'totaal'; +$_lang["parameter"] = 'Parameter'; +$_lang["parse_docblock"] = 'Parse DocBlock'; +$_lang["parse_docblock_msg"] = 'Let op (!): Hersteld de oorspronkelijke naam, configuratie, beschrijving en categorie naar standaard instellingen door het parsen van de broncode.'; +$_lang["password"] = 'Wachtwoord'; +$_lang["password_change_request"] = 'Verzoek wachtwoord wijzigen'; +$_lang["password_gen_gen"] = 'Wachtwoord laten genereren'; +$_lang["password_gen_length"] = 'Het wachtwoord moet minstens 6 karakters lang zijn.'; +$_lang["password_gen_method"] = 'Hoe wilt u het wachtwoord voor deze Gebruiker aanmaken?'; +$_lang["password_gen_specify"] = 'Laat mij het wachtwoord specificeren:'; +$_lang["password_method"] = 'Hoe wilt u deze Gebruiker op de hoogte stellen van het nieuwe wachtwoord?'; +$_lang["password_method_email"] = 'Verstuur het nieuwe wachtwoord via e-mail.'; +$_lang["password_method_screen"] = 'Geef het nieuwe wachtwoord op het beeldscherm weer.'; +$_lang["password_msg"] = 'Het nieuwe wachtwoord voor %s is %s
          '; +$_lang["php_version_check"] = 'Je gebruikt PHP versie %s%. Voer een upgrade van uw PHP-installatie uit!'; +$_lang["plugin"] = 'Plug-in'; +$_lang["plugins"] = 'Plugins'; +$_lang["plugin_code"] = 'Plug-in code (php)'; +$_lang["plugin_config"] = 'Plug-in configuratie'; +$_lang["plugin_desc"] = 'Beschrijving'; +$_lang["plugin_disabled"] = 'Plug-in uitgeschakeld'; +$_lang["plugin_event_msg"] = 'Selecteer de gebeurtenissen (events) waar deze Plug-in op moet reageren.'; +$_lang["plugin_management_msg"] = 'Hier kunt u Plug-ins toevoegen of bewerken.'; +$_lang["plugin_msg"] = 'Hier kunt u Plug-ins toevoegen of bewerken. Plug-ins zijn \'ruwe\' PHP instructies die uitgevoerd worden als de geselecteerde systeemgebeurtenissen (events) optreden.'; +$_lang["plugin_name"] = 'Naam Plug-in'; +$_lang["plugin_priority"] = 'Wijzig Plug-in event volgorde'; +$_lang["plugin_priority_instructions"] = 'Om de volgorde van de Plug-ins te veranderen versleep onder elke gebeurtenis (event) de titel. De eerste Plug-in die uitgevoerd dient te worden dient bovenaan te staan.'; +$_lang["plugin_priority_title"] = 'Plug-in uitvoer volgorde'; +$_lang["purge_plugin"] = 'Verwijder verouderde Plug-ins'; +$_lang["plugin_title"] = 'Aanmaken/bewerken Plug-in'; +$_lang["preview"] = 'Voorbeeld'; +$_lang["preview_msg"] = 'Dit is een voorbeeld van uw laatst opgeslagen wijzigingen. Klik hier om uw huidige wijzigingen op te slaan en te vernieuwen.'; +$_lang["preview_resource"] = 'Pagina voorbeeld'; +$_lang["private"] = 'Gesloten'; +$_lang["public"] = 'Open'; +$_lang["publish_date"] = 'Publicatiedatum'; +$_lang["publish_events"] = 'Publiceer gebeurtenissen'; +$_lang["publish_resource"] = 'Publiceer Pagina'; +$_lang["rb_base_dir_message"] = 'Voer het fysieke pad naar de map Bestandsbrowser in. Deze instelling wordt meestal automatisch gegenereerd. Als u IIS echter gebruikt, is het mogelijk dat EVO het pad niet zelfstandig kan bewerken, waardoor de bestandsbrowser een foutmelding geeft.'; +$_lang["rb_base_dir_title"] = 'Pad naar de bestanden'; +$_lang["rb_base_url_message"] = 'Voer de virtuele pad naar de bestanden map in. Deze instelling wordt meestal automatisch gegenereerd. Als u IIS echter gebruikt, is het mogelijk dat EVO de URL niet zelf kan bewerken, waardoor de bestandsbrowser een foutmelding vertoont. In dat geval kunt u hier de URL van de afbeeldingenlijst invoeren.'; +$_lang["rb_base_url_title"] = 'URL naar de bestanden'; +$_lang["rb_message"] = 'Kies \'ja\' om de bestandsbeheer in te schakelen. Met bestandsbeheer is het voor Gebruikers eenvoudig mogelijk om bestanden zoals afbeeldingen, flash en media op de server te plaatsen.'; +$_lang["rb_title"] = 'Bestandsbeheer inschakelen'; +$_lang["rb_webuser_message"] = 'Wilt u de Webgebruikers toestaan de bestanden op de server te beheren? WAARSCHUWING: Door dit toe te staan kunnen Webgebruikers dezelfde bestanden beheren als de website beheerder(s). Gebruik dit alleen voor Webgebruikers die u vertrouwd.'; +$_lang["rb_webuser_title"] = 'Webgebruikers'; +$_lang["recent_docs"] = 'Recente Pagina\'s'; +$_lang["recommend_setting_change_title"] = 'Aan te raden aangepaste instelling '; +$_lang["recommend_setting_change_description"] = 'Uw website is niet geconfigureerd om de HTTP_REFERER te valideren voor inkomende Manager aanvragen. We raden aan deze instelling aan te zetten om CSRF (Cross Site Request Forgery) aanvallen te minimaliseren.'; +$_lang["references"] = 'Referenties'; +$_lang["refresh_cache"] = 'Cache: %s bestanden in cache-map gevonden en %d bestanden verwijderd.

          Nieuwe cache-bestanden worden aangemaakt wanneer Pagina\'s worden opgevraagd.'; +$_lang["refresh_published"] = '%s Pagina\'s zijn gepubliceerd.'; +$_lang["refresh_site"] = 'Cache legen'; +$_lang["refresh_title"] = 'Website vernieuwen'; +$_lang["refresh_tree"] = 'Website boomstructuur vernieuwen'; +$_lang["refresh_unpublished"] = '%s Pagina\'s zijn niet gepubliceerd.'; +$_lang["release_date"] = 'Publicatie datum'; +$_lang["remember_last_tab"] = 'Tabs onthouden'; +$_lang["remember_last_tab_message"] = 'Manager pagina\'s met Tabs laden met de laatst bekeken tab in plaats van standaard de eerst bekeken tab'; +$_lang["remember_username"] = 'Onthoud mij'; +$_lang["remove"] = 'Verwijderen'; +$_lang["remove_date"] = 'Verwijder datum'; +$_lang["remove_locks"] = 'Blokkeringen opheffen'; +$_lang["rename"] = 'Hernoem'; +$_lang["reports"] = 'Rapportage'; +$_lang["report_issues"] = 'Problemen rapporteren'; +$_lang["require_tagname"] = 'Een naam voor de \'tag\' is vereist.'; +$_lang["require_tagvalue"] = 'Een waarde voor de \'tag\' is vereist.'; +$_lang["reserved_name_warning"] = 'U heeft een gereserveerde naam gebruikt.'; +$_lang["reset"] = 'Reset'; +$_lang["reset_failedlogins"] = 'reset'; +$_lang["reset_sort_order"] = 'Herstel sorteer instellingen'; +$_lang["resource"] = 'Pagina'; +$_lang["resource_alias"] = 'Pagina alias'; +$_lang["resource_alias_help"] = 'Hier kunt u voor deze Pagina een alias invoeren. Dit zal de Pagina toegangelijk maken als u gebruik maakt van http://uwsite.nl/alias. Dit werkt alleen als u gebruik maakt van zoekmachine vriendelijke URL\'s.'; +$_lang["resource_content"] = 'Paginainhoud'; +$_lang["resource_description"] = 'Beschrijving'; +$_lang["resource_description_help"] = 'Geef een eventuele beschrijving op van deze Pagina.'; +$_lang["resource_duplicate"] = 'Dupliceer Pagina'; +$_lang["resource_long_title_help"] = 'Geef een langere titel op van deze Pagina. Dit kan handig zijn voor zoekmachines en is misschien ook een betere beschrijving van uw Pagina.'; +$_lang["resource_metatag_help"] = 'Selecteer de \'META tags\' of keywords die u aan de Pagina wilt toekennen. Met de CTRL-toets (cmd in Mac OS) kunnen meerdere META tags worden geselecteerd'; +$_lang["resource_opt_contentdispo"] = 'Content-Disposition'; +$_lang["resource_opt_contentdispo_help"] = 'Gebruik \'Content-Disposition\' om aan te geven hoe de Pagina wordt behandeld door de webbrowser. Gebruik \'Bijlage\' voor separate bestanden.'; +$_lang["resource_opt_emptycache"] = 'Cache leegmaken?'; +$_lang["resource_opt_emptycache_help"] = 'Als dit veld wordt aangevinkt, wordt de cache leeggemaakt nadat u de pagina hebt opgeslagen. Op deze manier zien uw bezoekers geen oudere versie van de pagina.'; +$_lang["resource_opt_folder"] = 'Map?'; +$_lang["resource_opt_folder_help"] = 'U kunt deze optie aanvinken om deze pagina als een map voor andere pagina\'s te gebruiken. U hoeft hier niet te veel aandacht aan te besteden, aangezien Evolution map instellingen over het algemeen automatisch verzorgt.'; +$_lang["resource_opt_menu_index"] = 'Menu index'; +$_lang["resource_opt_menu_index_help"] = 'De menu-index is een veld waarmee u het sorteren van Pagina\'s kunt beïnvloeden, voornamelijk in menu\'s en opsommingen. U kunt het ook voor andere doeleinden gebruiken in uw Snippets.'; +$_lang["resource_opt_menu_title"] = 'Menu titel'; +$_lang["resource_opt_menu_title_help"] = 'De menu titel is een optioneel veld dat gebruikt wordt om een korte titel te tonen in menu Snippet(s) of Modules.'; +$_lang["resource_opt_published"] = 'Gepubliceerd'; +$_lang["resource_opt_published_help"] = 'Vink deze optie aan zodat uw Pagina automatisch gepubliceerd wordt na het opslaan.'; +$_lang["resource_opt_richtext"] = 'Teksteditor gebruiken?'; +$_lang["resource_opt_richtext_help"] = 'Laat dit aangevinkt staan om de teksteditor voor geavanceerde tekstopmaak bij het bewerken Pagina\'s te gebruiken. Als uw Pagina Javascript code of formulieren bevat is het verstandig om deze optie uit te zetten, zodat u in HTML-modus kunt werken. Dit zorgt ervoor dat uw Pagina correct wordt weergegeven.'; +$_lang["resource_opt_show_menu"] = 'Zichtbaar in menu'; +$_lang["resource_opt_show_menu_help"] = 'Gebruikt door een aantal Plug-ins/Modules om deze Pagina niet te tonen in een menu.'; +$_lang["resource_opt_trackvisit_help"] = 'Sla elke bezoeker op deze Pagina op in het logboek.'; +$_lang["resource_overview"] = 'Pagina overzicht'; +$_lang["resource_parent"] = 'Hoofdpagina'; +$_lang["resource_parent_help"] = 'Selecteer een Pagina in de Website boomstructuur om het als Hoofdpagina van deze Pagina in te stellen.'; +$_lang["resource_permissions_error"] = 'Koppel deze Pagina aan tenminste 1 Paginagroep waar u toegang tot heeft.'; +$_lang["resource_setting"] = 'Pagina instellingen'; +$_lang["resource_summary"] = 'Samenvatting (introductietekst)'; +$_lang["resource_summary_help"] = 'Typ een korte beschrijving van de Pagina.'; +$_lang["resource_title"] = 'Titel'; +$_lang["resource_title_help"] = 'U kunt hier de titel van de Pagina opgeven. Vermijdt het gebruik van backslashes in de naam!'; +$_lang["resource_to_be_moved"] = 'De te verplaatsen Pagina'; +$_lang["resource_type"] = 'Resource Type'; +$_lang["resource_type_message"] = 'Verwijzingen naar weblinks Bronnen op internet, inclusief een andere interne bron, een externe pagina of een afbeelding of ander bestand op internet. Webkoppelingen moeten een tekst/html internetmediatype en inline content afhandeling hebben.'; +$_lang["resource_type_weblink"] = 'Weblink'; +$_lang["resource_type_webpage"] = 'Webpagina'; +$_lang["resource_weblink_help"] = 'Typ het adres van het object dat u wilt verwijzen met deze weblink. Als alternatief kunt u deze invoegen via de bestand browser of gebruik het selectie icoon en kies een bron van de site van de paginaboom aan de linker kant.'; +$_lang["resources_in_container"] = 'Pagina\'s in deze Map'; +$_lang["resources_in_container_no"] = 'Deze Map bevat geen Subpagina\'s.'; +$_lang["role"] = 'Rol'; +$_lang["role_about"] = 'Infopagina weergeven'; +$_lang["role_access_persmissions"] = 'Toegangsrechten'; +$_lang["role_actionok"] = '\'Bewerking is voltooid\'-scherm weergeven'; +$_lang["role_assets_images"] = 'Beheer afbeeldingen'; +$_lang["role_assets_files"] = 'Beheer bestanden'; +$_lang["role_bk_manager"] = 'Backupbeheer gebruiken'; +$_lang["role_cache_refresh"] = 'De cache van de website leegmaken'; +$_lang["role_category_manager"] = 'Gebruik de Categorie Manager'; +$_lang["role_change_password"] = 'Wachtwoord wijzigen'; +$_lang["role_change_resourcetype"] = 'Pagina type aanpassen'; +$_lang["role_chunk_management"] = 'Chunk beheer'; +$_lang["role_config_management"] = 'Configuratiebeheer'; +$_lang["role_content_management"] = 'Inhoud beheer'; +$_lang["role_create_chunk"] = 'Nieuwe Chunks maken'; +$_lang["role_create_doc"] = 'Nieuwe Pagina\'s maken'; +$_lang["role_create_plugin"] = 'Nieuwe Plug-ins maken'; +$_lang["role_create_snippet"] = 'Nieuwe Snippets maken'; +$_lang["role_create_template"] = 'Nieuwe website Templates maken'; +$_lang["role_credits"] = 'Dankwoord weergeven'; +$_lang["role_delete_chunk"] = 'Chunks verwijderen'; +$_lang["role_delete_doc"] = 'Pagina\'s verwijderen'; +$_lang["role_delete_eventlog"] = 'Verwijder logboek (events)'; +$_lang["role_delete_module"] = 'Module verwijderen'; +$_lang["role_delete_plugin"] = 'Plug-ins verwijderen'; +$_lang["role_delete_role"] = 'Rollen verwijderen'; +$_lang["role_delete_snippet"] = 'Snippets verwijderen'; +$_lang["role_delete_template"] = 'Templates verwijderen'; +$_lang["role_delete_user"] = 'Verwijder manager gebruikers'; +$_lang["role_delete_web_user"] = 'Webgebruikers verwijderen'; +$_lang["role_edit_chunk"] = 'Chunks bewerken'; +$_lang["role_edit_doc"] = 'Een Pagina bewerken'; +$_lang["role_edit_doc_metatags"] = '\'META tags\' en keywords van Pagina bewerken'; +$_lang["role_edit_module"] = 'Module bewerken'; +$_lang["role_edit_plugin"] = 'Plug-ins bewerken'; +$_lang["role_edit_role"] = 'Rollen bewerken'; +$_lang["role_edit_settings"] = 'Website instellingen veranderen'; +$_lang["role_edit_snippet"] = 'Snippets bewerken'; +$_lang["role_edit_template"] = 'Website Templates bewerken'; +$_lang["role_edit_user"] = 'Bewerk manager gebruikers'; +$_lang["role_edit_web_user"] = 'Webgebruikers bewerken'; +$_lang["role_empty_trash"] = 'Verwijderde Pagina\'s permanent verwijderen'; +$_lang["role_errors"] = 'Waarschuwingsvenster weergeven'; +$_lang["role_eventlog_management"] = 'Logboek beheer (events)'; +$_lang["role_export_static"] = 'Exporteer statische HTML'; +$_lang["role_file_management"] = 'Bestandsbeheer'; +$_lang["role_file_manager"] = 'Gebruik bestandsbeheer (volledige toegang)'; +$_lang["role_frames"] = 'Verzoek om Content Management Systeem venster'; +$_lang["role_help"] = 'Help Pagina\'s weergeven'; +$_lang["role_home"] = 'Verzoek om Content Management Systeem Intropagina'; +$_lang["role_import_static"] = 'Importeer HTML'; +$_lang["role_logout"] = 'Afmelden uit de beheerder'; +$_lang["role_manage_metatags"] = 'Beheer \'META tags\' en keywords'; +$_lang["role_management_msg"] = 'Hier kunt u kiezen welke Rol u wenst te wijzigen.'; +$_lang["role_management_title"] = 'Rollen'; +$_lang["role_messages"] = 'Berichten weergeven/versturen'; +$_lang["role_module_management"] = 'Modulebeheer'; +$_lang["role_name"] = 'Naam Rol'; +$_lang["role_new_module"] = 'Nieuwe Module maken'; +$_lang["role_new_role"] = 'Nieuwe Rollen maken'; +$_lang["role_new_user"] = 'Maak nieuwe manager gebruikers aan'; +$_lang["role_new_web_user"] = 'Webgebruikers toevoegen'; +$_lang["role_plugin_management"] = 'Plug-inbeheer'; +$_lang["role_publish_doc"] = 'Pagina\'s publiceren'; +$_lang["role_remove_locks"] = 'Blokkeringen opheffen'; +$_lang["role_role_management"] = 'Rollen'; +$_lang["role_run_module"] = 'Module uitvoeren'; +$_lang["role_save_chunk"] = 'Chunks opslaan'; +$_lang["role_save_doc"] = 'Pagina\'s opslaan'; +$_lang["role_save_module"] = 'Module opslaan'; +$_lang["role_save_password"] = 'Wachtwoord opslaan'; +$_lang["role_save_plugin"] = 'Plug-ins opslaan'; +$_lang["role_save_role"] = 'Rollen opslaan'; +$_lang["role_save_snippet"] = 'Snippets opslaan'; +$_lang["role_save_template"] = 'Templates opslaan'; +$_lang["role_save_user"] = 'Manager gebruikers opslaan'; +$_lang["role_save_web_user"] = 'Webgebruikers opslaan'; +$_lang["role_snippet_management"] = 'Snippetbeheer'; +$_lang["role_template_management"] = 'Templatebeheer'; +$_lang["role_title"] = 'Rol aanmaken/bewerken'; +$_lang["role_udperms"] = 'Toegangsrechtenbeheer'; +$_lang["role_user_management"] = 'Manager gebruikersbeheer'; +$_lang["role_view_docdata"] = 'Paginagegevens weergeven'; +$_lang["role_view_eventlog"] = 'Bekijk logboek (events)'; +$_lang["role_view_logs"] = 'Systeemlogboek weergeven'; +$_lang["role_view_unpublished"] = 'Bekijk niet gepubliceerde Pagina\'s'; +$_lang["role_web_access_persmissions"] = 'Webtoegangsbeheer'; +$_lang["role_web_user_management"] = 'Webgebruikersbeheer'; +$_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; +$_lang["rss_url_news_message"] = 'Voer de URL in voor de Nieuws Feed.'; +$_lang["rss_url_news_title"] = 'RSS nieuws feed'; +$_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; +$_lang["rss_url_security_message"] = 'Voer de URL in voor de beveiligingsfeed.'; +$_lang["rss_url_security_title"] = 'RSS Beveiliging Feed'; +$_lang["run_module"] = 'Module uitvoeren'; +$_lang["saturday"] = 'Zaterdag'; +$_lang["save"] = 'Opslaan'; +$_lang["save_all_changes"] = 'Bewaar alle wijzigingen'; +$_lang["save_tag"] = 'Tag opslaan'; +$_lang["saving"] = 'Bezig met opslaan, een moment geduld a.u.b...'; +$_lang["search"] = 'Zoeken'; +$_lang["search_criteria"] = 'Zoekcriteria'; +$_lang["search_criteria_content"] = 'Op inhoud zoeken'; +$_lang["search_criteria_content_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in de inhoud.'; +$_lang["search_criteria_id"] = 'Op ID zoeken'; +$_lang["search_criteria_id_msg"] = 'Voer de ID van de Pagina in om de Pagina snel te vinden.'; +$_lang["search_criteria_top"] = 'Zoeken in belangrijkste velden'; +$_lang["search_criteria_top_msg"] = 'Pagetitel, Uitgebreide titel, URL, ID'; +$_lang["search_criteria_template_id"] = 'Op template ID zoeken'; +$_lang["search_criteria_template_id_msg"] = 'Zoek alle pagina\'s die de gekozen template gebruikt.'; +$_lang["search_criteria_url_msg"] = 'Zoek pagina met exacte URL.'; +$_lang["search_criteria_longtitle"] = 'Zoek op uitgebreide titel'; +$_lang["search_criteria_longtitle_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in hun uitgebreide titel.'; +$_lang["search_criteria_title"] = 'Op titel zoeken'; +$_lang["search_criteria_title_msg"] = 'Zoek alle Pagina\'s met de ingevoerde tekst in hun titel.'; +$_lang["search_empty"] = 'Uw zoekopdracht heeft geen resultaten opgeleverd. Verruim uw zoekcriteria en probeer het nogmaals.'; +$_lang["search_item_deleted"] = 'Dit item is verwijderd'; +$_lang["search_results"] = 'Zoekresultaten'; +$_lang["search_results_returned_desc"] = 'Beschrijving'; +$_lang["search_results_returned_id"] = 'ID'; +$_lang["search_results_returned_msg"] = 'Uw zoekcriteria hebben %s Pagina\'s opgeleverd. Als het teveel resultaten heeft opgeleverd, probeer dan een specifiekere zoekopdracht. Met de twee linker kolommen kunt u het bestand in de Website boomstructuur vinden of de Pagina bekijken. De twee meest rechtse kolommen geven aan of een Pagina verwijderd is en wat de publicatiestatus is.

          '; +$_lang["search_results_returned_title"] = 'Titel'; +$_lang["search_view_docdata"] = 'Geef dit item weer'; +$_lang["security"] = 'Gebruikers'; +$_lang["security_notices_tab"] = 'Beveiligingswaarschuwingen'; +$_lang["security_notices_title"] = 'Beveiligingswaarschuwingen'; +$_lang["select_date"] = 'Selecteer een datum'; +$_lang["send"] = 'Verzenden'; +$_lang["server_protocol_http"] = 'http'; +$_lang["server_protocol_https"] = 'https'; +$_lang["server_protocol_message"] = 'Geef hier aan of uw website gebruik maakt van een https verbinding.'; +$_lang["server_protocol_title"] = 'Server type'; +$_lang["serveroffset"] = 'Server verschil'; +$_lang["serveroffset_message"] = 'Selecteer hier het aantal uren tijdsverschil tussen uw huidige locatie en de servertijd. De huidige tijd op de server is [%s], de huidige tijd op de server rekening houdend met het op dit moment opgeslagen tijdsverschil is [%s].'; +$_lang["serveroffset_title"] = 'Server tijdsverschil'; +$_lang["servertime"] = 'Server tijd'; +$_lang["set_automatic"] = 'Stel in als automatisch'; +$_lang["set_default"] = 'Stel in als standaard'; +$_lang["set_default_all"] = 'Stel standaarden in'; +$_lang["settings_after_install"] = 'Omdat dit een nieuwe installatie is, moet u deze instellingen bekijken en wijzigen waar nodig. Nadat u de instellingen hebt bekeken, drukt u op \'Opslaan\' om de instellingen bij te werken.'; +$_lang["settings_config"] = 'Configuratie'; +$_lang["settings_dependencies"] = 'Afhankelijkheden'; +$_lang["settings_events"] = 'Systeemgebeurtenissen'; +$_lang["settings_furls"] = 'Zoekmachine vriendelijke URL\'s'; +$_lang["settings_general"] = 'Algemeen'; +$_lang["settings_group_tv_message"] = 'Kies of Template Variabelen moeten worden gegroepeerd in secties of tabbladen (benoemd door tv-categorie) bij het bewerken van een pagina'; +$_lang["settings_group_tv_options"] = 'Nee, secties op het tabblad Algemeen, tabbladen op het tabblad Algemeen, secties op nieuw tabblad, tabbladen op nieuw tabblad, nieuwe tabbladen'; +$_lang["settings_misc"] = 'Overige'; +$_lang["settings_security"] = 'Beveiliging'; +$_lang["settings_KC"] = 'Bestandsbrowser'; +$_lang["settings_page_settings"] = 'Pagina instellingen'; +$_lang["settings_photo"] = 'Foto'; +$_lang["settings_properties"] = 'Instellingen'; +$_lang["show_fullscreen_btn_message"] = 'Toon Volledig scherm knop'; +$_lang["show_newresource_btn_message"] = 'Toon Nieuwe pagina knop'; +$_lang["settings_show_picker_message"] = 'Pas het thema van de manager aan en sla op in de lokale opslag'; +$_lang["show_fullscreen_btn"] = 'Volledig scherm switchen'; +$_lang["show_newresource_btn"] = 'Nieuwe pagina knop'; +$_lang["settings_site"] = 'Website'; +$_lang["settings_strip_image_paths_message"] = 'Als dit op \'Nee\' staat zal de bestandsbrowser src\'s (afbeeldingen, bestanden, enz.) als absolute URL\'s worden geplaatst. Relatieve URL\'s zijn handig als u uw installatie wilt verplaatsen, bijvoorbeeld van een demosite naar een productiesite. Als je geen idee hebt wat dit betekent, kun je het het beste gewoon laten staan op \'Ja\'.'; +$_lang["settings_strip_image_paths_title"] = 'Browserpaden herschrijven?'; +$_lang["settings_templvars"] = 'Template Variabelen'; +$_lang["settings_title"] = 'Systeem configuratie'; +$_lang["settings_ui"] = 'Interface & mogelijkheden'; +$_lang["settings_users"] = 'Gebruiker'; +$_lang["show_meta"] = 'Toon META Keywords tab'; +$_lang["show_meta_message"] = 'Toon de verouderde META Keywords tab wanneer Pagina\'s worden aangepast in the Manager.'; +$_lang["show_tree"] = 'Website boomstructuur weergeven'; +$_lang["show_picker"] = 'Toon manager kleurenpalet'; +$_lang["showing"] = 'Weergeven'; +$_lang["signupemail_message"] = 'Hier kunt u het bericht instellen die naar uw gebruikers verstuurd wordt wanneer u voor hun een account heeft aangemaakt en Evolution een e-mail laat sturen met hun gebruikersnaam en wachtwoord.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - gebruikersnaam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeldgegevens niet ontvangen!'; +$_lang["signupemail_title"] = 'Registratie e-mail'; +$_lang["site"] = 'Website'; +$_lang["site_schedule"] = 'Website planning'; +$_lang["sitename_message"] = 'Vul hier de naam van uw website in.'; +$_lang["sitename_title"] = 'Naam website'; +$_lang["sitestart_message"] = 'Vul hier de ID van de Pagina in dat u als startpagina wilt gebruiken.
          NB: Let op dat dit de ID van een bestaande Pagina is en het tevens gepubliceerd is!'; +$_lang["sitestart_title"] = 'Startpagina website'; +$_lang["sitestatus_message"] = 'Kies \'Online\' om uw website op het web te publiceren. Als u de optie \'Offline\' selecteerd, dan zullen uw bezoekers de \'Website niet beschikbaar\' bericht te zien krijgen. Ze kunnen uw website dan niet bekijken!'; +$_lang["sitestatus_title"] = 'Website status'; +$_lang["siteunavailable_message"] = 'Dit bericht krijgen Gebruikers te zien als de website offline is of als er een fout mocht optreden. NB: Dit bericht wordt enkel getoond indien de \'Website niet beschikbaar\'-pagina niet is ingesteld.'; +$_lang["siteunavailable_message_default"] = 'Deze website is momenteel niet beschikbaar.'; +$_lang["siteunavailable_page_message"] = 'Geef de ID van de Pagina dat wordt weergegeven wanneer de website niet beschikbaar (offline) is. NB: Let erop dat de ID bestaat en dat de Pagina gepubliceerd is!'; +$_lang["siteunavailable_page_title"] = 'Website niet beschikbaar pagina'; +$_lang["siteunavailable_title"] = 'Website niet beschikbaar bericht'; +$_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; +$_lang["snippet_code"] = 'Snippet code (php)'; +$_lang["snippet_desc"] = 'Beschrijving'; +$_lang["snippet_execonsave"] = 'Snippet uitvoeren na opslaan.'; +$_lang["snippet_management_msg"] = 'Hier kunt u Snippets toevoegen en bewerken.'; +$_lang["snippet_msg"] = 'Snippet toevoegen of bewerken. LET OP, Snippets zijn \'ruwe\' PHP code, en als u verwacht dat de output van de Snippet op een specifiek punt binnen uw Template wordt getoond, dient u een waarde te retourneren binnen deze Snippet.'; +$_lang["snippet_name"] = 'Naam Snippet'; +$_lang["snippet_properties"] = 'Standaard instellingen'; +$_lang["snippet_title"] = 'Maak/wijzig Snippet'; +$_lang["sort_alphabetically"] = 'Sorteer alfabetisch'; +$_lang["sort_asc"] = 'Oplopend'; +$_lang["sort_desc"] = 'Aflopend'; +$_lang["sort_menuindex"] = 'Sorteer menu index'; +$_lang["sort_tree"] = 'Sorteer de Website boomstructuur'; +$_lang['sort_updating'] = 'Bijwerken ...'; +$_lang['sort_updated'] = 'Bijgewerkt!'; +$_lang['sort_nochildren'] = 'Deze map bevat geen subpagina\'s.'; +$_lang["sort_elements_msg"] = 'Versleep om de volgorde van de getoonde elementen te veranderen.'; +$_lang["source"] = 'Bron'; +$_lang["stay"] = 'Doorgaan met bewerken'; +$_lang["stay_new"] = 'Nog één toevoegen'; +$_lang["submit"] = 'Verzenden'; +$_lang["sunday"] = 'Zondag'; +$_lang["sys_alert"] = 'Systeem waarschuwing'; +$_lang["sysinfo_activity_message"] = 'Deze lijst toont de Pagina\'s die recent door uw Gebruikers werden gewijzigd.'; +$_lang["sysinfo_userid"] = 'Gebruiker'; +$_lang["system"] = 'Systeem'; +$_lang["system_email_signup"] = ' + +Hallo [+uid+] + +Hier zijn uw inloggegevens voor [+sname+] Content Manager: + +Gebruikersnaam: [+uid+] +Wachtwoord: [+pwd+] + +Zodra u zich aanmeldt bij Content Manager ([+surl+]), kunt u uw wachtwoord wijzigen. + +Met vriendelijke groet, +Website Admin +'; +$_lang["system_email_webreminder"] = 'Hallo [+uid+] + +Klik op de volgende link om uw nieuwe wachtwoord te activeren: + +[+surl+] + +Als dit lukt, kunt u het volgende wachtwoord gebruiken om in te loggen: + +Wachtwoord:[+pwd+] + +Als u deze e-mail niet heeft aangevraagd, negeert u deze. + +Met vriendelijke groet, +Website Admin'; +$_lang["system_email_websignup"] = 'Hallo [+uid+] + +Hier zijn uw inloggegevens voor [+sname+]: + +Gebruikersnaam: [+uid+] +Wachtwoord: [+pwd+] + +Nadat u zich hebt aangemeld bij [+sname+] ([+surl+]), kunt u uw wachtwoord wijzigen. + +Met vriendelijke groet, +Website Admin'; +$_lang["table_hoverinfo"] = 'Beweeg de muiscursor over een tabelnaam om een korte beschrijving te zien van de funktie van de tabel (niet voor alle tabellen is informatie beschikbaar).'; +$_lang["table_prefix"] = 'Tabel voorvoegsel (prefix)'; +$_lang["tag"] = 'Tag'; +$_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; +$_lang["template_assignedtv_tab"] = 'Toegekende Template Variabelen'; +$_lang["template_code"] = 'Template code (html)'; +$_lang["template_desc"] = 'Beschrijving'; +$_lang["template_edit_tab"] = 'Wijzig Template'; +$_lang["template_management_msg"] = 'Hier kunt u Templates toevoegen en bewerken.'; +$_lang["template_msg"] = 'Template toevoegen of bewerken. Gewijzigde/nieuwe Templates zullen niet zichtbaar zijn in de gecachte Pagina\'s van uw website totdat de cache is leeggemaakt. U kunt echter de voorbeeldfunctie op een Pagina gebruiken om de Template te bekijken.'; +$_lang["template_name"] = 'Naam Template'; +$_lang["template_no_tv"] = 'Er zijn nog geen Template Variabelen aan deze Template toegewezen.'; +$_lang["template_notassigned_tv"] = 'Deze Template variabelen zijn beschikbaar voor het toewijzen.'; +$_lang["template_reset_all"] = 'Geef alle Pagina\'s het standaard Template'; +$_lang["template_reset_specific"] = 'Geef alleen \'%s\' Pagina\'s het standaard Template:'; +$_lang["template_selectable"] = 'Template selecteerbaar bij aanmaken of aanpassen van pagina\'s'; +$_lang["template_title"] = 'Maak/wijzig Template'; +$_lang["template_tv_edit"] = 'Wijzig TV sorteer volgorde'; +$_lang["template_tv_edit_message"] = 'Versleep om de volgorde van de Template Variabelen van deze Template te veranderen.'; +$_lang["template_tv_edit_title"] = 'Template Variabele volgorde'; +$_lang["template_tv_msg"] = 'De aan deze Template toegewezen Template Variabelen staan hieronder vermeld.'; +$_lang["thursday"] = 'Donderdag'; +$_lang["tmplvar_access_msg"] = 'Selecteer de Paginagroepen die de inhoud van deze Template Variabele mogen aanpassen'; +$_lang["tmplvar_change_template_msg"] = 'Door het aanpassen van deze Template zal deze Pagina de Template Variabelen opnieuw moeten inlezen. Alle niet opgeslagen veranderingen zullen verloren gaan.\n\n Weet u zeker dat u deze Template aan wilt passen?'; +$_lang["tmplvar_inuse"] = 'De volgende Pagina\'s gebruiken deze Template Variabele. Om door te gaan met het verwijderen van de Template Variabele klik op de knop Verwijderen, anders klik op Annuleren.'; +$_lang["tmplvar_tmpl_access"] = 'Template toegang'; +$_lang["tmplvar_tmpl_access_msg"] = 'Selecteer de Templates die deze Template Variabele mogen gebruiken'; +$_lang["tmplvar"] = 'Template Variabele'; +$_lang["tmplvars"] = 'Template Variabelen'; +$_lang["tmplvars_binding_msg"] = 'Dit veld ondersteund data bron verbindingen met behulp van @ commando\'s'; +$_lang["tmplvars_caption"] = 'Titel'; +$_lang["tmplvars_default"] = 'Standaard waarde'; +$_lang["tmplvars_description"] = 'Beschrijving'; +$_lang["tmplvars_elements"] = 'Invoer optie waarden'; +$_lang["tmplvars_inherited"] = 'Geërfde waarde'; +$_lang["tmplvars_management_msg"] = 'Beheer extra eigen content velden (Template Variabelen) voor uw Pagina\'s.'; +$_lang["tmplvars_msg"] = 'Template Variabelen toevoegen of bewerken. De Template Variabelen moeten aan een Template toegekend worden om ze vanuit Snippets en Pagina\'s te kunnen benaderen net als andere content Variabelen.'; +$_lang["tmplvars_name"] = 'Template Variabele naam'; +$_lang["tmplvars_novars"] = 'Geen Template Variabelen gevonden.'; +$_lang["tmplvars_rank"] = 'Sorteer volgorde'; +$_lang["tmplvars_rank_edit_message"] = 'Versleep om volgorde van de Template variabelen aan te passen.'; +$_lang["tmplvars_reset_params"] = 'Herstel parameters'; +$_lang["tmplvars_title"] = 'Template Variable aanmaken/aanpassen'; +$_lang["tmplvars_type"] = 'Invoer type'; +$_lang["tmplvars_widget"] = 'Widget'; +$_lang["tmplvars_widget_prop"] = 'Widget instellingen'; +$_lang["to"] = 'naar'; +$_lang["toggle_fullscreen"] = 'Volledig scherm switchen'; +$_lang["tools"] = 'Beheer'; +$_lang["top_howmany_message"] = 'Wanneer u de statistieken bekijkt, hoe lang wilt u de \'Top ...\' lijst hebben?'; +$_lang["top_howmany_title"] = 'Toon aantal statistieken'; +$_lang["total"] = 'totaal'; +$_lang["track_visitors_message"] = 'Vink aan om de onderliggende bronnen in de documentenstructuur weer te geven'; +$_lang["track_visitors_title"] = 'Toon onderliggende pagina\'s'; +$_lang["tree_page_click"] = 'Pagina klik gedrag'; +$_lang["tree_page_click_message"] = 'Het standaard gedrag bij het klikken op een pagina in de boomstructuur.'; +$_lang["use_breadcrumbs"] = 'Toon navigatie'; +$_lang["use_breadcrumbs_message"] = 'Toon de navigatie bij het maken of bewerken van pagina\'s in de Manager'; +$_lang["tree_show_protected"] = 'Toon beschermde pagina\'s'; +$_lang["tree_show_protected_message"] = 'Wanneer ingesteld op "Nee", worden beschermde bronnen (en al hun onderliggende bronnen) niet weergegeven in de boomstructuur.'; +$_lang["truncate_table"] = 'Klik hier om deze tabel in te korten'; +$_lang["tuesday"] = 'Dinsdag'; +$_lang["tv"] = 'TV'; +$_lang["type"] = 'Soort'; +$_lang["udperms_allowroot_message"] = 'Sta Gebruikers toe om nieuwe Pagina\'s en Mappen in de \'root\' (basismap) van de website te maken.'; +$_lang["udperms_allowroot_title"] = 'Rootmap toestaan'; +$_lang["udperms_message"] = 'Beïnvloed toegangsrechten tot Pagina\'s via Gebruikersgroepen en Paginagroepen.'; +$_lang["udperms_title"] = 'Toegangsrechten gebruiken'; +$_lang["unable_set_link"] = 'Niet mogelijk de link te maken!'; +$_lang["unable_set_parent"] = 'Het Hoofdpagina kon niet worden aangemaakt!'; +$_lang["unauthorizedpage_message"] = 'Voer een gepubliceerde en publiek toegankelijke Pagina ID in waarnaar Gebruikers worden doorgestuurd wanneer ze een beveiligde/ongeautoriseerde Pagina opvragen.'; +$_lang["unauthorizedpage_title"] = 'Geen toegang pagina'; +$_lang["unblock_message"] = 'Deze Gebruiker zal niet geblokkeerd zijn na het opslaan van zijn Gebruikersgegevens.'; +$_lang["undelete_resource"] = 'Herstel Pagina'; +$_lang["unpublish_date"] = 'Niet-publiceren datum'; +$_lang["unpublish_events"] = 'Niet-publiceren gebeurtenissen'; +$_lang["unpublish_resource"] = 'Publicatie ongedaan maken'; +$_lang["untitled_resource"] = 'Naamloze Pagina'; +$_lang["untitled_weblink"] = 'Naamloze Weblink'; +$_lang["update_params"] = 'Parameter weergave bijwerken'; +$_lang["update_settings_from_language"] = 'Vervangen met'; +$_lang["upload_maxsize_message"] = 'Voer de maximale bestandsgrootte in voor bestanden die via Bestandsbeheer geupload kunnen worden. De bestandsgrootte wordt opgegeven in bytes.
          NB: Het kan enige tijd duren om grote bestanden te uploaden!'; +$_lang["upload_maxsize_title"] = 'Maximale upload bestandsgrootte'; +$_lang["uploadable_files_message"] = 'Hier kunt u een lijst van bestanden opgeven die geupload kunnen worden naar \'assets/files/\' vanuit Bestandsbeheer. Voer de bestandsextensies in, gescheiden door een komma. '; +$_lang["uploadable_files_title"] = 'Uploadbare bestandstypes'; +$_lang["uploadable_flash_message"] = 'Hier kunt u een lijst van bestanden opgeven die geupload kunnen worden naar \'assets/flash/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de Flash types, van elkaar gescheiden door een komma. '; +$_lang["uploadable_flash_title"] = 'Uploadbare Flash bestandstypes'; +$_lang["uploadable_images_message"] = 'Hier kunt u een lijst van bestanden opgeven die ge-upload kunnen worden naar \'assets/images/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de Afbeelding types, van elkaar gescheiden door een komma. '; +$_lang["uploadable_images_title"] = 'Uploadbare afbeelding bestandstypes'; +$_lang["uploadable_media_message"] = 'Hier kunt u een lijst van bestanden opgeven die ge-upload kunnen worden naar \'assets/media/\' vanuit Bestandsbeheer. Voer de bestandsextensies in voor de media types, van elkaar gescheiden door een komma. '; +$_lang["uploadable_media_title"] = 'Uploadbare Media bestandstypes'; +$_lang["use_alias_path_message"] = 'Door \'Ja\' te selecteren wordt er een virtueel pad gegenereerd naar de Pagina. Bijvoorbeeld, als een Pagina "kind.html" in de Container "ouder" staat, dan wordt de volledige zoekmachine vriendelijke URL "/ouder/kind.html".'; +$_lang["use_alias_path_title"] = 'Gebruik gebruiksvriendelijke alias paden'; +$_lang["use_editor_message"] = 'Bewerken met de geavanceerde teksteditor aanzetten. Deze setting geld voor alle Pagina\'s, maar kan worden overschreven in de instellingen van de Gebruiker.'; +$_lang["use_editor_title"] = 'Teksteditor aan/uitzetten'; +$_lang["use_global_tabs"] = 'Gebruik de algemene tabbladen'; +$_lang["user"] = 'Gebruiker'; +$_lang["user_block"] = 'Geblokkeerd'; +$_lang["user_blockedafter"] = 'Geblokkeerd na'; +$_lang["user_blockeduntil"] = 'Geblokkeerd tot'; +$_lang["user_changeddata"] = 'Uw gegevens zijn gewijzigd. A.u.b. opnieuw aanmelden.'; +$_lang["user_country"] = 'Land'; +$_lang["user_dob"] = 'Geboortedatum'; +$_lang["user_doesnt_exist"] = 'Gebruiker bestaat niet'; +$_lang["user_edit_self_msg"] = 'Wellicht dient u na het opslaan eerst af te melden en dan weer aan te melden om uw gegevens volledig te actualiseren.
          Nieuwe wachtwoorden worden via e-mail toegezonden of op het scherm getoond.'; +$_lang["user_email"] = 'E-mail adres'; +$_lang["user_failedlogincount"] = 'Aantal mislukte aanmeldpogingen'; +$_lang["user_fax"] = 'Fax'; +$_lang["user_female"] = 'Vrouw'; +$_lang["user_full_name"] = 'Volledige naam'; +$_lang["user_gender"] = 'Geslacht'; +$_lang["user_is_blocked"] = 'Deze Gebruiker is geblokkeerd!'; +$_lang["user_logincount"] = 'Aantal keren aangemeld'; +$_lang["user_male"] = 'Man'; +$_lang["user_management_msg"] = 'Hier kunt u Gebruikers toevoegen en bewerken.'; +$_lang["user_management_title"] = 'Gebruikers beheren'; +$_lang["user_mobile"] = 'Mobiel telefoonnummer'; +$_lang["user_phone"] = 'Telefoonnummer'; +$_lang["user_photo"] = 'Pasfoto'; +$_lang["user_photo_message"] = 'Voer een url voor de foto van deze Gebruiker in of gebruik de \'Invoegen\' knop om een foto te selecteren of te uploaden.'; +$_lang["user_prevlogin"] = 'Laatste keer aangemeld'; +$_lang["user_role"] = 'Rol'; +$_lang["user_state"] = 'Provincie'; +$_lang["user_title"] = 'Manager gebruiker creëren/bewerken'; +$_lang["user_upload_message"] = 'Als u wilt voorkomen dat deze Gebruiker bestanden in deze categorie kan uploaden, Zorg dan dat \'Gebruik Systeem Configuratie Instellingen\' niet is aangevinkt en laat het veld leeg.'; +$_lang["user_use_config"] = 'Gebruik Systeem Configuratie Instellingen'; +$_lang["user_zip"] = 'Postcode'; +$_lang["username"] = 'Gebruikersnaam'; +$_lang["users"] = 'Gebruikers'; +$_lang["valid_hostnames_message"] = 'Help XSS exploits misbruik te voorkomen met de systeem instelling site_url door een komma gescheiden lijst van geldige hostnamen voor deze installatie te gebruiken. Dit is belangrijk voor bepaalde typen gedeelde hosts of hosts rechtstreeks via een IP-adres te benaderen. De eerste hostnaam in de lijst wordt gebruikt als de HTTP_HOST wanneer deze niet overeenkomt met een geldige hostnaam.'; +$_lang["valid_hostnames_title"] = 'Geldige hostnamen'; +$_lang["validate_referer_message"] = 'Valideer de HTTP_REFERER headers om het risico te verkleinen dat uw website beheerders bedonderd worden door een CSRF (Cross Site Request Forgery) aanval. Soms is dit echter niet mogelijk als uw server geen HTTP_REFERER headers verzend.'; +$_lang["validate_referer_title"] = 'Valideer HTTP_REFERER headers'; +$_lang["value"] = 'Waarde'; +$_lang["version"] = 'Versie'; +$_lang["view"] = 'Bekijken'; +$_lang["view_child_resources_in_container"] = 'Bekijk Subpagina\'s in Map'; +$_lang["view_log"] = 'Bekijk logboek'; +$_lang["view_logging"] = 'CMS logboek'; +$_lang["view_sysinfo"] = 'Systeem Info'; +$_lang["warning"] = 'Waarschuwing!'; +$_lang["warning_not_saved"] = 'U heeft de wijzigingen nog niet opgeslagen! U kunt op deze Pagina blijven om de wijzigingen op te slaan (\'Annuleren\'), of u kunt deze Pagina verlaten, waardoor eventuele wijzigingen verloren gaan (\'OK\').'; +$_lang["warning_visibility"] = 'Configuratie meldingen zichtbaar voor'; +$_lang["warning_visibility_message"] = 'Bepaal de zichtbaarheid van de waarschuwingen op de Manager welkoms pagina'; +$_lang["web_access_permissions"] = 'Webgebruiker toegangsrechten'; +$_lang["web_access_permissions_user_groups"] = 'Webgebruikers groepen'; +$_lang["web_permissions"] = 'Toegangsbeheer (web)'; +$_lang["web_user_management_msg"] = 'Hier kunt u kiezen welke Webgebruiker u wilt bewerken. Webgebruikers zijn Gebruikers die alleen op de website kunnen aanmelden (en dus niet op het Content Management Systeem)'; +$_lang["web_user_management_title"] = 'Webgebruikers'; +$_lang["web_user_title"] = 'Aanmaken/bewerken Webgebruiker'; +$_lang["web_users"] = 'Webgebruikers'; +$_lang["weblink"] = 'Weblink'; +$_lang["webpwdreminder_message"] = 'Hier kunt u de boodschap instellen die naar uw gebruikers verstuurd wordt als zij een nieuw wachtwoord aanvragen per e-mail. Evolution zal een e-mail sturen met het nieuwe wachtwoord en activeringsinformatie.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - aanmeld naam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeld gegevens niet ontvangen!'; +$_lang["webpwdreminder_title"] = 'Herinnering e-mailadres'; +$_lang["websignupemail_message"] = 'Hier kunt u de boodschap instellen die naar uw gebruikers verstuurd wordt wanneer u voor hen een web account heeft aangemaakt en Evolution een e-mail laat sturen met hun gebruikersnaam en wachtwoord.

          De volgende codes worden door Evolution vervangen als het bericht verstuurd wordt:

          [+sname+] - naam van uw website,
          [+saddr+] - e-mail adres van uw website,
          [+surl+] - adres van de website,
          [+uid+] - aanmeld naam of id,
          [+pwd+] - wachtwoord,
          [+ufn+] - volledige naam.

          Laat de [+uid+] en [+pwd+] codes in de e-mail staan, omdat de gebruikersnaam en het wachtwoord anders niet in de e-mail komen te staan en uw gebruikers daardoor hun aanmeld gegevens niet ontvangen!'; +$_lang["websignupemail_title"] = 'Bevestiging e-mail bij aanmelding:
          (Webgebruiker)'; +$_lang["wednesday"] = 'Woensdag'; +$_lang["welcome_messages"] = 'In uw inbox staan %d bericht(en), waarvan %s ongelezen.'; +$_lang["welcome_title"] = 'Welkom bij uw Evolution CMS Content Manager'; +$_lang["which_editor_message"] = 'Selecteer uw Texteditor (RTE). U kunt extra RTE\'s downloaden en installeren vanaf de downloadpagina.'; +$_lang["which_editor_title"] = 'Kies uw teksteditor'; +$_lang["working"] = 'Wordt verwerkt...'; +$_lang["wrap_lines"] = 'Regels afbreken'; +$_lang["xhtml_urls_message"] = 'Vervangt ampersand (&) tekens in urls die worden gegenereerd door EVO met de validatie &amp; htmlentity'; +$_lang["xhtml_urls_title"] = 'XHTML URL\'s'; +$_lang["yes"] = 'Ja'; +$_lang["you_got_mail"] = 'U heeft een nieuw bericht'; +$_lang["yourinfo_message"] = 'In deze sectie wordt uw persoonlijke informatie weergegeven:'; +$_lang["yourinfo_previous_login"] = 'De laatste keer dat u zich heeft aangemeld:'; +$_lang["yourinfo_role"] = 'Uw rol is:'; +$_lang["yourinfo_title"] = 'Uw info'; +$_lang["yourinfo_total_logins"] = 'Aantal keer aangemeld:'; +$_lang["yourinfo_username"] = 'U bent aangemeld als:'; + +$_lang["a17_error_reporting_title"] = 'Detectie level van de PHP foutmelding'; +$_lang["a17_error_reporting_msg"] = 'Bepaal het level van de PHP foutmelding.'; +$_lang["a17_error_reporting_opt0"] = 'Negeer alle'; +$_lang["a17_error_reporting_opt1"] = 'Negeer de waarschuwing van een melding met laag niveau (deprecated)'; +$_lang["a17_error_reporting_opt2"] = 'Detecteer alle foutmeldingen behalve E_NOTICE'; +$_lang["a17_error_reporting_opt99"] = 'Detecteer alle'; + +$_lang["pwd_hash_algo_title"] = 'Hash algoritme'; +$_lang["pwd_hash_algo_message"] = 'Wachtwoord hash algoritme.'; + +$_lang["enable_bindings_title"] = '@Bindings commando\'s aanzetten'; +$_lang["enable_bindings_message"] = 'Voorkom het uitvoeren van PHP-functies via TV @Bindings. Handig wanneer u Manager gebruikers heeft die niet PHP-code kunnen creëren, maar wel in staat zijn om TV\'s te maken of te bewerken. Het tonen van een TV met een @Binding zal worden uitgeschakeld.'; +$_lang["enable_filter_title"] = 'Filters aanzetten'; +$_lang["enable_filter_message"] = 'Filters kunt u manipuleren van de manier waarop gegevens worden gepresenteerd of geparsed in een tag. Ze laten u waarden wijzigen vanuit uw Template. Dit is gelijk aan PHx. Meer info'; // todo: change link to documentation +$_lang["enable_filter_phx_warning"] = 'Wanneer de PHx plugin is ingeschakeld staan de ingebouwde filters standaard uitgeschakeld'; + +$_lang["enable_filter_phx_warning"] = 'Wanneer de PHx plugin is ingeschakeld staan de ingebouwde filters standaard uitgeschakeld'; + +$_lang["enable_at_syntax_title"] = '<@SYNTAX> aanzetten'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX> is een eenvoudig en lichtgewicht. Dit is ontworpen om mede-existentie met HTML-tags en inhoudstrings te overwegen.'; + +$_lang["bkmgr_alert_mkdir"] = 'Een bestand kan niet worden gemaakt in een directory. Kijk wat de toestemming (permission) is van [+snapshot_path+]'; +$_lang["bkmgr_restore_msg"] = '

          Een website kan worden hersteld door het gebruik van een SQL bestand.

          '; +$_lang["bkmgr_restore_title"] = 'Herstellen'; +$_lang["bkmgr_import_ok"] = 'SQL herstel is op de Standaard manier uitgevoerd.'; +$_lang["bkmgr_snapshot_ok"] = 'De snapshot is als Standaard opgeslagen.'; +$_lang["bkmgr_run_sql_file_label"] = 'Uitvoeren door SQL bestand'; +$_lang["bkmgr_run_sql_direct_label"] = 'Direct uitvoeren van SQL commando strings'; +$_lang["bkmgr_run_sql_submit"] = 'Herstellen uitvoeren'; +$_lang["bkmgr_run_sql_result"] = 'Resultaat'; +$_lang["bkmgr_snapshot_title"] = 'Snapshot opgeslagen en hersteld'; +$_lang["bkmgr_snapshot_msg"] = '

          De inhoud van de database is opgeslagen en hersteld op de server.
          Opgeslagen locatie: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_submit"] = 'Snapshot toevoegen'; +$_lang["bkmgr_snapshot_list_title"] = 'Lijst van Snapshots'; +$_lang["bkmgr_restore_submit"] = 'Deze gegevens (data) terugzetten'; +$_lang["bkmgr_restore_confirm"] = 'Weet je zeker dat je backup\n[+filename+] wilt terugzetten?'; +$_lang["bkmgr_snapshot_nothing"] = 'Geen Snapshot'; + +$_lang["files.dynamic.php1"] = 'Maak tekstbestand aan'; +$_lang["files.dynamic.php2"] = 'Deze locatie kan niet worden getoond.'; +$_lang["files.dynamic.php3"] = 'Er is een probleem in een bestandsnaam.'; +$_lang["files.dynamic.php4"] = 'Het tekstbestand is gemaakt.'; +$_lang["files.dynamic.php5"] = 'Bestand kan niet worden gedupliceerd.'; +$_lang["files.dynamic.php6"] = 'Bestand of map kan niet worden hernoemd.'; +$_lang["files_dynamic_new_folder_name"] = 'Voeg een nieuwe map naam toe:'; +$_lang["files_dynamic_new_file_name"] = 'Voeg een nieuwe bestandsnaam toe:'; +$_lang["not_readable_dir"] = 'Deze locatie kan niet gelezen worden.'; +$_lang["confirm_delete_dir"] = 'Weet u zeker dat u deze locatie wilt verwijderen?'; +$_lang["confirm_delete_dir_recursive"] = 'Weet u zeker dat u de locatie wilt verwijderen? \ N \ nAlle onderliggende bestanden worden ook verwijderd.'; + +$_lang["make_folders_title"] = 'Voeg eind slash toe aan de URL'; +$_lang["make_folders_message"] = 'Een slash toevoegen aan Pagina\'s die als mappen worden gebruikt wanneer u gebruik maakt van FURLs.'; + +$_lang["check_files_onlogin_title"] = 'Bekijk Core bestanden bij inloggen'; +$_lang["check_files_onlogin_message"] = 'Door deze optie in te schakelen, worden belangrijke systeembestanden gecontroleerd op aanpassingen die kenmerkend zijn voor gescripte website-aanvallen. Hoewel het geen garantie is, kan het u waarschuwen voor een aangetast systeembestand en website.'; + +$_lang["configcheck_sysfiles_mod"] = 'Belangrijke Systeem bestanden zijn aangepast!'; +$_lang["configcheck_sysfiles_mod_msg"] = 'U hebt EVO geconfigureerd om belangrijke systeembestanden te controleren op mogelijke website-scriptaanvallen. Deze waarschuwing betekent niet noodzakelijk dat uw site is gehackt, maar u moet de gecontroleerde bestanden in uw installatie bekijken (ingesteld in Systeemconfiguratie -> Gebruiker -> Controleer kernbestanden bij inloggen). Als u merkt dat uw bestanden ongewijzigd blijven of wijzigingen zijn aangebracht door sitebeheerders, gaat u naar Systeemconfiguratie en klikt u op om instellingen opnieuw op te slaan om dit bericht te sluiten. Wijzigingen in de volgende bestanden zijn gevonden:'; + +$_lang['email_method_title'] = 'Sendmail methode'; +$_lang['email_method_mail'] = 'mail() PHP functie'; +$_lang['email_method_smtp'] = 'SMTP Server'; +$_lang['smtp_auth_title'] = 'SMTP-AUTH'; +$_lang['smtp_host_title'] = 'SMTP host'; +$_lang['smtp_secure_title'] = 'Gecodeerde SMTP'; +$_lang['smtp_username_title'] = 'SMTP gebruikersnaam'; +$_lang['smtp_password_title'] = 'SMTP wachtwoord'; +$_lang['smtp_port_title'] = 'SMTP poort'; + +$_lang["setting_resource_tree_node_name"] = 'De hoofdnaam van de boomstructuur'; +$_lang["setting_resource_tree_node_name_desc"] = 'Specificeer het paginaveld om gebruik te maken van de hoofdnaam in de boomstructuur bij het renderen. Standaard staat deze op Pagina Titel, hoewel elk Pagina veld kan worden gebruikt, zoals menutitel en alias.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Opmerking: U kunt deze weergavenaam wijzigen in de sorteeroptie van de boomstructuur. Deze instelling wordt gebruikt wanneer Display Name in boomstructuur is ingesteld op Standaard.'; + +$_lang["resource_opt_alvisibled"] = 'Gebruik huidige alias als alias pad'; +$_lang["resource_opt_alvisibled_help"] = 'The alias of this Resource is inserted in Friendly URL alias path'; +$_lang['resource_opt_is_published'] = 'Gepubliceerd'; +$_lang["docid_incrmnt_method_title"] = 'Optel methode pagina ID'; +$_lang["docid_incrmnt_method_0"] = 'DB auto increment'; +$_lang["docid_incrmnt_method_1"] = 'Minimaal aantal gemiste ID'; +$_lang["docid_incrmnt_method_2"] = 'Maximaal ID+1'; + +$_lang["enable_cache_title"] = 'Document caching'; +$_lang["disabled_at_login"] = 'Uitgeschakeld bij inloggen'; + +$_lang["cache_type_title"] = 'Document cache type'; +$_lang["cache_type_1"] = 'Cache is gebaseerd op document id (standaard)'; +$_lang["cache_type_2"] = 'Cache is gebaseerd op document id en $_GET parameters'; +$_lang["seostrict_title"] = 'Gebruik SEO Strict URLs'; +$_lang["seostrict_message"] = 'Gebruik van strikte URL\'s om dubbele inhoud te voorkomen (wanneer dit plaatsvindt)'; +$_lang["aliaslistingfolder_title"] = 'Gebruik AliasListing alleen bij mappen'; +$_lang["aliaslistingfolder_message"] = 'Vermindert het geheugengebruik wanneer de site veel pagina\'s heeft'; + +$_lang["settings_friendlyurls_alert"] = 'Het is noodzakelijk om het ht.access bestand in de EVO-installatiemap naar .htaccess te hernoemen voor het gebruik van de Friendly URL-functie.'; +$_lang["settings_friendlyurls_alert2"] = 'Omdat EVO in een submap is geïnstalleerd, is het noodzakelijk om de inhoud van .htaccess te wijzigen.'; + +$_lang["user_street"] = 'Adres'; +$_lang["user_city"] = 'Stad'; +$_lang["user_other"] = 'Anders'; + +$_lang["import_site.static.php1"] = 'Herstel boomstructuur'; +$_lang["import_site.static.php2"] = 'Herstel de boomstructuur, alle ID\'s zijn geïnitialiseerd.'; +$_lang["import_site.static.php3"] = 'Doel'; +$_lang["import_site.static.php4"] = 'alleen <body></body> '; +$_lang["import_site.static.php5"] = 'Bestand bevat alle'; + +$_lang["a83_ignore_ids_title"] = 'Negeer ID\'s (komma gescheiden)'; +$_lang["export_site.static.php1"] = 'Doel'; +$_lang["export_site.static.php2"] = 'Alleen aangepaste/bewerkte pagina\'s'; +$_lang["export_site.static.php3"] = 'Alle pagina\'s'; +$_lang["export_site.static.php4"] = 'Vervang string (voor)'; +$_lang["export_site.static.php5"] = 'Vervang string (na)'; +$_lang["export_site.static.php6"] = 'Doel'; +$_lang["export_site.static.php7"] = 'Bestanden kunnen niet worden aangepast naar [+rb_base_url+]'; + +$_lang["mutate_settings.dynamic.php6"] = 'Verzend e-mail bij fouten'; +$_lang["mutate_settings.dynamic.php7"] = 'not notify'; +$_lang["mutate_settings.dynamic.php8"] = 'Een e-mail met de foutbron wordt verzonden naar [(emailsender)] ([+emailsender+]) als er een fout optreedt. De details van de fout zijn te zien in het gebeurtenissenlogboek van de manager.'; + +$_lang["error_no_privileges"] = "Je hebt niet genoeg rechten hebt voor deze actie!"; +$_lang["error_no_optimise_tablename"] = "Tabel optimaliseren niet gevonden in aanvraag!"; +$_lang["error_no_truncate_tablename"] = "Tabel voor truncate niet gevonden!"; +$_lang["error_double_action"] = "Dubbele actie (GET & POST) geplaatst!"; +$_lang["error_no_id"] = "Document ID niet doorgegeven in aanvraag!"; +$_lang["error_id_nan"] = "Doorgegeven ID is NaN!"; +$_lang["error_no_parent"] = "Kon naam bovenliggende document niet vinden!"; +$_lang["error_many_results"] = "Te veel resultaten uit de database!"; +$_lang["error_no_results"] = "Te weinig / geen resultaten terug van database!"; +$_lang["error_no_user_selected"] = "Geen gebruiker geselecteerd als ontvanger van dit bericht!"; +$_lang["error_no_group_selected"] = "Geen groep geselecteerd als ontvanger van dit bericht!"; +$_lang["error_movedocument1"] = "Document kan niet zijn eigen onderliggende document zijn!"; +$_lang["error_movedocument2"] = "Document ID niet doorgegeven in aanvraag!"; +$_lang["error_movedocument3"] = "Nieuwe onderliggende document niet in aanvraag!"; +$_lang["error_internet_connection"] = "Server is niet beschikbaar. Controleer je internetverbinding!"; + +$_lang["login_processor_unknown_user"] = "Onjuiste gebruikersnaam of wachtwoord ingevoerd!"; +$_lang["login_processor_wrong_password"] = "Onjuiste gebruikersnaam of wachtwoord ingevoerd!"; +$_lang["login_processor_many_failed_logins"] = "Wegens te veel mislukte aanmeldingen ben je geblokkeerd!"; +$_lang["login_processor_blocked1"] = "U bent geblokkeerd en kan niet inloggen!"; +$_lang["login_processor_blocked2"] = "U bent geblokkeerd en kan niet inloggen! Probeer het later opnieuw."; +$_lang["login_processor_blocked3"] = "U wordt automatisch geblokkeerd na een bepaalde datum en kunt niet meer inloggen!"; +$_lang["login_processor_bad_code"] = "De veiligheidscode klopt niet! Probeer het opnieuw!"; +$_lang["login_processor_remotehost_ip"] = "Uw hostnaam verwijst niet terug naar uw IP!"; +$_lang["login_processor_remote_ip"] = "Het is niet toegestaan ​​om in te loggen vanaf deze locatie."; +$_lang["login_processor_date"] = "Het is niet toegestaan ​​om in te loggen op dit moment. Probeer het later opnieuw."; +$_lang["login_processor_captcha_config"] = "Captcha is niet correct geconfigureerd."; + +$_lang["dp_dayNames"] = "['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag']"; +$_lang["dp_monthNames"] = "['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December']"; +$_lang["dp_startDay"] = "1"; + +$_lang["check_all"] = "Selecteer alle"; +$_lang["check_none"] = "Deselecteer alle"; +$_lang["check_toggle"] = "Selectie aan/uit"; + +$_lang["version_notices"] = "Meldingen over versies"; + +$_lang["em_button_shift"] = "(Shift+muiseklik om meerdere vensters te openen)"; + +$_lang["reset_sysfiles_checksum_button"] = "Heropbouw Checksums"; +$_lang["reset_sysfiles_checksum_alert"] = "Weet u zeker dat u de systeembestanden checksums wil resetten?"; + +$_lang["file_browser_disabled_msg"] = "De Bestandsbrowser custom optie staat niet aangeschakeld."; +$_lang["which_browser_default_title"]= "Standaard bestandsbrowser"; +$_lang["which_browser_default_msg"]= "Kies de Bestandsbrowser welke u liever als standaard gebruikt. Bij de gebruikers instellingen kunt u kiezen voor een custom Bestandsbrowser per gebruiker."; +$_lang["which_browser_title"]= "Bestandsbrowser"; +$_lang["which_browser_msg"]= "U kunt kiezen om een aangepaste Bestandsbrowser te gebruiken voor deze gebruiker."; +$_lang["option_default"] = "Standaard"; +$_lang["position"] = "Positie"; +$_lang["are_you_sure"] = "Weet u het zeker?"; + +$_lang['evo_downloads_title'] = "Evolution Downloads"; +$_lang['help_translating_title'] = "Help Evolution vertalen"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Vorige versies"; +$_lang["extras"] = "Extra's"; + +$_lang["display_locks"] = "Toon geblokkeerde"; +$_lang["role_display_locks"] = "Toon geblokkeerde"; +$_lang["session_timeout"] = "Sessie timeout"; +$_lang["session_timeout_msg"] = "EVO pingt de server volgens de instelling "Mail Check Time Period". Als de laatste ping deze instelling overschrijdt, wordt de bijbehorende sessie als ongeldig beschouwd en worden alle gerelateerde vergrendelingen automatisch verwijderd. Stel de waarde in minuten in (> 2min, standaard 15min)."; +$_lang["unlock_element_id_warning"] = "Weet u zeker dat je [+element_type+] (ID [+id+]) wilt vrijgeven voor bewerken?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template Variabele"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plug-in"; +$_lang["lock_element_type_6"] = "Module"; +$_lang["lock_element_type_7"] = "Pagina"; +$_lang["lock_element_type_8"] = "Rol"; +$_lang["lock_element_editing"] = "U past element [+element_type+] aan sinds\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "[+element_type+] is geblokkeerd door gebruiker\n[+username+] sinds [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Minify php code in de site cache'; +$_lang["minifyphp_incache_message"] = 'Minify php code (snippets en plugins) en sla op in het site cache bestand. Zie: #938'; + +$_lang["logout_reminder_msg"] = "Ter herinnering: Het lijkt er op dat op [+datum+] je vergeten bent om uit te loggen. In de toekomst kun je dit beter wel doen na je werk!"; + +$_lang["allow_eval_title"] = "Eval php code in je snippet"; +$_lang["allow_eval_msg"] = "Voor ontwikkelaars: Gebruik \$modx->safeEval()."; +$_lang["allow_eval_with_scan"] = "Alleen functies uitvoeren die worden toegestaan"; +$_lang["allow_eval_with_scan_at_post"] = "Alles uitvoeren. Echter met POST alleen toegestaande functies uitvoeren"; +$_lang["allow_eval_everytime_eval"] = "Ongelimiteerd (gebruik alleen bij debugging)"; +$_lang["allow_eval_dont_eval"] = "Niet alle functies toelaten"; + +$_lang["safe_functions_at_eval_title"] = "Functies die eval mogen toestaan"; +$_lang["safe_functions_at_eval_msg"] = "Met komma's gescheiden lijst"; + +$_lang["multiple_sessions_msg"] = "Ter informatie: Meerdere actieve gebruiker sessies (in totaal [+totaal+]) gevonden voor de gebruiker [+gebruikersnaam+]."; +$_lang["iconv_not_available"] = "Heb is belangrijk om de extentie iconv te installeren of aan te zetten. Ga na bij uw hostingpartij om deze aan te zetten mocht u hier geen kaas van hebben gegeten."; + +$_lang["cm_create_new_category"] = "Creëer een nieuwe categorie"; +$_lang["cm_category_name"] = "Categorie naam"; +$_lang["cm_category_position"] = "Categorie positie"; +$_lang["cm_no_x_assigned"] = "Geen %s toegewezen"; +$_lang["cm_save_categorization"] = "Sla categorisering op"; +$_lang["cm_update_categories"] = "Categorieën updaten"; +$_lang["cm_assigned_elements"] = "Toegekende elementen"; +$_lang["cm_edit_name"] = "Naam aanpassen"; +$_lang["cm_mark_for_deletion"] = "Aanvinken voor verwijdering"; +$_lang["cm_delete_now"] = "Verwijder direct"; +$_lang["cm_delete_element_x_now"] = "Verwijder "%s" direct"; +$_lang["cm_select_element_group"] = "Selecteer een elementengroep"; +$_lang["cm_global_messages"] = "Globale meldingen"; +$_lang["cm_add_new_category"] = "Nieuwe categorie toevoegen"; +$_lang["cm_edit_categories"] = "Categorieën wijzigen"; +$_lang["cm_sort_categories"] = "Sorteer categorieën"; +$_lang["cm_categorize_elements"] = "Elementen categoriseren "; +$_lang["cm_translation"] = "Vertaling"; +$_lang["cm_translations"] = "Vertalingen"; +$_lang["cm_categorize_x"] = "Categoriseer %s"; +$_lang["cm_unknown_error"] = "Er is iets niet goed gegaan."; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) is toegewezen aan categorie %s(%s)"; +$_lang["cm_no_categorization"] = "Geen indeling gemaakt."; +$_lang["cm_no_changes"] = "Niets te veranderen, dus geen wijzigingen."; +$_lang["cm_x_changes_made"] = "%s aanpassingen gemaakt"; +$_lang["cm_enter_name_for_category"] = "Geef een naam voor de nieuwe categorie."; +$_lang["cm_category_x_exists"] = "Categorie %s bestaat al."; +$_lang["cm_category_x_saved_at_position_y"] = "De nieuwe caterogie %s is opgeslagen op positie %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Categorie %s is verplaatst naar positie %s"; +$_lang["cm_category_x_deleted"] = "Categorie %s is verwijderd"; +$_lang["cm_category_x_renamed_to_y"] = "Categorie %s is hernoemd naar %s"; +$_lang["cm_translation_for_x_empty"] = "Vertaling voor %s is leeg"; +$_lang["cm_translation_for_x_to_y_success"] = "Vertaling van %s naar %s is succesvol opgeslagen"; +$_lang["cm_save_new_sorting"] = "Bewaar nieuwe volgorde"; +$_lang["cm_translate_phrases"] = "Vertaal zinnen"; +$_lang["cm_translate_module_phrases"] = "Vertaal module-zinnen"; +$_lang["cm_native_phrase"] = "Inheemse zin"; + +$_lang["btn_view_options"] = 'Toon opties'; +$_lang["view_options_msg"] = 'Tonen van elementen kan worden aangepast via "Toon opties" knop. Instellingen worden opgeslagen en bijgewerkt per browser door gebruik van HTML5 localStorage.'; +$_lang["viewopts_title"] = 'Toon opties'; +$_lang["viewopts_cb_buttons"] = 'Knoppen'; +$_lang["viewopts_cb_descriptions"] = 'Omschrijvingen'; +$_lang["viewopts_cb_icons"] = 'Iconen'; +$_lang["viewopts_radio_list"] = 'Lijst'; +$_lang["viewopts_radio_inline"] = 'Inline'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Fontgrootte'; +$_lang["viewopts_cb_alltabs"] = 'Alle tabs'; diff --git a/manager/includes/lang/norsk.inc.php b/manager/includes/lang/norsk.inc.php index ab4f4f1e..3f44c2c9 100755 --- a/manager/includes/lang/norsk.inc.php +++ b/manager/includes/lang/norsk.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Metode for tillkjennegiving av passord'; $_lang["password_method_email"] = 'Semd det nye passordet med epost.'; $_lang["password_method_screen"] = 'Vis det nye passordet på skjermen.'; -$_lang["password_msg"] = 'Det nye passordet %s er %s.'; -$_lang["php_version_check"] = 'MODX er kompatibelt med PHP version 5.0.0 eller høyere. Du må oppgradere din versjon av PHP!'; +$_lang["password_msg"] = 'Det nye passordet %s er %s
          '; +$_lang["php_version_check"] = 'MODX er kompatibelt med PHP version 5.6.0 eller høyere. Du må oppgradere din versjon av PHP!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Plugin-kode (php)'; $_lang["plugin_config"] = 'Konfigurer plugin'; diff --git a/manager/includes/lang/persian.inc.php b/manager/includes/lang/persian.inc.php index b790b308..d18396c6 100755 --- a/manager/includes/lang/persian.inc.php +++ b/manager/includes/lang/persian.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'نحوه اطلاع از کلمه ی عبور جدید'; $_lang["password_method_email"] = 'کلمه ی عبور از طریق پست الکترونیک ارسال شود'; $_lang["password_method_screen"] = 'کلمه ی عبور جدید در صفحه نشان داده شود'; -$_lang["password_msg"] = 'کلمهی عبور جدید برای %s این است: %s.'; -$_lang["php_version_check"] = 'مادایکس تنها بر روی نسخه ی PHP 5.0.0 و بالاتر اجرا می شود لطفا نسخه ی PHP خود را ارتقاء دهید'; +$_lang["password_msg"] = 'کلمهی عبور جدید برای %s این است: %s
          '; +$_lang["php_version_check"] = 'مادایکس تنها بر روی نسخه ی PHP 5.6.0 و بالاتر اجرا می شود لطفا نسخه ی PHP خود را ارتقاء دهید'; $_lang["plugin"] = 'پلاگین'; $_lang["plugin_code"] = 'کدهای پلاگین یا PHP'; $_lang["plugin_config"] = 'تنظیمات پلاگین '; diff --git a/manager/includes/lang/polish-utf8.inc.php b/manager/includes/lang/polish-utf8.inc.php index 669c04b5..59cf8169 100755 --- a/manager/includes/lang/polish-utf8.inc.php +++ b/manager/includes/lang/polish-utf8.inc.php @@ -1,10 +1,10 @@ PHP Application Framework i Content Management System objęty licencją GNU GPL.'; -$_lang["about_title"] = 'O MODX'; +$_lang["about_msg"] = 'EVO to PHP Application Framework i Content Management System objęty licencją GNU GPL.'; +$_lang["about_title"] = 'O Evolution'; $_lang["access_permission_denied"] = 'Nie masz właściwych uprawnień do tego dokumentu.'; $_lang["access_permission_parent_denied"] = 'Nie masz uprawnień do tworzenia lub przenoszenia dokumentu tutaj. Proszę wybrać inną lokację.'; $_lang["access_permissions"] = 'Uprawnienia dostępu'; @@ -43,9 +43,9 @@ $_lang["access_permissions_users_in_group"] = 'Użytkownicy w grupie: '; $_lang["access_permissions_users_tab"] = 'Tutaj możesz zobaczyć jakie grupy użytkowników zostały stworzone. Możesz także stworzyć nowe grupy, zmieniać nazwy, usuwać i sprawdzać którzy użytkownicy należą do danej grupy. Aby dodać nowego użytkownika do grupy albo usunać go z grupy, edytuj tego użytkownika bezpośrednio. Administratorzy (ID Roli 1) zawsze mają dostęp do wszystkich dokumentów, więc nie muszą być przypisani do żadnej grupy.'; $_lang["account_email"] = 'Konto e-mail'; -$_lang["actioncomplete"] = 'Akcja zakończona powodzeniem!
          - Proszę zaczekać, aż MODX zakończy porządkowanie.'; +$_lang["actioncomplete"] = 'Akcja zakończona powodzeniem!
          Proszę zaczekać, aż EVO zakończy porządkowanie.'; $_lang["activity_message"] = 'Ta lista pokazuje ostatnie dokumenty, jakie utworzyłeś lub edytowałeś:'; -$_lang["activity_title"] = 'Ostatnio edytowane/utworzone dokumenty'; +$_lang["activity_title"] = 'Ostatnio edytowane dokumenty'; $_lang["add"] = 'Dodaj'; $_lang["add_chunk"] = 'Dodaj chunk'; $_lang["add_doc"] = 'Dodaj dokument'; @@ -82,7 +82,7 @@ $_lang["captcha_code"] = 'Kod bezpieczeństwa'; $_lang["captcha_message"] = 'Włącz tę opcję, aby wzmocnić zabezpieczenia i wymóc na użytkownikach wprowadzanie kodu, który jest nieczytelny dla maszyn (i innych niebezpiecznych skryptów).'; $_lang["captcha_title"] = 'Używaj kodów CAPTCHA'; -$_lang["captcha_words_default"] = 'MODX,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; +$_lang["captcha_words_default"] = 'EVO,Access,Better,BitCode,Chunk,Cache,Desc,Design,Excell,Enjoy,URLs,TechView,Gerald,Griff,Humphrey,Holiday,Intel,Integration,Joystick,Join(),Oscope,Genetic,Light,Likeness,Marit,Maaike,Niche,Netherlands,Ordinance,Oscillo,Parser,Phusion,Query,Question,Regalia,Righteous,Snippet,Sentinel,Template,Thespian,Unity,Enterprise,Verily,Tattoo,Veri,Website,WideWeb,Yap,Yellow,Zebra,Zygote'; $_lang["captcha_words_message"] = 'Tutaj możesz wprowadzić listę słów CAPTCHA do użycia jeśli system CAPTCHA jest włączony. Oddziel słowa przecinkiem. Możesz wprowadzić maksymalnie 255 znaków.'; $_lang["captcha_words_title"] = 'Słowa CAPTCHA'; $_lang["category_heading"] = 'Kategoria'; @@ -95,10 +95,10 @@ $_lang["cfg_manager_path"] = 'MODX_MANAGER_PATH'; $_lang["cfg_manager_url"] = 'MODX_MANAGER_URL'; $_lang["cfg_site_url"] = 'MODX_SITE_URL'; -$_lang["change_name"] = 'Zmień nazwę'; +$_lang["change_name"] = 'Zmień nazwę użytkownika'; $_lang["change_password"] = 'Zmień hasło'; $_lang["change_password_confirm"] = 'Potwierdź hasło'; -$_lang["change_password_message"] = 'Proszę wprowadzić nowe hasło a następnie potwierdzić je poprzez ponowne wpisanie. Hasło powinno składać się z 6-15 znaków.'; +$_lang["change_password_message"] = 'Proszę wprowadzić nowe hasło, następnie ponowić je i zatwierdzić. Hasło musi mieć minimum 6 znaków. '; $_lang["change_password_new"] = 'Nowe hasło'; $_lang["charset_message"] = 'Proszę wybrać, którego kodowania znaków chcesz używać w menadżerze. MODX był testowany z wieloma zestawami znaków, ale nie ze wszystkimi. Dla większości języków, wystarczające jest domyślne kodowanie ISO-8859-1.'; $_lang["charset_title"] = 'Kodowanie znaków'; @@ -119,7 +119,7 @@ $_lang["comment"] = 'Komentarz'; $_lang["configcheck_admin"] = 'Proszę skontaktować się z administratorem systemu, aby powiadomić go o tym komunikacie!'; $_lang["configcheck_cache"] = 'katalog cache nie jest zapisywalny'; -$_lang["configcheck_cache_msg"] = 'MODX nie może zapisać do katalogu cache\'u. MODX będzie wciąż działał poprawnie, ale strony nie będą cache\'owane. Aby rozwiązać ten problem, nadaj uprawnienia do zapisu dla katalogu /_cache/.'; +$_lang["configcheck_cache_msg"] = 'EVO nie może zapisywać do katalogu cache. EVO będzie wciąż działał poprawnie, ale strony nie będą używać cache. Aby rozwiązać ten problem, nadaj uprawnienia do zapisu dla katalogu /cache/.'; $_lang["configcheck_configinc"] = 'Plik konfiguracyjny jest zapisywalny'; $_lang["configcheck_configinc_msg"] = 'Dla większego bezpieczeństwa ustaw prawa dostępu do pliku konfiguracji (/[+MGR_DIR+]/includes/config.inc.php) na tylko do odczytu.'; $_lang["configcheck_default_msg"] = 'Wystąpił nieokreślony błąd.'; @@ -127,17 +127,21 @@ $_lang["configcheck_errorpage_unavailable_msg"] = 'Oznacza to, że Twoja strona błędu jest niedostępna dla użytkowników albo nie istnieje. Może to powodować niestabilność i wiele błędnych wpisów w logach serwisu. Upewnij się, że żadna grupa użytkowników nie jest przypisana do strony.'; $_lang["configcheck_errorpage_unpublished"] = 'Strona błędu Twojego serwisu jest nieopublikowana lub nie istnieje.'; $_lang["configcheck_errorpage_unpublished_msg"] = 'Oznacza to, że strona błędu Twojego serwisu jest niedostępna dla odwiedzających. Opublikuj tą stronę albo upewnij się, że jest ona przypisana do istniejącego dokumentu w drzewie zawartości Twojej strony.'; +$_lang["configcheck_filemanager_path"] = 'Obecne ustawienie File Manager path wygląda nieprawidłowo.'; +$_lang["configcheck_filemanager_path_msg"] = 'To może się zdarzyć np. po przeniesieniu instalacji do innego katalogu lub innego serwera. Proszę sprawdzić i zapisać Konfigurację EVO.'; $_lang["configcheck_hide_warning"] = 'Nie pokazuj tego ponownie.'; $_lang["configcheck_images"] = 'Katalog obrazów nie jest zapisywalny'; $_lang["configcheck_images_msg"] = 'Katalog z obrazkami nie jest zapisywalny, lub nie istnieje. Oznacza to, że funkcje menadżera obrazków w edytorze nie będą działać!'; $_lang["configcheck_installer"] = 'instalator wciąż obecny'; -$_lang["configcheck_installer_msg"] = 'Katalog install/ zawiera instalator MODX. Wyobraź sobie co może nastąpić jeśli niepowołana osoba odkryje ten folder i uruchomi instalator! Prawdopodobnie nie zajdzie za daleko, ponieważ będzie musiała wprowadź informacje dostępu do bazy danych, ale wciąż najlepszym rozwiązaniem jest usunięcie tego folderu z serwera.'; +$_lang["configcheck_installer_msg"] = 'Katalog /install zawiera instalator EVO. Wyobraź sobie co może nastąpić jeśli niepowołana osoba odkryje ten folder i uruchomi instalator! Prawdopodobnie nie zajdzie za daleko, ponieważ będzie musiała wprowadź informacje dostępu do bazy danych, ale wciąż najlepszym rozwiązaniem jest usunięcie tego katalogu z serwera.'; $_lang["configcheck_lang_difference"] = 'niepoprawna ilość wpisów w pliku językowym'; $_lang["configcheck_lang_difference_msg"] = 'Aktualnie wybrany język posiada inną liczbę wpisów niż język domyślny. Niekoniecznie stanowi to problem, jednakże może to oznaczać, że plik języka wymaga aktualizacji.'; $_lang["configcheck_notok"] = 'Jedno lub więcej z ustawień konfiguracyjnych nie zostało zweryfikowane: '; $_lang["configcheck_ok"] = 'Sprawdzanie przebiegło pomyślnie - brak ostrzeżeń.'; $_lang["configcheck_php_gdzip"] = 'Rozszerzenia GD i/albo Zip PHP nie zostały znalezione.'; -$_lang["configcheck_php_gdzip_msg"] = 'Do poprawnego działania MODX potrzebuje włączonych w konfiguracji PHP rozszerzeń GD oraz Zip. MODX będzie wciąż działał poprawnie, jednak nie będzie możliwe korzystanie z wszystkich jego funkcji: managera plików, edytora obrazów oraz Captcha przy logowaniu.'; +$_lang["configcheck_php_gdzip_msg"] = 'Do poprawnego działania EVO potrzebuje włączonych w konfiguracji PHP rozszerzeń GD oraz Zip. EVO będzie wciąż działał poprawnie, jednak nie będzie możliwe korzystanie z wszystkich jego funkcji: managera plików, edytora obrazów oraz Captcha przy logowaniu.'; +$_lang["configcheck_rb_base_dir"] = 'Obecne ustawienie File base path wygląda nieprawidłowo.'; +$_lang["configcheck_rb_base_dir_msg"] = 'To może się zdarzyć np. po przeniesieniu instalacji do innego katalogu lub innego serwera. Proszę sprawdzić i zapisać Konfigurację EVO.'; $_lang["configcheck_register_globals"] = 'register_globals jest włączona w konfiguracji PHP'; $_lang["configcheck_register_globals_msg"] = 'Taka konfiguracja może zagrozić bezpieczeństwu strony, ponieważ powoduje większą wrażliwość na ataki typu XSS.'; $_lang["configcheck_title"] = 'Sprawdzenie konfiguracji'; @@ -173,7 +177,7 @@ $_lang["confirm_duplicate_record"] = 'Czy na pewno chcesz zduplikować ten rekord?'; $_lang["confirm_empty_trash"] = 'Opróżnienie kosza spowoduje całkowite usunięcie wcześniej skasowanych dokumentów?nnKontynuować?'; $_lang["confirm_load_depends"] = 'Czy na pewno chcesz załadować ekran Menedżera zależności bez zapisywania zmian?'; -$_lang["confirm_name_change"] = 'Zmiana nazwy użytkownika może wpłynąć na inne aplikacje podlinkowane do panelu administracji. nn Czy na pewno chcesz zmienić nazwę użytkownika?'; +$_lang["confirm_name_change"] = 'Zmiana nazwy użytkownika może wpłynąć na inne aplikacje podłączone do panelu administracji.\n\nCzy na pewno chcesz zmienić tę nazwę użytkownika?'; $_lang["confirm_publish"] = '\n\nOpublikowanie tego dokumentu spowoduje usunięcie wcześniejszych dat publikacji/zamknięcia publikacji, które mogły być ustawione. Jeśli chcesz zachować te daty wybierz \'edycję\' dokumentu.nnKontynuować?'; $_lang["confirm_remove_locks"] = 'Użytkownicy czasami zamykają przeglądarkę podczas edycji dokumentu, szablonu, snippeta lub parsera. W ten sposób pozostawiają edytowane pozycje zablokowane. Naciskając OK możesz zdjąć wszystkie aktualne blokady.nnKontynuować?'; $_lang["confirm_reset_sort_order"] = 'Czy jesteś pewien że chcesz zresetować \"sort order/index\" wszystkich wyświetlonych elementów do 0?'; @@ -191,7 +195,7 @@ $_lang["createdon"] = 'Data utworzenia'; $_lang["create_new"] = 'Utwórz nowy'; $_lang["credits"] = 'Autorzy'; -$_lang["credits_shouts_msg"] = '

          MODX jest zarządzany i utrzymywany przez modx.com.

          '; +$_lang["credits_shouts_msg"] = '

          EVO jest zarządzane i utrzymywane przez evo.im.

          '; $_lang["custom_contenttype_message"] = 'Tutaj możesz dodać własne typy treści, które zostaną użyte w dokumentach. Aby dodać nową pozycję wprowadź typ treści w polu tekstowym i naciśnij przycisk \'Dodaj\'.'; $_lang["custom_contenttype_title"] = 'Własne typy treści'; $_lang["database_charset"] = 'Baza danych - zestaw znaków'; @@ -301,8 +305,8 @@ $_lang["export_site_failed_no_write"] = 'Nie można zapisać pliku.'; $_lang["export_site_html"] = 'Eksportuj stronę do HTML'; $_lang["export_site_maxtime"] = 'Maksymalny czas eksportu:'; -$_lang["export_site_maxtime_message"] = 'Tutaj możesz ustawić ilość sekund, które system może przeznaczyć na eksportowanie serwisu (pomijając ustawienie PHP). Wprowadź 0 dla nieograniczonego czasu, jednak takie ustawienie może prowadzić do niestabilności serwera i jest niezalecane.'; -$_lang["export_site_message"] = 'Używając tej funkcji możesz wyeksportować cały serwis do statycznego HTML. Pamiętaj, że stracisz wiele funkcjonalności systemu MODX:

          • Wyświetlenia stron, które zostały wyeksportowane nie zostaną zapisane.
          • Interaktywne snippety nie będą działać w wyeksportowanych plikach
          • Tylko zwykłe dokumenty zostaną wyeksportowane, odnośniki web nie.
          • Proces eksportu może się nie udać jeśli Twoje dokumenty zawierają snippety z nagłówkiem przekierowania.
          • Układ i wygląd strony może się różnić od zakładanego, w zależności od tego jak skonstruowałeś swoje dokumenty, arkusze stylów, obrazki. Aby to naprawić możesz spróbować przenieść wyeksportowane pliki do katalogu głównego (tam gdzie jest umieszczony główny plik MODX-a \'index.php\'.

          Proszę wypełnić formularz i nacisnąć \'Eksport\' aby rozpocząć proces eksportu. Pliki zostaną zapisane w lokalizacji, którą podałeś używając aliasu dokumentu jako nazwy pliku. Podczas eksportu dobrze jest ustawić opcję konfiguracji MODX-a \'Przyjazne aliasy\' na \'Tak\'.
          W zależności od rozmiaru serwisu eksport może trochę potrwać.
          Wszystkie istniejące pliki zostaną nadpisane nowymi, jeśli ich nazwy będą identyczne!

          '; +$_lang["export_site_maxtime_message"] = 'Tutaj możesz określić ilość sekund, które EVO może przeznaczyć na eksportowanie serwisu (pomijając ustawienie PHP). Wprowadź 0 dla nieograniczonego czasu, jednak takie ustawienie może prowadzić do niestabilności serwera i jest niezalecane.'; +$_lang["export_site_message"] = '

          Używając tej funkcji możesz wyeksportować cały serwis do statycznego HTML. Pamiętaj, że stracisz wiele funkcjonalności systemu EVO:

          • Wyświetlenia stron, które zostały wyeksportowane nie zostaną zapisane.
          • Interaktywne snippety nie będą działać w wyeksportowanych plikach
          • Tylko zwykłe dokumenty zostaną wyeksportowane, odnośniki web nie.
          • Proces eksportu może się nie udać jeśli Twoje dokumenty zawierają snippety z nagłówkiem przekierowania.
          • Układ i wygląd strony może się różnić od zakładanego, w zależności od tego jak skonstruowałeś swoje dokumenty, arkusze stylów, obrazki. Aby to naprawić możesz spróbować przenieść wyeksportowane pliki do katalogu głównego, tam gdzie jest umieszczony główny plik EVO index.php.

          Proszę wypełnić formularz i nacisnąć \'Eksport\' aby rozpocząć proces eksportu. Pliki zostaną zapisane w lokalizacji, którą podałeś używając aliasu dokumentu jako nazwy pliku. Podczas eksportu dobrze jest ustawić opcję konfiguracji EVO \'Przyjazne aliasy\' na \'Tak\'. W zależności od rozmiaru serwisu eksport może trochę potrwać.
          Wszystkie istniejące pliki zostaną nadpisane nowymi, jeśli ich nazwy będą identyczne!

          '; $_lang["export_site_numberdocs"] = 'Znaleziono %s dokumentów do eksportu...

          '; $_lang["export_site_prefix"] = 'Prefix pliku:'; $_lang["export_site_start"] = 'Rozpocznij eksport'; @@ -321,7 +325,7 @@ $_lang["file_deleted"] = 'Powodzenie!'; $_lang["file_download_file"] = 'Ściągnij plik'; $_lang["file_download_unzip"] = 'Rozpakuj plik'; -$_lang["file_folder_chmod_error"] = 'Nie można zmienić uprawnień; musisz je zmienić poza MODX.'; +$_lang["file_folder_chmod_error"] = 'Nie można zmienić uprawnień, musisz je zmienić poza EVO.'; $_lang["file_folder_created"] = 'Folder został stworzony pomyślnie!'; $_lang["file_folder_deleted"] = 'Folder został usunięty!'; $_lang["file_folder_not_created"] = 'Nie można utworzyć folderu'; @@ -331,7 +335,7 @@ $_lang["file_saved"] = 'Plik uaktualniony pomyślnie!'; $_lang["file_unzip"] = 'Rozpakowanie zakończone sukcesem!'; $_lang["file_unzip_fail"] = 'Błąd podczas rozpakowywania!'; -$_lang["filemanager_path_message"] = 'IIS często błędnie określa ustawienie document_root, które jest używane przez menedżer plików do określenia co może być widoczne dla ciebie. Jeśli masz problemy z menadżerem plików, upewnij się, że ta ścieżka wskazuje na katalog główny instalacji MODX.'; +$_lang["filemanager_path_message"] = 'IIS często błędnie określa ustawienie document_root, które jest używane przez menedżer plików do określenia co może być widoczne dla ciebie. Jeśli masz problemy z menadżerem plików, upewnij się, że ta ścieżka wskazuje na katalog główny instalacji EVO.'; $_lang["filemanager_path_title"] = 'Ścieżka menadżera plików'; $_lang["files_access_denied"] = 'Brak dostępu!'; $_lang["files_data"] = 'Dane'; @@ -373,7 +377,7 @@ $_lang["forgot_password_email_link"] = 'Kliknij tutaj, aby zakończyć proces.'; $_lang["forgot_your_password"] = 'Zapomniane hasło?'; $_lang["friday"] = 'Piątek'; -$_lang["friendly_alias_message"] = 'Jeżeli używasz przyjaznych URL\'i i dokument posiada alias, będzie on miał zawsze pierwszeństwo przed przyjaznym adresem URL. Ustawiając tę opcję na \'tak\', prefiks i sufiks przyjaznego URL\'u zostanie również użyty z aliasem dokumentu. Na przykład, jeżeli dokument z ID 1 ma alias `wprowadzenie` i prefiks ustawiony na `` oraz sufiks na `.html`, ustawiając tę opcję na `tak` otrzymamy `wprowadzenie.html`. Jeżeli nie będzie aliasu, MODX wygeneruje `1.html` jako odsyłacz.'; +$_lang["friendly_alias_message"] = 'Jeżeli używasz przyjaznych URL\'i i dokument posiada alias, będzie on miał zawsze pierwszeństwo przed przyjaznym adresem URL. Ustawiając tę opcję na \'tak\', prefiks i sufiks przyjaznego URL\'u zostanie również użyty z aliasem dokumentu. Na przykład, jeżeli dokument z ID 1 ma alias "wprowadzenie" i prefiks nie jest ustawiony (pusty) oraz sufiks na ".html", ustawiając tę opcję na "tak" otrzymamy "wprowadzenie.html". Jeżeli nie będzie aliasu, EVO wygeneruje "1.html" jako odsyłacz.'; $_lang["friendly_alias_title"] = 'Używaj aliasów URL'; $_lang["friendlyurls_message"] = 'Opcja ta pozwala na używanie przyjaznych dla wyszukiwarek adresów URL z MODX. Proszę zwrócić uwagę, że opcja ta działa jedynie dla instalacji MODX na serwerze Apache i wymaga odpowiednio przygotowanego pliku .htaccess. Zapoznaj się z plikiem .htaccess zawartym w dystrybucji, aby uzyskać dodatkowe informacje.'; $_lang["friendlyurls_title"] = 'Włącz przyjazny URL'; @@ -384,11 +388,13 @@ $_lang["functionnotimpl"] = 'Przepraszam!'; $_lang["functionnotimpl_message"] = 'Ta funkcja nie została jeszcze zaimplementowana.'; $_lang["further_info"] = 'Pozostałe informacje'; +$_lang["global_tabs"] = 'Global Tabs'; $_lang["go"] = 'Dalej'; $_lang["group_access_permissions"] = 'Dostęp grup użytkowników'; +$_lang['group_tvs'] = 'Grupowanie Zmiennych Szablonu'; $_lang["guid"] = 'GUID'; $_lang["help"] = 'Pomoc'; -$_lang["help_msg"] = '

          Możesz uzyskać darmową pomoc poprzez odwiedzenie Forum MODX. Istnieje również wciąż rozwijana Dokumentacja i Instrukcje dla MODX\'a, dotyczące praktycznie wszystkich aspektów pracy z MODX\'em.

          Planujemy również usługę wsparcia komercyjnego dla MODX\'a. Zainteresowanych prosimy o kontakt mailowy.'; +$_lang["help_msg"] = '

          Możesz uzyskać darmową pomoc poprzez odwiedzenie Forum EVO. Istnieje również wciąż rozwijana Dokumentacja i Instrukcje dla EVO, dotyczące praktycznie wszystkich aspektów pracy z EVO.

          Planujemy również usługę wsparcia komercyjnego dla EVO. Zainteresowanych prosimy o kontakt mailowy.

          '; $_lang["help_title"] = 'Pomoc'; $_lang["hide_tree"] = 'Ukryj drzewo'; $_lang["home"] = 'Start'; @@ -400,6 +406,7 @@ $_lang["htmlsnippet_name"] = 'Nazwa chunka'; $_lang["htmlsnippet_title"] = 'Utwórz/edytuj chunka'; $_lang["icon"] = 'Ikona'; +$_lang["icon_description"] = 'Klasa CSS np. fa fa-star'; $_lang["id"] = 'ID'; $_lang["illegal_parent_child"] = 'Przypisanie nadrzędne:\n\nDokument jest dzieckiem wybranego dokumentu.'; $_lang["illegal_parent_self"] = 'Przypisanie nadrzędne:\n\nWybrany dokument nie może być przypisany do samego siebie.'; @@ -429,6 +436,10 @@ $_lang["insert"] = 'Wstaw'; $_lang["maxImageWidth"] = 'Maksymalna szerokość obrazu'; $_lang["maxImageHeight"] = 'Maksymalna wysokość obrazu'; +$_lang["clientResize"] = 'Zmień rozmiar obrazów po stronie użytkownika'; +$_lang["clientResize_message"] = 'Gdy włączone, rozmiar obrazów zostanie zmieniony przez przeglądarkę, przed wysłaniem na serwer'; +$_lang["noThumbnailsRecreation"] = 'Generuj miniaturki tylko podczas wysyłania'; +$_lang["noThumbnailsRecreation_message"] = 'Przeglądarka plików EVO stworzy miniaturki tylko podczas wysyłania; Jeśli niektóre pliki nie mają miniaturek, miniaturki dla nich nie zostaną stworzone'; $_lang["thumbWidth"] = 'Maksymalna szerokość miniatury'; $_lang["thumbHeight"] = 'Maksymalna wysokość miniatury'; $_lang["thumbsDir"] = 'Położenie katalogu miniatur'; @@ -445,7 +456,7 @@ $_lang["keyword"] = 'Słowo kluczowe'; $_lang["keywords"] = 'Słowa kluczowe'; $_lang["keywords_intro"] = 'Aby edytować słowo kluczowe wpisz nowe słowo w polu tekstowym obok słowa, które chcesz zmienić. Aby usunąć słowo kluczowe, zaznacz pole \'usuń\' dla danego słowa. Jeśli zaznaczysz pole usunięcia i zmienisz nazwę pola zostanie ono usunięte!'; -$_lang["language_message"] = 'Wybierz język dla EVO Content Manager.'; +$_lang["language_message"] = 'Wybierz język dla Menedżera EVO.'; $_lang["language_title"] = 'Język Managera'; $_lang["last_update"] = 'Ostatnia aktualizacja'; $_lang["launch_site"] = 'Uruchom stronę'; @@ -455,7 +466,7 @@ $_lang["list_mode"] = 'Włącz/wyłącz tryb listy - używany to wyświetlenia listy wszystkich rekordów w tabeli.'; $_lang["loading_doc_tree"] = 'Ładowanie drzewa dokumentów...'; $_lang["loading_menu"] = 'Ładowanie menu...'; -$_lang["loading_page"] = 'Proszę zaczekać, aż MODX załaduje stronę...'; +$_lang["loading_page"] = 'Proszę czekać, EVO ładuje stronę...'; $_lang["localtime"] = 'Czas lokalny'; $_lang["lock_htmlsnippet"] = 'Zablokuj możliwość edycji chunka'; $_lang["lock_htmlsnippet_msg"] = 'Tylko Administrator (ID Roli 1) może edytować tego chunka.'; @@ -483,7 +494,7 @@ $_lang["login_homepage"] = 'Strona po zalogowaniu'; $_lang["login_homepage_message"] = 'Wprowadź ID dokumentu, który chcesz pokazać użytkownikowi po jego zalogowaniu. Uwaga! Upewnij się, że ID, które wprowadziłeś jest przypisane do istniejącego dokumentu oraz, że jest opublikowane i dostępne dla danego użytkownika!'; $_lang["login_message"] = 'Proszę podać swoje dane uwierzytelniające, aby się zalogować. Podając nazwę użytkownika oraz hasło zwróć szczególną uwagę na wielkość znaków!'; -$_lang["logo_slogan"] = 'EVO Content Manager'; +$_lang["logo_slogan"] = 'EVO System Zarządzania Treścią - \nTwórz więcej robiąc mniej'; $_lang["logout"] = 'Wyloguj się'; $_lang["long_title"] = 'Długi tytuł'; $_lang["mail_check_timeperiod_message"] = 'Jak często sprawdzać, czy w Menadżerze są nowe wiadomości, w sekundach'; @@ -502,6 +513,13 @@ $_lang["manager_permissions"] = 'Uprawnienia Menedżera'; $_lang["manager_theme"] = 'Motyw Managera'; $_lang["manager_theme_message"] = 'Wybierz motyw panelu administracji.'; +$_lang["manager_theme_mode"] = 'Schemat kolorów'; +$_lang["manager_theme_mode1"] = 'Wszystko jasne'; +$_lang["manager_theme_mode2"] = 'Ciemna nawigacja'; +$_lang["manager_theme_mode3"] = 'Ciemna nawigacja i drzewo zasobów'; +$_lang["manager_theme_mode4"] = 'Wszystko ciemne'; +$_lang['manager_theme_mode_message'] = 'Ustawienie jest traktowane jako domyślne i może być ominięte, gdy użyto przycisku zmiany motywu w drzewie zasobów: '; +$_lang['manager_theme_mode_title'] = 'Motyw kolorystyczny'; $_lang["messages"] = 'Wiadomości'; $_lang["messages_all"] = 'Wszystkich'; $_lang["messages_compose"] = 'Nowa wiadomość'; @@ -570,18 +588,18 @@ $_lang["module_title"] = 'Utwórz/edytuj moduł'; $_lang["module_viewdepend_msg"] = 'Przeglądaj elementy, z których korzysta moduł. Kliknij na przycisk "Menedżera zależności" aby modyfikować te powiązania.'; $_lang["modules"] = 'Moduły'; -$_lang["modx_news"] = 'Wiadomości MODX'; -$_lang["modx_news_tab"] = 'Wiadomości MODX'; -$_lang["modx_news_title"] = 'Wiadomości MODX'; -$_lang["modx_security_notices"] = 'Powiadomienia bezpieczeństwa MODX'; -$_lang["modx_version"] = 'Wersja MODX'; +$_lang["modx_news"] = 'EVO Powiadomienia'; +$_lang["modx_news_tab"] = 'Wiadomości'; +$_lang["modx_news_title"] = 'Wiadomości'; +$_lang["modx_security_notices"] = 'EVO Powiadomienia bezpieczeństwa'; +$_lang["modx_version"] = 'Wersja EVO'; $_lang["monday"] = 'Poniedziałek'; $_lang["move"] = 'Przenieś'; $_lang["move_resource"] = 'Przenieś dokument'; $_lang["move_resource_message"] = 'Możesz przenieść dokument wraz z dokumentami podrzędnymi poprzez zaznaczenie nowego dokumentu nadrzędnego w drzewie. Jeśli wybierzesz dokument, który nie jest folderem, zostanie on w niego zmieniony. Proszę kliknąć na nowym dokumencie nadrzędnym w drzewie.'; $_lang["move_resource_new_parent"] = 'Proszę wybrać nowy dokument nadrzędny w drzewie dokumentów.'; $_lang["move_resource_title"] = 'Przenieś dokument'; -$_lang["name"] = 'Nazwa'; +$_lang["name"] = 'Nazwa użytkownika'; $_lang["new_category"] = 'Nowa kategoria'; $_lang["new_file_permissions_message"] = 'Przy ładowaniu nowego pliku w Menadżerze Plików, system spróbuje zmienić uprawnienia pliku na podane. Może to nie działać w pewnych przypadkach, np. na serwerze IIS - w takim przypadku musisz zmienić uprawnienia ręcznie.'; $_lang["new_file_permissions_title"] = 'Uprawnienia nowych plików'; @@ -596,8 +614,8 @@ $_lang["new_snippet"] = 'Nowy snippet'; $_lang["new_template"] = 'Nowy szablon'; $_lang["new_tmplvars"] = 'Nowa zmienna szablonu'; -$_lang["new_user"] = 'Nowy użytkownik'; -$_lang["new_web_user"] = 'Nowy użytkownik web'; +$_lang["new_user"] = 'Nowy użytkownik Menedżera'; +$_lang["new_web_user"] = 'Nowy użytkownik Web'; $_lang["new_resource"] = 'Nowy dokument'; $_lang["no"] = 'Nie'; $_lang["no_active_users_found"] = 'Nie znaleziono aktywnych użytkowników.'; @@ -624,13 +642,14 @@ $_lang["online"] = 'Online'; $_lang["onlineusers_action"] = 'Akcja'; $_lang["onlineusers_actionid"] = 'ID akcji'; -$_lang["onlineusers_ipaddress"] = 'Adres IP użytkownika'; +$_lang["onlineusers_ipaddress"] = 'Adres IP'; $_lang["onlineusers_lasthit"] = 'Ostatnio odwiedzone'; -$_lang["onlineusers_message"] = 'Ta lista pokazuje wszystkich użytkowników aktywnych przez ostatnie 20 minut (aktualny czas '; +$_lang["onlineusers_message"] = 'Użytkownicy aktywni w ostatnich 20 minutach ('; $_lang["onlineusers_title"] = 'Zalogowani użytkownicy'; -$_lang["onlineusers_user"] = 'Użytkownik'; +$_lang["onlineusers_user"] = 'Nazwa użytkownika'; $_lang["onlineusers_userid"] = 'ID Użytkownika'; $_lang["optimize_table"] = 'Kliknij tutaj, aby zoptymalizować tabelę'; +$_lang["page_data_alias"] = 'Alias'; $_lang["page_data_cacheable"] = 'Włącz cache'; $_lang["page_data_cacheable_help"] = 'Zaznaczenie tego pola pozwoli na zapisywanie tego dokumentu w cache\'u. Jeśli dokument zawiera snippety, upewnij się że pole jest odznaczone.'; $_lang["page_data_cached"] = 'Źródło pobrane z cache\'u:'; @@ -675,15 +694,15 @@ $_lang["parse_docblock_msg"] = 'Uwaga (!): To zresetuje nazwę, konfigurację, opis oraz kategorię do wartości domyślnych poprzez ponowne skanowanie kodu źródłowego.'; $_lang["password"] = 'Hasło'; $_lang["password_change_request"] = 'Żądanie zmiany hasła'; -$_lang["password_gen_gen"] = 'Pozwól MODX wygenerować hasło.'; +$_lang["password_gen_gen"] = 'Pozwól EVO wygenerować hasło.'; $_lang["password_gen_length"] = 'Hasło, które podałeś musi mieć przynajmniej 6 znaków.'; $_lang["password_gen_method"] = 'Metoda generowania nowego hasła'; $_lang["password_gen_specify"] = 'Pozwól mi wprowadzić hasło:'; $_lang["password_method"] = 'Metoda powiadamiania o haśle'; $_lang["password_method_email"] = 'Wyślij nowe hasło emailem.'; $_lang["password_method_screen"] = 'Pokaż nowe hasło na ekranie.'; -$_lang["password_msg"] = 'Nowym hasłem dla %s jest %s.'; -$_lang["php_version_check"] = 'MODX jest kompatybilny z PHP wersją 5.0.0 i wyższą. Zaktualizuj swoją instalację PHP!'; +$_lang["password_msg"] = 'Nowym hasłem dla %s jest %s
          '; +$_lang["php_version_check"] = 'EVO jest kompatybilne z wersją PHP 5.6.0 i wyższą. Ten serwer używa wersji %s%. Zaktualizuj swoją wersję PHP!'; $_lang["plugin"] = 'Wtyczka'; $_lang["plugins"] = 'Wtyczki'; $_lang["plugin_code"] = 'Kod wtyczki (php)'; @@ -698,16 +717,17 @@ $_lang["plugin_priority_instructions"] = 'Przeciągnij aby zmienić kojejność pluginów w każdej z kategorii wydarzeń. Plugin który ma być uruchomiony jako pierwszy powinien być na szczycie listy.'; $_lang["plugin_priority_title"] = 'Kolejność wykonywania pluginów'; $_lang["purge_plugin"] = 'Usuń przestarzałe wtyczki'; +$_lang["purge_plugin_confirm"] = 'Czy na pewno chcesz usunąć przestarzałe pluginy?'; $_lang["plugin_title"] = 'Stwórz/edytuj wtyczkę'; $_lang["preview"] = 'Podgląd'; -$_lang["preview_msg"] = 'To jest podgląd ostatnio dokonanych zmian. Kliknij tutaj aby zapisać i odświeżyć bieżące zmiany'; +$_lang["preview_msg"] = 'To jest podgląd twoich ostatnio zapisanych zmian. Kliknij tutaj aby zapisać i odświeżyć obecne zmiany'; $_lang["preview_resource"] = 'Podgląd dokumentu'; $_lang["private"] = 'Prywatny'; $_lang["public"] = 'Publiczny'; $_lang["publish_date"] = 'Data publikacji'; $_lang["publish_events"] = 'Wydarzenia publikacji'; $_lang["publish_resource"] = 'Publikuj dokument'; -$_lang["rb_base_dir_message"] = 'Wprowadź fizyczną ścieżkę do katalogu zasobów. To ustawienie jest zwykle generowane automatycznie. Może nie działać na serwerze IIS.
          Uwaga: katalog zasobów musi zawierać podkatalogi: images, files, flash, media aby przeglądarka zasobów działała poprawnie.'; +$_lang["rb_base_dir_message"] = 'Wprowadź fizyczną ścieżkę do katalogu zasobów. To ustawienie jest zwykle generowane automatycznie. Może nie działać na serwerze IIS. Uwaga: katalog zasobów musi zawierać podkatalogi: images, files, flash, media aby przeglądarka zasobów działała poprawnie.'; $_lang["rb_base_dir_title"] = 'Ścieżka do plików'; $_lang["rb_base_url_message"] = 'Podaj URL do katalogu zasobów. To ustawienia jest zwykle generowane automatycznie. Może nie działać na serwerze IIS.'; $_lang["rb_base_url_title"] = 'URL przeglądarki plików'; @@ -753,7 +773,7 @@ $_lang["resource_opt_contentdispo"] = 'Przetwarzanie treści'; $_lang["resource_opt_contentdispo_help"] = 'Użyj pola przetwarzania treści, aby określić jak ten dokument zostanie obsłużony przez przeglądarkę internetową. Dla plików do pobrania wybierz opcję: załącznik.'; $_lang["resource_opt_emptycache"] = 'Opróżnij cache'; -$_lang["resource_opt_emptycache_help"] = 'Zaznaczenie tego pola spowoduje opróżnienie cache\'u po zapisaniu dokumentu. W ten sposób odwiedzający nie będą widzieli starszej wersji dokumentu.'; +$_lang["resource_opt_emptycache_help"] = 'Zaznaczenie tego pola spowoduje opróżnienie cache po zapisaniu dokumentu. W ten sposób odwiedzający nie będą widzieli starszej wersji dokumentu.'; $_lang["resource_opt_folder"] = 'Folder?'; $_lang["resource_opt_folder_help"] = 'Zaznacz tę opcję, aby dokument pełnił również funkcję folderu dla innych dokumentów. Nie musisz się przejmować tą opcją, gdyż MODX z reguły zajmuje się ustawieniami folderów automatycznie.'; $_lang["resource_opt_menu_index"] = 'Pozycja w menu'; @@ -812,7 +832,7 @@ $_lang["role_delete_role"] = 'Usuwanie ról'; $_lang["role_delete_snippet"] = 'Usuwanie snippetów'; $_lang["role_delete_template"] = 'Usuwanie szablonów'; -$_lang["role_delete_user"] = 'Usuwanie użytkowników'; +$_lang["role_delete_user"] = 'Usuń użytkowników Menedżera'; $_lang["role_delete_web_user"] = 'Usuń użytkowników web'; $_lang["role_edit_chunk"] = 'Edytowanie chunków'; $_lang["role_edit_doc"] = 'Edytowanie dokumentu'; @@ -823,7 +843,7 @@ $_lang["role_edit_settings"] = 'Zmiana ustawień witryny'; $_lang["role_edit_snippet"] = 'Edytowanie snippetów'; $_lang["role_edit_template"] = 'Edytowanie szablonów'; -$_lang["role_edit_user"] = 'Edytowanie użytkowników'; +$_lang["role_edit_user"] = 'Edytuj użytkowników Menedżera'; $_lang["role_edit_web_user"] = 'Edytuj użytkowników web'; $_lang["role_empty_trash"] = 'Trwałe kasowanie usuniętych dokumentów'; $_lang["role_errors"] = 'Pokazuj okno dialogowe błędów'; @@ -844,8 +864,8 @@ $_lang["role_name"] = 'Nazwa roli'; $_lang["role_new_module"] = 'Utwórz nowy moduł'; $_lang["role_new_role"] = 'Tworzenie ról'; -$_lang["role_new_user"] = 'Tworzenie użytkowników'; -$_lang["role_new_web_user"] = 'Stwórz nowego użytkownika web'; +$_lang["role_new_user"] = 'Dodaj nowych użytkowników Menedżera'; +$_lang["role_new_web_user"] = 'Dodaj użytkownika Web'; $_lang["role_plugin_management"] = 'Zarządzenie wtyczkami'; $_lang["role_publish_doc"] = 'Publikowanie dokumentów'; $_lang["role_remove_locks"] = 'Usuń blokady'; @@ -859,13 +879,13 @@ $_lang["role_save_role"] = 'Zapisywanie ról'; $_lang["role_save_snippet"] = 'Zapisywanie snippetów'; $_lang["role_save_template"] = 'Zapisywanie szablonów'; -$_lang["role_save_user"] = 'Zapisywanie użytkowników'; +$_lang["role_save_user"] = 'Zapisz użytkowników Menedżera'; $_lang["role_save_web_user"] = 'Zapisz użytkowników web'; $_lang["role_snippet_management"] = 'Zarządzanie snippetami'; $_lang["role_template_management"] = 'Zarządzanie szablonami'; $_lang["role_title"] = 'Utwórz/ edytuj rolę'; $_lang["role_udperms"] = 'Zarządzanie uprawnieniami'; -$_lang["role_user_management"] = 'Zarządzanie użytkownikami'; +$_lang["role_user_management"] = 'Zarządzanie użytkownikami Menedżera'; $_lang["role_view_docdata"] = 'Przeglądanie danych dokumentu'; $_lang["role_view_eventlog"] = 'Przeglądanie dziennika zdarzeń'; $_lang["role_view_logs"] = 'Przeglądanie dziennika menadżera'; @@ -873,10 +893,10 @@ $_lang["role_web_access_persmissions"] = 'Uprawnienia dostępu web'; $_lang["role_web_user_management"] = 'Zarządzanie użytkownikami web'; $_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'Wprowadź URL źródła wiadomości MODX'; +$_lang["rss_url_news_message"] = 'Wprowadź URL źródła wiadomości EVO.'; $_lang["rss_url_news_title"] = 'Żródło RSS wiadomości'; $_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'Wprowadź URL powiadomień bezpieczeństwa.'; +$_lang["rss_url_security_message"] = 'Wprowadź URL powiadomień bezpieczeństwa EVO.'; $_lang["rss_url_security_title"] = 'Źródło RSS bezpieczeństwa'; $_lang["run_module"] = 'Uruchom moduł'; $_lang["saturday"] = 'Sobota'; @@ -907,7 +927,7 @@ $_lang["search_results_returned_msg"] = 'Twoje kryteria wyszukiwania zwróciły %s dokumentów. Jeżeli wyników wyszukiwania jest bardzo dużo, spróbuj wpisać bardziej szczegółowe kryteria wyszukiwania. Dwie kolumny z lewej pozwolą ci znaleźć dokument w drzewie lub wyświetlić jego zawartość. Dwie kolumny po prawej pokażą odpowiednio, czy dokument został usunięty oraz czy jest opublikowany.

          '; $_lang["search_results_returned_title"] = 'Tytuł'; $_lang["search_view_docdata"] = 'Zobacz tą pozycję'; -$_lang["security"] = 'Bezpieczeństwo'; +$_lang["security"] = 'Użytkownicy '; $_lang["security_notices_tab"] = 'Powiadomienia bezpieczeństwa'; $_lang["security_notices_title"] = 'Powiadomienia bezpieczeństwa'; $_lang["select_date"] = 'Wybierz datę'; @@ -923,28 +943,37 @@ $_lang["set_automatic"] = 'Ustaw automatycznie'; $_lang["set_default"] = 'Ustaw domyślne'; $_lang["set_default_all"] = 'Ustaw domyślne'; -$_lang["settings_after_install"] = 'Ponieważ jest to nowa instalacja, wymagane jest abyś sprawdził ustawienia i zmienił te, które ci nie odpowiadają. Po sprawdzeniu ustawień, naciśnij \'Zapisz\' aby zaktualizowac ustawienia w bazie.

          '; +$_lang["settings_after_install"] = 'Ponieważ jest to nowa instalacja, wymagane jest abyś sprawdził ustawienia i zmienił te, które ci nie odpowiadają. Po sprawdzeniu ustawień, naciśnij \'Zapisz\' aby zaktualizować ustawienia w bazie.'; $_lang["settings_config"] = 'Konfiguracja'; $_lang["settings_dependencies"] = 'Zależności'; $_lang["settings_events"] = 'Zdarzenia systemowe'; $_lang["settings_furls"] = 'Przyjazny URL'; $_lang["settings_general"] = 'Ogólne'; +$_lang["settings_group_tv_message"] = 'Wybierz czy Zmienne Szablonu (TV) mają być grupowane w przypisane im kategorie podczas edycji zasobu'; +$_lang["settings_group_tv_options"] = 'Nie grupuj,Sekcje w głównej karcie,Karty w głównej karcie,Sekcje w osobnej karcie,Karty w osobnej karcie,Osobne karty'; $_lang["settings_misc"] = 'Pliki'; $_lang["settings_security"] = 'Bezpieczeństwo'; $_lang["settings_KC"] = 'Przeglądarka plików'; $_lang["settings_page_settings"] = 'Ustawienia'; $_lang["settings_photo"] = 'Zdjęcie'; $_lang["settings_properties"] = 'Właściwości'; +$_lang["show_fullscreen_btn_message"] = 'Pokaż w nawigacji przełącznik pełnego ekranu'; +$_lang["show_newresource_btn_message"] = 'Pokaż w nawigacji przycisk nowego zasobu'; +$_lang["settings_show_picker_message"] = 'Zmienia wygląd Menedżera i zapisuje w localstorage'; +$_lang["show_fullscreen_btn"] = 'Przełącznik pełnego ekranu'; +$_lang["show_newresource_btn"] = 'Przycisk nowego zasobu'; $_lang["settings_site"] = 'Strona'; -$_lang["settings_strip_image_paths_message"] = 'Włączenie tej opcji spowoduje, że system będzie konwertował źródła do obrazów ze ścieżek bezwzględnych na względne. To użyteczna funkcja, jeśli będziesz chciał kiedyś przenieść instalację systemu w inne miejsce. Jeśli nie masz pojęcia co to oznacza ustaw tą opcję na \'Nie\'.'; +$_lang["settings_strip_image_paths_message"] = 'Jeśli wybrano "Nie", EVO będzie tworzyć ścieżki do plików (obrazów, plików, filmów itd.) jako absolutne URL. Z kolei URL relatywne są pomocne gdy np. chcesz przenieść swoje EVO z domeny tymczasowej na docelową. Jeśli nie wiesz co to oznacza, wybierz opcję "Tak".'; $_lang["settings_strip_image_paths_title"] = 'Przepisuj ścieżki przeglądarki'; $_lang["settings_templvars"] = 'Zmienne szablonu'; $_lang["settings_title"] = 'Konfiguracja systemu'; $_lang["settings_ui"] = 'Interfejs i edytor'; $_lang["settings_users"] = 'Użytkownik'; +$_lang["settings_email_templates"] = 'E-mail i szablony'; $_lang["show_meta"] = 'Pokazuj zakładkę META tagów i słów kluczowych'; $_lang["show_meta_message"] = 'Pokazuj zakładkę META tagów i słów kluczowych podczas edycji dokumentu.'; $_lang["show_tree"] = 'Pokaż drzewo'; +$_lang["show_picker"] = 'Pokaż przełącznik kolorów'; $_lang["showing"] = 'Pokazuje'; $_lang["signupemail_message"] = 'Tutaj możesz ustawić treść wiadomości wysyłanej użytkownikom w momencie utworzenia im konta, pozwalającej MODX na wysłanie im e-maila z nazwą użytkownika i hasłem.
          Uwaga: Następujące zmienne są zamieniane przez Panel Administracyjny kiedy wiadomość jest wysyłana:

          [+sname+] - Nazwa twojej strony,
          [+saddr+] - Adres e-mail twojej strony,
          [+surl+] - Adres url strony,
          [+uid+] - Nazwa lub Id użytkownika,
          [+pwd+] - Hasło użytkownika,
          [+ufn+] - Pełna nazwa użytkownika.

          Pozostaw [+uid+] i [+pwd+] w treści e-maila, ponieważ w przeciwnym wypadku nazwa użytkownika oraz hasło nie zostanie wysłane w wiadomości i użytkownicy nie poznają swojej nazwy lub hasła!'; $_lang["signupemail_title"] = 'E-mail rejestracyjny'; @@ -988,19 +1017,20 @@ $_lang["sys_alert"] = 'Alarm systemowy'; $_lang["sysinfo_activity_message"] = 'Ta lista zawiera wykaz dokumentów, które były ostatnio edytowane.'; $_lang["sysinfo_userid"] = 'Użytkownik'; +$_lang["system"] = 'System'; $_lang["system_email_signup"] = ' Witaj [+uid+] Poniżej znajdziesz dane logowania do systemu zarządzania treścią serwisu [+sname+]: -Nazwa użytkownika: [+uid+] +Login: [+uid+] Hasło: [+pwd+] Hasło możesz zmienić po zalogowaniu do systemu ([+surl+]). Pozdrawiam, -Administrator +Administrator witryny '; $_lang["system_email_webreminder"] = 'Witaj [+uid+] @@ -1010,9 +1040,9 @@ Po zakończeniu możesz użyć następującego hasła do zalogowania się: -Hasło:[+pwd+] +Hasło: [+pwd+] -eśli nie zgłaszałeś zmiany hasła zignoruj ten e-mail. +Jeśli nie zgłaszałeś zmiany hasła zignoruj ten e-mail. Pozdrawiam, Administrator witryny'; @@ -1075,18 +1105,19 @@ $_lang["tmplvars_widget"] = 'Widget'; $_lang["tmplvars_widget_prop"] = 'Widget - właściwości'; $_lang["to"] = 'do'; +$_lang["toggle_fullscreen"] = 'Przełącz pełny ekran'; $_lang["tools"] = 'Narzędzia'; $_lang["top_howmany_message"] = 'Przeglądając raporty, jak duża powinna być lista pierwszych pozycji?'; $_lang["top_howmany_title"] = 'Liczba pierwszych pozycji'; $_lang["total"] = 'razem'; -$_lang["track_visitors_message"] = 'Logowanie wizyt pozwoli na stworzenie statystyk użytkowników twojej strony. Należy pamiętać, że opcja ta zwalnia nieco parser serwisu. Jeżeli nie interesują cię statystyki wizyt, możesz bezpiecznie wyłączyć tę opcję.'; -$_lang["track_visitors_title"] = 'Włącz statystyki'; +$_lang["track_visitors_message"] = 'Zaznacz aby wyświetlać dokumenty folderów w drzewie'; +$_lang["track_visitors_title"] = 'Pokaż dokumenty folderów'; $_lang["tree_page_click"] = 'Po kliknięciu na dokument'; $_lang["tree_page_click_message"] = 'Domyślna akcja wykonywana po kliknięciu na dokument w drzewie dokumentów.'; $_lang["use_breadcrumbs"] = 'Pokaż nawigację'; $_lang["use_breadcrumbs_message"] = 'Pokaż ścieżkę dokumentu podczas tworzenia lub edycji zasobu'; $_lang["tree_show_protected"] = 'Pokazuj chronione dokumenty'; -$_lang["tree_show_protected_message"] = 'Kiedy ta opcja jest ustawiona na "Nie", chronione dokumenty (i wszystkie ich poddokumenty) nie będą wyświetlane na drzewie dokumentów. "Nie" jest ustawieniem zgodnym z wcześniejszymi wersjami MODX.'; +$_lang["tree_show_protected_message"] = 'Kiedy ta opcja jest ustawiona na "Nie", chronione dokumenty (i wszystkie ich dokumenty) nie będą wyświetlane na drzewie dokumentów. "Nie" jest starym ustawieniem dla EVO.'; $_lang["truncate_table"] = 'Kliknij tu, aby skrócić tabelę'; $_lang["tuesday"] = 'Wtorek'; $_lang["tv"] = 'Zmienna Szablonu'; @@ -1122,6 +1153,7 @@ $_lang["use_alias_path_title"] = 'Pełna ścieżka URL'; $_lang["use_editor_message"] = 'Czy chcesz udostępnić edytor RTE? Jeżeli wygodniej ci pisać w HTML, możesz wyłączyć edytor za pomocą tych ustawień. Pamiętaj, że ta opcja dotyczy wszystkich dokumentów i wszystkich użytkowników!'; $_lang["use_editor_title"] = 'Włącz edytor'; +$_lang["use_global_tabs"] = 'Użyj Global Tabs'; $_lang["user"] = 'Użytkownik'; $_lang["user_block"] = 'Zablokowany'; $_lang["user_blockedafter"] = 'Zablokowane po'; @@ -1149,7 +1181,7 @@ $_lang["user_prevlogin"] = 'Ostatnie logowanie'; $_lang["user_role"] = 'Rola użytkownika'; $_lang["user_state"] = 'Województwo'; -$_lang["user_title"] = 'Utwórz/ edytuj użytkownika'; +$_lang["user_title"] = 'Dodaj/edytuj użytkownika Menedżera'; $_lang["user_upload_message"] = 'Jeśli chcesz zabronić temu użytkownikowi ładowania dowolnych typów plików z tej kategorii, upewnij się że opcja "Używaj ustawień konfiguracji systemu" jest odznaczona i pozostaw to pole puste.'; $_lang["user_use_config"] = 'Używaj ustawień konfiguracji systemu'; $_lang["user_zip"] = 'Kod pocztowy'; @@ -1182,14 +1214,16 @@ $_lang["webpwdreminder_title"] = 'E-mail przypomnienia Web'; $_lang["websignupemail_message"] = 'Tutaj możesz ustawić treść wiadomości wysyłanej użytkownikowi po utworzeniu dla niego nowego konta. Wiadomość będzie zawierać nazwę użytkownika i hasło.
          Uwaga: Poniższe znaczniki zostaną zamienione na tekst przy wysyłaniu wiadomości:

          [+sname+] - Nazwa Twojej strony,
          [+saddr+] - Adres e-mail,
          [+surl+] - URL Twojej strony,
          [+uid+] - Nazwa lub ID użytkownika,
          [+pwd+] - Hasło użytkownika,
          [+ufn+] - Pełna nazwa użytkownika.

          Pozostaw [+uid+] i [+pwd+] w treści wiadomości, ponieważ w przeciwnym razie użytkownik nie będzie w stanie zalogować się do serwisu!'; $_lang["websignupemail_title"] = 'E-mail rejestracyjny Web'; +$_lang["allow_multiple_emails_title"] = 'Pozwalaj użytkownikom mieć ten sam e-mail'; +$_lang["allow_multiple_emails_message"] = 'Pozwala użytkownikom Web korzystać z tego samego adresu e-mail. Uwaga: logika snippetów rejestrowania użytkownika i resetowania hasła, będzie musiała wziąć to ustawienie pod uwagę, jeśli wybrano "Tak".'; $_lang["wednesday"] = 'Środa'; $_lang["welcome_messages"] = 'Twoja skrzynka wiadomości zawiera %d wiadomość(-ci), z których %s jest nieprzeczytane.'; -$_lang["welcome_title"] = 'Witamy w panelu administracyjnym MODX'; -$_lang["which_editor_message"] = 'Tutaj możesz wybrać który edytor WYSIWYG chcesz używać. Możesz ściągnąć i zainstalować dodatkowe edytory ze strony MODX-a.'; +$_lang["welcome_title"] = 'Witaj w swoim systemie EVO'; +$_lang["which_editor_message"] = 'Tutaj możesz wybrać którego edytora Rich Text (RTE) chcesz używać. Możesz ściągnąć i zainstalować dodatkowe edytory ze strony EVO.'; $_lang["which_editor_title"] = 'Edytor'; $_lang["working"] = 'Przetwarzanie...'; $_lang["wrap_lines"] = 'Zawijaj wiersze'; -$_lang["xhtml_urls_message"] = 'Zamienia znaki ampersand (&) w URLach generowanych przez MODX na walidujące encje &amp;'; +$_lang["xhtml_urls_message"] = 'Zamienia znaki ampersand (&) w URL generowanych przez EVO na walidujące &amp; htmlentity'; $_lang["xhtml_urls_title"] = 'URL XHTML'; $_lang["yes"] = 'Tak'; $_lang["you_got_mail"] = 'Masz wiadomość'; @@ -1213,10 +1247,11 @@ $_lang["enable_bindings_title"] = 'Włącz komendy @Bindings'; $_lang["enable_bindings_message"] = 'Zapobiega wykonywaniu funkcji PHP poprzez TV @Bindings. Użyteczny gdy istnieją użytkownicy Managera, którzy nie powinni mieć dostępu do tworzenia kodu PHP, ale potrzebują tworzyć lub edytować TV. Wynikiem każdej TV która zawiera @Binding będzie "@Bindings disabled".'; $_lang["enable_filter_title"] = 'Włącz filtry'; -$_lang["enable_filter_message"] = 'Filtry pozwalają na manipulowanie pokazywaniem lub przetwarzaniem tagów. Pozwalają zmodyfikować wartości na poziomie szablonu analogicznie jak PHx. Więcej informacji.'; // todo: change link to documentation +$_lang["enable_filter_message"] = 'Filtry pozwalają na manipulowanie pokazywaniem lub przetwarzaniem tagów. Pozwalają zmodyfikować wartości na poziomie szablonu analogicznie jak PHx. Więcej informacji.'; // todo: change link to documentation $_lang["enable_filter_phx_warning"] = 'Jeśli wtyczka PHx zostanie wykryta, wbudowane filtry będą domyślnie wyłączone'; -$_lang["enable_filter_phx_warning"] = 'Jeśli wtyczka PHx zostanie wykryta, wbudowane filtry będą domyślnie wyłączone'; +$_lang["enable_at_syntax_title"] = 'Włącz <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) to prosta i lekka składnia szablonów. Została zaprojektowania aby wziąć pod uwagę współistnienie tagów HTML oraz ciągów danych treści.'; $_lang["bkmgr_alert_mkdir"] = 'Plik nie mógł zostać utworzony w katalogu. Proszę sprawdzić uprawnienia [+snapshot_path+]'; $_lang["bkmgr_restore_msg"] = '

          Serwis może zostać przywrócony używając pliku SQL.

          '; @@ -1235,7 +1270,7 @@ $_lang["bkmgr_restore_confirm"] = 'Czy jesteś pewien, że chcesz przywrócić kopię zapasową\n[+filename+] ?'; $_lang["bkmgr_snapshot_nothing"] = 'Brak zrzutów'; -$_lang["files.dynamic.php1"] = 'Utwórz plik tekstowy'; +$_lang["files.dynamic.php1"] = 'Nowy plik'; $_lang["files.dynamic.php2"] = 'Ten katalog nie może zostać wyświetlony.'; $_lang["files.dynamic.php3"] = 'Wystąpił problem z nazwą pliku.'; $_lang["files.dynamic.php4"] = 'Plik tekstowy został utworzony.'; @@ -1251,10 +1286,10 @@ $_lang["make_folders_message"] = 'Ukośnik będzie dodany do dokumentów oznaczonych jako foldery, gdy używa się przyjaznych URL.'; $_lang["check_files_onlogin_title"] = 'Sprawdzaj ważne pliki przy logowaniu'; -$_lang["check_files_onlogin_message"] = 'Włączając tę opcję, ważne pliki systemowe będą sprawdzane pod kątem niechcianych modyfikacji typowych dla ataków na stronę www. Chociaż nie jest to 100% zapezpiecznie, to może zaalarmować Cię o zmanipulowanych plikach MODX.'; +$_lang["check_files_onlogin_message"] = 'Włączając tę opcję, ważne pliki systemowe będą sprawdzane pod kątem niechcianych modyfikacji typowych dla ataków na stronę www. Chociaż nie jest to 100% zabezpieczenie, to może zaalarmować Cię o zmodyfikowanych plikach EVO.'; $_lang["configcheck_sysfiles_mod"] = 'Ważne pliki systemowe zostały zmienione.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'System został skonfigurowany tak aby sprawdzać ważne pliki systemowe pod kątem ataków. To ostrzeżenie niekoniecznie oznacza że strona została zaatakowana, jednakże powinno się sprawdzić analizowane pliki wylistowane w Konfiguracja systemu -> Bezpieczeństwo -> Sprawdzaj ważne pliki przy logowaniu. Jeśli pliki są niezmienione lub utworzone przez administratora, przejdź do Konfiguracji systemu i zapisz ponownie ustawienia. Zmiany wykryto w następujących plikach:'; +$_lang["configcheck_sysfiles_mod_msg"] = 'EVO zostało skonfigurowany tak, aby sprawdzać ważne pliki systemowe pod kątem ataków. To ostrzeżenie niekoniecznie oznacza że strona została zaatakowana, jednakże powinno się sprawdzić analizowane pliki (Konfiguracja systemu -> Bezpieczeństwo -> Sprawdzaj ważne pliki przy logowaniu). Jeśli pliki są niezmienione lub utworzone przez administratora, przejdź do Konfiguracji systemu i zapisz ponownie ustawienia. Zmiany wykryto w następujących plikach:'; $_lang['email_method_title'] = 'Metoda wysyłania poczty'; $_lang['email_method_mail'] = 'Funkcja PHP mail()'; @@ -1268,7 +1303,7 @@ $_lang["setting_resource_tree_node_name"] = 'Nazwa węzła drzewa zasobów'; $_lang["setting_resource_tree_node_name_desc"] = 'Określ pole zasobu, które zostanie użyte w czasie renderowania węzłów w drzewie zasobów. Domyślnie to pagetitle, jednakże każde pole zasobu może zostać wykorzystane np. menutitle, alias.'; -$_lang["setting_resource_tree_node_name_desc_add"] = 'Informacja: Od MODX 1.1 możesz zmienić wyświetlaną nazwę w opcjach sortowania drzewa zasobów. To ustawienie jest używane gdy wyświetlana nazwa w drzewie jest ustawiona na "Domyślnie".'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Informacja: Od wydania EVO 1.1 możesz zmienić wyświetlaną nazwę w opcjach sortowania drzewa zasobów. To ustawienie jest używane gdy wyświetlana nazwa w drzewie jest ustawiona na "Domyślnie".'; $_lang["resource_opt_alvisibled"] = 'Uwzględnij alias w URL'; $_lang["resource_opt_alvisibled_help"] = 'Alias tego zasobu zostanie dołączony do ścieżki przyjaznego URL'; @@ -1278,6 +1313,9 @@ $_lang["docid_incrmnt_method_1"] = 'Minimum missed ID'; $_lang["docid_incrmnt_method_2"] = 'Maximal ID+1'; +$_lang["enable_cache_title"] = 'Cache dokumentu'; +$_lang["disabled_at_login"] = 'Wyłącz po zalogowaniu'; + $_lang["cache_type_title"] = 'Metoda działania cache'; $_lang["cache_type_1"] = 'Cache bazuje tylko na ID zasobu (standardowe)'; $_lang["cache_type_2"] = 'Cache bazuje na ID zasobu oraz parametrach $_GET'; @@ -1286,8 +1324,8 @@ $_lang["aliaslistingfolder_title"] = 'AliasListing tylko dla folderów'; $_lang["aliaslistingfolder_message"] = 'Redukuje zużycie pamięci w przypadku bardzo dużej liczby zasobów'; -$_lang["settings_friendlyurls_alert"] = 'Wymagana jest zmiana nazwy pliku ht.access na .htaccess aby używać przyjaznych adresów.'; -$_lang["settings_friendlyurls_alert2"] = 'Ponieważ serwis zainstalowany został w podkatalogu, wymagana jest zmiana zawartości pliku .htaccess.'; +$_lang["settings_friendlyurls_alert"] = 'Aby używać przyjaznych adresów, wymagana jest zmiana nazwy pliku ht.access na .htaccess.'; +$_lang["settings_friendlyurls_alert2"] = 'Ponieważ EVO zainstalowano w podkatalogu, wymagana jest zmiana zawartości pliku .htaccess.'; $_lang["user_street"] = 'Ulica'; $_lang["user_city"] = 'Miasto'; @@ -1308,9 +1346,9 @@ $_lang["export_site.static.php6"] = 'Target'; $_lang["export_site.static.php7"] = 'Files cannot be outputted to [+rb_base_url+]'; -$_lang["mutate_settings.dynamic.php6"] = 'Wyślij e-mail z błędami MODX'; +$_lang["mutate_settings.dynamic.php6"] = 'Wyślij e-mail w przypadku błędu EVO'; $_lang["mutate_settings.dynamic.php7"] = 'Nie wysyłaj'; -$_lang["mutate_settings.dynamic.php8"] = 'Na adres [(emailsender)] ([+emailsender+]) zostanie wysłana wiadomość, gdy wystąpi błąd MODX. Szczegóły błędu można sprawdzić w Dzienniku zdarzeń.'; +$_lang["mutate_settings.dynamic.php8"] = 'Gdy wystąpi błąd EVO, na adres [(emailsender)] ([+emailsender+]) zostanie wysłana wiadomość. Szczegóły błędu można sprawdzić w Dzienniku zdarzeń.'; $_lang["error_no_privileges"] = "Nie posiadasz wystarczających uprawnień!"; $_lang["error_no_optimise_tablename"] = "Nie znaleziono tabeli do zoptymalizowania w zapytaniu!"; @@ -1326,6 +1364,7 @@ $_lang["error_movedocument1"] = "Dokument nie może być swoim rodzicem!"; $_lang["error_movedocument2"] = "W zapytaniu nie przekazano ID dokumentu!"; $_lang["error_movedocument3"] = "Nowy rodzic nie został ustawiony w zapytaniu!"; +$_lang["error_internet_connection"] = "Serwer jest niedostępny. Sprawdź swoje połączenie z internetem!"; $_lang["login_processor_unknown_user"] = "Podano błędną nazwę użytkownika lub hasło!"; $_lang["login_processor_wrong_password"] = "Podano błędną nazwę użytkownika lub hasło!"; @@ -1364,7 +1403,7 @@ $_lang["are_you_sure"] = "Jesteś pewien?"; $_lang['evo_downloads_title'] = "Pobierania Evolution"; -$_lang['help_translating_title'] = "Pomóż w tłumaczeniu MODX Evolution"; +$_lang['help_translating_title'] = "Pomóż przetłumaczyć Evolution"; $_lang['download'] = "Pobierz"; $_lang['downloads'] = "Pobierania"; $_lang["previous_releases"] = "Poprzednie wydania"; @@ -1373,7 +1412,7 @@ $_lang["display_locks"] = "Wyświetlaj blokady"; $_lang["role_display_locks"] = "Wyświetlaj blokady"; $_lang["session_timeout"] = "Wygaśnięcie sesji"; -$_lang["session_timeout_msg"] = "MODX będzie pingować serwer podobnie jak ustawienie "Okres sprawdzania wiadomości". Jeśli ostatni ping przewyższy ustawienie, powiązana sesja będzie uznana za nieważną i wszystkie powiązane blokady zostaną automatycznie zdjęte. Ustaw wartość w minutach (>2 minuty, domyślnie 15 minut)."; +$_lang["session_timeout_msg"] = "EVO będzie pingować serwer podobnie jak ustawienie "Okres sprawdzania wiadomości". Jeśli ostatni ping przewyższy ustawienie, powiązana sesja będzie uznana za nieważną i wszystkie powiązane blokady zostaną automatycznie zdjęte. Ustaw wartość w minutach (>2 minuty, domyślnie 15 minut)."; $_lang["unlock_element_id_warning"] = "Czy jesteś pewien że chcesz odblokować ten [+element_type+] (ID [+id+])?"; $_lang["lock_element_type_1"] = "Szablon"; $_lang["lock_element_type_2"] = "Zmienna szablonu"; @@ -1452,4 +1491,26 @@ $_lang["viewopts_radio_inline"] = 'Obok siebie'; $_lang["viewopts_radio_flex"] = 'Flex'; $_lang["viewopts_fontsize"] = 'Rozmiar tekstu'; -$_lang["viewopts_cb_alltabs"] = 'Wszystkie karty'; \ No newline at end of file +$_lang["viewopts_cb_alltabs"] = 'Wszystkie karty'; + +$_lang['email_sender_method'] = 'Nadawca wiadomości'; +$_lang['auto'] = 'Wykryj automatycznie'; +$_lang['use_emailsender'] = 'Użyj wartości [(emailsender)]'; +$_lang['email_sender_method_message'] = 'Nadawca koperty wiadomości. Zwykle zostanie zamieniony na nagłówek Return-Path przez odbiorcę i jest to adres, do którego zostaną wysłane odrzucone wiadomości. Automatyczne wykrywanie będzie działać w większości przypadków.'; + +$_lang['login_form_position_title'] = 'Pozycja formularza logowania'; +$_lang['login_form_position_left'] = 'Lewa strona'; +$_lang['login_form_position_center'] = 'Wyśrodkowany'; +$_lang['login_form_position_right'] = 'Prawa strona'; +$_lang["login_form_style"] = 'Styl formularza logowania'; +$_lang["login_form_style_dark"] = 'Ciemny'; +$_lang["login_form_style_light"] = 'Jasny'; +$_lang['login_logo_title'] = 'Logo strony logowania'; +$_lang['login_logo_message'] = 'Zalecana szerokość to 360px i typ pliku PNG'; +$_lang['login_bg_title'] = 'Tło strony logowania'; +$_lang['login_bg_message'] = 'Zalecana szerokość to 1920px'; + +$_lang['manager_menu_position_title'] = 'Położenie głównej nawigacji'; +$_lang['manager_menu_position_top'] = 'Góra'; +$_lang['manager_menu_position_left'] = 'Lewa'; +$_lang['invalid_event_response'] = 'Zdarzenie %s ma nieprawidłowy wynik'; \ No newline at end of file diff --git a/manager/includes/lang/portuguese-br-utf8.inc.php b/manager/includes/lang/portuguese-br-utf8.inc.php index c0889d80..4908f20c 100755 --- a/manager/includes/lang/portuguese-br-utf8.inc.php +++ b/manager/includes/lang/portuguese-br-utf8.inc.php @@ -659,8 +659,8 @@ $_lang["password_method"] = 'Método de notificação da senha'; $_lang["password_method_email"] = 'Enviar a nova senha por e-mail.'; $_lang["password_method_screen"] = 'Mostrar a nova senha no ecran.'; -$_lang["password_msg"] = 'A nova senha para %s é %s.'; -$_lang["php_version_check"] = 'O MODX é compatível com PHP versão 5.0.0 ou superior. Por favor atualize a sua instalação de PHP!'; +$_lang["password_msg"] = 'A nova senha para %s é %s
          '; +$_lang["php_version_check"] = 'O MODX é compatível com PHP versão 5.6.0 ou superior. Por favor atualize a sua instalação de PHP!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Código do Plugin (php)'; $_lang["plugin_config"] = 'Configuração do Plugin'; diff --git a/manager/includes/lang/portuguese.inc.php b/manager/includes/lang/portuguese.inc.php index bbd8c2aa..946c3b87 100755 --- a/manager/includes/lang/portuguese.inc.php +++ b/manager/includes/lang/portuguese.inc.php @@ -658,8 +658,8 @@ $_lang["password_method"] = 'Método de notificação da senha'; $_lang["password_method_email"] = 'Enviar a nova senha por e-mail.'; $_lang["password_method_screen"] = 'Mostrar a nova senha no ecran.'; -$_lang["password_msg"] = 'A nova senha para %s é %s.'; -$_lang["php_version_check"] = 'O MODX é compatível com PHP versão 5.0.0 ou superior. Por favor actualize a sua instalação de PHP!'; +$_lang["password_msg"] = 'A nova senha para %s é %s
          '; +$_lang["php_version_check"] = 'O MODX é compatível com PHP versão 5.6.0 ou superior. Por favor actualize a sua instalação de PHP!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Código do Plugin (php)'; $_lang["plugin_config"] = 'Configuração do Plugin'; diff --git a/manager/includes/lang/russian-UTF8.inc.php b/manager/includes/lang/russian-UTF8.inc.php index afc2cc07..a2639f18 100755 --- a/manager/includes/lang/russian-UTF8.inc.php +++ b/manager/includes/lang/russian-UTF8.inc.php @@ -2,8 +2,8 @@ /** * EVO Manager language file * - * @version 1.2.1RC - * @date 2016/12/26 + * @version 1.4.5 + * @date 2018/10/31 * @author The EVO Project Team * * @language Russian @@ -65,7 +65,7 @@ $_lang["all_events"] = 'Все события'; $_lang["all_usr_groups"] = 'Все группы (доступен для всех)'; $_lang["allow_mgr_access"] = 'Доступ к интерфейсу системы управления сайтом'; -$_lang["allow_mgr_access_message"] = 'Выберите этот параметр для разрешения / запрета доступа к системе управления сайтом. ПРИМЕЧАНИЕ: если параметр отключен, пользователь будет направлен на стартовую страницу системы управления или на начальную страницу сайта.'; +$_lang["allow_mgr_access_message"] = 'Выберите этот параметр для разрешения / запрета доступа к системе управления сайтом.
          Примечание: если параметр отключен, пользователь будет направлен на стартовую страницу системы управления или на начальную страницу сайта.'; $_lang["already_deleted"] = 'уже удален.'; $_lang["attachment"] = 'Прикрепленное'; $_lang["author_infos"] = 'Информация об авторах'; @@ -126,6 +126,8 @@ $_lang["configcheck_errorpage_unavailable_msg"] = 'Это означает, что она не существует или недоступна обычным посетителям сайта. Это может привести к циклическому вызову функции \'сообщения об ошибке\' и большому количеству записей в журнале сайта. Убедитесь, что нет групп веб-пользователей, которым назначена эта страница.'; $_lang["configcheck_errorpage_unpublished"] = 'Страница сообщения об ошибке, указанная в конфигурации сайта, не опубликована.'; $_lang["configcheck_errorpage_unpublished_msg"] = 'Это означает, что она недоступна посетителям сайта. Необходимо опубликовать страницу сообщения об ошибке, чтобы эта функция работала правильно.'; +$_lang["configcheck_filemanager_path"] = 'Указан неверный путь для файлового менеджера'; +$_lang["configcheck_filemanager_path_msg"] = 'Это может произойти, например, после перемещения вашего сайта в другой каталог или на другой сервер. Пожалуйста, проверьте и обновите настройки вашей системы EvolutionCMS'; $_lang["configcheck_hide_warning"] = 'Больше не показывать это сообщение.'; $_lang["configcheck_images"] = 'Папка изображений (images) недоступна для записи'; $_lang["configcheck_images_msg"] = 'Папка изображений (images) недоступна для записи или не существует на сервере. Из этого следует, что управление изображениями работать не будет'; @@ -137,6 +139,8 @@ $_lang["configcheck_ok"] = 'Конфигурация не содержит ошибок.'; $_lang["configcheck_php_gdzip"] = 'GD и/или Zip PHP расширения не найдены'; $_lang["configcheck_php_gdzip_msg"] = 'Для нормальной работы EVO необходимо, чтобы были разрешены GD и Zip расширения для PHP. EVO будет работать и без этих расширений, но вы не сможете использовать все возможности встроенного файл-менеджера, редактора изображений или код CAPTCHA для авторизации.'; +$_lang["configcheck_rb_base_dir"] = 'Указан неверный путь для файл-браузера'; +$_lang["configcheck_rb_base_dir_msg"] = 'Это может произойти, например, после перемещения вашего сайта в другой каталог или на другой сервер. Пожалуйста, проверьте и обновите настройки вашей системы EvolutionCMS'; $_lang["configcheck_register_globals"] = 'Параметр \'register_globals\' имеет значение \'ON\' в конфигурационном файле \'php.ini\'.'; $_lang["configcheck_register_globals_msg"] = 'Такая конфигурация делает ваш сайт значительно более уязвимым для Cross Site Scripting (XSS) атак. Обратитесь в службу поддержки вашего хостинга за информацией, каким образом выключить этот параметр.'; $_lang["configcheck_title"] = 'Проверка конфигурации'; @@ -196,7 +200,7 @@ $_lang["database_charset"] = 'Кодировка базы данных'; $_lang["database_collation"] = 'Сопоставление базы данных'; $_lang["database_name"] = 'Имя базы данных'; -$_lang["database_overhead"] = 'ПРИМЕЧАНИЕ: \'перерасход\' – это неиспользуемое, но зарезервированное MySQL пространство. Чтобы освободить это место, нажмите \'Перерасход\' в таблице (таблицах).'; +$_lang["database_overhead"] = 'Примечание: \'перерасход\' – это неиспользуемое, но зарезервированное MySQL пространство. Чтобы освободить это место, нажмите \'Перерасход\' в таблице (таблицах).'; $_lang["database_server"] = 'Сервер базы данных'; $_lang["database_table_clickbackup"] = ' создать и загрузить резервную копию выбранных таблиц'; $_lang["database_table_clickhere"] = 'Нажмите здесь,'; @@ -245,7 +249,7 @@ $_lang["documentation"] = 'Документация'; $_lang["duplicate"] = 'Сделать копию'; $_lang["duplicate_alias_found"] = 'Ресурс \'%s\' уже использует псевдоним \'%s\'. Введите уникальный псевдоним.'; -$_lang["duplicate_alias_message"] = 'Выберите \'Да\', чтобы разрешить повторение псевдонимов. ПРИМЕЧАНИЕ: этот параметр должна использоваться вместе с включенной функцией \'Использовать вложенные URL\'.'; +$_lang["duplicate_alias_message"] = 'Выберите \'Да\', чтобы разрешить повторение псевдонимов.
          Примечание: этот параметр должна использоваться вместе с включенной функцией \'Использовать вложенные URL\'.'; $_lang["duplicate_alias_title"] = 'Разрешить повторяющиеся псевдонимы:'; $_lang["duplicate_name_found_general"] = 'Объект %s с именем \'%s\' уже существует. Пожайлуста, введите другое имя.'; $_lang["duplicate_name_found_module"] = 'Модуль с именем \'%s\' уже существует. Пожайлуста, введите другое имя.'; @@ -278,11 +282,11 @@ $_lang["empty_recycle_bin_empty"] = 'Нет ресурсов, помеченных на удаление.'; $_lang["enable_resource"] = 'Подключить файл элементов.'; $_lang["enable_sharedparams"] = 'Включить \'общие\' параметры'; -$_lang["enable_sharedparams_msg"] = 'ПРИМЕЧАНИЕ: вышеуказанный уникальный глобальный идентификатор (GUID) будет использован для идентификации этого модуля и общих параметров. GUID также используется для формирования связи модуля, плагинов или сниппетов, которые используют его общие параметры.'; +$_lang["enable_sharedparams_msg"] = 'Примечание: вышеуказанный уникальный глобальный идентификатор (GUID) будет использован для идентификации этого модуля и общих параметров. GUID также используется для формирования связи модуля, плагинов или сниппетов, которые используют его общие параметры.'; $_lang["enabled"] = 'Включено'; $_lang["error"] = 'Ошибка'; $_lang["error_sending_email"] = 'Ошибка отправки e-mail'; -$_lang["errorpage_message"] = 'Введите ID ресурса, который вы хотите использовать как страницу ошибки (404 - ресурс не найден). ПРИМЕЧАНИЕ: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; +$_lang["errorpage_message"] = 'Введите ID ресурса, который вы хотите использовать как страницу ошибки (404 - ресурс не найден).
          Примечание: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; $_lang["errorpage_title"] = 'Страница ошибки \'404\':'; $_lang["event_id"] = 'ID события'; $_lang["eventlog"] = 'Протокол событий'; @@ -401,13 +405,14 @@ $_lang["htmlsnippet_name"] = 'Название чанка'; $_lang["htmlsnippet_title"] = 'Создать / редактировать чанк'; $_lang["icon"] = 'Значок'; +$_lang["icon_description"] = "CSS класс"; $_lang["id"] = 'ID'; $_lang["illegal_parent_child"] = 'Смена родительского ресурса: \n\nресурс является дочерним к выбранному.'; $_lang["illegal_parent_self"] = 'Смена родительского ресурса: \n\nвыбранный ресурс не может быть присвоен как родитель самому себе.'; $_lang["images_management"] = 'Управление изображениями'; $_lang["import_files_found"] = 'Найдено %s ресурсов для импорта...'; $_lang["import_params"] = 'Импортировать общие параметры модуля'; -$_lang["import_params_msg"] = 'Вы можете импортировать параметры и установки модуля, выбрав его название из списка вверху. ПРИМЕЧАНИЕ: для того, чтобы модули отображались в меню, этот плагин/сниппет должен быть одной из зависимостей модуля и у модуля должны быть включены общие параметры.'; +$_lang["import_params_msg"] = 'Вы можете импортировать параметры и установки модуля, выбрав его название из списка вверху.
          Примечание: для того, чтобы модули отображались в меню, этот плагин/сниппет должен быть одной из зависимостей модуля и у модуля должны быть включены общие параметры.'; $_lang["import_parent_resource"] = 'Родительский ресурс:'; $_lang["import_site"] = 'Импортировать сайт'; $_lang["import_site_failed"] = 'Ошибка'; @@ -430,6 +435,10 @@ $_lang["insert"] = 'Вставить'; $_lang["maxImageWidth"] = 'Максимальная ширина изображения'; $_lang["maxImageHeight"] = 'Максимальная высота изображения'; +$_lang["clientResize"] = 'Изменение размера изображений на стороне клиента'; +$_lang["clientResize_message"] = 'Если включено, изображения будут изменяться браузером до загрузки на сервер'; +$_lang["noThumbnailsRecreation"] = 'Создание эскизов только при загрузке изображения'; +$_lang["noThumbnailsRecreation_message"] = 'Файловый менеджер будет создавать эскизы только при загрузке; если для некоторых изображений нет эскизов, они не будут созданы'; $_lang["thumbWidth"] = 'Максимальная ширина превью'; $_lang["thumbHeight"] = 'Максимальная высота превью'; $_lang["thumbsDir"] = 'Папка для хранения превью'; @@ -476,13 +485,13 @@ $_lang["login_allowed_days"] = 'Разрешенные дни'; $_lang["login_allowed_days_message"] = 'Выберите дни, в которые этот пользователь может входить.'; $_lang["login_allowed_ip"] = 'Разрешенный IP-адрес'; -$_lang["login_allowed_ip_message"] = 'Введите IP-адрес, с которого разрешено заходить этому пользователю. ПРИМЕЧАНИЕ: несколько IP-адресов разделяйте запятыми (,)'; +$_lang["login_allowed_ip_message"] = 'Введите IP-адрес, с которого разрешено заходить этому пользователю.
          Примечание: несколько IP-адресов разделяйте запятыми (,)'; $_lang["login_button"] = 'Войти'; $_lang["login_cancelled_install_in_progress"] = 'В данный момент выполняется установка/обновление сайта.
          Повторите попытку через пару минут!
          '; $_lang["login_cancelled_site_was_updated"] = 'Процесс установки/обновления сайта завершен успешно. Требуется повторная авторизация в системе!
          '; $_lang["login_captcha_message"] = 'Введите код подтверждения. \n\nЕсли у вас возникли трудности с прочтением кода, нажмите на него, чтобы сгенерировать новый вариант.'; $_lang["login_homepage"] = 'Страница успешной авторизации'; -$_lang["login_homepage_message"] = 'Введите ID ресурса, который загрузится после успешной авторизации пользователя. ПРИМЕЧАНИЕ: убедитесь, что этот ID принадлежит существующему ресурсу, что этот ресурс опубликован и что он доступен для данного пользователя'; +$_lang["login_homepage_message"] = 'Введите ID ресурса, который загрузится после успешной авторизации пользователя.
          Примечание: убедитесь, что этот ID принадлежит существующему ресурсу, что этот ресурс опубликован и что он доступен для данного пользователя'; $_lang["login_message"] = 'Введите ваше имя пользователя и пароль. Обратите внимание - строчные и прописные буквы различаются.'; $_lang["logo_slogan"] = 'Создавайте больше с меньшими усилиями - \nСистема управления сайтом EVO'; $_lang["logout"] = 'Выйти'; @@ -503,6 +512,13 @@ $_lang["manager_permissions"] = 'Права менеджеров'; $_lang["manager_theme"] = 'Шаблон системы управления:'; $_lang["manager_theme_message"] = 'Выберите шаблон для системы управления.'; +$_lang["manager_theme_mode"] = 'Цветовая схема:'; +$_lang["manager_theme_mode1"] = 'всё светлое'; +$_lang["manager_theme_mode2"] = 'шапка тёмная'; +$_lang["manager_theme_mode3"] = 'шапка и дерево темные'; +$_lang["manager_theme_mode4"] = 'все темное'; +$_lang['manager_theme_mode_message'] = 'Этот параметр используется как «по умолчанию» и может быть переопределен при переключения режима цвета темы в дереве документов: '; +$_lang['manager_theme_mode_title'] = 'Переключатель цветовой гаммы'; $_lang["messages"] = 'Сообщения'; $_lang["messages_all"] = 'Всем'; $_lang["messages_compose"] = 'Написать сообщение'; @@ -531,7 +547,7 @@ $_lang["metatags"] = 'META-теги'; $_lang["mgr_access_permissions"] = 'Права доступа менеджеров'; $_lang["mgr_login_start"] = 'Авторизация менеджера сайта'; -$_lang["mgr_login_start_message"] = 'Введите ID ресурса, который вы хотите послать пользователю после авторизации в системе управления сайтом. ПРИМЕЧАНИЕ: убедитесь в том, что ID принадлежит существующему ресурсу, который опубликован и доступен этому пользователю'; +$_lang["mgr_login_start_message"] = 'Введите ID ресурса, который вы хотите послать пользователю после авторизации в системе управления сайтом.
          Примечание: убедитесь в том, что ID принадлежит существующему ресурсу, который опубликован и доступен этому пользователю'; $_lang["mgrlog_action"] = 'Действие:'; $_lang["mgrlog_actionid"] = 'ID действия:'; $_lang["mgrlog_anyall"] = 'Любое / Все'; @@ -632,6 +648,7 @@ $_lang["onlineusers_user"] = 'Пользователь'; $_lang["onlineusers_userid"] = 'ID пользователя'; $_lang["optimize_table"] = 'Нажмите для оптимизации таблицы'; +$_lang["page_data_alias"] = 'Псевдоним'; $_lang["page_data_cacheable"] = 'Кэшируемый'; $_lang["page_data_cacheable_help"] = 'Отметьте для того, чтобы разрешить кэширование ресурса. Будьте внимательны в том случае, если ресурс содержит вызовы сниппетов - возможно, лучше отменить кэширование.'; $_lang["page_data_cached"] = 'Код взят из кэша:'; @@ -683,8 +700,8 @@ $_lang["password_method"] = 'Способ уведомления о новом пароле'; $_lang["password_method_email"] = 'Послать новый пароль по e-mail.'; $_lang["password_method_screen"] = 'Показать новый пароль на экране.'; -$_lang["password_msg"] = 'Для пользователя %s задан новый пароль - %s.'; -$_lang["php_version_check"] = 'Система EVO работает с PHP версии 5.4.0 или выше. Пожалуйста, обновите PHP'; +$_lang["password_msg"] = 'Для пользователя %s задан новый пароль - %s
          '; +$_lang["php_version_check"] = 'Система EVO работает с PHP версии 5.6.0 или выше. Пожалуйста, обновите PHP'; $_lang["plugin"] = 'Плагин'; $_lang["plugins"] = 'Плагины'; $_lang["plugin_code"] = 'Код плагина (php)'; @@ -699,6 +716,7 @@ $_lang["plugin_priority_instructions"] = 'Перетащите мышью для определения порядка выполнения плагинов для каждого события. Сначала выполняется первый в списке плагин.'; $_lang["plugin_priority_title"] = 'Порядок вызова плагинов'; $_lang["purge_plugin"] = 'Удаление старых плагинов'; +$_lang["purge_plugin_confirm"] = 'Вы действительно хотите удалить устаревшие плагины?'; $_lang["plugin_title"] = 'Создать / редактировать плагин'; $_lang["preview"] = 'Просмотр'; $_lang["preview_msg"] = 'Предпросмотр последних изменений. Сохранить и обновить последние изменения'; @@ -708,7 +726,7 @@ $_lang["publish_date"] = 'Дата публикации'; $_lang["publish_events"] = 'События, связанные с публикацией ресурсов.'; $_lang["publish_resource"] = 'Опубликовать'; -$_lang["rb_base_dir_message"] = 'Введите физический путь к папке файлов. Обычно этот путь устанавливается автоматически. Если вы используете сервер IIS, этого может и не произойти. В таком случае введите путь, как он отображается в адресной строке Internet Explorer.ПРИМЕЧАНИЕ: для корректной работы браузера папка файлов должна содержать вложенные папки: images, files, flash и media.'; +$_lang["rb_base_dir_message"] = 'Введите физический путь к папке файлов. Обычно этот путь устанавливается автоматически. Если вы используете сервер IIS, этого может и не произойти. В таком случае введите путь, как он отображается в адресной строке Internet Explorer.
          Примечание: для корректной работы браузера папка файлов должна содержать вложенные папки: images, files, flash и media.'; $_lang["rb_base_dir_title"] = 'Путь к файлам:'; $_lang["rb_base_url_message"] = 'Введите адрес (URL) папки файлов. Обычно этот путь устанавливается автоматически. Если вы используете сервер IIS, этого может и не произойти. В таком случае введите путь, как он отображается в Internet Explorer.'; $_lang["rb_base_url_title"] = 'URL к файлам:'; @@ -938,6 +956,11 @@ $_lang["settings_page_settings"] = 'Настройка страницы'; $_lang["settings_photo"] = 'Фото'; $_lang["settings_properties"] = 'Свойства'; +$_lang["show_fullscreen_btn_message"] = 'Показывать на главном меню кнопку "На весь экран"'; +$_lang["show_newresource_btn_message"] = 'Показывать на главном меню кнопку "Новый ресурс"'; +$_lang["settings_show_picker_message"] = 'Настроить тему панели администрирования и сохранить в localstorage'; +$_lang["show_fullscreen_btn"] = 'Кнопка "На весь экран"'; +$_lang["show_newresource_btn"] = 'Кнопка "Новый ресурс"'; $_lang["settings_site"] = 'Сайт'; $_lang["settings_strip_image_paths_message"] = 'Если установлено значение \'Нет\', EVO будет использовать абсолютные ссылки для изображений, файлов, анимация и тому подобного. Относительные ссылки удобнее, если вы в будущем собираетесь переместить свой сайт, например, с тестового сервера на конечный. Если вы не знаете, о чем речь, оставьте значение \'Да\'.'; $_lang["settings_strip_image_paths_title"] = 'Переписывать пути для браузера?'; @@ -948,20 +971,21 @@ $_lang["show_meta"] = 'Показывать вкладку с META-тегами и ключевыми словами'; $_lang["show_meta_message"] = 'Показывать нерекомендуемую вкладку с META-тегами и ключевыми словами при редактировании ресурсов.'; $_lang["show_tree"] = 'Показать дерево'; +$_lang["show_picker"] = 'Показать переключатель цвета'; $_lang["showing"] = 'Показано'; -$_lang["signupemail_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться менеджерам, когда создается учетная запись нового менеджера. Письмо должно содержать имя пользователя и пароль.
          ПРИМЕЧАНИЕ. Следующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - адрес (URL) сайта,
          [+uid+] – имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; +$_lang["signupemail_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться менеджерам, когда создается учетная запись нового менеджера. Письмо должно содержать имя пользователя и пароль.
          Примечание: cледующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - адрес (URL) сайта,
          [+uid+] – имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; $_lang["signupemail_title"] = 'Регистрация менеджера:'; $_lang["site"] = 'Сайт'; $_lang["site_schedule"] = 'Расписание сайта'; $_lang["sitename_message"] = 'Введите заголовок вашего сайта.'; $_lang["sitename_title"] = 'Заголовок сайта:'; -$_lang["sitestart_message"] = 'Введите ID ресурса, который вы хотите использовать как стартовую (домашнюю) страницу. ПРИМЕЧАНИЕ: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; +$_lang["sitestart_message"] = 'Введите ID ресурса, который вы хотите использовать как стартовую (домашнюю) страницу.
          Примечание: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; $_lang["sitestart_title"] = 'Первая страница:'; $_lang["sitestatus_message"] = 'Выберите \'Онлайн\' для опубликования вашего сайта. Если вы выберете \'Оффлайн\', посетители сайта увидят сообщение о недоступности сайта и не смогут просмотреть сам сайт.'; $_lang["sitestatus_title"] = 'Статус сайта:'; -$_lang["siteunavailable_message"] = 'Сообщение, выводимое в случае недоступности сайта (когда выбран статус \'Оффлайн\') или в случае возникновения ошибки. ПРИМЕЧАНИЕ: это сообщение выводится только в том случае, когда не выбрана страница \'Сайт недоступен\'.'; +$_lang["siteunavailable_message"] = 'Сообщение, выводимое в случае недоступности сайта (когда выбран статус \'Оффлайн\') или в случае возникновения ошибки.
          Примечание: это сообщение выводится только в том случае, когда не выбрана страница \'Сайт недоступен\'.'; $_lang["siteunavailable_message_default"] = 'В настоящее время сайт недоступен.'; -$_lang["siteunavailable_page_message"] = 'Введите ID ресурса, который должны будут увидеть посетители, если попытаются зайти на сайт, когда он недоступен. ПРИМЕЧАНИЕ: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; +$_lang["siteunavailable_page_message"] = 'Введите ID ресурса, который должны будут увидеть посетители, если попытаются зайти на сайт, когда он недоступен.
          Примечание: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; $_lang["siteunavailable_page_title"] = 'Страница \'Сайт недоступен\':'; $_lang["siteunavailable_title"] = 'Сообщение о недоступности сайта:'; $_lang["snippet"] = 'Сниппет'; @@ -991,6 +1015,7 @@ $_lang["sys_alert"] = 'Системное предупреждение'; $_lang["sysinfo_activity_message"] = 'Этот список показывает последние созданные/отредактированные ресурсы.'; $_lang["sysinfo_userid"] = 'Пользователь'; +$_lang["system"] = 'Служебное'; $_lang["system_email_signup"] = 'Здравствуйте, [+uid+]! Ваши данные для авторизации в системе управления сайтом [+sname+]: @@ -1070,6 +1095,7 @@ $_lang["tmplvars_widget"] = 'Визуальный компонент'; $_lang["tmplvars_widget_prop"] = 'Свойства компонента (widget)'; $_lang["to"] = 'к'; +$_lang["toggle_fullscreen"] = 'Развернуть на весь экран'; $_lang["tools"] = 'Инструменты'; $_lang["top_howmany_message"] = 'Количество лучших показателей в отчетах статистики. Например, \'10 самых популярных...\''; $_lang["top_howmany_title"] = 'Количество лучших показателей:'; @@ -1092,7 +1118,7 @@ $_lang["udperms_title"] = 'Использовать права доступа:'; $_lang["unable_set_link"] = 'Невозможно установить ссылку'; $_lang["unable_set_parent"] = 'Невозможно установить новый родительский ресурс'; -$_lang["unauthorizedpage_message"] = 'Введите ID ресурса, который должны будут увидеть посетители, если попытаются зайти на закрытую страницу (403 – доступ запрещен). ПРИМЕЧАНИЕ: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; +$_lang["unauthorizedpage_message"] = 'Введите ID ресурса, который должны будут увидеть посетители, если попытаются зайти на закрытую страницу (403 – доступ запрещен).
          Примечание: убедитесь, что этот ID принадлежит существующему ресурсу, и что этот ресурс опубликован'; $_lang["unauthorizedpage_title"] = 'Страница \'Доступ запрещен\':'; $_lang["unblock_message"] = 'После сохранения пользователь будет разблокирован.'; $_lang["undelete_resource"] = 'Восстановить'; @@ -1103,7 +1129,7 @@ $_lang["untitled_weblink"] = 'Новая веб-ссылка'; $_lang["update_params"] = 'Обновить параметры'; $_lang["update_settings_from_language"] = 'Изменить на:'; -$_lang["upload_maxsize_message"] = 'Задайте максимальный размер загружаемых файлов. Значение должно быть в байтах. ПРИМЕЧАНИЕ: большие файлы загружаются, как правило, ОЧЕНЬ долго'; +$_lang["upload_maxsize_message"] = 'Задайте максимальный размер загружаемых файлов. Значение должно быть в байтах.
          Примечание: большие файлы загружаются, как правило, ОЧЕНЬ долго'; $_lang["upload_maxsize_title"] = 'Максимальный размер загрузки:'; $_lang["uploadable_files_message"] = 'Здесь вы можете указать, какие типы файлов могут быть загружены на сервер через файл-менеджер. Задайте список расширений через запятую.'; $_lang["uploadable_files_title"] = 'Разрешенные к загрузке файлы:'; @@ -1174,10 +1200,12 @@ $_lang["web_user_title"] = 'Создать / редактировать веб-пользователя'; $_lang["web_users"] = 'Пользователи'; $_lang["weblink"] = 'Веб-ссылка'; -$_lang["webpwdreminder_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться пользователям, когда они запрашивают напоминание пароля. Письмо должно содержать имя пользователя и пароль.
          ПРИМЕЧАНИЕ. Следующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - адрес (URL) сайта,
          [+uid+] - имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; +$_lang["webpwdreminder_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться пользователям, когда они запрашивают напоминание пароля. Письмо должно содержать имя пользователя и пароль.
          Примечание: cледующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - адрес (URL) сайта,
          [+uid+] - имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; $_lang["webpwdreminder_title"] = 'Напоминание пароля:'; -$_lang["websignupemail_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться веб-пользователям, когда создается учетная запись нового веб-пользователя. Письмо должно содержать имя пользователя и пароль.
          ПРИМЕЧАНИЕ. Следующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - URL сайта,
          [+uid+] - имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; +$_lang["websignupemail_message"] = 'Здесь вы можете создать сообщение, которое будет отсылаться веб-пользователям, когда создается учетная запись нового веб-пользователя. Письмо должно содержать имя пользователя и пароль.
          Примечание: cледующие \'поля вывода\' отобразят соответствующие данные при отправлении письма:

          [+sname+] - название сайта,
          [+saddr+] - e-mail адрес сайта,
          [+surl+] - URL сайта,
          [+uid+] - имя пользователя или id пользователя,
          [+pwd+] - пароль пользователя,
          [+ufn+] - полное имя пользователя.

          Убедитесь, что в сообщении присутствуют поля [+uid+] и [+pwd+], иначе пользователь не узнает свои имя пользователя и пароль'; $_lang["websignupemail_title"] = 'Регистрация веб-пользователя:'; +$_lang["allow_multiple_emails_title"] = 'Повторяющиеся email у веб-пользователей'; +$_lang["allow_multiple_emails_message"] = 'Позволяет веб-пользователям использовать один и тот же адрес электронной почты для ситуаций, когда у члена может отсутствовать собственный адрес электронной почты или есть только один адрес электронной почты семейства.
          Note: Любые напоминания о пароле и логика регистрации должны учитывать этот параметр, если он установлен на «Да».'; $_lang["wednesday"] = 'Среда'; $_lang["welcome_messages"] = 'В вашем ящике %d сообщений, из которых %s не прочитаны.'; $_lang["welcome_title"] = 'Добро пожаловать в систему управления сайтом'; @@ -1209,10 +1237,11 @@ $_lang["enable_bindings_title"] = 'Разрешить @-привязки'; $_lang["enable_bindings_message"] = 'Предотвращает исполнение PHP-кода через использование @-привязок в TV-параметрах. Требуется, если у вас есть пользователи, которые не должны иметь возможность создавать PHP-код, но но могут создавать или редактировать TV-параметры. Вывод любого TV-параметра @-привязкой будет "@-привязки запрещены".'; $_lang["enable_filter_title"] = 'Включить фильтры'; -$_lang["enable_filter_message"] = 'Фильтры позволяют управлять выходными данными, преобразовывая их прямо в теге внутри шаблона. Аналог PHx. Больше информации'; // todo: change link to documentation +$_lang["enable_filter_message"] = 'Фильтры позволяют управлять выходными данными, преобразовывая их прямо в теге внутри шаблона. Аналог PHx. Больше информации'; // todo: change link to documentation $_lang["enable_filter_phx_warning"] = 'Когда плагин PHx включен, встроенные фильтры отключены по умолчанию'; -$_lang["enable_filter_phx_warning"] = 'Когда плагин PHx включен, встроенные фильтры отключены по умолчанию'; +$_lang["enable_at_syntax_title"] = 'Включить <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(не рекомендуемый к использованию синтаксис). Добавляет поддержку условных операторов прямо в HTML коде'; $_lang["bkmgr_alert_mkdir"] = 'Файл не может быть создан. Проверьте права на папку assets/backup'; $_lang["bkmgr_restore_msg"] = '

          Сайт может быть восстановлен с помощью файла SQL.

          '; @@ -1231,7 +1260,7 @@ $_lang["bkmgr_restore_confirm"] = 'Вы уверены, что хотите восстановить резервную копию\n[+filename+]. ?'; $_lang["bkmgr_snapshot_nothing"] = 'Нет резервных копий'; -$_lang["files.dynamic.php1"] = 'Создать PHP-файл'; +$_lang["files.dynamic.php1"] = 'Создать файл'; $_lang["files.dynamic.php2"] = 'files.dynamic.php2'; $_lang["files.dynamic.php3"] = 'files.dynamic.php3'; $_lang["files.dynamic.php4"] = 'files.dynamic.php4'; @@ -1274,6 +1303,9 @@ $_lang["docid_incrmnt_method_1"] = 'Минимальный пропущенный ID'; $_lang["docid_incrmnt_method_2"] = 'Максимальный ID+1'; +$_lang["enable_cache_title"] = 'Способ кеширования'; +$_lang["disabled_at_login"] = 'Отключить для администраторов'; + $_lang["cache_type_title"] = 'Способ кеширования страниц '; $_lang["cache_type_1"] = 'Только с учетом ID (стандартный метод)'; $_lang["cache_type_2"] = 'C учетом ID и $_GET'; @@ -1306,7 +1338,7 @@ $_lang["mutate_settings.dynamic.php6"] = 'Уведомления о системных ошибках'; $_lang["mutate_settings.dynamic.php7"] = 'Не уведомлять'; -$_lang["mutate_settings.dynamic.php8"] = 'Уведомления приходят на [(emailsender)]([+emailsender+]) в момент генериции ошибки. Детали можно увидеть в журнале ошибок.'; +$_lang["mutate_settings.dynamic.php8"] = 'Уведомления приходят на [+emailsender+] (задается настройкой [(emailsender)]) в момент генериции ошибки. Детали можно увидеть в журнале ошибок.'; $_lang["error_no_privileges"] = "У вас нет соответствующих прав для выполнения данного действия."; $_lang["error_no_optimise_tablename"] = "Нет таблиц требующих оптимизации!"; @@ -1451,4 +1483,29 @@ $_lang["viewopts_radio_inline"] = 'Инлайн'; $_lang["viewopts_radio_flex"] = 'Флекс'; $_lang["viewopts_fontsize"] = 'Размер шрифта'; -$_lang["viewopts_cb_alltabs"] = 'Все табы'; \ No newline at end of file +$_lang["viewopts_cb_alltabs"] = 'Все табы'; + +$_lang['email_sender_method'] = 'The envelope sender of the message'; +$_lang['auto'] = 'Auto-detect'; +$_lang['use_emailsender'] = 'Use [(emailsender)] value'; +$_lang['email_sender_method_message'] = 'The envelope sender of the message. This will usually be turned into a Return-Path header by the receiver, and is the address that bounces will be sent to. Auto-detect will work in most cases.'; + +$_lang['login_form_position_title'] = 'Положение формы авторизации'; +$_lang['login_form_position_left'] = 'слева'; +$_lang['login_form_position_center'] = 'по центру'; +$_lang['login_form_position_right'] = 'справа'; +$_lang['login_form_style'] = 'Стиль формы авторизации:'; +$_lang['login_form_style_dark'] = 'Темный'; +$_lang['login_form_style_light'] = 'Светлый'; +$_lang['login_logo_title'] = 'Логотип на странице авторизации'; +$_lang['login_logo_message'] = 'Рекомендованный размер логотипа по ширине: 360px, тип .png'; +$_lang['login_bg_title'] = 'Фоновое изображение на странице авторизации'; +$_lang['login_bg_message'] = 'Рекомендованный размер фонового изображения по ширине: 1920px'; + +$_lang['manager_menu_position_title'] = 'Расположение основного меню'; +$_lang['manager_menu_position_top'] = 'вверху'; +$_lang['manager_menu_position_left'] = 'слева'; + +$_lang['invalid_event_response'] = 'Событие %s вернуло неверный результат'; + +$_lang['chunk_processor'] = 'Класс обработки чанков'; diff --git a/manager/includes/lang/spanish-utf8.inc.php b/manager/includes/lang/spanish-utf8.inc.php index 8ef3c7e2..2d0c6431 100755 --- a/manager/includes/lang/spanish-utf8.inc.php +++ b/manager/includes/lang/spanish-utf8.inc.php @@ -1,13 +1,13 @@ Sistema de Administración de Contenido y Esquema de PHP bajo licencia GNU GPL.'; -$_lang["about_title"] = 'Acerca de MODX'; +$_lang["about_msg"] = 'EVO es un Sistema de Administración de Contenido y Esquema de PHP bajo licencia GNU GPL.'; +$_lang["about_title"] = 'Acerca de Evolution'; $_lang["access_permission_denied"] = 'No tienes los permisos correctos para este documento.'; $_lang["access_permission_parent_denied"] = '¡No tienes permiso para crear o mover un documento aquí! Por favor elije otro lugar.'; $_lang["access_permissions"] = 'Permisos de acceso'; @@ -42,7 +42,7 @@ $_lang["access_permissions_users_in_group"] = 'Usuarios en Grupo:'; $_lang["access_permissions_users_tab"] = 'Aquí puedes ver que grupos de usuarios han sido configurados. También puedes crear nuevos grupos, renombrarlos, borrarlos y ver qué usuarios son miembros de los diferentes grupos. Para añadir un nuevo usuario a un grupo, o removerlo de uno, edita el usuario directamente. Los Administradores (usuarios a los que se les ha asignado un rol con ID 1) siempre tienen acceso a todos los documentos, por lo que no necesitan ser añadidos a ningún grupo.'; $_lang["account_email"] = 'Email de la cuenta'; -$_lang["actioncomplete"] = '¡La acción fue completada satisfactoriamente!
          - Por favor, espera mientras MODX hace limpieza.'; +$_lang["actioncomplete"] = '¡La acción fue completada satisfactoriamente!
          - Por favor, espera mientras EVO hace limpieza.'; $_lang["activity_message"] = 'Esta lista muestra los últimos documentos que creaste o editaste:'; $_lang["activity_title"] = 'Documentos recientemente editados/creados'; $_lang["add"] = 'Añadir'; @@ -68,6 +68,7 @@ $_lang["allow_mgr_access_message"] = 'Selecciona esta opción para habilitar o deshabilitar el acceso a la interfase del Administrador. NOTA: El usuario será redirigido a la pagina de ingreso del Administrador, o al inicio del sitio web, si esta opción es configurada como no.'; $_lang["already_deleted"] = 'ya ha sido borrado.'; $_lang["attachment"] = 'Adjunto'; +$_lang["author_infos"] = 'Author information'; $_lang["automatic_alias_message"] = 'Selecciona \'si\' para que el sistema genere automáticamente un alias basado en el título de la página del documento al guardarlo.'; $_lang["automatic_alias_title"] = 'Generar automáticamente un alias:'; $_lang["backup"] = 'Respaldo'; @@ -80,10 +81,13 @@ $_lang["captcha_code"] = 'Código de seguridad'; $_lang["captcha_message"] = 'Activa esto para aumentar la seguridad al requerir a los usuarios el ingreso de un código no legible por maquinas (y scriptkiddy hacking scripts).'; $_lang["captcha_title"] = 'Usar códigos CAPTCHA:'; -$_lang["captcha_words_default"] = 'MODX,Aceso,Mejor,BitCode,Chunk,Cache,Desc,Diseno,Excel,Disfruta,URLs,TechView,Gerald,Griff,Humphrey,Vacacion,Intel,Integracion,Joystick,Join(),Oscope,Genetico,Luz,Parecido,Marit,Maaike,Nicho,Holanda,Ordinancia,Oscillo,Parser,Fusion,Query,Pregunta,Regalia,Correcto,Snippet,Sentinela,Template,Thespian,Unidad,Enterprise,Verily,Tatuaje,Veri,Website,WideWeb,Yap,Amarillo,Zebra,Zigoto'; +$_lang["captcha_words_default"] = 'EVO,Aceso,Mejor,BitCode,Chunk,Cache,Desc,Diseno,Excel,Disfruta,URLs,TechView,Gerald,Griff,Humphrey,Vacacion,Intel,Integracion,Joystick,Join(),Oscope,Genetico,Luz,Parecido,Marit,Maaike,Nicho,Holanda,Ordinancia,Oscillo,Parser,Fusion,Query,Pregunta,Regalia,Correcto,Snippet,Sentinela,Template,Thespian,Unidad,Enterprise,Verily,Tatuaje,Veri,Website,WideWeb,Yap,Amarillo,Zebra,Zigoto'; $_lang["captcha_words_message"] = 'Ingresa una lista de palabras CAPTCHA para usarse si el CAPTCHA está activado. Separa las palabras con comas. Este campo de entrada está limitado a 255 caracteres.'; $_lang["captcha_words_title"] = 'Palabras CAPTCHA'; $_lang["category_heading"] = 'Categoría'; +$_lang["category_manager"] = 'Category Manager'; +$_lang["category_management"] = 'Category management'; +$_lang["manage_categories"] = 'Manage Categories'; $_lang["category_msg"] = 'Aquí puedes ver y editar todos los Elementos agrupados por categoría.'; $_lang["cfg_base_path"] = 'MODX_BASE_PATH'; $_lang["cfg_base_url"] = 'MODX_BASE_URL'; @@ -95,7 +99,7 @@ $_lang["change_password_confirm"] = 'Confirmar Contraseña'; $_lang["change_password_message"] = 'Por favor, ingresa tu nueva contraseña, e ingrésala nuevamente para confirmarla. Tu contraseña debe de tener entre 6 y 15 caracteres.'; $_lang["change_password_new"] = 'Nueva contraseña'; -$_lang["charset_message"] = 'Por favor, selecciona qué codificación de caracteres deseas utilizar en el Admin. Por favor nota que MODX ha sido probado con un buen número de estas codificación, pero no con todas ellas. Para la mayoría de los idiomas, la configuración prefijada a UTF-8 es la preferible.'; +$_lang["charset_message"] = 'Por favor, selecciona qué codificación de caracteres deseas utilizar en el Admin. Por favor nota que EVO ha sido probado con un buen número de estas codificación, pero no con todas ellas. Para la mayoría de los idiomas, la configuración prefijada a UTF-8 es la preferible.'; $_lang["charset_title"] = 'Codificación del caracteres:'; $_lang["chunk"] = 'Chunk'; $_lang["chunk_code"] = 'Código de Chunk (html)'; @@ -114,7 +118,7 @@ $_lang["comment"] = 'Comentario'; $_lang["configcheck_admin"] = 'Por favor ¡Contacta al administrador del sistema y adviértele sobre este mensaje!'; $_lang["configcheck_cache"] = 'el directorio cache no es escribible'; -$_lang["configcheck_cache_msg"] = 'MODX no puede escribir en el directorio cache. MODX continuará funcionando como es esperado, pero no realizará ningún cache. Para solucionar esto, haz el directorio /_cache/ escribible.'; +$_lang["configcheck_cache_msg"] = 'EVO no puede escribir en el directorio cache. EVO continuará funcionando como es esperado, pero no realizará ningún cache. Para solucionar esto, haz el directorio /_cache/ escribible.'; $_lang["configcheck_configinc"] = 'El archivo de configuración todavía es escribible'; $_lang["configcheck_configinc_msg"] = 'Personas muy malintencionadas podrían potencialmente probocar algunos problemas en tu sitio y todo lo asociado con él. En serio. Por favor ¡Haz tu archivo de configuración (/[+MGR_DIR+]/includes/config.inc.php) de sólo lectura!'; $_lang["configcheck_default_msg"] = 'Una alerta no especificada ha sido encontrada. Lo cual es extraño.'; @@ -122,17 +126,21 @@ $_lang["configcheck_errorpage_unavailable_msg"] = 'Esto significa que tu página de Error no es accesible para navegantes normales de internet o que no existe. Esto puede provocar un estado de circulo cerrado y varios errores en la bitácora de tu sitio. Asegúrate de que nohaya grupos de usuarios asignados a la página.'; $_lang["configcheck_errorpage_unpublished"] = 'La página de Error de tu sitio no está publicada o no existe.'; $_lang["configcheck_errorpage_unpublished_msg"] = 'Esto significa que tu página de Error no es accesible para el público en general. Publica la página o asegúrate de que esté asignada a un documento existente en el árbol de tu sitio en el menú Herramientas > Configuración.'; +$_lang["configcheck_filemanager_path"] = 'The currently set File Manager path seems incorrect.'; +$_lang["configcheck_filemanager_path_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; $_lang["configcheck_hide_warning"] = 'Don\'t show this again.'; $_lang["configcheck_images"] = 'El directorio de imágenes no es escribible'; $_lang["configcheck_images_msg"] = 'El directorio de imágenes no es escribible, o no existe. Esto significa que las funciones del Admin de Imágenes en el editor no funcionará.'; $_lang["configcheck_installer"] = 'El instalador todavía está presente'; -$_lang["configcheck_installer_msg"] = 'El directorio install/ contiene el instalador de MODX. Sólo imagina lo que puede pasar si una persona maligna encuentra esta carpeta y ¡ejecuta el instalador! Probablemente no llegue muy lejos, porque deberá ingresar cierta información de usuario para la base de datos, pero es mejor borrar esta carpeta de tu servidor.'; +$_lang["configcheck_installer_msg"] = 'El directorio install/ contiene el instalador de EVO. Sólo imagina lo que puede pasar si una persona maligna encuentra esta carpeta y ¡ejecuta el instalador! Probablemente no llegue muy lejos, porque deberá ingresar cierta información de usuario para la base de datos, pero es mejor borrar esta carpeta de tu servidor.'; $_lang["configcheck_lang_difference"] = 'Número incorrecto de entradas en el archivo de idioma'; $_lang["configcheck_lang_difference_msg"] = 'El idioma actualmente seleccionado tiene un número diferente de entradas que el idioma prefijado. Mientras no es necesariamente un problema, esto puede significar que el archivo de idioma necesita ser actualizado.'; $_lang["configcheck_notok"] = 'Uno o más detalles de configuración no están bien: '; $_lang["configcheck_ok"] = 'El chequeo pasó OK - sin advertencias que reportar.'; $_lang["configcheck_php_gdzip"] = 'GD and/or Zip PHP extensions not found'; -$_lang["configcheck_php_gdzip_msg"] = 'MODX needs the GD and Zip extension enabled for PHP. While MODX will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; +$_lang["configcheck_php_gdzip_msg"] = 'EVO needs the GD and Zip extension enabled for PHP. While EVO will work without them, you will not be able to take full advantage of the built-in File Manager, Image Editor or Captcha for logins.'; +$_lang["configcheck_rb_base_dir"] = 'The currently set File base path seems incorrect.'; +$_lang["configcheck_rb_base_dir_msg"] = 'This can happen for example by moving your installation to a different directory or server. Please check and update your Evo system configuration.'; $_lang["configcheck_register_globals"] = 'register_globals está configurado como ON en tu archivo de configuración php.ini'; $_lang["configcheck_register_globals_msg"] = 'Esta configuración hace tu sitio mucho más propenso a sufrir ataques Cross Site Scripting (XSS). Deberías hablar con tu proveedor de hospedaje acerca de qué puede hacer para deshabilitar esta configuración.'; $_lang["configcheck_title"] = 'Chequeo de configuración'; @@ -149,8 +157,10 @@ $_lang["configcheck_warning"] = 'Advertencia de configuración:'; $_lang["configcheck_what"] = '¿Qué significa esto?'; $_lang["confirm_block"] = '¿Estás seguro de que quieres bloquear a este usuario?'; +$_lang["confirm_delete_category"] = '¿Estás seguro de que quieres borrar esta categoría?'; $_lang["confirm_delete_eventlog"] = '¿Estás seguro de que quieres borrar esta bitácora de eventos?'; $_lang["confirm_delete_file"] = '¿Estás segura de que quieres borrar el archivo?\n\n¡Esto puede hacer que tu sitio deje de funcionar correctamente! Sólo borra este archivo si sabes con seguridad que lo que estás haciendo no va a romper nada.'; +$_lang["confirm_delete_group"] = 'Are you sure you want to delete this group?'; $_lang["confirm_delete_htmlsnippet"] = '¿Estás seguro de que quieres borrar este chunk?'; $_lang["confirm_delete_keywords"] = '¿Estás segura de que quieres borrar estas palabras claves?'; $_lang["confirm_delete_module"] = '¿Estás seguro de que quieres borrar este módulo?'; @@ -169,6 +179,7 @@ $_lang["confirm_name_change"] = 'Cambiar el nombre de usuario puede afectar otras aplicaciones que estén relacionadas con el Administrador de Contenidos.\n\n¿Estás seguro de que quieres cambiar este nombre de usuario?'; $_lang["confirm_publish"] = '\n\nLa publicación de este documento removerá cualquier fecha de (des)publicación que haya sido configurada. Si deseas configurar o mantener las fechas de publicación o (des)publicación, por favor selecciona \'editar\' el documento en vez de publicar.\n\n¿Continuar publicación?'; $_lang["confirm_remove_locks"] = 'Los usuarios a veces cierran sus navegadores mientras editan documentos, templates, snippets, o parsers, posiblemente dejando el artículo que estaban editando en estado cerrado. Al presionar OK puedes remover TODOS los estados cerrados que están configurados actualmente.\n\n¿Continuar?'; +$_lang["confirm_reset_sort_order"] = 'Are you sure you want to reset the \"sort order/index\" of all listed elements to 0 ?'; $_lang["confirm_resource_duplicate"] = '¿Estás segura de que quieres duplicar este documento? Cualquier artículo que contenga también será duplicado.'; $_lang["confirm_setting_language_change"] = 'Has modificado el valor prefijado y perderás los cambios. ¿Proceder?'; $_lang["confirm_unblock"] = '¿Estás seguro de que quieres desbloquear este usuario?'; @@ -181,8 +192,9 @@ $_lang["create_resource_title"] = 'Crear Recurso'; $_lang["create_weblink_here"] = 'Crear enlace web aquí'; $_lang["createdon"] = 'Fecha de creación'; +$_lang["create_new"] = 'Create new'; $_lang["credits"] = 'Créditos'; -$_lang["credits_shouts_msg"] = '

          MODX es administrado y mantenido en MODXCMX.com.

          '; +$_lang["credits_shouts_msg"] = '

          EVO es administrado y mantenido en evo.im.

          '; $_lang["custom_contenttype_message"] = 'Aquí puedes añadir tipos de contenido personalizados para ser usados en tus documentos. Para añadir una nueva entrada, ingresa el tipo de contenido y presione el botón de \'Añadir\'.'; $_lang["custom_contenttype_title"] = 'Tipos de contenido personalizados:'; $_lang["database_charset"] = 'Conjunto de Caracteres de la Base de Datos'; @@ -234,12 +246,14 @@ $_lang["deselect_metatags"] = 'Limpiar etiquetas META'; $_lang["disabled"] = 'Deshabilitado'; $_lang["doc_data_title"] = 'Ver datos del documento'; +$_lang["documentation"] = 'Documentation'; $_lang["duplicate"] = 'Duplicar'; $_lang["duplicate_alias_found"] = 'El documento \'%s\' ya está usando el alias \'%s\'. Por favor, ingresa un alias único.'; $_lang["duplicate_alias_message"] = 'Aquí puedes seleccionar \'si\' para permitir guardar alias duplicados. NOTA: Esta opción debe de ser usada con la opción \'Dirección Alias Amigable\' configurada a \'Si\' para así evitar problemas referenciando el documento.'; $_lang["duplicate_alias_title"] = 'Permitir alias duplicados:'; $_lang["duplicate_name_found_general"] = 'Ya existe un %s nombrado \'%s\'. Favor de ingresar un nombre único.'; $_lang["duplicate_name_found_module"] = 'Ya existe un Módulo nombrado \'%s\'. Favor de ingresar un nombre único.'; +$_lang["duplicated_el_suffix"] = 'Duplicate'; $_lang["edit"] = 'Editar'; $_lang["edit_resource"] = 'Editar documento'; $_lang["edit_resource_title"] = 'Crear/editar documento'; @@ -250,6 +264,7 @@ $_lang["editor_css_path_title"] = 'Dirección del archivo CSS:'; $_lang["element"] = 'Elemento'; $_lang["element_categories"] = 'Vista combinada'; +$_lang["element_filter_msg"] = 'Type here to filter list'; $_lang["element_management"] = 'Administrar Elementos'; $_lang["element_name"] = 'Nombre de Elemento'; $_lang["element_selector_msg"] = 'Selecciona el o los Elemento(s) de la lista aquí abajo y haz clic en el botón \'Insertar\'.'; @@ -289,8 +304,8 @@ $_lang["export_site_failed_no_write"] = 'No se puede escribir el archivo.'; $_lang["export_site_html"] = 'Exportar sitio a HTML'; $_lang["export_site_maxtime"] = 'Tiempo máximo de exportación:'; -$_lang["export_site_maxtime_message"] = 'Aquí puedes especificar el número de segundos que MODX puede tardarse en exportar el sitio (por sobre los valores de PHP). Ingresa 0 para tiempo ilimitado. Favor de notar, un valor de 0 o un numero realmente alto pueden hacer cosas extrañas a tu servidor y no es recomendado.'; -$_lang["export_site_message"] = '

          Usando esta función puedes exportar el sitio completo a archivos HTML. Favor de notar, sin embargo, que perderás mucha funcionalidad de MODX si lo haces:

          • Las lecturas de los archivos exportados no serán guardadas.
          • Snippets interactivos NO funcionarán en archivos exportados
          • Sólo documentos normales serán exportados, los enlaces web no serán exportados.
          • El proceso de exportación puede fallar si tus documentos contienen snippets que envían cabeceras de redirección.
          • Dependiendo de cómo has escrito tus documentos, hojas de estilo e imagenes, el diseño de tu sitio puede estar dañado. Para arreglar esto, puedes guardar/mover tus archivos exportados al mismo directorio donde se encuentra el archivo principal de MODX index.php.

          Por favor llena la forma y presiona \'Exportar\' para comenzar el proceso de exportación. Los archivos creados serán guardados en la ubicación que especifiques, usando, cuando sea posible, los alias de documentos como nombres de archivo. Mientras se exporta tu sitio, es mejor configurar la opción de MODX \'Alias Amigables\' como \'si\'. Dependiendo del tamaño de tu sitio, la exportación puede demorar un tiempo.

          ¡Cualquier archivo existente será sobrescrito por los nuevos si sus nombres son identicos!

          '; +$_lang["export_site_maxtime_message"] = 'Aquí puedes especificar el número de segundos que EVO puede tardarse en exportar el sitio (por sobre los valores de PHP). Ingresa 0 para tiempo ilimitado. Favor de notar, un valor de 0 o un numero realmente alto pueden hacer cosas extrañas a tu servidor y no es recomendado.'; +$_lang["export_site_message"] = '

          Usando esta función puedes exportar el sitio completo a archivos HTML. Favor de notar, sin embargo, que perderás mucha funcionalidad de EVO si lo haces:

          • Las lecturas de los archivos exportados no serán guardadas.
          • Snippets interactivos NO funcionarán en archivos exportados
          • Sólo documentos normales serán exportados, los enlaces web no serán exportados.
          • El proceso de exportación puede fallar si tus documentos contienen snippets que envían cabeceras de redirección.
          • Dependiendo de cómo has escrito tus documentos, hojas de estilo e imagenes, el diseño de tu sitio puede estar dañado. Para arreglar esto, puedes guardar/mover tus archivos exportados al mismo directorio donde se encuentra el archivo principal de EVO index.php.

          Por favor llena la forma y presiona \'Exportar\' para comenzar el proceso de exportación. Los archivos creados serán guardados en la ubicación que especifiques, usando, cuando sea posible, los alias de documentos como nombres de archivo. Mientras se exporta tu sitio, es mejor configurar la opción de EVO \'Alias Amigables\' como \'si\'. Dependiendo del tamaño de tu sitio, la exportación puede demorar un tiempo.

          ¡Cualquier archivo existente será sobrescrito por los nuevos si sus nombres son identicos!

          '; $_lang["export_site_numberdocs"] = '

          Se encontraron %s documentos para exportar...

          '; $_lang["export_site_prefix"] = 'Prefijo de archivo:'; $_lang["export_site_start"] = 'Comenzar exportación'; @@ -309,7 +324,7 @@ $_lang["file_deleted"] = '¡Éxito!'; $_lang["file_download_file"] = 'Descargar archivo'; $_lang["file_download_unzip"] = 'Descomprimir archivo'; -$_lang["file_folder_chmod_error"] = 'No es posible cambiar los permisos, necesitarás cambiar los permisos fuera de MODX.'; +$_lang["file_folder_chmod_error"] = 'No es posible cambiar los permisos, necesitarás cambiar los permisos fuera de EVO.'; $_lang["file_folder_created"] = '¡Carpeta creada con éxito!'; $_lang["file_folder_deleted"] = '¡La carpeta fue borrada con éxito!'; $_lang["file_folder_not_created"] = 'No es posible crear la carpeta'; @@ -319,12 +334,13 @@ $_lang["file_saved"] = '¡Archivo actualizado con éxito!'; $_lang["file_unzip"] = '¡La descompresión fue exitosa!'; $_lang["file_unzip_fail"] = '¡La descompresión falló!'; -$_lang["filemanager_path_message"] = 'IIS a menudo no actualiza la configuración de document_root correctamente, que es usado por el administrador de archivos para determinar qué puedes ver. Si estás teniendo problemas usando el administrador de archivos, asegúrate de que esta dirección apunta a la raíz de tu instalación MODX.'; +$_lang["filemanager_path_message"] = 'IIS a menudo no actualiza la configuración de document_root correctamente, que es usado por el administrador de archivos para determinar qué puedes ver. Si estás teniendo problemas usando el administrador de archivos, asegúrate de que esta dirección apunta a la raíz de tu instalación EVO.'; $_lang["filemanager_path_title"] = 'Dirección del administrador de archivos:'; $_lang["files_access_denied"] = '¡Acceso denegado!'; $_lang["files_data"] = 'Datos'; $_lang["files_dir_listing"] = 'Listando del directorio para:'; $_lang["files_directories"] = 'Directorios'; +$_lang["files_directory_is_empty"] = 'This directory is empty.'; $_lang["files_dirwritable"] = '¿Directorio escribible?'; $_lang["files_editfile"] = 'Editar archivo'; $_lang["files_file_type"] = 'Tipo de archivo: '; @@ -333,6 +349,8 @@ $_lang["files_files"] = 'Archivos'; $_lang["files_filesize"] = 'Tamaño de archivo'; $_lang["files_filetype_notok"] = '¡La subida de este tipo de archivo no está permitida!'; +$_lang["files_management"] = 'Manage Files'; +$_lang["files_management_no_permission"] = 'You do not have enough permissions to view or edit these files. Ask the administrator to grant you access to %s.'; $_lang["files_modified"] = 'Modificado'; $_lang["files_top_level"] = 'Al nivel superior'; $_lang["files_up_level"] = 'Un nivel arriba'; @@ -358,9 +376,9 @@ $_lang["forgot_password_email_link"] = 'Haz clic aquí para completar el proceso.'; $_lang["forgot_your_password"] = '¿Se te olvidó tu contraseña?'; $_lang["friday"] = 'Viernes'; -$_lang["friendly_alias_message"] = 'Si estás utilizando URLs amigables, y el documento tiene un alias, el alias siempre tiene preferencia sobre la URL amigable. Configurando esta opción a \'si\', el prefijo y sufijo de URL amigable también será aplicado al alias. Por ejemplo, si tu documento con ID 1 tiene un alias de `introducción`, y has configurado un prefijo de `` y un sufijo de `.html`, configurando esta opción a `si` generará `introduccion.html`. Si no hay un alias, MODX generará `1.html` como enlace.'; +$_lang["friendly_alias_message"] = 'Si estás utilizando URLs amigables, y el documento tiene un alias, el alias siempre tiene preferencia sobre la URL amigable. Configurando esta opción a \'si\', el prefijo y sufijo de URL amigable también será aplicado al alias. Por ejemplo, si tu documento con ID 1 tiene un alias de `introducción`, y has configurado un prefijo de `` y un sufijo de `.html`, configurando esta opción a `si` generará `introduccion.html`. Si no hay un alias, EVO generará `1.html` como enlace.'; $_lang["friendly_alias_title"] = 'Utilizar alias amigables:'; -$_lang["friendlyurls_message"] = 'Esto te permite usar URLs amigables para los buscadores con MODX. Favor de notar, que esto sólo funciona en instalaciones MODX corriendo sobre Apache, y que deberás escribir un archivo .htaccess para que esto funcione. Ve el archivo .htaccess incluido en la distribución para más información.'; +$_lang["friendlyurls_message"] = 'Esto te permite usar URLs amigables para los buscadores con EVO. Favor de notar, que esto sólo funciona en instalaciones EVO corriendo sobre Apache, y que deberás escribir un archivo .htaccess para que esto funcione. Ve el archivo .htaccess incluido en la distribución para más información.'; $_lang["friendlyurls_title"] = 'Usar URLs amigas:'; $_lang["friendlyurlsprefix_message"] = 'Aquí puedes especificar el prefijo a usar por las URLs amigables. Por ejemplo, una configuración de prefijo \'page\' cambiará el URL /index.php?id=2 al URL amigable /page2.html (asumiendo que el sufijo está configurado a .html). De esta forma puedes especificar lo qué tus usuarios (y buscadores) ven como enlaces en tu sitio.'; $_lang["friendlyurlsprefix_title"] = 'Prefijo para URLs amigables:'; @@ -368,23 +386,30 @@ $_lang["friendlyurlsuffix_title"] = 'Sufijo para URLs amigables:'; $_lang["functionnotimpl"] = '¡Lo sentimos!'; $_lang["functionnotimpl_message"] = 'Esta función no ha sido implementada todavía.'; +$_lang["further_info"] = 'Further information'; +$_lang["global_tabs"] = 'Global Tabs'; $_lang["go"] = 'Ir'; $_lang["group_access_permissions"] = 'Acceso de grupo de usuarios'; +$_lang['group_tvs'] = 'Group TV'; $_lang["guid"] = 'GUID'; $_lang["help"] = 'Ayuda'; -$_lang["help_msg"] = '

          Puede obtener soporte gratuito de la comunidad visitando los foros de MODX. También hay un cumulo creciente de Documentación y Guías MODX que tocan virtualmente todos los aspectos de MODX.

          Estamos planeando ofrecer servicios de soporte comercial para MODX. Por favor, envíenos un mensaje si está interesado.'; +$_lang["help_msg"] = '

          Puede obtener soporte gratuito de la comunidad visitando los foros de EVO. También hay un cumulo creciente de Documentación y Guías EVO que tocan virtualmente todos los aspectos de EVO.

          Estamos planeando ofrecer servicios de soporte comercial para EVO. Por favor, envíenos un mensaje si está interesado.'; $_lang["help_title"] = 'Ayuda'; $_lang["hide_tree"] = 'Ocultar árbol'; -$_lang["home"] = 'Inicio'; +$_lang["home"] = 'Cuadro de Mando'; +$_lang["htmlsnippet"] = 'Chunk'; +$_lang["htmlsnippets"] = 'Chunks'; $_lang["htmlsnippet_desc"] = 'Descripción'; $_lang["htmlsnippet_management_msg"] = 'Aquí puedes seleccionar qué chunk deseas editar.'; $_lang["htmlsnippet_msg"] = 'Aquí puedes añadir/editar chunks. Recuerda, los chunks son código HTML \'plano\', por lo que cualquier código PHP no será procesado.'; -$_lang["htmlsnippet_name"] = 'Nombre del chunk'; +$_lang["htmlsnippet_name"] = '{{ Nombre del chunk }}'; $_lang["htmlsnippet_title"] = 'Crear/editar chunk'; $_lang["icon"] = 'Icono'; +$_lang["icon_description"] = 'CSS class value. e.g. fa fa-star'; $_lang["id"] = 'ID'; $_lang["illegal_parent_child"] = 'Asignación de padre:\n\nEl documento es un hijo del documento seleccionado.'; $_lang["illegal_parent_self"] = 'Asignación de padre:\n\nEl documento seleccionado no puede ser asignado a sí mismo.'; +$_lang["images_management"] = 'Manage Images'; $_lang["import_files_found"] = 'Se encontraron %s documentos para importar...'; $_lang["import_params"] = 'Parámetros compartidos del modulo de importación'; $_lang["import_params_msg"] = 'Puedes importar los parámetros, o configuraciones de un módulo seleccionando el nombre del módulo en el siguiente menú desplegable. NOTA: Para que los módulos aparezcan dentro del menú, este plugin/snippet debe ser parte del listado de dependencias del módulo y el módulo debe tener habilitado el compartir parametros. '; @@ -410,6 +435,10 @@ $_lang["insert"] = 'Insertar'; $_lang["maxImageWidth"] = 'Maximum image width'; $_lang["maxImageHeight"] = 'Maximum image height'; +$_lang["clientResize"] = 'Resize images on client-side'; +$_lang["clientResize_message"] = 'If enabled then images will be resized by browser before upload to the server'; +$_lang["noThumbnailsRecreation"] = 'Create thumbnails on upload only'; +$_lang["noThumbnailsRecreation_message"] = 'File browser will create thumbnails only on upload; if there\'s no thumbnails for some images, they will not be created'; $_lang["thumbWidth"] = 'Maximum thumbnail width'; $_lang["thumbHeight"] = 'Maximum thumbnail height'; $_lang["thumbsDir"] = 'Thumbnails directory location'; @@ -420,21 +449,23 @@ $_lang["maxImageHeight_message"] = 'If uploaded image resolution exceeds this setting it will be automatically resized. Set 0 to avoid.'; $_lang["thumbWidth_message"] = 'Maximum thumbnail width.'; $_lang["thumbHeight_message"] = 'Maximum thumbnail height.'; -$_lang["thumbsDir_message"] = 'The name of previews folder.'; +$_lang["thumbsDir_message"] = 'The name of thumbnail directory.'; $_lang["jpegQuality_message"] = 'JPEG compression quality of thumbnails and resized images'; $_lang["showHiddenFiles"] = 'Show hidden files in file browser'; $_lang["keyword"] = 'Palabra clave'; $_lang["keywords"] = 'Palabras clave'; $_lang["keywords_intro"] = 'Para editar una palabra clave, simplemente escribe la nueva palabra clave en el campo de texto adyacente a la palabra clave que desees cambiar. Para borrar una palabra clave, selecciona la caja \'borrar\' para esa palabra clave. Si seleccionas la caja de borrar de la palabra clave, y también le cambias su nombre, será borrada ¡y el renombrado de la palabra clave no tendrá efecto!'; -$_lang["language_message"] = 'Seleccione el idioma para el Administrador de Contenido de MODX.'; +$_lang["language_message"] = 'Seleccione el idioma para el Administrador de Contenido de EVO.'; $_lang["language_title"] = 'Idioma:'; +$_lang["last_update"] = 'Last update'; $_lang["launch_site"] = 'Ver el sitio'; +$_lang["license"] = 'License'; $_lang["link_attributes"] = 'Atributos de enlace'; $_lang["link_attributes_help"] = 'Ingresa atributos opcionales para un enlace para esta página, tal como "target=" o "rel=".'; $_lang["list_mode"] = 'Habilitar o deshabilitar el modo de listado - usado para listar todos los registros en el cuadriculado.'; $_lang["loading_doc_tree"] = 'Cargando árbol de documentos...'; $_lang["loading_menu"] = 'Cargando menú...'; -$_lang["loading_page"] = 'Por favor espera mientras MODX carga la página...'; +$_lang["loading_page"] = 'Por favor espera mientras EVO carga la página...'; $_lang["localtime"] = 'Tiempo local'; $_lang["lock_htmlsnippet"] = 'Bloquear edición de chunk'; $_lang["lock_htmlsnippet_msg"] = 'Solamente administradores (Rol ID 1) pueden editar este chunk.'; @@ -462,7 +493,7 @@ $_lang["login_homepage"] = 'Página de entrada'; $_lang["login_homepage_message"] = 'Ingresa el ID del documento al que quieres enviar al usuario después que haya entrado. NOTA: asegúrate de que el ID que ingreses pertenezca a un documento existente, que ha sido publicado y que es accesible por el usuario.'; $_lang["login_message"] = 'Por favor ingresa tus credenciales de entrada para comenzar tu sesión en el Administrador. Tu nombre de usuario y contraseña son sensitivas a las mayúsculas, por favor ingrésalas con cuidado.'; -$_lang["logo_slogan"] = 'Administrador de Contenido MODX - \nCrea y haz más con menos'; +$_lang["logo_slogan"] = 'Administrador de Contenido EVO - \nCrea y haz más con menos'; $_lang["logout"] = 'Salir'; $_lang["long_title"] = 'Título largo'; $_lang["mail_check_timeperiod_message"] = 'Que tan frecuente checar por mensajes de correo nuevos en el Admin, en segundos.'; @@ -475,11 +506,19 @@ $_lang["manage_plugins"] = 'Plugins'; $_lang["manage_snippets"] = 'Snippets'; $_lang["manage_templates"] = 'Templates'; +$_lang["manage_documents"] = 'Documents'; $_lang["manager"] = 'Administrador'; $_lang["manager_lockout_message"] = 'Estás actualmente dentro del Administrador de Contenido. Si deseas cerrar tu sesión por favor haz clic en el botón de "Salir".

          Para ir a tu página de inicio o página principal, haz clic en el botón de "Inicio".'; $_lang["manager_permissions"] = 'Permisos del Administrador'; $_lang["manager_theme"] = 'Tema del Administrador:'; $_lang["manager_theme_message"] = 'Selecciona el tema para el Administrador de Contenido.'; +$_lang["manager_theme_mode"] = 'Color Scheme:'; +$_lang["manager_theme_mode1"] = 'everything is light'; +$_lang["manager_theme_mode2"] = 'the header is dark'; +$_lang["manager_theme_mode3"] = 'header and sidebar are dark'; +$_lang["manager_theme_mode4"] = 'everything is dark'; +$_lang['manager_theme_mode_message'] = 'This setting is used as the "default" and can be overridden by the manager when using the theme color mode switch button in the Resource Tree: '; +$_lang['manager_theme_mode_title'] = 'Theme color mode switch'; $_lang["messages"] = 'Mensajes'; $_lang["messages_all"] = 'Todos'; $_lang["messages_compose"] = 'Escribe un mensaje'; @@ -548,11 +587,11 @@ $_lang["module_title"] = 'Crear/editar Módulo'; $_lang["module_viewdepend_msg"] = 'Ve los Elementos asignados de los que depende este módulo. Haz clic en el botón "Dependencias del Admin" para modificar las dependencias'; $_lang["modules"] = 'Módulos'; -$_lang["modx_news"] = 'Noticias de MODX'; -$_lang["modx_news_tab"] = 'Noticias de MODX'; -$_lang["modx_news_title"] = 'Noticias de MODX'; -$_lang["modx_security_notices"] = 'Notas de Seguridad de MODX'; -$_lang["modx_version"] = 'Versión de MODX'; +$_lang["modx_news"] = 'Noticias de EVO'; +$_lang["modx_news_tab"] = 'Noticias de EVO'; +$_lang["modx_news_title"] = 'Noticias de EVO'; +$_lang["modx_security_notices"] = 'Notas de Seguridad de EVO'; +$_lang["modx_version"] = 'Versión de EVO'; $_lang["monday"] = 'Lunes'; $_lang["move"] = 'Mover'; $_lang["move_resource"] = 'Mover documento'; @@ -609,6 +648,7 @@ $_lang["onlineusers_user"] = 'Usuario'; $_lang["onlineusers_userid"] = 'ID de usuario'; $_lang["optimize_table"] = 'Haz clic aquí para optimizar esta tabla'; +$_lang["page_data_alias"] = 'Alias'; $_lang["page_data_cacheable"] = 'Cacheable'; $_lang["page_data_cacheable_help"] = 'Dejando este campo seleccionado permitirá que el documento sea guardado en el cache. Si tu documento contiene snippets, asegúrate de que este campo no esté seleccionado.'; $_lang["page_data_cached"] = 'Fuente obtenida desde el cache:'; @@ -649,9 +689,11 @@ $_lang["paging_to"] = 'a'; $_lang["paging_total"] = 'total'; $_lang["parameter"] = 'Parámetro'; +$_lang["parse_docblock"] = 'Parse DocBlock'; +$_lang["parse_docblock_msg"] = 'Attention (!): Resets actual name, configuration, description and category to install-defaults by parsing the source code.'; $_lang["password"] = 'Contraseña'; $_lang["password_change_request"] = 'Solicitud de cambio de contraseña'; -$_lang["password_gen_gen"] = 'Deja que MODX genere una contraseña.'; +$_lang["password_gen_gen"] = 'Deja que EVO genere una contraseña.'; $_lang["password_gen_length"] = 'La contraseña que especificaste necesita tener al menos 6 caracteres.'; $_lang["password_gen_method"] = 'Método de contraseña nuevo'; $_lang["password_gen_specify"] = 'Déjame especificar la contraseña:'; @@ -659,8 +701,9 @@ $_lang["password_method_email"] = 'Enviar la contraseña nueva por email.'; $_lang["password_method_screen"] = 'Mostrar la contraseña nueva en la pantalla.'; $_lang["password_msg"] = 'La contraseña nueva para %s es %s.'; -$_lang["php_version_check"] = 'MODX es compatible con PHP Versión 5.0.0 y superior. Por favor ¡actualiza tu instalación de PHP!'; +$_lang["php_version_check"] = 'EVO es compatible con PHP Versión 5.0.0 y superior. Por favor ¡actualiza tu instalación de PHP!'; $_lang["plugin"] = 'Plugin'; +$_lang["plugins"] = 'Plugins'; $_lang["plugin_code"] = 'Código de plugin(php)'; $_lang["plugin_config"] = 'Configuración de plugin'; $_lang["plugin_desc"] = 'Descripción'; @@ -672,6 +715,8 @@ $_lang["plugin_priority"] = 'Editar el orden de Ejecución de Plugins por Evento'; $_lang["plugin_priority_instructions"] = 'Arrastra para re-ordenar los Plugins bajo cada encabezado de Eventos. El primer plugin en ejecutarse deberá ir hasta arriba.'; $_lang["plugin_priority_title"] = 'Orden de Ejecución de Plugins'; +$_lang["purge_plugin"] = 'Purge obsolete plugins'; +$_lang["purge_plugin_confirm"] = 'Are you sure you want to purge obsolete plugins?'; $_lang["plugin_title"] = 'Crear/editar Plugin'; $_lang["preview"] = 'Previsualizar'; $_lang["preview_msg"] = 'Esta es una previsualización de tus últimos cambios guardados. Haz clic aquí para Guardar y Recargar tus cambios actuales'; @@ -681,9 +726,9 @@ $_lang["publish_date"] = 'Fecha de publicación'; $_lang["publish_events"] = 'Publicar eventos'; $_lang["publish_resource"] = 'Publicar documento'; -$_lang["rb_base_dir_message"] = 'Ingresa la dirección física del directorio del Navegador de Archivos. Esta configuración es normalmente generada automáticamente. Si estás usando IIS, sin embargo, MODX tal vez no pueda encontrar la dirección por si mismo, causando que el Navegador de Archivos muestre un error. En este caso, puedes ingresar la dirección al directorio de imágenes aquí (la dirección como la ves en el Explorador de Windows). NOTA: El directorio del Navegador de Archivos debe contener las imágenes, archivos, flash y medios de los subdirectorios para que el Navegador de Archivos funcione correctamente.'; +$_lang["rb_base_dir_message"] = 'Ingresa la dirección física del directorio del Navegador de Archivos. Esta configuración es normalmente generada automáticamente. Si estás usando IIS, sin embargo, EVO tal vez no pueda encontrar la dirección por si mismo, causando que el Navegador de Archivos muestre un error. En este caso, puedes ingresar la dirección al directorio de imágenes aquí (la dirección como la ves en el Explorador de Windows). NOTA: El directorio del Navegador de Archivos debe contener las imágenes, archivos, flash y medios de los subdirectorios para que el Navegador de Archivos funcione correctamente.'; $_lang["rb_base_dir_title"] = 'Dirección Base de Archivos:'; -$_lang["rb_base_url_message"] = 'Ingresa la dirección virtual al directorio de archivos. Esta configuración es normalmente generada automáticamente. Si estás usando IIS, MODX tal vez no pueda encontrar la dirección por si mismo, causando que el Navegador de Archivos muestre un error. En este caso, puede ingresar la dirección al directorio de imágenes aquí (la dirección como la ves en el Explorador de Windows).'; +$_lang["rb_base_url_message"] = 'Ingresa la dirección virtual al directorio de archivos. Esta configuración es normalmente generada automáticamente. Si estás usando IIS, EVO tal vez no pueda encontrar la dirección por si mismo, causando que el Navegador de Archivos muestre un error. En este caso, puede ingresar la dirección al directorio de imágenes aquí (la dirección como la ves en el Explorador de Windows).'; $_lang["rb_base_url_title"] = 'URL del Navegador de Archivos:'; $_lang["rb_message"] = 'Selecciona si para habilitar el Navegador de Archivos. Esto permitirá a tus usuarios navegar y subir archivos como imágenes, flash y medios al servidor.'; $_lang["rb_title"] = 'Habilitar el Navegador de Archivos:'; @@ -692,6 +737,7 @@ $_lang["recent_docs"] = 'Documentos recientes'; $_lang["recommend_setting_change_title"] = 'Recommended Setting Change'; $_lang["recommend_setting_change_description"] = 'Your site is not configured to validate the HTTP_REFERER of incoming requests to the Manager. We strongly recommend enabling this setting to reduce the risk of a CSRF (Cross Site Request Forgery) attack.'; +$_lang["references"] = 'References'; $_lang["refresh_cache"] = 'Cache: Se encontraron %s archivos en el directorio cache y se borraron %d archivos cacheados.

          Los nuevos archivos cacheados serán creados cuando las páginas sean solicitadas.'; $_lang["refresh_published"] = '%s documentos fueron publicados.'; $_lang["refresh_site"] = 'Limpiar cache'; @@ -707,11 +753,13 @@ $_lang["remove_locks"] = 'Remover Bloqueos'; $_lang["rename"] = 'Renombrar'; $_lang["reports"] = 'Reportes'; +$_lang["report_issues"] = 'Report issues'; $_lang["require_tagname"] = 'Un nombre de etiqueta es requerido'; $_lang["require_tagvalue"] = 'Un valor para la etiqueta es requeridos'; $_lang["reserved_name_warning"] = 'You have used a reserved name.'; $_lang["reset"] = 'Reajustar'; $_lang["reset_failedlogins"] = 'reajustar'; +$_lang["reset_sort_order"] = 'Reset sort order'; $_lang["resource"] = 'Documento'; $_lang["resource_alias"] = 'Alias del documento'; $_lang["resource_alias_help"] = 'Configura el alias del URL para hacer el documento accesible como http://ejemplo.com/alias. Esto sólo funciona si los URLs amigables están habilitados en la configuración del sitio.'; @@ -724,7 +772,7 @@ $_lang["resource_opt_contentdispo"] = 'Disposición del contenido'; $_lang["resource_opt_contentdispo_help"] = 'Usa el campo de disposición del contenido para especificar cómo debe ser manejado este documento por el navegador. Para descarga de archivos selecciona la opción de Adjunto.'; $_lang["resource_opt_emptycache"] = '¿Vaciar Cache?'; -$_lang["resource_opt_emptycache_help"] = 'Dejando marcado este campo hará que MODX vacíe el cache después de que guardes el documento. De esta forma tus visitantes no verán una versión vieja del documento.'; +$_lang["resource_opt_emptycache_help"] = 'Dejando marcado este campo hará que EVO vacíe el cache después de que guardes el documento. De esta forma tus visitantes no verán una versión vieja del documento.'; $_lang["resource_opt_folder"] = '¿Contenedor?'; $_lang["resource_opt_folder_help"] = 'Selecciona esto para hacer que el documento también actúe como un contenedor de otros documentos. Un \'contenedor\' es como una carpeta, sólo que también puede tener contenido.'; $_lang["resource_opt_menu_index"] = 'Indice del menú'; @@ -749,7 +797,7 @@ $_lang["resource_title_help"] = 'Escribe aquí el nombre/título del documento. ¡Trata de evitar el uso de barras diagonales en el nombre!'; $_lang["resource_to_be_moved"] = 'Documento a mover'; $_lang["resource_type"] = 'Resource Type'; -$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another MODX Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; +$_lang["resource_type_message"] = 'Weblinks reference Resources on the Internet including another EVO Resource, an external page, or an image or other file on the Internet. Weblinks should have a text/html Internet Media Type and Inline Content-Disposition.'; $_lang["resource_type_weblink"] = 'Weblink'; $_lang["resource_type_webpage"] = 'Web page'; $_lang["resource_weblink_help"] = 'Escribe la dirección del objeto que deseas referenciar con este enlace web aquí.'; @@ -759,8 +807,11 @@ $_lang["role_about"] = 'Ver la página Nosotros'; $_lang["role_access_persmissions"] = 'Permisos de acceso'; $_lang["role_actionok"] = 'Ver la pantalla de acción completada'; +$_lang["role_assets_images"] = 'Manage assets/images'; +$_lang["role_assets_files"] = 'Manage assets/files'; $_lang["role_bk_manager"] = 'Usar el Administrador de Respaldo'; $_lang["role_cache_refresh"] = 'Vaciar la cache del sitio'; +$_lang["role_category_manager"] = 'Use the Category Manager'; $_lang["role_change_password"] = 'Cambiar la contraseña'; $_lang["role_change_resourcetype"] = 'Cambio del tipo de recurso'; $_lang["role_chunk_management"] = 'Administración de Chunks'; @@ -797,6 +848,7 @@ $_lang["role_errors"] = 'Ver diálogo de error'; $_lang["role_eventlog_management"] = 'Administración del bitácora de eventos'; $_lang["role_export_static"] = 'Exportar HTML Estático'; +$_lang["role_file_management"] = 'File Management'; $_lang["role_file_manager"] = 'Usar el administrador de archivos'; $_lang["role_frames"] = 'Solicitar marcos del administrador'; $_lang["role_help"] = 'Ver las páginas de ayuda'; @@ -840,10 +892,10 @@ $_lang["role_web_access_persmissions"] = 'Permisos de acceso web'; $_lang["role_web_user_management"] = 'Administración de usuarios web'; $_lang["rss_url_news_default"] = 'http://feeds.feedburner.com/evocms-release-news'; -$_lang["rss_url_news_message"] = 'Ingresa el URL del Feed de Noticias de MODX.'; +$_lang["rss_url_news_message"] = 'Ingresa el URL del Feed de Noticias de EVO.'; $_lang["rss_url_news_title"] = 'Feed RSS de Noticias'; $_lang["rss_url_security_default"] = 'http://feeds.feedburner.com/evocms-security-news'; -$_lang["rss_url_security_message"] = 'Ingresa el URL para el Feed de Seguridad MODX.'; +$_lang["rss_url_security_message"] = 'Ingresa el URL para el Feed de Seguridad EVO.'; $_lang["rss_url_security_title"] = 'Feed RSS de Seguridad'; $_lang["run_module"] = 'Correr módulo'; $_lang["saturday"] = 'Sábado'; @@ -857,8 +909,11 @@ $_lang["search_criteria_content_msg"] = 'Encontrar todos los documentos con el texto ingresado en su contenido.'; $_lang["search_criteria_id"] = 'Buscar por ID'; $_lang["search_criteria_id_msg"] = 'Ingresar el ID de un documento para encontrar rápidamente ese documento.'; +$_lang["search_criteria_top"] = 'Search in main fields'; +$_lang["search_criteria_top_msg"] = 'Pagetitle, Longtitle, Alias, ID'; $_lang["search_criteria_template_id"] = 'Buscar por ID de Plantilla'; $_lang["search_criteria_template_id_msg"] = 'Encontrar todos los Recursos que usan una Plantilla especificada.'; +$_lang["search_criteria_url_msg"] = 'Find Resource by exact URL.'; $_lang["search_criteria_longtitle"] = 'Buscar por título largo'; $_lang["search_criteria_longtitle_msg"] = 'Buscar todos los documentos con el texto ingresado en su título largo.'; $_lang["search_criteria_title"] = 'Buscar por título'; @@ -884,19 +939,30 @@ $_lang["serveroffset_message"] = 'Selecciona el número de horas de diferencia entre donde te encuentras y donde está el servidor. La hora actual del servidor es [%s], la hora actual del servidor usando el offset guardado actual es [%s].'; $_lang["serveroffset_title"] = 'Hora offset del servidor:'; $_lang["servertime"] = 'Hora del servidor'; +$_lang["set_automatic"] = 'Set automatic'; +$_lang["set_default"] = 'Set default'; +$_lang["set_default_all"] = 'Set defaults'; $_lang["settings_after_install"] = 'Como esta es una nueva instalación, te requiere que controles estas configuraciones, y cambies cualquiera que desees. Después de que hayas controlado la configuración, presiona \'Guardar\' para actualizar la base de datos de configuración.

          '; $_lang["settings_config"] = 'Configuración'; $_lang["settings_dependencies"] = 'Dependencias'; $_lang["settings_events"] = 'Eventos del Sistema'; $_lang["settings_furls"] = 'URLs amigables'; $_lang["settings_general"] = 'General'; +$_lang["settings_group_tv_message"] = 'Choose if Template Variables should be grouped in sections or tabs (named by TV category) when editing a Resource'; +$_lang["settings_group_tv_options"] = 'No,Sections in General tab,Tabs in General tab,Sections in new tab,Tabs in new tab,New tabs'; $_lang["settings_misc"] = 'Administrador de Archivos'; +$_lang["settings_security"] = 'Security'; $_lang["settings_KC"] = 'File Browser'; $_lang["settings_page_settings"] = 'Configuración de Página'; $_lang["settings_photo"] = 'Foto'; $_lang["settings_properties"] = 'Propiedades'; +$_lang["show_fullscreen_btn_message"] = 'Show Menu toggle Fullscreen button'; +$_lang["show_newresource_btn_message"] = 'Show Menu New Resource button'; +$_lang["settings_show_picker_message"] = 'Customize manager theme and save to localstorage'; +$_lang["show_fullscreen_btn"] = 'Toggle Fullscreen button'; +$_lang["show_newresource_btn"] = 'New Resource button'; $_lang["settings_site"] = 'Sitio'; -$_lang["settings_strip_image_paths_message"] = 'Si esto está configurado \'No\', MODX escribirá las fuentes del navegador de archivos (imágenes, archivos, flash, etc.) como URLs absolutas. Las URLs relativas son de ayuda si deseas mover tu instalación de MODX, p.ej. de un servidor de trabajo a uno de producción. Si no tienes idea de qué significa esto, será mejor lo dejes seleccionado en \'Si\'.'; +$_lang["settings_strip_image_paths_message"] = 'Si esto está configurado \'No\', EVO escribirá las fuentes del navegador de archivos (imágenes, archivos, flash, etc.) como URLs absolutas. Las URLs relativas son de ayuda si deseas mover tu instalación de EVO, p.ej. de un servidor de trabajo a uno de producción. Si no tienes idea de qué significa esto, será mejor lo dejes seleccionado en \'Si\'.'; $_lang["settings_strip_image_paths_title"] = '¿Re-escribir las direcciones del navegador?'; $_lang["settings_templvars"] = 'Variables de Template'; $_lang["settings_title"] = 'Configuración de sistema'; @@ -905,6 +971,7 @@ $_lang["show_meta"] = 'Show META Keywords tab'; $_lang["show_meta_message"] = 'Show the deprecated META Keywords tab when editing Resources in the Manager.'; $_lang["show_tree"] = 'Mostrar árbol'; +$_lang["show_picker"] = 'Show Color Switcher'; $_lang["showing"] = 'Mostrando'; $_lang["signupemail_message"] = 'Configurar el mensaje de email enviado a los usuarios cuando se les cree una cuenta incluyendo su nombre de usuario y su contraseña.
          Nota: Los siguiente placeholders son remplazados por el Administrador de Contenido cuando el mensaje es enviado:

          [+sname+] - Nombre de tu sitio web,
          [+saddr+] - La dirección electrónica de tu sitio web,
          [+surl+] - La dirección url de tu sitio,
          [+uid+] - El nombre o id del usuario,
          [+pwd+] - La contraseña del usuario,
          [+ufn+] - El nombre completo del usuario.

          Deja el [+uid+] y [+pwd+] en el email, o el nombre de usuario y la contraseña no serán enviados en el email ¡y tus usuarios no los conocerán!'; $_lang["signupemail_title"] = 'Correo electrónico de inicio de sesión:'; @@ -922,17 +989,24 @@ $_lang["siteunavailable_page_title"] = 'Página de sitio no disponible:'; $_lang["siteunavailable_title"] = 'Mensaje de sitio no disponible:'; $_lang["snippet"] = 'Snippet'; +$_lang["snippets"] = 'Snippets'; $_lang["snippet_code"] = 'Código de snippet (php)'; $_lang["snippet_desc"] = 'Descripción'; $_lang["snippet_execonsave"] = 'Ejecutar el snippet después de guardarlo.'; $_lang["snippet_management_msg"] = 'Elige el snippet que deseas editar.'; $_lang["snippet_msg"] = 'Añadir/editar snippets. Recuerda, los snippets son código PHP \'plano\', y si esperas que la salida del snippet sea mostrada en algún momento dentro de un template, necesitarás regresar el valor desde dentro del snippet.'; -$_lang["snippet_name"] = 'Nombre de snippet'; +$_lang["snippet_name"] = '[[ Nombre de snippet ]]'; $_lang["snippet_properties"] = 'Propiedades prefijadas'; $_lang["snippet_title"] = 'Crear/editar snippet'; +$_lang["sort_alphabetically"] = 'Sort alphabetically'; $_lang["sort_asc"] = 'Ascendente'; $_lang["sort_desc"] = 'Descendente'; +$_lang["sort_menuindex"] = 'Sort menu index'; $_lang["sort_tree"] = 'Ordenar el árbol'; +$_lang['sort_updating'] = 'Updating ...'; +$_lang['sort_updated'] = 'Updated!'; +$_lang['sort_nochildren'] = 'Parent does not have any children'; +$_lang["sort_elements_msg"] = 'Drag to reorder the listed elements.'; $_lang["source"] = 'Fuente'; $_lang["stay"] = 'Continuar editando'; $_lang["stay_new"] = 'Añadir otro'; @@ -941,17 +1015,21 @@ $_lang["sys_alert"] = 'Alerta de Sistema'; $_lang["sysinfo_activity_message"] = 'Esta lista muestra qué documentos han sido editados recientemente por tus usuarios.'; $_lang["sysinfo_userid"] = 'Usuario'; +$_lang["system"] = 'System'; $_lang["system_email_signup"] = 'Hola [+uid+] + +Hello [+uid+] Aquí tienes los detalles de inicio de sesión para el Administrador de Contenido de [+sname+]: -Nombre de usuario: [+uid+] +Usuario: [+uid+] Contraseña: [+pwd+] Una vez que has ingresado al Administrador de Contenido de ([+surl+]), puedes cambiar tu contraseña. Saludos, -El Administrador'; +El Administrador +'; $_lang["system_email_webreminder"] = 'Hola [+uid+] Para activar tu contraseña nueva haz clic en el siguiente enlace: @@ -981,6 +1059,7 @@ $_lang["table_prefix"] = 'Prefijo de tabla'; $_lang["tag"] = 'Etiqueta'; $_lang["template"] = 'Template'; +$_lang["templates"] = 'Templates'; $_lang["template_assignedtv_tab"] = 'Variables de Template Asignadas'; $_lang["template_code"] = 'Código de template (html)'; $_lang["template_desc"] = 'Descripción'; @@ -989,8 +1068,10 @@ $_lang["template_msg"] = 'Crea y edita templates. Los templates nuevos o modificados no serán visibles en las páginas cacheadas de tu sitio hasta que el cache sea vaciado , sin embargo, puedes usar la función de previsualización en una página para ver el template en acción.'; $_lang["template_name"] = 'Nombre del template'; $_lang["template_no_tv"] = 'Todavía no se han asignado variables de template a este template.'; +$_lang["template_notassigned_tv"] = 'These Template Variables are available for assigning.'; $_lang["template_reset_all"] = 'Reajusta todas las páginas a usar el template prefijado'; $_lang["template_reset_specific"] = 'Reajusta solamente \'%s\' páginas'; +$_lang["template_selectable"] = 'Template selectable when creating or editing ressources.'; $_lang["template_title"] = 'Crear/editar template'; $_lang["template_tv_edit"] = 'Editar el orden de clasificación de las variables de template'; $_lang["template_tv_edit_message"] = 'Arrastra para re-ordenar las Variables de Template para este template.'; @@ -1002,6 +1083,7 @@ $_lang["tmplvar_inuse"] = 'Los siguientes documentos están usando esta Variable de Template actualmente. Para continuar con la operación de borrado haz clic en el botón de Borrar de otra manera haz clic en el botón de Cancelar.'; $_lang["tmplvar_tmpl_access"] = 'Acceso a Template'; $_lang["tmplvar_tmpl_access_msg"] = 'Selecciona los templates que tienen permitido acceder/procesar esta variable'; +$_lang["tmplvar"] = 'Template Variable'; $_lang["tmplvars"] = 'Variables de Template'; $_lang["tmplvars_binding_msg"] = 'Este campo soporta vínculos de fuente de datos usando comandos @'; $_lang["tmplvars_caption"] = 'Subtítulo'; @@ -1011,15 +1093,17 @@ $_lang["tmplvars_inherited"] = 'Value inherited'; $_lang["tmplvars_management_msg"] = 'Administrar campos de contenido personalizados adicionales (Variables de Template) para tus documentos.'; $_lang["tmplvars_msg"] = 'Añade o edita variables de template aquí. Las variables de template deben ser asignadas a templates para poder acceder a ellas desde snippets y documentos.'; -$_lang["tmplvars_name"] = 'Nombre de Variable'; +$_lang["tmplvars_name"] = '[* Nombre de Variable *]'; $_lang["tmplvars_novars"] = 'No se encontraron Variables de Template'; $_lang["tmplvars_rank"] = 'Orden de Clasificación'; +$_lang["tmplvars_rank_edit_message"] = 'Drag to reorder the Template Variables.'; $_lang["tmplvars_reset_params"] = 'Reajustar parámetros'; $_lang["tmplvars_title"] = 'Create/edit Template Variable'; $_lang["tmplvars_type"] = 'Tipo de Entrada'; $_lang["tmplvars_widget"] = 'Widget'; $_lang["tmplvars_widget_prop"] = 'Propiedades de Widget'; $_lang["to"] = 'a'; +$_lang["toggle_fullscreen"] = 'Toggle Fullscreen'; $_lang["tools"] = 'Herramientas'; $_lang["top_howmany_message"] = 'Cuando estés viendo reportes ¿qué tan largas deben de ser las listas de \'Mejores...\'?'; $_lang["top_howmany_title"] = 'Cuántos mejores'; @@ -1028,8 +1112,10 @@ $_lang["track_visitors_title"] = 'Bitácora de visitas (estadísticas)'; $_lang["tree_page_click"] = 'Page Click Behavior'; $_lang["tree_page_click_message"] = 'The default behavior when clicking on a page in the site tree.'; +$_lang["use_breadcrumbs"] = 'Show navigation'; +$_lang["use_breadcrumbs_message"] = 'Show the navigation when creating or editing Resource in the Manager'; $_lang["tree_show_protected"] = 'Mostrar páginas protegidas'; -$_lang["tree_show_protected_message"] = 'Si configurado a "No", las Páginas Protegidas (y todos sus documentos hijos) no aparecen en el árbol de documentos. "No" es la configuración anterior de MODX.'; +$_lang["tree_show_protected_message"] = 'Si configurado a "No", las Páginas Protegidas (y todos sus documentos hijos) no aparecen en el árbol de documentos. "No" es la configuración anterior de EVO.'; $_lang["truncate_table"] = 'Haz clic aquí para truncar esta tabla'; $_lang["tuesday"] = 'Martes'; $_lang["tv"] = 'TV'; @@ -1065,6 +1151,7 @@ $_lang["use_alias_path_title"] = 'Usar dirección alias amigable:'; $_lang["use_editor_message"] = '¿Quieres habilitar el editor de contenido formateado? Si estás más cómodo escribiendo HTML, entonces puedes deshabilitarlo usando esta configuración. ¡Nota que ésta configuración aplica a todos los documentos y todos los usuarios!'; $_lang["use_editor_title"] = 'Habilitar editor:'; +$_lang["use_global_tabs"] = 'Use global Tabs'; $_lang["user"] = 'Usuario'; $_lang["user_block"] = 'Bloqueado'; $_lang["user_blockedafter"] = 'Bloqueado después'; @@ -1103,6 +1190,7 @@ $_lang["validate_referer_message"] = 'Validar el encabezado de HTTP_REFERER para reducir el riesgo de que tus editores de contenido sean engañados a efectuar acciones no intencionadas en el administrador como víctimas de un ataque CSRF (Cross Site Request Forgery -- Solicitud de Sitio Cruzada Falsa). Algunas configuraciones no podrán usar esta opción si el servidor no está enviando los encabezados HTTP_REFERER.'; $_lang["validate_referer_title"] = 'Validar encabezados HTTP_REFERER?'; $_lang["value"] = 'Valor'; +$_lang["version"] = 'Version'; $_lang["view"] = 'Ver'; $_lang["view_child_resources_in_container"] = 'Ver hijos'; $_lang["view_log"] = 'Ver bitácora'; @@ -1124,14 +1212,16 @@ $_lang["webpwdreminder_title"] = 'Email de Recordatorio Web:'; $_lang["websignupemail_message"] = 'Configura el mensaje de email enviado a los usuarios cuando creen una cuenta incluyendo su nombre de usuario y su contraseña.
          Nota: Los siguientes placeholders son reemplazados por el Administrador de Contenidos cuando el mensaje es enviado:

          [+sname+] - Nombre de tu sitio web,
          [+saddr+] - La dirección de correo electrónico de tu sitio,
          [+surl+] - La dirección url de tu sitio,
          [+uid+] - El nombre o id de ingreso del usuario,
          [+pwd+] - la Contraseña del usuario,
          [+ufn+] - Nombre completo del usuario.

          Deja [+uid+] y [+pwd+] en el mensaje, de otro modo el nombre de usuario y la contraseña no serán enviadas en el mensaje ¡y tus usuarios no lo conocerán!'; $_lang["websignupemail_title"] = 'Email de Registro Web:'; +$_lang["allow_multiple_emails_title"] = 'Duplicate Web User email address'; +$_lang["allow_multiple_emails_message"] = 'Allows Web Users to share the same email address for situations when a member may not have their own email address or there is just one family email address.
          Note: Any password reminder and registration logic will need to account for this option if set to yes.'; $_lang["wednesday"] = 'Miércoles'; $_lang["welcome_messages"] = 'Tu Bandeja de Entrada contiene %d mensaje(s), de los cuales %s no han sido leídos.'; -$_lang["welcome_title"] = 'Bienvenido a tu Administrador de Contenido MODX'; -$_lang["which_editor_message"] = 'Selecciona el editor de texto formateado. Puedes descargar e instalar editores de texto formateado adicionales desde la página de descargas de MODX.'; +$_lang["welcome_title"] = 'Bienvenido a tu Administrador de Contenido'; +$_lang["which_editor_message"] = 'Selecciona el editor de texto formateado. Puedes descargar e instalar editores de texto formateado adicionales desde la página de descargas de EVO.'; $_lang["which_editor_title"] = 'Editor a usar:'; $_lang["working"] = 'Trabajando...'; $_lang["wrap_lines"] = 'Encapsular líneas (wrap)'; -$_lang["xhtml_urls_message"] = 'Reemplaza los signos & (&) en los URLs generados por MODX con el htmlentity &amp; que es XHTML válido.'; +$_lang["xhtml_urls_message"] = 'Reemplaza los signos & (&) en los URLs generados por EVO con el htmlentity &amp; que es XHTML válido.'; $_lang["xhtml_urls_title"] = 'URLs XHTML'; $_lang["yes"] = 'Si'; $_lang["you_got_mail"] = 'Tienes Email'; @@ -1142,10 +1232,10 @@ $_lang["yourinfo_total_logins"] = 'Número total de ingresos:'; $_lang["yourinfo_username"] = 'Estás ingresado como:'; -$_lang["a17_error_reporting_title"] = 'Detection level of the PHP error'; -$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP error.'; +$_lang["a17_error_reporting_title"] = 'Detection level of PHP errors'; +$_lang["a17_error_reporting_msg"] = 'Set the detection level of the PHP errors.'; $_lang["a17_error_reporting_opt0"] = 'Ignore all'; -$_lang["a17_error_reporting_opt1"] = 'Ignore the warning of a slight notice level(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; +$_lang["a17_error_reporting_opt1"] = 'Ignore warnings of a slight notice level (E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT)'; $_lang["a17_error_reporting_opt2"] = 'Detect all errors except E_NOTICE'; $_lang["a17_error_reporting_opt99"] = 'Detect all'; @@ -1154,56 +1244,64 @@ $_lang["enable_bindings_title"] = 'Enable @Bindings commands'; $_lang["enable_bindings_message"] = 'Prevents the execution of PHP functions through TV @Bindings. Useful if you have Manager users who should not be able to create PHP code but need to be able to create or edit TVs. The output of any TV with an @Binding will be "@Bindings disabled".'; - +$_lang["enable_filter_title"] = 'Enable filters'; +$_lang["enable_filter_message"] = 'Filters allow you to manipulate the way data is presented or parsed in a tag. They allow you to modify values from inside your templates. This is analogous to PHx. More info'; // todo: change link to documentation $_lang["enable_filter_phx_warning"] = 'Cuando está habilitada PHx plugin, incorporado en los filtros están desactivados por defecto'; + +$_lang["enable_at_syntax_title"] = 'Enable <@SYNTAX>'; +$_lang["enable_at_syntax_message"] = '<@SYNTAX>(atmark syntax) is simple and lightweight template syntax. This is designed to consider coexistence with HTML tags and content strings.'; + $_lang["bkmgr_alert_mkdir"] = 'A file cannot be created in a directory. Please check the permission of [+snapshot_path+]'; -$_lang["bkmgr_restore_msg"] = '

          A site can be restore using an SQL file.

          '; +$_lang["bkmgr_restore_msg"] = '

          Database tables could be restored by SQL:

          '; $_lang["bkmgr_restore_title"] = 'Restore'; $_lang["bkmgr_import_ok"] = 'SQL recovery was performed normally.'; $_lang["bkmgr_snapshot_ok"] = 'The snapshot was saved normally.'; $_lang["bkmgr_run_sql_file_label"] = 'Execute by sql file'; -$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL command strings'; +$_lang["bkmgr_run_sql_direct_label"] = 'Direct execute SQL commands'; $_lang["bkmgr_run_sql_submit"] = 'Execute restore'; $_lang["bkmgr_run_sql_result"] = 'Result'; $_lang["bkmgr_snapshot_title"] = 'Snapshot save and recovery'; -$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved and restored to a server.
          Preservation place : [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; +$_lang["bkmgr_snapshot_msg"] = '

          The contents of the database are saved in and restored from a server directory.
          Location: [+snapshot_path+] ($modx->config[\'snapshot_path\'])

          '; $_lang["bkmgr_snapshot_submit"] = 'Add snapshot'; -$_lang["bkmgr_snapshot_list_title"] = 'List of snapshot'; +$_lang["bkmgr_snapshot_list_title"] = 'List of snapshots'; $_lang["bkmgr_restore_submit"] = 'Revert this data'; $_lang["bkmgr_restore_confirm"] = 'Está seguro de que desea restaurar la copia de seguridad?\n[+filename+] ?'; -$_lang["bkmgr_snapshot_nothing"] = 'No snapshot'; +$_lang["bkmgr_snapshot_nothing"] = 'No snapshots available'; -$_lang["files.dynamic.php1"] = 'create text file'; +$_lang["files.dynamic.php1"] = 'New Text File'; $_lang["files.dynamic.php2"] = 'This directory cannot be displayed.'; $_lang["files.dynamic.php3"] = 'There is a problem in a file name.'; $_lang["files.dynamic.php4"] = 'The text file was created.'; +$_lang["files.dynamic.php5"] = 'File could not be duplicated.'; +$_lang["files.dynamic.php6"] = 'File or directory could not be renamed.'; $_lang["files_dynamic_new_folder_name"] = 'Introduzca nuevo nombre de directorio:'; $_lang["files_dynamic_new_file_name"] = 'Introduzca nuevo nombre de archivo:'; $_lang["not_readable_dir"] = 'Can not read this directory.'; $_lang["confirm_delete_dir"] = 'Are you sure you want to delete the directory?'; $_lang["confirm_delete_dir_recursive"] = 'Are you sure you want to delete the directory?\n\nAny children files will also be deleted.'; -$_lang["make_folders_title"] = 'Make end slash URL at the container'; -$_lang["make_folders_message"] = 'The slash to append to Resources set as containers when using FURLs.'; +$_lang["make_folders_title"] = 'End Container URL with Slash'; +$_lang["make_folders_message"] = 'Append trailing slash to Resources that are set as containers when using Friendly URLs.'; $_lang["check_files_onlogin_title"] = 'Check core files on login'; -$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised MODX system file and website.'; +$_lang["check_files_onlogin_message"] = 'By enabling this option, important system files will be checked for modification typical of scripted website attacks. While not a foolproof guarantee, it may alert you to a compromised EVO system file and website.'; $_lang["configcheck_sysfiles_mod"] = 'Important System Files have been modified.'; -$_lang["configcheck_sysfiles_mod_msg"] = 'You have enabled the setting to check important system files to detect possible website script attacks. This doesn\'t necessarily mean that your site has been compromised, however, you should review the changed files.(index.php, .htaccess, [+MGR_DIR+]/index.php, [+MGR_DIR+]/includes/config.inc.php)'; +$_lang["configcheck_sysfiles_mod_msg"] = 'You have configured EVO to check important system files for possible website script attacks. This warning does not necessarily mean your site has been compromised, however, you should review the watched files in your installation (set in System configuration -> User -> Check core files on login). If you find your files unaltered or changes were made by site administrators, go to System Configuration and click to re-save settings to dismiss this message. Changes in the following files have been found:'; $_lang['email_method_title'] = 'Sendmail method'; -$_lang['email_method_mail'] = 'mail() PHP function'; +$_lang['email_method_mail'] = 'PHP mail() function'; $_lang['email_method_smtp'] = 'SMTP Server'; -$_lang['smtp_auth_title'] = 'SMTP-AUTH'; +$_lang['smtp_auth_title'] = 'SMTP-AUTH'; $_lang['smtp_host_title'] = 'SMTP host'; $_lang['smtp_secure_title'] = 'Cifrado SMTP'; $_lang['smtp_username_title'] = 'SMTP user name'; $_lang['smtp_password_title'] = 'SMTP password'; $_lang['smtp_port_title'] = 'SMTP port'; -$_lang["setting_resource_tree_node_name"] = 'The node name of a resource tree'; -$_lang["setting_resource_tree_node_name_desc"] = 'Specify the Resource field to use when rendering the nodes in the Resource Tree. Defaults to pagetitle, although any Resource field can be used, such as menutitle, alias.'; +$_lang["setting_resource_tree_node_name"] = 'Display Name in Resource Tree'; +$_lang["setting_resource_tree_node_name_desc"] = 'Select the Resource field to show as the Resource name in the Resource Tree. The default setting is pagetitle.'; +$_lang["setting_resource_tree_node_name_desc_add"] = 'Note: Since EVO 1.1 you can change this Display Name within Resource-Tree´s sorting option. This setting is used when Display Name in Resource Tree is set to "Default".'; $_lang["resource_opt_alvisibled"] = 'Utilizar alias actual en ruta de alias'; $_lang["resource_opt_alvisibled_help"] = 'El alias de este Recurso se insertará en la ruta de alias de URL amigable'; @@ -1213,14 +1311,18 @@ $_lang["docid_incrmnt_method_1"] = 'Mínimo ID perdido'; $_lang["docid_incrmnt_method_2"] = 'Máximo ID + 1'; +$_lang["enable_cache_title"] = 'Document caching'; +$_lang["disabled_at_login"] = 'Disabled at login'; $_lang["cache_type_title"] = 'Document caching type'; -$_lang["cache_type_1"] = 'Cache is based only on document id (standard)'; -$_lang["cache_type_2"] = 'Cache is based on document id and $_GET parameters'; +$_lang["cache_type_1"] = 'Cache is based only on Resource ID (standard)'; +$_lang["cache_type_2"] = 'Cache is based on Resource ID and $_GET parameters'; $_lang["seostrict_title"] = 'Use SEO Strict URLs'; -$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content if needed'; +$_lang["seostrict_message"] = 'Enforces the use of strict URLs to prevent duplicate content (if needed)'; +$_lang["aliaslistingfolder_title"] = 'Use AliasListing only for Folders'; +$_lang["aliaslistingfolder_message"] = 'Reduces memory consumption when a large number of resources'; -$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file of a MODX installation directory at .htaccess to use the Friendly URL function.'; -$_lang["settings_friendlyurls_alert2"] = 'Since it has installed in a subdirectory, it is necessary to change the contents of .htaccess.'; +$_lang["settings_friendlyurls_alert"] = 'It is necessary to rename the ht.access file in the EVO installation directory at .htaccess to use the Friendly URL function.'; +$_lang["settings_friendlyurls_alert2"] = 'Since EVO was installed in a subdirectory, it is necessary to change the content of .htaccess.'; $_lang["user_street"] = 'Street'; $_lang["user_city"] = 'City'; @@ -1241,9 +1343,9 @@ $_lang["export_site.static.php6"] = 'Objetivo'; $_lang["export_site.static.php7"] = 'Los archivos no se pudieron guardar en [+ rb_base_url +]'; -$_lang["mutate_settings.dynamic.php6"] = 'Enviar correo a errores MODX'; +$_lang["mutate_settings.dynamic.php6"] = 'Enviar correo a errores EVO'; $_lang["mutate_settings.dynamic.php7"] = 'No notificar'; -$_lang["mutate_settings.dynamic.php8"] = 'Un correo electrónico con el origen del error se enviará a [(emailsender)] ([+ emailsender +]) si se produce un error en MODX. Los detalles del error se podran ver en el sistema de registro de eventos de MODX.'; +$_lang["mutate_settings.dynamic.php8"] = 'Un correo electrónico con el origen del error se enviará a [(emailsender)] ([+ emailsender +]) si se produce un error en EVO. Los detalles del error se podran ver en el sistema de registro de eventos de EVO.'; $_lang["error_no_privileges"] = "No tienes suficientes privilegios para esta acción."; $_lang["error_no_optimise_tablename"] = "Tabla a optimizar no se encuentra en la petición!"; @@ -1259,6 +1361,7 @@ $_lang["error_movedocument1"] = "Documento no puede ser es propio padre!"; $_lang["error_movedocument2"] = "ID del documento no pasada durante una solicitud!"; $_lang["error_movedocument3"] = "El nuevo padre no se envió en la solicitud!."; +$_lang["error_internet_connection"] = "Server isn't available. Check your internet connection!"; $_lang["login_processor_unknown_user"] = "Incorrecto nombre o password introducido!"; $_lang["login_processor_wrong_password"] = "Incorrecto nombre o password introducido!"; @@ -1279,3 +1382,134 @@ $_lang["check_all"] = "Selecciona Todo"; $_lang["check_none"] = "No seleccionar nada"; $_lang["check_toggle"] = "Invertir selección"; + +$_lang["version_notices"] = "Version Notices"; + +$_lang["em_button_shift"] = " (Shift-Mouseclick to open multiple windows)"; + +$_lang["reset_sysfiles_checksum_button"] = "Rebuild Checksums"; +$_lang["reset_sysfiles_checksum_alert"] = "Are you sure you want to reset the system files checksums?"; + +$_lang["file_browser_disabled_msg"] = "The File Browser Feature is not enabled."; +$_lang["which_browser_default_title"]= "Default File Browser"; +$_lang["which_browser_default_msg"]= "Choose the File Browser you prefer as default. In User-Settings you can choose a Custom Browser per User, or leave it on "default"."; +$_lang["which_browser_title"]= "File Browser"; +$_lang["which_browser_msg"]= "You can choose a custom File Browser for this user. To use the System´s default Browser, leave it on "Default"."; +$_lang["option_default"] = "Default"; +$_lang["position"] = "Position"; +$_lang["are_you_sure"] = "Are you sure?"; + +$_lang['evo_downloads_title'] = "Evolution Downloads"; +$_lang['help_translating_title'] = "Help translating Evolution"; +$_lang['download'] = "Download"; +$_lang['downloads'] = "Downloads"; +$_lang["previous_releases"] = "Previous Releases"; +$_lang["extras"] = "Extras"; + +$_lang["display_locks"] = "Display Locks"; +$_lang["role_display_locks"] = "Display Locks"; +$_lang["session_timeout"] = "Session Timeout"; +$_lang["session_timeout_msg"] = "EVO will ping the server as per setting "Mail Check Time Period". If the last ping exceeds this setting, the associated session will be considered invalid and all related locks will be removed automatically. Set value in minutes (>2min, default 15min)."; +$_lang["unlock_element_id_warning"] = "Are you sure you want to unlock this [+element_type+] (ID [+id+])?"; +$_lang["lock_element_type_1"] = "Template"; +$_lang["lock_element_type_2"] = "Template-Variable"; +$_lang["lock_element_type_3"] = "Chunk"; +$_lang["lock_element_type_4"] = "Snippet"; +$_lang["lock_element_type_5"] = "Plugin"; +$_lang["lock_element_type_6"] = "Module"; +$_lang["lock_element_type_7"] = "Resource"; +$_lang["lock_element_type_8"] = "Role"; +$_lang["lock_element_editing"] = "You are editing this [+element_type+] since\n[+lasthit_df+]"; +$_lang["lock_element_locked_by"] = "This [+element_type+] is locked by user\n[+username+] since [+lasthit_df+]"; + +$_lang["minifyphp_incache_title"] = 'Minify php code in site cache'; +$_lang["minifyphp_incache_message"] = 'Minify php code (snippets and plugins) and store in the site cache file, ref:#938'; + +$_lang["logout_reminder_msg"] = "Reminder: It seems on [+date+] you forgot to logout. Please pay attention in future to do so after your work is finished."; + +$_lang["allow_eval_title"] = "Eval php code in snippet call"; +$_lang["allow_eval_msg"] = "For developer : Please use \$modx->safeEval()."; +$_lang["allow_eval_with_scan"] = "Execute only permitted functions"; +$_lang["allow_eval_with_scan_at_post"] = "Execute all. However, at POST, only permitted functions"; +$_lang["allow_eval_everytime_eval"] = "Unlimited (Use only for debugging)"; +$_lang["allow_eval_dont_eval"] = "Do not allow all functions"; + +$_lang["safe_functions_at_eval_title"] = "Functions to allow eval"; +$_lang["safe_functions_at_eval_msg"] = "Comma separated list"; + +$_lang["multiple_sessions_msg"] = "Information: Multiple active user sessions (total [+total+]) found for user [+username+]."; +$_lang["iconv_not_available"] = "It is important to install/enable extension iconv. Please speak to your host if you don´t know how to enable it."; + +$_lang["cm_create_new_category"] = "Create the new category"; +$_lang["cm_category_name"] = "Category name"; +$_lang["cm_category_position"] = "Category position"; +$_lang["cm_no_x_assigned"] = "No %s assigned"; +$_lang["cm_save_categorization"] = "Save categorization"; +$_lang["cm_update_categories"] = "Update categories"; +$_lang["cm_assigned_elements"] = "Assigned elements"; +$_lang["cm_edit_name"] = "Edit name"; +$_lang["cm_mark_for_deletion"] = "Mark for deletion"; +$_lang["cm_delete_now"] = "Delete immediately"; +$_lang["cm_delete_element_x_now"] = "Delete "%s" immediately"; +$_lang["cm_select_element_group"] = "Select an element group"; +$_lang["cm_global_messages"] = "Global Messages"; +$_lang["cm_add_new_category"] = "Add a new category"; +$_lang["cm_edit_categories"] = "Edit categories"; +$_lang["cm_sort_categories"] = "Sort categories"; +$_lang["cm_categorize_elements"] = "Categorize elements"; +$_lang["cm_translation"] = "Translation"; +$_lang["cm_translations"] = "Translations"; +$_lang["cm_categorize_x"] = "Categorize %s"; +$_lang["cm_unknown_error"] = "Something went wrong."; +$_lang["cm_x_assigned_to_category_y"] = "%s(%s) has been assigned to category %s(%s)"; +$_lang["cm_no_categorization"] = "No categorization made."; +$_lang["cm_no_changes"] = "Nothing to change, so no changes made."; +$_lang["cm_x_changes_made"] = "%s changes made"; +$_lang["cm_enter_name_for_category"] = "Please enter a name for the new category."; +$_lang["cm_category_x_exists"] = "Category %s already exists."; +$_lang["cm_category_x_saved_at_position_y"] = "The new category %s was saved at position %s."; +$_lang["cm_category_x_moved_to_position_y"] = "Category %s was moved to position %s"; +$_lang["cm_category_x_deleted"] = "Category %s has been deleted"; +$_lang["cm_category_x_renamed_to_y"] = "Category %s was renamed to %s"; +$_lang["cm_translation_for_x_empty"] = "Translation for %s was empty"; +$_lang["cm_translation_for_x_to_y_success"] = "Translation for %s to %s successfully saved"; +$_lang["cm_save_new_sorting"] = "Save new sorting"; +$_lang["cm_translate_phrases"] = "Translate phrases"; +$_lang["cm_translate_module_phrases"] = "Translate module-phrases"; +$_lang["cm_native_phrase"] = "Native phrase"; + +$_lang["btn_view_options"] = 'View Options'; +$_lang["view_options_msg"] = 'The display & listing of elements can be customized via "View Options"-button. Settings are saved and restored per Browser using HTML5´s localStorage.'; +$_lang["viewopts_title"] = 'View Options'; +$_lang["viewopts_cb_buttons"] = 'Buttons'; +$_lang["viewopts_cb_descriptions"] = 'Descriptions'; +$_lang["viewopts_cb_icons"] = 'Icons'; +$_lang["viewopts_radio_list"] = 'List'; +$_lang["viewopts_radio_inline"] = 'Inline'; +$_lang["viewopts_radio_flex"] = 'Flex'; +$_lang["viewopts_fontsize"] = 'Font-Size'; +$_lang["viewopts_cb_alltabs"] = 'All Tabs'; +$_lang['email_sender_method'] = 'The envelope sender of the message'; +$_lang['auto'] = 'Auto-detect'; +$_lang['use_emailsender'] = 'Use [(emailsender)] value'; +$_lang['email_sender_method_message'] = 'The envelope sender of the message. This will usually be turned into a Return-Path header by the receiver, and is the address that bounces will be sent to. Auto-detect will work in most cases.'; + +$_lang['login_form_position_title'] = 'Login form postiton'; +$_lang['login_form_position_left'] = 'left'; +$_lang['login_form_position_center'] = 'center'; +$_lang['login_form_position_right'] = 'right'; +$_lang["login_form_style"] = 'Login form style:'; +$_lang["login_form_style_dark"] = 'dark'; +$_lang["login_form_style_light"] = 'light'; +$_lang['login_logo_title'] = 'Login page logo image'; +$_lang['login_logo_message'] = 'Recomended login logo image width: 360px, type .png'; +$_lang['login_bg_title'] = 'Login page background image'; +$_lang['login_bg_message'] = 'Recomended login page background image width: 1920px '; + +$_lang['manager_menu_position_title'] = 'Main menu position'; +$_lang['manager_menu_position_top'] = 'top'; +$_lang['manager_menu_position_left'] = 'left'; + +$_lang['invalid_event_response'] = 'The %s event has ivalid output'; + +$_lang['chunk_processor'] = 'Chunks processing class'; diff --git a/manager/includes/lang/svenska-utf8.inc.php b/manager/includes/lang/svenska-utf8.inc.php index 92bc3935..2d0bf8d9 100755 --- a/manager/includes/lang/svenska-utf8.inc.php +++ b/manager/includes/lang/svenska-utf8.inc.php @@ -659,8 +659,8 @@ $_lang["password_method"] = 'Metod för tillkännagivande av lösenord'; $_lang["password_method_email"] = 'Skicka det nya lösenordet med e-post.'; $_lang["password_method_screen"] = 'Visa det nya lösenordet på skärmen.'; -$_lang["password_msg"] = 'Det nya lösenordet för %s är %s.'; -$_lang["php_version_check"] = 'MODX är kompatibelt med PHP version 5.0.0 eller högre. Du behöver uppgradera din installation av PHP!'; +$_lang["password_msg"] = 'Det nya lösenordet för %s är %s
          '; +$_lang["php_version_check"] = 'MODX är kompatibelt med PHP version 5.6.0 eller högre. Du behöver uppgradera din installation av PHP!'; $_lang["plugin"] = 'Plugin'; $_lang["plugin_code"] = 'Plugin-kod (php)'; $_lang["plugin_config"] = 'Konfigurera plugin'; diff --git a/manager/includes/log.class.inc.php b/manager/includes/log.class.inc.php index 30329247..c6855d14 100755 --- a/manager/includes/log.class.inc.php +++ b/manager/includes/log.class.inc.php @@ -37,7 +37,7 @@ public function initAndWriteLog( $itemid = "", $itemname = "" ) { - global $modx; + $modx = evolutionCMS(); $this->entry['msg'] = $msg; // writes testmessage to the object $this->entry['action'] = empty($action) ? $modx->manager->action : $action; // writes the action to the object @@ -67,7 +67,7 @@ public function initAndWriteLog( */ public function writeToLog() { - global $modx; + $modx = evolutionCMS(); $tbl_manager_log = $modx->getFullTableName('manager_log'); if ($this->entry['internalKey'] == "") { @@ -91,6 +91,9 @@ public function writeToLog() $fields['itemid'] = $this->entry['itemId']; $fields['itemname'] = $modx->db->escape($this->entry['itemName']); $fields['message'] = $modx->db->escape($this->entry['msg']); + $fields['ip'] = $this->getUserIP(); + $fields['useragent'] = $_SERVER['HTTP_USER_AGENT']; + $insert_id = $modx->db->insert($fields, $tbl_manager_log); if (!$insert_id) { $modx->messageQuit("Logging error: couldn't save log to table! Error code: " . $modx->db->getLastError()); @@ -102,4 +105,18 @@ public function writeToLog() } } } + + private function getUserIP() { + if( array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) { + if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',')>0) { + $addr = explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']); + return trim($addr[0]); + } else { + return $_SERVER['HTTP_X_FORWARDED_FOR']; + } + } + else { + return $_SERVER['REMOTE_ADDR']; + } + } } diff --git a/manager/includes/manager.lockout.inc.php b/manager/includes/manager.lockout.inc.php index 400371a2..809dbaae 100755 --- a/manager/includes/manager.lockout.inc.php +++ b/manager/includes/manager.lockout.inc.php @@ -10,6 +10,8 @@ $modx->setPlaceholder('modx_charset',$modx_manager_charset); $modx->setPlaceholder('theme',$manager_theme); + $modx->setPlaceholder('favicon', + (file_exists(MODX_BASE_PATH . 'favicon.ico') ? MODX_SITE_URL . 'favicon.ico' : 'media/style/' . $modx->config['manager_theme'] . '/images/favicon.ico')); $modx->setPlaceholder('site_name',$site_name); $modx->setPlaceholder('logo_slogan',$_lang["logo_slogan"]); @@ -22,6 +24,38 @@ $modx->setPlaceholder('manager_theme_url',MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/'); $modx->setPlaceholder('year',date('Y')); + // set login logo image + if ( !empty($modx->config['login_logo']) ) { + $modx->setPlaceholder('login_logo', MODX_SITE_URL . $modx->config['login_logo']); + } else { + $modx->setPlaceholder('login_logo', MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/images/login/default/login-logo.png'); + } + + // set login background image + if ( !empty($modx->config['login_bg']) ) { + $modx->setPlaceholder('login_bg', MODX_SITE_URL . $modx->config['login_bg']); + } else { + $modx->setPlaceholder('login_bg', MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/images/login/default/login-background.jpg'); + } + + // set form position css class + $modx->setPlaceholder('login_form_position_class', 'loginbox-' . $modx->config['login_form_position']); + + switch ($modx->config['manager_theme_mode']) { + case '1': + $modx->setPlaceholder('manager_theme_style', 'lightness'); + break; + case '2': + $modx->setPlaceholder('manager_theme_style', 'light'); + break; + case '3': + $modx->setPlaceholder('manager_theme_style', 'dark'); + break; + case '4': + $modx->setPlaceholder('manager_theme_style', 'darkness'); + break; + } + // load template if(!isset($modx->config['manager_lockout_tpl']) || empty($modx->config['manager_lockout_tpl'])) { $modx->config['manager_lockout_tpl'] = MODX_MANAGER_PATH . 'media/style/common/manager.lockout.tpl'; diff --git a/manager/includes/menu.class.inc.php b/manager/includes/menu.class.inc.php index 67024896..d131fc79 100755 --- a/manager/includes/menu.class.inc.php +++ b/manager/includes/menu.class.inc.php @@ -63,7 +63,7 @@ public function Structurise($menu) */ public function DrawSub($parentid, $level) { - global $modx; + $modx = evolutionCMS(); $output = ''; diff --git a/manager/includes/preload.functions.inc.php b/manager/includes/preload.functions.inc.php index 959de15f..68e4bdb7 100755 --- a/manager/includes/preload.functions.inc.php +++ b/manager/includes/preload.functions.inc.php @@ -1,70 +1,93 @@ -newInstanceWithoutConstructor()->getInstance(); + } + return $modx; + } +} + +/** + * @return string + */ +function genEvoSessionName() +{ + $_ = crc32(__FILE__); + $_ = sprintf('%u', $_); + + return 'evo' . base_convert($_, 10, 36); +} + +/** + * @return void + */ +function startCMSSession() +{ + global $site_sessionname, $https_port, $session_cookie_path, $session_cookie_domain; + if(MODX_CLI) return; + + session_name($site_sessionname); + removeInvalidCmsSessionIds($site_sessionname); + $cookieExpiration = 0; + $secure = ((isset ($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') || $_SERVER['SERVER_PORT'] == $https_port); + $cookiePath = !empty($session_cookie_path) ? $session_cookie_path : MODX_BASE_URL; + $cookieDomain = !empty($session_cookie_domain) ? $session_cookie_domain : ''; + session_set_cookie_params($cookieExpiration, $cookiePath, $cookieDomain, $secure, true); + session_start(); + $key = "modx.mgr.session.cookie.lifetime"; + if (isset($_SESSION[$key]) && is_numeric($_SESSION[$key])) { + $cookieLifetime = (int)$_SESSION[$key]; + if ($cookieLifetime) { + $cookieExpiration = $_SERVER['REQUEST_TIME'] + $cookieLifetime; + } + setcookie(session_name(), session_id(), $cookieExpiration, $cookiePath, $cookieDomain, $secure, true); + } + if (!isset($_SESSION['modx.session.created.time'])) { + $_SESSION['modx.session.created.time'] = $_SERVER['REQUEST_TIME']; + } +} + +/** + * @param $storage + * @param $session_name + * @return void + */ +function removeInvalidCmsSessionFromStorage(&$storage, $session_name) +{ + if (isset($storage[$session_name]) && ($storage[$session_name] === '' || $storage[$session_name] === 'deleted')) { + unset($storage[$session_name]); + } +} + +/** + * @param $session_name + * @return void + */ +function removeInvalidCmsSessionIds($session_name) +{ + if(MODX_CLI) return; + // session ids is invalid iff it is empty string + // storage priorioty can see in PHP source ext/session/session.c + removeInvalidCmsSessionFromStorage($_COOKIE, $session_name); + removeInvalidCmsSessionFromStorage($_GET, $session_name); + removeInvalidCmsSessionFromStorage($_POST, $session_name); +} diff --git a/manager/includes/protect.inc.php b/manager/includes/protect.inc.php index f868ed98..2134c4cc 100755 --- a/manager/includes/protect.inc.php +++ b/manager/includes/protect.inc.php @@ -69,6 +69,13 @@ function getSanitizedValue($value = '') return $value; } +if (! function_exists('html_escape')) { + function html_escape($str, $charset = 'UTF-8') + { + return htmlentities($str, ENT_COMPAT | ENT_SUBSTITUTE, $charset, false); + } +} + modx_sanitize_gpc($_GET); if (!defined('IN_MANAGER_MODE') || IN_MANAGER_MODE !== true) { modx_sanitize_gpc($_POST); diff --git a/manager/includes/secure_mgr_documents.inc.php b/manager/includes/secure_mgr_documents.inc.php index d99f251c..9f51cfdd 100755 --- a/manager/includes/secure_mgr_documents.inc.php +++ b/manager/includes/secure_mgr_documents.inc.php @@ -14,7 +14,7 @@ */ function secureMgrDocument($docid = '') { - global $modx; + $modx = evolutionCMS(); $modx->db->update('privatemgr = 0', $modx->getFullTableName("site_content"), ($docid > 0 ? "id='$docid'" : "privatemgr = 1")); diff --git a/manager/includes/secure_web_documents.inc.php b/manager/includes/secure_web_documents.inc.php index 0ec5e330..76146c65 100755 --- a/manager/includes/secure_web_documents.inc.php +++ b/manager/includes/secure_web_documents.inc.php @@ -14,7 +14,7 @@ */ function secureWebDocument($docid = '') { - global $modx; + $modx = evolutionCMS(); $modx->db->update('privateweb = 0', $modx->getFullTableName("site_content"), ($docid > 0 ? "id='$docid'" : "privateweb = 1")); diff --git a/manager/includes/sysalert.display.inc.php b/manager/includes/sysalert.display.inc.php index 0b97e73b..c1c293af 100755 --- a/manager/includes/sysalert.display.inc.php +++ b/manager/includes/sysalert.display.inc.php @@ -1,46 +1,46 @@ "; - } - // reset message queque - unset($_SESSION['SystemAlertMsgQueque']); - $_SESSION['SystemAlertMsgQueque'] = array(); - $SystemAlertMsgQueque = &$_SESSION['SystemAlertMsgQueque']; +$sysMsgs = ''; +$limit = count($SystemAlertMsgQueque); +for ($i = 0; $i < $limit; $i++) { + $sysMsgs .= $SystemAlertMsgQueque[$i] . '
          '; +} +// reset message queque +unset($_SESSION['SystemAlertMsgQueque']); +$_SESSION['SystemAlertMsgQueque'] = array(); +$SystemAlertMsgQueque = &$_SESSION['SystemAlertMsgQueque']; - if($sysMsgs!="") { +if ($sysMsgs != '') { + // fetch the styles + ?> + + + - -'; -?> - - \ No newline at end of file diff --git a/manager/includes/template.parser.class.inc.php b/manager/includes/template.parser.class.inc.php index 293eb3f6..cc999700 100755 --- a/manager/includes/template.parser.class.inc.php +++ b/manager/includes/template.parser.class.inc.php @@ -1,264 +1,264 @@ -db->query('SELECT t1.*, IF(t1.alias=\'\',t1.name,t1.alias) AS alias, t2.category AS category_name - FROM ' . $modx->getFullTableName('system_templates') . ' AS t1 - INNER JOIN ' . $modx->getFullTableName('categories') . ' AS t2 ON t2.id=t1.category - WHERE t1.action IN(' . $action . ') ' . $tab . ' - ORDER BY t1.tab ASC, t1.rank ASC'); - - if($modx->db->getRecordCount($sql)) { - $tabs = array(); - while($row = $modx->db->getRow($sql)) { - if(!$row['value'] && !empty($data[$row['name']])) { - $row['value'] = $data[$row['name']]; - } - $tabs[$row['tab']]['category_name'] = $row['category_name']; - $tabs[$row['tab']][$row['name']] = TemplateParser::render($row); - } - - if(!empty($config['toArray'])) { - $output = $tabs; - } else { - $output .= '
          '; - $output .= ' - '; - - foreach($tabs as $idTab => $tab) { - $output .= '
          '; - $output .= ' -

          ' . (!empty($config['tabs'][$idTab]) ? $config['tabs'][$idTab] : $tab['category_name']) . '

          - '; - unset($tab['category_name']); - foreach($tab as $item) { - $output .= $item; - } - $output .= '
          '; - } - $output .= '
          '; - } - } - } - - return $output; - } - - /** - * @param array $data - * @return string - */ - private function render($data) { - global $modx, $_lang, $_country_lang; - - $data['lang.name'] = (isset($_lang[$data['alias']]) ? $_lang[$data['alias']] : $data['alias']); - $data['value'] = (isset($_POST[$data['name']][$data['value']]) ? $_POST[$data['name']][$data['value']] : (isset($data['value']) ? $modx->htmlspecialchars($data['value']) : '')); - $data['readonly'] = ($data['readonly'] ? ' readonly' : ''); - - $output = ''; - $output .= '
          '; - - switch($data['type']) { - - case 'text': - $output .= ' -
          - '; - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'textarea': - $output .= ' -
          - '; - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'date': - $data['value'] = (isset($_POST[$data['name']][$data['value']]) ? $modx->toDateFormat($_POST[$data['name']][$data['value']]) : (isset($data['value']) ? $modx->toDateFormat($data['value']) : '')); - $output .= ' -
          - '; - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'select': - $output .= ''; - $output .= '
          '; - $output .= ''; - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'checkbox': - $output .= ''; - $output .= '
          '; - $output .= ''; - if($data['elements']) { - $elements = explode('||', $data['elements']); - foreach($elements as $key => $value) { - $value = explode('==', $value); - $output .= '
          ' . (isset($_lang[$value[0]]) ? $_lang[$value[0]] : $value[0]); - } - } - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'radio': - $output .= ''; - $output .= '
          '; - $output .= ''; - if($data['elements']) { - $elements = explode('||', $data['elements']); - foreach($elements as $key => $value) { - $value = explode('==', $value); - $output .= '
          ' . (isset($_lang[$value[0]]) ? $_lang[$value[0]] : $value[0]); - } - } - $output .= $data['content']; - $output .= '
          '; - - break; - - case 'custom': - $output .= ''; - $output .= '
          '; - $output .= $data['content']; - $output .= '
          '; - - break; - } - - $output .= '
          '; - - $output = $modx->parseText($output, $data); - - return $output; - } - -} - -?> - -config['manager_theme'] . '/includes/template.parser.class.inc.php'; - -echo TemplateParser::output(array('action' => 88), $userdata); - -*/ -?> - - - +db->query('SELECT t1.*, IF(t1.alias=\'\',t1.name,t1.alias) AS alias, t2.category AS category_name + FROM ' . $modx->getFullTableName('system_templates') . ' AS t1 + INNER JOIN ' . $modx->getFullTableName('categories') . ' AS t2 ON t2.id=t1.category + WHERE t1.action IN(' . $action . ') ' . $tab . ' + ORDER BY t1.tab ASC, t1.rank ASC'); + + if($modx->db->getRecordCount($sql)) { + $tabs = array(); + while($row = $modx->db->getRow($sql)) { + if(!$row['value'] && !empty($data[$row['name']])) { + $row['value'] = $data[$row['name']]; + } + $tabs[$row['tab']]['category_name'] = $row['category_name']; + $tabs[$row['tab']][$row['name']] = TemplateParser::render($row); + } + + if(!empty($config['toArray'])) { + $output = $tabs; + } else { + $output .= '
          '; + $output .= ' + '; + + foreach($tabs as $idTab => $tab) { + $output .= '
          '; + $output .= ' +

          ' . (!empty($config['tabs'][$idTab]) ? $config['tabs'][$idTab] : $tab['category_name']) . '

          + '; + unset($tab['category_name']); + foreach($tab as $item) { + $output .= $item; + } + $output .= '
          '; + } + $output .= '
          '; + } + } + } + + return $output; + } + + /** + * @param array $data + * @return string + */ + private function render($data) { + $modx = evolutionCMS(); global $_lang, $_country_lang; + + $data['lang.name'] = (isset($_lang[$data['alias']]) ? $_lang[$data['alias']] : $data['alias']); + $data['value'] = (isset($_POST[$data['name']][$data['value']]) ? $_POST[$data['name']][$data['value']] : (isset($data['value']) ? $modx->htmlspecialchars($data['value']) : '')); + $data['readonly'] = ($data['readonly'] ? ' readonly' : ''); + + $output = ''; + $output .= '
          '; + + switch($data['type']) { + + case 'text': + $output .= ' +
          + '; + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'textarea': + $output .= ' +
          + '; + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'date': + $data['value'] = (isset($_POST[$data['name']][$data['value']]) ? $modx->toDateFormat($_POST[$data['name']][$data['value']]) : (isset($data['value']) ? $modx->toDateFormat($data['value']) : '')); + $output .= ' +
          + '; + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'select': + $output .= ''; + $output .= '
          '; + $output .= ''; + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'checkbox': + $output .= ''; + $output .= '
          '; + $output .= ''; + if($data['elements']) { + $elements = explode('||', $data['elements']); + foreach($elements as $key => $value) { + $value = explode('==', $value); + $output .= '
          ' . (isset($_lang[$value[0]]) ? $_lang[$value[0]] : $value[0]); + } + } + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'radio': + $output .= ''; + $output .= '
          '; + $output .= ''; + if($data['elements']) { + $elements = explode('||', $data['elements']); + foreach($elements as $key => $value) { + $value = explode('==', $value); + $output .= '
          ' . (isset($_lang[$value[0]]) ? $_lang[$value[0]] : $value[0]); + } + } + $output .= $data['content']; + $output .= '
          '; + + break; + + case 'custom': + $output .= ''; + $output .= '
          '; + $output .= $data['content']; + $output .= '
          '; + + break; + } + + $output .= '
          '; + + $output = $modx->parseText($output, $data); + + return $output; + } + +} + +?> + +config['manager_theme'] . '/includes/template.parser.class.inc.php'; + +echo TemplateParser::output(array('action' => 88), $userdata); + +*/ +?> + + + diff --git a/manager/includes/tmplvars.commands.inc.php b/manager/includes/tmplvars.commands.inc.php index 79d888db..8137692b 100755 --- a/manager/includes/tmplvars.commands.inc.php +++ b/manager/includes/tmplvars.commands.inc.php @@ -23,7 +23,7 @@ * @return string */ function ProcessTVCommand($value, $name = '', $docid = '', $src='docform', $tvsArray = array()) { - global $modx; + $modx = evolutionCMS(); $docid = (int)$docid > 0 ? (int)$docid : $modx->documentIdentifier; $nvalue = trim($value); if (substr($nvalue, 0, 1) != '@') @@ -167,7 +167,7 @@ function ParseCommand($binding_string) */ function parseTvValues($param, $tvsArray) { - global $modx; + $modx = evolutionCMS(); $tvsArray = is_array($modx->documentObject) ? array_merge($tvsArray, $modx->documentObject) : $tvsArray; if (strpos($param, '[*') !== false) { $matches = $modx->getTagsFromContent($param, '[*', '*]'); diff --git a/manager/includes/tmplvars.format.inc.php b/manager/includes/tmplvars.format.inc.php index 1098fc5c..edd050bd 100755 --- a/manager/includes/tmplvars.format.inc.php +++ b/manager/includes/tmplvars.format.inc.php @@ -17,7 +17,7 @@ */ function getTVDisplayFormat($name, $value, $format, $paramstring = "", $tvtype = "", $docid = "", $sep = '') { - global $modx; + $modx = evolutionCMS(); $o = ''; // process any TV commands in value @@ -356,7 +356,7 @@ function decodeParamValue($s) { * @return array|string */ function parseInput($src, $delim = "||", $type = "string", $columns = true) { // type can be: string, array - global $modx; + $modx = evolutionCMS(); if($modx->db->isResult($src)) { // must be a recordset $rows = array(); diff --git a/manager/includes/tmplvars.inc.php b/manager/includes/tmplvars.inc.php index 19f586f9..b9b5c486 100755 --- a/manager/includes/tmplvars.inc.php +++ b/manager/includes/tmplvars.inc.php @@ -13,7 +13,7 @@ * @return string */ function renderFormElement($field_type, $field_id, $default_text = '', $field_elements = '', $field_value = '', $field_style = '', $row = array(), $tvsArray = array()) { - global $modx; + $modx = evolutionCMS(); global $_style; global $_lang; global $content; @@ -64,7 +64,7 @@ function renderFormElement($field_type, $field_id, $default_text = '', $field_el case "dropdown": // handler for select boxes $field_html .= ''; $index_list = ParseIntputOptions(ProcessTVCommand($field_elements, $field_id, '', 'tvform', $tvsArray)); - while(list($item, $itemvalue) = each($index_list)) { + foreach($index_list as $item => $itemvalue) { list($item, $itemvalue) = (is_array($itemvalue)) ? $itemvalue : explode("==", $itemvalue); if(strlen($itemvalue) == 0) { $itemvalue = $item; @@ -89,7 +89,7 @@ function renderFormElement($field_type, $field_id, $default_text = '', $field_el $field_value = explode("||", $field_value); $field_html .= '' : '') + + '' + ; + + // get form-data & transport + var + form = xhr.getElementsByTagName('form')[0] + , transport = xhr.getElementsByTagName('iframe')[0] + ; + + form.appendChild(data); + + api.log(form.parentNode.innerHTML); + + // append to DOM + document.body.appendChild(xhr); + + // keep a reference to node-transport + _this.xhr.node = xhr; + + // send + _this.readyState = 2; // loaded + try { + form.submit(); + } catch (err) { + api.log('iframe.error: ' + err); + } + form = null; + } + else { + // Clean url + url = url.replace(/([a-z]+)=(\?)&?/i, ''); + + // html5 + if (this.xhr && this.xhr.aborted) { + api.log("Error: already aborted"); + return; + } + xhr = _this.xhr = api.getXHR(); + + if (data.params) { + url += (url.indexOf('?') < 0 ? "?" : "&") + data.params.join("&"); + } + + xhr.open('POST', url, true); + + if( api.withCredentials ){ + xhr.withCredentials = "true"; + } + + if( !options.headers || !options.headers['X-Requested-With'] ){ + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + + api.each(options.headers, function (val, key){ + xhr.setRequestHeader(key, val); + }); + + + if ( options._chunked ) { + // chunked upload + if( xhr.upload ){ + xhr.upload.addEventListener('progress', api.throttle(function (/**Event*/evt){ + if (!data.retry) { + // show progress only for correct chunk uploads + options.progress({ + type: evt.type + , total: data.size + , loaded: data.start + evt.loaded + , totalSize: data.size + }, _this, options); + } + }, 100), false); + } + + xhr.onreadystatechange = function (){ + var lkb = parseInt(xhr.getResponseHeader('X-Last-Known-Byte'), 10); + + _this.status = xhr.status; + _this.statusText = xhr.statusText; + _this.readyState = xhr.readyState; + + if( xhr.readyState == 4 ){ + for( var k in _xhrResponsePostfix ){ + _this['response'+k] = xhr['response'+k]; + } + xhr.onreadystatechange = null; + + if (!xhr.status || xhr.status - 201 > 0) { + api.log("Error: " + xhr.status); + // some kind of error + // 0 - connection fail or timeout, if xhr.aborted is true, then it's not recoverable user action + // up - server error + if (((!xhr.status && !xhr.aborted) || 500 == xhr.status || 416 == xhr.status) && ++data.retry <= options.chunkUploadRetry) { + // let's try again the same chunk + // only applicable for recoverable error codes 500 && 416 + var delay = xhr.status ? 0 : api.chunkNetworkDownRetryTimeout; + + // inform about recoverable problems + options.pause(data.file, options); + + // smart restart if server reports about the last known byte + api.log("X-Last-Known-Byte: " + lkb); + if (lkb) { + data.end = lkb; + } else { + data.end = data.start - 1; + if (416 == xhr.status) { + data.end = data.end - options.chunkSize; + } + } + + setTimeout(function () { + _this._send(options, data); + }, delay); + } else { + // no mo retries + _this.end(xhr.status); + } + } else { + // success + data.retry = 0; + + if (data.end == data.size - 1) { + // finished + _this.end(xhr.status); + } else { + // next chunk + + // shift position if server reports about the last known byte + api.log("X-Last-Known-Byte: " + lkb); + if (lkb) { + data.end = lkb; + } + data.file.FileAPIReadPosition = data.end; + + setTimeout(function () { + _this._send(options, data); + }, 0); + } + } + + xhr = null; + } + }; + + data.start = data.end + 1; + data.end = Math.max(Math.min(data.start + options.chunkSize, data.size) - 1, data.start); + + // Retrieve a slice of file + var + file = data.file + , slice = (file.slice || file.mozSlice || file.webkitSlice).call(file, data.start, data.end + 1) + ; + + if( data.size && !slice.size ){ + setTimeout(function (){ + _this.end(-1); + }); + } else { + xhr.setRequestHeader("Content-Range", "bytes " + data.start + "-" + data.end + "/" + data.size); + xhr.setRequestHeader("Content-Disposition", 'attachment; filename=' + encodeURIComponent(data.name)); + xhr.setRequestHeader("Content-Type", data.type || "application/octet-stream"); + + xhr.send(slice); + } + + file = slice = null; + } else { + // single piece upload + if( xhr.upload ){ + // https://github.com/blueimp/jQuery-File-Upload/wiki/Fixing-Safari-hanging-on-very-high-speed-connections-%281Gbps%29 + xhr.upload.addEventListener('progress', api.throttle(function (/**Event*/evt){ + options.progress(evt, _this, options); + }, 100), false); + } + + xhr.onreadystatechange = function (){ + _this.status = xhr.status; + _this.statusText = xhr.statusText; + _this.readyState = xhr.readyState; + + if( xhr.readyState == 4 ){ + for( var k in _xhrResponsePostfix ){ + _this['response'+k] = xhr['response'+k]; + } + xhr.onreadystatechange = null; + + if (!xhr.status || xhr.status > 201) { + api.log("Error: " + xhr.status); + if (((!xhr.status && !xhr.aborted) || 500 == xhr.status) && (options.retry || 0) < options.uploadRetry) { + options.retry = (options.retry || 0) + 1; + var delay = api.networkDownRetryTimeout; + + // inform about recoverable problems + options.pause(options.file, options); + + setTimeout(function () { + _this._send(options, data); + }, delay); + } else { + //success + _this.end(xhr.status); + } + } else { + //success + _this.end(xhr.status); + } + + xhr = null; + } + }; + + if( api.isArray(data) ){ + // multipart + xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=_'+api.expando); + var rawData = data.join('') +'--_'+ api.expando +'--'; + + /** @namespace xhr.sendAsBinary https://developer.mozilla.org/ru/XMLHttpRequest#Sending_binary_content */ + if( xhr.sendAsBinary ){ + xhr.sendAsBinary(rawData); + } + else { + var bytes = Array.prototype.map.call(rawData, function(c){ return c.charCodeAt(0) & 0xff; }); + xhr.send(new Uint8Array(bytes).buffer); + + } + } else { + // FormData + xhr.send(data); + } + } + } + } + }; + + + // @export + api.XHR = XHR; +})(window, FileAPI); + +/** + * @class FileAPI.Camera + * @author RubaXa + * @support Chrome 21+, FF 18+, Opera 12+ + */ + +/*global window, FileAPI, jQuery */ +/** @namespace LocalMediaStream -- https://developer.mozilla.org/en-US/docs/WebRTC/MediaStream_API#LocalMediaStream */ +(function (window, api){ + "use strict"; + + var + URL = window.URL || window.webkitURL, + + document = window.document, + navigator = window.navigator, + + getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia, + + html5 = !!getMedia + ; + + + // Support "media" + api.support.media = html5; + + + var Camera = function (video){ + this.video = video; + }; + + + Camera.prototype = { + isActive: function (){ + return !!this._active; + }, + + + /** + * Start camera streaming + * @param {Function} callback + */ + start: function (callback){ + var + _this = this + , video = _this.video + , _successId + , _failId + , _complete = function (err){ + _this._active = !err; + clearTimeout(_failId); + clearTimeout(_successId); +// api.event.off(video, 'loadedmetadata', _complete); + callback && callback(err, _this); + } + ; + + getMedia.call(navigator, { video: true }, function (stream/**LocalMediaStream*/){ + // Success + _this.stream = stream; + +// api.event.on(video, 'loadedmetadata', function (){ +// _complete(null); +// }); + + // Set camera stream + video.src = URL.createObjectURL(stream); + + // Note: onloadedmetadata doesn't fire in Chrome when using it with getUserMedia. + // See crbug.com/110938. + _successId = setInterval(function (){ + if( _detectVideoSignal(video) ){ + _complete(null); + } + }, 1000); + + _failId = setTimeout(function (){ + _complete('timeout'); + }, 5000); + + // Go-go-go! + video.play(); + }, _complete/*error*/); + }, + + + /** + * Stop camera streaming + */ + stop: function (){ + try { + this._active = false; + this.video.pause(); + + try { + this.stream.stop(); + } catch (err) { + api.each(this.stream.getTracks(), function (track) { + track.stop(); + }); + } + + this.stream = null; + } catch( err ){ + api.log('[FileAPI.Camera] stop:', err); + } + }, + + + /** + * Create screenshot + * @return {FileAPI.Camera.Shot} + */ + shot: function (){ + return new Shot(this.video); + } + }; + + + /** + * Get camera element from container + * + * @static + * @param {HTMLElement} el + * @return {Camera} + */ + Camera.get = function (el){ + return new Camera(el.firstChild); + }; + + + /** + * Publish camera element into container + * + * @static + * @param {HTMLElement} el + * @param {Object} options + * @param {Function} [callback] + */ + Camera.publish = function (el, options, callback){ + if( typeof options == 'function' ){ + callback = options; + options = {}; + } + + // Dimensions of "camera" + options = api.extend({}, { + width: '100%' + , height: '100%' + , start: true + }, options); + + + if( el.jquery ){ + // Extract first element, from jQuery collection + el = el[0]; + } + + + var doneFn = function (err){ + if( err ){ + callback(err); + } + else { + // Get camera + var cam = Camera.get(el); + if( options.start ){ + cam.start(callback); + } + else { + callback(null, cam); + } + } + }; + + + el.style.width = _px(options.width); + el.style.height = _px(options.height); + + + if( api.html5 && html5 ){ + // Create video element + var video = document.createElement('video'); + + // Set dimensions + video.style.width = _px(options.width); + video.style.height = _px(options.height); + + // Clean container + if( window.jQuery ){ + jQuery(el).empty(); + } else { + el.innerHTML = ''; + } + + // Add "camera" to container + el.appendChild(video); + + // end + doneFn(); + } + else { + Camera.fallback(el, options, doneFn); + } + }; + + + Camera.fallback = function (el, options, callback){ + callback('not_support_camera'); + }; + + + /** + * @class FileAPI.Camera.Shot + */ + var Shot = function (video){ + var canvas = video.nodeName ? api.Image.toCanvas(video) : video; + var shot = api.Image(canvas); + shot.type = 'image/png'; + shot.width = canvas.width; + shot.height = canvas.height; + shot.size = canvas.width * canvas.height * 4; + return shot; + }; + + + /** + * Add "px" postfix, if value is a number + * + * @private + * @param {*} val + * @return {String} + */ + function _px(val){ + return val >= 0 ? val + 'px' : val; + } + + + /** + * @private + * @param {HTMLVideoElement} video + * @return {Boolean} + */ + function _detectVideoSignal(video){ + var canvas = document.createElement('canvas'), ctx, res = false; + try { + ctx = canvas.getContext('2d'); + ctx.drawImage(video, 0, 0, 1, 1); + res = ctx.getImageData(0, 0, 1, 1).data[4] != 255; + } + catch( err ){ + api.log('[FileAPI.Camera] detectVideoSignal:', err); + } + return res; + } + + + // @export + Camera.Shot = Shot; + api.Camera = Camera; +})(window, FileAPI); + +/** + * FileAPI fallback to Flash + * + * @flash-developer "Vladimir Demidov" + */ + +/*global window, FileAPI */ +(function (window, jQuery, api) { + "use strict"; + + var _each = api.each, + _cameraQueue = []; + + if (api.support.flash && (api.media && (!api.support.media || !api.html5))) { + (function () { + function _wrap(fn) { + var id = fn.wid = api.uid(); + api.Flash._fn[id] = fn; + return 'FileAPI.Flash._fn.' + id; + } + + + function _unwrap(fn) { + try { + api.Flash._fn[fn.wid] = null; + delete api.Flash._fn[fn.wid]; + } catch (e) { + } + } + + var flash = api.Flash; + api.extend(api.Flash, { + + patchCamera: function () { + api.Camera.fallback = function (el, options, callback) { + var camId = api.uid(); + api.log('FlashAPI.Camera.publish: ' + camId); + flash.publish(el, camId, api.extend(options, { + camera: true, + onEvent: _wrap(function _(evt) { + if (evt.type === 'camera') { + _unwrap(_); + + if (evt.error) { + api.log('FlashAPI.Camera.publish.error: ' + evt.error); + callback(evt.error); + } else { + api.log('FlashAPI.Camera.publish.success: ' + camId); + callback(null); + } + } + }) + })); + }; + // Run + _each(_cameraQueue, function (args) { + api.Camera.fallback.apply(api.Camera, args); + }); + _cameraQueue = []; + + + // FileAPI.Camera:proto + api.extend(api.Camera.prototype, { + _id: function () { + return this.video.id; + }, + + start: function (callback) { + var _this = this; + flash.cmd(this._id(), 'camera.on', { + callback: _wrap(function _(evt) { + _unwrap(_); + + if (evt.error) { + api.log('FlashAPI.camera.on.error: ' + evt.error); + callback(evt.error, _this); + } else { + api.log('FlashAPI.camera.on.success: ' + _this._id()); + _this._active = true; + callback(null, _this); + } + }) + }); + }, + + stop: function () { + this._active = false; + flash.cmd(this._id(), 'camera.off'); + }, + + shot: function () { + api.log('FlashAPI.Camera.shot:', this._id()); + + var shot = api.Flash.cmd(this._id(), 'shot', {}); + shot.type = 'image/png'; + shot.flashId = this._id(); + shot.isShot = true; + + return new api.Camera.Shot(shot); + } + }); + } + }); + + api.Camera.fallback = function () { + _cameraQueue.push(arguments); + }; + + }()); + } +}(window, window.jQuery, FileAPI)); +if( typeof define === "function" && define.amd ){ define("FileAPI", [], function (){ return FileAPI; }); } \ No newline at end of file diff --git a/manager/media/browser/mcpuk/js/FileAPI/FileAPI.html5.min.js b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.html5.min.js new file mode 100755 index 00000000..d3a8e211 --- /dev/null +++ b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.html5.min.js @@ -0,0 +1,3 @@ +/*! FileAPI 2.0.19 - BSD | git://github.com/mailru/FileAPI.git */ +!function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h0,H=a.dataURLtoBlob,I=/img/i,J=/canvas/i,K=/img|canvas/i,L=/input/i,M=/^data:[^,]+,/,N={}.toString,O=a.Math,P=function(b){return b=new a.Number(O.pow(1024,b)),b.from=function(a){return O.round(a*this)},b},Q={},R=[],S="abort progress error load loadend",T="status statusText readyState response responseXML responseText responseBody".split(" "),U="currentTarget",V="preventDefault",W=function(a){return a&&"length"in a},X=function(a,b,c){if(a)if(W(a))for(var d=0,e=a.length;e>d;d++)d in a&&b.call(c,a[d],d,a);else for(var f in a)a.hasOwnProperty(f)&&b.call(c,a[f],f,a)},Y=function(a){for(var b=arguments,c=1,d=function(b,c){a[c]=b};c=c&&!d&&f.end()},isFail:function(){return d},fail:function(){!d&&a(d=!0)},end:function(){e||(e=!0,a())}};return f},each:X,afor:function(a,b){var c=0,d=a.length;W(a)&&d--?!function e(){b(d!=c&&e,a[c],c++)}():b(!1)},extend:Y,isFile:function(a){return"[object File]"===N.call(a)},isBlob:function(a){return this.isFile(a)||"[object Blob]"===N.call(a)},isCanvas:function(a){return a&&J.test(a.nodeName)},getFilesFilter:function(a){return a="string"==typeof a?a:a.getAttribute&&a.getAttribute("accept")||"",a?new RegExp("("+a.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(a,b){ca.isCanvas(a)?c(a,b,"load",ca.toDataURL(a)):e(a,b,"DataURL")},readAsBinaryString:function(a,b){d("BinaryString")?e(a,b,"BinaryString"):e(a,function(a){if("load"==a.type)try{a.result=ca.toBinaryString(a.result)}catch(c){a.type="error",a.message=c.toString()}b(a)},"DataURL")},readAsArrayBuffer:function(a,b){e(a,b,"ArrayBuffer")},readAsText:function(a,b,c){c||(c=b,b="utf-8"),e(a,c,"Text",b)},toDataURL:function(a,b){return"string"==typeof a?a:a.toDataURL?a.toDataURL(b||"image/png"):void 0},toBinaryString:function(b){return a.atob(ca.toDataURL(b).replace(M,""))},readAsImage:function(a,d,e){if(ca.isBlob(a))if(w){var f=w.createObjectURL(a);f===b?c(a,d,"error"):ca.readAsImage(f,d,e)}else ca.readAsDataURL(a,function(b){"load"==b.type?ca.readAsImage(b.result,d,e):(e||"error"==b.type)&&c(a,d,b,null,{loaded:b.loaded,total:b.total})});else if(ca.isCanvas(a))c(a,d,"load",a);else if(I.test(a.nodeName))if(a.complete)c(a,d,"load",a);else{var g="error abort load";_(a,g,function i(b){"load"==b.type&&w&&w.revokeObjectURL(a.src),$(a,g,i),c(a,d,b,a)})}else if(a.iframe)c(a,d,{type:"error"});else{var h=ca.newImage(a.dataURL||a);ca.readAsImage(h,d,e)}},checkFileObj:function(a){var b={},c=ca.accept;return"object"==typeof a?b=a:b.name=(a+"").split(/\\|\//g).pop(),null==b.type&&(b.type=b.name.split(".").pop()),X(c,function(a,c){a=new RegExp(a.replace(/\s/g,"|"),"i"),(a.test(b.type)||ca.ext2mime[b.type])&&(b.type=ca.ext2mime[b.type]||c.split("/")[0]+"/"+b.type)}),b},getDropFiles:function(a,b){var c,d=[],e=[],j=l(a),k=j.files,m=j.items,n=W(m)&&m[0]&&h(m[0]),o=ca.queue(function(){b(d,e)});if(n)if(G&&k){var p,q,r=k.length;for(c=new Array(r);r--;){p=k[r];try{q=h(m[r])}catch(s){ca.log("[err] getDropFiles: ",s),q=null}g(q)&&(q.isDirectory||q.isFile&&p.name==p.name.normalize("NFC"))?c[r]=q:c[r]=p}}else c=m;else c=k;X(c||[],function(a){o.inc();try{n&&g(a)?i(a,function(a,b,c){a?ca.log("[err] getDropFiles:",a):d.push.apply(d,b),e.push.apply(e,c),o.next()}):f(a,function(b,c){b?d.push(a):a.error=c,e.push(a),o.next()})}catch(b){o.next(),ca.log("[err] getDropFiles: ",b)}}),o.check()},getFiles:function(a,b,c){var d=[];return c?(ca.filterFiles(ca.getFiles(a),b,c),null):(a.jquery&&(a.each(function(){d=d.concat(ca.getFiles(this))}),a=d,d=[]),"string"==typeof b&&(b=ca.getFilesFilter(b)),a.originalEvent?a=aa(a.originalEvent):a.srcElement&&(a=aa(a)),a.dataTransfer?a=a.dataTransfer:a.target&&(a=a.target),a.files?(d=a.files,D||(d[0].blob=a,d[0].iframe=!0)):!D&&k(a)?ca.trim(a.value)&&(d=[ca.checkFileObj(a.value)],d[0].blob=a,d[0].iframe=!0):W(a)&&(d=a),ca.filter(d,function(a){return!b||b.test(a.name)}))},getTotalSize:function(a){for(var b=0,c=a&&a.length;c--;)b+=a[c].size;return b},getInfo:function(a,b){var c={},d=R.concat();ca.isBlob(a)?!function e(){var f=d.shift();f?f.test(a.type)?f(a,function(a,d){a?b(a):(Y(c,d),e())}):e():b(!1,c)}():b("not_support_info",c)},addInfoReader:function(a,b){b.test=function(b){return a.test(b)},R.push(b)},filter:function(a,b){for(var c,d=[],e=0,f=a.length;f>e;e++)e in a&&(c=a[e],b.call(c,c,e,a)&&d.push(c));return d},filterFiles:function(a,b,c){if(a.length){var d,e=a.concat(),f=[],g=[];!function h(){e.length?(d=e.shift(),ca.getInfo(d,function(a,c){(b(d,a?!1:c)?f:g).push(d),h()})):c(f,g)}()}else c([],a)},upload:function(a){a=Y({jsonp:"callback",prepare:ca.F,beforeupload:ca.F,upload:ca.F,fileupload:ca.F,fileprogress:ca.F,filecomplete:ca.F,progress:ca.F,complete:ca.F,pause:ca.F,imageOriginal:!0,chunkSize:ca.chunkSize,chunkUploadRetry:ca.chunkUploadRetry,uploadRetry:ca.uploadRetry},a),a.imageAutoOrientation&&!a.imageTransform&&(a.imageTransform={rotate:"auto"});var b,c=new ca.XHR(a),d=this._getFilesDataArray(a.files),e=this,f=0,g=0,h=!1;return X(d,function(a){f+=a.size}),c.files=[],X(d,function(a){c.files.push(a.file)}),c.total=f,c.loaded=0,c.filesLeft=d.length,a.beforeupload(c,a),b=function(){var i=d.shift(),k=i&&i.file,l=!1,m=j(a);if(c.filesLeft=d.length,k&&k.name===ca.expando&&(k=null,ca.log("[warn] FileAPI.upload() — called without files")),("abort"!=c.statusText||c.current)&&i){if(h=!1,c.currentFile=k,k&&a.prepare(k,m)===!1)return void b.call(e);m.file=k,e._getFormData(m,i,function(h){g||a.upload(c,a);var j=new ca.XHR(Y({},m,{upload:k?function(){a.fileupload(k,j,m)}:q,progress:k?function(b){l||(l=b.loaded===b.total,a.fileprogress({type:"progress",total:i.total=b.total,loaded:i.loaded=b.loaded},k,j,m),a.progress({type:"progress",total:f,loaded:c.loaded=g+i.size*(b.loaded/b.total)||0},k,j,m))}:q,complete:function(d){X(T,function(a){c[a]=j[a]}),k&&(i.total=i.total||i.size,i.loaded=i.total,d||(this.progress(i),l=!0,g+=i.size,c.loaded=g),a.filecomplete(d,j,k,m)),setTimeout(function(){b.call(e)},0)}}));c.abort=function(a){a||(d.length=0),this.current=a,j.abort()},j.send(h)})}else{var n=200==c.status||201==c.status||204==c.status;a.complete(n?!1:c.statusText||"error",c,a),h=!0}},setTimeout(b,0),c.append=function(a,g){a=ca._getFilesDataArray([].concat(a)),X(a,function(a){f+=a.size,c.files.push(a.file),g?d.unshift(a):d.push(a)}),c.statusText="",h&&b.call(e)},c.remove=function(a){for(var b,c=d.length;c--;)d[c].file==a&&(b=d.splice(c,1),f-=b.size);return b},c},_getFilesDataArray:function(a){var b=[],c={};if(k(a)){var d=ca.getFiles(a);c[a.name||"file"]=null!==a.getAttribute("multiple")?d:d[0]}else W(a)&&k(a[0])?X(a,function(a){c[a.name||"file"]=ca.getFiles(a)}):c=a;return X(c,function e(a,c){W(a)?X(a,function(a){e(a,c)}):a&&(a.name||a.image)&&b.push({name:c,file:a,size:a.size,total:a.size,loaded:0})}),b.length||b.push({file:{name:ca.expando}}),b},_getFormData:function(a,b,c){var d=b.file,e=b.name,f=d.name,g=d.type,h=ca.support.transform&&a.imageTransform,i=new ca.Form,j=ca.queue(function(){c(i)}),k=h&&m(h),l=ca.postNameConcat;X(a.data,function n(a,b){"object"==typeof a?X(a,function(a,c){n(a,l(b,c))}):i.append(b,a)}),function o(b){b.image?(j.inc(),b.toData(function(a,c){b.file&&(c.type=b.file.type,c.quality=b.matrix.quality,f=b.file&&b.file.name),f=f||(new Date).getTime()+".png",o(c),j.next()})):ca.Image&&h&&(/^image/.test(b.type)||K.test(b.nodeName))?(j.inc(),k&&(h=[h]),ca.Image.transform(b,h,a.imageAutoOrientation,function(c,d){if(k&&!c)H||ca.flashEngine||(i.multipart=!0),i.append(e,d[0],f,h[0].type||g);else{var m=0;c||X(d,function(a,b){H||ca.flashEngine||(i.multipart=!0),h[b].postName||(m=1),i.append(h[b].postName||l(e,b),a,f,h[b].type||g)}),(c||a.imageOriginal)&&i.append(l(e,m?"original":null),b,f,g)}j.next()})):f!==ca.expando&&i.append(e,b,f)}(d),j.check()},reset:function(a,b){var c,d;return C?(d=C(a).clone(!0).insertBefore(a).val("")[0],b||C(a).remove()):(c=a.parentNode,d=c.insertBefore(a.cloneNode(!0),a),d.value="",b||c.removeChild(a),X(Q[ca.uid(a)],function(b,c){X(b,function(b){$(a,c,b),Z(d,c,b)})})),d},load:function(a,b){var c=ca.getXHR();return c?(c.open("GET",a,!0),c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),Z(c,"progress",function(a){a.lengthComputable&&b({type:a.type,loaded:a.loaded,total:a.total},c)}),c.onreadystatechange=function(){if(4==c.readyState)if(c.onreadystatechange=null,200==c.status){a=a.split("/");var d={name:a[a.length-1],size:c.getResponseHeader("Content-Length"),type:c.getResponseHeader("Content-Type")};d.dataURL="data:"+d.type+";base64,"+ca.encode64(c.responseBody||c.responseText),b({type:"load",result:d},c)}else b({type:"error"},c)},c.send(null)):b({type:"error"}),c},encode64:function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",d=0;for("string"!=typeof a&&(a=String(a));d>2,k=(3&g)<<4|h>>4;isNaN(h)?e=f=64:(e=(15&h)<<2|i>>6,f=isNaN(i)?64:63&i),c+=b.charAt(j)+b.charAt(k)+b.charAt(e)+b.charAt(f)}return c}};ca.addInfoReader(/^image/,function(a,b){if(!a.__dimensions){var c=a.__dimensions=ca.defer();ca.readAsImage(a,function(a){var b=a.target;c.resolve("load"==a.type?!1:"error",{width:b.width,height:b.height}),b.src=ca.EMPTY_PNG,b=null})}a.__dimensions.then(b)}),ca.event.dnd=function(a,b,c){var d,e;c||(c=b,b=ca.F),z?(Z(a,"dragenter dragleave dragover",b.ff=b.ff||function(a){for(var c=l(a).types,f=c&&c.length,g=!1;f--;)if(~c[f].indexOf("File")){a[V](),e!==a.type&&(e=a.type,"dragleave"!=e&&b.call(a[U],!0,a),g=!0);break}g&&(clearTimeout(d),d=setTimeout(function(){b.call(a[U],"dragleave"!=e,a)},50))}),Z(a,"drop",c.ff=c.ff||function(a){a[V](),e=0,b.call(a[U],!1,a),ca.getDropFiles(a,function(b,d){c.call(a[U],b,d,a)})})):ca.log("Drag'n'Drop -- not supported")},ca.event.dnd.off=function(a,b,c){$(a,"dragenter dragleave dragover",b.ff),$(a,"drop",c.ff)},C&&!C.fn.dnd&&(C.fn.dnd=function(a,b){return this.each(function(){ca.event.dnd(this,a,b)})},C.fn.offdnd=function(a,b){return this.each(function(){ca.event.dnd.off(this,a,b)})}),a.FileAPI=Y(ca,a.FileAPI),ca.log("FileAPI: "+ca.version),ca.log("protocol: "+a.location.protocol),ca.log("doctype: ["+s.name+"] "+s.publicId+" "+s.systemId),X(r.getElementsByTagName("meta"),function(a){/x-ua-compatible/i.test(a.getAttribute("http-equiv"))&&ca.log("meta.http-equiv: "+a.getAttribute("content"))});try{n=!!console.log,o=!!console.log.apply}catch(da){}ca.flashUrl||(ca.flashUrl=ca.staticPath+"FileAPI.flash.swf"),ca.flashImageUrl||(ca.flashImageUrl=ca.staticPath+"FileAPI.flash.image.swf"),ca.flashWebcamUrl||(ca.flashWebcamUrl=ca.staticPath+"FileAPI.flash.camera.swf")}(window,void 0),function(a,b,c){"use strict";function d(b){if(b instanceof d){var c=new d(b.file);return a.extend(c.matrix,b.matrix),c}return this instanceof d?(this.file=b,this.size=b.size||100,void(this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0,quality:1,filter:0})):new d(b)}var e=Math.min,f=Math.round,g=function(){return b.createElement("canvas")},h=!1,i={8:270,3:180,6:90,7:270,4:180,5:90};try{h=g().toDataURL("image/png").indexOf("data:image/png")>-1}catch(j){}d.prototype={image:!0,constructor:d,set:function(b){return a.extend(this.matrix,b),this},crop:function(a,b,d,e){return d===c&&(d=a,e=b,a=b=0),this.set({sx:a,sy:b,sw:d,sh:e||d})},resize:function(a,b,c){return/min|max|height|width/.test(b)&&(c=b,b=a),this.set({dw:a,dh:b||a,resize:c})},preview:function(a,b){return this.resize(a,b||a,"preview")},rotate:function(a){return this.set({deg:a})},filter:function(a){return this.set({filter:a})},overlay:function(a){return this.set({overlay:a})},clone:function(){return new d(this)},_load:function(b,c){var d=this;/img|video/i.test(b.nodeName)?c.call(d,null,b):a.readAsImage(b,function(a){c.call(d,"load"!=a.type,a.result)})},_apply:function(b,c){var f,h=g(),i=this.getMatrix(b),j=h.getContext("2d"),k=b.videoWidth||b.width,l=b.videoHeight||b.height,m=i.deg,n=i.dw,o=i.dh,p=k,q=l,r=i.filter,s=b,t=i.overlay,u=a.queue(function(){b.src=a.EMPTY_PNG,c(!1,h)}),v=a.renderImageToCanvas;for(m-=360*Math.floor(m/360),b._type=this.file.type;i.multipass&&e(p/n,q/o)>2;)p=p/2+.5|0,q=q/2+.5|0,f=g(),f.width=p,f.height=q,s!==b?(v(f,s,0,0,s.width,s.height,0,0,p,q),s=f):(s=f,v(s,b,i.sx,i.sy,i.sw,i.sh,0,0,p,q),i.sx=i.sy=i.sw=i.sh=0);h.width=m%180?o:n,h.height=m%180?n:o,h.type=i.type,h.quality=i.quality,j.rotate(m*Math.PI/180),v(j.canvas,s,i.sx,i.sy,i.sw||s.width,i.sh||s.height,180==m||270==m?-n:0,90==m||180==m?-o:0,n,o),n=h.width,o=h.height,t&&a.each([].concat(t),function(b){u.inc();var c=new window.Image,d=function(){var e=0|b.x,f=0|b.y,g=b.w||c.width,h=b.h||c.height,i=b.rel;e=1==i||4==i||7==i?(n-g+e)/2:2==i||5==i||8==i?n-(g+e):e,f=3==i||4==i||5==i?(o-h+f)/2:i>=6?o-(h+f):f,a.event.off(c,"error load abort",d);try{j.globalAlpha=b.opacity||1,j.drawImage(c,e,f,g,h)}catch(k){}u.next()};a.event.on(c,"error load abort",d),c.src=b.src,c.complete&&d()}),r&&(u.inc(),d.applyFilter(h,r,u.next)),u.check()},getMatrix:function(b){var c=a.extend({},this.matrix),d=c.sw=c.sw||b.videoWidth||b.naturalWidth||b.width,g=c.sh=c.sh||b.videoHeight||b.naturalHeight||b.height,h=c.dw=c.dw||d,i=c.dh=c.dh||g,j=d/g,k=h/i,l=c.resize;if("preview"==l){if(h!=d||i!=g){var m,n;k>=j?(m=d,n=m/k):(n=g,m=n*k),(m!=d||n!=g)&&(c.sx=~~((d-m)/2),c.sy=~~((g-n)/2),d=m,g=n)}}else"height"==l?h=i*j:"width"==l?i=h/j:l&&(d>h||g>i?"min"==l?(h=f(k>j?e(d,h):i*j),i=f(k>j?h/j:e(g,i))):(h=f(j>=k?e(d,h):i*j),i=f(j>=k?h/j:e(g,i))):(h=d,i=g));return c.sw=d,c.sh=g,c.dw=h,c.dh=i,c.multipass=a.multiPassResize,c},_trans:function(b){this._load(this.file,function(c,d){if(c)b(c);else try{this._apply(d,b)}catch(c){a.log("[err] FileAPI.Image.fn._apply:",c),b(c)}})},get:function(b){if(a.support.transform){var c=this,d=c.matrix;"auto"==d.deg?a.getInfo(c.file,function(a,e){d.deg=i[e&&e.exif&&e.exif.Orientation]||0,c._trans(b)}):c._trans(b)}else b("not_support_transform");return this},toData:function(a){return this.get(a)}},d.exifOrientation=i,d.transform=function(b,e,f,g){function h(h,i){var j={},k=a.queue(function(a){g(a,j)});h?k.fail():a.each(e,function(a,e){if(!k.isFail()){var g=new d(i.nodeType?i:b),h="function"==typeof a;if(h?a(i,g):a.width?g[a.preview?"preview":"resize"](a.width,a.height,a.strategy):a.maxWidth&&(i.width>a.maxWidth||i.height>a.maxHeight)&&g.resize(a.maxWidth,a.maxHeight,"max"),a.crop){var l=a.crop;g.crop(0|l.x,0|l.y,l.w||l.width,l.h||l.height)}a.rotate===c&&f&&(a.rotate="auto"),g.set({type:g.matrix.type||a.type||b.type||"image/png"}),h||g.set({deg:a.rotate,overlay:a.overlay,filter:a.filter,quality:a.quality||1}),k.inc(),g.toData(function(a,b){a?k.fail():(j[e]=b,k.next())})}})}b.width?h(!1,b):a.getInfo(b,h)},a.each(["TOP","CENTER","BOTTOM"],function(b,c){a.each(["LEFT","CENTER","RIGHT"],function(a,e){d[b+"_"+a]=3*c+e,d[a+"_"+b]=3*c+e})}),d.toCanvas=function(a){var c=b.createElement("canvas");return c.width=a.videoWidth||a.width,c.height=a.videoHeight||a.height,c.getContext("2d").drawImage(a,0,0),c},d.fromDataURL=function(b,c,d){var e=a.newImage(b);a.extend(e,c),d(e)},d.applyFilter=function(b,c,e){"function"==typeof c?c(b,e):window.Caman&&window.Caman("IMG"==b.tagName?d.toCanvas(b):b,function(){"string"==typeof c?this[c]():a.each(c,function(a,b){this[b](a)},this),this.render(e)})},a.renderImageToCanvas=function(b,c,d,e,f,g,h,i,j,k){try{return b.getContext("2d").drawImage(c,d,e,f,g,h,i,j,k)}catch(l){throw a.log("renderImageToCanvas failed"),l}},a.support.canvas=a.support.transform=h,a.Image=d}(FileAPI,document),function(a){"use strict";a(FileAPI)}(function(a){"use strict";if(window.navigator&&window.navigator.platform&&/iP(hone|od|ad)/.test(window.navigator.platform)){var b=a.renderImageToCanvas;a.detectSubsampling=function(a){var b,c;return a.width*a.height>1048576?(b=document.createElement("canvas"),b.width=b.height=1,c=b.getContext("2d"),c.drawImage(a,-a.width+1,0),0===c.getImageData(0,0,1,1).data[3]):!1},a.detectVerticalSquash=function(a,b){var c,d,e,f,g,h=a.naturalHeight||a.height,i=document.createElement("canvas"),j=i.getContext("2d");for(b&&(h/=2),i.width=1,i.height=h,j.drawImage(a,0,0),c=j.getImageData(0,0,1,h).data,d=0,e=h,f=h;f>d;)g=c[4*(f-1)+3],0===g?e=f:d=f,f=e+d>>1;return f/h||1},a.renderImageToCanvas=function(c,d,e,f,g,h,i,j,k,l){if("image/jpeg"===d._type){var m,n,o,p,q=c.getContext("2d"),r=document.createElement("canvas"),s=1024,t=r.getContext("2d");if(r.width=s,r.height=s,q.save(),m=a.detectSubsampling(d),m&&(e/=2,f/=2,g/=2,h/=2),n=a.detectVerticalSquash(d,m),m||1!==n){for(f*=n,k=Math.ceil(s*k/g),l=Math.ceil(s*l/h/n),j=0,p=0;h>p;){for(i=0,o=0;g>o;)t.clearRect(0,0,s,s),t.drawImage(d,e,f,g,h,-o,-p,g,h),q.drawImage(r,0,0,s,s,i,j,k,l),o+=s,i+=k;p+=s,j+=l}return q.restore(),c}}return b(c,d,e,f,g,h,i,j,k,l)}}}),function(a,b){"use strict";function c(b,c,d){var e=b.blob,f=b.file;if(f){if(!e.toDataURL)return void a.readAsBinaryString(e,function(a){"load"==a.type&&c(b,a.result)});var g={"image/jpeg":".jpe?g","image/png":".png"},h=g[b.type]?b.type:"image/png",i=g[h]||".png",j=e.quality||1;f.match(new RegExp(i+"$","i"))||(f+=i.replace("?","")),b.file=f,b.type=h,!d&&e.toBlob?e.toBlob(function(a){c(b,a)},h,j):c(b,a.toBinaryString(e.toDataURL(h,j)))}else c(b,e)}var d=b.document,e=b.FormData,f=function(){this.items=[]},g=b.encodeURIComponent;f.prototype={append:function(a,b,c,d){this.items.push({name:a,blob:b&&b.blob||(void 0==b?"":b),file:b&&(c||b.name),type:b&&(d||b.type)})},each:function(a){for(var b=0,c=this.items.length;c>b;b++)a.call(this,this.items[b])},toData:function(b,c){c._chunked=a.support.chunked&&c.chunkSize>0&&1==a.filter(this.items,function(a){return a.file}).length,a.support.html5?a.formData&&!this.multipart&&e?c._chunked?(a.log("FileAPI.Form.toPlainData"),this.toPlainData(b)):(a.log("FileAPI.Form.toFormData"),this.toFormData(b)):(a.log("FileAPI.Form.toMultipartData"),this.toMultipartData(b)):(a.log("FileAPI.Form.toHtmlData"),this.toHtmlData(b))},_to:function(b,c,d,e){var f=a.queue(function(){c(b)});this.each(function(g){try{d(g,b,f,e)}catch(h){a.log("FileAPI.Form._to: "+h.message),c(h)}}),f.check()},toHtmlData:function(b){this._to(d.createDocumentFragment(),b,function(b,c){var e,f=b.blob;b.file?(a.reset(f,!0),f.name=b.name,f.disabled=!1,c.appendChild(f)):(e=d.createElement("input"),e.name=b.name,e.type="hidden",e.value=f,c.appendChild(e))})},toPlainData:function(a){this._to({},a,function(a,b,d){a.file&&(b.type=a.file),a.blob.toBlob?(d.inc(),c(a,function(a,c){b.name=a.name,b.file=c,b.size=c.length,b.type=a.type,d.next()})):a.file?(b.name=a.blob.name,b.file=a.blob,b.size=a.blob.size,b.type=a.type):(b.params||(b.params=[]),b.params.push(g(a.name)+"="+g(a.blob))),b.start=-1,b.end=b.file&&b.file.FileAPIReadPosition||-1,b.retry=0})},toFormData:function(a){this._to(new e,a,function(a,b,d){a.blob&&a.blob.toBlob?(d.inc(),c(a,function(a,c){b.append(a.name,c,a.file),d.next()})):a.file?b.append(a.name,a.blob,a.file):b.append(a.name,a.blob),a.file&&b.append("_"+a.name,a.file)})},toMultipartData:function(b){this._to([],b,function(a,b,d,e){d.inc(),c(a,function(a,c){b.push("--_"+e+('\r\nContent-Disposition: form-data; name="'+a.name+'"'+(a.file?'; filename="'+g(a.file)+'"':"")+(a.file?"\r\nContent-Type: "+(a.type||"application/octet-stream"):"")+"\r\n\r\n"+(a.file?c:g(c))+"\r\n")),d.next()},!0)},a.expando)}},a.Form=f}(FileAPI,window),function(a,b){"use strict";var c=function(){},d=a.document,e=function(a){this.uid=b.uid(),this.xhr={abort:c,getResponseHeader:c,getAllResponseHeaders:c},this.options=a},f={"":1,XML:1,Text:1,Body:1};e.prototype={status:0,statusText:"",constructor:e,getResponseHeader:function(a){return this.xhr.getResponseHeader(a)},getAllResponseHeaders:function(){return this.xhr.getAllResponseHeaders()||{}},end:function(d,e){var f=this,g=f.options;f.end=f.abort=c,f.status=d,e&&(f.statusText=e),b.log("xhr.end:",d,e),g.complete(200==d||201==d?!1:f.statusText||"unknown",f),f.xhr&&f.xhr.node&&setTimeout(function(){var b=f.xhr.node;try{b.parentNode.removeChild(b)}catch(c){}try{delete a[f.uid]}catch(c){}a[f.uid]=f.xhr.node=null},9)},abort:function(){this.end(0,"abort"),this.xhr&&(this.xhr.aborted=!0,this.xhr.abort())},send:function(a){var b=this,c=this.options;a.toData(function(a){a instanceof Error?b.end(0,a.message):(c.upload(c,b),b._send.call(b,c,a))},c)},_send:function(c,e){var g,h=this,i=h.uid,j=h.uid+"Load",k=c.url;if(b.log("XHR._send:",e),c.cache||(k+=(~k.indexOf("?")?"&":"?")+b.uid()),e.nodeName){var l=c.jsonp;k=k.replace(/([a-z]+)=(\?)/i,"$1="+i),c.upload(c,h);var m=function(a){if(~k.indexOf(a.origin))try{var c=b.parseJSON(a.data);c.id==i&&n(c.status,c.statusText,c.response)}catch(d){n(0,d.message)}},n=a[i]=function(c,d,e){h.readyState=4,h.responseText=e,h.end(c,d),b.event.off(a,"message",m),a[i]=g=p=a[j]=null};h.xhr.abort=function(){try{p.stop?p.stop():p.contentWindow.stop?p.contentWindow.stop():p.contentWindow.document.execCommand("Stop")}catch(a){}n(0,"abort")},b.event.on(a,"message",m),a[j]=function(){try{var a=p.contentWindow,c=a.document,d=a.result||b.parseJSON(c.body.innerHTML);n(d.status,d.statusText,d.response)}catch(e){b.log("[transport.onload]",e)}},g=d.createElement("div"),g.innerHTML='
          '+(l&&c.url.indexOf("=?")<0?'':"")+"
          ";var o=g.getElementsByTagName("form")[0],p=g.getElementsByTagName("iframe")[0];o.appendChild(e),b.log(o.parentNode.innerHTML),d.body.appendChild(g),h.xhr.node=g,h.readyState=2;try{o.submit()}catch(q){b.log("iframe.error: "+q)}o=null}else{if(k=k.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted)return void b.log("Error: already aborted");if(g=h.xhr=b.getXHR(),e.params&&(k+=(k.indexOf("?")<0?"?":"&")+e.params.join("&")),g.open("POST",k,!0),b.withCredentials&&(g.withCredentials="true"),c.headers&&c.headers["X-Requested-With"]||g.setRequestHeader("X-Requested-With","XMLHttpRequest"),b.each(c.headers,function(a,b){g.setRequestHeader(b,a)}),c._chunked){g.upload&&g.upload.addEventListener("progress",b.throttle(function(a){e.retry||c.progress({type:a.type,total:e.size,loaded:e.start+a.loaded,totalSize:e.size},h,c)},100),!1),g.onreadystatechange=function(){var a=parseInt(g.getResponseHeader("X-Last-Known-Byte"),10);if(h.status=g.status,h.statusText=g.statusText,h.readyState=g.readyState,4==g.readyState){for(var d in f)h["response"+d]=g["response"+d];if(g.onreadystatechange=null,!g.status||g.status-201>0)if(b.log("Error: "+g.status),(!g.status&&!g.aborted||500==g.status||416==g.status)&&++e.retry<=c.chunkUploadRetry){var i=g.status?0:b.chunkNetworkDownRetryTimeout;c.pause(e.file,c),b.log("X-Last-Known-Byte: "+a),a?e.end=a:(e.end=e.start-1,416==g.status&&(e.end=e.end-c.chunkSize)),setTimeout(function(){h._send(c,e)},i)}else h.end(g.status);else e.retry=0,e.end==e.size-1?h.end(g.status):(b.log("X-Last-Known-Byte: "+a),a&&(e.end=a),e.file.FileAPIReadPosition=e.end,setTimeout(function(){h._send(c,e)},0));g=null}},e.start=e.end+1,e.end=Math.max(Math.min(e.start+c.chunkSize,e.size)-1,e.start);var r=e.file,s=(r.slice||r.mozSlice||r.webkitSlice).call(r,e.start,e.end+1);e.size&&!s.size?setTimeout(function(){h.end(-1)}):(g.setRequestHeader("Content-Range","bytes "+e.start+"-"+e.end+"/"+e.size),g.setRequestHeader("Content-Disposition","attachment; filename="+encodeURIComponent(e.name)),g.setRequestHeader("Content-Type",e.type||"application/octet-stream"),g.send(s)),r=s=null}else if(g.upload&&g.upload.addEventListener("progress",b.throttle(function(a){c.progress(a,h,c)},100),!1),g.onreadystatechange=function(){if(h.status=g.status,h.statusText=g.statusText,h.readyState=g.readyState,4==g.readyState){for(var a in f)h["response"+a]=g["response"+a];if(g.onreadystatechange=null,!g.status||g.status>201)if(b.log("Error: "+g.status),(!g.status&&!g.aborted||500==g.status)&&(c.retry||0)=0?a+"px":a}function d(a){var c,d=f.createElement("canvas"),e=!1;try{c=d.getContext("2d"),c.drawImage(a,0,0,1,1),e=255!=c.getImageData(0,0,1,1).data[4]}catch(g){b.log("[FileAPI.Camera] detectVideoSignal:",g)}return e}var e=a.URL||a.webkitURL,f=a.document,g=a.navigator,h=g.getUserMedia||g.webkitGetUserMedia||g.mozGetUserMedia||g.msGetUserMedia,i=!!h;b.support.media=i;var j=function(a){this.video=a};j.prototype={isActive:function(){return!!this._active},start:function(a){var b,c,f=this,i=f.video,j=function(d){f._active=!d,clearTimeout(c),clearTimeout(b),a&&a(d,f)};h.call(g,{video:!0},function(a){f.stream=a,i.src=e.createObjectURL(a),b=setInterval(function(){d(i)&&j(null)},1e3),c=setTimeout(function(){j("timeout"); +},5e3),i.play()},j)},stop:function(){try{this._active=!1,this.video.pause();try{this.stream.stop()}catch(a){b.each(this.stream.getTracks(),function(a){a.stop()})}this.stream=null}catch(a){b.log("[FileAPI.Camera] stop:",a)}},shot:function(){return new k(this.video)}},j.get=function(a){return new j(a.firstChild)},j.publish=function(d,e,g){"function"==typeof e&&(g=e,e={}),e=b.extend({},{width:"100%",height:"100%",start:!0},e),d.jquery&&(d=d[0]);var h=function(a){if(a)g(a);else{var b=j.get(d);e.start?b.start(g):g(null,b)}};if(d.style.width=c(e.width),d.style.height=c(e.height),b.html5&&i){var k=f.createElement("video");k.style.width=c(e.width),k.style.height=c(e.height),a.jQuery?jQuery(d).empty():d.innerHTML="",d.appendChild(k),h()}else j.fallback(d,e,h)},j.fallback=function(a,b,c){c("not_support_camera")};var k=function(a){var c=a.nodeName?b.Image.toCanvas(a):a,d=b.Image(c);return d.type="image/png",d.width=c.width,d.height=c.height,d.size=c.width*c.height*4,d};j.Shot=k,b.Camera=j}(window,FileAPI),function(a,b,c){"use strict";var d=c.each,e=[];!c.support.flash||!c.media||c.support.media&&c.html5||!function(){function a(a){var b=a.wid=c.uid();return c.Flash._fn[b]=a,"FileAPI.Flash._fn."+b}function b(a){try{c.Flash._fn[a.wid]=null,delete c.Flash._fn[a.wid]}catch(b){}}var f=c.Flash;c.extend(c.Flash,{patchCamera:function(){c.Camera.fallback=function(d,e,g){var h=c.uid();c.log("FlashAPI.Camera.publish: "+h),f.publish(d,h,c.extend(e,{camera:!0,onEvent:a(function i(a){"camera"===a.type&&(b(i),a.error?(c.log("FlashAPI.Camera.publish.error: "+a.error),g(a.error)):(c.log("FlashAPI.Camera.publish.success: "+h),g(null)))})}))},d(e,function(a){c.Camera.fallback.apply(c.Camera,a)}),e=[],c.extend(c.Camera.prototype,{_id:function(){return this.video.id},start:function(d){var e=this;f.cmd(this._id(),"camera.on",{callback:a(function g(a){b(g),a.error?(c.log("FlashAPI.camera.on.error: "+a.error),d(a.error,e)):(c.log("FlashAPI.camera.on.success: "+e._id()),e._active=!0,d(null,e))})})},stop:function(){this._active=!1,f.cmd(this._id(),"camera.off")},shot:function(){c.log("FlashAPI.Camera.shot:",this._id());var a=c.Flash.cmd(this._id(),"shot",{});return a.type="image/png",a.flashId=this._id(),a.isShot=!0,new c.Camera.Shot(a)}})}}),c.Camera.fallback=function(){e.push(arguments)}}()}(window,window.jQuery,FileAPI),"function"==typeof define&&define.amd&&define("FileAPI",[],function(){return FileAPI}); \ No newline at end of file diff --git a/manager/media/browser/mcpuk/js/FileAPI/FileAPI.js b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.js new file mode 100755 index 00000000..6b2e14b7 --- /dev/null +++ b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.js @@ -0,0 +1,4361 @@ +/*! FileAPI 2.0.19 - BSD | git://github.com/mailru/FileAPI.git + * FileAPI — a set of javascript tools for working with files. Multiupload, drag'n'drop and chunked file upload. Images: crop, resize and auto orientation by EXIF. + */ + +/* + * JavaScript Canvas to Blob 2.0.5 + * https://github.com/blueimp/JavaScript-Canvas-to-Blob + * + * Copyright 2012, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + * + * Based on stackoverflow user Stoive's code snippet: + * http://stackoverflow.com/q/4998908 + */ + +/*jslint nomen: true, regexp: true */ +/*global window, atob, Blob, ArrayBuffer, Uint8Array */ + +(function (window) { + 'use strict'; + var CanvasPrototype = window.HTMLCanvasElement && + window.HTMLCanvasElement.prototype, + hasBlobConstructor = window.Blob && (function () { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } + }()), + hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && + (function () { + try { + return new Blob([new Uint8Array(100)]).size === 100; + } catch (e) { + return false; + } + }()), + BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || + window.MozBlobBuilder || window.MSBlobBuilder, + dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && + window.ArrayBuffer && window.Uint8Array && function (dataURI) { + var byteString, + arrayBuffer, + intArray, + i, + mimeString, + bb; + if (dataURI.split(',')[0].indexOf('base64') >= 0) { + // Convert base64 to raw binary data held in a string: + byteString = atob(dataURI.split(',')[1]); + } else { + // Convert base64/URLEncoded data component to raw binary data: + byteString = decodeURIComponent(dataURI.split(',')[1]); + } + // Write the bytes of the string to an ArrayBuffer: + arrayBuffer = new ArrayBuffer(byteString.length); + intArray = new Uint8Array(arrayBuffer); + for (i = 0; i < byteString.length; i += 1) { + intArray[i] = byteString.charCodeAt(i); + } + // Separate out the mime component: + mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; + // Write the ArrayBuffer (or ArrayBufferView) to a blob: + if (hasBlobConstructor) { + return new Blob( + [hasArrayBufferViewSupport ? intArray : arrayBuffer], + {type: mimeString} + ); + } + bb = new BlobBuilder(); + bb.append(arrayBuffer); + return bb.getBlob(mimeString); + }; + if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) { + if (CanvasPrototype.mozGetAsFile) { + CanvasPrototype.toBlob = function (callback, type, quality) { + if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) { + callback(dataURLtoBlob(this.toDataURL(type, quality))); + } else { + callback(this.mozGetAsFile('blob', type)); + } + }; + } else if (CanvasPrototype.toDataURL && dataURLtoBlob) { + CanvasPrototype.toBlob = function (callback, type, quality) { + callback(dataURLtoBlob(this.toDataURL(type, quality))); + }; + } + } + window.dataURLtoBlob = dataURLtoBlob; +})(window); + +/*jslint evil: true */ +/*global window, URL, webkitURL, ActiveXObject */ + +(function (window, undef){ + 'use strict'; + + var + gid = 1, + noop = function (){}, + + document = window.document, + doctype = document.doctype || {}, + userAgent = window.navigator.userAgent, + safari = /safari\//i.test(userAgent) && !/chrome\//i.test(userAgent), + iemobile = /iemobile\//i.test(userAgent), + + // https://github.com/blueimp/JavaScript-Load-Image/blob/master/load-image.js#L48 + apiURL = (window.createObjectURL && window) || (window.URL && URL.revokeObjectURL && URL) || (window.webkitURL && webkitURL), + + Blob = window.Blob, + File = window.File, + FileReader = window.FileReader, + FormData = window.FormData, + + + XMLHttpRequest = window.XMLHttpRequest, + jQuery = window.jQuery, + + html5 = !!(File && (FileReader && (window.Uint8Array || FormData || XMLHttpRequest.prototype.sendAsBinary))) + && !(safari && /windows/i.test(userAgent) && !iemobile), // BugFix: https://github.com/mailru/FileAPI/issues/25 + + cors = html5 && ('withCredentials' in (new XMLHttpRequest)), + + chunked = html5 && !!Blob && !!(Blob.prototype.webkitSlice || Blob.prototype.mozSlice || Blob.prototype.slice), + + normalize = ('' + ''.normalize).indexOf('[native code]') > 0, + + // https://github.com/blueimp/JavaScript-Canvas-to-Blob + dataURLtoBlob = window.dataURLtoBlob, + + + _rimg = /img/i, + _rcanvas = /canvas/i, + _rimgcanvas = /img|canvas/i, + _rinput = /input/i, + _rdata = /^data:[^,]+,/, + + _toString = {}.toString, + _supportConsoleLog, + _supportConsoleLogApply, + + + Math = window.Math, + + _SIZE_CONST = function (pow){ + pow = new window.Number(Math.pow(1024, pow)); + pow.from = function (sz){ return Math.round(sz * this); }; + return pow; + }, + + _elEvents = {}, // element event listeners + _infoReader = [], // list of file info processors + + _readerEvents = 'abort progress error load loadend', + _xhrPropsExport = 'status statusText readyState response responseXML responseText responseBody'.split(' '), + + currentTarget = 'currentTarget', // for minimize + preventDefault = 'preventDefault', // and this too + + _isArray = function (ar) { + return ar && ('length' in ar); + }, + + /** + * Iterate over a object or array + */ + _each = function (obj, fn, ctx){ + if( obj ){ + if( _isArray(obj) ){ + for( var i = 0, n = obj.length; i < n; i++ ){ + if( i in obj ){ + fn.call(ctx, obj[i], i, obj); + } + } + } + else { + for( var key in obj ){ + if( obj.hasOwnProperty(key) ){ + fn.call(ctx, obj[key], key, obj); + } + } + } + } + }, + + /** + * Merge the contents of two or more objects together into the first object + */ + _extend = function (dst){ + var args = arguments, i = 1, _ext = function (val, key){ dst[key] = val; }; + for( ; i < args.length; i++ ){ + _each(args[i], _ext); + } + return dst; + }, + + /** + * Add event listener + */ + _on = function (el, type, fn){ + if( el ){ + var uid = api.uid(el); + + if( !_elEvents[uid] ){ + _elEvents[uid] = {}; + } + + var isFileReader = (FileReader && el) && (el instanceof FileReader); + _each(type.split(/\s+/), function (type){ + if( jQuery && !isFileReader){ + jQuery.event.add(el, type, fn); + } else { + if( !_elEvents[uid][type] ){ + _elEvents[uid][type] = []; + } + + _elEvents[uid][type].push(fn); + + if( el.addEventListener ){ el.addEventListener(type, fn, false); } + else if( el.attachEvent ){ el.attachEvent('on'+type, fn); } + else { el['on'+type] = fn; } + } + }); + } + }, + + + /** + * Remove event listener + */ + _off = function (el, type, fn){ + if( el ){ + var uid = api.uid(el), events = _elEvents[uid] || {}; + + var isFileReader = (FileReader && el) && (el instanceof FileReader); + _each(type.split(/\s+/), function (type){ + if( jQuery && !isFileReader){ + jQuery.event.remove(el, type, fn); + } + else { + var fns = events[type] || [], i = fns.length; + + while( i-- ){ + if( fns[i] === fn ){ + fns.splice(i, 1); + break; + } + } + + if( el.addEventListener ){ el.removeEventListener(type, fn, false); } + else if( el.detachEvent ){ el.detachEvent('on'+type, fn); } + else { el['on'+type] = null; } + } + }); + } + }, + + + _one = function(el, type, fn){ + _on(el, type, function _(evt){ + _off(el, type, _); + fn(evt); + }); + }, + + + _fixEvent = function (evt){ + if( !evt.target ){ evt.target = window.event && window.event.srcElement || document; } + if( evt.target.nodeType === 3 ){ evt.target = evt.target.parentNode; } + return evt; + }, + + + _supportInputAttr = function (attr){ + var input = document.createElement('input'); + input.setAttribute('type', "file"); + return attr in input; + }, + + + /** + * FileAPI (core object) + */ + api = { + version: '2.0.19', + + cors: false, + html5: true, + media: false, + formData: true, + multiPassResize: true, + + debug: false, + pingUrl: false, + multiFlash: false, + flashAbortTimeout: 0, + withCredentials: true, + + staticPath: './dist/', + + flashUrl: 0, // @default: './FileAPI.flash.swf' + flashImageUrl: 0, // @default: './FileAPI.flash.image.swf' + + postNameConcat: function (name, idx){ + return name + (idx != null ? '['+ idx +']' : ''); + }, + + ext2mime: { + jpg: 'image/jpeg' + , tif: 'image/tiff' + , txt: 'text/plain' + }, + + // Fallback for flash + accept: { + 'image/*': 'art bm bmp dwg dxf cbr cbz fif fpx gif ico iefs jfif jpe jpeg jpg jps jut mcf nap nif pbm pcx pgm pict pm png pnm qif qtif ras rast rf rp svf tga tif tiff xbm xbm xpm xwd' + , 'audio/*': 'm4a flac aac rm mpa wav wma ogg mp3 mp2 m3u mod amf dmf dsm far gdm imf it m15 med okt s3m stm sfx ult uni xm sid ac3 dts cue aif aiff wpl ape mac mpc mpp shn wv nsf spc gym adplug adx dsp adp ymf ast afc hps xs' + , 'video/*': 'm4v 3gp nsv ts ty strm rm rmvb m3u ifo mov qt divx xvid bivx vob nrg img iso pva wmv asf asx ogm m2v avi bin dat dvr-ms mpg mpeg mp4 mkv avc vp3 svq3 nuv viv dv fli flv wpl' + }, + + uploadRetry : 0, + networkDownRetryTimeout : 5000, // milliseconds, don't flood when network is down + + chunkSize : 0, + chunkUploadRetry : 0, + chunkNetworkDownRetryTimeout : 2000, // milliseconds, don't flood when network is down + + KB: _SIZE_CONST(1), + MB: _SIZE_CONST(2), + GB: _SIZE_CONST(3), + TB: _SIZE_CONST(4), + + EMPTY_PNG: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=', + + expando: 'fileapi' + (new Date).getTime(), + + uid: function (obj){ + return obj + ? (obj[api.expando] = obj[api.expando] || api.uid()) + : (++gid, api.expando + gid) + ; + }, + + log: function (){ + if( api.debug && _supportConsoleLog ){ + if( _supportConsoleLogApply ){ + console.log.apply(console, arguments); + } + else { + console.log([].join.call(arguments, ' ')); + } + } + }, + + /** + * Create new image + * + * @param {String} [src] + * @param {Function} [fn] 1. error -- boolean, 2. img -- Image element + * @returns {HTMLElement} + */ + newImage: function (src, fn){ + var img = document.createElement('img'); + if( fn ){ + api.event.one(img, 'error load', function (evt){ + fn(evt.type == 'error', img); + img = null; + }); + } + img.src = src; + return img; + }, + + /** + * Get XHR + * @returns {XMLHttpRequest} + */ + getXHR: function (){ + var xhr; + + if( XMLHttpRequest ){ + xhr = new XMLHttpRequest; + } + else if( window.ActiveXObject ){ + try { + xhr = new ActiveXObject('MSXML2.XMLHttp.3.0'); + } catch (e) { + xhr = new ActiveXObject('Microsoft.XMLHTTP'); + } + } + + return xhr; + }, + + isArray: _isArray, + + support: { + dnd: cors && ('ondrop' in document.createElement('div')), + cors: cors, + html5: html5, + chunked: chunked, + dataURI: true, + accept: _supportInputAttr('accept'), + multiple: _supportInputAttr('multiple') + }, + + event: { + on: _on + , off: _off + , one: _one + , fix: _fixEvent + }, + + + throttle: function(fn, delay) { + var id, args; + + return function _throttle(){ + args = arguments; + + if( !id ){ + fn.apply(window, args); + id = setTimeout(function (){ + id = 0; + fn.apply(window, args); + }, delay); + } + }; + }, + + + F: function (){}, + + + parseJSON: function (str){ + var json; + if( window.JSON && JSON.parse ){ + json = JSON.parse(str); + } + else { + json = (new Function('return ('+str.replace(/([\r\n])/g, '\\$1')+');'))(); + } + return json; + }, + + + trim: function (str){ + str = String(str); + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); + }, + + /** + * Simple Defer + * @return {Object} + */ + defer: function (){ + var + list = [] + , result + , error + , defer = { + resolve: function (err, res){ + defer.resolve = noop; + error = err || false; + result = res; + + while( res = list.shift() ){ + res(error, result); + } + }, + + then: function (fn){ + if( error !== undef ){ + fn(error, result); + } else { + list.push(fn); + } + } + }; + + return defer; + }, + + queue: function (fn){ + var + _idx = 0 + , _length = 0 + , _fail = false + , _end = false + , queue = { + inc: function (){ + _length++; + }, + + next: function (){ + _idx++; + setTimeout(queue.check, 0); + }, + + check: function (){ + (_idx >= _length) && !_fail && queue.end(); + }, + + isFail: function (){ + return _fail; + }, + + fail: function (){ + !_fail && fn(_fail = true); + }, + + end: function (){ + if( !_end ){ + _end = true; + fn(); + } + } + } + ; + return queue; + }, + + + /** + * For each object + * + * @param {Object|Array} obj + * @param {Function} fn + * @param {*} [ctx] + */ + each: _each, + + + /** + * Async for + * @param {Array} array + * @param {Function} callback + */ + afor: function (array, callback){ + var i = 0, n = array.length; + + if( _isArray(array) && n-- ){ + (function _next(){ + callback(n != i && _next, array[i], i++); + })(); + } + else { + callback(false); + } + }, + + + /** + * Merge the contents of two or more objects together into the first object + * + * @param {Object} dst + * @return {Object} + */ + extend: _extend, + + + /** + * Is file? + * @param {File} file + * @return {Boolean} + */ + isFile: function (file){ + return _toString.call(file) === '[object File]'; + }, + + + /** + * Is blob? + * @param {Blob} blob + * @returns {Boolean} + */ + isBlob: function (blob) { + return this.isFile(blob) || (_toString.call(blob) === '[object Blob]'); + }, + + + /** + * Is canvas element + * + * @param {HTMLElement} el + * @return {Boolean} + */ + isCanvas: function (el){ + return el && _rcanvas.test(el.nodeName); + }, + + + getFilesFilter: function (filter){ + filter = typeof filter == 'string' ? filter : (filter.getAttribute && filter.getAttribute('accept') || ''); + return filter ? new RegExp('('+ filter.replace(/\./g, '\\.').replace(/,/g, '|') +')$', 'i') : /./; + }, + + + + /** + * Read as DataURL + * + * @param {File|Element} file + * @param {Function} fn + */ + readAsDataURL: function (file, fn){ + if( api.isCanvas(file) ){ + _emit(file, fn, 'load', api.toDataURL(file)); + } + else { + _readAs(file, fn, 'DataURL'); + } + }, + + + /** + * Read as Binary string + * + * @param {File} file + * @param {Function} fn + */ + readAsBinaryString: function (file, fn){ + if( _hasSupportReadAs('BinaryString') ){ + _readAs(file, fn, 'BinaryString'); + } else { + // Hello IE10! + _readAs(file, function (evt){ + if( evt.type == 'load' ){ + try { + // dataURL -> binaryString + evt.result = api.toBinaryString(evt.result); + } catch (e){ + evt.type = 'error'; + evt.message = e.toString(); + } + } + fn(evt); + }, 'DataURL'); + } + }, + + + /** + * Read as ArrayBuffer + * + * @param {File} file + * @param {Function} fn + */ + readAsArrayBuffer: function(file, fn){ + _readAs(file, fn, 'ArrayBuffer'); + }, + + + /** + * Read as text + * + * @param {File} file + * @param {String} encoding + * @param {Function} [fn] + */ + readAsText: function(file, encoding, fn){ + if( !fn ){ + fn = encoding; + encoding = 'utf-8'; + } + + _readAs(file, fn, 'Text', encoding); + }, + + + /** + * Convert image or canvas to DataURL + * + * @param {Element} el Image or Canvas element + * @param {String} [type] mime-type + * @return {String} + */ + toDataURL: function (el, type){ + if( typeof el == 'string' ){ + return el; + } + else if( el.toDataURL ){ + return el.toDataURL(type || 'image/png'); + } + }, + + + /** + * Canvert string, image or canvas to binary string + * + * @param {String|Element} val + * @return {String} + */ + toBinaryString: function (val){ + return window.atob(api.toDataURL(val).replace(_rdata, '')); + }, + + + /** + * Read file or DataURL as ImageElement + * + * @param {File|String} file + * @param {Function} fn + * @param {Boolean} [progress] + */ + readAsImage: function (file, fn, progress){ + if( api.isBlob(file) ){ + if( apiURL ){ + /** @namespace apiURL.createObjectURL */ + var data = apiURL.createObjectURL(file); + if( data === undef ){ + _emit(file, fn, 'error'); + } + else { + api.readAsImage(data, fn, progress); + } + } + else { + api.readAsDataURL(file, function (evt){ + if( evt.type == 'load' ){ + api.readAsImage(evt.result, fn, progress); + } + else if( progress || evt.type == 'error' ){ + _emit(file, fn, evt, null, { loaded: evt.loaded, total: evt.total }); + } + }); + } + } + else if( api.isCanvas(file) ){ + _emit(file, fn, 'load', file); + } + else if( _rimg.test(file.nodeName) ){ + if( file.complete ){ + _emit(file, fn, 'load', file); + } + else { + var events = 'error abort load'; + _one(file, events, function _fn(evt){ + if( evt.type == 'load' && apiURL ){ + /** @namespace apiURL.revokeObjectURL */ + apiURL.revokeObjectURL(file.src); + } + + _off(file, events, _fn); + _emit(file, fn, evt, file); + }); + } + } + else if( file.iframe ){ + _emit(file, fn, { type: 'error' }); + } + else { + // Created image + var img = api.newImage(file.dataURL || file); + api.readAsImage(img, fn, progress); + } + }, + + + /** + * Make file by name + * + * @param {String} name + * @return {Array} + */ + checkFileObj: function (name){ + var file = {}, accept = api.accept; + + if( typeof name == 'object' ){ + file = name; + } + else { + file.name = (name + '').split(/\\|\//g).pop(); + } + + if( file.type == null ){ + file.type = file.name.split('.').pop(); + } + + _each(accept, function (ext, type){ + ext = new RegExp(ext.replace(/\s/g, '|'), 'i'); + if( ext.test(file.type) || api.ext2mime[file.type] ){ + file.type = api.ext2mime[file.type] || (type.split('/')[0] +'/'+ file.type); + } + }); + + return file; + }, + + + /** + * Get drop files + * + * @param {Event} evt + * @param {Function} callback + */ + getDropFiles: function (evt, callback){ + var + files = [] + , all = [] + , items + , dataTransfer = _getDataTransfer(evt) + , transFiles = dataTransfer.files + , transItems = dataTransfer.items + , entrySupport = _isArray(transItems) && transItems[0] && _getAsEntry(transItems[0]) + , queue = api.queue(function (){ callback(files, all); }) + ; + + if( entrySupport ){ + if( normalize && transFiles ){ + var + i = transFiles.length + , file + , entry + ; + + items = new Array(i); + while( i-- ){ + file = transFiles[i]; + + try { + entry = _getAsEntry(transItems[i]); + } + catch( err ){ + api.log('[err] getDropFiles: ', err); + entry = null; + } + + if( _isEntry(entry) ){ + // OSX filesystems use Unicode Normalization Form D (NFD), + // and entry.file(…) can't read the files with the same names + if( entry.isDirectory || (entry.isFile && file.name == file.name.normalize('NFC')) ){ + items[i] = entry; + } + else { + items[i] = file; + } + } + else { + items[i] = file; + } + } + } + else { + items = transItems; + } + } + else { + items = transFiles; + } + + _each(items || [], function (item){ + queue.inc(); + + try { + if( entrySupport && _isEntry(item) ){ + _readEntryAsFiles(item, function (err, entryFiles, allEntries){ + if( err ){ + api.log('[err] getDropFiles:', err); + } else { + files.push.apply(files, entryFiles); + } + all.push.apply(all, allEntries); + + queue.next(); + }); + } + else { + _isRegularFile(item, function (yes, err){ + if( yes ){ + files.push(item); + } + else { + item.error = err; + } + all.push(item); + + queue.next(); + }); + } + } + catch( err ){ + queue.next(); + api.log('[err] getDropFiles: ', err); + } + }); + + queue.check(); + }, + + + /** + * Get file list + * + * @param {HTMLInputElement|Event} input + * @param {String|Function} [filter] + * @param {Function} [callback] + * @return {Array|Null} + */ + getFiles: function (input, filter, callback){ + var files = []; + + if( callback ){ + api.filterFiles(api.getFiles(input), filter, callback); + return null; + } + + if( input.jquery ){ + // jQuery object + input.each(function (){ + files = files.concat(api.getFiles(this)); + }); + input = files; + files = []; + } + + if( typeof filter == 'string' ){ + filter = api.getFilesFilter(filter); + } + + if( input.originalEvent ){ + // jQuery event + input = _fixEvent(input.originalEvent); + } + else if( input.srcElement ){ + // IE Event + input = _fixEvent(input); + } + + + if( input.dataTransfer ){ + // Drag'n'Drop + input = input.dataTransfer; + } + else if( input.target ){ + // Event + input = input.target; + } + + if( input.files ){ + // Input[type="file"] + files = input.files; + + if( !html5 ){ + // Partial support for file api + files[0].blob = input; + files[0].iframe = true; + } + } + else if( !html5 && isInputFile(input) ){ + if( api.trim(input.value) ){ + files = [api.checkFileObj(input.value)]; + files[0].blob = input; + files[0].iframe = true; + } + } + else if( _isArray(input) ){ + files = input; + } + + return api.filter(files, function (file){ return !filter || filter.test(file.name); }); + }, + + + /** + * Get total file size + * @param {Array} files + * @return {Number} + */ + getTotalSize: function (files){ + var size = 0, i = files && files.length; + while( i-- ){ + size += files[i].size; + } + return size; + }, + + + /** + * Get image information + * + * @param {File} file + * @param {Function} fn + */ + getInfo: function (file, fn){ + var info = {}, readers = _infoReader.concat(); + + if( api.isBlob(file) ){ + (function _next(){ + var reader = readers.shift(); + if( reader ){ + if( reader.test(file.type) ){ + reader(file, function (err, res){ + if( err ){ + fn(err); + } + else { + _extend(info, res); + _next(); + } + }); + } + else { + _next(); + } + } + else { + fn(false, info); + } + })(); + } + else { + fn('not_support_info', info); + } + }, + + + /** + * Add information reader + * + * @param {RegExp} mime + * @param {Function} fn + */ + addInfoReader: function (mime, fn){ + fn.test = function (type){ return mime.test(type); }; + _infoReader.push(fn); + }, + + + /** + * Filter of array + * + * @param {Array} input + * @param {Function} fn + * @return {Array} + */ + filter: function (input, fn){ + var result = [], i = 0, n = input.length, val; + + for( ; i < n; i++ ){ + if( i in input ){ + val = input[i]; + if( fn.call(val, val, i, input) ){ + result.push(val); + } + } + } + + return result; + }, + + + /** + * Filter files + * + * @param {Array} files + * @param {Function} eachFn + * @param {Function} resultFn + */ + filterFiles: function (files, eachFn, resultFn){ + if( files.length ){ + // HTML5 or Flash + var queue = files.concat(), file, result = [], deleted = []; + + (function _next(){ + if( queue.length ){ + file = queue.shift(); + api.getInfo(file, function (err, info){ + (eachFn(file, err ? false : info) ? result : deleted).push(file); + _next(); + }); + } + else { + resultFn(result, deleted); + } + })(); + } + else { + resultFn([], files); + } + }, + + + upload: function (options){ + options = _extend({ + jsonp: 'callback' + , prepare: api.F + , beforeupload: api.F + , upload: api.F + , fileupload: api.F + , fileprogress: api.F + , filecomplete: api.F + , progress: api.F + , complete: api.F + , pause: api.F + , imageOriginal: true + , chunkSize: api.chunkSize + , chunkUploadRetry: api.chunkUploadRetry + , uploadRetry: api.uploadRetry + }, options); + + + if( options.imageAutoOrientation && !options.imageTransform ){ + options.imageTransform = { rotate: 'auto' }; + } + + + var + proxyXHR = new api.XHR(options) + , dataArray = this._getFilesDataArray(options.files) + , _this = this + , _total = 0 + , _loaded = 0 + , _nextFile + , _complete = false + ; + + + // calc total size + _each(dataArray, function (data){ + _total += data.size; + }); + + // Array of files + proxyXHR.files = []; + _each(dataArray, function (data){ + proxyXHR.files.push(data.file); + }); + + // Set upload status props + proxyXHR.total = _total; + proxyXHR.loaded = 0; + proxyXHR.filesLeft = dataArray.length; + + // emit "beforeupload" event + options.beforeupload(proxyXHR, options); + + // Upload by file + _nextFile = function (){ + var + data = dataArray.shift() + , _file = data && data.file + , _fileLoaded = false + , _fileOptions = _simpleClone(options) + ; + + proxyXHR.filesLeft = dataArray.length; + + if( _file && _file.name === api.expando ){ + _file = null; + api.log('[warn] FileAPI.upload() — called without files'); + } + + if( ( proxyXHR.statusText != 'abort' || proxyXHR.current ) && data ){ + // Mark active job + _complete = false; + + // Set current upload file + proxyXHR.currentFile = _file; + + // Prepare file options + if (_file && options.prepare(_file, _fileOptions) === false) { + _nextFile.call(_this); + return; + } + _fileOptions.file = _file; + + _this._getFormData(_fileOptions, data, function (form){ + if( !_loaded ){ + // emit "upload" event + options.upload(proxyXHR, options); + } + + var xhr = new api.XHR(_extend({}, _fileOptions, { + + upload: _file ? function (){ + // emit "fileupload" event + options.fileupload(_file, xhr, _fileOptions); + } : noop, + + progress: _file ? function (evt){ + if( !_fileLoaded ){ + // For ignore the double calls. + _fileLoaded = (evt.loaded === evt.total); + + // emit "fileprogress" event + options.fileprogress({ + type: 'progress' + , total: data.total = evt.total + , loaded: data.loaded = evt.loaded + }, _file, xhr, _fileOptions); + + // emit "progress" event + options.progress({ + type: 'progress' + , total: _total + , loaded: proxyXHR.loaded = (_loaded + data.size * (evt.loaded/evt.total)) || 0 + }, _file, xhr, _fileOptions); + } + } : noop, + + complete: function (err){ + _each(_xhrPropsExport, function (name){ + proxyXHR[name] = xhr[name]; + }); + + if( _file ){ + data.total = (data.total || data.size); + data.loaded = data.total; + + if( !err ) { + // emulate 100% "progress" + this.progress(data); + + // fixed throttle event + _fileLoaded = true; + + // bytes loaded + _loaded += data.size; // data.size != data.total, it's desirable fix this + proxyXHR.loaded = _loaded; + } + + // emit "filecomplete" event + options.filecomplete(err, xhr, _file, _fileOptions); + } + + // upload next file + setTimeout(function () {_nextFile.call(_this);}, 0); + } + })); // xhr + + + // ... + proxyXHR.abort = function (current){ + if (!current) { dataArray.length = 0; } + this.current = current; + xhr.abort(); + }; + + // Start upload + xhr.send(form); + }); + } + else { + var successful = proxyXHR.status == 200 || proxyXHR.status == 201 || proxyXHR.status == 204; + options.complete(successful ? false : (proxyXHR.statusText || 'error'), proxyXHR, options); + // Mark done state + _complete = true; + } + }; + + + // Next tick + setTimeout(_nextFile, 0); + + + // Append more files to the existing request + // first - add them to the queue head/tail + proxyXHR.append = function (files, first) { + files = api._getFilesDataArray([].concat(files)); + + _each(files, function (data) { + _total += data.size; + proxyXHR.files.push(data.file); + if (first) { + dataArray.unshift(data); + } else { + dataArray.push(data); + } + }); + + proxyXHR.statusText = ""; + + if( _complete ){ + _nextFile.call(_this); + } + }; + + + // Removes file from queue by file reference and returns it + proxyXHR.remove = function (file) { + var i = dataArray.length, _file; + while( i-- ){ + if( dataArray[i].file == file ){ + _file = dataArray.splice(i, 1); + _total -= _file.size; + } + } + return _file; + }; + + return proxyXHR; + }, + + + _getFilesDataArray: function (data){ + var files = [], oFiles = {}; + + if( isInputFile(data) ){ + var tmp = api.getFiles(data); + oFiles[data.name || 'file'] = data.getAttribute('multiple') !== null ? tmp : tmp[0]; + } + else if( _isArray(data) && isInputFile(data[0]) ){ + _each(data, function (input){ + oFiles[input.name || 'file'] = api.getFiles(input); + }); + } + else { + oFiles = data; + } + + _each(oFiles, function add(file, name){ + if( _isArray(file) ){ + _each(file, function (file){ + add(file, name); + }); + } + else if( file && (file.name || file.image) ){ + files.push({ + name: name + , file: file + , size: file.size + , total: file.size + , loaded: 0 + }); + } + }); + + if( !files.length ){ + // Create fake `file` object + files.push({ file: { name: api.expando } }); + } + + return files; + }, + + + _getFormData: function (options, data, fn){ + var + file = data.file + , name = data.name + , filename = file.name + , filetype = file.type + , trans = api.support.transform && options.imageTransform + , Form = new api.Form + , queue = api.queue(function (){ fn(Form); }) + , isOrignTrans = trans && _isOriginTransform(trans) + , postNameConcat = api.postNameConcat + ; + + // Append data + _each(options.data, function add(val, name){ + if( typeof val == 'object' ){ + _each(val, function (v, i){ + add(v, postNameConcat(name, i)); + }); + } + else { + Form.append(name, val); + } + }); + + (function _addFile(file/**Object*/){ + if( file.image ){ // This is a FileAPI.Image + queue.inc(); + + file.toData(function (err, image){ + // @todo: требует рефакторинга и обработки ошибки + if (file.file) { + image.type = file.file.type; + image.quality = file.matrix.quality; + filename = file.file && file.file.name; + } + + filename = filename || (new Date).getTime()+'.png'; + + _addFile(image); + queue.next(); + }); + } + else if( api.Image && trans && (/^image/.test(file.type) || _rimgcanvas.test(file.nodeName)) ){ + queue.inc(); + + if( isOrignTrans ){ + // Convert to array for transform function + trans = [trans]; + } + + api.Image.transform(file, trans, options.imageAutoOrientation, function (err, images){ + if( isOrignTrans && !err ){ + if( !dataURLtoBlob && !api.flashEngine ){ + // Canvas.toBlob or Flash not supported, use multipart + Form.multipart = true; + } + + Form.append(name, images[0], filename, trans[0].type || filetype); + } + else { + var addOrigin = 0; + + if( !err ){ + _each(images, function (image, idx){ + if( !dataURLtoBlob && !api.flashEngine ){ + Form.multipart = true; + } + + if( !trans[idx].postName ){ + addOrigin = 1; + } + + Form.append(trans[idx].postName || postNameConcat(name, idx), image, filename, trans[idx].type || filetype); + }); + } + + if( err || options.imageOriginal ){ + Form.append(postNameConcat(name, (addOrigin ? 'original' : null)), file, filename, filetype); + } + } + + queue.next(); + }); + } + else if( filename !== api.expando ){ + Form.append(name, file, filename); + } + })(file); + + queue.check(); + }, + + + reset: function (inp, notRemove){ + var parent, clone; + + if( jQuery ){ + clone = jQuery(inp).clone(true).insertBefore(inp).val('')[0]; + if( !notRemove ){ + jQuery(inp).remove(); + } + } else { + parent = inp.parentNode; + clone = parent.insertBefore(inp.cloneNode(true), inp); + clone.value = ''; + + if( !notRemove ){ + parent.removeChild(inp); + } + + _each(_elEvents[api.uid(inp)], function (fns, type){ + _each(fns, function (fn){ + _off(inp, type, fn); + _on(clone, type, fn); + }); + }); + } + + return clone; + }, + + + /** + * Load remote file + * + * @param {String} url + * @param {Function} fn + * @return {XMLHttpRequest} + */ + load: function (url, fn){ + var xhr = api.getXHR(); + if( xhr ){ + xhr.open('GET', url, true); + + if( xhr.overrideMimeType ){ + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + _on(xhr, 'progress', function (/**Event*/evt){ + /** @namespace evt.lengthComputable */ + if( evt.lengthComputable ){ + fn({ type: evt.type, loaded: evt.loaded, total: evt.total }, xhr); + } + }); + + xhr.onreadystatechange = function(){ + if( xhr.readyState == 4 ){ + xhr.onreadystatechange = null; + if( xhr.status == 200 ){ + url = url.split('/'); + /** @namespace xhr.responseBody */ + var file = { + name: url[url.length-1] + , size: xhr.getResponseHeader('Content-Length') + , type: xhr.getResponseHeader('Content-Type') + }; + file.dataURL = 'data:'+file.type+';base64,' + api.encode64(xhr.responseBody || xhr.responseText); + fn({ type: 'load', result: file }, xhr); + } + else { + fn({ type: 'error' }, xhr); + } + } + }; + xhr.send(null); + } else { + fn({ type: 'error' }); + } + + return xhr; + }, + + encode64: function (str){ + var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', outStr = '', i = 0; + + if( typeof str !== 'string' ){ + str = String(str); + } + + while( i < str.length ){ + //all three "& 0xff" added below are there to fix a known bug + //with bytes returned by xhr.responseText + var + byte1 = str.charCodeAt(i++) & 0xff + , byte2 = str.charCodeAt(i++) & 0xff + , byte3 = str.charCodeAt(i++) & 0xff + , enc1 = byte1 >> 2 + , enc2 = ((byte1 & 3) << 4) | (byte2 >> 4) + , enc3, enc4 + ; + + if( isNaN(byte2) ){ + enc3 = enc4 = 64; + } else { + enc3 = ((byte2 & 15) << 2) | (byte3 >> 6); + enc4 = isNaN(byte3) ? 64 : byte3 & 63; + } + + outStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4); + } + + return outStr; + } + + } // api + ; + + + function _emit(target, fn, name, res, ext){ + var evt = { + type: name.type || name + , target: target + , result: res + }; + _extend(evt, ext); + fn(evt); + } + + + function _hasSupportReadAs(method){ + return FileReader && !!FileReader.prototype['readAs' + method]; + } + + + function _readAs(file, fn, method, encoding){ + if( api.isBlob(file) && _hasSupportReadAs(method) ){ + var Reader = new FileReader; + + // Add event listener + _on(Reader, _readerEvents, function _fn(evt){ + var type = evt.type; + if( type == 'progress' ){ + _emit(file, fn, evt, evt.target.result, { loaded: evt.loaded, total: evt.total }); + } + else if( type == 'loadend' ){ + _off(Reader, _readerEvents, _fn); + Reader = null; + } + else { + _emit(file, fn, evt, evt.target.result); + } + }); + + + try { + // ReadAs ... + if( encoding ){ + Reader['readAs' + method](file, encoding); + } + else { + Reader['readAs' + method](file); + } + } + catch (err){ + _emit(file, fn, 'error', undef, { error: err.toString() }); + } + } + else { + _emit(file, fn, 'error', undef, { error: 'filreader_not_support_' + method }); + } + } + + + function _isRegularFile(file, callback){ + // http://stackoverflow.com/questions/8856628/detecting-folders-directories-in-javascript-filelist-objects + if( !file.type && (safari || ((file.size % 4096) === 0 && (file.size <= 102400))) ){ + if( FileReader ){ + try { + var reader = new FileReader(); + + _one(reader, _readerEvents, function (evt){ + var isFile = evt.type != 'error'; + if( isFile ){ + if ( reader.readyState == null || reader.readyState === reader.LOADING ) { + reader.abort(); + } + callback(isFile); + } + else { + callback(false, reader.error); + } + }); + + reader.readAsDataURL(file); + } catch( err ){ + callback(false, err); + } + } + else { + callback(null, new Error('FileReader is not supported')); + } + } + else { + callback(true); + } + } + + + function _isEntry(item){ + return item && (item.isFile || item.isDirectory); + } + + + function _getAsEntry(item){ + var entry; + if( item.getAsEntry ){ entry = item.getAsEntry(); } + else if( item.webkitGetAsEntry ){ entry = item.webkitGetAsEntry(); } + return entry; + } + + + function _readEntryAsFiles(entry, callback){ + if( !entry ){ + // error + var err = new Error('invalid entry'); + entry = new Object(entry); + entry.error = err; + callback(err.message, [], [entry]); + } + else if( entry.isFile ){ + // Read as file + entry.file(function (file){ + // success + file.fullPath = entry.fullPath; + callback(false, [file], [file]); + }, function (err){ + // error + entry.error = err; + callback('FileError.code: ' + err.code, [], [entry]); + }); + } + else if( entry.isDirectory ){ + var + reader = entry.createReader() + , firstAttempt = true + , files = [] + , all = [entry] + ; + + var onerror = function (err){ + // error + entry.error = err; + callback('DirectoryError.code: ' + err.code, files, all); + }; + var ondone = function ondone(entries){ + if( firstAttempt ){ + firstAttempt = false; + if( !entries.length ){ + entry.error = new Error('directory is empty'); + } + } + + // success + if( entries.length ){ + api.afor(entries, function (next, entry){ + _readEntryAsFiles(entry, function (err, entryFiles, allEntries){ + if( !err ){ + files = files.concat(entryFiles); + } + all = all.concat(allEntries); + + if( next ){ + next(); + } + else { + reader.readEntries(ondone, onerror); + } + }); + }); + } + else { + callback(false, files, all); + } + }; + + reader.readEntries(ondone, onerror); + } + else { + _readEntryAsFiles(_getAsEntry(entry), callback); + } + } + + + function _simpleClone(obj){ + var copy = {}; + _each(obj, function (val, key){ + if( val && (typeof val === 'object') && (val.nodeType === void 0) ){ + val = _extend({}, val); + } + copy[key] = val; + }); + return copy; + } + + + function isInputFile(el){ + return _rinput.test(el && el.tagName); + } + + + function _getDataTransfer(evt){ + return (evt.originalEvent || evt || '').dataTransfer || {}; + } + + + function _isOriginTransform(trans){ + var key; + for( key in trans ){ + if( trans.hasOwnProperty(key) ){ + if( !(trans[key] instanceof Object || key === 'overlay' || key === 'filter') ){ + return true; + } + } + } + return false; + } + + + // Add default image info reader + api.addInfoReader(/^image/, function (file/**File*/, callback/**Function*/){ + if( !file.__dimensions ){ + var defer = file.__dimensions = api.defer(); + + api.readAsImage(file, function (evt){ + var img = evt.target; + defer.resolve(evt.type == 'load' ? false : 'error', { + width: img.width + , height: img.height + }); + img.src = api.EMPTY_PNG; + img = null; + }); + } + + file.__dimensions.then(callback); + }); + + + /** + * Drag'n'Drop special event + * + * @param {HTMLElement} el + * @param {Function} onHover + * @param {Function} onDrop + */ + api.event.dnd = function (el, onHover, onDrop){ + var _id, _type; + + if( !onDrop ){ + onDrop = onHover; + onHover = api.F; + } + + if( FileReader ){ + // Hover + _on(el, 'dragenter dragleave dragover', onHover.ff = onHover.ff || function (evt){ + var + types = _getDataTransfer(evt).types + , i = types && types.length + , debounceTrigger = false + ; + + while( i-- ){ + if( ~types[i].indexOf('File') ){ + evt[preventDefault](); + + if( _type !== evt.type ){ + _type = evt.type; // Store current type of event + + if( _type != 'dragleave' ){ + onHover.call(evt[currentTarget], true, evt); + } + + debounceTrigger = true; + } + + break; // exit from "while" + } + } + + if( debounceTrigger ){ + clearTimeout(_id); + _id = setTimeout(function (){ + onHover.call(evt[currentTarget], _type != 'dragleave', evt); + }, 50); + } + }); + + + // Drop + _on(el, 'drop', onDrop.ff = onDrop.ff || function (evt){ + evt[preventDefault](); + + _type = 0; + onHover.call(evt[currentTarget], false, evt); + + api.getDropFiles(evt, function (files, all){ + onDrop.call(evt[currentTarget], files, all, evt); + }); + }); + } + else { + api.log("Drag'n'Drop -- not supported"); + } + }; + + + /** + * Remove drag'n'drop + * @param {HTMLElement} el + * @param {Function} onHover + * @param {Function} onDrop + */ + api.event.dnd.off = function (el, onHover, onDrop){ + _off(el, 'dragenter dragleave dragover', onHover.ff); + _off(el, 'drop', onDrop.ff); + }; + + + // Support jQuery + if( jQuery && !jQuery.fn.dnd ){ + jQuery.fn.dnd = function (onHover, onDrop){ + return this.each(function (){ + api.event.dnd(this, onHover, onDrop); + }); + }; + + jQuery.fn.offdnd = function (onHover, onDrop){ + return this.each(function (){ + api.event.dnd.off(this, onHover, onDrop); + }); + }; + } + + // @export + window.FileAPI = _extend(api, window.FileAPI); + + + // Debug info + api.log('FileAPI: ' + api.version); + api.log('protocol: ' + window.location.protocol); + api.log('doctype: [' + doctype.name + '] ' + doctype.publicId + ' ' + doctype.systemId); + + + // @detect 'x-ua-compatible' + _each(document.getElementsByTagName('meta'), function (meta){ + if( /x-ua-compatible/i.test(meta.getAttribute('http-equiv')) ){ + api.log('meta.http-equiv: ' + meta.getAttribute('content')); + } + }); + + + // Configuration + try { + _supportConsoleLog = !!console.log; + _supportConsoleLogApply = !!console.log.apply; + } + catch (err) {} + + if( !api.flashUrl ){ api.flashUrl = api.staticPath + 'FileAPI.flash.swf'; } + if( !api.flashImageUrl ){ api.flashImageUrl = api.staticPath + 'FileAPI.flash.image.swf'; } + if( !api.flashWebcamUrl ){ api.flashWebcamUrl = api.staticPath + 'FileAPI.flash.camera.swf'; } +})(window, void 0); + +/*global window, FileAPI, document */ + +(function (api, document, undef) { + 'use strict'; + + var + min = Math.min, + round = Math.round, + getCanvas = function () { return document.createElement('canvas'); }, + support = false, + exifOrientation = { + 8: 270 + , 3: 180 + , 6: 90 + , 7: 270 + , 4: 180 + , 5: 90 + } + ; + + try { + support = getCanvas().toDataURL('image/png').indexOf('data:image/png') > -1; + } + catch (e){} + + + function Image(file){ + if( file instanceof Image ){ + var img = new Image(file.file); + api.extend(img.matrix, file.matrix); + return img; + } + else if( !(this instanceof Image) ){ + return new Image(file); + } + + this.file = file; + this.size = file.size || 100; + + this.matrix = { + sx: 0, + sy: 0, + sw: 0, + sh: 0, + dx: 0, + dy: 0, + dw: 0, + dh: 0, + resize: 0, // min, max OR preview + deg: 0, + quality: 1, // jpeg quality + filter: 0 + }; + } + + + Image.prototype = { + image: true, + constructor: Image, + + set: function (attrs){ + api.extend(this.matrix, attrs); + return this; + }, + + crop: function (x, y, w, h){ + if( w === undef ){ + w = x; + h = y; + x = y = 0; + } + return this.set({ sx: x, sy: y, sw: w, sh: h || w }); + }, + + resize: function (w, h, strategy){ + if( /min|max|height|width/.test(h) ){ + strategy = h; + h = w; + } + + return this.set({ dw: w, dh: h || w, resize: strategy }); + }, + + preview: function (w, h){ + return this.resize(w, h || w, 'preview'); + }, + + rotate: function (deg){ + return this.set({ deg: deg }); + }, + + filter: function (filter){ + return this.set({ filter: filter }); + }, + + overlay: function (images){ + return this.set({ overlay: images }); + }, + + clone: function (){ + return new Image(this); + }, + + _load: function (image, fn){ + var self = this; + + if( /img|video/i.test(image.nodeName) ){ + fn.call(self, null, image); + } + else { + api.readAsImage(image, function (evt){ + fn.call(self, evt.type != 'load', evt.result); + }); + } + }, + + _apply: function (image, fn){ + var + canvas = getCanvas() + , m = this.getMatrix(image) + , ctx = canvas.getContext('2d') + , width = image.videoWidth || image.width + , height = image.videoHeight || image.height + , deg = m.deg + , dw = m.dw + , dh = m.dh + , w = width + , h = height + , filter = m.filter + , copy // canvas copy + , buffer = image + , overlay = m.overlay + , queue = api.queue(function (){ image.src = api.EMPTY_PNG; fn(false, canvas); }) + , renderImageToCanvas = api.renderImageToCanvas + ; + + // Normalize angle + deg = deg - Math.floor(deg/360)*360; + + // For `renderImageToCanvas` + image._type = this.file.type; + + while(m.multipass && min(w/dw, h/dh) > 2 ){ + w = (w/2 + 0.5)|0; + h = (h/2 + 0.5)|0; + + copy = getCanvas(); + copy.width = w; + copy.height = h; + + if( buffer !== image ){ + renderImageToCanvas(copy, buffer, 0, 0, buffer.width, buffer.height, 0, 0, w, h); + buffer = copy; + } + else { + buffer = copy; + renderImageToCanvas(buffer, image, m.sx, m.sy, m.sw, m.sh, 0, 0, w, h); + m.sx = m.sy = m.sw = m.sh = 0; + } + } + + + canvas.width = (deg % 180) ? dh : dw; + canvas.height = (deg % 180) ? dw : dh; + + canvas.type = m.type; + canvas.quality = m.quality; + + ctx.rotate(deg * Math.PI / 180); + renderImageToCanvas(ctx.canvas, buffer + , m.sx, m.sy + , m.sw || buffer.width + , m.sh || buffer.height + , (deg == 180 || deg == 270 ? -dw : 0) + , (deg == 90 || deg == 180 ? -dh : 0) + , dw, dh + ); + dw = canvas.width; + dh = canvas.height; + + // Apply overlay + overlay && api.each([].concat(overlay), function (over){ + queue.inc(); + // preload + var img = new window.Image, fn = function (){ + var + x = over.x|0 + , y = over.y|0 + , w = over.w || img.width + , h = over.h || img.height + , rel = over.rel + ; + + // center | right | left + x = (rel == 1 || rel == 4 || rel == 7) ? (dw - w + x)/2 : (rel == 2 || rel == 5 || rel == 8 ? dw - (w + x) : x); + + // center | bottom | top + y = (rel == 3 || rel == 4 || rel == 5) ? (dh - h + y)/2 : (rel >= 6 ? dh - (h + y) : y); + + api.event.off(img, 'error load abort', fn); + + try { + ctx.globalAlpha = over.opacity || 1; + ctx.drawImage(img, x, y, w, h); + } + catch (er){} + + queue.next(); + }; + + api.event.on(img, 'error load abort', fn); + img.src = over.src; + + if( img.complete ){ + fn(); + } + }); + + if( filter ){ + queue.inc(); + Image.applyFilter(canvas, filter, queue.next); + } + + queue.check(); + }, + + getMatrix: function (image){ + var + m = api.extend({}, this.matrix) + , sw = m.sw = m.sw || image.videoWidth || image.naturalWidth || image.width + , sh = m.sh = m.sh || image.videoHeight || image.naturalHeight || image.height + , dw = m.dw = m.dw || sw + , dh = m.dh = m.dh || sh + , sf = sw/sh, df = dw/dh + , strategy = m.resize + ; + + if( strategy == 'preview' ){ + if( dw != sw || dh != sh ){ + // Make preview + var w, h; + + if( df >= sf ){ + w = sw; + h = w / df; + } else { + h = sh; + w = h * df; + } + + if( w != sw || h != sh ){ + m.sx = ~~((sw - w)/2); + m.sy = ~~((sh - h)/2); + sw = w; + sh = h; + } + } + } + else if( strategy == 'height' ){ + dw = dh * sf; + } + else if( strategy == 'width' ){ + dh = dw / sf; + } + else if( strategy ){ + if( !(sw > dw || sh > dh) ){ + dw = sw; + dh = sh; + } + else if( strategy == 'min' ){ + dw = round(sf < df ? min(sw, dw) : dh*sf); + dh = round(sf < df ? dw/sf : min(sh, dh)); + } + else { + dw = round(sf >= df ? min(sw, dw) : dh*sf); + dh = round(sf >= df ? dw/sf : min(sh, dh)); + } + } + + m.sw = sw; + m.sh = sh; + m.dw = dw; + m.dh = dh; + m.multipass = api.multiPassResize; + return m; + }, + + _trans: function (fn){ + this._load(this.file, function (err, image){ + if( err ){ + fn(err); + } + else { + try { + this._apply(image, fn); + } catch (err){ + api.log('[err] FileAPI.Image.fn._apply:', err); + fn(err); + } + } + }); + }, + + + get: function (fn){ + if( api.support.transform ){ + var _this = this, matrix = _this.matrix; + + if( matrix.deg == 'auto' ){ + api.getInfo(_this.file, function (err, info){ + // rotate by exif orientation + matrix.deg = exifOrientation[info && info.exif && info.exif.Orientation] || 0; + _this._trans(fn); + }); + } + else { + _this._trans(fn); + } + } + else { + fn('not_support_transform'); + } + + return this; + }, + + + toData: function (fn){ + return this.get(fn); + } + + }; + + + Image.exifOrientation = exifOrientation; + + + Image.transform = function (file, transform, autoOrientation, fn){ + function _transform(err, img){ + // img -- info object + var + images = {} + , queue = api.queue(function (err){ + fn(err, images); + }) + ; + + if( !err ){ + api.each(transform, function (params, name){ + if( !queue.isFail() ){ + var ImgTrans = new Image(img.nodeType ? img : file), isFn = typeof params == 'function'; + + if( isFn ){ + params(img, ImgTrans); + } + else if( params.width ){ + ImgTrans[params.preview ? 'preview' : 'resize'](params.width, params.height, params.strategy); + } + else { + if( params.maxWidth && (img.width > params.maxWidth || img.height > params.maxHeight) ){ + ImgTrans.resize(params.maxWidth, params.maxHeight, 'max'); + } + } + + if( params.crop ){ + var crop = params.crop; + ImgTrans.crop(crop.x|0, crop.y|0, crop.w || crop.width, crop.h || crop.height); + } + + if( params.rotate === undef && autoOrientation ){ + params.rotate = 'auto'; + } + + ImgTrans.set({ type: ImgTrans.matrix.type || params.type || file.type || 'image/png' }); + + if( !isFn ){ + ImgTrans.set({ + deg: params.rotate + , overlay: params.overlay + , filter: params.filter + , quality: params.quality || 1 + }); + } + + queue.inc(); + ImgTrans.toData(function (err, image){ + if( err ){ + queue.fail(); + } + else { + images[name] = image; + queue.next(); + } + }); + } + }); + } + else { + queue.fail(); + } + } + + + // @todo: Оло-ло, нужно рефакторить это место + if( file.width ){ + _transform(false, file); + } else { + api.getInfo(file, _transform); + } + }; + + + // @const + api.each(['TOP', 'CENTER', 'BOTTOM'], function (x, i){ + api.each(['LEFT', 'CENTER', 'RIGHT'], function (y, j){ + Image[x+'_'+y] = i*3 + j; + Image[y+'_'+x] = i*3 + j; + }); + }); + + + /** + * Trabsform element to canvas + * + * @param {Image|HTMLVideoElement} el + * @returns {Canvas} + */ + Image.toCanvas = function(el){ + var canvas = document.createElement('canvas'); + canvas.width = el.videoWidth || el.width; + canvas.height = el.videoHeight || el.height; + canvas.getContext('2d').drawImage(el, 0, 0); + return canvas; + }; + + + /** + * Create image from DataURL + * @param {String} dataURL + * @param {Object} size + * @param {Function} callback + */ + Image.fromDataURL = function (dataURL, size, callback){ + var img = api.newImage(dataURL); + api.extend(img, size); + callback(img); + }; + + + /** + * Apply filter (caman.js) + * + * @param {Canvas|Image} canvas + * @param {String|Function} filter + * @param {Function} doneFn + */ + Image.applyFilter = function (canvas, filter, doneFn){ + if( typeof filter == 'function' ){ + filter(canvas, doneFn); + } + else if( window.Caman ){ + // http://camanjs.com/guides/ + window.Caman(canvas.tagName == 'IMG' ? Image.toCanvas(canvas) : canvas, function (){ + if( typeof filter == 'string' ){ + this[filter](); + } + else { + api.each(filter, function (val, method){ + this[method](val); + }, this); + } + this.render(doneFn); + }); + } + }; + + + /** + * For load-image-ios.js + */ + api.renderImageToCanvas = function (canvas, img, sx, sy, sw, sh, dx, dy, dw, dh){ + try { + return canvas.getContext('2d').drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh); + } catch (ex) { + api.log('renderImageToCanvas failed'); + throw ex; + } + }; + + + // @export + api.support.canvas = api.support.transform = support; + api.Image = Image; +})(FileAPI, document); + +/* + * JavaScript Load Image iOS scaling fixes 1.0.3 + * https://github.com/blueimp/JavaScript-Load-Image + * + * Copyright 2013, Sebastian Tschan + * https://blueimp.net + * + * iOS image scaling fixes based on + * https://github.com/stomita/ios-imagefile-megapixel + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +/*jslint nomen: true, bitwise: true */ +/*global FileAPI, window, document */ + +(function (factory) { + 'use strict'; + factory(FileAPI); +}(function (loadImage) { + 'use strict'; + + // Only apply fixes on the iOS platform: + if (!window.navigator || !window.navigator.platform || + !(/iP(hone|od|ad)/).test(window.navigator.platform)) { + return; + } + + var originalRenderMethod = loadImage.renderImageToCanvas; + + // Detects subsampling in JPEG images: + loadImage.detectSubsampling = function (img) { + var canvas, + context; + if (img.width * img.height > 1024 * 1024) { // only consider mexapixel images + canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + context = canvas.getContext('2d'); + context.drawImage(img, -img.width + 1, 0); + // subsampled image becomes half smaller in rendering size. + // check alpha channel value to confirm image is covering edge pixel or not. + // if alpha value is 0 image is not covering, hence subsampled. + return context.getImageData(0, 0, 1, 1).data[3] === 0; + } + return false; + }; + + // Detects vertical squash in JPEG images: + loadImage.detectVerticalSquash = function (img, subsampled) { + var naturalHeight = img.naturalHeight || img.height, + canvas = document.createElement('canvas'), + context = canvas.getContext('2d'), + data, + sy, + ey, + py, + alpha; + if (subsampled) { + naturalHeight /= 2; + } + canvas.width = 1; + canvas.height = naturalHeight; + context.drawImage(img, 0, 0); + data = context.getImageData(0, 0, 1, naturalHeight).data; + // search image edge pixel position in case it is squashed vertically: + sy = 0; + ey = naturalHeight; + py = naturalHeight; + while (py > sy) { + alpha = data[(py - 1) * 4 + 3]; + if (alpha === 0) { + ey = py; + } else { + sy = py; + } + py = (ey + sy) >> 1; + } + return (py / naturalHeight) || 1; + }; + + // Renders image to canvas while working around iOS image scaling bugs: + // https://github.com/blueimp/JavaScript-Load-Image/issues/13 + loadImage.renderImageToCanvas = function ( + canvas, + img, + sourceX, + sourceY, + sourceWidth, + sourceHeight, + destX, + destY, + destWidth, + destHeight + ) { + if (img._type === 'image/jpeg') { + var context = canvas.getContext('2d'), + tmpCanvas = document.createElement('canvas'), + tileSize = 1024, + tmpContext = tmpCanvas.getContext('2d'), + subsampled, + vertSquashRatio, + tileX, + tileY; + tmpCanvas.width = tileSize; + tmpCanvas.height = tileSize; + context.save(); + subsampled = loadImage.detectSubsampling(img); + if (subsampled) { + sourceX /= 2; + sourceY /= 2; + sourceWidth /= 2; + sourceHeight /= 2; + } + vertSquashRatio = loadImage.detectVerticalSquash(img, subsampled); + if (subsampled || vertSquashRatio !== 1) { + sourceY *= vertSquashRatio; + destWidth = Math.ceil(tileSize * destWidth / sourceWidth); + destHeight = Math.ceil( + tileSize * destHeight / sourceHeight / vertSquashRatio + ); + destY = 0; + tileY = 0; + while (tileY < sourceHeight) { + destX = 0; + tileX = 0; + while (tileX < sourceWidth) { + tmpContext.clearRect(0, 0, tileSize, tileSize); + tmpContext.drawImage( + img, + sourceX, + sourceY, + sourceWidth, + sourceHeight, + -tileX, + -tileY, + sourceWidth, + sourceHeight + ); + context.drawImage( + tmpCanvas, + 0, + 0, + tileSize, + tileSize, + destX, + destY, + destWidth, + destHeight + ); + tileX += tileSize; + destX += destWidth; + } + tileY += tileSize; + destY += destHeight; + } + context.restore(); + return canvas; + } + } + return originalRenderMethod( + canvas, + img, + sourceX, + sourceY, + sourceWidth, + sourceHeight, + destX, + destY, + destWidth, + destHeight + ); + }; + +})); + +/*global window, FileAPI */ + +(function (api, window){ + "use strict"; + + var + document = window.document + , FormData = window.FormData + , Form = function (){ this.items = []; } + , encodeURIComponent = window.encodeURIComponent + ; + + + Form.prototype = { + + append: function (name, blob, file, type){ + this.items.push({ + name: name + , blob: blob && blob.blob || (blob == void 0 ? '' : blob) + , file: blob && (file || blob.name) + , type: blob && (type || blob.type) + }); + }, + + each: function (fn){ + var i = 0, n = this.items.length; + for( ; i < n; i++ ){ + fn.call(this, this.items[i]); + } + }, + + toData: function (fn, options){ + // allow chunked transfer if we have only one file to send + // flag is used below and in XHR._send + options._chunked = api.support.chunked && options.chunkSize > 0 && api.filter(this.items, function (item){ return item.file; }).length == 1; + + if( !api.support.html5 ){ + api.log('FileAPI.Form.toHtmlData'); + this.toHtmlData(fn); + } + else if( !api.formData || this.multipart || !FormData ){ + api.log('FileAPI.Form.toMultipartData'); + this.toMultipartData(fn); + } + else if( options._chunked ){ + api.log('FileAPI.Form.toPlainData'); + this.toPlainData(fn); + } + else { + api.log('FileAPI.Form.toFormData'); + this.toFormData(fn); + } + }, + + _to: function (data, complete, next, arg){ + var queue = api.queue(function (){ + complete(data); + }); + + this.each(function (file){ + try{ + next(file, data, queue, arg); + } + catch( err ){ + api.log('FileAPI.Form._to: ' + err.message); + complete(err); + } + }); + + queue.check(); + }, + + + toHtmlData: function (fn){ + this._to(document.createDocumentFragment(), fn, function (file, data/**DocumentFragment*/){ + var blob = file.blob, hidden; + + if( file.file ){ + api.reset(blob, true); + // set new name + blob.name = file.name; + blob.disabled = false; + data.appendChild(blob); + } + else { + hidden = document.createElement('input'); + hidden.name = file.name; + hidden.type = 'hidden'; + hidden.value = blob; + data.appendChild(hidden); + } + }); + }, + + toPlainData: function (fn){ + this._to({}, fn, function (file, data, queue){ + if( file.file ){ + data.type = file.file; + } + + if( file.blob.toBlob ){ + // canvas + queue.inc(); + _convertFile(file, function (file, blob){ + data.name = file.name; + data.file = blob; + data.size = blob.length; + data.type = file.type; + queue.next(); + }); + } + else if( file.file ){ + // file + data.name = file.blob.name; + data.file = file.blob; + data.size = file.blob.size; + data.type = file.type; + } + else { + // additional data + if( !data.params ){ + data.params = []; + } + data.params.push(encodeURIComponent(file.name) +"="+ encodeURIComponent(file.blob)); + } + + data.start = -1; + data.end = data.file && data.file.FileAPIReadPosition || -1; + data.retry = 0; + }); + }, + + toFormData: function (fn){ + this._to(new FormData, fn, function (file, data, queue){ + if( file.blob && file.blob.toBlob ){ + queue.inc(); + _convertFile(file, function (file, blob){ + data.append(file.name, blob, file.file); + queue.next(); + }); + } + else if( file.file ){ + data.append(file.name, file.blob, file.file); + } + else { + data.append(file.name, file.blob); + } + + if( file.file ){ + data.append('_'+file.name, file.file); + } + }); + }, + + + toMultipartData: function (fn){ + this._to([], fn, function (file, data, queue, boundary){ + queue.inc(); + _convertFile(file, function (file, blob){ + data.push( + '--_' + boundary + ('\r\nContent-Disposition: form-data; name="'+ file.name +'"'+ (file.file ? '; filename="'+ encodeURIComponent(file.file) +'"' : '') + + (file.file ? '\r\nContent-Type: '+ (file.type || 'application/octet-stream') : '') + + '\r\n' + + '\r\n'+ (file.file ? blob : encodeURIComponent(blob)) + + '\r\n') + ); + queue.next(); + }, true); + }, api.expando); + } + }; + + + function _convertFile(file, fn, useBinaryString){ + var blob = file.blob, filename = file.file; + + if( filename ){ + if( !blob.toDataURL ){ + // The Blob is not an image. + api.readAsBinaryString(blob, function (evt){ + if( evt.type == 'load' ){ + fn(file, evt.result); + } + }); + return; + } + + var + mime = { 'image/jpeg': '.jpe?g', 'image/png': '.png' } + , type = mime[file.type] ? file.type : 'image/png' + , ext = mime[type] || '.png' + , quality = blob.quality || 1 + ; + + if( !filename.match(new RegExp(ext+'$', 'i')) ){ + // Does not change the current extension, but add a new one. + filename += ext.replace('?', ''); + } + + file.file = filename; + file.type = type; + + if( !useBinaryString && blob.toBlob ){ + blob.toBlob(function (blob){ + fn(file, blob); + }, type, quality); + } + else { + fn(file, api.toBinaryString(blob.toDataURL(type, quality))); + } + } + else { + fn(file, blob); + } + } + + + // @export + api.Form = Form; +})(FileAPI, window); + +/*global window, FileAPI, Uint8Array */ + +(function (window, api){ + "use strict"; + + var + noop = function (){} + , document = window.document + + , XHR = function (options){ + this.uid = api.uid(); + this.xhr = { + abort: noop + , getResponseHeader: noop + , getAllResponseHeaders: noop + }; + this.options = options; + }, + + _xhrResponsePostfix = { '': 1, XML: 1, Text: 1, Body: 1 } + ; + + + XHR.prototype = { + status: 0, + statusText: '', + constructor: XHR, + + getResponseHeader: function (name){ + return this.xhr.getResponseHeader(name); + }, + + getAllResponseHeaders: function (){ + return this.xhr.getAllResponseHeaders() || {}; + }, + + end: function (status, statusText){ + var _this = this, options = _this.options; + + _this.end = + _this.abort = noop; + _this.status = status; + + if( statusText ){ + _this.statusText = statusText; + } + + api.log('xhr.end:', status, statusText); + options.complete(status == 200 || status == 201 ? false : _this.statusText || 'unknown', _this); + + if( _this.xhr && _this.xhr.node ){ + setTimeout(function (){ + var node = _this.xhr.node; + try { node.parentNode.removeChild(node); } catch (e){} + try { delete window[_this.uid]; } catch (e){} + window[_this.uid] = _this.xhr.node = null; + }, 9); + } + }, + + abort: function (){ + this.end(0, 'abort'); + + if( this.xhr ){ + this.xhr.aborted = true; + this.xhr.abort(); + } + }, + + send: function (FormData){ + var _this = this, options = this.options; + + FormData.toData(function (data){ + if( data instanceof Error ){ + _this.end(0, data.message); + } + else{ + // Start uploading + options.upload(options, _this); + _this._send.call(_this, options, data); + } + }, options); + }, + + _send: function (options, data){ + var _this = this, xhr, uid = _this.uid, onLoadFnName = _this.uid + "Load", url = options.url; + + api.log('XHR._send:', data); + + if( !options.cache ){ + // No cache + url += (~url.indexOf('?') ? '&' : '?') + api.uid(); + } + + if( data.nodeName ){ + var jsonp = options.jsonp; + + // prepare callback in GET + url = url.replace(/([a-z]+)=(\?)/i, '$1='+uid); + + // legacy + options.upload(options, _this); + + var + onPostMessage = function (evt){ + if( ~url.indexOf(evt.origin) ){ + try { + var result = api.parseJSON(evt.data); + if( result.id == uid ){ + complete(result.status, result.statusText, result.response); + } + } catch( err ){ + complete(0, err.message); + } + } + }, + + // jsonp-callack + complete = window[uid] = function (status, statusText, response){ + _this.readyState = 4; + _this.responseText = response; + _this.end(status, statusText); + + api.event.off(window, 'message', onPostMessage); + window[uid] = xhr = transport = window[onLoadFnName] = null; + } + ; + + _this.xhr.abort = function (){ + try { + if( transport.stop ){ transport.stop(); } + else if( transport.contentWindow.stop ){ transport.contentWindow.stop(); } + else { transport.contentWindow.document.execCommand('Stop'); } + } + catch (er) {} + complete(0, "abort"); + }; + + api.event.on(window, 'message', onPostMessage); + + window[onLoadFnName] = function (){ + try { + var + win = transport.contentWindow + , doc = win.document + , result = win.result || api.parseJSON(doc.body.innerHTML) + ; + complete(result.status, result.statusText, result.response); + } catch (e){ + api.log('[transport.onload]', e); + } + }; + + xhr = document.createElement('div'); + xhr.innerHTML = '
          ' + + '' + + (jsonp && (options.url.indexOf('=?') < 0) ? '' : '') + + '
          ' + ; + + // get form-data & transport + var + form = xhr.getElementsByTagName('form')[0] + , transport = xhr.getElementsByTagName('iframe')[0] + ; + + form.appendChild(data); + + api.log(form.parentNode.innerHTML); + + // append to DOM + document.body.appendChild(xhr); + + // keep a reference to node-transport + _this.xhr.node = xhr; + + // send + _this.readyState = 2; // loaded + try { + form.submit(); + } catch (err) { + api.log('iframe.error: ' + err); + } + form = null; + } + else { + // Clean url + url = url.replace(/([a-z]+)=(\?)&?/i, ''); + + // html5 + if (this.xhr && this.xhr.aborted) { + api.log("Error: already aborted"); + return; + } + xhr = _this.xhr = api.getXHR(); + + if (data.params) { + url += (url.indexOf('?') < 0 ? "?" : "&") + data.params.join("&"); + } + + xhr.open('POST', url, true); + + if( api.withCredentials ){ + xhr.withCredentials = "true"; + } + + if( !options.headers || !options.headers['X-Requested-With'] ){ + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + + api.each(options.headers, function (val, key){ + xhr.setRequestHeader(key, val); + }); + + + if ( options._chunked ) { + // chunked upload + if( xhr.upload ){ + xhr.upload.addEventListener('progress', api.throttle(function (/**Event*/evt){ + if (!data.retry) { + // show progress only for correct chunk uploads + options.progress({ + type: evt.type + , total: data.size + , loaded: data.start + evt.loaded + , totalSize: data.size + }, _this, options); + } + }, 100), false); + } + + xhr.onreadystatechange = function (){ + var lkb = parseInt(xhr.getResponseHeader('X-Last-Known-Byte'), 10); + + _this.status = xhr.status; + _this.statusText = xhr.statusText; + _this.readyState = xhr.readyState; + + if( xhr.readyState == 4 ){ + for( var k in _xhrResponsePostfix ){ + _this['response'+k] = xhr['response'+k]; + } + xhr.onreadystatechange = null; + + if (!xhr.status || xhr.status - 201 > 0) { + api.log("Error: " + xhr.status); + // some kind of error + // 0 - connection fail or timeout, if xhr.aborted is true, then it's not recoverable user action + // up - server error + if (((!xhr.status && !xhr.aborted) || 500 == xhr.status || 416 == xhr.status) && ++data.retry <= options.chunkUploadRetry) { + // let's try again the same chunk + // only applicable for recoverable error codes 500 && 416 + var delay = xhr.status ? 0 : api.chunkNetworkDownRetryTimeout; + + // inform about recoverable problems + options.pause(data.file, options); + + // smart restart if server reports about the last known byte + api.log("X-Last-Known-Byte: " + lkb); + if (lkb) { + data.end = lkb; + } else { + data.end = data.start - 1; + if (416 == xhr.status) { + data.end = data.end - options.chunkSize; + } + } + + setTimeout(function () { + _this._send(options, data); + }, delay); + } else { + // no mo retries + _this.end(xhr.status); + } + } else { + // success + data.retry = 0; + + if (data.end == data.size - 1) { + // finished + _this.end(xhr.status); + } else { + // next chunk + + // shift position if server reports about the last known byte + api.log("X-Last-Known-Byte: " + lkb); + if (lkb) { + data.end = lkb; + } + data.file.FileAPIReadPosition = data.end; + + setTimeout(function () { + _this._send(options, data); + }, 0); + } + } + + xhr = null; + } + }; + + data.start = data.end + 1; + data.end = Math.max(Math.min(data.start + options.chunkSize, data.size) - 1, data.start); + + // Retrieve a slice of file + var + file = data.file + , slice = (file.slice || file.mozSlice || file.webkitSlice).call(file, data.start, data.end + 1) + ; + + if( data.size && !slice.size ){ + setTimeout(function (){ + _this.end(-1); + }); + } else { + xhr.setRequestHeader("Content-Range", "bytes " + data.start + "-" + data.end + "/" + data.size); + xhr.setRequestHeader("Content-Disposition", 'attachment; filename=' + encodeURIComponent(data.name)); + xhr.setRequestHeader("Content-Type", data.type || "application/octet-stream"); + + xhr.send(slice); + } + + file = slice = null; + } else { + // single piece upload + if( xhr.upload ){ + // https://github.com/blueimp/jQuery-File-Upload/wiki/Fixing-Safari-hanging-on-very-high-speed-connections-%281Gbps%29 + xhr.upload.addEventListener('progress', api.throttle(function (/**Event*/evt){ + options.progress(evt, _this, options); + }, 100), false); + } + + xhr.onreadystatechange = function (){ + _this.status = xhr.status; + _this.statusText = xhr.statusText; + _this.readyState = xhr.readyState; + + if( xhr.readyState == 4 ){ + for( var k in _xhrResponsePostfix ){ + _this['response'+k] = xhr['response'+k]; + } + xhr.onreadystatechange = null; + + if (!xhr.status || xhr.status > 201) { + api.log("Error: " + xhr.status); + if (((!xhr.status && !xhr.aborted) || 500 == xhr.status) && (options.retry || 0) < options.uploadRetry) { + options.retry = (options.retry || 0) + 1; + var delay = api.networkDownRetryTimeout; + + // inform about recoverable problems + options.pause(options.file, options); + + setTimeout(function () { + _this._send(options, data); + }, delay); + } else { + //success + _this.end(xhr.status); + } + } else { + //success + _this.end(xhr.status); + } + + xhr = null; + } + }; + + if( api.isArray(data) ){ + // multipart + xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=_'+api.expando); + var rawData = data.join('') +'--_'+ api.expando +'--'; + + /** @namespace xhr.sendAsBinary https://developer.mozilla.org/ru/XMLHttpRequest#Sending_binary_content */ + if( xhr.sendAsBinary ){ + xhr.sendAsBinary(rawData); + } + else { + var bytes = Array.prototype.map.call(rawData, function(c){ return c.charCodeAt(0) & 0xff; }); + xhr.send(new Uint8Array(bytes).buffer); + + } + } else { + // FormData + xhr.send(data); + } + } + } + } + }; + + + // @export + api.XHR = XHR; +})(window, FileAPI); + +/** + * @class FileAPI.Camera + * @author RubaXa + * @support Chrome 21+, FF 18+, Opera 12+ + */ + +/*global window, FileAPI, jQuery */ +/** @namespace LocalMediaStream -- https://developer.mozilla.org/en-US/docs/WebRTC/MediaStream_API#LocalMediaStream */ +(function (window, api){ + "use strict"; + + var + URL = window.URL || window.webkitURL, + + document = window.document, + navigator = window.navigator, + + getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia, + + html5 = !!getMedia + ; + + + // Support "media" + api.support.media = html5; + + + var Camera = function (video){ + this.video = video; + }; + + + Camera.prototype = { + isActive: function (){ + return !!this._active; + }, + + + /** + * Start camera streaming + * @param {Function} callback + */ + start: function (callback){ + var + _this = this + , video = _this.video + , _successId + , _failId + , _complete = function (err){ + _this._active = !err; + clearTimeout(_failId); + clearTimeout(_successId); +// api.event.off(video, 'loadedmetadata', _complete); + callback && callback(err, _this); + } + ; + + getMedia.call(navigator, { video: true }, function (stream/**LocalMediaStream*/){ + // Success + _this.stream = stream; + +// api.event.on(video, 'loadedmetadata', function (){ +// _complete(null); +// }); + + // Set camera stream + video.src = URL.createObjectURL(stream); + + // Note: onloadedmetadata doesn't fire in Chrome when using it with getUserMedia. + // See crbug.com/110938. + _successId = setInterval(function (){ + if( _detectVideoSignal(video) ){ + _complete(null); + } + }, 1000); + + _failId = setTimeout(function (){ + _complete('timeout'); + }, 5000); + + // Go-go-go! + video.play(); + }, _complete/*error*/); + }, + + + /** + * Stop camera streaming + */ + stop: function (){ + try { + this._active = false; + this.video.pause(); + + try { + this.stream.stop(); + } catch (err) { + api.each(this.stream.getTracks(), function (track) { + track.stop(); + }); + } + + this.stream = null; + } catch( err ){ + api.log('[FileAPI.Camera] stop:', err); + } + }, + + + /** + * Create screenshot + * @return {FileAPI.Camera.Shot} + */ + shot: function (){ + return new Shot(this.video); + } + }; + + + /** + * Get camera element from container + * + * @static + * @param {HTMLElement} el + * @return {Camera} + */ + Camera.get = function (el){ + return new Camera(el.firstChild); + }; + + + /** + * Publish camera element into container + * + * @static + * @param {HTMLElement} el + * @param {Object} options + * @param {Function} [callback] + */ + Camera.publish = function (el, options, callback){ + if( typeof options == 'function' ){ + callback = options; + options = {}; + } + + // Dimensions of "camera" + options = api.extend({}, { + width: '100%' + , height: '100%' + , start: true + }, options); + + + if( el.jquery ){ + // Extract first element, from jQuery collection + el = el[0]; + } + + + var doneFn = function (err){ + if( err ){ + callback(err); + } + else { + // Get camera + var cam = Camera.get(el); + if( options.start ){ + cam.start(callback); + } + else { + callback(null, cam); + } + } + }; + + + el.style.width = _px(options.width); + el.style.height = _px(options.height); + + + if( api.html5 && html5 ){ + // Create video element + var video = document.createElement('video'); + + // Set dimensions + video.style.width = _px(options.width); + video.style.height = _px(options.height); + + // Clean container + if( window.jQuery ){ + jQuery(el).empty(); + } else { + el.innerHTML = ''; + } + + // Add "camera" to container + el.appendChild(video); + + // end + doneFn(); + } + else { + Camera.fallback(el, options, doneFn); + } + }; + + + Camera.fallback = function (el, options, callback){ + callback('not_support_camera'); + }; + + + /** + * @class FileAPI.Camera.Shot + */ + var Shot = function (video){ + var canvas = video.nodeName ? api.Image.toCanvas(video) : video; + var shot = api.Image(canvas); + shot.type = 'image/png'; + shot.width = canvas.width; + shot.height = canvas.height; + shot.size = canvas.width * canvas.height * 4; + return shot; + }; + + + /** + * Add "px" postfix, if value is a number + * + * @private + * @param {*} val + * @return {String} + */ + function _px(val){ + return val >= 0 ? val + 'px' : val; + } + + + /** + * @private + * @param {HTMLVideoElement} video + * @return {Boolean} + */ + function _detectVideoSignal(video){ + var canvas = document.createElement('canvas'), ctx, res = false; + try { + ctx = canvas.getContext('2d'); + ctx.drawImage(video, 0, 0, 1, 1); + res = ctx.getImageData(0, 0, 1, 1).data[4] != 255; + } + catch( err ){ + api.log('[FileAPI.Camera] detectVideoSignal:', err); + } + return res; + } + + + // @export + Camera.Shot = Shot; + api.Camera = Camera; +})(window, FileAPI); + +/** + * FileAPI fallback to Flash + * + * @flash-developer "Vladimir Demidov" + */ + +/*global window, ActiveXObject, FileAPI */ +(function (window, jQuery, api) { + "use strict"; + + var + document = window.document + , location = window.location + , navigator = window.navigator + , _each = api.each + ; + + + api.support.flash = (function (){ + var mime = navigator.mimeTypes, has = false; + + if( navigator.plugins && typeof navigator.plugins['Shockwave Flash'] == 'object' ){ + has = navigator.plugins['Shockwave Flash'].description && !(mime && mime['application/x-shockwave-flash'] && !mime['application/x-shockwave-flash'].enabledPlugin); + } + else { + try { + has = !!(window.ActiveXObject && new ActiveXObject('ShockwaveFlash.ShockwaveFlash')); + } + catch(er){ + api.log('Flash -- does not supported.'); + } + } + + if( has && /^file:/i.test(location) ){ + api.log('[warn] Flash does not work on `file:` protocol.'); + } + + return has; + })(); + + + api.support.flash + && (0 + || !api.html5 || !api.support.html5 + || (api.cors && !api.support.cors) + || (api.media && !api.support.media) + ) + && (function (){ + var + _attr = api.uid() + , _retry = 0 + , _files = {} + , _rhttp = /^https?:/i + + , flash = { + _fn: {}, + + + /** + * Initialization & preload flash object + */ + init: function (){ + var child = document.body && document.body.firstChild; + + if( child ){ + do { + if( child.nodeType == 1 ){ + api.log('FlashAPI.state: awaiting'); + + var dummy = document.createElement('div'); + + dummy.id = '_' + _attr; + + _css(dummy, { + top: 1 + , right: 1 + , width: 5 + , height: 5 + , position: 'absolute' + , zIndex: 2147483647+'' // set max zIndex + }); + + child.parentNode.insertBefore(dummy, child); + flash.publish(dummy, _attr); + + return; + } + } + while( child = child.nextSibling ); + } + + if( _retry < 10 ){ + setTimeout(flash.init, ++_retry*50); + } + }, + + + /** + * Publish flash-object + * + * @param {HTMLElement} el + * @param {String} id + * @param {Object} [opts] + */ + publish: function (el, id, opts){ + opts = opts || {}; + el.innerHTML = _makeFlashHTML({ + id: id + , src: _getUrl(api.flashUrl, 'r=' + api.version) +// , src: _getUrl('http://v.demidov.boom.corp.mail.ru/uploaderfileapi/FlashFileAPI.swf?1') + , wmode: opts.camera ? '' : 'transparent' + , flashvars: 'callback=' + (opts.onEvent || 'FileAPI.Flash.onEvent') + + '&flashId='+ id + + '&storeKey='+ navigator.userAgent.match(/\d/ig).join('') +'_'+ api.version + + (flash.isReady || (api.pingUrl ? '&ping='+api.pingUrl : '')) + + '&timeout='+api.flashAbortTimeout + + (opts.camera ? '&useCamera=' + _getUrl(api.flashWebcamUrl) : '') + + '&debug='+(api.debug?"1":"") + }, opts); + }, + + + ready: function (){ + api.log('FlashAPI.state: ready'); + + flash.ready = api.F; + flash.isReady = true; + flash.patch(); + flash.patchCamera && flash.patchCamera(); + api.event.on(document, 'mouseover', flash.mouseover); + api.event.on(document, 'click', function (evt){ + if( flash.mouseover(evt) ){ + evt.preventDefault + ? evt.preventDefault() + : (evt.returnValue = true) + ; + } + }); + }, + + + getEl: function (){ + return document.getElementById('_'+_attr); + }, + + + getWrapper: function (node){ + do { + if( /js-fileapi-wrapper/.test(node.className) ){ + return node; + } + } + while( (node = node.parentNode) && (node !== document.body) ); + }, + + + mouseover: function (evt){ + var target = api.event.fix(evt).target; + + if( /input/i.test(target.nodeName) && target.type == 'file' && !target.disabled ){ + var + state = target.getAttribute(_attr) + , wrapper = flash.getWrapper(target) + ; + + if( api.multiFlash ){ + // check state: + // p — published + // i — initialization + // r — ready + if( state == 'i' || state == 'r' ){ + // publish fail + return false; + } + else if( state != 'p' ){ + // set "init" state + target.setAttribute(_attr, 'i'); + + var dummy = document.createElement('div'); + + if( !wrapper ){ + api.log('[err] FlashAPI.mouseover: js-fileapi-wrapper not found'); + return; + } + + _css(dummy, { + top: 0 + , left: 0 + , width: target.offsetWidth + , height: target.offsetHeight + , zIndex: 2147483647+'' // set max zIndex + , position: 'absolute' + }); + + wrapper.appendChild(dummy); + flash.publish(dummy, api.uid()); + + // set "publish" state + target.setAttribute(_attr, 'p'); + } + + return true; + } + else if( wrapper ){ + // Use one flash element + var box = _getDimensions(wrapper); + + _css(flash.getEl(), box); + + // Set current input + flash.curInp = target; + } + } + else if( !/object|embed/i.test(target.nodeName) ){ + _css(flash.getEl(), { top: 1, left: 1, width: 5, height: 5 }); + } + }, + + onEvent: function (evt){ + var type = evt.type; + + if( type == 'ready' ){ + try { + // set "ready" state + flash.getInput(evt.flashId).setAttribute(_attr, 'r'); + } catch (e){ + } + + flash.ready(); + setTimeout(function (){ flash.mouseenter(evt); }, 50); + return true; + } + else if( type === 'ping' ){ + api.log('(flash -> js).ping:', [evt.status, evt.savedStatus], evt.error); + } + else if( type === 'log' ){ + api.log('(flash -> js).log:', evt.target); + } + else if( type in flash ){ + setTimeout(function (){ + api.log('FlashAPI.event.'+evt.type+':', evt); + flash[type](evt); + }, 1); + } + }, + + + mouseenter: function (evt){ + var node = flash.getInput(evt.flashId); + + if( node ){ + // Set multiple mode + flash.cmd(evt, 'multiple', node.getAttribute('multiple') != null); + + + // Set files filter + var accept = [], exts = {}; + + _each((node.getAttribute('accept') || '').split(/,\s*/), function (mime){ + api.accept[mime] && _each(api.accept[mime].split(' '), function (ext){ + exts[ext] = 1; + }); + }); + + _each(exts, function (i, ext){ + accept.push( ext ); + }); + + flash.cmd(evt, 'accept', accept.length ? accept.join(',')+','+accept.join(',').toUpperCase() : '*'); + } + }, + + + get: function (id){ + return document[id] || window[id] || document.embeds[id]; + }, + + + getInput: function (id){ + if( api.multiFlash ){ + try { + var node = flash.getWrapper(flash.get(id)); + if( node ){ + return node.getElementsByTagName('input')[0]; + } + } catch (e){ + api.log('[err] Can not find "input" by flashId:', id, e); + } + } else { + return flash.curInp; + } + }, + + + select: function (evt){ + var + inp = flash.getInput(evt.flashId) + , uid = api.uid(inp) + , files = evt.target.files + , event + ; + + _each(files, function (file){ + api.checkFileObj(file); + }); + + _files[uid] = files; + + if( document.createEvent ){ + event = document.createEvent('Event'); + event.files = files; + event.initEvent('change', true, true); + inp.dispatchEvent(event); + } + else if( jQuery ){ + jQuery(inp).trigger({ type: 'change', files: files }); + } + else { + event = document.createEventObject(); + event.files = files; + inp.fireEvent('onchange', event); + } + }, + + + cmd: function (id, name, data, last){ + try { + api.log('(js -> flash).'+name+':', data); + return flash.get(id.flashId || id).cmd(name, data); + } catch (err){ + api.log('(js -> flash).onError:', err.toString()); + if( !last ){ + // try again + setTimeout(function (){ flash.cmd(id, name, data, true); }, 50); + } + } + }, + + + patch: function (){ + api.flashEngine = true; + + // FileAPI + _inherit(api, { + getFiles: function (input, filter, callback){ + if( callback ){ + api.filterFiles(api.getFiles(input), filter, callback); + return null; + } + + var files = api.isArray(input) ? input : _files[api.uid(input.target || input.srcElement || input)]; + + + if( !files ){ + // Файлов нету, вызываем родительский метод + return this.parent.apply(this, arguments); + } + + + if( filter ){ + filter = api.getFilesFilter(filter); + files = api.filter(files, function (file){ return filter.test(file.name); }); + } + + return files; + }, + + + getInfo: function (file, fn){ + if( _isHtmlFile(file) ){ + this.parent.apply(this, arguments); + } + else if( file.isShot ){ + fn(null, file.info = { + width: file.width, + height: file.height + }); + } + else { + if( !file.__info ){ + var defer = file.__info = api.defer(); + + flash.cmd(file, 'getFileInfo', { + id: file.id + , callback: _wrap(function _(err, info){ + _unwrap(_); + defer.resolve(err, file.info = info); + }) + }); + } + + file.__info.then(fn); + } + } + }); + + + // FileAPI.Image + api.support.transform = true; + api.Image && _inherit(api.Image.prototype, { + get: function (fn, scaleMode){ + this.set({ scaleMode: scaleMode || 'noScale' }); // noScale, exactFit + return this.parent(fn); + }, + + _load: function (file, fn){ + api.log('FlashAPI.Image._load:', file); + + if( _isHtmlFile(file) ){ + this.parent.apply(this, arguments); + } + else { + var _this = this; + api.getInfo(file, function (err){ + fn.call(_this, err, file); + }); + } + }, + + _apply: function (file, fn){ + api.log('FlashAPI.Image._apply:', file); + + if( _isHtmlFile(file) ){ + this.parent.apply(this, arguments); + } + else { + var m = this.getMatrix(file.info), doneFn = fn; + + flash.cmd(file, 'imageTransform', { + id: file.id + , matrix: m + , callback: _wrap(function _(err, base64){ + api.log('FlashAPI.Image._apply.callback:', err); + _unwrap(_); + + if( err ){ + doneFn(err); + } + else if( !api.support.html5 && (!api.support.dataURI || base64.length > 3e4) ){ + _makeFlashImage({ + width: (m.deg % 180) ? m.dh : m.dw + , height: (m.deg % 180) ? m.dw : m.dh + , scale: m.scaleMode + }, base64, doneFn); + } + else { + if( m.filter ){ + doneFn = function (err, img){ + if( err ){ + fn(err); + } + else { + api.Image.applyFilter(img, m.filter, function (){ + fn(err, this.canvas); + }); + } + }; + } + + api.newImage('data:'+ file.type +';base64,'+ base64, doneFn); + } + }) + }); + } + }, + + toData: function (fn){ + var + file = this.file + , info = file.info + , matrix = this.getMatrix(info) + ; + api.log('FlashAPI.Image.toData'); + + if( _isHtmlFile(file) ){ + this.parent.apply(this, arguments); + } + else { + if( matrix.deg == 'auto' ){ + matrix.deg = api.Image.exifOrientation[info && info.exif && info.exif.Orientation] || 0; + } + + fn.call(this, !file.info, { + id: file.id + , flashId: file.flashId + , name: file.name + , type: file.type + , matrix: matrix + }); + } + } + }); + + + api.Image && _inherit(api.Image, { + fromDataURL: function (dataURL, size, callback){ + if( !api.support.dataURI || dataURL.length > 3e4 ){ + _makeFlashImage( + api.extend({ scale: 'exactFit' }, size) + , dataURL.replace(/^data:[^,]+,/, '') + , function (err, el){ callback(el); } + ); + } + else { + this.parent(dataURL, size, callback); + } + } + }); + + // FileAPI.Form + _inherit(api.Form.prototype, { + toData: function (fn){ + var items = this.items, i = items.length; + + for( ; i--; ){ + if( items[i].file && _isHtmlFile(items[i].blob) ){ + return this.parent.apply(this, arguments); + } + } + + api.log('FlashAPI.Form.toData'); + fn(items); + } + }); + + + // FileAPI.XHR + _inherit(api.XHR.prototype, { + _send: function (options, formData){ + if( + formData.nodeName + || formData.append && api.support.html5 + || api.isArray(formData) && (typeof formData[0] === 'string') + ){ + // HTML5, Multipart or IFrame + return this.parent.apply(this, arguments); + } + + + var + data = {} + , files = {} + , _this = this + , flashId + , fileId + ; + + _each(formData, function (item){ + if( item.file ){ + files[item.name] = item = _getFileDescr(item.blob); + fileId = item.id; + flashId = item.flashId; + } + else { + data[item.name] = item.blob; + } + }); + + if( !fileId ){ + flashId = _attr; + } + + if( !flashId ){ + api.log('[err] FlashAPI._send: flashId -- undefined'); + return this.parent.apply(this, arguments); + } + else { + api.log('FlashAPI.XHR._send: '+ flashId +' -> '+ fileId); + } + + _this.xhr = { + headers: {}, + abort: function (){ flash.cmd(flashId, 'abort', { id: fileId }); }, + getResponseHeader: function (name){ return this.headers[name]; }, + getAllResponseHeaders: function (){ return this.headers; } + }; + + var queue = api.queue(function (){ + flash.cmd(flashId, 'upload', { + url: _getUrl(options.url.replace(/([a-z]+)=(\?)&?/i, '')) + , data: data + , files: fileId ? files : null + , headers: options.headers || {} + , callback: _wrap(function upload(evt){ + var type = evt.type, result = evt.result; + + api.log('FlashAPI.upload.'+type); + + if( type == 'progress' ){ + evt.loaded = Math.min(evt.loaded, evt.total); // @todo fixme + evt.lengthComputable = true; + options.progress(evt); + } + else if( type == 'complete' ){ + _unwrap(upload); + + if( typeof result == 'string' ){ + _this.responseText = result.replace(/%22/g, "\"").replace(/%5c/g, "\\").replace(/%26/g, "&").replace(/%25/g, "%"); + } + + _this.end(evt.status || 200); + } + else if( type == 'abort' || type == 'error' ){ + _this.end(evt.status || 0, evt.message); + _unwrap(upload); + } + }) + }); + }); + + + // #2174: FileReference.load() call while FileReference.upload() or vice versa + _each(files, function (file){ + queue.inc(); + api.getInfo(file, queue.next); + }); + + queue.check(); + } + }); + } + } + ; + + + function _makeFlashHTML(opts){ + return ('' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '').replace(/#(\w+)#/ig, function (a, name){ return opts[name]; }) + ; + } + + + function _css(el, css){ + if( el && el.style ){ + var key, val; + for( key in css ){ + val = css[key]; + if( typeof val == 'number' ){ + val += 'px'; + } + try { el.style[key] = val; } catch (e) {} + } + } + } + + + function _inherit(obj, methods){ + _each(methods, function (fn, name){ + var prev = obj[name]; + obj[name] = function (){ + this.parent = prev; + return fn.apply(this, arguments); + }; + }); + } + + function _isHtmlFile(file){ + return file && !file.flashId; + } + + function _wrap(fn){ + var id = fn.wid = api.uid(); + flash._fn[id] = fn; + return 'FileAPI.Flash._fn.'+id; + } + + + function _unwrap(fn){ + try { + flash._fn[fn.wid] = null; + delete flash._fn[fn.wid]; + } + catch(e){} + } + + + function _getUrl(url, params){ + if( !_rhttp.test(url) ){ + if( /^\.\//.test(url) || '/' != url.charAt(0) ){ + var path = location.pathname; + path = path.substr(0, path.lastIndexOf('/')); + url = (path +'/'+ url).replace('/./', '/'); + } + + if( '//' != url.substr(0, 2) ){ + url = '//' + location.host + url; + } + + if( !_rhttp.test(url) ){ + url = location.protocol + url; + } + } + + if( params ){ + url += (/\?/.test(url) ? '&' : '?') + params; + } + + return url; + } + + + function _makeFlashImage(opts, base64, fn){ + var + key + , flashId = api.uid() + , el = document.createElement('div') + , attempts = 10 + ; + + for( key in opts ){ + el.setAttribute(key, opts[key]); + el[key] = opts[key]; + } + + _css(el, opts); + + opts.width = '100%'; + opts.height = '100%'; + + el.innerHTML = _makeFlashHTML(api.extend({ + id: flashId + , src: _getUrl(api.flashImageUrl, 'r='+ api.uid()) + , wmode: 'opaque' + , flashvars: 'scale='+ opts.scale +'&callback='+_wrap(function _(){ + _unwrap(_); + if( --attempts > 0 ){ + _setImage(); + } + return true; + }) + }, opts)); + + function _setImage(){ + try { + // Get flash-object by id + var img = flash.get(flashId); + img.setImage(base64); + } catch (e){ + api.log('[err] FlashAPI.Preview.setImage -- can not set "base64":', e); + } + } + + fn(false, el); + el = null; + } + + + function _getFileDescr(file){ + return { + id: file.id + , name: file.name + , matrix: file.matrix + , flashId: file.flashId + }; + } + + + function _getDimensions(el){ + var + box = el.getBoundingClientRect() + , body = document.body + , docEl = (el && el.ownerDocument).documentElement + ; + + return { + top: box.top + (window.pageYOffset || docEl.scrollTop) - (docEl.clientTop || body.clientTop || 0) + , left: box.left + (window.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || body.clientLeft || 0) + , width: box.right - box.left + , height: box.bottom - box.top + }; + } + + // @export + api.Flash = flash; + + + // Check dataURI support + api.newImage('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==', function (err, img){ + api.support.dataURI = !(img.width != 1 || img.height != 1); + flash.init(); + }); + })(); +})(window, window.jQuery, FileAPI); + +/** + * FileAPI fallback to Flash + * + * @flash-developer "Vladimir Demidov" + */ + +/*global window, FileAPI */ +(function (window, jQuery, api) { + "use strict"; + + var _each = api.each, + _cameraQueue = []; + + if (api.support.flash && (api.media && (!api.support.media || !api.html5))) { + (function () { + function _wrap(fn) { + var id = fn.wid = api.uid(); + api.Flash._fn[id] = fn; + return 'FileAPI.Flash._fn.' + id; + } + + + function _unwrap(fn) { + try { + api.Flash._fn[fn.wid] = null; + delete api.Flash._fn[fn.wid]; + } catch (e) { + } + } + + var flash = api.Flash; + api.extend(api.Flash, { + + patchCamera: function () { + api.Camera.fallback = function (el, options, callback) { + var camId = api.uid(); + api.log('FlashAPI.Camera.publish: ' + camId); + flash.publish(el, camId, api.extend(options, { + camera: true, + onEvent: _wrap(function _(evt) { + if (evt.type === 'camera') { + _unwrap(_); + + if (evt.error) { + api.log('FlashAPI.Camera.publish.error: ' + evt.error); + callback(evt.error); + } else { + api.log('FlashAPI.Camera.publish.success: ' + camId); + callback(null); + } + } + }) + })); + }; + // Run + _each(_cameraQueue, function (args) { + api.Camera.fallback.apply(api.Camera, args); + }); + _cameraQueue = []; + + + // FileAPI.Camera:proto + api.extend(api.Camera.prototype, { + _id: function () { + return this.video.id; + }, + + start: function (callback) { + var _this = this; + flash.cmd(this._id(), 'camera.on', { + callback: _wrap(function _(evt) { + _unwrap(_); + + if (evt.error) { + api.log('FlashAPI.camera.on.error: ' + evt.error); + callback(evt.error, _this); + } else { + api.log('FlashAPI.camera.on.success: ' + _this._id()); + _this._active = true; + callback(null, _this); + } + }) + }); + }, + + stop: function () { + this._active = false; + flash.cmd(this._id(), 'camera.off'); + }, + + shot: function () { + api.log('FlashAPI.Camera.shot:', this._id()); + + var shot = api.Flash.cmd(this._id(), 'shot', {}); + shot.type = 'image/png'; + shot.flashId = this._id(); + shot.isShot = true; + + return new api.Camera.Shot(shot); + } + }); + } + }); + + api.Camera.fallback = function () { + _cameraQueue.push(arguments); + }; + + }()); + } +}(window, window.jQuery, FileAPI)); +if( typeof define === "function" && define.amd ){ define("FileAPI", [], function (){ return FileAPI; }); } \ No newline at end of file diff --git a/manager/media/browser/mcpuk/js/FileAPI/FileAPI.min.js b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.min.js new file mode 100755 index 00000000..01020ade --- /dev/null +++ b/manager/media/browser/mcpuk/js/FileAPI/FileAPI.min.js @@ -0,0 +1,3 @@ +/*! FileAPI 2.0.19 - BSD | git://github.com/mailru/FileAPI.git */ +!function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h0,H=a.dataURLtoBlob,I=/img/i,J=/canvas/i,K=/img|canvas/i,L=/input/i,M=/^data:[^,]+,/,N={}.toString,O=a.Math,P=function(b){return b=new a.Number(O.pow(1024,b)),b.from=function(a){return O.round(a*this)},b},Q={},R=[],S="abort progress error load loadend",T="status statusText readyState response responseXML responseText responseBody".split(" "),U="currentTarget",V="preventDefault",W=function(a){return a&&"length"in a},X=function(a,b,c){if(a)if(W(a))for(var d=0,e=a.length;e>d;d++)d in a&&b.call(c,a[d],d,a);else for(var f in a)a.hasOwnProperty(f)&&b.call(c,a[f],f,a)},Y=function(a){for(var b=arguments,c=1,d=function(b,c){a[c]=b};c=c&&!d&&f.end()},isFail:function(){return d},fail:function(){!d&&a(d=!0)},end:function(){e||(e=!0,a())}};return f},each:X,afor:function(a,b){var c=0,d=a.length;W(a)&&d--?!function e(){b(d!=c&&e,a[c],c++)}():b(!1)},extend:Y,isFile:function(a){return"[object File]"===N.call(a)},isBlob:function(a){return this.isFile(a)||"[object Blob]"===N.call(a)},isCanvas:function(a){return a&&J.test(a.nodeName)},getFilesFilter:function(a){return a="string"==typeof a?a:a.getAttribute&&a.getAttribute("accept")||"",a?new RegExp("("+a.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(a,b){ca.isCanvas(a)?c(a,b,"load",ca.toDataURL(a)):e(a,b,"DataURL")},readAsBinaryString:function(a,b){d("BinaryString")?e(a,b,"BinaryString"):e(a,function(a){if("load"==a.type)try{a.result=ca.toBinaryString(a.result)}catch(c){a.type="error",a.message=c.toString()}b(a)},"DataURL")},readAsArrayBuffer:function(a,b){e(a,b,"ArrayBuffer")},readAsText:function(a,b,c){c||(c=b,b="utf-8"),e(a,c,"Text",b)},toDataURL:function(a,b){return"string"==typeof a?a:a.toDataURL?a.toDataURL(b||"image/png"):void 0},toBinaryString:function(b){return a.atob(ca.toDataURL(b).replace(M,""))},readAsImage:function(a,d,e){if(ca.isBlob(a))if(w){var f=w.createObjectURL(a);f===b?c(a,d,"error"):ca.readAsImage(f,d,e)}else ca.readAsDataURL(a,function(b){"load"==b.type?ca.readAsImage(b.result,d,e):(e||"error"==b.type)&&c(a,d,b,null,{loaded:b.loaded,total:b.total})});else if(ca.isCanvas(a))c(a,d,"load",a);else if(I.test(a.nodeName))if(a.complete)c(a,d,"load",a);else{var g="error abort load";_(a,g,function i(b){"load"==b.type&&w&&w.revokeObjectURL(a.src),$(a,g,i),c(a,d,b,a)})}else if(a.iframe)c(a,d,{type:"error"});else{var h=ca.newImage(a.dataURL||a);ca.readAsImage(h,d,e)}},checkFileObj:function(a){var b={},c=ca.accept;return"object"==typeof a?b=a:b.name=(a+"").split(/\\|\//g).pop(),null==b.type&&(b.type=b.name.split(".").pop()),X(c,function(a,c){a=new RegExp(a.replace(/\s/g,"|"),"i"),(a.test(b.type)||ca.ext2mime[b.type])&&(b.type=ca.ext2mime[b.type]||c.split("/")[0]+"/"+b.type)}),b},getDropFiles:function(a,b){var c,d=[],e=[],j=l(a),k=j.files,m=j.items,n=W(m)&&m[0]&&h(m[0]),o=ca.queue(function(){b(d,e)});if(n)if(G&&k){var p,q,r=k.length;for(c=new Array(r);r--;){p=k[r];try{q=h(m[r])}catch(s){ca.log("[err] getDropFiles: ",s),q=null}g(q)&&(q.isDirectory||q.isFile&&p.name==p.name.normalize("NFC"))?c[r]=q:c[r]=p}}else c=m;else c=k;X(c||[],function(a){o.inc();try{n&&g(a)?i(a,function(a,b,c){a?ca.log("[err] getDropFiles:",a):d.push.apply(d,b),e.push.apply(e,c),o.next()}):f(a,function(b,c){b?d.push(a):a.error=c,e.push(a),o.next()})}catch(b){o.next(),ca.log("[err] getDropFiles: ",b)}}),o.check()},getFiles:function(a,b,c){var d=[];return c?(ca.filterFiles(ca.getFiles(a),b,c),null):(a.jquery&&(a.each(function(){d=d.concat(ca.getFiles(this))}),a=d,d=[]),"string"==typeof b&&(b=ca.getFilesFilter(b)),a.originalEvent?a=aa(a.originalEvent):a.srcElement&&(a=aa(a)),a.dataTransfer?a=a.dataTransfer:a.target&&(a=a.target),a.files?(d=a.files,D||(d[0].blob=a,d[0].iframe=!0)):!D&&k(a)?ca.trim(a.value)&&(d=[ca.checkFileObj(a.value)],d[0].blob=a,d[0].iframe=!0):W(a)&&(d=a),ca.filter(d,function(a){return!b||b.test(a.name)}))},getTotalSize:function(a){for(var b=0,c=a&&a.length;c--;)b+=a[c].size;return b},getInfo:function(a,b){var c={},d=R.concat();ca.isBlob(a)?!function e(){var f=d.shift();f?f.test(a.type)?f(a,function(a,d){a?b(a):(Y(c,d),e())}):e():b(!1,c)}():b("not_support_info",c)},addInfoReader:function(a,b){b.test=function(b){return a.test(b)},R.push(b)},filter:function(a,b){for(var c,d=[],e=0,f=a.length;f>e;e++)e in a&&(c=a[e],b.call(c,c,e,a)&&d.push(c));return d},filterFiles:function(a,b,c){if(a.length){var d,e=a.concat(),f=[],g=[];!function h(){e.length?(d=e.shift(),ca.getInfo(d,function(a,c){(b(d,a?!1:c)?f:g).push(d),h()})):c(f,g)}()}else c([],a)},upload:function(a){a=Y({jsonp:"callback",prepare:ca.F,beforeupload:ca.F,upload:ca.F,fileupload:ca.F,fileprogress:ca.F,filecomplete:ca.F,progress:ca.F,complete:ca.F,pause:ca.F,imageOriginal:!0,chunkSize:ca.chunkSize,chunkUploadRetry:ca.chunkUploadRetry,uploadRetry:ca.uploadRetry},a),a.imageAutoOrientation&&!a.imageTransform&&(a.imageTransform={rotate:"auto"});var b,c=new ca.XHR(a),d=this._getFilesDataArray(a.files),e=this,f=0,g=0,h=!1;return X(d,function(a){f+=a.size}),c.files=[],X(d,function(a){c.files.push(a.file)}),c.total=f,c.loaded=0,c.filesLeft=d.length,a.beforeupload(c,a),b=function(){var i=d.shift(),k=i&&i.file,l=!1,m=j(a);if(c.filesLeft=d.length,k&&k.name===ca.expando&&(k=null,ca.log("[warn] FileAPI.upload() — called without files")),("abort"!=c.statusText||c.current)&&i){if(h=!1,c.currentFile=k,k&&a.prepare(k,m)===!1)return void b.call(e);m.file=k,e._getFormData(m,i,function(h){g||a.upload(c,a);var j=new ca.XHR(Y({},m,{upload:k?function(){a.fileupload(k,j,m)}:q,progress:k?function(b){l||(l=b.loaded===b.total,a.fileprogress({type:"progress",total:i.total=b.total,loaded:i.loaded=b.loaded},k,j,m),a.progress({type:"progress",total:f,loaded:c.loaded=g+i.size*(b.loaded/b.total)||0},k,j,m))}:q,complete:function(d){X(T,function(a){c[a]=j[a]}),k&&(i.total=i.total||i.size,i.loaded=i.total,d||(this.progress(i),l=!0,g+=i.size,c.loaded=g),a.filecomplete(d,j,k,m)),setTimeout(function(){b.call(e)},0)}}));c.abort=function(a){a||(d.length=0),this.current=a,j.abort()},j.send(h)})}else{var n=200==c.status||201==c.status||204==c.status;a.complete(n?!1:c.statusText||"error",c,a),h=!0}},setTimeout(b,0),c.append=function(a,g){a=ca._getFilesDataArray([].concat(a)),X(a,function(a){f+=a.size,c.files.push(a.file),g?d.unshift(a):d.push(a)}),c.statusText="",h&&b.call(e)},c.remove=function(a){for(var b,c=d.length;c--;)d[c].file==a&&(b=d.splice(c,1),f-=b.size);return b},c},_getFilesDataArray:function(a){var b=[],c={};if(k(a)){var d=ca.getFiles(a);c[a.name||"file"]=null!==a.getAttribute("multiple")?d:d[0]}else W(a)&&k(a[0])?X(a,function(a){c[a.name||"file"]=ca.getFiles(a)}):c=a;return X(c,function e(a,c){W(a)?X(a,function(a){e(a,c)}):a&&(a.name||a.image)&&b.push({name:c,file:a,size:a.size,total:a.size,loaded:0})}),b.length||b.push({file:{name:ca.expando}}),b},_getFormData:function(a,b,c){var d=b.file,e=b.name,f=d.name,g=d.type,h=ca.support.transform&&a.imageTransform,i=new ca.Form,j=ca.queue(function(){c(i)}),k=h&&m(h),l=ca.postNameConcat;X(a.data,function n(a,b){"object"==typeof a?X(a,function(a,c){n(a,l(b,c))}):i.append(b,a)}),function o(b){b.image?(j.inc(),b.toData(function(a,c){b.file&&(c.type=b.file.type,c.quality=b.matrix.quality,f=b.file&&b.file.name),f=f||(new Date).getTime()+".png",o(c),j.next()})):ca.Image&&h&&(/^image/.test(b.type)||K.test(b.nodeName))?(j.inc(),k&&(h=[h]),ca.Image.transform(b,h,a.imageAutoOrientation,function(c,d){if(k&&!c)H||ca.flashEngine||(i.multipart=!0),i.append(e,d[0],f,h[0].type||g);else{var m=0;c||X(d,function(a,b){H||ca.flashEngine||(i.multipart=!0),h[b].postName||(m=1),i.append(h[b].postName||l(e,b),a,f,h[b].type||g)}),(c||a.imageOriginal)&&i.append(l(e,m?"original":null),b,f,g)}j.next()})):f!==ca.expando&&i.append(e,b,f)}(d),j.check()},reset:function(a,b){var c,d;return C?(d=C(a).clone(!0).insertBefore(a).val("")[0],b||C(a).remove()):(c=a.parentNode,d=c.insertBefore(a.cloneNode(!0),a),d.value="",b||c.removeChild(a),X(Q[ca.uid(a)],function(b,c){X(b,function(b){$(a,c,b),Z(d,c,b)})})),d},load:function(a,b){var c=ca.getXHR();return c?(c.open("GET",a,!0),c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),Z(c,"progress",function(a){a.lengthComputable&&b({type:a.type,loaded:a.loaded,total:a.total},c)}),c.onreadystatechange=function(){if(4==c.readyState)if(c.onreadystatechange=null,200==c.status){a=a.split("/");var d={name:a[a.length-1],size:c.getResponseHeader("Content-Length"),type:c.getResponseHeader("Content-Type")};d.dataURL="data:"+d.type+";base64,"+ca.encode64(c.responseBody||c.responseText),b({type:"load",result:d},c)}else b({type:"error"},c)},c.send(null)):b({type:"error"}),c},encode64:function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",d=0;for("string"!=typeof a&&(a=String(a));d>2,k=(3&g)<<4|h>>4;isNaN(h)?e=f=64:(e=(15&h)<<2|i>>6,f=isNaN(i)?64:63&i),c+=b.charAt(j)+b.charAt(k)+b.charAt(e)+b.charAt(f)}return c}};ca.addInfoReader(/^image/,function(a,b){if(!a.__dimensions){var c=a.__dimensions=ca.defer();ca.readAsImage(a,function(a){var b=a.target;c.resolve("load"==a.type?!1:"error",{width:b.width,height:b.height}),b.src=ca.EMPTY_PNG,b=null})}a.__dimensions.then(b)}),ca.event.dnd=function(a,b,c){var d,e;c||(c=b,b=ca.F),z?(Z(a,"dragenter dragleave dragover",b.ff=b.ff||function(a){for(var c=l(a).types,f=c&&c.length,g=!1;f--;)if(~c[f].indexOf("File")){a[V](),e!==a.type&&(e=a.type,"dragleave"!=e&&b.call(a[U],!0,a),g=!0);break}g&&(clearTimeout(d),d=setTimeout(function(){b.call(a[U],"dragleave"!=e,a)},50))}),Z(a,"drop",c.ff=c.ff||function(a){a[V](),e=0,b.call(a[U],!1,a),ca.getDropFiles(a,function(b,d){c.call(a[U],b,d,a)})})):ca.log("Drag'n'Drop -- not supported")},ca.event.dnd.off=function(a,b,c){$(a,"dragenter dragleave dragover",b.ff),$(a,"drop",c.ff)},C&&!C.fn.dnd&&(C.fn.dnd=function(a,b){return this.each(function(){ca.event.dnd(this,a,b)})},C.fn.offdnd=function(a,b){return this.each(function(){ca.event.dnd.off(this,a,b)})}),a.FileAPI=Y(ca,a.FileAPI),ca.log("FileAPI: "+ca.version),ca.log("protocol: "+a.location.protocol),ca.log("doctype: ["+s.name+"] "+s.publicId+" "+s.systemId),X(r.getElementsByTagName("meta"),function(a){/x-ua-compatible/i.test(a.getAttribute("http-equiv"))&&ca.log("meta.http-equiv: "+a.getAttribute("content"))});try{n=!!console.log,o=!!console.log.apply}catch(da){}ca.flashUrl||(ca.flashUrl=ca.staticPath+"FileAPI.flash.swf"),ca.flashImageUrl||(ca.flashImageUrl=ca.staticPath+"FileAPI.flash.image.swf"),ca.flashWebcamUrl||(ca.flashWebcamUrl=ca.staticPath+"FileAPI.flash.camera.swf")}(window,void 0),function(a,b,c){"use strict";function d(b){if(b instanceof d){var c=new d(b.file);return a.extend(c.matrix,b.matrix),c}return this instanceof d?(this.file=b,this.size=b.size||100,void(this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0,quality:1,filter:0})):new d(b)}var e=Math.min,f=Math.round,g=function(){return b.createElement("canvas")},h=!1,i={8:270,3:180,6:90,7:270,4:180,5:90};try{h=g().toDataURL("image/png").indexOf("data:image/png")>-1}catch(j){}d.prototype={image:!0,constructor:d,set:function(b){return a.extend(this.matrix,b),this},crop:function(a,b,d,e){return d===c&&(d=a,e=b,a=b=0),this.set({sx:a,sy:b,sw:d,sh:e||d})},resize:function(a,b,c){return/min|max|height|width/.test(b)&&(c=b,b=a),this.set({dw:a,dh:b||a,resize:c})},preview:function(a,b){return this.resize(a,b||a,"preview")},rotate:function(a){return this.set({deg:a})},filter:function(a){return this.set({filter:a})},overlay:function(a){return this.set({overlay:a})},clone:function(){return new d(this)},_load:function(b,c){var d=this;/img|video/i.test(b.nodeName)?c.call(d,null,b):a.readAsImage(b,function(a){c.call(d,"load"!=a.type,a.result)})},_apply:function(b,c){var f,h=g(),i=this.getMatrix(b),j=h.getContext("2d"),k=b.videoWidth||b.width,l=b.videoHeight||b.height,m=i.deg,n=i.dw,o=i.dh,p=k,q=l,r=i.filter,s=b,t=i.overlay,u=a.queue(function(){b.src=a.EMPTY_PNG,c(!1,h)}),v=a.renderImageToCanvas;for(m-=360*Math.floor(m/360),b._type=this.file.type;i.multipass&&e(p/n,q/o)>2;)p=p/2+.5|0,q=q/2+.5|0,f=g(),f.width=p,f.height=q,s!==b?(v(f,s,0,0,s.width,s.height,0,0,p,q),s=f):(s=f,v(s,b,i.sx,i.sy,i.sw,i.sh,0,0,p,q),i.sx=i.sy=i.sw=i.sh=0);h.width=m%180?o:n,h.height=m%180?n:o,h.type=i.type,h.quality=i.quality,j.rotate(m*Math.PI/180),v(j.canvas,s,i.sx,i.sy,i.sw||s.width,i.sh||s.height,180==m||270==m?-n:0,90==m||180==m?-o:0,n,o),n=h.width,o=h.height,t&&a.each([].concat(t),function(b){u.inc();var c=new window.Image,d=function(){var e=0|b.x,f=0|b.y,g=b.w||c.width,h=b.h||c.height,i=b.rel;e=1==i||4==i||7==i?(n-g+e)/2:2==i||5==i||8==i?n-(g+e):e,f=3==i||4==i||5==i?(o-h+f)/2:i>=6?o-(h+f):f,a.event.off(c,"error load abort",d);try{j.globalAlpha=b.opacity||1,j.drawImage(c,e,f,g,h)}catch(k){}u.next()};a.event.on(c,"error load abort",d),c.src=b.src,c.complete&&d()}),r&&(u.inc(),d.applyFilter(h,r,u.next)),u.check()},getMatrix:function(b){var c=a.extend({},this.matrix),d=c.sw=c.sw||b.videoWidth||b.naturalWidth||b.width,g=c.sh=c.sh||b.videoHeight||b.naturalHeight||b.height,h=c.dw=c.dw||d,i=c.dh=c.dh||g,j=d/g,k=h/i,l=c.resize;if("preview"==l){if(h!=d||i!=g){var m,n;k>=j?(m=d,n=m/k):(n=g,m=n*k),(m!=d||n!=g)&&(c.sx=~~((d-m)/2),c.sy=~~((g-n)/2),d=m,g=n)}}else"height"==l?h=i*j:"width"==l?i=h/j:l&&(d>h||g>i?"min"==l?(h=f(k>j?e(d,h):i*j),i=f(k>j?h/j:e(g,i))):(h=f(j>=k?e(d,h):i*j),i=f(j>=k?h/j:e(g,i))):(h=d,i=g));return c.sw=d,c.sh=g,c.dw=h,c.dh=i,c.multipass=a.multiPassResize,c},_trans:function(b){this._load(this.file,function(c,d){if(c)b(c);else try{this._apply(d,b)}catch(c){a.log("[err] FileAPI.Image.fn._apply:",c),b(c)}})},get:function(b){if(a.support.transform){var c=this,d=c.matrix;"auto"==d.deg?a.getInfo(c.file,function(a,e){d.deg=i[e&&e.exif&&e.exif.Orientation]||0,c._trans(b)}):c._trans(b)}else b("not_support_transform");return this},toData:function(a){return this.get(a)}},d.exifOrientation=i,d.transform=function(b,e,f,g){function h(h,i){var j={},k=a.queue(function(a){g(a,j)});h?k.fail():a.each(e,function(a,e){if(!k.isFail()){var g=new d(i.nodeType?i:b),h="function"==typeof a;if(h?a(i,g):a.width?g[a.preview?"preview":"resize"](a.width,a.height,a.strategy):a.maxWidth&&(i.width>a.maxWidth||i.height>a.maxHeight)&&g.resize(a.maxWidth,a.maxHeight,"max"),a.crop){var l=a.crop;g.crop(0|l.x,0|l.y,l.w||l.width,l.h||l.height)}a.rotate===c&&f&&(a.rotate="auto"),g.set({type:g.matrix.type||a.type||b.type||"image/png"}),h||g.set({deg:a.rotate,overlay:a.overlay,filter:a.filter,quality:a.quality||1}),k.inc(),g.toData(function(a,b){a?k.fail():(j[e]=b,k.next())})}})}b.width?h(!1,b):a.getInfo(b,h)},a.each(["TOP","CENTER","BOTTOM"],function(b,c){a.each(["LEFT","CENTER","RIGHT"],function(a,e){d[b+"_"+a]=3*c+e,d[a+"_"+b]=3*c+e})}),d.toCanvas=function(a){var c=b.createElement("canvas");return c.width=a.videoWidth||a.width,c.height=a.videoHeight||a.height,c.getContext("2d").drawImage(a,0,0),c},d.fromDataURL=function(b,c,d){var e=a.newImage(b);a.extend(e,c),d(e)},d.applyFilter=function(b,c,e){"function"==typeof c?c(b,e):window.Caman&&window.Caman("IMG"==b.tagName?d.toCanvas(b):b,function(){"string"==typeof c?this[c]():a.each(c,function(a,b){this[b](a)},this),this.render(e)})},a.renderImageToCanvas=function(b,c,d,e,f,g,h,i,j,k){try{return b.getContext("2d").drawImage(c,d,e,f,g,h,i,j,k)}catch(l){throw a.log("renderImageToCanvas failed"),l}},a.support.canvas=a.support.transform=h,a.Image=d}(FileAPI,document),function(a){"use strict";a(FileAPI)}(function(a){"use strict";if(window.navigator&&window.navigator.platform&&/iP(hone|od|ad)/.test(window.navigator.platform)){var b=a.renderImageToCanvas;a.detectSubsampling=function(a){var b,c;return a.width*a.height>1048576?(b=document.createElement("canvas"),b.width=b.height=1,c=b.getContext("2d"),c.drawImage(a,-a.width+1,0),0===c.getImageData(0,0,1,1).data[3]):!1},a.detectVerticalSquash=function(a,b){var c,d,e,f,g,h=a.naturalHeight||a.height,i=document.createElement("canvas"),j=i.getContext("2d");for(b&&(h/=2),i.width=1,i.height=h,j.drawImage(a,0,0),c=j.getImageData(0,0,1,h).data,d=0,e=h,f=h;f>d;)g=c[4*(f-1)+3],0===g?e=f:d=f,f=e+d>>1;return f/h||1},a.renderImageToCanvas=function(c,d,e,f,g,h,i,j,k,l){if("image/jpeg"===d._type){var m,n,o,p,q=c.getContext("2d"),r=document.createElement("canvas"),s=1024,t=r.getContext("2d");if(r.width=s,r.height=s,q.save(),m=a.detectSubsampling(d),m&&(e/=2,f/=2,g/=2,h/=2),n=a.detectVerticalSquash(d,m),m||1!==n){for(f*=n,k=Math.ceil(s*k/g),l=Math.ceil(s*l/h/n),j=0,p=0;h>p;){for(i=0,o=0;g>o;)t.clearRect(0,0,s,s),t.drawImage(d,e,f,g,h,-o,-p,g,h),q.drawImage(r,0,0,s,s,i,j,k,l),o+=s,i+=k;p+=s,j+=l}return q.restore(),c}}return b(c,d,e,f,g,h,i,j,k,l)}}}),function(a,b){"use strict";function c(b,c,d){var e=b.blob,f=b.file;if(f){if(!e.toDataURL)return void a.readAsBinaryString(e,function(a){"load"==a.type&&c(b,a.result)});var g={"image/jpeg":".jpe?g","image/png":".png"},h=g[b.type]?b.type:"image/png",i=g[h]||".png",j=e.quality||1;f.match(new RegExp(i+"$","i"))||(f+=i.replace("?","")),b.file=f,b.type=h,!d&&e.toBlob?e.toBlob(function(a){c(b,a)},h,j):c(b,a.toBinaryString(e.toDataURL(h,j)))}else c(b,e)}var d=b.document,e=b.FormData,f=function(){this.items=[]},g=b.encodeURIComponent;f.prototype={append:function(a,b,c,d){this.items.push({name:a,blob:b&&b.blob||(void 0==b?"":b),file:b&&(c||b.name),type:b&&(d||b.type)})},each:function(a){for(var b=0,c=this.items.length;c>b;b++)a.call(this,this.items[b])},toData:function(b,c){c._chunked=a.support.chunked&&c.chunkSize>0&&1==a.filter(this.items,function(a){return a.file}).length,a.support.html5?a.formData&&!this.multipart&&e?c._chunked?(a.log("FileAPI.Form.toPlainData"),this.toPlainData(b)):(a.log("FileAPI.Form.toFormData"),this.toFormData(b)):(a.log("FileAPI.Form.toMultipartData"),this.toMultipartData(b)):(a.log("FileAPI.Form.toHtmlData"),this.toHtmlData(b))},_to:function(b,c,d,e){var f=a.queue(function(){c(b)});this.each(function(g){try{d(g,b,f,e)}catch(h){a.log("FileAPI.Form._to: "+h.message),c(h)}}),f.check()},toHtmlData:function(b){this._to(d.createDocumentFragment(),b,function(b,c){var e,f=b.blob;b.file?(a.reset(f,!0),f.name=b.name,f.disabled=!1,c.appendChild(f)):(e=d.createElement("input"),e.name=b.name,e.type="hidden",e.value=f,c.appendChild(e))})},toPlainData:function(a){this._to({},a,function(a,b,d){a.file&&(b.type=a.file),a.blob.toBlob?(d.inc(),c(a,function(a,c){b.name=a.name,b.file=c,b.size=c.length,b.type=a.type,d.next()})):a.file?(b.name=a.blob.name,b.file=a.blob,b.size=a.blob.size,b.type=a.type):(b.params||(b.params=[]),b.params.push(g(a.name)+"="+g(a.blob))),b.start=-1,b.end=b.file&&b.file.FileAPIReadPosition||-1,b.retry=0})},toFormData:function(a){this._to(new e,a,function(a,b,d){a.blob&&a.blob.toBlob?(d.inc(),c(a,function(a,c){b.append(a.name,c,a.file),d.next()})):a.file?b.append(a.name,a.blob,a.file):b.append(a.name,a.blob),a.file&&b.append("_"+a.name,a.file)})},toMultipartData:function(b){this._to([],b,function(a,b,d,e){d.inc(),c(a,function(a,c){b.push("--_"+e+('\r\nContent-Disposition: form-data; name="'+a.name+'"'+(a.file?'; filename="'+g(a.file)+'"':"")+(a.file?"\r\nContent-Type: "+(a.type||"application/octet-stream"):"")+"\r\n\r\n"+(a.file?c:g(c))+"\r\n")),d.next()},!0)},a.expando)}},a.Form=f}(FileAPI,window),function(a,b){"use strict";var c=function(){},d=a.document,e=function(a){this.uid=b.uid(),this.xhr={abort:c,getResponseHeader:c,getAllResponseHeaders:c},this.options=a},f={"":1,XML:1,Text:1,Body:1};e.prototype={status:0,statusText:"",constructor:e,getResponseHeader:function(a){return this.xhr.getResponseHeader(a)},getAllResponseHeaders:function(){return this.xhr.getAllResponseHeaders()||{}},end:function(d,e){var f=this,g=f.options;f.end=f.abort=c,f.status=d,e&&(f.statusText=e),b.log("xhr.end:",d,e),g.complete(200==d||201==d?!1:f.statusText||"unknown",f),f.xhr&&f.xhr.node&&setTimeout(function(){var b=f.xhr.node;try{b.parentNode.removeChild(b)}catch(c){}try{delete a[f.uid]}catch(c){}a[f.uid]=f.xhr.node=null},9)},abort:function(){this.end(0,"abort"),this.xhr&&(this.xhr.aborted=!0,this.xhr.abort())},send:function(a){var b=this,c=this.options;a.toData(function(a){a instanceof Error?b.end(0,a.message):(c.upload(c,b),b._send.call(b,c,a))},c)},_send:function(c,e){var g,h=this,i=h.uid,j=h.uid+"Load",k=c.url;if(b.log("XHR._send:",e),c.cache||(k+=(~k.indexOf("?")?"&":"?")+b.uid()),e.nodeName){var l=c.jsonp;k=k.replace(/([a-z]+)=(\?)/i,"$1="+i),c.upload(c,h);var m=function(a){if(~k.indexOf(a.origin))try{var c=b.parseJSON(a.data);c.id==i&&n(c.status,c.statusText,c.response)}catch(d){n(0,d.message)}},n=a[i]=function(c,d,e){h.readyState=4,h.responseText=e,h.end(c,d),b.event.off(a,"message",m),a[i]=g=p=a[j]=null};h.xhr.abort=function(){try{p.stop?p.stop():p.contentWindow.stop?p.contentWindow.stop():p.contentWindow.document.execCommand("Stop")}catch(a){}n(0,"abort")},b.event.on(a,"message",m),a[j]=function(){try{var a=p.contentWindow,c=a.document,d=a.result||b.parseJSON(c.body.innerHTML);n(d.status,d.statusText,d.response)}catch(e){b.log("[transport.onload]",e)}},g=d.createElement("div"),g.innerHTML='
          '+(l&&c.url.indexOf("=?")<0?'':"")+"
          ";var o=g.getElementsByTagName("form")[0],p=g.getElementsByTagName("iframe")[0];o.appendChild(e),b.log(o.parentNode.innerHTML),d.body.appendChild(g),h.xhr.node=g,h.readyState=2;try{o.submit()}catch(q){b.log("iframe.error: "+q)}o=null}else{if(k=k.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted)return void b.log("Error: already aborted");if(g=h.xhr=b.getXHR(),e.params&&(k+=(k.indexOf("?")<0?"?":"&")+e.params.join("&")),g.open("POST",k,!0),b.withCredentials&&(g.withCredentials="true"),c.headers&&c.headers["X-Requested-With"]||g.setRequestHeader("X-Requested-With","XMLHttpRequest"),b.each(c.headers,function(a,b){g.setRequestHeader(b,a)}),c._chunked){g.upload&&g.upload.addEventListener("progress",b.throttle(function(a){e.retry||c.progress({type:a.type,total:e.size,loaded:e.start+a.loaded,totalSize:e.size},h,c)},100),!1),g.onreadystatechange=function(){var a=parseInt(g.getResponseHeader("X-Last-Known-Byte"),10);if(h.status=g.status,h.statusText=g.statusText,h.readyState=g.readyState,4==g.readyState){for(var d in f)h["response"+d]=g["response"+d];if(g.onreadystatechange=null,!g.status||g.status-201>0)if(b.log("Error: "+g.status),(!g.status&&!g.aborted||500==g.status||416==g.status)&&++e.retry<=c.chunkUploadRetry){var i=g.status?0:b.chunkNetworkDownRetryTimeout;c.pause(e.file,c),b.log("X-Last-Known-Byte: "+a),a?e.end=a:(e.end=e.start-1,416==g.status&&(e.end=e.end-c.chunkSize)),setTimeout(function(){h._send(c,e)},i)}else h.end(g.status);else e.retry=0,e.end==e.size-1?h.end(g.status):(b.log("X-Last-Known-Byte: "+a),a&&(e.end=a),e.file.FileAPIReadPosition=e.end,setTimeout(function(){h._send(c,e)},0));g=null}},e.start=e.end+1,e.end=Math.max(Math.min(e.start+c.chunkSize,e.size)-1,e.start);var r=e.file,s=(r.slice||r.mozSlice||r.webkitSlice).call(r,e.start,e.end+1);e.size&&!s.size?setTimeout(function(){h.end(-1)}):(g.setRequestHeader("Content-Range","bytes "+e.start+"-"+e.end+"/"+e.size),g.setRequestHeader("Content-Disposition","attachment; filename="+encodeURIComponent(e.name)),g.setRequestHeader("Content-Type",e.type||"application/octet-stream"),g.send(s)),r=s=null}else if(g.upload&&g.upload.addEventListener("progress",b.throttle(function(a){c.progress(a,h,c)},100),!1),g.onreadystatechange=function(){if(h.status=g.status,h.statusText=g.statusText,h.readyState=g.readyState,4==g.readyState){for(var a in f)h["response"+a]=g["response"+a];if(g.onreadystatechange=null,!g.status||g.status>201)if(b.log("Error: "+g.status),(!g.status&&!g.aborted||500==g.status)&&(c.retry||0)=0?a+"px":a}function d(a){var c,d=f.createElement("canvas"),e=!1;try{c=d.getContext("2d"),c.drawImage(a,0,0,1,1),e=255!=c.getImageData(0,0,1,1).data[4]}catch(g){b.log("[FileAPI.Camera] detectVideoSignal:",g)}return e}var e=a.URL||a.webkitURL,f=a.document,g=a.navigator,h=g.getUserMedia||g.webkitGetUserMedia||g.mozGetUserMedia||g.msGetUserMedia,i=!!h;b.support.media=i;var j=function(a){this.video=a};j.prototype={isActive:function(){return!!this._active},start:function(a){var b,c,f=this,i=f.video,j=function(d){f._active=!d,clearTimeout(c),clearTimeout(b),a&&a(d,f)};h.call(g,{video:!0},function(a){f.stream=a,i.src=e.createObjectURL(a),b=setInterval(function(){d(i)&&j(null)},1e3),c=setTimeout(function(){j("timeout"); +},5e3),i.play()},j)},stop:function(){try{this._active=!1,this.video.pause();try{this.stream.stop()}catch(a){b.each(this.stream.getTracks(),function(a){a.stop()})}this.stream=null}catch(a){b.log("[FileAPI.Camera] stop:",a)}},shot:function(){return new k(this.video)}},j.get=function(a){return new j(a.firstChild)},j.publish=function(d,e,g){"function"==typeof e&&(g=e,e={}),e=b.extend({},{width:"100%",height:"100%",start:!0},e),d.jquery&&(d=d[0]);var h=function(a){if(a)g(a);else{var b=j.get(d);e.start?b.start(g):g(null,b)}};if(d.style.width=c(e.width),d.style.height=c(e.height),b.html5&&i){var k=f.createElement("video");k.style.width=c(e.width),k.style.height=c(e.height),a.jQuery?jQuery(d).empty():d.innerHTML="",d.appendChild(k),h()}else j.fallback(d,e,h)},j.fallback=function(a,b,c){c("not_support_camera")};var k=function(a){var c=a.nodeName?b.Image.toCanvas(a):a,d=b.Image(c);return d.type="image/png",d.width=c.width,d.height=c.height,d.size=c.width*c.height*4,d};j.Shot=k,b.Camera=j}(window,FileAPI),function(a,b,c){"use strict";var d=a.document,e=a.location,f=a.navigator,g=c.each;c.support.flash=function(){var b=f.mimeTypes,d=!1;if(f.plugins&&"object"==typeof f.plugins["Shockwave Flash"])d=f.plugins["Shockwave Flash"].description&&!(b&&b["application/x-shockwave-flash"]&&!b["application/x-shockwave-flash"].enabledPlugin);else try{d=!(!a.ActiveXObject||!new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))}catch(g){c.log("Flash -- does not supported.")}return d&&/^file:/i.test(e)&&c.log("[warn] Flash does not work on `file:` protocol."),d}(),c.support.flash&&(!c.html5||!c.support.html5||c.cors&&!c.support.cors||c.media&&!c.support.media)&&function(){function h(a){return('').replace(/#(\w+)#/gi,function(b,c){return a[c]})}function i(a,b){if(a&&a.style){var c,d;for(c in b){d=b[c],"number"==typeof d&&(d+="px");try{a.style[c]=d}catch(e){}}}}function j(a,b){g(b,function(b,c){var d=a[c];a[c]=function(){return this.parent=d,b.apply(this,arguments)}})}function k(a){return a&&!a.flashId}function l(a){var b=a.wid=c.uid();return v._fn[b]=a,"FileAPI.Flash._fn."+b}function m(a){try{v._fn[a.wid]=null,delete v._fn[a.wid]}catch(b){}}function n(a,b){if(!u.test(a)){if(/^\.\//.test(a)||"/"!=a.charAt(0)){var c=e.pathname;c=c.substr(0,c.lastIndexOf("/")),a=(c+"/"+a).replace("/./","/")}"//"!=a.substr(0,2)&&(a="//"+e.host+a),u.test(a)||(a=e.protocol+a)}return b&&(a+=(/\?/.test(a)?"&":"?")+b),a}function o(a,b,e){function f(){try{var a=v.get(j);a.setImage(b)}catch(d){c.log('[err] FlashAPI.Preview.setImage -- can not set "base64":',d)}}var g,j=c.uid(),k=d.createElement("div"),o=10;for(g in a)k.setAttribute(g,a[g]),k[g]=a[g];i(k,a),a.width="100%",a.height="100%",k.innerHTML=h(c.extend({id:j,src:n(c.flashImageUrl,"r="+c.uid()),wmode:"opaque",flashvars:"scale="+a.scale+"&callback="+l(function p(){return m(p),--o>0&&f(),!0})},a)),e(!1,k),k=null}function p(a){return{id:a.id,name:a.name,matrix:a.matrix,flashId:a.flashId}}function q(b){var c=b.getBoundingClientRect(),e=d.body,f=(b&&b.ownerDocument).documentElement;return{top:c.top+(a.pageYOffset||f.scrollTop)-(f.clientTop||e.clientTop||0),left:c.left+(a.pageXOffset||f.scrollLeft)-(f.clientLeft||e.clientLeft||0),width:c.right-c.left,height:c.bottom-c.top}}var r=c.uid(),s=0,t={},u=/^https?:/i,v={_fn:{},init:function(){var a=d.body&&d.body.firstChild;if(a)do if(1==a.nodeType){c.log("FlashAPI.state: awaiting");var b=d.createElement("div");return b.id="_"+r,i(b,{top:1,right:1,width:5,height:5,position:"absolute",zIndex:"2147483647"}),a.parentNode.insertBefore(b,a),void v.publish(b,r)}while(a=a.nextSibling);10>s&&setTimeout(v.init,50*++s)},publish:function(a,b,d){d=d||{},a.innerHTML=h({id:b,src:n(c.flashUrl,"r="+c.version),wmode:d.camera?"":"transparent",flashvars:"callback="+(d.onEvent||"FileAPI.Flash.onEvent")+"&flashId="+b+"&storeKey="+f.userAgent.match(/\d/gi).join("")+"_"+c.version+(v.isReady||(c.pingUrl?"&ping="+c.pingUrl:""))+"&timeout="+c.flashAbortTimeout+(d.camera?"&useCamera="+n(c.flashWebcamUrl):"")+"&debug="+(c.debug?"1":"")},d)},ready:function(){c.log("FlashAPI.state: ready"),v.ready=c.F,v.isReady=!0,v.patch(),v.patchCamera&&v.patchCamera(),c.event.on(d,"mouseover",v.mouseover),c.event.on(d,"click",function(a){v.mouseover(a)&&(a.preventDefault?a.preventDefault():a.returnValue=!0)})},getEl:function(){return d.getElementById("_"+r)},getWrapper:function(a){do if(/js-fileapi-wrapper/.test(a.className))return a;while((a=a.parentNode)&&a!==d.body)},mouseover:function(a){var b=c.event.fix(a).target;if(/input/i.test(b.nodeName)&&"file"==b.type&&!b.disabled){var e=b.getAttribute(r),f=v.getWrapper(b);if(c.multiFlash){if("i"==e||"r"==e)return!1;if("p"!=e){b.setAttribute(r,"i");var g=d.createElement("div");if(!f)return void c.log("[err] FlashAPI.mouseover: js-fileapi-wrapper not found");i(g,{top:0,left:0,width:b.offsetWidth,height:b.offsetHeight,zIndex:"2147483647",position:"absolute"}),f.appendChild(g),v.publish(g,c.uid()),b.setAttribute(r,"p")}return!0}if(f){var h=q(f);i(v.getEl(),h),v.curInp=b}}else/object|embed/i.test(b.nodeName)||i(v.getEl(),{top:1,left:1,width:5,height:5})},onEvent:function(a){var b=a.type;if("ready"==b){try{v.getInput(a.flashId).setAttribute(r,"r")}catch(d){}return v.ready(),setTimeout(function(){v.mouseenter(a)},50),!0}"ping"===b?c.log("(flash -> js).ping:",[a.status,a.savedStatus],a.error):"log"===b?c.log("(flash -> js).log:",a.target):b in v&&setTimeout(function(){c.log("FlashAPI.event."+a.type+":",a),v[b](a)},1)},mouseenter:function(a){var b=v.getInput(a.flashId);if(b){v.cmd(a,"multiple",null!=b.getAttribute("multiple"));var d=[],e={};g((b.getAttribute("accept")||"").split(/,\s*/),function(a){c.accept[a]&&g(c.accept[a].split(" "),function(a){e[a]=1})}),g(e,function(a,b){d.push(b)}),v.cmd(a,"accept",d.length?d.join(",")+","+d.join(",").toUpperCase():"*")}},get:function(b){return d[b]||a[b]||d.embeds[b]},getInput:function(a){if(!c.multiFlash)return v.curInp;try{var b=v.getWrapper(v.get(a));if(b)return b.getElementsByTagName("input")[0]}catch(d){c.log('[err] Can not find "input" by flashId:',a,d)}},select:function(a){var e,f=v.getInput(a.flashId),h=c.uid(f),i=a.target.files;g(i,function(a){c.checkFileObj(a)}),t[h]=i,d.createEvent?(e=d.createEvent("Event"),e.files=i,e.initEvent("change",!0,!0),f.dispatchEvent(e)):b?b(f).trigger({type:"change",files:i}):(e=d.createEventObject(),e.files=i,f.fireEvent("onchange",e))},cmd:function(a,b,d,e){try{return c.log("(js -> flash)."+b+":",d),v.get(a.flashId||a).cmd(b,d)}catch(f){c.log("(js -> flash).onError:",f.toString()),e||setTimeout(function(){v.cmd(a,b,d,!0)},50)}},patch:function(){c.flashEngine=!0,j(c,{getFiles:function(a,b,d){if(d)return c.filterFiles(c.getFiles(a),b,d),null;var e=c.isArray(a)?a:t[c.uid(a.target||a.srcElement||a)];return e?(b&&(b=c.getFilesFilter(b),e=c.filter(e,function(a){return b.test(a.name)})),e):this.parent.apply(this,arguments)},getInfo:function(a,b){if(k(a))this.parent.apply(this,arguments);else if(a.isShot)b(null,a.info={width:a.width,height:a.height});else{if(!a.__info){var d=a.__info=c.defer();v.cmd(a,"getFileInfo",{id:a.id,callback:l(function e(b,c){m(e),d.resolve(b,a.info=c)})})}a.__info.then(b)}}}),c.support.transform=!0,c.Image&&j(c.Image.prototype,{get:function(a,b){return this.set({scaleMode:b||"noScale"}),this.parent(a)},_load:function(a,b){if(c.log("FlashAPI.Image._load:",a),k(a))this.parent.apply(this,arguments);else{var d=this;c.getInfo(a,function(c){b.call(d,c,a)})}},_apply:function(a,b){if(c.log("FlashAPI.Image._apply:",a),k(a))this.parent.apply(this,arguments);else{var d=this.getMatrix(a.info),e=b;v.cmd(a,"imageTransform",{id:a.id,matrix:d,callback:l(function f(g,h){c.log("FlashAPI.Image._apply.callback:",g),m(f),g?e(g):c.support.html5||c.support.dataURI&&!(h.length>3e4)?(d.filter&&(e=function(a,e){a?b(a):c.Image.applyFilter(e,d.filter,function(){b(a,this.canvas)})}),c.newImage("data:"+a.type+";base64,"+h,e)):o({width:d.deg%180?d.dh:d.dw,height:d.deg%180?d.dw:d.dh,scale:d.scaleMode},h,e)})})}},toData:function(a){var b=this.file,d=b.info,e=this.getMatrix(d);c.log("FlashAPI.Image.toData"),k(b)?this.parent.apply(this,arguments):("auto"==e.deg&&(e.deg=c.Image.exifOrientation[d&&d.exif&&d.exif.Orientation]||0),a.call(this,!b.info,{id:b.id,flashId:b.flashId,name:b.name,type:b.type,matrix:e}))}}),c.Image&&j(c.Image,{fromDataURL:function(a,b,d){!c.support.dataURI||a.length>3e4?o(c.extend({scale:"exactFit"},b),a.replace(/^data:[^,]+,/,""),function(a,b){d(b)}):this.parent(a,b,d)}}),j(c.Form.prototype,{toData:function(a){for(var b=this.items,d=b.length;d--;)if(b[d].file&&k(b[d].blob))return this.parent.apply(this,arguments);c.log("FlashAPI.Form.toData"),a(b)}}),j(c.XHR.prototype,{_send:function(a,b){if(b.nodeName||b.append&&c.support.html5||c.isArray(b)&&"string"==typeof b[0])return this.parent.apply(this,arguments);var d,e,f={},h={},i=this;if(g(b,function(a){a.file?(h[a.name]=a=p(a.blob),e=a.id,d=a.flashId):f[a.name]=a.blob}),e||(d=r),!d)return c.log("[err] FlashAPI._send: flashId -- undefined"),this.parent.apply(this,arguments);c.log("FlashAPI.XHR._send: "+d+" -> "+e),i.xhr={headers:{},abort:function(){v.cmd(d,"abort",{id:e})},getResponseHeader:function(a){return this.headers[a]},getAllResponseHeaders:function(){return this.headers}};var j=c.queue(function(){v.cmd(d,"upload",{url:n(a.url.replace(/([a-z]+)=(\?)&?/i,"")),data:f,files:e?h:null,headers:a.headers||{},callback:l(function b(d){var e=d.type,f=d.result;c.log("FlashAPI.upload."+e),"progress"==e?(d.loaded=Math.min(d.loaded,d.total),d.lengthComputable=!0,a.progress(d)):"complete"==e?(m(b),"string"==typeof f&&(i.responseText=f.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),i.end(d.status||200)):("abort"==e||"error"==e)&&(i.end(d.status||0,d.message),m(b))})})});g(h,function(a){j.inc(),c.getInfo(a,j.next)}),j.check()}})}};c.Flash=v,c.newImage("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",function(a,b){c.support.dataURI=!(1!=b.width||1!=b.height),v.init()})}()}(window,window.jQuery,FileAPI),function(a,b,c){"use strict";var d=c.each,e=[];!c.support.flash||!c.media||c.support.media&&c.html5||!function(){function a(a){var b=a.wid=c.uid();return c.Flash._fn[b]=a,"FileAPI.Flash._fn."+b}function b(a){try{c.Flash._fn[a.wid]=null,delete c.Flash._fn[a.wid]}catch(b){}}var f=c.Flash;c.extend(c.Flash,{patchCamera:function(){c.Camera.fallback=function(d,e,g){var h=c.uid();c.log("FlashAPI.Camera.publish: "+h),f.publish(d,h,c.extend(e,{camera:!0,onEvent:a(function i(a){"camera"===a.type&&(b(i),a.error?(c.log("FlashAPI.Camera.publish.error: "+a.error),g(a.error)):(c.log("FlashAPI.Camera.publish.success: "+h),g(null)))})}))},d(e,function(a){c.Camera.fallback.apply(c.Camera,a)}),e=[],c.extend(c.Camera.prototype,{_id:function(){return this.video.id},start:function(d){var e=this;f.cmd(this._id(),"camera.on",{callback:a(function g(a){b(g),a.error?(c.log("FlashAPI.camera.on.error: "+a.error),d(a.error,e)):(c.log("FlashAPI.camera.on.success: "+e._id()),e._active=!0,d(null,e))})})},stop:function(){this._active=!1,f.cmd(this._id(),"camera.off")},shot:function(){c.log("FlashAPI.Camera.shot:",this._id());var a=c.Flash.cmd(this._id(),"shot",{});return a.type="image/png",a.flashId=this._id(),a.isShot=!0,new c.Camera.Shot(a)}})}}),c.Camera.fallback=function(){e.push(arguments)}}()}(window,window.jQuery,FileAPI),"function"==typeof define&&define.amd&&define("FileAPI",[],function(){return FileAPI}); \ No newline at end of file diff --git a/manager/media/browser/mcpuk/js/FileAPI/crossdomain.xml.example b/manager/media/browser/mcpuk/js/FileAPI/crossdomain.xml.example new file mode 100755 index 00000000..32920c4f --- /dev/null +++ b/manager/media/browser/mcpuk/js/FileAPI/crossdomain.xml.example @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/manager/media/browser/mcpuk/js/FileAPI/jquery.fileapi.min.js b/manager/media/browser/mcpuk/js/FileAPI/jquery.fileapi.min.js new file mode 100755 index 00000000..ec7369ec --- /dev/null +++ b/manager/media/browser/mcpuk/js/FileAPI/jquery.fileapi.min.js @@ -0,0 +1,2 @@ +/*! fileapi 2.0.1 - BSD | git://github.com/mailru/FileAPI.git */ +(function(e,t){"use strict";var n=e.noop,i=!e.fn.prop,a=i?"attr":"prop",r="data-fileapi",o="data-fileapi-id",s=function(i,a){if(this.$el=i=e(i).on("change.fileapi",e.proxy(this,"_onSelect")),this.el=i[0],this._options={},this.options=a=e.extend({url:0,data:{},accept:0,multiple:!1,paramName:0,dataType:"json",duplicate:!1,chunkSize:0,chunkUploadRetry:3,maxSize:0,maxFiles:0,imageSize:0,sortFn:0,filterFn:0,autoUpload:!1,lang:{B:"bytes",KB:"KB",MB:"MB",GB:"GB",TB:"TB"},sizeFormat:"0.00",imageTransform:0,elements:{ctrl:{upload:'[data-fileapi="ctrl.upload"]',reset:'[data-fileapi="ctrl.reset"]',abort:'[data-fileapi="ctrl.abort"]'},empty:{show:'[data-fileapi="empty.show"]',hide:'[data-fileapi="empty.hide"]'},emptyQueue:{show:'[data-fileapi="emptyQueue.show"]',hide:'[data-fileapi="emptyQueue.hide"]'},active:{show:'[data-fileapi="active.show"]',hide:'[data-fileapi="active.hide"]'},size:'[data-fileapi="size"]',name:'[data-fileapi="name"]',progress:'[data-fileapi="progress"]',file:{tpl:'[data-fileapi="file.tpl"]',progress:'[data-fileapi="file.progress"]',active:{show:'[data-fileapi="active.show"]',hide:'[data-fileapi="active.hide"]'},preview:{el:0,get:0,width:0,height:0,processing:0}},dnd:{el:'[data-fileapi="dnd"]',hover:"dnd_hover"}},onDrop:n,onDropHover:n,onSelect:n,onUpload:n,onProgress:n,onComplete:n,onFileUpload:n,onFileProgress:n,onFileComplete:n},a),!a.url){var o=this.$el.attr("action")||this.$el.find("form").attr("action");o?a.url=o:this._throw("url — is not defined")}this.$files=this.elem("list"),this.itemTplFn=e.fn.fileapi.tpl(e("
          ").append(this.elem("file.tpl")).html()),t.each(a,function(e,t){this._setOption(t,e)},this),this.$el.on("reset.fileapi",e.proxy(this,"_onReset")).on("submit.fileapi",e.proxy(this,"_onSubmit")).on("upload.fileapi progress.fileapi complete.fileapi",e.proxy(this,"_onUploadEvent")).on("fileupload.fileapi fileprogress.fileapi filecomplete.fileapi",e.proxy(this,"_onFileUploadEvent")).on("click","["+r+"]",e.proxy(this,"_onActionClick"));var s=a.elements.ctrl;s&&(s.reset&&this.$el.on("click.fileapi",s.reset,e.proxy(this,"_onReset")),s.upload&&this.$el.on("click.fileapi",s.upload,e.proxy(this,"_onSubmit"))),this.elem("dnd.el",!0).dnd(e.proxy(this,"_onDropHover"),e.proxy(this,"_onDrop")),this.$progress=this.elem("progress"),this._crop={},this._rotate={},this.files=[],this.uploaded=[],this.clear()};s.prototype={constructor:s,_throw:function(e){throw"jquery.fileapi: "+e},_getFiles:function(e,n){var i=this.options,a=i.maxSize,r=i.filterFn,o=t.getFiles(e),s={all:o,files:[],other:[],duplicate:i.duplicate?[]:this._extractDuplicateFiles(o)},l=i.imageSize,u=this;l||r?t.filterFiles(o,function(e,t){var n=!0;return t&&l&&(n=(!l.minWidth||t.width>=l.minWidth)&&(!l.minHeight||t.height>=l.minHeight)&&(!l.maxWidth||t.height<=l.maxWidth)&&(!l.maxHeight||t.height<=l.maxHeight)),n&&(!a||a>=e.size)&&(!r||r(e,t))},function(e,t){s.files=e,s.other=t,n.call(u,s)}):(t.each(o,function(e){s[!a||a>=e.size?"files":"other"].push(e)}),n.call(u,s))},_extractDuplicateFiles:function(e){for(var t,n=[],i=e.length,a=this.files;i--;)for(t=a.length;t--;)if(this._fileCompare(e[i],a[t])){n.push(e.splice(i,1));break}return n},_fileCompare:function(e,t){return e.size==t.size&&e.name==t.name},_getFormatedSize:function(e){var n=this.options,i="B";return e>=t.TB?e/=t[i="TB"]:e>=t.GB?e/=t[i="GB"]:e>=t.MB?e/=t[i="MB"]:e>=t.KB&&(e/=t[i="KB"]),n.sizeFormat.replace(/^\d+([^\d]+)(\d*)/,function(t,a,r){return e=e.toFixed(r.length),(e+"").replace(".",a)+" "+n.lang[i]})},_onSelect:function(t){this._getFiles(t,e.proxy(function(e){e.all.length&&this.emit("select",e)!==!1&&this.add(e.files)},this))},_onActionClick:function(n){var i=n.currentTarget,a=e.attr(i,r),s=e(i).closest("["+o+"]",this.$el),l=s.attr(o),u=!0;"remove"==a?(s.remove(),this.queue=t.filter(this.queue,function(e){return t.uid(e)!=l}),this.files=t.filter(this.files,function(e){return t.uid(e)!=l}),this._redraw()):/^rotate/.test(a)?this.rotate(l,/ccw/.test(a)?"-=90":"+=90"):u=!1,u&&n.preventDefault()},_onSubmit:function(e){this.upload(),e.preventDefault()},_onReset:function(e){this.clear(),e.preventDefault()},_onDrop:function(e){this._getFiles(e,function(e){this.emit("drop",e)!==!1&&this.add(e.files)})},_onDropHover:function(t,n){if(this.emit("dropHover",{state:t,event:n})!==!1){var i=this.option("elements.dnd.hover");i&&e(n.currentTarget).toggleClass(i,t)}},_getUploadEvent:function(t){var n=this.xhr,i={xhr:n,file:n.currentFile,files:n.files,widget:this};return e.extend(i,t)},_emitUploadEvent:function(e){var t=this._getUploadEvent();this.emit(e+"upload",t)},_emitProgressEvent:function(e,t){var n=this._getUploadEvent(t);this.emit(e+"progress",n)},_emitCompleteEvent:function(t,n){var i=this.xhr,a=this._getUploadEvent({error:n,status:i.status,statusText:i.statusText,result:i.responseText});"json"==this.options.dataType&&(a.result=e.parseJSON(a.result)),this.emit(t+"complete",a)},_onUploadEvent:function(e,t){var n=this,i=this.$progress,a=e.type;if("progress"==a)i.stop().animate({width:100*(t.loaded/t.total)+"%"},300);else if("upload"==a)i.width(0);else{var r=function(){i.dequeue(),n.clear()};this.xhr=null,this.active=!1,i.length?i.queue(r):r()}},_onFileUploadPrepare:function(n,i){var a=t.uid(n),r=this._rotate[a],o=this._crop[a];if(r||o){var s=i.imageTransform=i.imageTransform||{};e.isEmptyObject(s)||parseInt(s.maxWidth||s.minWidth||s.width,10)>0||s.type||s.quality?(s.crop=o,s.rotate=r):t.each(s,function(e){e.crop=o,e.rotate=r})}},_onFileUploadEvent:function(e,n){var i=this,a=e.type.substr(4),o=t.uid(n.file),s=this.fileElem(o),l=this._$fileprogress;if(this.__fileId!==o&&(this.__fileId=o,this._$fileprogress=l=s.find(this.option("elements.file.progress"))),"progress"==a)l.stop().animate({width:100*(n.loaded/n.total)+"%"},300);else if("upload"==a||"complete"==a){var u=function(){var e="elements.file."+a;"upload"==a&&(s.find("["+r+'="remove"]').hide(),l.width(0)),l.dequeue(),s.find(i.option(e+".show")).show(),s.find(i.option(e+".hide")).hide()};l.length?l.queue(u):u(),"complete"==a&&(this.uploaded.push(n.file),delete this._rotate[o])}},_redraw:function(){var n=!!this.active,i=this.files,r=!i.length&&!n,s=!this.queue.length&&!n,l=[],u=0,c=this.$files,f=c.children().length,d=this.option("elements.file.preview");t.each(i,function(n,i){var a=t.uid(n);if(l.push(n.name),u+=n.size,c.length&&!this.fileElem(a).length){var r=this.itemTplFn({$idx:f+i,uid:n.uid,name:n.name,type:n.type,size:n.size,sizeText:this._getFormatedSize(n.size)});c.append(e(r).attr(o,a)),d.el&&this._makeFilePreview(a,n,d)}},this),this.elem("name").text(l.join(", ")),this.elem("size").text(this._getFormatedSize(u)),this.__empty!==r&&(this.__empty=r,this.elem("empty.show").toggle(r),this.elem("empty.hide").toggle(!r)),this.__emptyQueue!==s&&(this.__emptyQueue=r,this.elem("emptyQueue.show").toggle(s),this.elem("emptyQueue.hide").toggle(!s)),this.__active!==n&&(this.__active=n,this.elem("active.show").toggle(n),this.elem("active.hide").toggle(!n),this.$(".js-fileapi-wrapper,:file")[n?"attr":"removeAttr"]("aria-disabled",n)[a]("disabled",n)),this.elem("ctrl.upload").add(this.elem("ctrl.reset"))[r||n?"attr":"removeAttr"]("aria-disabled",r||n)[a]("disabled",r||n)},_makeFilePreview:function(e,n,i,a){var r=this,o=a?r.$(i.el):r.fileElem(e).find(i.el);if(/^image/.test(n.type)){t.log("_makeFilePreview:",e,n);var s=t.Image(n),l=function(){s.get(function(t,a){r._crop[e]||(t?(i.get&&i.get(o,n),r.emit("filePreviewError",{error:t,file:n})):o.html(a))})};i.width&&s.preview(i.width,i.height),i.rotate&&s.rotate(i.rotate),i.processing?i.processing(n,s,l):l()}else i.get&&i.get(o,n)},emit:function(t,n){var i,a=this.options,r=e.Event(t);return r.widget=this,t=e.camelCase("on-"+t.replace(/(file)(upload)/,"$1-$2")),e.isFunction(a[t])&&(i=a[t].call(this.el,r,n)),i!==!1&&this.$el.triggerHandler(r,n)},add:function(e){if(e.length){var n=this.options,i=n.sortFn,a=n.elements.preview;i&&e.sort(i),a&&a.el&&t.each(e,function(e){this._makeFilePreview(t.uid(e),e,a,!0)},this),this.xhr&&this.xhr.append(e),this.queue=this.queue.concat(e),this.files=this.files.concat(e),this.options.autoUpload?this.upload():this._redraw()}},$:function(t,n){return"string"==typeof t&&(t=/^#/.test(t)?t:(n?e(n):this.$el).find(t)),e(t)},elem:function(t,n){var i=this.option("elements."+t);return void 0===i&&n&&(i=this.option("elements."+t.substr(0,t.lastIndexOf(".")))),this.$("string"!=e.type(i)&&e.isEmptyObject(i)?[]:i)},fileElem:function(e){return this.$("["+o+'="'+e+'"]')},option:function(n,i){if(void 0!==i&&e.isPlainObject(i))return t.each(i,function(e,t){this.option(n+"."+t,e)},this),this;var a,r,o=this.options,s=o[n],l=0;if(-1!=n.indexOf("."))for(s=o,n=n.split("."),a=n.length;a>l;l++){if(r=n[l],void 0!==i&&1===a-l){s[r]=i;break}void 0===s[r]&&(s[r]={}),s=s[r]}else void 0!==i&&(o[n]=i);return void 0!==i&&(this._setOption(n,i,this._options[n]),this._options[n]=i),void 0!==i?i:s},_setOption:function(e,t){switch(e){case"accept":case"multiple":case"paramName":"paramName"==e&&(e="name"),t&&this.$(":file")[a](e,t)}},serialize:function(){var t,n={};return this.$el.find(":input").each(function(i,a){(i=a.name)&&!a.disabled&&(a.checked||/select|textarea|input/i.test(a.nodeName)&&/checkbox|radio/i.test(a.type))&&(t=e(a).val(),void 0!==n[i]?(n[i].push||(n[i]=[n[i]]),n[i].push(t)):n[i]=t)}),n},upload:function(){if(!this.active){this.active=!0;var n=this.$el,i=this.options,a={},r={url:i.url,data:e.extend({},this.serialize(),i.data),files:a,chunkSize:0|i.chunkSize,chunkUploadRetry:0|i.chunkUploadRetry,prepare:e.proxy(this,"_onFileUploadPrepare"),imageTransform:i.imageTransform};a[n.find(":file").attr("name")||"files[]"]=this.queue,t.each(["upload","progress","complete"],function(t){r[t]=e.proxy(this,e.camelCase("_emit-"+t+"Event"),""),r["file"+t]=e.proxy(this,e.camelCase("_emit-"+t+"Event"),"file")},this),this.xhr=t.upload(r),this._redraw()}},crop:function(n,i){var a=t.uid(n),r=this.options,o=r.multiple?this.option("elements.file.preview"):r.elements.preview,s=(r.multiple?this.fileElem(a):this.$el).find(o&&o.el);s.length&&t.getInfo(n,e.proxy(function(a,r){if(!a){s.find("div>div").length||s.html(e("
          ").css(o).css("overflow","hidden")),this.__cropFile!==n&&(this.__cropFile=n,t.Image(n).get(function(t,n){s.find(">div>div").html(e(n).width("100%").height("100%"))},"exactFit"));var l=o.width/i.w,u=o.height/i.h;s.find(">div>div").css({width:Math.round(l*r.width),height:Math.round(u*r.height),marginLeft:-Math.round(l*i.x),marginTop:-Math.round(u*i.y)})}},this)),this._crop[a]=i},rotate:function(e,n){var i="object"==typeof e?t.uid(e):e,a=this.options,r=a.multiple?this.option("elements.file.preview"):a.elements.preview,o=(a.multiple?this.fileElem(i):this.$el).find(r&&r.el),s=this._rotate;/([+-])=/.test(n)?n=s[i]=(s[i]||0)+("+"==RegExp.$1?1:-1)*n.substr(2):s[i]=n,o.css({"-webkit-transform":"rotate("+n+"deg)","-moz-transform":"rotate("+n+"deg)",transform:"rotate("+n+"deg)"})},clear:function(){this.queue=[],this._redraw()},widget:function(){return this},destroy:function(){this.$el.off(".fileapi").removeData("fileapi")}},e.fn.fileapi=function(t,n){var i=this.data("fileapi");if(i){if("widget"===t)return i;if("string"==typeof t){var a,r=i[t];return e.isFunction(r)?a=r.call(i,n,arguments[2]):void 0===r&&(a=this.option(t,n)),void 0===a?this:a}}else this.data("fileapi",new s(this,t));return this},e.fn.fileapi.version="0.1.0",e.fn.fileapi.tpl=function(e){var t=0,n="__b+='";return e.replace(/(?:<|<)%([-=])?([\s\S]+?)%(?:>|>)|$/g,function(i,a,r,o){return n+=e.slice(t,o).replace(/[\r\n"']/g,function(e){return"\\"+e}),r&&(n+=a?"'+\n((__x=("+r+"))==null?'':"+("-"==a?"__esc(__x)":"__x")+")\n+'":"';\n"+r+"\n__b+='"),t=o+i.length,i}),Function("ctx","var __x,__b='',__esc=function(val){return typeof val=='string'?val.replace(/ a'), - boundary = '------multipartdropuploadboundary' + (new Date).getTime(), - currentFile, - - filesDragOver = function(e) { - if (e.preventDefault) e.preventDefault(); - $('#files').addClass('drag'); - return false; - }, - - filesDragEnter = function(e) { - if (e.preventDefault) e.preventDefault(); - return false; - }, - - filesDragLeave = function(e) { - if (e.preventDefault) e.preventDefault(); - $('#files').removeClass('drag'); - return false; - }, - - filesDrop = function(e) { - if (e.preventDefault) e.preventDefault(); - if (e.stopPropagation) e.stopPropagation(); - $('#files').removeClass('drag'); - if (!$('#folders span.current').first().parent().data('writable')) { - browser.alert("Cannot write to upload folder."); - return false; - } - filesCount += e.dataTransfer.files.length - for (var i = 0; i < e.dataTransfer.files.length; i++) { - var file = e.dataTransfer.files[i]; - file.thisTargetDir = browser.dir; - uploadQueue.push(file); - } - processUploadQueue(); - return false; - }, - - folderDrag = function(e) { - if (e.preventDefault) e.preventDefault(); - return false; - }, - - folderDrop = function(e, dir) { - if (e.preventDefault) e.preventDefault(); - if (e.stopPropagation) e.stopPropagation(); - if (!$(dir).data('writable')) { - browser.alert("Cannot write to upload folder."); - return false; - } - filesCount += e.dataTransfer.files.length - for (var i = 0; i < e.dataTransfer.files.length; i++) { - var file = e.dataTransfer.files[i]; - file.thisTargetDir = $(dir).data('path'); - uploadQueue.push(file); - } - processUploadQueue(); - return false; - }; - - var handlers = files.data( 'handlers' ); - - if ( handlers ) { - if ( handlers.dragover ) { - files.get(0).removeEventListener('dragover', handlers.dragover, false); - } - if ( handlers.dragenter ) { - files.get(0).removeEventListener('dragenter', handlers.dragenter, false); - } - if ( handlers.dragleave ) { - files.get(0).removeEventListener('dragleave', handlers.dragleave, false); - } - if ( handlers.drop ) { - files.get(0).removeEventListener('drop', handlers.drop, false); - } - } - - files.get(0).addEventListener('dragover', filesDragOver, false); - files.get(0).addEventListener('dragenter', filesDragEnter, false); - files.get(0).addEventListener('dragleave', filesDragLeave, false); - files.get(0).addEventListener('drop', filesDrop, false); - - files.data( 'handlers', { - dragover: filesDragOver, - dragenter: filesDragEnter, - dragleave: filesDragLeave, - drop: filesDrop - } ); - - folders.each(function() { - var folder = this, - - dragOver = function(e) { - $(folder).children('span.folder').addClass('context'); - return folderDrag(e); - }, - - dragLeave = function(e) { - $(folder).children('span.folder').removeClass('context'); - return folderDrag(e); - }, - - drop = function(e) { - $(folder).children('span.folder').removeClass('context'); - return folderDrop(e, folder); - }; - - this.removeEventListener('dragover', dragOver, false); - this.removeEventListener('dragenter', folderDrag, false); - this.removeEventListener('dragleave', dragLeave, false); - this.removeEventListener('drop', drop, false); - - this.addEventListener('dragover', dragOver, false); - this.addEventListener('dragenter', folderDrag, false); - this.addEventListener('dragleave', dragLeave, false); - this.addEventListener('drop', drop, false); - }); - - function updateProgress(evt) { - var progress = evt.lengthComputable - ? Math.round((evt.loaded * 100) / evt.total) + '%' - : Math.round(evt.loaded / 1024) + " KB"; - $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { - number: filesCount - uploadQueue.length, - count: filesCount, - progress: progress - })); - } - - function processUploadQueue() { - if (uploadInProgress) - return false; - - if (uploadQueue && uploadQueue.length) { - var file = uploadQueue.shift(); - currentFile = file; - $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { - number: filesCount - uploadQueue.length, - count: filesCount, - progress: "" - })); - $('#loading').css('display', 'inline'); - - var reader = new FileReader(); - reader.thisFileName = file.name; - reader.thisFileType = file.type; - reader.thisFileSize = file.size; - reader.thisTargetDir = file.thisTargetDir; - - reader.onload = function(evt) { - uploadInProgress = true; - - var postbody = '--' + boundary + '\r\nContent-Disposition: form-data; name="upload[]"'; - if (evt.target.thisFileName) - postbody += '; filename="' + _.utf8encode(evt.target.thisFileName) + '"'; - postbody += '\r\n'; - if (evt.target.thisFileSize) - postbody += 'Content-Length: ' + evt.target.thisFileSize + '\r\n'; - postbody += 'Content-Type: ' + evt.target.thisFileType + '\r\n\r\n' + evt.target.result + '\r\n--' + boundary + '\r\nContent-Disposition: form-data; name="dir"\r\n\r\n' + _.utf8encode(evt.target.thisTargetDir) + '\r\n--' + boundary + '\r\n--' + boundary + '--\r\n'; - - var xhr = new XMLHttpRequest(); - xhr.thisFileName = evt.target.thisFileName; - - if (xhr.upload) { - xhr.upload.thisFileName = evt.target.thisFileName; - xhr.upload.addEventListener("progress", updateProgress, false); - } - xhr.open('POST', browser.baseGetData('upload'), true); - xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); - xhr.setRequestHeader('Content-Length', postbody.length); - - xhr.onload = function(e) { - $('#loading').css('display', 'none'); - if (browser.dir == reader.thisTargetDir) - browser.fadeFiles(); - uploadInProgress = false; - processUploadQueue(); - if (xhr.responseText.substr(0, 1) != '/') - errors[errors.length] = xhr.responseText; - } - - xhr.sendAsBinary(postbody); - }; - - reader.onerror = function(evt) { - $('#loading').css('display', 'none'); - uploadInProgress = false; - processUploadQueue(); - errors[errors.length] = browser.label("Failed to upload {filename}!", { - filename: evt.target.thisFileName - }); - }; - - reader.readAsBinaryString(file); - - } else { - filesCount = 0; - var loop = setInterval(function() { - if (uploadInProgress) return; - boundary = '------multipartdropuploadboundary' + (new Date).getTime(); - uploadQueue = []; - clearInterval(loop); - if (currentFile.thisTargetDir == browser.dir) - browser.refresh(); - if (errors.length) { - browser.alert(errors.join('\n')); - errors = []; - } - }, 333); - } - } -}; diff --git a/manager/media/browser/mcpuk/js/browser/files.js b/manager/media/browser/mcpuk/js/browser/files.js index 1158f19f..18a04b7b 100755 --- a/manager/media/browser/mcpuk/js/browser/files.js +++ b/manager/media/browser/mcpuk/js/browser/files.js @@ -48,6 +48,7 @@ browser.initFiles = function() { $('#files .file div.' + val).css('display', display); }); this.statusDir(); + lazyLoadInstance.update(); }; browser.showFiles = function(callBack, selected) { @@ -77,7 +78,7 @@ browser.showFiles = function(callBack, selected) { } else { if (file.thumb) var icon = browser.baseGetData('thumb') + '&file=' + encodeURIComponent(file.name) + '&dir=' + encodeURIComponent(browser.dir) + '&stamp=' + stamp; - else if (file.smallThumb) { + else if (file.smallThumb || _.getFileExtension(file.name) === 'svg') { var icon = browser.siteURL + browser.assetsURL + '/' + browser.dir + '/' + file.name; icon = _.escapeDirs(icon).replace(/\'/g, "%27"); } else { @@ -86,7 +87,7 @@ browser.showFiles = function(callBack, selected) { icon = 'themes/' + browser.theme + '/img/files/big/' + icon + '.png'; } html += '
          ' + - '
          ' + + '
          ' + '
          ' + _.htmlData(file.name) + '
          ' + '
          ' + file.date + '
          ' + '
          ' + browser.humanSize(file.size) + '
          ' + @@ -265,7 +266,7 @@ browser.menuFile = function(file, e) { } if (data.thumb || data.smallThumb || this.support.zip) { html += (html.length ? '
          ' : ''); - if (data.thumb || data.smallThumb) + if (data.thumb || data.smallThumb || data.preview) html +='' + this.label("View") + ''; if (this.support.zip) html += (html.length ? '
          ' : '') + '' + this.label("Download") + ''; @@ -401,7 +402,7 @@ browser.menuFile = function(file, e) { html += '
          '; } - if (data.thumb || data.smallThumb) + if (data.thumb || data.smallThumb || data.preview) html +='' + this.label("View") + ''; html += diff --git a/manager/media/browser/mcpuk/js/browser/folders.js b/manager/media/browser/mcpuk/js/browser/folders.js index 822d9623..ed0bb5f3 100755 --- a/manager/media/browser/mcpuk/js/browser/folders.js +++ b/manager/media/browser/mcpuk/js/browser/folders.js @@ -144,7 +144,6 @@ browser.expandDir = function(dir) { dir.children('.brace').removeClass('closed'); } browser.initFolders(); - browser.initDropUpload(); }, error: function() { $('#loadingDirs').detach(); @@ -270,10 +269,10 @@ browser.menuDir = function(dir, e) { title: "New folder name:", errEmpty: "Please enter new folder name.", errSlash: "Unallowable characters in folder name.", - errDot: "Folder name shouldn't begins with '.'" + errDot: "Folder name shouldn't begins with '.'", + errMain: "Unable to create folder." }, function() { browser.refreshDir(dir); - browser.initDropUpload(); if (!data.hasDirs) { dir.data('hasDirs', true); dir.children('span.brace').addClass('closed'); @@ -292,7 +291,8 @@ browser.menuDir = function(dir, e) { title: "New folder name:", errEmpty: "Please enter new folder name.", errSlash: "Unallowable characters in folder name.", - errDot: "Folder name shouldn't begins with '.'" + errDot: "Folder name shouldn't begins with '.'", + errMain: "Unable to rename folder." }, function(dt) { if (!dt.name) { browser.alert(browser.label("Unknown error.")); @@ -304,7 +304,6 @@ browser.menuDir = function(dir, e) { dir.data('path', _.dirname(data.path) + '/' + dt.name); if (currentDir) browser.dir = dir.data('path'); - browser.initDropUpload(); }, true ); @@ -339,12 +338,11 @@ browser.menuDir = function(dir, e) { } if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length)) browser.changeDir(pDir); - browser.initDropUpload(); }); }, error: function() { if (callBack) callBack(); - browser.alert(browser.label("Unknown error.")); + browser.alert(browser.label("Unable to delete folder.")); } }); } @@ -364,4 +362,4 @@ browser.refreshDir = function(dir) { browser.changeDir(dir); browser.expandDir(dir); return true; -}; \ No newline at end of file +}; diff --git a/manager/media/browser/mcpuk/js/browser/init.js b/manager/media/browser/mcpuk/js/browser/init.js index 43d56760..a1e581d5 100755 --- a/manager/media/browser/mcpuk/js/browser/init.js +++ b/manager/media/browser/mcpuk/js/browser/init.js @@ -9,7 +9,6 @@ * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 * @link http://kcfinder.sunhater.com */ - browser.init = function() { if (!this.checkAgent()) return; @@ -28,12 +27,11 @@ browser.init = function() { return false; }); this.initOpeners(); - console.log(this.opener); this.initSettings(); this.initContent(); this.initToolbar(); + this.initUploader(); this.initResizer(); - this.initDropUpload(); }; browser.checkAgent = function() { @@ -186,4 +184,4 @@ browser.fixFilesHeight = function() { _('files').style.height = $('#left').outerHeight() - $('#toolbar').outerHeight() - _.outerVSpace('#files') - (($('#settings').css('display') != "none") ? $('#settings').outerHeight() : 0) + 'px'; -}; \ No newline at end of file +}; diff --git a/manager/media/browser/mcpuk/js/browser/misc.js b/manager/media/browser/mcpuk/js/browser/misc.js index 2a7dddec..99bc699f 100755 --- a/manager/media/browser/mcpuk/js/browser/misc.js +++ b/manager/media/browser/mcpuk/js/browser/misc.js @@ -125,7 +125,7 @@ browser.showAlert = function(shadow) { }); }; -browser.hideAlert = function(shadow) { +browser.hideAlert = function(shadow, callback) { if (typeof shadow == 'undefined') shadow = true; if (shadow) @@ -133,14 +133,17 @@ browser.hideAlert = function(shadow) { $('#alert').css('display', 'none'); $('#alert').html(''); $('#alert').data('title', null); + if (typeof callback == 'function') { + callback(); + } }; -browser.alert = function(msg, shadow) { +browser.alert = function(msg, shadow, callback) { msg = msg.replace(/\r?\n/g, "
          "); var title = $('#alert').data('title') ? $('#alert').data('title') : browser.label("Attention"); $('#alert').html('
          ' + title + '
          ' + msg + '
          '); $('#alert div.ok button').click(function() { - browser.hideAlert(shadow); + browser.hideAlert(shadow, callback); }); $('#alert div.title span.close').mousedown(function() { $(this).addClass('clicked'); @@ -149,7 +152,7 @@ browser.alert = function(msg, shadow) { $(this).removeClass('clicked'); }); $('#alert div.title span.close').click(function() { - browser.hideAlert(shadow); + browser.hideAlert(shadow, callback); }); $('#alert').drag(browser.drag, {handle: "#alert div.title"}); browser.showAlert(shadow); @@ -241,7 +244,7 @@ browser.fileNameDialog = function(e, post, inputName, inputValue, url, labels, c browser.hideDialog(); }, error: function() { - browser.alert(browser.label("Unknown error."), false); + browser.alert(browser.label(labels.errMain), false); } }); return false; diff --git a/manager/media/browser/mcpuk/js/browser/toolbar.js b/manager/media/browser/mcpuk/js/browser/toolbar.js index bee1e2ac..17675503 100755 --- a/manager/media/browser/mcpuk/js/browser/toolbar.js +++ b/manager/media/browser/mcpuk/js/browser/toolbar.js @@ -51,123 +51,8 @@ browser.initToolbar = function() { }); else $('#toolbar a[href="kcact:maximize"]').css('display', 'none'); - - $('#toolbar a[href="kcact:about"]').click(function() { - var html = '
          ' + - '
          KCFinder ' + browser.version + '
          '; - if (browser.support.check4Update) - html += '
          ' + browser.label("Checking for new version...") + '
          '; - html += - '
          ' + browser.label("Licenses:") + ' GPLv2 & LGPLv2
          ' + - '
          Copyright ©2010-2014 Pavel Tzonkov
          ' + - '' + - '
          '; - $('#dialog').html(html); - $('#dialog').data('title', browser.label("About")); - browser.showDialog(); - var close = function() { - browser.hideDialog(); - browser.unshadow(); - } - $('#dialog button').click(close); - var span = $('#checkver > span'); - setTimeout(function() { - $.ajax({ - dataType: 'json', - url: browser.baseGetData('check4Update'), - async: true, - success: function(data) { - if (!$('#dialog').html().length) - return; - span.removeClass('loading'); - if (!data.version) { - span.html(browser.label("Unable to connect!")); - browser.showDialog(); - return; - } - if (browser.version < data.version) - span.html('' + browser.label("Download version {version} now!", {version: data.version}) + ''); - else - span.html(browser.label("KCFinder is up to date!")); - browser.showDialog(); - }, - error: function() { - if (!$('#dialog').html().length) - return; - span.removeClass('loading'); - span.html(browser.label("Unable to connect!")); - browser.showDialog(); - } - }); - }, 1000); - $('#dialog').unbind(); - - return false; - }); - - this.initUploadButton(); }; -browser.initUploadButton = function() { - var btn = $('#toolbar a[href="kcact:upload"]'); - if (!this.access.files.upload) { - btn.css('display', 'none'); - return; - } - var top = btn.get(0).offsetTop; - var width = btn.outerWidth(); - var height = btn.outerHeight(); - $('#toolbar').prepend('
          ' + - '
          ' + - '' + - '' + - '
          ' + - '
          '); - $('#upload input').css('margin-left', "-" + ($('#upload input').outerWidth() - width) + 'px'); - $('#upload').mouseover(function() { - $('#toolbar a[href="kcact:upload"]').addClass('hover'); - }); - $('#upload').mouseout(function() { - $('#toolbar a[href="kcact:upload"]').removeClass('hover'); - }); -}; - -browser.uploadFile = function(form) { - if (!this.dirWritable) { - browser.alert(this.label("Cannot write to upload folder.")); - $('#upload').detach(); - browser.initUploadButton(); - return; - } - form.elements[1].value = browser.dir; - $('').prependTo(document.body); - $('#loading').html(this.label("Uploading file...")); - $('#loading').css('display', 'inline'); - form.submit(); - $('#uploadResponse').load(function() { - var response = $(this).contents().find('body').html(); - $('#loading').css('display', 'none'); - response = response.split("\n"); - var selected = [], errors = []; - $.each(response, function(i, row) { - if (row.substr(0, 1) == '/') - selected[selected.length] = row.substr(1, row.length - 1) - else - errors[errors.length] = row; - }); - if (errors.length) - browser.alert(errors.join("\n")); - if (!selected.length) - selected = null - browser.refresh(selected); - $('#upload').detach(); - setTimeout(function() { - $('#uploadResponse').detach(); - }, 1); - browser.initUploadButton(); - }); - }; - browser.maximize = function(button) { if (window.opener) { window.moveTo(0, 0); diff --git a/manager/media/browser/mcpuk/js/browser/uploader.js b/manager/media/browser/mcpuk/js/browser/uploader.js new file mode 100755 index 00000000..45483dc0 --- /dev/null +++ b/manager/media/browser/mcpuk/js/browser/uploader.js @@ -0,0 +1,157 @@ +/** This file is part of KCFinder project + * + * @desc FileAPI uploader + * @package KCFinder + * @version 2.54 + * @author Pavel Tzonkov + * @copyright 2010-2014 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +browser.initUploader = function() { + var btn = $('#toolbar a[href="kcact:upload"]'); + if (!this.access.files.upload) { + btn.css('display', 'none'); + return; + } + $('#toolbar').prepend(''); + var upload = $('input[name="upload"]', '#toolbar'); + btn.click(function(e){ + e.preventDefault(); + browser.clearUpload(); + upload.trigger('click'); + }); + FileAPI.event.on(upload.get(0), 'change', function (evt){ + var files = FileAPI.getFiles(evt); // Retrieve file list + browser.prepareFiles(files); + }); + FileAPI.event.dnd($('#right').get(0), function (over){ + if (over) { + $('#files').addClass('drag'); + } else { + $('#files').removeClass('drag'); + } + }, function(files){ + browser.prepareFiles(files); + }); +}; +browser.clearUpload = function() { + var upload = $('input[name="upload"]', '#toolbar'); + upload.wrap('
          ').closest('form').get(0).reset(); + upload.unwrap(); +}; +browser.prepareFiles = function(files) { + FileAPI.filterFiles( + files, + function(file) { + var ext = file.name.split('.').pop().toLowerCase(); + var result = browser.allowedExts.test(ext) && !browser.deniedExts.test(ext); + if (!result) { + file.message = browser.label("Denied file extension."); + } + if (result) { + result = browser.maxFileSize > file.size; + if (!result) { + file.message = browser.label("The uploaded file exceeds {size} bytes.", {size: browser.maxFileSize}); + } + } + return result; + }, function (files, rejected) { + if (rejected.length > 0) { + var messages = []; + $.each(rejected, function(i, file) { + messages.push(file.name + ': ' +file.message); + }); + browser.alert(messages.join('
          '), true, function(){browser.uploadFiles(files)}); + } else { + browser.uploadFiles(files); + } + } + ); +}; +browser.uploadFiles = function(files) { + if (!this.dirWritable) { + browser.alert(this.label("Cannot write to upload folder.")); + return; + } + var uploadInProgress = false, + filesCount = 0, + errors = [], + uploaded = 0; + if( files.length ){ + filesCount = files.length; + var options = { + url: browser.baseGetData('upload'), + files: { file: files }, + data: { + dir: browser.dir + }, + imageAutoOrientation: false, + prepare: function (file/**Object*/, options/**Object*/){ + if (file.type !== 'image/jpeg' && file.type !== 'image/png') { + options.imageTransform = false; + } + }, + upload: function() { + $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { + number: uploaded++, + count: filesCount, + progress: "" + })); + uploadInProgress = true; + $('#loading').show(); + browser.fadeFiles(); + }, + progress: function (evt){ + var progress = Math.round((evt.loaded * 100) / evt.total) + '%'; + $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { + number: uploaded, + count: filesCount, + progress: progress + })); + }, + filecomplete:function(err, xhr, file) { + if(err === false) { + var response; + try { + response = $.parseJSON(xhr.response); + } catch (error) { + response = { + success:false, + message:browser.label("Unable to process server response") + } + } + if (!response.success) { + if (typeof response.message === 'object') { + response.message = response.message.join('; '); + }; + errors.push(file.name + ': ' + response.message); + } + } else { + errors.push(file.name + ': ' + browser.label("Server error") + ' ' + err); + } + uploaded++; + }, + complete: function (err, xhr){ + uploadInProgress = false; + $('#loading').hide(); + browser.refresh(); + browser.clearUpload(); + if (errors.length > 0) { + browser.alert(errors.join('
          '), false); + } + } + }; + if (Object.keys(browser.clientResize).length) { + options.imageTransform = { + maxWidth: browser.clientResize.maxWidth, + maxHeight: browser.clientResize.maxHeight, + quality: browser.clientResize.quality + }; + options.imageAutoOrientation = true; + } + FileAPI.upload(options); + } +}; diff --git a/manager/media/browser/mcpuk/js/customEvent.js b/manager/media/browser/mcpuk/js/customEvent.js new file mode 100755 index 00000000..5a0ff4b7 --- /dev/null +++ b/manager/media/browser/mcpuk/js/customEvent.js @@ -0,0 +1,15 @@ +(function () { + if (typeof window.CustomEvent === "function") { + return false; + } + + function CustomEvent(event, params) { + params = params || {bubbles: false, cancelable: false, detail: undefined}; + var evt = document.createEvent("CustomEvent"); + evt.initCustomEvent (event, params.bubbles, params.cancelable, params.detail); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + window.CustomEvent = CustomEvent; +})(); diff --git a/manager/media/browser/mcpuk/js/lazyload/10.5.2/lazyload.min.js b/manager/media/browser/mcpuk/js/lazyload/10.5.2/lazyload.min.js new file mode 100755 index 00000000..ca4e1174 --- /dev/null +++ b/manager/media/browser/mcpuk/js/lazyload/10.5.2/lazyload.min.js @@ -0,0 +1 @@ +var _extends=Object.assign||function(e){for(var t=1;t-1&&(v(e,t),u(e,t.class_loading)),a(e,t),n(e,"was-processed",!0),f(t.callback_set,e)},p=function(e){return e.isIntersecting||e.intersectionRatio>0},h=function(t,n){this._settings=e(t),this._setObserver(),this.update(n)};h.prototype={_setObserver:function(){var e=this;if(c){var t=this._settings,n={root:t.container===document?null:t.container,rootMargin:t.threshold+"px"};this._observer=new IntersectionObserver(function(t){t.forEach(function(t){if(p(t)){var n=t.target;b(n,e._settings),e._observer.unobserve(n)}}),e._elements=r(e._elements)},n)}},update:function(e){var t=this,n=this._settings,s=e||n.container.querySelectorAll(n.elements_selector);this._elements=r(Array.prototype.slice.call(s)),this._observer?this._elements.forEach(function(e){t._observer.observe(e)}):(this._elements.forEach(function(e){b(e,n)}),this._elements=r(this._elements))},destroy:function(){var e=this;this._observer&&(r(this._elements).forEach(function(t){e._observer.unobserve(t)}),this._observer=null),this._elements=null,this._settings=null}};var y=window.lazyLoadOptions;return i&&y&&function(e,t){if(t.length)for(var n,r=0;n=t[r];r+=1)s(e,n);else s(e,t)}(h,y),h}); \ No newline at end of file diff --git a/manager/media/browser/mcpuk/js/lazyload/8.7.1/lazyload.min.js b/manager/media/browser/mcpuk/js/lazyload/8.7.1/lazyload.min.js new file mode 100755 index 00000000..d184f972 --- /dev/null +++ b/manager/media/browser/mcpuk/js/lazyload/8.7.1/lazyload.min.js @@ -0,0 +1 @@ +var _extends=Object.assign||function(e){for(var t=1;t=o(e)+n+e.offsetHeight},a=function(e,t,n){return(t===window?window.pageXOffset:s(t))>=s(e)+n+e.offsetWidth},c=function(e,t,n){return!(i(e,t,n)||l(e,t,n)||r(e,t,n)||a(e,t,n))},u=function(e,t){var n,o=new e(t);try{n=new CustomEvent("LazyLoad::Initialized",{detail:{instance:o}})}catch(e){(n=document.createEvent("CustomEvent")).initCustomEvent("LazyLoad::Initialized",!1,!1,{instance:o})}window.dispatchEvent(n)},d=function(e,t){return e.getAttribute("data-"+t)},h=function(e,t,n){return e.setAttribute("data-"+t,n)},f=function(e,t){var n=e.parentNode;if(!n||"PICTURE"===n.tagName)for(var o=0;o0;)e.splice(o.pop(),1)},_startScrollHandler:function(){this._isHandlingScroll||(this._isHandlingScroll=!0,this._settings.container.addEventListener("scroll",this._boundHandleScroll))},_stopScrollHandler:function(){this._isHandlingScroll&&(this._isHandlingScroll=!1,this._settings.container.removeEventListener("scroll",this._boundHandleScroll))},handleScroll:function(){var e=this._settings.throttle;if(0!==e){var t=Date.now(),n=e-(t-this._previousLoopTime);n<=0||n>e?(this._loopTimeout&&(clearTimeout(this._loopTimeout),this._loopTimeout=null),this._previousLoopTime=t,this._loopThroughElements()):this._loopTimeout||(this._loopTimeout=setTimeout(function(){this._previousLoopTime=Date.now(),this._loopTimeout=null,this._loopThroughElements()}.bind(this),n))}else this._loopThroughElements()},update:function(){this._elements=Array.prototype.slice.call(this._queryOriginNode.querySelectorAll(this._settings.elements_selector)),this._purgeElements(),this._loopThroughElements(),this._startScrollHandler()},destroy:function(){window.removeEventListener("resize",this._boundHandleScroll),this._loopTimeout&&(clearTimeout(this._loopTimeout),this._loopTimeout=null),this._stopScrollHandler(),this._elements=null,this._queryOriginNode=null,this._settings=null}};var b=window.lazyLoadOptions;return p&&b&&function(e,t){var n=t.length;if(n)for(var o=0;o "Укажите имя новой папки.", "Unallowable characters in folder name." => "Недопустимые символы в имени папки.", "Folder name shouldn't begins with '.'" => "Имя папки не может начинаться с '.'", + "Unable to create folder." => "Не удалось создать папку.", + "Unable to rename folder." => "Не удалось переименовать папку.", + "Unable to delete folder." => "Не удалось удалить папку.", "Please enter new file name." => "Укажите новое имя файла", - "Unallowable characters in file name." => "Недопустимые символны в имени файла.", + "Unallowable characters in file name." => "Недопустимые символы в имени файла.", "File name shouldn't begins with '.'" => "Имя файла не может начинаться с '.'", "Are you sure you want to delete this file?" => "Вы уверены, что хотите удалить этот файл?", "Are you sure you want to delete this folder and all its content?" => "Вы уверены, что хотите удалить эту папку и всё её содержимое?", @@ -111,10 +114,6 @@ "Download" => "Скачать", "Download files" => "Скачать файлы", "Clipboard" => "Буфер обмена", - "Checking for new version..." => "Проверяем наличие обновлений...", - "Unable to connect!" => "Невозможно подключиться!", - "Download version {version} now!" => "Скачать версию {version} сейчас!", - "KCFinder is up to date!" => "Вы используете последнюю версию KCFinder'а!", "Licenses:" => "Лицензии:", "Attention" => "Внимание", "Question" => "Вопрос", @@ -123,6 +122,8 @@ "You cannot rename the extension of files!" => "Вы не можете изменять расширения файлов!", "Uploading file {number} of {count}... {progress}" => "Загрузка {number} файла из {count}... {progress}", "Failed to upload {filename}!" => "Неудачная попытка загрузки {filename}!", + "Server error" => "Ошибка при выполнении запроса", + "Unable to process server response" => "Ошибка при обработке ответа сервера" ); -?> \ No newline at end of file +?> diff --git a/manager/media/browser/mcpuk/lib/class_gd.php b/manager/media/browser/mcpuk/lib/class_gd.php index c9ed6f04..4c0ed4d8 100755 --- a/manager/media/browser/mcpuk/lib/class_gd.php +++ b/manager/media/browser/mcpuk/lib/class_gd.php @@ -52,8 +52,7 @@ protected function build_image($image) { $height = @imagesy($image); } elseif (is_array($image)) { - list($key, $width) = each($image); - list($key, $height) = each($image); + $height = $width = end($image); $image = imagecreatetruecolor($width, $height); } elseif (false !== (list($width, $height, $type) = @getimagesize($image))) { diff --git a/manager/media/browser/mcpuk/lib/class_image.php b/manager/media/browser/mcpuk/lib/class_image.php index 79918a49..dae35adf 100755 --- a/manager/media/browser/mcpuk/lib/class_image.php +++ b/manager/media/browser/mcpuk/lib/class_image.php @@ -53,7 +53,7 @@ final public function __get($property) { * 3. An array with two elements. First - width, second - height. * Creates a blank image. * 4. A filename string. Get image form file. - * Second paramaeter is used by pass some specific image driver options + * Second parameter is used by pass some specific image driver options * @param mixed $image * @param array $options */ @@ -107,20 +107,18 @@ final static function getDriver(array $drivers=array('gd')) { final protected function buildImage($image) { $class = get_class($this); - if ($image instanceof $class) { $width = $image->width; $height = $image->height; $img = $image->image; - } elseif (is_array($image)) { - list($key, $width) = each($image); - list($key, $height) = each($image); + } elseif (is_array($image) && count($image) > 1) { + $width = $image[0]; + $height = $image[1]; $img = $this->getBlankImage($width, $height); } else $img = $this->getImage($image, $width, $height); - return ($img !== false) ? array($img, $width, $height) : false; diff --git a/manager/media/browser/mcpuk/lib/helper_dir.php b/manager/media/browser/mcpuk/lib/helper_dir.php index 2f61f2eb..ac7a950e 100755 --- a/manager/media/browser/mcpuk/lib/helper_dir.php +++ b/manager/media/browser/mcpuk/lib/helper_dir.php @@ -27,7 +27,7 @@ static function isWritable($dir) { do { $file = "$dir/is_writable_" . md5($i++); } while (file_exists($file)); - if (!@touch($file)) + if (@file_put_contents($file, '') === false) return false; unlink($file); return true; diff --git a/manager/media/browser/mcpuk/themes/evo/style.css b/manager/media/browser/mcpuk/themes/evo/style.css index f9ec52f3..b55ec522 100755 --- a/manager/media/browser/mcpuk/themes/evo/style.css +++ b/manager/media/browser/mcpuk/themes/evo/style.css @@ -1,135 +1,136 @@ -@import "../../../../style/common/font-awesome/css/font-awesome.min.css?v=4.7.0"; -body { background: #fff; } -input { margin: 0; } -input[type="radio"], input[type="checkbox"], label { cursor: pointer; } -input[name="newName"] { width: 98% !important; } -input[type="text"] { border: 1px solid #d3d3d3; background: #fff; padding: 2px; font-size: 1.5rem; margin: 0; outline-width: 0; } -input[type="text"]:hover { box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); } -input[type="text"]:focus { border-color: #3687e2; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } -input[type="button"], input[type="submit"], input[type="reset"], button { font-size: 1.1rem; line-height: 2rem; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.3rem 0.6rem; margin-left: 2px; display: inline-block; cursor: pointer; } -input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } -input[type="button"]:focus, input[type="submit"]:focus, input[type="reset"]:focus, button:focus { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } -fieldset { margin: 0 5px 5px 0px; padding: 5px; border: 1px solid #dedede; cursor: default; } -fieldset td { white-space: nowrap; } -legend { margin: 0; padding: 0 3px; font-weight: bold; } -#folders { margin: 0; padding: 1rem 1rem 1rem .5rem; background: #fafafa; border: 0; border-right: 1px solid #dedede; border-bottom: 1px solid #dedede; } -#files { float: left; margin: 0 4px 0 0; background: #fafafa; border: 1px solid #dedede; border-left: 0; } -#files.drag { background: #ddebf8; } -#topic { padding-left: 12px; } -div.folders { margin-left: 1.7rem } -div.folder { white-space: nowrap; } -div.folder a { display: inline-block; text-decoration: none; cursor: default; outline: none; color: #000; } -span.folder { display: inline-block; font-size: 1.1rem; line-height: 1.2rem; padding: 2px 3px 2px 3px; outline: none; background: no-repeat 3px center; cursor: pointer; border: 1px solid transparent; } -span.brace { float: left; width: 1.6rem; height: 1.6rem; padding-left: 0; line-height: 1.9rem; font-size: 0; text-align: center; outline: none; } -span.current { background-color: #e4f0fa; border-color: #e4f0fa; color: #0e80cb; } -span.current:before { display: inline-block; font-family: FontAwesome; content: "\f07c"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } -span.regular { background-color: #f8f7f6; } -span.regular:before { display: inline-block; font-family: FontAwesome; content: "\f07b"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } -span.regular:hover, span.context { background-color: #ddebf8; border-color: #cee0f4; color: #000; } -span.opened:before { display: inline-block; font-family: FontAwesome; content: "\f107"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } -span.closed:before { display: inline-block; font-family: FontAwesome; content: "\f105"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } -span.denied:before { display: inline-block; font-family: FontAwesome; content: "\f05e"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } -div.file { padding: 4px; margin: 3px; border: 1px solid #aaa; background: #fff; } -div.file:hover { background: #ddebf8; border-color: #a7bed7; } -div.file .name { margin-top: 4px; font-weight: bold; height: 16px; overflow: hidden; } -tr.file td { font-size: 12px; } -/* -div.file .time { font-size: 10px; } -div.file .size { font-size: 10px; } -*/ -#files div.selected, #files div.selected:hover { background-color: #5b9bda; border-color: #2973bd; color: #fff; } -tr.file > td { padding: 3px 4px; background-color: #f8f7f6 } -tr.file:hover > td { background-color: #ddebf8; } -tr.selected > td, tr.selected:hover > td { background-color: #5b9bda; color: #fff; } -#collapseSide { padding: 5px 0; display: inline-block; float: left; margin: 0 0 0 5px; } -#hide-side { display: inline-block; width: 20px; text-align: center; font-size: 1.3rem; color: #5a5a5a; background-color: transparent; border: none; padding: 0.7rem 0.6rem 0.4rem 0.6rem; margin: 0px; } -#hide-side i.fa:hover { color: #292b2c; } -#toolbar { min-width: 500px; padding: 5px 0 5px 0; display: inline-block; float: left; margin-top: 2px; } -#toolbar a { font-size: 1.1rem; line-height: 2rem; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.3rem 0.6rem; margin-left: 5px; display: block; float: left; } -#toolbar a:before { font-family: FontAwesome; font-size: 1.3rem; display: inline-block; padding-right: 3px; margin-top: 0px; vertical-align: top; color: #404040; } -#toolbar a:hover, #toolbar a.hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } -#toolbar a.selected, #toolbar a.selected:before { background-color: #3687e2; border-color: #3687e2; color: #fff; } -#toolbar a[href="kcact:upload"] { color: #fff; background-color: #5cb85c; border-color: #56ac56 } -#toolbar a[href="kcact:upload"]:hover { color: #fff; background-color: #449d44; border-color: #419641 } -#toolbar a[href="kcact:upload"]:before { content: "\f093"; color: #fff; } -#toolbar a[href="kcact:refresh"]:before { content: "\f021"; } -#toolbar a[href="kcact:settings"]:before { content: "\f0ad"; } -#toolbar a[href="kcact:about"], #toolbar a:hover[href="kcact:about"] { border: none; padding: 0; background: transparent; } -#toolbar a[href="kcact:about"]:before { content: "\f05a"; } -#toolbar a[href="kcact:maximize"]:before { content: "\f2d0"; } -/*try to hide Maximize button except in popup*/ -@media screen and (min-width: 840px) { -#toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { display: none; } -} -@media screen and (max-width: 780px) { -#toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { display: none; } -} -/*fake btn*/ -#viewThumbs, #viewList { display: none; float: left; margin: 0 0px 0 -30px; } -label.radio-thumbs:before { display: block; float: left; font-family: FontAwesome; font-size: 1.4rem; line-height: 1.6rem; vertical-align: middle; content: "\f00a"; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.5rem 0.6rem; margin-left: 5px; } -label.radio-list:hover:before, label.radio-thumbs:hover:before { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } -label.radio-list.labelchecked:before, label.radio-thumbs.labelchecked:before { background-color: #3687e2; border-color: #3687e2; color: #fff; } -label.radio-list:before { display: block; float: left; font-family: FontAwesome; font-size: 1.4rem; line-height: 1.6rem; vertical-align: middle; content: "\f03a"; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.5rem 0.6rem; margin-left: 5px; } -input[type=checkbox] + label { color: #ccc; font-style: italic; } -input[type=checkbox]:checked + label { color: #f00; font-style: normal; } -#settings { background: #fff; padding: 5px; } -.box { width: 500px; } -.box, #loading, #alert { padding: 5px; border: 1px solid #3687e2; background: #fff; } -.box, #alert { padding: 8px; border-color: #fff; -moz-box-shadow: 0 0 4px rgba(255, 255, 255, 1); -webkit-box-shadow: 0 0 4px rgba(255, 255, 255, 1); box-shadow: 0 0 4px rgba(255, 255, 255, 1); } -#loading { background-image: url(img/loading.gif); font-weight: bold; margin-right: 4px; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } -#alert div.message, #dialog div.question { padding: 0 0 0 40px; } -#alert { background: #ff6347 url(img/alert.png) no-repeat 8px 29px; } -#dialog div.question { background: transparent url(img/confirm.png) no-repeat 0 0; } -#alert div.ok, #dialog div.buttons { padding-top: 5px; text-align: right; } -.menu { min-width: 180px; padding: 3px; border: 1px solid #dedede; background: #fff; opacity: 0.95; } -.menu a { font-size: 1.2rem; text-decoration: none; padding: 4px 4px 4px 4px; color: #000; margin: 0; outline: none; border: 1px solid transparent; } -.menu a:before { font-family: FontAwesome; font-size: 1.4rem; display: inline-block; width: 1.3rem; padding-right: 4px; margin-top: 0px; text-align: center; vertical-align: top; color: #404040; } -.menu .delimiter { border-top: 1px solid #acaaa7; padding-bottom: 3px; margin: 3px 2px 0 2px; } -.menu a:hover { background-color: #0e80cb; color: #fff; } -.menu a:hover:before { color: #fff; } -.menu a[href="kcact:refresh"]:before { content: "\f021"; } -.menu a[href="kcact:mkdir"]:before { content: "\f114"; } -.menu a[href="kcact:mvdir"]:before, .menu a[href="kcact:mv"]:before { content: "\f246"; } -.menu a[href="kcact:rmdir"]:before, .menu a[href="kcact:rm"]:before, .menu a[href="kcact:rmcbd"]:before { content: "\f1f8"; } -.menu a[href="kcact:clpbrdadd"]:before { content: "\f0ea"; } -.menu a[href="kcact:pick"]:before, .menu a[href="kcact:pick_thumb"]:before { content: "\f00c"; } -.menu a[href="kcact:download"]:before { content: "\f019"; } -.menu a[href="kcact:view"]:before { content: "\f06e"; } -.menu a[href="kcact:cpcbd"]:before { content: "\f24d"; } -.menu a[href="kcact:mvcbd"]:before { content: "\f047"; } -.menu a[href="kcact:clrcbd"]:before { content: "\f12d"; } -a.denied { color: #666; opacity: 0.5; filter: alpha(opacity:50); -cursor: default; } -a.denied:hover { background-color: #e4e3e2; border-color: transparent; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } -#dialog { -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); } -#dialog input[type="text"] { margin: 5px 0; width: 200px; } -#dialog div.slideshow { border: 1px solid #000; padding: 5px 5px 3px 5px; background: #000; -moz-box-shadow: 0 0 8px rgba(255, 255, 255, 1); -webkit-box-shadow: 0 0 8px rgba(255, 255, 255, 1); box-shadow: 0 0 8px rgba(255, 255, 255, 1); } -#dialog img { padding: 0; margin: 0; background: url(img/bg_transparent.png); } -#loadingDirs { padding: 5px 0 1px 24px; } -.about { text-align: center; } -.about div.head { font-weight: bold; font-size: 12px; padding: 3px 0 8px 0; } -.about div.head a { background: url(img/kcf_logo.png) no-repeat left center; padding: 0 0 0 27px; font-size: 17px; } -.about a { text-decoration: none; color: #05f; } -.about a:hover { text-decoration: underline; } -.about button { margin-top: 8px; } -#clipboard { padding: 0 4px 1px 0; } -#clipboard div { background: url(img/icons/clipboard.png) no-repeat center center; border: 1px solid transparent; padding: 1px; cursor: pointer; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; } -#clipboard div:hover { background-color: #bfbdbb; border-color: #a9a59f; } -#clipboard.selected div, #clipboard.selected div:hover { background-color: #c9c7c4; border-color: #3687e2; } -#checkver { padding-bottom: 8px; } -#checkver > span { padding: 2px; border: 1px solid transparent; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } -#checkver > span.loading { background: url(img/loading.gif); border: 1px solid #3687e2; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } -#checkver span { padding: 3px; } -#checkver a { font-weight: normal; padding: 3px 3px 3px 20px; background: url(img/icons/download.png) no-repeat left center; } -div.title { overflow: auto; text-align: center; margin: -3px -5px 5px -5px; padding-left: 19px; padding-bottom: 2px; border-bottom: 1px solid #bbb; font-size: 2rem; cursor: move; } -.about div.title { cursor: default; } -span.close, span.clicked { float: right; width: 19px; height: 19px; background: url(img/icons/close.png) no-repeat; margin-top: 0px; cursor: pointer; } -.selectThis { padding: 6px 0; border-radius: 2px; background: #eee; color: #4ea94e; cursor: pointer; text-transform: uppercase; } -.selectThis:hover { background-color: #fff; } -.pull-right { position: absolute; } -.pull-right a { color: #bbb !important; } -div.file .thumb { background-size: cover; } -.rangeTextContainer, .rangeThumbContainer { display: inline-block; padding: 0.4rem 0.4rem 0.2rem 0.4rem; margin-left: 2px; } -.hiddenrange { display: none } -.thumbsize, .textsize { display: inline-block; margin-left: 10px; } -input[type=range]::-moz-range-track { margin-top: 2px; } +@import "../../../../style/common/font-awesome/css/font-awesome.min.css?v=4.7.0"; +body { background: #fff; } +input { margin: 0; } +input[type="radio"], input[type="checkbox"], label { cursor: pointer; } +input[name="newName"] { width: 98% !important; } +input[type="text"] { border: 1px solid #d3d3d3; background: #fff; padding: 2px; font-size: 1.5rem; margin: 0; outline-width: 0; } +input[type="text"]:hover { box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); } +input[type="text"]:focus { border-color: #3687e2; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } +input[type="button"], input[type="submit"], input[type="reset"], button { font-size: 1.1rem; line-height: 2rem; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.3rem 0.6rem; margin-left: 2px; display: inline-block; cursor: pointer; } +input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +input[type="button"]:focus, input[type="submit"]:focus, input[type="reset"]:focus, button:focus { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +fieldset { margin: 0 5px 5px 0px; padding: 5px; border: 1px solid #dedede; cursor: default; } +fieldset td { white-space: nowrap; } +legend { margin: 0; padding: 0 3px; font-weight: bold; } +#folders { margin: 0; padding: 1rem 1rem 1rem .5rem; background: #fafafa; border: 0; border-right: 1px solid #dedede; border-bottom: 1px solid #dedede; } +#files { float: left; margin: 0 4px 0 0; background: #fafafa; border: 1px solid #dedede; border-left: 0; } +#files.drag { background: #ddebf8; } +#topic { padding-left: 12px; } +div.folders { margin-left: 1.7rem } +div.folder { white-space: nowrap; } +div.folder a { display: inline-block; text-decoration: none; cursor: default; outline: none; color: #000; } +span.folder { display: inline-block; font-size: 1.1rem; line-height: 1.2rem; padding: 2px 3px 2px 3px; outline: none; background: no-repeat 3px center; cursor: pointer; border: 1px solid transparent; } +span.brace { float: left; width: 1.6rem; height: 1.6rem; padding-left: 0; line-height: 1.9rem; font-size: 0; text-align: center; outline: none; } +span.current { background-color: #e4f0fa; border-color: #e4f0fa; color: #0e80cb; } +span.current:before { display: inline-block; font-family: FontAwesome; content: "\f07c"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } +span.regular { background-color: #f8f7f6; } +span.regular:before { display: inline-block; font-family: FontAwesome; content: "\f07b"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } +span.regular:hover, span.context { background-color: #ddebf8; border-color: #cee0f4; color: #000; } +span.opened:before { display: inline-block; font-family: FontAwesome; content: "\f107"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } +span.closed:before { display: inline-block; font-family: FontAwesome; content: "\f105"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } +span.denied:before { display: inline-block; font-family: FontAwesome; content: "\f05e"; width: 1.3em; font-size: 1.3rem; line-height: .8em; vertical-align: middle; color: #565656; } +div.file { padding: 4px; margin: 3px; border: 1px solid #aaa; background: #fff; } +div.file:hover { background: #ddebf8; border-color: #a7bed7; } +div.file .name { margin-top: 4px; font-weight: bold; height: 16px; overflow: hidden; } +tr.file td { font-size: 12px; } +/* +div.file .time { font-size: 10px; } +div.file .size { font-size: 10px; } +*/ +#files div.selected, #files div.selected:hover { background-color: #5b9bda; border-color: #2973bd; color: #fff; } +tr.file > td { padding: 3px 4px; background-color: #f8f7f6 } +tr.file:hover > td { background-color: #ddebf8; } +tr.selected > td, tr.selected:hover > td { background-color: #5b9bda; color: #fff; } +#collapseSide { padding: 5px 0; display: inline-block; float: left; margin: 0 0 0 5px; } +#hide-side { display: inline-block; width: 20px; text-align: center; font-size: 1.3rem; color: #5a5a5a; background-color: transparent; border: none; padding: 0.7rem 0.6rem 0.4rem 0.6rem; margin: 0px; } +#hide-side i.fa:hover { color: #292b2c; } +#toolbar { min-width: 500px; padding: 5px 0 5px 0; display: block; margin-top: 2px; } +#toolbar a { font-size: 1.1rem; line-height: 2rem; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.3rem 0.6rem; margin-left: 5px; display: block; float: left; } +#toolbar a:before { font-family: FontAwesome; font-size: 1.3rem; display: inline-block; padding-right: 3px; margin-top: 0px; vertical-align: top; color: #404040; } +#toolbar a:hover, #toolbar a.hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +#toolbar a.selected, #toolbar a.selected:before { background-color: #3687e2; border-color: #3687e2; color: #fff; } +#toolbar a[href="kcact:upload"] { color: #fff; background-color: #5cb85c; border-color: #56ac56 } +#toolbar a[href="kcact:upload"]:hover { color: #fff; background-color: #449d44; border-color: #419641 } +#toolbar a[href="kcact:upload"]:before { content: "\f093"; color: #fff; } +#toolbar a[href="kcact:refresh"]:before { content: "\f021"; } +#toolbar a[href="kcact:settings"]:before { content: "\f0ad"; } +#toolbar a[href="kcact:about"], #toolbar a:hover[href="kcact:about"] { border: none; padding: 0; background: transparent; } +#toolbar a[href="kcact:about"]:before { content: "\f05a"; } +#toolbar a[href="kcact:maximize"]:before { content: "\f2d0"; } +/*try to hide Maximize button except in popup*/ +@media screen and (min-width: 840px) { +#toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { display: none; } +} +@media screen and (max-width: 780px) { +#toolbar a[href="kcact:maximize"], #toolbar a[href="kcact:maximize"]:before { display: none; } +} +/*fake btn*/ +#viewThumbs, #viewList { display: none; float: left; margin: 0 0px 0 -30px; } +label.radio-thumbs:before { display: block; float: left; font-family: FontAwesome; font-size: 1.4rem; line-height: 1.6rem; vertical-align: middle; content: "\f00a"; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.5rem 0.6rem; margin-left: 5px; } +label.radio-list:hover:before, label.radio-thumbs:hover:before { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +label.radio-list.labelchecked:before, label.radio-thumbs.labelchecked:before { background-color: #3687e2; border-color: #3687e2; color: #fff; } +label.radio-list:before { display: block; float: left; font-family: FontAwesome; font-size: 1.4rem; line-height: 1.6rem; vertical-align: middle; content: "\f03a"; color: #292b2c; background-color: #fff; border: 1px solid #d4d4d4; padding: 0.5rem 0.6rem; margin-left: 5px; } +input[type=checkbox] + label { color: #ccc; font-style: italic; } +input[type=checkbox]:checked + label { color: #f00; font-style: normal; } +#settings { background: #fff; padding: 5px; } +.box { width: 500px; } +.box, #loading, #alert { padding: 5px; border: 1px solid #3687e2; background: #fff; } +.box, #alert { padding: 8px; border-color: #fff; -moz-box-shadow: 0 0 4px rgba(255, 255, 255, 1); -webkit-box-shadow: 0 0 4px rgba(255, 255, 255, 1); box-shadow: 0 0 4px rgba(255, 255, 255, 1); } +#loading { background-image: url(img/loading.gif); font-weight: bold; margin-right: 4px; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } +#alert div.message, #dialog div.question { padding: 0 0 0 40px; } +#alert { background: #ff6347 url(img/alert.png) no-repeat 8px 29px; } +#dialog div.question { background: transparent url(img/confirm.png) no-repeat 0 0; } +#alert div.ok, #dialog div.buttons { padding-top: 5px; text-align: right; } +.menu { min-width: 180px; padding: 3px; border: 1px solid #dedede; background: #fff; opacity: 0.95; } +.menu a { font-size: 1.2rem; text-decoration: none; padding: 4px 4px 4px 4px; color: #000; margin: 0; outline: none; border: 1px solid transparent; } +.menu a:before { font-family: FontAwesome; font-size: 1.4rem; display: inline-block; width: 1.3rem; padding-right: 4px; margin-top: 0px; text-align: center; vertical-align: top; color: #404040; } +.menu .delimiter { border-top: 1px solid #acaaa7; padding-bottom: 3px; margin: 3px 2px 0 2px; } +.menu a:hover { background-color: #0e80cb; color: #fff; } +.menu a:hover:before { color: #fff; } +.menu a[href="kcact:refresh"]:before { content: "\f021"; } +.menu a[href="kcact:mkdir"]:before { content: "\f114"; } +.menu a[href="kcact:mvdir"]:before, .menu a[href="kcact:mv"]:before { content: "\f246"; } +.menu a[href="kcact:rmdir"]:before, .menu a[href="kcact:rm"]:before, .menu a[href="kcact:rmcbd"]:before { content: "\f1f8"; } +.menu a[href="kcact:clpbrdadd"]:before { content: "\f0ea"; } +.menu a[href="kcact:pick"]:before, .menu a[href="kcact:pick_thumb"]:before { content: "\f00c"; } +.menu a[href="kcact:download"]:before { content: "\f019"; } +.menu a[href="kcact:view"]:before { content: "\f06e"; } +.menu a[href="kcact:cpcbd"]:before { content: "\f24d"; } +.menu a[href="kcact:mvcbd"]:before { content: "\f047"; } +.menu a[href="kcact:clrcbd"]:before { content: "\f12d"; } +a.denied { color: #666; opacity: 0.5; filter: alpha(opacity:50); +cursor: default; } +a.denied:hover { background-color: #e4e3e2; border-color: transparent; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } +#dialog { -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); } +#dialog input[type="text"] { margin: 5px 0; width: 200px; } +#dialog div.slideshow { border: 1px solid #000; padding: 5px 5px 3px 5px; background: #000; -moz-box-shadow: 0 0 8px rgba(255, 255, 255, 1); -webkit-box-shadow: 0 0 8px rgba(255, 255, 255, 1); box-shadow: 0 0 8px rgba(255, 255, 255, 1); } +#dialog img { padding: 0; margin: 0; background: url(img/bg_transparent.png); } +#loadingDirs { padding: 5px 0 1px 24px; } +.about { text-align: center; } +.about div.head { font-weight: bold; font-size: 12px; padding: 3px 0 8px 0; } +.about div.head a { background: url(img/kcf_logo.png) no-repeat left center; padding: 0 0 0 27px; font-size: 17px; } +.about a { text-decoration: none; color: #05f; } +.about a:hover { text-decoration: underline; } +.about button { margin-top: 8px; } +#clipboard { padding: 0 4px 1px 0; } +#clipboard div { background: url(img/icons/clipboard.png) no-repeat center center; border: 1px solid transparent; padding: 1px; cursor: pointer; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; } +#clipboard div:hover { background-color: #bfbdbb; border-color: #a9a59f; } +#clipboard.selected div, #clipboard.selected div:hover { background-color: #c9c7c4; border-color: #3687e2; } +#checkver { padding-bottom: 8px; } +#checkver > span { padding: 2px; border: 1px solid transparent; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } +#checkver > span.loading { background: url(img/loading.gif); border: 1px solid #3687e2; box-shadow: 0 0 3px rgba(54, 135, 226, 1); -moz-box-shadow: 0 0 3px rgba(54, 135, 226, 1); -webkit-box-shadow: 0 0 3px rgba(54, 135, 226, 1); } +#checkver span { padding: 3px; } +#checkver a { font-weight: normal; padding: 3px 3px 3px 20px; background: url(img/icons/download.png) no-repeat left center; } +div.title { overflow: auto; text-align: center; margin: -3px -5px 5px -5px; padding-left: 19px; padding-bottom: 2px; border-bottom: 1px solid #bbb; font-size: 2rem; cursor: move; } +.about div.title { cursor: default; } +span.close, span.clicked { float: right; width: 19px; height: 19px; background: url(img/icons/close.png) no-repeat; margin-top: 0px; cursor: pointer; } +.selectThis { padding: 6px 0; border-radius: 2px; background: #eee; color: #4ea94e; cursor: pointer; text-transform: uppercase; } +.selectThis:hover { background-color: #fff; } +.pull-right { position: absolute; } +.pull-right a { color: #bbb !important; } +div.file .thumb { background-size: contain; } +div.file .skipthumb { background-size: auto; } +.rangeTextContainer, .rangeThumbContainer { display: inline-block; padding: 0.4rem 0.4rem 0.2rem 0.4rem; margin-left: 2px; } +.hiddenrange { display: none } +.thumbsize, .textsize { display: inline-block; margin-left: 10px; } +input[type=range]::-moz-range-track { margin-top: 2px; } diff --git a/manager/media/browser/mcpuk/tpl/tpl_browser.php b/manager/media/browser/mcpuk/tpl/tpl_browser.php index 159ef0d5..e16bcfb3 100755 --- a/manager/media/browser/mcpuk/tpl/tpl_browser.php +++ b/manager/media/browser/mcpuk/tpl/tpl_browser.php @@ -1,190 +1,190 @@ - - - - - KCFinder: / - <?php echo $this->session['dir'] ?> - - - - - - -
          -
          -
          -
          -
          -
          -
          -
          -
          - -
            -
          -
          - - - + + + + + KCFinder: / + <?php echo $this->session['dir'] ?> + + + + + + +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
            +
          +
          + + + \ No newline at end of file diff --git a/manager/media/browser/mcpuk/tpl/tpl_javascript.php b/manager/media/browser/mcpuk/tpl/tpl_javascript.php index d43aa8f8..e75c16f8 100755 --- a/manager/media/browser/mcpuk/tpl/tpl_javascript.php +++ b/manager/media/browser/mcpuk/tpl/tpl_javascript.php @@ -1,7 +1,10 @@ + + + opener['TinyMCE']) && $this->opener['TinyMCE']): ?> @@ -14,7 +17,6 @@ browser.version = ""; browser.support.chromeFrame = ; browser.support.zip = config['denyZipDownload']) ? "true" : "false" ?>; -browser.support.check4Update = config['denyUpdateCheck']) || !$this->config['denyUpdateCheck']) && (ini_get("allow_url_fopen") || function_exists("http_get") || function_exists("curl_init") || function_exists('socket_create'))) ? "true" : "false" ?>; browser.lang = "lang) ?>"; browser.type = "type) ?>"; browser.theme = "config['theme']) ?>"; @@ -23,6 +25,10 @@ browser.siteURL = "config['siteURL']) ?>"; browser.assetsURL = "config['assetsURL']) ?>"; browser.thumbsURL = browser.assetsURL + "/config['thumbsDir']) ?>"; +browser.clientResize = config['clientResize']) ?>; +browser.allowedExts = /types[$this->type]))) ?>$/; +browser.deniedExts = /config['deniedExts']))) ?>$/; +browser.maxFileSize = config['maxfilesize']) ?>; get['opener']) && strlen($this->get['opener'])): ?> browser.opener.name = "get['opener']) ?>"; @@ -41,9 +47,24 @@ _.kuki.path = "config['cookiePath']) ?>"; _.kuki.prefix = "config['cookiePrefix']) ?>"; $(document).ready(function() { - browser.resize(); - browser.init(); - $('#all').css('visibility', 'visible'); + (function(w, d){ + var b = d.getElementsByTagName('body')[0]; + var s = d.createElement("script"); s.async = true; + var v = !("IntersectionObserver" in w) ? "8.7.1" : "10.5.2"; + s.src = "js/lazyload/" + v + "/lazyload.min.js"; + w.lazyLoadOptions = { + container: d.getElementById('files'), + elements_selector: ".lazy" + }; // Your options here. See "recipes" for more information about async. + b.appendChild(s); + w.addEventListener('LazyLoad::Initialized', function (e) { + // Get the instance and puts it in the lazyLoadInstance variable + lazyLoadInstance = e.detail.instance; + browser.resize(); + browser.init(); + $('#all').css('visibility', 'visible'); + }, false); + }(window, document)); }); $(window).resize(browser.resize); diff --git a/manager/media/browser/mcpuk/upload.php b/manager/media/browser/mcpuk/upload.php deleted file mode 100755 index 801fe345..00000000 --- a/manager/media/browser/mcpuk/upload.php +++ /dev/null @@ -1,17 +0,0 @@ - - * @copyright 2010-2014 KCFinder Project - * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 - * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 - * @link http://kcfinder.sunhater.com - */ - -require "core/autoload.php"; -$uploader = new uploader($modx); -$uploader->upload(); diff --git a/manager/media/calendar/datepicker.inc.php b/manager/media/calendar/datepicker.inc.php index e5a927d9..26f4f4c7 100755 --- a/manager/media/calendar/datepicker.inc.php +++ b/manager/media/calendar/datepicker.inc.php @@ -5,7 +5,7 @@ function __construct() { } function getDP() { - global $modx, $_lang; + $modx = evolutionCMS(); global $_lang; $tpl = file_get_contents(dirname(__FILE__) . '/datepicker.tpl'); return $modx->parseText($tpl, $_lang, '[%', '%]'); diff --git a/manager/media/rss/extlib/Snoopy.class.inc b/manager/media/rss/extlib/Snoopy.class.inc index 2ac34877..9bf7e493 100755 --- a/manager/media/rss/extlib/Snoopy.class.inc +++ b/manager/media/rss/extlib/Snoopy.class.inc @@ -173,7 +173,7 @@ class Snoopy $frameurls = $this->_frameurls; $this->_frameurls = array(); - while (list(, $frameurl) = each($frameurls)) { + foreach ($frameurls as $frameurl) { if ($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; @@ -269,7 +269,7 @@ class Snoopy $frameurls = $this->_frameurls; $this->_frameurls = array(); - while (list(, $frameurl) = each($frameurls)) { + foreach ($frameurls as $frameurl) { if ($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; @@ -467,12 +467,12 @@ class Snoopy // catenate the non-empty matches from the conditional subpattern - while (list($key, $val) = each($links[2])) { + foreach ($links[2] as $key => $val) { if (!empty($val)) $match[] = $val; } - while (list($key, $val) = each($links[3])) { + foreach ($links[3] as $key => $val) { if (!empty($val)) $match[] = $val; } @@ -666,8 +666,9 @@ class Snoopy if (!empty($this->rawheaders)) { if (!is_array($this->rawheaders)) $this->rawheaders = (array)$this->rawheaders; - while (list($headerKey, $headerVal) = each($this->rawheaders)) + foreach ($this->rawheaders as $headerKey => $headerVal) { $headers .= $headerKey . ": " . $headerVal . "\r\n"; + } } if (!empty($content_type)) { $headers .= "Content-type: $content_type"; @@ -935,9 +936,9 @@ class Snoopy switch ($this->_submit_type) { case "application/x-www-form-urlencoded": reset($formvars); - while (list($key, $val) = each($formvars)) { + foreach($formvars as $key => $val) { if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { + foreach($val as $cur_key => $cur_val) { $postdata .= urlencode($key) . "[]=" . urlencode($cur_val) . "&"; } } else @@ -949,9 +950,9 @@ class Snoopy $this->_mime_boundary = "Snoopy" . md5(uniqid(microtime())); reset($formvars); - while (list($key, $val) = each($formvars)) { + foreach ($formvars as $key => $val) { if (is_array($val) || is_object($val)) { - while (list($cur_key, $cur_val) = each($val)) { + foreach ($val as $cur_key => $cur_val) { $postdata .= "--" . $this->_mime_boundary . "\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; $postdata .= "$cur_val\r\n"; @@ -964,9 +965,9 @@ class Snoopy } reset($formfiles); - while (list($field_name, $file_names) = each($formfiles)) { - settype($file_names, "array"); - while (list(, $file_name) = each($file_names)) { + foreach ($formfiles as $field_name => $file_names) { + $file_names = (array)$file_names; + foreach($file_names as $file_name) { if (!is_readable($file_name)) continue; $fp = fopen($file_name, "r"); diff --git a/manager/media/script/air-datepicker/datepicker.inc.php b/manager/media/script/air-datepicker/datepicker.inc.php index a3c5e39f..6dc56f0f 100755 --- a/manager/media/script/air-datepicker/datepicker.inc.php +++ b/manager/media/script/air-datepicker/datepicker.inc.php @@ -4,7 +4,7 @@ class DATEPICKER { * @return string */ public function getDP() { - global $modx; + $modx = evolutionCMS(); $load_script = file_get_contents(dirname(__FILE__).'/datepicker.tpl'); if(!isset($modx->config['lang_code'])) $modx->config['lang_code'] = $this->getLangCode(); @@ -16,7 +16,7 @@ public function getDP() { * @return string */ public function getLangCode() { - global $modx, $modx_lang_attribute; + $modx = evolutionCMS(); global $modx_lang_attribute; if(!$modx_lang_attribute) return 'en'; diff --git a/manager/media/script/main.js b/manager/media/script/main.js new file mode 100644 index 00000000..13e312d0 --- /dev/null +++ b/manager/media/script/main.js @@ -0,0 +1,463 @@ +// evoTooltips +evo.tooltips = function(a) { + 'use strict'; + if (!a) { + return; + } else { + a = 'string' === typeof a ? document.querySelectorAll(a) : a; + } + var b = document.querySelector('.evo-tooltip'); + if (!b) { + b = document.createElement('div'); + b.className = 'evo-tooltip'; + document.body.appendChild(b); + } + b.style.pointerEvents = 'none'; + var c = parseFloat(getComputedStyle(b).marginTop); + for (var i = 0; i < a.length; i++) { + a[i].addEventListener('mouseenter', function(e) { + if (e.buttons) { + return; + } + var x = e.clientX, y = e.clientY; + b.innerHTML = (this.dataset && this.dataset.tooltip ? (this.dataset.tooltip[0] === '#' ? document.querySelector(this.dataset.tooltip).innerHTML : this.dataset.tooltip) : this.innerHTML); + if (x + b.offsetWidth + (c * 2) > window.innerWidth) { + b.style.left = Math.round(x - b.offsetWidth - (c * 2)) + 'px'; + b.classList.add('evo-tooltip-right'); + } else { + b.style.left = Math.round(x) + 'px'; + b.classList.add('evo-tooltip-left'); + } + if (y - (b.offsetHeight / 2) - c < 0) { + b.style.top = 0; + } else if (y + (b.offsetHeight / 2) > window.innerHeight) { + b.style.top = Math.round(window.innerHeight - b.offsetHeight) - (c * 2) + 'px'; + } else { + b.style.top = Math.round(y - (b.offsetHeight / 2)) - c + 'px'; + } + b.classList.add('show'); + }); + a[i].addEventListener('mouseleave', function() { + b.className = 'evo-tooltip'; + }); + a[i].addEventListener('mousedown', function() { + b.className = 'evo-tooltip'; + }); + } +}; + +// evoSortable +evo.sortable = function(a, b) { + 'use strict'; + if (!a) { + return; + } else { + a = 'string' === typeof a ? document.querySelectorAll(a) : a; + b = b || {}; + } + var o = { + el: null, + handleClass: b.handleClass || 'ghost', + position: b.position || 'vertical', + complete: function(c) { + if ('function' === typeof b.complete) { + b.complete(c); + } + }, + change: function(c) { + if ('function' === typeof b.change) { + b.change(c); + } + } + }; + + function onmousedown(e) { + o.el = this; + o.x = e.pageX || e.touches[0].pageX; + o.y = e.pageY || e.touches[0].pageY; + o.marginX = parseFloat(getComputedStyle(o.el).marginLeft) + parseFloat(getComputedStyle(o.el).marginRight); + o.marginY = parseFloat(getComputedStyle(o.el).marginTop) + parseFloat(getComputedStyle(o.el).marginBottom); + o.el.classList.add(o.handleClass); + o.el.ownerDocument.addEventListener('mousemove', onmousemove); + o.el.ownerDocument.addEventListener('mouseup', onmouseup); + o.el.ownerDocument.addEventListener('touchmove', onmousemove); + o.el.ownerDocument.addEventListener('touchend', onmouseup); + o.el.ownerDocument.onselectstart = function(e) { + e.preventDefault(); + }; + o.el.ownerDocument.body.style.overflow = 'hidden'; + } + + function onmousemove(e) { + if (o.position === 'vertical') { + var y = ((e.pageY || e.touches[0].pageY) - o.y); + if (y >= o.el.offsetHeight && o.el.nextElementSibling) { + o.y += o.el.offsetHeight + o.marginY; + o.el.parentNode.insertBefore(o.el, o.el.nextElementSibling.nextElementSibling); + o.change(); + y = 0; + } else if (y <= -o.el.offsetHeight && o.el.previousElementSibling) { + o.y -= o.el.offsetHeight + o.marginY; + o.el.parentNode.insertBefore(o.el, o.el.previousElementSibling); + o.change(); + y = 0; + } else if (!o.el.previousElementSibling && y < 0 || !o.el.nextElementSibling && y > 0) { + y = 0; + } + o.el.style.webkitTransform = 'translateY(' + y + 'px)'; + o.el.style.transform = 'translateY(' + y + 'px)'; + } else { + var x = ((e.pageX || e.touches[0].pageX) - o.x); + if (x >= o.el.offsetWidth && o.el.nextElementSibling) { + o.x += o.el.offsetWidth + o.marginX; + o.el.parentNode.insertBefore(o.el, o.el.nextElementSibling.nextElementSibling); + o.change(); + x = 0; + } else if (x <= -o.el.offsetWidth && o.el.previousElementSibling) { + o.x -= o.el.offsetHeight + o.marginX; + o.el.parentNode.insertBefore(o.el, o.el.previousElementSibling); + o.change(); + x = 0; + } else if (!o.el.previousElementSibling && x < 0 || !o.el.nextElementSibling && x > 0) { + x = 0; + } + o.el.style.webkitTransform = 'translateX(' + x + 'px)'; + o.el.style.transform = 'translateX(' + x + 'px)'; + } + } + + function onmouseup() { + o.el.style.webkitTransform = ''; + o.el.style.transform = ''; + o.el.classList.remove(o.handleClass); + o.el.ownerDocument.removeEventListener('mousemove', onmousemove); + o.el.ownerDocument.removeEventListener('mouseup', onmouseup); + o.el.ownerDocument.removeEventListener('touchmove', onmousemove); + o.el.ownerDocument.removeEventListener('touchend', onmouseup); + o.el.ownerDocument.onselectstart = null; + o.el.ownerDocument.body.style.overflow = ''; + o.complete(o.el); + } + + for (var i = 0; i < a.length; i++) { + a[i].addEventListener('mousedown', onmousedown); + a[i].addEventListener('touchstart', onmousedown); + } +}; + +// evo draggable +evo.draggable = function(a, b) { + 'use strict'; + if (!a) { + return; + } else { + a = 'string' === typeof a ? document.querySelectorAll(a) : a; + b = b || {}; + } + var o = { + handle: { + start: function(c) { + 'function' === typeof b.handle.start ? b.handle.start.call(c) : ''; + }, + end: function(c) { + 'function' === typeof b.handle.end ? b.handle.end.call(c) : ''; + } + }, + container: { + className: b.container.className || 'drop', + classOver: b.container.classOver || 'over', + over: function(c) { + 'function' === typeof b.container.over ? b.container.over.call(c) : ''; + }, + leave: function(c) { + 'function' === typeof b.container.leave ? b.container.leave.call(c) : ''; + }, + drop: function(c, i) { + 'function' === typeof b.container.drop ? b.container.drop.call(c, i) : ''; + } + } + }; + + o.container.els = document.querySelectorAll('.' + o.container.className); + + function onmousedown(e) { + o.el = this; + o.parent = o.el.offsetParent; + o.x = e.pageX; + o.y = e.pageY; + o.draggable = false; + document.onselectstart = function(e) { + e.preventDefault(); + }; + document.addEventListener('mousemove', onmousemove); + document.addEventListener('mouseup', onmouseup); + o.el.addEventListener('mouseup', onmouseup); + } + + function onmousemove(e) { + var x = e.pageX - o.x, y = e.pageY - o.y; + if (Math.abs(x) + Math.abs(y) > 10) { + o.draggable = true; + o.el.style.pointerEvents = 'none'; + o.el.style.left = x + 'px'; + o.el.style.top = y + 'px'; + o.handle.start(o.el); + } + } + + function onmouseup() { + document.removeEventListener('mousemove', onmousemove); + document.removeEventListener('mouseup', onmouseup); + o.el.removeEventListener('mouseup', onmouseup); + if (o.draggable) { + o.draggable = false; + o.el.style.pointerEvents = ''; + o.el.style.left = ''; + o.el.style.top = ''; + o.el.draggable = false; + var h = document.querySelector('.' + o.container.classOver); + if (h && h !== o.parent) { + h.appendChild(o.el); + o.container.drop(h, o.el); + } + o.handle.end(o.el); + } + } + + for (var i = 0; i < a.length; i++) { + a[i].addEventListener('mousedown', onmousedown); + } + + for (var i = 0; i < o.container.els.length; i++) { + o.container.els[i].onmouseenter = function() { + this.classList.add(b.container.classOver); + }; + o.container.els[i].onmouseleave = function() { + this.classList.remove(b.container.classOver); + }; + } + +}; + +// evo collapse +evo.collapse = function(a, b) { + if (!a) { + return; + } else { + a = 'string' === typeof a ? document.querySelectorAll(a) : a; + } + var h = { + containerClass: b && b.containerClass || 'tab-body' + }; + + for (var i = 0; i < a.length; i++) { + if (a[i].nextElementSibling && a[i].nextElementSibling.classList.contains(h.containerClass)) { + a[i].nextElementSibling.classList.add('collapse', 'in'); + a[i].onclick = function() { + if (a[i].nextElementSibling.classList.contains('in')) { + a[i].nextElementSibling.classList.remove('in'); + a[i].classList.add('collapsed'); + } else { + a[i].nextElementSibling.classList.add('in'); + a[i].classList.remove('collapsed'); + } + }; + } + } +}; + +// check connection to server +evo.checkConnectionToServer = function() { + var xhr = new (window.ActiveXObject || XMLHttpRequest)('Microsoft.XMLHTTP'); + xhr.open('GET', evo.urlCheckConnectionToServer + '?time=' + new Date().getTime(), false); + try { + xhr.send(); + return (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304); + } catch (error) { + return false; + } +}; + +function document_onload() { + stopWorker(); + + var actionButtons = document.getElementById('actions'), actionSelect = document.getElementById('stay'); + if (actionButtons !== null && actionSelect !== null) { + var actionPlus = actionButtons.querySelector('.plus'), actionSaveButton = actionButtons.querySelector('a#Button1') || actionButtons.querySelector('#Button1 > a'); + actionPlus.classList.add('dropdown-toggle'); + actionStay['stay1'] = ''; + actionStay['stay2'] = ''; + actionStay['stay3'] = ''; + if (actionSelect.value) { + actionSaveButton.innerHTML += ' + ' + actionStay['stay' + actionSelect.value] + '' + actionSelect.children['stay' + actionSelect.value].innerHTML + ''; + } + var actionSelectNewOption = null, actionSelectOptions = actionSelect.children, div = document.createElement('div'); + div.className = 'dropdown-menu'; + actionSaveButton.parentNode.classList.add('dropdown'); + for (var i = 0; i < actionSelectOptions.length; i++) { + if (!actionSelectOptions[i].selected) { + actionSelectNewOption = document.createElement('SPAN'); + actionSelectNewOption.className = 'btn btn-block'; + actionSelectNewOption.dataset.id = i; + actionSelectNewOption.innerHTML = actionStay[actionSelect.children[i].id] + ' ' + actionSelect.children[i].innerHTML + ''; + actionSelectNewOption.onclick = function() { + var s = actionSelect.querySelector('option[selected=selected]'); + if (s) { + s.selected = false; + } + actionSelect.children[this.dataset.id].selected = true; + actionSaveButton.click(); + }; + div.appendChild(actionSelectNewOption); + } + } + actionSaveButton.parentNode.appendChild(div); + actionPlus.onclick = function() { + this.parentNode.classList.toggle('show'); + }; + } + evo.tooltips('[data-tooltip]'); + + if (document.forms.length && document.forms.mutate && window.frameElement.parentNode.parentNode.classList.contains('evo-popup')) { + window.focus(); + document.forms.mutate.addEventListener('submit', function(e) { + if ((actionSelect && actionSelect.value === '') || (!actionSelect && actionSaveButton)) { + if (actionSelect) { + actionSelect.parentNode.removeChild(actionSelect); + } + if (top.mainMenu) { + top.mainMenu.work(); + } + var xhr = new XMLHttpRequest(); + xhr.onload = function() { + if (this.status === 200 && this.readyState === 4) { + if (top.mainMenu) { + top.mainMenu.stopWork(); + } + if (top.tree) { + top.tree.restoreTree(); + } + window.frameElement.parentNode.parentNode.close(e); + } + }; + xhr.open(document.forms.mutate.method, document.forms.mutate.action, true); + xhr.send(new FormData(document.forms.mutate)); + e.preventDefault(); + } + }, false); + + actions.cancel = function() { + window.frameElement.parentNode.parentNode.close(); + }; + + window.addEventListener('keydown', function(e) { + if (e.keyCode === 27) { + window.frameElement.parentNode.parentNode.close(); + } + }); + } +} + +function reset_path(elementName) { + document.getElementById(elementName).value = document.getElementById('default_' + elementName).innerHTML; +} + +function document_onunload(e) { + if (!dontShowWorker) { + top.mainMenu.work(); + } +} + +// set tree to default action. +if (parent.tree) { + parent.tree.ca = 'open'; +} + +// call the updateMail function, updates mail notification in top navigation +if (top.mainMenu && top.mainMenu.updateMail) { + top.mainMenu.updateMail(true); +} + +function stopWorker() { + try { + parent.mainMenu.stopWork(); + } catch (oException) { + ww = window.setTimeout('stopWorker()', 500); + } +} + +function doRefresh(r) { + try { + rr = r; + top.mainMenu.startrefresh(rr); + } catch (oException) { + vv = window.setTimeout('doRefresh()', 1000); + } +} + +function checkDirt(evt) { + evt = evt || window.event; + var message = ''; + if (!evo.checkConnectionToServer()) { + message = evo.lang.error_internet_connection; + setTimeout(function() { + alert(message); + }, 10); + evt.returnValue = message; + timerForUnload = setTimeout('stopWorker()', 100); + return message; + } + if (documentDirty === true) { + message = evo.lang.warning_not_saved; + evt.returnValue = message; + timerForUnload = setTimeout('stopWorker()', 100); + return message; + } +} + +function saveWait(fName) { + document.getElementById('savingMessage').innerHTML = evo.lang.saving; + for (var i = 0; i < document.forms[fName].elements.length; i++) { + document.forms[fName].elements[i].disabled = 'disabled'; + } +} + +function hideLoader() { + document.getElementById('preLoader').style.display = 'none'; +} + +// add the 'unsaved changes' warning event handler +if (typeof window.addEventListener !== 'undefined') { + window.addEventListener('beforeunload', function(e) { + checkDirt(e); + document_onunload(); + }, false); +} else if (typeof window.attachEvent !== 'undefined') { + window.attachEvent('onbeforeunload', function(e) { + checkDirt(e); + document_onunload(); + }); +} else { + window.onbeforeunload = function(e) { + checkDirt(e); + document_onunload(); + }; +} + +if (typeof window.addEventListener !== 'undefined') { + window.addEventListener('load', function() { + document_onload(); + }, false); +} else if (typeof window.attachEvent !== 'undefined') { + window.attachEvent('onload', function() { + document_onload(); + }); +} else { + window.onload = function() { + document_onload(); + }; +} + +window.addEventListener('unload', function() { + clearTimeout(timerForUnload); +}); \ No newline at end of file diff --git a/manager/media/style/common/manager.lockout.tpl b/manager/media/style/common/manager.lockout.tpl index e9edc1a6..9e0da4d1 100755 --- a/manager/media/style/common/manager.lockout.tpl +++ b/manager/media/style/common/manager.lockout.tpl @@ -64,7 +64,7 @@
          [+manager_lockout_message+]
          -   +  
          diff --git a/manager/media/style/common/moo-datepicker/datepicker.inc.php b/manager/media/style/common/moo-datepicker/datepicker.inc.php index efb87d5f..ef72f251 100755 --- a/manager/media/style/common/moo-datepicker/datepicker.inc.php +++ b/manager/media/style/common/moo-datepicker/datepicker.inc.php @@ -3,8 +3,8 @@ class DATEPICKER { function __construct() { } function getDP() { - global $modx,$_lang; - + $modx = evolutionCMS(); global$_lang; + $tpl = file_get_contents(dirname(__FILE__).'/datepicker.tpl'); return $modx->parseText($tpl,$_lang,'[%','%]'); } diff --git a/manager/media/style/common/spectrum/spectrum.css b/manager/media/style/common/spectrum/spectrum.css index b41bbafe..a31dedc2 100755 --- a/manager/media/style/common/spectrum/spectrum.css +++ b/manager/media/style/common/spectrum/spectrum.css @@ -1,515 +1,515 @@ -/*** -Spectrum Colorpicker v1.8.0 -https://github.com/bgrins/spectrum -Author: Brian Grinstead -License: MIT -***/ - -.sp-container { - position:absolute; - top:0; - left:0; - display:inline-block; - *display: inline; - *zoom: 1; - /* https://github.com/bgrins/spectrum/issues/40 */ - z-index: 9999994; - overflow: hidden; -} -.sp-container.sp-flat { - position: relative; - width:95%; - background:#FFF; - border:none; -} - -/* Fix for * { box-sizing: border-box; } */ -.sp-container, -.sp-container * { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ -.sp-top { - position:relative; - width: 100%; - display:inline-block; -} -.sp-top-inner { - position:absolute; - top:0; - left:0; - bottom:0; - right:0; -} -.sp-color { - position: absolute; - top:0; - left:0; - bottom:0; - right:20%; -} -.sp-hue { - position: absolute; - top:0; - right:0; - bottom:0; - left:84%; - height: 100%; -} - -.sp-clear-enabled .sp-hue { - top:33px; - height: 77.5%; -} - -.sp-fill { - padding-top: 80%; -} -.sp-sat, .sp-val { - position: absolute; - top:0; - left:0; - right:0; - bottom:0; -} - -.sp-alpha-enabled .sp-top { - margin-bottom: 18px; -} -.sp-alpha-enabled .sp-alpha { - display: block; -} -.sp-alpha-handle { - position:absolute; - top:-4px; - bottom: -4px; - width: 6px; - left: 50%; - cursor: pointer; - border: 1px solid black; - background: white; - opacity: .8; -} -.sp-alpha { - display: none; - position: absolute; - bottom: -14px; - right: 0; - left: 0; - height: 8px; -} -.sp-alpha-inner { - border: solid 1px #333; -} - -.sp-clear { - display: none; -} - -.sp-clear.sp-clear-display { - background-position: center; -} - -.sp-clear-enabled .sp-clear { - display: block; - position:absolute; - top:0px; - right:0; - bottom:0; - left:84%; - height: 28px; -} - -/* Don't allow text selection */ -.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { - -webkit-user-select:none; - -moz-user-select: -moz-none; - -o-user-select:none; - user-select: none; -} - -.sp-container.sp-input-disabled .sp-input-container { - display: none; -} -.sp-container.sp-buttons-disabled .sp-button-container { - display: none; -} -.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { - display: none; -} -.sp-palette-only .sp-picker-container { - display: none; -} -.sp-palette-disabled .sp-palette-container { - display: none; -} - -.sp-initial-disabled .sp-initial { - display: none; -} - - -/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ -.sp-sat { - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); - background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); - background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); - background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; - filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); -} -.sp-val { - background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); - background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); - background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); - background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; - filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); -} - -.sp-hue { - background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); - background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); - background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); -} - -/* IE filters do not support multiple color stops. - Generate 6 divs, line them up, and do two color gradients for each. - Yes, really. - */ -.sp-1 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); -} -.sp-2 { - height:16%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); -} -.sp-3 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); -} -.sp-4 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); -} -.sp-5 { - height:16%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); -} -.sp-6 { - height:17%; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); -} - -.sp-hidden { - display: none !important; -} - -/* Clearfix hack */ -.sp-cf:before, .sp-cf:after { content: ""; display: table; } -.sp-cf:after { clear: both; } -.sp-cf { *zoom: 1; } - - -/* Mobile devices, make hue slider bigger so it is easier to slide */ -@media (max-device-width: 480px) { - .sp-color { right: 40%; } - .sp-hue { left: 63%; } - .sp-fill { padding-top: 60%; } -} -.sp-dragger { - border-radius: 5px; - height: 5px; - width: 5px; - border: 1px solid #fff; - background: #000; - cursor: pointer; - position:absolute; - top:0; - left: 0; -} -.sp-slider { - position: absolute; - top:0; - cursor:pointer; - height: 3px; - left: -1px; - right: -1px; - border: 1px solid #000; - background: white; - opacity: .8; -} - -/* -Theme authors: -Here are the basic themeable display options (colors, fonts, global widths). -See http://bgrins.github.io/spectrum/themes/ for instructions. -*/ - -.sp-container { - border-radius: 0; - background-color: #fff; - border: 0; - padding: 0; - top:1px; - left:0; - margin-bottom:3px -} -.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { - font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.sp-top { - margin-bottom: 3px; -} -.sp-color, .sp-hue, .sp-clear { - border: solid 1px #666; -} - -/* Input */ -.sp-input-container { - float:right; - width: 100px; - margin-bottom: 4px; -} -.sp-initial-disabled .sp-input-container { - width: 100%; -} -.sp-input { - font-size: 12px !important; - border: 1px inset; - padding: 4px 5px; - margin: 0; - width: 100%; - background:transparent; - border-radius: 3px; - color: #222; -} -.sp-input:focus { - border: 1px solid orange; -} -.sp-input.sp-validation-error { - border: 1px solid red; - background: #fdd; -} -.sp-picker-container , .sp-palette-container { - float:left; - position: relative; - padding: 10px; - padding-bottom: 300px; - margin-bottom: -290px; - margin-left:20px; - width:95%; - border:none; -} -.sp-picker-container { - width: 210px; - /* border-left: solid 1px #fff;*/ -} - -/* Palettes */ -.sp-palette-container { - border-right: solid 1px #ccc; -} - -.sp-palette-only .sp-palette-container { - border: 0; -} - -.sp-palette .sp-thumb-el { - display: block; - position:relative; - float:left; - width: 24px; - height: 15px; - margin: 3px; - cursor: pointer; - border:solid 2px transparent; -} -.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { - border-color: orange; -} -.sp-thumb-el { - position:relative; -} -.sp-palette-toggle {margin-right:110px;margin-top:3px;} - -.sp-container a.sp-palette-toggle{ -color:#1976d2; -font-size:16px; -font-weight:bold; -cursor:pointer; -padding:1px 10px 2px 10px;} -} -.sp-container a.sp-palette-toggle:hover -{ color: #292b2c; background-color: #e6e6e6!important; border-color: #adadad } - - -/* Initial */ -.sp-initial { - float: left; - border: solid 1px #333; -} -.sp-initial span { - width: 30px; - height: 25px; - border:none; - display:block; - float:left; - margin:0; -} - -.sp-initial .sp-clear-display { - background-position: center; -} - -/* Buttons */ -.sp-palette-button-container, -.sp-button-container { - float: right; -} - -/* Replacer (the little preview div that shows up instead of the ) */ -.sp-replacer { - margin:0; - overflow:hidden; - cursor:pointer; - padding: 4px; - display:inline-block; - *zoom: 1; - *display: inline; - border: solid 1px #91765d; - background: #eee; - color: #333; - vertical-align: middle; -} -.sp-replacer:hover, .sp-replacer.sp-active { - border-color: #F0C49B; - color: #111; -} -.sp-replacer.sp-disabled { - cursor:default; - border-color: silver; - color: silver; -} -.sp-dd { - padding: 2px 0; - height: 16px; - line-height: 16px; - float:left; - font-size:10px; -} -.sp-preview { - position:relative; - width:25px; - height: 20px; - border: solid 1px #222; - margin-right: 5px; - float:left; - z-index: 0; -} - -.sp-palette { - *width: 220px; - max-width: 220px; -} -.sp-palette .sp-thumb-el { - width:16px; - height: 16px; - margin:2px 1px; - border: solid 1px #d0d0d0; -} - -.sp-container { - padding-bottom:0; -} - - -/* Buttons: http://hellohappy.org/css3-buttons/ */ -.sp-container button { - background-color: #eeeeee; - border: 1px solid #ccc; - border-bottom: 1px solid #bbb; - border-radius: 3px; - color: #333; - font-size: 14px; - line-height: 1; - padding: 5px 4px; - text-align: center; - text-shadow: 0 1px 0 #eee; - vertical-align: middle; -} -.sp-container button:hover { - background-color: #dddddd; - border: 1px solid #bbb; - border-bottom: 1px solid #999; - cursor: pointer; - text-shadow: 0 1px 0 #ddd; -} -.sp-container button:active { - border: 1px solid #aaa; - border-bottom: 1px solid #888; -} -.sp-cancel { - font-size: 11px; - color: #d93f3f !important; - margin:0; - padding:2px; - margin-right: 5px; - vertical-align: middle; - text-decoration:none; - -} -.sp-cancel:hover { - color: #d93f3f !important; - text-decoration: underline; -} - - -.sp-palette span:hover, .sp-palette span.sp-thumb-active { - border-color: #000; -} - -.sp-preview, .sp-alpha, .sp-thumb-el { - position:relative; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); -} -.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { - display:block; - position:absolute; - top:0;left:0;bottom:0;right:0; -} - -.sp-palette .sp-thumb-inner { - background-position: 50% 50%; - background-repeat: no-repeat; -} - -.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); -} - -.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); -} - -.sp-clear-display { - background-repeat:no-repeat; - background-position: center; - background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); -} +/*** +Spectrum Colorpicker v1.8.0 +https://github.com/bgrins/spectrum +Author: Brian Grinstead +License: MIT +***/ + +.sp-container { + position:absolute; + top:0; + left:0; + display:inline-block; + *display: inline; + *zoom: 1; + /* https://github.com/bgrins/spectrum/issues/40 */ + z-index: 9999994; + overflow: hidden; +} +.sp-container.sp-flat { + position: relative; + width:95%; + background:#FFF; + border:none; +} + +/* Fix for * { box-sizing: border-box; } */ +.sp-container, +.sp-container * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ +.sp-top { + position:relative; + width: 100%; + display:inline-block; +} +.sp-top-inner { + position:absolute; + top:0; + left:0; + bottom:0; + right:0; +} +.sp-color { + position: absolute; + top:0; + left:0; + bottom:0; + right:20%; +} +.sp-hue { + position: absolute; + top:0; + right:0; + bottom:0; + left:84%; + height: 100%; +} + +.sp-clear-enabled .sp-hue { + top:33px; + height: 77.5%; +} + +.sp-fill { + padding-top: 80%; +} +.sp-sat, .sp-val { + position: absolute; + top:0; + left:0; + right:0; + bottom:0; +} + +.sp-alpha-enabled .sp-top { + margin-bottom: 18px; +} +.sp-alpha-enabled .sp-alpha { + display: block; +} +.sp-alpha-handle { + position:absolute; + top:-4px; + bottom: -4px; + width: 6px; + left: 50%; + cursor: pointer; + border: 1px solid black; + background: white; + opacity: .8; +} +.sp-alpha { + display: none; + position: absolute; + bottom: -14px; + right: 0; + left: 0; + height: 8px; +} +.sp-alpha-inner { + border: solid 1px #333; +} + +.sp-clear { + display: none; +} + +.sp-clear.sp-clear-display { + background-position: center; +} + +.sp-clear-enabled .sp-clear { + display: block; + position:absolute; + top:0px; + right:0; + bottom:0; + left:84%; + height: 28px; +} + +/* Don't allow text selection */ +.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { + -webkit-user-select:none; + -moz-user-select: -moz-none; + -o-user-select:none; + user-select: none; +} + +.sp-container.sp-input-disabled .sp-input-container { + display: none; +} +.sp-container.sp-buttons-disabled .sp-button-container { + display: none; +} +.sp-container.sp-palette-buttons-disabled .sp-palette-button-container { + display: none; +} +.sp-palette-only .sp-picker-container { + display: none; +} +.sp-palette-disabled .sp-palette-container { + display: none; +} + +.sp-initial-disabled .sp-initial { + display: none; +} + + +/* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ +.sp-sat { + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; + filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); +} +.sp-val { + background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); + background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); + background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); + background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; + filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); +} + +.sp-hue { + background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); + background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); + background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); +} + +/* IE filters do not support multiple color stops. + Generate 6 divs, line them up, and do two color gradients for each. + Yes, really. + */ +.sp-1 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); +} +.sp-2 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); +} +.sp-3 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); +} +.sp-4 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); +} +.sp-5 { + height:16%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); +} +.sp-6 { + height:17%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); +} + +.sp-hidden { + display: none !important; +} + +/* Clearfix hack */ +.sp-cf:before, .sp-cf:after { content: ""; display: table; } +.sp-cf:after { clear: both; } +.sp-cf { *zoom: 1; } + + +/* Mobile devices, make hue slider bigger so it is easier to slide */ +@media (max-device-width: 480px) { + .sp-color { right: 40%; } + .sp-hue { left: 63%; } + .sp-fill { padding-top: 60%; } +} +.sp-dragger { + border-radius: 5px; + height: 5px; + width: 5px; + border: 1px solid #fff; + background: #000; + cursor: pointer; + position:absolute; + top:0; + left: 0; +} +.sp-slider { + position: absolute; + top:0; + cursor:pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid #000; + background: white; + opacity: .8; +} + +/* +Theme authors: +Here are the basic themeable display options (colors, fonts, global widths). +See http://bgrins.github.io/spectrum/themes/ for instructions. +*/ + +.sp-container { + border-radius: 0; + background-color: #fff; + border: 0; + padding: 0; + top:1px; + left:0; + margin-bottom:3px +} +.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { + font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.sp-top { + margin-bottom: 3px; +} +.sp-color, .sp-hue, .sp-clear { + border: solid 1px #666; +} + +/* Input */ +.sp-input-container { + float:right; + width: 100px; + margin-bottom: 4px; +} +.sp-initial-disabled .sp-input-container { + width: 100%; +} +.sp-input { + font-size: 12px !important; + border: 1px inset; + padding: 4px 5px; + margin: 0; + width: 100%; + background:transparent; + border-radius: 3px; + color: #222; +} +.sp-input:focus { + border: 1px solid orange; +} +.sp-input.sp-validation-error { + border: 1px solid red; + background: #fdd; +} +.sp-picker-container , .sp-palette-container { + float:left; + position: relative; + padding: 10px; + padding-bottom: 300px; + margin-bottom: -290px; + margin-left:20px; + width:95%; + border:none; +} +.sp-picker-container { + width: 210px; + /* border-left: solid 1px #fff;*/ +} + +/* Palettes */ +.sp-palette-container { + border-right: solid 1px #ccc; +} + +.sp-palette-only .sp-palette-container { + border: 0; +} + +.sp-palette .sp-thumb-el { + display: block; + position:relative; + float:left; + width: 24px; + height: 15px; + margin: 3px; + cursor: pointer; + border:solid 2px transparent; +} +.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { + border-color: orange; +} +.sp-thumb-el { + position:relative; +} +.sp-palette-toggle {margin-right:110px;margin-top:3px;} + +.sp-container a.sp-palette-toggle{ +color:#1976d2; +font-size:16px; +font-weight:bold; +cursor:pointer; +padding:1px 10px 2px 10px;} +} +.sp-container a.sp-palette-toggle:hover +{ color: #292b2c; background-color: #e6e6e6!important; border-color: #adadad } + + +/* Initial */ +.sp-initial { + float: left; + border: solid 1px #333; +} +.sp-initial span { + width: 30px; + height: 25px; + border:none; + display:block; + float:left; + margin:0; +} + +.sp-initial .sp-clear-display { + background-position: center; +} + +/* Buttons */ +.sp-palette-button-container, +.sp-button-container { + float: right; +} + +/* Replacer (the little preview div that shows up instead of the ) */ +.sp-replacer { + margin:0; + overflow:hidden; + cursor:pointer; + padding: 4px; + display:inline-block; + *zoom: 1; + *display: inline; + border: solid 1px #91765d; + background: #eee; + color: #333; + vertical-align: middle; +} +.sp-replacer:hover, .sp-replacer.sp-active { + border-color: #F0C49B; + color: #111; +} +.sp-replacer.sp-disabled { + cursor:default; + border-color: silver; + color: silver; +} +.sp-dd { + padding: 2px 0; + height: 16px; + line-height: 16px; + float:left; + font-size:10px; +} +.sp-preview { + position:relative; + width:25px; + height: 20px; + border: solid 1px #222; + margin-right: 5px; + float:left; + z-index: 0; +} + +.sp-palette { + *width: 220px; + max-width: 220px; +} +.sp-palette .sp-thumb-el { + width:16px; + height: 16px; + margin:2px 1px; + border: solid 1px #d0d0d0; +} + +.sp-container { + padding-bottom:0; +} + + +/* Buttons: http://hellohappy.org/css3-buttons/ */ +.sp-container button { + background-color: #eeeeee; + border: 1px solid #ccc; + border-bottom: 1px solid #bbb; + border-radius: 3px; + color: #333; + font-size: 14px; + line-height: 1; + padding: 5px 4px; + text-align: center; + text-shadow: 0 1px 0 #eee; + vertical-align: middle; +} +.sp-container button:hover { + background-color: #dddddd; + border: 1px solid #bbb; + border-bottom: 1px solid #999; + cursor: pointer; + text-shadow: 0 1px 0 #ddd; +} +.sp-container button:active { + border: 1px solid #aaa; + border-bottom: 1px solid #888; +} +.sp-cancel { + font-size: 11px; + color: #d93f3f !important; + margin:0; + padding:2px; + margin-right: 5px; + vertical-align: middle; + text-decoration:none; + +} +.sp-cancel:hover { + color: #d93f3f !important; + text-decoration: underline; +} + + +.sp-palette span:hover, .sp-palette span.sp-thumb-active { + border-color: #000; +} + +.sp-preview, .sp-alpha, .sp-thumb-el { + position:relative; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); +} +.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { + display:block; + position:absolute; + top:0;left:0;bottom:0;right:0; +} + +.sp-palette .sp-thumb-inner { + background-position: 50% 50%; + background-repeat: no-repeat; +} + +.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); +} + +.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); +} + +.sp-clear-display { + background-repeat:no-repeat; + background-position: center; + background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); +} #mainMenu.show .nav > li.dropdown.hover > a { background-color: #fff; color: #444!important; } \ No newline at end of file diff --git a/manager/media/style/default/ajax.php b/manager/media/style/default/ajax.php index 4bf51573..53d97af3 100755 --- a/manager/media/style/default/ajax.php +++ b/manager/media/style/default/ajax.php @@ -1,618 +1,625 @@ -db->connect(); - -if (empty ($modx->config)) { - $modx->getSettings(); -} - -if (!isset($_SESSION['mgrValidated']) || !isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || ($_SERVER['REQUEST_METHOD'] != 'POST')) { - $modx->sendErrorPage(); -} - -$modx->sid = session_id(); -$modx->loadExtension("ManagerAPI"); - -$_lang = array(); -include_once MODX_MANAGER_PATH . '/includes/lang/english.inc.php'; -if ($modx->config['manager_language'] != 'english') { - include_once MODX_MANAGER_PATH . '/includes/lang/' . $modx->config['manager_language'] . '.inc.php'; -} -include_once MODX_MANAGER_PATH . '/media/style/' . $modx->config['manager_theme'] . '/style.php'; - -$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; -$frame = isset($_REQUEST['f']) ? $_REQUEST['f'] : ''; -$role = isset($_SESSION['mgrRole']) && $_SESSION['mgrRole'] == 1 ? 1 : 0; -$docGroups = isset($_SESSION['mgrDocgroups']) && is_array($_SESSION['mgrDocgroups']) ? implode(',', $_SESSION['mgrDocgroups']) : ''; - -// set limit sql query -$limit = !empty($modx->config['number_of_results']) ? (int) $modx->config['number_of_results'] : 100; - -if (isset($action)) { - switch ($action) { - - case '1': { - - switch ($frame) { - case 'nodes': - include_once MODX_MANAGER_PATH . '/frames/nodes.php'; - - break; - } - - break; - } - - case '76': { - - $elements = isset($_REQUEST['elements']) && is_scalar($_REQUEST['elements']) ? htmlentities($_REQUEST['elements']) : ''; - - if ($elements) { - $output = ''; - $items = ''; - $sql = ''; - $a = ''; - $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '%*_') : ''; - $sqlLike = $filter ? 'WHERE t1.name LIKE "' . $modx->db->escape($filter) . '%"' : ''; - $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; - - switch ($elements) { - case 'element_templates': - $a = 16; - $sqlLike = $filter ? 'WHERE t1.templatename LIKE "' . $modx->db->escape($filter) . '%"' : ''; - $sql = $modx->db->query('SELECT t1.*, t1.templatename AS name - FROM ' . $modx->getFullTableName('site_templates') . ' AS t1 - ' . $sqlLike . ' - ORDER BY t1.templatename ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_template')) { - $output .= '
        • ' . $_lang['new_template'] . '
        • '; - } - - break; - - case 'element_tplvars': - $a = 301; - $sql = $modx->db->query('SELECT t1.*, IF(t2.templateid,0,1) AS disabled - FROM ' . $modx->getFullTableName('site_tmplvars') . ' AS t1 - LEFT JOIN ' . $modx->getFullTableName('site_tmplvar_templates') . ' AS t2 ON t1.id=t2.tmplvarid - ' . $sqlLike . ' - GROUP BY t1.id - ORDER BY t1.name ASC - ' . $sqlLimit); - - if ($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { - $output .= '
        • ' . $_lang['new_tmplvars'] . '
        • '; - } - - break; - - case 'element_htmlsnippets': - $a = 78; - $sql = $modx->db->query('SELECT t1.* - FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' AS t1 - ' . $sqlLike . ' - ORDER BY t1.name ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_chunk')) { - $output .= '
        • ' . $_lang['new_htmlsnippet'] . '
        • '; - } - - break; - - case 'element_snippets': - $a = 22; - $sql = $modx->db->query('SELECT t1.* - FROM ' . $modx->getFullTableName('site_snippets') . ' AS t1 - ' . $sqlLike . ' - ORDER BY t1.name ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_snippet')) { - $output .= '
        • ' . $_lang['new_snippet'] . '
        • '; - } - - break; - - case 'element_plugins': - $a = 102; - $sql = $modx->db->query('SELECT t1.* - FROM ' . $modx->getFullTableName('site_plugins') . ' AS t1 - ' . $sqlLike . ' - ORDER BY t1.name ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_plugin')) { - $output .= '
        • ' . $_lang['new_plugin'] . '
        • '; - } - - break; - } - - if ($count = $modx->db->getRecordCount($sql)) { - if ($count == $limit) { - $output .= '
        • '; - } - while ($row = $modx->db->getRow($sql)) { - if (($row['disabled'] || $row['locked']) && $role != 1) { - continue; - } - - $items .= '
        • ' . $row['name'] . ' (' . $row['id'] . ')
        • ' . "\n"; - } - } - - if (isset($_REQUEST['filter'])) { - $output = $items; - } else { - $output .= $items; - } - - echo $output; - } - - break; - } - - case '75': { - $a = 12; - $output = ''; - $items = ''; - $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; - $sqlLike = $filter ? 'WHERE t1.username LIKE "' . $modx->db->escape($filter) . '%"' : ''; - $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; - - $sql = $modx->db->query('SELECT t1.*, t1.username AS name, t2.blocked - FROM ' . $modx->getFullTableName('manager_users') . ' AS t1 - LEFT JOIN ' . $modx->getFullTableName('user_attributes') . ' AS t2 ON t1.id=t2.internalKey - ' . $sqlLike . ' - ORDER BY t1.username ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_user')) { - $output .= '
        • ' . $_lang['new_user'] . '
        • '; - } - - if ($count = $modx->db->getRecordCount($sql)) { - if ($count == $limit) { - $output .= '
        • '; - } - while ($row = $modx->db->getRow($sql)) { - $items .= '
        • ' . $row['name'] . ' (' . $row['id'] . ')
        • '; - } - } - - if (isset($_REQUEST['filter'])) { - $output = $items; - } else { - $output .= $items; - } - - echo $output; - - break; - } - - case '99': { - $a = 88; - $output = ''; - $items = ''; - $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; - $sqlLike = $filter ? 'WHERE t1.username LIKE "' . $modx->db->escape($filter) . '%"' : ''; - $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; - - $sql = $modx->db->query('SELECT t1.*, t1.username AS name, t2.blocked - FROM ' . $modx->getFullTableName('web_users') . ' AS t1 - LEFT JOIN ' . $modx->getFullTableName('web_user_attributes') . ' AS t2 ON t1.id=t2.internalKey - ' . $sqlLike . ' - ORDER BY t1.username ASC - ' . $sqlLimit); - - if ($modx->hasPermission('new_web_user')) { - $output .= '
        • ' . $_lang['new_web_user'] . '
        • '; - } - - if ($count = $modx->db->getRecordCount($sql)) { - if ($count == $limit) { - $output .= '
        • '; - } - while ($row = $modx->db->getRow($sql)) { - $items .= '
        • ' . $row['name'] . ' (' . $row['id'] . ')
        • '; - } - } - - if (isset($_REQUEST['filter'])) { - $output = $items; - } else { - $output .= $items; - } - - echo $output; - - break; - } - - case 'modxTagHelper': { - $name = isset($_REQUEST['name']) && is_scalar($_REQUEST['name']) ? $modx->db->escape($_REQUEST['name']) : false; - $type = isset($_REQUEST['type']) && is_scalar($_REQUEST['type']) ? $modx->db->escape($_REQUEST['type']) : false; - $contextmenu = ''; - - if ($role && $name && $type) { - switch ($type) { - case 'Snippet': - case 'SnippetNoCache': { - - $sql = $modx->db->query('SELECT * - FROM ' . $modx->getFullTableName('site_snippets') . ' - WHERE name="' . $name . '" - LIMIT 1'); - - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $row['name'] - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=22&id=" . $row['id'] - ) - ); - if (!empty($row['description'])) { - $contextmenu['seperator'] = ''; - $contextmenu['description'] = array( - 'innerHTML' => ' ' . $row['description'] - ); - } - } else { - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $name - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['new_snippet'], - 'url' => "index.php?a=23&itemname=" . $name - ) - ); - } - - break; - } - case 'Chunk' : { - - $sql = $modx->db->query('SELECT * - FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' - WHERE name="' . $name . '" - LIMIT 1'); - - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $row['name'] - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=78&id=" . $row['id'] - ) - ); - if (!empty($row['description'])) { - $contextmenu['seperator'] = ''; - $contextmenu['description'] = array( - 'innerHTML' => ' ' . $row['description'] - ); - } - } else { - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $name - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'url' => "index.php?a=77&itemname=" . $name - ) - ); - } - - break; - } - case 'AttributeValue': { - $sql = $modx->db->query('SELECT * - FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' - WHERE name="' . $name . '" - LIMIT 1'); - - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $contextmenu = array( - 'header' => array( - 'innerText' => $row['name'] - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=78&id=" . $row['id'] - ) - ); - if (!empty($row['description'])) { - $contextmenu['seperator'] = ''; - $contextmenu['description'] = array( - 'innerHTML' => ' ' . $row['description'] - ); - } - } else { - - $sql = $modx->db->query('SELECT * - FROM ' . $modx->getFullTableName('site_snippets') . ' - WHERE name="' . $name . '" - LIMIT 1'); - - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $row['name'] - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=22&id=" . $row['id'] - ) - ); - if (!empty($row['description'])) { - $contextmenu['seperator'] = ''; - $contextmenu['description'] = array( - 'innerHTML' => ' ' . $row['description'] - ); - } - } else { - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $name - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], - 'url' => "index.php?a=77&itemname=" . $name - ), - 'item2' => array( - 'innerHTML' => ' ' . $_lang['new_snippet'], - 'url' => "index.php?a=23&itemname=" . $name - ) - ); - } - } - - break; - } - case 'Placeholder' : - case 'Tv' : { - $default_field = array( - 'id', - 'type', - 'contentType', - 'pagetitle', - 'longtitle', - 'description', - 'alias', - 'link_attributes', - 'published', - 'pub_date', - 'unpub_date', - 'parent', - 'isfolder', - 'introtext', - 'content', - 'richtext', - 'template', - 'menuindex', - 'searchable', - 'cacheable', - 'createdon', - 'createdby', - 'editedon', - 'editedby', - 'deleted', - 'deletedon', - 'deletedby', - 'publishedon', - 'publishedby', - 'menutitle', - 'donthit', - 'haskeywords', - 'hasmetatags', - 'privateweb', - 'privatemgr', - 'content_dispo', - 'hidemenu', - 'alias_visible' - ); - - if (in_array($name, $default_field)) { - return; - } - - $sql = $modx->db->query('SELECT * - FROM ' . $modx->getFullTableName('site_tmplvars') . ' - WHERE name="' . $name . '" - LIMIT 1'); - - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $row['name'] - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['edit'], - 'url' => "index.php?a=301&id=" . $row['id'] - ) - ); - if (!empty($row['description'])) { - $contextmenu['seperator'] = ''; - $contextmenu['description'] = array( - 'innerHTML' => ' ' . $row['description'] - ); - } - } else { - $contextmenu = array( - 'header' => array( - 'innerHTML' => ' ' . $name - ), - 'item' => array( - 'innerHTML' => ' ' . $_lang['new_tmplvars'], - 'url' => "index.php?a=300&itemname=" . $name - ) - ); - } - - break; - } - } - echo json_encode($contextmenu, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); - break; - } - - break; - } - - case 'movedocument' : { - $json = array(); - - if ($modx->hasPermission('new_document') && $modx->hasPermission('edit_document') && $modx->hasPermission('save_document')) { - $id = !empty($_REQUEST['id']) ? (int)$_REQUEST['id'] : ''; - $parent = isset($_REQUEST['parent']) ? (int)$_REQUEST['parent'] : 0; - $menuindex = isset($_REQUEST['menuindex']) && is_scalar($_REQUEST['menuindex']) ? $_REQUEST['menuindex'] : 0; - - // set parent - if ($id && $parent >= 0) { - - // find older parent - $parentOld = $modx->db->getValue($modx->db->select('parent', $modx->getFullTableName('site_content'), 'id=' . $id)); - - $eventOut = $modx->invokeEvent('onBeforeMoveDocument', [ - 'id_document' => $id, - 'old_parent' => $parentOld, - 'new_parent' => $parent, - ]); - - if (is_array($eventOut) && count($eventOut) > 0) { - $eventParent = array_pop($eventOut); - - if ($eventParent == $parentOld) { - $json['errors'] = $_lang['error_movedocument2']; - } else { - $parent = $eventParent; - } - } - - if (empty($json['errors'])) { - // check privileges user for move docs - if (!empty($modx->config['tree_show_protected']) && $role != 1) { - $sql = $modx->db->select('*', $modx->getFullTableName('document_groups'), 'document IN(' . $id . ',' . $parent . ',' . $parentOld . ')'); - if ($modx->db->getRecordCount($sql)) { - $document_groups = array(); - while ($row = $modx->db->getRow($sql)) { - $document_groups[$row['document']]['groups'][] = $row['document_group']; - } - foreach ($document_groups as $key => $value) { - if (($key == $parent || $key == $parentOld || $key == $id) && !in_array($role, $value['groups'])) { - $json['errors'] = $_lang["error_no_privileges"]; - } - } - if ($json['errors']) { - header('content-type: application/json'); - echo json_encode($json, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); - break; - } - } - } - - if ($parent == 0 && $parent != $parentOld && !$modx->config['udperms_allowroot'] && $role != 1) { - $json['errors'] = $_lang["error_no_privileges"]; - } else { - // set new parent - $modx->db->update(array( - 'parent' => $parent - ), $modx->getFullTableName('site_content'), 'id=' . $id); - // set parent isfolder = 1 - $modx->db->update(array( - 'isfolder' => 1 - ), $modx->getFullTableName('site_content'), 'id=' . $parent); - - if ($parent != $parentOld) { - // check children docs and set parent isfolder - if ($modx->db->getRecordCount($modx->db->select('id', $modx->getFullTableName('site_content'), 'parent=' . $parentOld))) { - $modx->db->update(array( - 'isfolder' => 1 - ), $modx->getFullTableName('site_content'), 'id=' . $parentOld); - } else { - $modx->db->update(array( - 'isfolder' => 0 - ), $modx->getFullTableName('site_content'), 'id=' . $parentOld); - } - } - - // set menuindex - if (!empty($menuindex)) { - $menuindex = explode(',', $menuindex); - foreach ($menuindex as $key => $value) { - $modx->db->query('UPDATE ' . $modx->getFullTableName('site_content') . ' SET menuindex=' . $key . ' WHERE id=' . $value); - } - } else { - // TODO: max(*) menuindex - } - - if (!$json['errors']) { - $json['success'] = $_lang["actioncomplete"]; - - $modx->invokeEvent('onAfterMoveDocument', [ - 'id_document' => $id, - 'old_parent' => $parentOld, - 'new_parent' => $parent, - ]); - } - } - } - } - } else { - $json['errors'] = $_lang["error_no_privileges"]; - } - - header('content-type: application/json'); - echo json_encode($json, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); - - break; - } - - case 'getLockedElements': { - $type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : 0; - $id = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : 0; - - $output = !!$modx->elementIsLocked($type, $id, true); - - if (!$output) { - $docgrp = (isset($_SESSION['mgrDocgroups']) && is_array($_SESSION['mgrDocgroups'])) ? implode(',', $_SESSION['mgrDocgroups']) : ''; - $docgrp_cond = $docgrp ? ' OR dg.document_group IN (' . $docgrp . ')' : ''; - $sql = ' - SELECT MAX(IF(1=' . $role . ' OR sc.privatemgr=0' . $docgrp_cond . ', 0, 1)) AS locked - FROM ' . $modx->getFullTableName('site_content') . ' AS sc - LEFT JOIN ' . $modx->getFullTableName('document_groups') . ' dg ON dg.document=sc.id - WHERE sc.id=' . $id . ' GROUP BY sc.id'; - $sql = $modx->db->query($sql); - if ($modx->db->getRecordCount($sql)) { - $row = $modx->db->getRow($sql); - $output = !!$row['locked']; - } - } - - echo $output; - - break; - } - } -} +db->connect(); + +if (empty ($modx->config)) { + $modx->getSettings(); +} + +if (!isset($_SESSION['mgrValidated']) || !isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || ($_SERVER['REQUEST_METHOD'] != 'POST')) { + $modx->sendErrorPage(); +} + +$modx->sid = session_id(); +$modx->loadExtension("ManagerAPI"); + +$_lang = array(); +include_once MODX_MANAGER_PATH . '/includes/lang/english.inc.php'; +if ($modx->config['manager_language'] != 'english') { + include_once MODX_MANAGER_PATH . '/includes/lang/' . $modx->config['manager_language'] . '.inc.php'; +} +include_once MODX_MANAGER_PATH . '/media/style/' . $modx->config['manager_theme'] . '/style.php'; + +$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; +$frame = isset($_REQUEST['f']) ? $_REQUEST['f'] : ''; +$role = isset($_SESSION['mgrRole']) && $_SESSION['mgrRole'] == 1 ? 1 : 0; +$docGroups = isset($_SESSION['mgrDocgroups']) && is_array($_SESSION['mgrDocgroups']) ? implode(',', $_SESSION['mgrDocgroups']) : ''; + +// set limit sql query +$limit = !empty($modx->config['number_of_results']) ? (int) $modx->config['number_of_results'] : 100; + +header('Content-Type: text/html; charset='.$modx->config['modx_charset'], true); + +if (isset($action)) { + switch ($action) { + + case '1': { + + switch ($frame) { + case 'nodes': + include_once MODX_MANAGER_PATH . '/frames/nodes.php'; + + break; + } + + break; + } + + case '76': { + + $elements = isset($_REQUEST['elements']) && is_scalar($_REQUEST['elements']) ? htmlentities($_REQUEST['elements']) : ''; + + if ($elements) { + $output = ''; + $items = ''; + $sql = ''; + $a = ''; + $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '%*_') : ''; + $sqlLike = $filter ? 'WHERE t1.name LIKE "' . $modx->db->escape($filter) . '%"' : ''; + $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; + + switch ($elements) { + case 'element_templates': + $a = 16; + $sqlLike = $filter ? 'WHERE t1.templatename LIKE "' . $modx->db->escape($filter) . '%"' : ''; + $sql = $modx->db->query('SELECT t1.id, t1.templatename AS name, t1.locked, 0 AS disabled + FROM ' . $modx->getFullTableName('site_templates') . ' AS t1 + ' . $sqlLike . ' + ORDER BY t1.templatename ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_template')) { + $output .= '
        • ' . $_lang['new_template'] . '
        • '; + } + + break; + + case 'element_tplvars': + $a = 301; + $sql = $modx->db->query('SELECT t1.id, t1.name, t1.locked, IF(MIN(t2.tmplvarid),0,1) AS disabled + FROM ' . $modx->getFullTableName('site_tmplvars') . ' AS t1 + LEFT JOIN ' . $modx->getFullTableName('site_tmplvar_templates') . ' AS t2 ON t1.id=t2.tmplvarid + ' . $sqlLike . ' + GROUP BY t1.id + ORDER BY t1.name ASC + ' . $sqlLimit); + + if ($modx->hasPermission('edit_template') && $modx->hasPermission('edit_snippet') && $modx->hasPermission('edit_chunk') && $modx->hasPermission('edit_plugin')) { + $output .= '
        • ' . $_lang['new_tmplvars'] . '
        • '; + } + + break; + + case 'element_htmlsnippets': + $a = 78; + $sql = $modx->db->query('SELECT t1.id, t1.name, t1.locked, t1.disabled + FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' AS t1 + ' . $sqlLike . ' + ORDER BY t1.name ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_chunk')) { + $output .= '
        • ' . $_lang['new_htmlsnippet'] . '
        • '; + } + + break; + + case 'element_snippets': + $a = 22; + $sql = $modx->db->query('SELECT t1.id, t1.name, t1.locked, t1.disabled + FROM ' . $modx->getFullTableName('site_snippets') . ' AS t1 + ' . $sqlLike . ' + ORDER BY t1.name ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_snippet')) { + $output .= '
        • ' . $_lang['new_snippet'] . '
        • '; + } + + break; + + case 'element_plugins': + $a = 102; + $sql = $modx->db->query('SELECT t1.id, t1.name, t1.locked, t1.disabled + FROM ' . $modx->getFullTableName('site_plugins') . ' AS t1 + ' . $sqlLike . ' + ORDER BY t1.name ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_plugin')) { + $output .= '
        • ' . $_lang['new_plugin'] . '
        • '; + } + + break; + } + + if ($count = $modx->db->getRecordCount($sql)) { + if ($count == $limit) { + $output .= '
        • '; + } + while ($row = $modx->db->getRow($sql)) { + if (($row['disabled'] || $row['locked']) && $role != 1) { + continue; + } + + $items .= '
        • ' . html_escape($row['name'], $modx->config['modx_charset']) . ' (' . $row['id'] . ')
        • ' . "\n"; + } + } + + if (isset($_REQUEST['filter'])) { + $output = $items; + } else { + $output .= $items; + } + + echo $output; + } + + break; + } + + case '75': { + $a = 12; + $output = ''; + $items = ''; + $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; + $sqlLike = $filter ? 'WHERE t1.username LIKE "' . $modx->db->escape($filter) . '%"' : ''; + $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; + + if(!$modx->hasPermission('save_role')) { + $sqlLike .= $sqlLike ? ' AND ' : 'WHERE '; + $sqlLike .= 't2.role != 1'; + } + + $sql = $modx->db->query('SELECT t1.*, t1.username AS name, t2.blocked + FROM ' . $modx->getFullTableName('manager_users') . ' AS t1 + LEFT JOIN ' . $modx->getFullTableName('user_attributes') . ' AS t2 ON t1.id=t2.internalKey + ' . $sqlLike . ' + ORDER BY t1.username ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_user')) { + $output .= '
        • ' . $_lang['new_user'] . '
        • '; + } + + if ($count = $modx->db->getRecordCount($sql)) { + if ($count == $limit) { + $output .= '
        • '; + } + while ($row = $modx->db->getRow($sql)) { + $items .= '
        • ' . html_escape($row['name'], $modx->config['modx_charset']) . ' (' . $row['id'] . ')
        • '; + } + } + + if (isset($_REQUEST['filter'])) { + $output = $items; + } else { + $output .= $items; + } + + echo $output; + + break; + } + + case '99': { + $a = 88; + $output = ''; + $items = ''; + $filter = !empty($_REQUEST['filter']) && is_scalar($_REQUEST['filter']) ? addcslashes(trim($_REQUEST['filter']), '\%*_') : ''; + $sqlLike = $filter ? 'WHERE t1.username LIKE "' . $modx->db->escape($filter) . '%"' : ''; + $sqlLimit = $sqlLike ? '' : 'LIMIT ' . $limit; + + $sql = $modx->db->query('SELECT t1.*, t1.username AS name, t2.blocked + FROM ' . $modx->getFullTableName('web_users') . ' AS t1 + LEFT JOIN ' . $modx->getFullTableName('web_user_attributes') . ' AS t2 ON t1.id=t2.internalKey + ' . $sqlLike . ' + ORDER BY t1.username ASC + ' . $sqlLimit); + + if ($modx->hasPermission('new_web_user')) { + $output .= '
        • ' . $_lang['new_web_user'] . '
        • '; + } + + if ($count = $modx->db->getRecordCount($sql)) { + if ($count == $limit) { + $output .= '
        • '; + } + while ($row = $modx->db->getRow($sql)) { + $items .= '
        • ' . $row['name'] . ' (' . $row['id'] . ')
        • '; + } + } + + if (isset($_REQUEST['filter'])) { + $output = $items; + } else { + $output .= $items; + } + + echo $output; + + break; + } + + case 'modxTagHelper': { + $name = isset($_REQUEST['name']) && is_scalar($_REQUEST['name']) ? $modx->db->escape($_REQUEST['name']) : false; + $type = isset($_REQUEST['type']) && is_scalar($_REQUEST['type']) ? $modx->db->escape($_REQUEST['type']) : false; + $contextmenu = ''; + + if ($role && $name && $type) { + switch ($type) { + case 'Snippet': + case 'SnippetNoCache': { + + $sql = $modx->db->query('SELECT * + FROM ' . $modx->getFullTableName('site_snippets') . ' + WHERE name="' . $name . '" + LIMIT 1'); + + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($row['name'], $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['edit'], + 'url' => "index.php?a=22&id=" . $row['id'] + ) + ); + if (!empty($row['description'])) { + $contextmenu['seperator'] = ''; + $contextmenu['description'] = array( + 'innerHTML' => ' ' . html_escape($row['description'], $modx->config['modx_charset']) + ); + } + } else { + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($name, $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['new_snippet'], + 'url' => "index.php?a=23&itemname=" . html_escape($name, $modx->config['modx_charset']) + ) + ); + } + + break; + } + case 'Chunk' : { + + $sql = $modx->db->query('SELECT * + FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' + WHERE name="' . $name . '" + LIMIT 1'); + + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($row['name'], $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['edit'], + 'url' => "index.php?a=78&id=" . $row['id'] + ) + ); + if (!empty($row['description'])) { + $contextmenu['seperator'] = ''; + $contextmenu['description'] = array( + 'innerHTML' => ' ' . html_escape($row['description'], $modx->config['modx_charset']) + ); + } + } else { + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($name, $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], + 'url' => "index.php?a=77&itemname=" . html_escape($name, $modx->config['modx_charset']) + ) + ); + } + + break; + } + case 'AttributeValue': { + $sql = $modx->db->query('SELECT * + FROM ' . $modx->getFullTableName('site_htmlsnippets') . ' + WHERE name="' . $name . '" + LIMIT 1'); + + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $contextmenu = array( + 'header' => array( + 'innerText' => html_escape($row['name'], $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['edit'], + 'url' => "index.php?a=78&id=" . $row['id'] + ) + ); + if (!empty($row['description'])) { + $contextmenu['seperator'] = ''; + $contextmenu['description'] = array( + 'innerHTML' => ' ' . html_escape($row['description'], $modx->config['modx_charset']) + ); + } + } else { + + $sql = $modx->db->query('SELECT * + FROM ' . $modx->getFullTableName('site_snippets') . ' + WHERE name="' . $name . '" + LIMIT 1'); + + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($row['name'], $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['edit'], + 'url' => "index.php?a=22&id=" . $row['id'] + ) + ); + if (!empty($row['description'])) { + $contextmenu['seperator'] = ''; + $contextmenu['description'] = array( + 'innerHTML' => ' ' . html_escape($row['description'], $modx->config['modx_charset']) + ); + } + } else { + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($name, $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['new_htmlsnippet'], + 'url' => "index.php?a=77&itemname=" . html_escape($name, $modx->config['modx_charset']) + ), + 'item2' => array( + 'innerHTML' => ' ' . $_lang['new_snippet'], + 'url' => "index.php?a=23&itemname=" . html_escape($name, $modx->config['modx_charset']) + ) + ); + } + } + + break; + } + case 'Placeholder' : + case 'Tv' : { + $default_field = array( + 'id', + 'type', + 'contentType', + 'pagetitle', + 'longtitle', + 'description', + 'alias', + 'link_attributes', + 'published', + 'pub_date', + 'unpub_date', + 'parent', + 'isfolder', + 'introtext', + 'content', + 'richtext', + 'template', + 'menuindex', + 'searchable', + 'cacheable', + 'createdon', + 'createdby', + 'editedon', + 'editedby', + 'deleted', + 'deletedon', + 'deletedby', + 'publishedon', + 'publishedby', + 'menutitle', + 'donthit', + 'haskeywords', + 'hasmetatags', + 'privateweb', + 'privatemgr', + 'content_dispo', + 'hidemenu', + 'alias_visible' + ); + + if (in_array($name, $default_field)) { + return; + } + + $sql = $modx->db->query('SELECT * + FROM ' . $modx->getFullTableName('site_tmplvars') . ' + WHERE name="' . $name . '" + LIMIT 1'); + + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($row['name'], $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['edit'], + 'url' => "index.php?a=301&id=" . $row['id'] + ) + ); + if (!empty($row['description'])) { + $contextmenu['seperator'] = ''; + $contextmenu['description'] = array( + 'innerHTML' => ' ' . html_escape($row['description'], $modx->config['modx_charset']) + ); + } + } else { + $contextmenu = array( + 'header' => array( + 'innerHTML' => ' ' . html_escape($name, $modx->config['modx_charset']) + ), + 'item' => array( + 'innerHTML' => ' ' . $_lang['new_tmplvars'], + 'url' => "index.php?a=300&itemname=" . html_escape($name, $modx->config['modx_charset']) + ) + ); + } + + break; + } + } + echo json_encode($contextmenu, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); + break; + } + + break; + } + + case 'movedocument' : { + $json = array(); + + if ($modx->hasPermission('new_document') && $modx->hasPermission('edit_document') && $modx->hasPermission('save_document')) { + $id = !empty($_REQUEST['id']) ? (int)$_REQUEST['id'] : ''; + $parent = isset($_REQUEST['parent']) ? (int)$_REQUEST['parent'] : 0; + $menuindex = isset($_REQUEST['menuindex']) && is_scalar($_REQUEST['menuindex']) ? $_REQUEST['menuindex'] : 0; + + // set parent + if ($id && $parent >= 0) { + + // find older parent + $parentOld = $modx->db->getValue($modx->db->select('parent', $modx->getFullTableName('site_content'), 'id=' . $id)); + + $eventOut = $modx->invokeEvent('onBeforeMoveDocument', [ + 'id_document' => $id, + 'old_parent' => $parentOld, + 'new_parent' => $parent, + ]); + + if (is_array($eventOut) && count($eventOut) > 0) { + $eventParent = array_pop($eventOut); + + if ($eventParent == $parentOld) { + $json['errors'] = $_lang['error_movedocument2']; + } else { + $parent = $eventParent; + } + } + + if (empty($json['errors'])) { + // check privileges user for move docs + if (!empty($modx->config['tree_show_protected']) && $role != 1) { + $sql = $modx->db->select('*', $modx->getFullTableName('document_groups'), 'document IN(' . $id . ',' . $parent . ',' . $parentOld . ')'); + if ($modx->db->getRecordCount($sql)) { + $document_groups = array(); + while ($row = $modx->db->getRow($sql)) { + $document_groups[$row['document']]['groups'][] = $row['document_group']; + } + foreach ($document_groups as $key => $value) { + if (($key == $parent || $key == $parentOld || $key == $id) && !in_array($role, $value['groups'])) { + $json['errors'] = $_lang["error_no_privileges"]; + } + } + if ($json['errors']) { + header('content-type: application/json'); + echo json_encode($json, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); + break; + } + } + } + + if ($parent == 0 && $parent != $parentOld && !$modx->config['udperms_allowroot'] && $role != 1) { + $json['errors'] = $_lang["error_no_privileges"]; + } else { + // set new parent + $modx->db->update(array( + 'parent' => $parent + ), $modx->getFullTableName('site_content'), 'id=' . $id); + // set parent isfolder = 1 + $modx->db->update(array( + 'isfolder' => 1 + ), $modx->getFullTableName('site_content'), 'id=' . $parent); + + if ($parent != $parentOld) { + // check children docs and set parent isfolder + if ($modx->db->getRecordCount($modx->db->select('id', $modx->getFullTableName('site_content'), 'parent=' . $parentOld))) { + $modx->db->update(array( + 'isfolder' => 1 + ), $modx->getFullTableName('site_content'), 'id=' . $parentOld); + } else { + $modx->db->update(array( + 'isfolder' => 0 + ), $modx->getFullTableName('site_content'), 'id=' . $parentOld); + } + } + + // set menuindex + if (!empty($menuindex)) { + $menuindex = explode(',', $menuindex); + foreach ($menuindex as $key => $value) { + $modx->db->query('UPDATE ' . $modx->getFullTableName('site_content') . ' SET menuindex=' . $key . ' WHERE id=' . $value); + } + } else { + // TODO: max(*) menuindex + } + + if (!$json['errors']) { + $json['success'] = $_lang["actioncomplete"]; + + $modx->invokeEvent('onAfterMoveDocument', [ + 'id_document' => $id, + 'old_parent' => $parentOld, + 'new_parent' => $parent, + ]); + } + } + } + } + } else { + $json['errors'] = $_lang["error_no_privileges"]; + } + + header('content-type: application/json'); + echo json_encode($json, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE); + + break; + } + + case 'getLockedElements': { + $type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : 0; + $id = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : 0; + + $output = !!$modx->elementIsLocked($type, $id, true); + + if (!$output) { + $docgrp = (isset($_SESSION['mgrDocgroups']) && is_array($_SESSION['mgrDocgroups'])) ? implode(',', $_SESSION['mgrDocgroups']) : ''; + $docgrp_cond = $docgrp ? ' OR dg.document_group IN (' . $docgrp . ')' : ''; + $sql = ' + SELECT MAX(IF(1=' . $role . ' OR sc.privatemgr=0' . $docgrp_cond . ', 0, 1)) AS locked + FROM ' . $modx->getFullTableName('site_content') . ' AS sc + LEFT JOIN ' . $modx->getFullTableName('document_groups') . ' dg ON dg.document=sc.id + WHERE sc.id=' . $id . ' GROUP BY sc.id'; + $sql = $modx->db->query($sql); + if ($modx->db->getRecordCount($sql)) { + $row = $modx->db->getRow($sql); + $output = !!$row['locked']; + } + } + + echo $output; + + break; + } + } +} diff --git a/manager/media/style/default/color.switcher.php b/manager/media/style/default/color.switcher.php index 2afe703a..34ea0351 100755 --- a/manager/media/style/default/color.switcher.php +++ b/manager/media/style/default/color.switcher.php @@ -1,170 +1,170 @@ -
          -
          -
          -

          COLOR SWITCHER

          -
          -
          -

          Menu Background

          -
          -
          -
          -
          #000
          -
          #222
          -
          #333
          -
          #444
          -
          #555
          -
          #777
          -
          #888
          -
          #0f243e
          -
          #548dd4
          -
          #134f5c
          -
          #0b5394
          -
          #351c75
          -
          #741b47
          -
          #900
          -
          - -
          -
          -
          -
          -

          Menu links

          -
          - -
          - -
          -
          -

          Menu links:hover

          -
          - -
          -
          -
          -

          Text color

          -
          -
          -
          -
          #000
          -
          #222
          -
          #333
          -
          #444
          -
          #555
          -
          #777
          -
          #888
          -
          #b45f06
          -
          #38761d
          -
          #134f5c
          -
          #0b5394
          -
          #351c75
          -
          #741b47
          -
          #9d2661
          -
          - -
          -
          -
          -
          -

          Links Color

          -
          -
          -
          -
          #000
          -
          #222
          -
          #555
          -
          #666
          -
          #dedede
          -
          #fafafa
          -
          #fff
          -
          #b45f06
          -
          #38761d
          -
          #134f5c
          -
          #0b5394
          -
          #351c75
          -
          #741b47
          -
          #9d2661
          -
          - -
          -
          -
          - -
          -
          - +
          +
          +
          +

          COLOR SWITCHER

          +
          +
          +

          Menu Background

          +
          +
          +
          +
          #000
          +
          #222
          +
          #333
          +
          #444
          +
          #555
          +
          #777
          +
          #888
          +
          #0f243e
          +
          #548dd4
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #900
          +
          + +
          +
          +
          +
          +

          Menu links

          +
          + +
          + +
          +
          +

          Menu links:hover

          +
          + +
          +
          +
          +

          Text color

          +
          +
          +
          +
          #000
          +
          #222
          +
          #333
          +
          #444
          +
          #555
          +
          #777
          +
          #888
          +
          #b45f06
          +
          #38761d
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #9d2661
          +
          + +
          +
          +
          +
          +

          Links Color

          +
          +
          +
          +
          #000
          +
          #222
          +
          #555
          +
          #666
          +
          #dedede
          +
          #fafafa
          +
          #fff
          +
          #b45f06
          +
          #38761d
          +
          #134f5c
          +
          #0b5394
          +
          #351c75
          +
          #741b47
          +
          #9d2661
          +
          + +
          +
          +
          + +
          +
          + diff --git a/manager/media/style/default/css/color.switcher.css b/manager/media/style/default/css/color.switcher.css index c57d4db0..e614e0ba 100755 --- a/manager/media/style/default/css/color.switcher.css +++ b/manager/media/style/default/css/color.switcher.css @@ -1,299 +1,73 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} -.evocp-box { - position: fixed; - width: 300px; - min-height: 100%; - top: 35px; - right: -300px; - color: #444; - z-index: 10; - transition: 0.5s cubic-bezier(1, 1.48, 0.76, 0.95) right, box-shadow .5s; -} -.evocp-icon { - position: absolute; - width: 34px; - height: 29px; - vertical-align: middle; - line-height: 28px; - left: -34px; - background: #fafafa; - box-shadow: -3px 0 2px 1px rgba(0, 0, 0, 0.1); - border-radius: 50% 0 0 50%; - text-align: center; - font-size: 17px; - cursor: pointer; - z-index: 10; - -webkit-animation: colorchange 15s infinite alternate; -} -.dark .evocp-icon { - background: #2f323a; - border: 1px solid #2f323a; - border-right: 0; - -webkit-animation: colorchange 15s infinite alternate; -} -i.evocpicon:hover { - -webkit-transform: rotate(30deg); - -moz-transform: rotate(30deg); - -ms-transform: rotate(30deg); - -o-transform: rotate(30deg); - transform: rotate(30deg); - -} -@keyframes colorchange { - 0% { - color: #b45f06; - } - 10% { - color: #38761d; - } - 20% { - color: #134f5c; - } - 30% { - color: #0b5394; - } - 40% { - color: #351c75; - } - 50% { - color: #741b47; - } - 60% { - color: blue; - } - 70% { - color: #2980b9; - } - 80% { - color: #f1c40f; - } - 90% { - color: #2980b9; - } - 100% { - color: #900; - } -} -@-webkit-keyframes colorchange -/* Safari and Chrome - necessary duplicate */ - -{ - 0% { - color: #b45f06; - } - 10% { - color: #38761d; - } - 20% { - color: #134f5c; - } - 30% { - color: #0b5394; - } - 40% { - color: #351c75; - } - 50% { - color: #741b47; - } - 60% { - color: blue; - } - 70% { - color: #2980b9; - } - 80% { - color: #f1c40f; - } - 90% { - color: #2980b9; - } - 100% { - color: #900; - } -} -.evocp-box .evocp-frame { - position: absolute; - width: 100%; - height: 100%; - top: 0; - right: 0; - background: #fafafa; - text-align: center; - font-weight: 700; - color: #444; - padding: 0 0 20px 0; -} -.dark .evocp-box .evocp-frame { - color: #dedede; - background: #202329; - border-top: 1px solid #2f323a; -} -.evocp-box .evocp-menuHColors, -.evocp-box .evocp-menuColors, -.evocp-box .evocp-bgmcolors, -.evocp-box .evocp-colors, -.evocp-box .evocp-alinkcolors { - margin: 10px; - overflow: hidden; -} -.evocp-box .evocp-menuHColor, -.evocp-box .evocp-menuColor, -.evocp-box .evocp-bgmcolor, -.evocp-box .evocp-color, -.evocp-box .evocp-alinkcolor { - position: relative; - float: left; - margin: 2px; - height: 31px; - width: 31px; - max-height: 31px; - max-width: 31px; - background: #2f323a; - color: transparent; - overflow: hidden; - cursor: pointer; - border: 1px solid #646b7b; - border-radius: 50%; -} -.evocp-box .evocp-custom-colors, -.evocp-box .evocp-custom-colors { - clear: both; - padding-top: 20px; -} -.evocp-box input[name="evocpCustomalinkcolor"], -.evocp-box input[name="evocpCustommenuColor"], -.evocp-box input[name="evocpCustommenuHColor"], -.evocp-box input[name="evocpCustombgmColor"], -.evocp-box input[name="evocpCustomTXColor"] { - margin: 10px 0 0 -4px; - cursor: pointer; - height: 30px; - width: 30px; - border-radius: 50%; - border: none; - outline: none; - background: transparent; - padding: 0; -} -.appear-it { - right: 0; - box-shadow: -3px 0 4px 1px rgba(0, 0, 0, 0.1); -} - -.evocp-frame h2 { - font-size: 1.0rem; - line-height: 1.6rem; - border-bottom: 1px solid #dedede; - padding-top: 4px; - /* -webkit-animation: colorchange 20s infinite alternate;*/ -} -.dark .evocp-frame h2 { - background-color: #2f323a; - border-bottom: 1px solid #dedede; -} -.evocp-frame .panel-heading h3 { - cursor: pointer; - display: inline-block; - font-size: 0.8rem; - line-height: 1.1rem; - margin-top: 9px; -} -.evocp-frame .panel-heading h3:hover { - color: #000; -} -.dark .evocp-frame h3:hover { - color: #fff; -} -.evocp-frame .panel { - margin-bottom: 2px; -} -.evocp-frame .panel-heading { - text-align: left; - border-top: 1px solid #dedede; - border-bottom: 1px solid #dedede; - background-color: #f2f2f2; - padding: 0 0 0 8px; - text-transform: uppercase; -} -.dark .evocp-frame .panel-heading { - background-color: #2f323a; - border-color: #3e4144; -} -.evocp-frame .panel-heading .btn { - margin-top: 2px -} -.dark .evocp-frame .panel-heading .btn { - background-color: #2f323a; - border-color: #3e4144; - color: #fafafa; -} -.dark .evocp-frame .panel-heading .btn:hover { - background-color: #1a1c21; -} -.dark .evocp-frame h2 { - border-color: #3e4144; -} -.evocp-frame .panel-heading .togglearrow { - width: 10px; - font-size: 10px; - color: #bbb; - margin-right: 2px; - margin-top:-5px; -} -.evocp-box .evocp-menuHColor.colorSelected:before, -.evocp-box .evocp-menuColor.colorSelected:before, -.evocp-box .evocp-bgmcolor.colorSelected:before, -.evocp-box .evocp-color.colorSelected:before, -.evocp-box .evocp-alinkcolor.colorSelected:before { - font-family: FontAwesome; - content: "\f1fc"; - display: inline-block; - padding-top: 3px; - vertical-align: middle; - color: #FFF; -} -.evocp-box .evocp-menuHColor.evocp_light.colorSelected:before, -.evocp-box .evocp-menuColor.evocp_light.colorSelected:before, -.evocp-box .evocp-bgmcolor.evocp_light.colorSelected:before, -.evocp-box .evocp-color.evocp_light.colorSelected:before, -.evocp-box .evocp-alinkcolor.evocp_light.colorSelected:before { - color: #444!important; -} - -.dark .evocp-box .btn-secondary{ - background-color: #2f323a; - border-color: #3e4144; - color: #fafafa; -} -/*fix for mainmenu*/ -/* -#mainMenu.show .nav > li.dropdown.hover > a { - background-color: #fff; - color: #666!important; -} -/* color picker*/ -.sp-picker-container { - width:200px; - border-left:0!important; -} -.sp-container {width:300px; background: #f2f2f2; border: 1px solid #dedede;} -.dark .sp-container {background: #2f323a; border: 1px solid #3e4144;} -.evo-cp-replacer, .sp-replacer.sp-light {padding:2px; background: #f2f2f2; border-color: #dedede; margin:3px auto;} -.dark .evo-cp-replacer, .dark .sp-replacer.sp-light {background: #2f323a; border-color: #3e4144;} -.sp-dd {margin-top:4px;color:#666;} -.dark .sp-dd {color:#bcbec0;} -.sp-preview { - height: 25px; - width: 25px; - max-height: 25px; - max-width: 25px; - overflow: hidden; - cursor: pointer; - border-radius: 50%; - border: 0px solid #2f323a; -} +* { margin: 0; padding: 0; box-sizing: border-box; } +.evocp-box { position: fixed; width: 300px; min-height: 100%; top: 35px; right: -300px; color: #444; z-index: 10; transition: 0.5s cubic-bezier(1, 1.48, 0.76, 0.95) right, box-shadow .5s; } +.evocp-icon { position: absolute; bottom:60px; width: 34px; height: 29px; vertical-align: middle; line-height: 28px; left: -34px; background: #fafafa; box-shadow: -3px 0 2px 1px rgba(0, 0, 0, 0.1); border-radius: 50% 0 0 50%; text-align: center; font-size: 17px; cursor: pointer; z-index: 10; -webkit-animation: colorchange 15s infinite alternate; } +.dark .evocp-icon { background: #2f323a; border: 1px solid #2f323a; border-right: 0; -webkit-animation: colorchange 15s infinite alternate; } +i.evocpicon:hover { -webkit-transform: rotate(30deg); -moz-transform: rotate(30deg); -ms-transform: rotate(30deg); -o-transform: rotate(30deg); transform: rotate(30deg); } +@keyframes colorchange { +0% { color: #b45f06; } +10% { color: #38761d; } +20% { color: #134f5c; } +30% { color: #0b5394; } +40% { color: #351c75; } +50% { color: #741b47; } +60% { color: blue; } +70% { color: #2980b9; } +80% { color: #f1c40f; } +90% { color: #2980b9; } +100% { color: #900;} +} +@-webkit-keyframes colorchange /* Safari and Chrome - necessary duplicate */ { +0% { color: #b45f06; } +10% { color: #38761d; } +20% { color: #134f5c; } +30% { color: #0b5394; } +40% { color: #351c75; } +50% { color: #741b47; } +60% { color: blue; } +70% { color: #2980b9; } +80% { color: #f1c40f; } +90% { color: #2980b9; } +100% { color: #900; } +} +.evocp-box .evocp-frame { position: absolute; width: 100%; height: 100%; top: 0; right: 0; background: #fafafa; text-align: center; font-weight: 700; color: #444; padding: 0 0 20px 0; } +.dark .evocp-box .evocp-frame { color: #dedede; background: #202329; border-top: 1px solid #2f323a; } +.evocp-box .evocp-menuHColors, .evocp-box .evocp-menuColors, .evocp-box .evocp-bgmcolors, .evocp-box .evocp-colors, .evocp-box .evocp-alinkcolors { margin: 10px; overflow: hidden; } +.evocp-box .evocp-menuHColor, .evocp-box .evocp-menuColor, .evocp-box .evocp-bgmcolor, .evocp-box .evocp-color, .evocp-box .evocp-alinkcolor { position: relative; float: left; margin: 2px; height: 31px; width: 31px; max-height: 31px; max-width: 31px; background: #2f323a; color: transparent; overflow: hidden; cursor: pointer; border: 1px solid #646b7b; border-radius: 50%; } +.evocp-box .evocp-custom-colors, .evocp-box .evocp-custom-colors { clear: both; padding-top: 20px; } +.evocp-box input[name="evocpCustomalinkcolor"], .evocp-box input[name="evocpCustommenuColor"], .evocp-box input[name="evocpCustommenuHColor"], .evocp-box input[name="evocpCustombgmColor"], .evocp-box input[name="evocpCustomTXColor"] { margin: 10px 0 0 -4px; cursor: pointer; height: 30px; width: 30px; border-radius: 50%; border: none; outline: none; background: transparent; padding: 0; } +.appear-it { right: 0; box-shadow: -3px 0 4px 1px rgba(0, 0, 0, 0.1); } +.evocp-frame h2 { font-size: 1.0rem; line-height: 1.6rem; border-bottom: 1px solid #dedede; padding-top: 4px; /* -webkit-animation: colorchange 20s infinite alternate;*/ } +.dark .evocp-frame h2 { background-color: #2f323a; border-bottom: 1px solid #dedede; } +.evocp-frame .panel-heading h3 { cursor: pointer; display: inline-block; font-size: 0.8rem; line-height: 1.1rem; margin-top: 9px; } +.evocp-frame .panel-heading h3:hover { color: #000; } +.dark .evocp-frame h3:hover { color: #fff; } +.evocp-frame .panel { margin-bottom: 2px; } +.evocp-frame .panel-heading { text-align: left; border-top: 1px solid #dedede; border-bottom: 1px solid #dedede; background-color: #f2f2f2; padding: 0 0 0 8px; text-transform: uppercase; } +.dark .evocp-frame .panel-heading { background-color: #2f323a; border-color: #3e4144; } +.evocp-frame .panel-heading .btn { margin-top: 2px } +.dark .evocp-frame .panel-heading .btn { background-color: #2f323a; border-color: #3e4144; color: #fafafa; } +.dark .evocp-frame .panel-heading .btn:hover { background-color: #1a1c21; } +.dark .evocp-frame h2 { border-color: #3e4144; } +.evocp-frame .panel-heading .togglearrow { width: 10px; font-size: 10px; color: #bbb; margin-right: 2px; margin-top: -5px; } +.evocp-box .evocp-menuHColor.colorSelected:before, .evocp-box .evocp-menuColor.colorSelected:before, .evocp-box .evocp-bgmcolor.colorSelected:before, .evocp-box .evocp-color.colorSelected:before, .evocp-box .evocp-alinkcolor.colorSelected:before { font-family: FontAwesome; content: "\f1fc"; display: inline-block; padding-top: 3px; vertical-align: middle; color: #fff; } +.evocp-box .evocp-menuHColor.evocp_light.colorSelected:before, .evocp-box .evocp-menuColor.evocp_light.colorSelected:before, .evocp-box .evocp-bgmcolor.evocp_light.colorSelected:before, .evocp-box .evocp-color.evocp_light.colorSelected:before, .evocp-box .evocp-alinkcolor.evocp_light.colorSelected:before { color: #444 !important; } +.dark .evocp-box .btn-secondary { background-color: #2f323a; border-color: #3e4144; color: #fafafa; } +/*fix for mainmenu*/ +/* +#mainMenu.show .nav > li.dropdown.hover > a { + background-color: #fff; + color: #666!important; +} +/* color picker*/ +.sp-picker-container { width: 200px; border-left: 0 !important; } +.sp-container { width: 300px; background: #f2f2f2; border: 1px solid #dedede; } +.dark .sp-container { background: #2f323a; border: 1px solid #3e4144; } +.evo-cp-replacer, .sp-replacer.sp-light { padding: 2px; background: #f2f2f2; border-color: #dedede; margin: 3px auto; } +.dark .evo-cp-replacer, .dark .sp-replacer.sp-light { background: #2f323a; border-color: #3e4144; } +.sp-dd { margin-top: 4px; color: #666; } +.dark .sp-dd { color: #bcbec0; } +.sp-preview { height: 25px; width: 25px; max-height: 25px; max-width: 25px; overflow: hidden; cursor: pointer; border-radius: 50%; border: 0px solid #2f323a; } +/* navbar left */ +.navbar-left .evocp-box { + top: 0; +} diff --git a/manager/media/style/default/css/contextmenu.css b/manager/media/style/default/css/contextmenu.css index 56216045..1148c979 100755 --- a/manager/media/style/default/css/contextmenu.css +++ b/manager/media/style/default/css/contextmenu.css @@ -1,11 +1,14 @@ -/* contextmenu */ -#mx_contextmenu, #contextmenu, .nu-context-menu, .contextMenu { display: block !important; position: absolute; overflow: hidden; top: 0; max-width: 25rem; width: auto !important; height: auto; padding: 0.25rem 0; visibility: hidden; opacity: 0; z-index: 10000; background: #fff; font-size: 0.9em; border: none; border-radius: 0.25rem; -webkit-box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); transition: opacity 0s, visibility 0s; transform: translateZ(0) } -#mx_contextmenu .fa, #contextmenu .fa, .nu-context-menu .fa, .contextMenu .fa { width: 1.3em; font-size: 0.9rem; text-align: center; } -#mx_contextmenu.show, #contextmenu.show, .nu-context-menu.active, .contextMenu { visibility: visible; opacity: 1; transition: opacity 0.1s, visibility 0.1s; } -#mx_contextmenu > div, #contextmenu > div, .nu-context-menu ul li, .contextMenu > div { padding: 0.5em 2em 0.5em 1em; } -#mx_contextmenu #nameHolder, #contextmenu .menuHeader, .nu-context-menu-title { color: #1377c5; padding: 0.75em 1em; } -#mx_contextmenu .menuLink, #contextmenu .menuLink, .nu-context-menu ul li, .contextMenu > div { cursor: pointer; } -#mx_contextmenu .menuLink:hover, #contextmenu .menuLink:hover, .nu-context-menu ul li:hover, .contextMenu > div:hover { background-color: #1976d2; color: #fff; } -#mx_contextmenu .seperator, #contextmenu .seperator, .nu-context-menu ul hr, .contextMenu .cntxMnuSeparator { height: 1px; background-color: rgba(0, 0, 0, 0.07) !important; margin: 0.25em 0; padding: 0; cursor: default; } -.nu-context-menu ul { margin: 0; padding: 0; } -.contextMenu .cntxMnuItem { white-space: nowrap } +/* contextmenu */ +#mx_contextmenu, #contextmenu, .nu-context-menu, .contextMenu { display: block !important; position: absolute; overflow: hidden; top: 0; max-width: 25rem; width: auto !important; height: auto; padding: 0.25rem 0; visibility: hidden; opacity: 0; z-index: 10000; background: #fff; font-size: 0.9em; border: none; border-radius: 0.25rem; -webkit-box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); transition: opacity 0s, visibility 0s; transform: translateZ(0) } +#mx_contextmenu .fa, #contextmenu .fa, .nu-context-menu .fa, .contextMenu .fa { width: 1.3em; font-size: 0.9rem; text-align: center; } +#mx_contextmenu.show, #contextmenu.show, .nu-context-menu.active, .contextMenu { visibility: visible; opacity: 1; transition: opacity 0.1s, visibility 0.1s; } +#mx_contextmenu > div, #contextmenu > div, .nu-context-menu ul li, .contextMenu > div { padding: 0.5em 2em 0.5em 1em; } +#mx_contextmenu #nameHolder, #contextmenu .menuHeader, .nu-context-menu-title { color: #1377c5; padding: 0.75em 1em; } +#mx_contextmenu .menuLink, #contextmenu .menuLink, .nu-context-menu ul li, .contextMenu > div { cursor: pointer; } +#mx_contextmenu .menuLink:hover, #contextmenu .menuLink:hover, .nu-context-menu ul li:hover, .contextMenu > div:hover { background-color: #1976d2; color: #fff; } +#mx_contextmenu .seperator, #contextmenu .seperator, .nu-context-menu ul hr, .contextMenu .cntxMnuSeparator { height: 1px; background-color: rgba(0, 0, 0, 0.07) !important; margin: 0.25em 0; padding: 0; cursor: default; } +.nu-context-menu ul { margin: 0; padding: 0; } +.contextMenu .cntxMnuItem { white-space: nowrap } +/* modes theme */ +/* darkness */ +.darkness #mx_contextmenu, .darkness #contextmenu, .darkness .nu-context-menu, .darkness .contextMenu { background-color: #343942; color: inherit; } diff --git a/manager/media/style/default/css/custom.css b/manager/media/style/default/css/custom.css index c964fb90..57000139 100755 --- a/manager/media/style/default/css/custom.css +++ b/manager/media/style/default/css/custom.css @@ -1,457 +1,494 @@ -/* [ COLS ] */ -.row { margin-left: -1.25rem; margin-right: -1.25rem } -.container { padding-left: 1.25rem; padding-right: 1.25rem; width: 100% } -/* :TODO .container-body need remove and replace .tab-content */ -.container-body { padding: 1.25rem } -/* [ FORMS ] */ -.form-row { margin-bottom: 0.25rem; } -.form-row.row { margin-left: 0; margin-right: -1rem } -.form-row label { margin-bottom: 0.15rem } -.form-row .col, .form-row .col-1, .form-row .col-10, .form-row .col-11, .form-row .col-12, .form-row .col-2, .form-row .col-3, .form-row .col-4, .form-row .col-5, .form-row .col-6, .form-row .col-7, .form-row .col-8, .form-row .col-9, .form-row .col-lg, .form-row .col-lg-1, .form-row .col-lg-10, .form-row .col-lg-11, .form-row .col-lg-12, .form-row .col-lg-2, .form-row .col-lg-3, .form-row .col-lg-4, .form-row .col-lg-5, .form-row .col-lg-6, .form-row .col-lg-7, .form-row .col-lg-8, .form-row .col-lg-9, .form-row .col-md, .form-row .col-md-1, .form-row .col-md-10, .form-row .col-md-11, .form-row .col-md-12, .form-row .col-md-2, .form-row .col-md-3, .form-row .col-md-4, .form-row .col-md-5, .form-row .col-md-6, .form-row .col-md-7, .form-row .col-md-8, .form-row .col-md-9, .form-row .col-sm, .form-row .col-sm-1, .form-row .col-sm-10, .form-row .col-sm-11, .form-row .col-sm-12, .form-row .col-sm-2, .form-row .col-sm-3, .form-row .col-sm-4, .form-row .col-sm-5, .form-row .col-sm-6, .form-row .col-sm-7, .form-row .col-sm-8, .form-row .col-sm-9, .form-row .col-xl, .form-row .col-xl-1, .form-row .col-xl-10, .form-row .col-xl-11, .form-row .col-xl-12, .form-row .col-xl-2, .form-row .col-xl-3, .form-row .col-xl-4, .form-row .col-xl-5, .form-row .col-xl-6, .form-row .col-xl-7, .form-row .col-xl-8, .form-row .col-xl-9, .form-row .col-xs, .form-row .col-xs-1, .form-row .col-xs-10, .form-row .col-xs-11, .form-row .col-xs-12, .form-row .col-xs-2, .form-row .col-xs-3, .form-row .col-xs-4, .form-row .col-xs-5, .form-row .col-xs-6, .form-row .col-xs-7, .form-row .col-xs-8, .form-row .col-xs-9 { padding-left: 0 } -.form-row .form-control { float: left; } -.form-inline .form-row .form-control { float: none; } -.container-body > .form-group:last-child, .container-body > .form-row:last-child, .container-body > p:last-child, .container-body > .form-group:last-child > p:last-child { margin-bottom: 0 } -.form-control-name { position: relative; } -.form-control-name .form-control { padding-right: 2em } -.form-control-name .custom-control { display: block; overflow: hidden; position: absolute; z-index: 3; top: 0; right: 0; width: 2em; height: 100%; margin: 0; padding: 0; cursor: pointer } -.form-control-name .custom-control input { position: absolute; left: -100% } -.form-control-name .custom-control .fa-lock { margin-top: 0.6em; font-size: 1.5em } -.form-control-name .custom-control .fa-lock::before { content: "\f09c"; color: #ddd } -.form-control-name .custom-control input:checked ~ .fa-lock::before { content: "\f023"; color: #d9534f } -input[type=date]:not(.unstyled), input[name*=date]:not(.unstyled):not([type=checkbox]):not([type=radio]), input[name=createdon], input[name=editedon], input[size="1"], select[size="1"]:not(.unstyled), select[name=usergroup]:not(.unstyled), select[name=docgroup]:not(.unstyled) { width: auto !important; vertical-align: middle } -input[name*=date]:not(.unstyled) + .input-group-addon { float: left; width: auto; } -input[size="50"], select[size="50"] { width: 10rem !important } -select[name=usergroup], select[name=docgroup] { margin: 0 0.5em; } -select[name=docgroup] + input[type=submit] { float: none; margin: 0; } -#settingsPane #filemanager_path, #settingsPane #rb_base_dir, #settingsPane input[name=txt_custom_contenttype] { border-top-right-radius: 0; border-bottom-right-radius: 0 } -#settingsPane #filemanager_path + input[name=reset_filemanager_path], #settingsPane #rb_base_dir + input[name=reset_rb_base_dir], #settingsPane input[name=txt_custom_contenttype] + input[type=button], input[name=photo] + input[type=button], #range input#pids + input[name=fsubmit], input[name="ta"].inputBox + input[type=button], input[name="ta"].inputBox + .CodeMirror + input[type=button], #documentPane input[name^=tv]:not([class*=mtv]) + input[type=button] { z-index: 5; float: right; margin-top: -2.30769em; width: auto !important; border-top-left-radius: 0; border-bottom-left-radius: 0 } -#settingsPane [name=site_name], #settingsPane [name=txt_custom_contenttype], #settingsPane [name=filemanager_path], #settingsPane [name=rb_base_dir], input[name=photo], #range input#pids, input[maxlength="350"], textarea.mce, #editorRow_TinyMCE { width: 100% !important } -#range::after { content: ""; display: table; width: 100% } -/* [ Editor ] */ -.navbar.navbar-editor { padding: .5rem 1.25rem; border-radius: 0 } -.navbar-editor > label { margin-bottom: 0 } -.section-editor textarea { float: left; border-left: none; border-right: none; font-family: 'Inconsolata', 'Monaco', 'Consolas', 'Courier New', 'Courier', monospace; font-weight: 300; font-size: 0.875rem; } -/* [ Action Buttons ] */ -/* new style */ -#actions { background: rgba(199, 199, 199, 0.25); padding: 0.5rem; position: fixed; top: 0; right: 1rem; text-align: right; z-index: 1001; border-radius: 0 0 0.3rem 0.3rem; } -#actions .btn-group { margin: 0 } -#actions .btn-group > .btn-group { display: block } -#actions .btn-group .btn, #actions .btn-group .form-control { font-size: .6772rem; height: 2.4em; line-height: 1.4 } -#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: none; width: 1em; font-size: 1em; text-align: center } -#actions .btn-group .btn-group #Button1 { min-width: 100%; text-align: left; float: right; } -#actions .btn-group .btn-success { box-shadow: inset 0 -2px 0 rgba(0, 0, 0, .07); } -#actions .btn-group .btn-success:hover { box-shadow: none } -#actions .btn-group .plus { z-index: 2; float: right; margin: -2.4em 0 0 0; width: 2rem; padding-left: 0; padding-right: 0; text-align: center; cursor: default; } -#actions .btn-group .plus::before { content: "\f107"; font-family: FontAwesome } -#actions .btn-group .show .plus::before { content: "\f106"; } -#actions .btn-group select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; margin: -100% 0 -2rem 0; font-size: 0.675rem; opacity: 0; visibility: hidden; } -#actions .btn-group .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 2rem; margin: 0; padding: 0; text-align: left; font-size: .6772rem; border-top: none; border-radius: 0 0 0.1em 0.1em; overflow: hidden; } -#actions .btn-group .show > .dropdown-menu { display: block } -#actions .btn-group .dropdown-menu > span { display: block; margin: 0; text-align: left; border: none; border-top: 1px solid rgba(0, 0, 0, 0.1) } -#actions .btn-group .dropdown-menu > span:first-child { border-color: transparent } -#actions .btn-group .dropdown-menu > span:hover { background-color: #e6e6e6; } -#actions .btn-group .dropdown-toggle::after { margin: 0; border-width: 0.4em; transition-duration: 0.25s } -#actions .btn-group .show .dropdown-toggle::after { transform: rotate(180deg) } -#_actions .btn-group .input-group-btn .btn { margin-left: .1875rem } -#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1em } -@media (max-width: 840px) { -#actions { right: 0 } -#actions .btn-group .btn span, #actions .btn-group select#stay, #_actions .btn-group .btn span { display: none } -#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: inline-block } -#actions .btn-group .dropdown-menu { width: 2rem } -#actions .btn-group .dropdown-menu span { padding-left: 0; padding-right: 0; text-align: center } -#_actions .btn-group .input-group-btn .btn { margin-left: -1px } -#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: 0 } -#_actions .btn-group .form-control:first-child { border-top-left-radius: .1em; border-bottom-left-radius: .1em; } -#_actions .btn-group .btn:last-child { border-top-right-radius: .1em; border-bottom-right-radius: .1em; } -} -/* old style */ -#actions .actionButtons { float: left; min-height: 32px } -#actions .actionButtons li { position: relative; float: left; margin-right: 3px; border: none } -#actions .actionButtons li a, #actions .actionButtons .plus { float: left; padding: 0 10px !important; height: 32px; line-height: 30px; -webkit-user-select: none; user-select: none; } -#actions .actionButtons li:last-child { margin: 0 } -#actions .actionButtons #Button1 a { width: 100%; text-align: left; } -#actions .actionButtons .plus { overflow: hidden; float: right; margin: -32px 0 0 0; width: 35px; border-radius: 0 3px 3px 0 !important; text-align: center; cursor: default; font: normal normal normal 0/30px FontAwesome } -#actions .actionButtons .plus::before { content: "\f107"; font-size: 14px } -#actions .actionButtons .show .plus::before { content: "\f106"; } -#actions .actionButtons .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 35px; margin: -2px 0 0; padding: 2px 0 0; text-align: left; font-size: 1em; background-color: #fff; border: 1px solid #32ab9a; border-top: none; border-radius: 0 0 3px 3px; overflow: hidden; } -#actions .actionButtons .show > .dropdown-menu { display: block } -#actions .actionButtons .dropdown-menu > span { display: block; padding: 0 10px; height: 32px; line-height: 30px; border: none; border-top: 1px solid #f2f2f2; cursor: pointer; } -#actions .actionButtons .dropdown-menu > span:hover { background-color: #fbfbfb; } -#actions .actionButtons select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; padding: 0 10px; margin: -100% 0 -32px 0; font-size: 1em; opacity: 0; visibility: hidden; } -#actions .actionButtons #Button1 a, #actions .actionButtons .plus { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } -#actions .actionButtons #Button1 a:hover, #actions .actionButtons .plus:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } -#actions .actionButtons #Button1 a:active, #actions .actionButtons .plus:active { background: #32ab9a; border-color: #32ab9a; } -@media (max-width: 900px) { -#actions .actionButtons li a, #actions .actionButtons .dropdown-menu span { font-size: 0 } -#actions .actionButtons li a .fa, #actions .actionButtons .dropdown-menu span .fa { display: inline-block; font-size: 14px; line-height: 30px } -#actions .actionButtons .dropdown-menu { width: 35px } -#actions .actionButtons #Button1 a { margin: 0; width: auto } -#actions .actionButtons .plus { margin: 0 0 0 -2px } -#actions .actionButtons select#stay { display: none } -} -/* actionButtons in content ( old style ) */ -.actionButtons { margin: 0; padding: 0; background: none; width: auto; white-space: nowrap; } -.actionButtons li { float: left; margin: 0; padding: 0; list-style: none; } -.actionButtons li:before, .mmTagList li:before, .rTable li:before, .tab-pane ul li ul li:before, .dashboard li:before, div#idShowHideSocialBox.sectionBody > div.btn-group.ope > ul.dropdown-menu > li:before, .sectionBody .multitv .list li:before { display: none; content: ''; } -.actionButtons img { vertical-align: top; margin-top: 1px; opacity: 0.3; } -.actionButtons:hover img { opacity: 1; } -.actionButtons a:hover { border-color: #999; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); text-decoration: none !important; } -.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } -.actionButtons a { float: left; padding: 5px 10px; height: 32px; font-size: 13px; font-weight: 500; } -.actionButtons a, .actionButtons li.primary a, .actionButtons a.primary, .actionButtons a.default { text-shadow: none; background: #fff; color: #555; border: 1px solid #e4e4e4; border-radius: 3px; /*box-shadow: 0 0 0 1px #E4E4E4;*/ box-shadow: none; transition: none; } -.actionButtons a:hover { background: #1377c5; box-shadow: none; border-color: #1377c5; color: #fff !important; transition: none; } -.actionButtons a:active { background-color: #3189ba; border-color: #3189ba; } -.actionButtons li.primary a, .actionButtons a.primary { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } -.actionButtons li.primary a:hover, .actionButtons a.primary:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } -.actionButtons li.primary a:active, .actionButtons a.primary:active { background: #32ab9a; border-color: #32ab9a; } -.actionButtons img { display: none; } -#treePane .actionButtons img { display: inline; } -.actionButtons--tableheader .fa { font-size: 14px; } -.sectionBody .actionButtons { padding-top: 0; min-height: 40px; } -.sectionBody .actionButtons li { margin-right: 10px; } -.sectionBody .actionButtons a { display: inline-block; padding: 9px 10px; line-height: 1; } -table.actionButtons { margin-top: 1rem; margin-bottom: 10px; } -table.actionButtons img { display: inline-block; } -table.actionButtons .searchtext { padding: 5px; height: 24px; width: 150px; } -.actionButtons .fa { display: none; text-align: center; font-size: 1em; line-height: 1em; width: 1.1em; vertical-align: initial } -.actionButtons .fa, .actionButtons--eit .fa { display: inline-block; } -.optionsTitle .fa { display: inline-block; } -@media (max-width: 900px) { -.actionButtons a { display: inline-block; padding: 6px 10px } -.tab-page .actionButtons a { margin-top: 0 !important } -.actionButtons a span { display: none; } -.actionButtons a .fa { display: inline-block; } -} -/* [ TABLES ] */ -/* table */ -.table th, .table td { padding: 0.15rem 0.25rem; } -/* table-data */ -.table.data { width: 100%; max-width: 100%; margin-bottom: 0; border-bottom: 1px solid #eceeef } -.table.data th, .table.data thead td { padding: 0.75rem; text-transform: uppercase; white-space: nowrap; font-size: 0.675rem; color: #777; border-bottom: 2px solid #eceeef } -.table.data td { padding: 0.55rem 0.75rem; } -.table.data td, .table.data th, .table.data thead td { vertical-align: top; border-top: 1px solid #eceeef } -.table.data td:first-child, .table.data th:first-child, .table.data.table-sm td:first-child, .table.data.table-sm th:first-child { padding-left: 1.25rem } -.table.data td:last-child, .table.data th:last-child, .table.data.table-sm td:last-child, .table.data.table-sm th:last-child { padding-right: 1.25rem } -.table.data thead { background-color: #fff; } -.table.data > tbody > tr { background-color: #f9f9f9; transition-duration: .5s } -.table.data > tbody > tr:nth-child(2n) { background-color: #fff } -.table.data > tbody > tr:hover { cursor: default; background-color: rgba(93, 109, 202, 0.16); transition-duration: .05s } -.table.data tr.unstyled:hover { background-color: inherit } -.table.data .actions { white-space: nowrap } -.table.data .actions a { color: #555 } -.table.data .actions a .fa, .table.data .actions span .fa { position: relative; margin: 0 0.375rem; font-size: 0.9rem; color: #555 } -.table.data .actions a:hover .fa { color: #000; } -.table.data .actions a:hover .fa.fa-trash { color: #d80030 } -.table.data .actions a .fa::before { position: relative; z-index: 2; } -.table.data .actions a .fa::after { content: ""; position: absolute; z-index: 1; left: 50%; top: 50%; width: 1.5rem; height: 1.5rem; margin: -0.75rem 0 0 -0.75rem; border-radius: 50%; -webkit-transition: 0.15s; transition: 0.15s; } -.table.data .actions a:hover .fa::after { background-color: #fff } -.table.data .actions .disabled { visibility: hidden } -/* table-data-nowrap */ -.table.data.nowrap th, .table.data.nowrap td { white-space: nowrap } -/* table-data-sortable */ -.table.data thead .sortable a, .table.data thead .sortable-text a { color: #777; text-decoration: none !important; } -.table.data thead .sortable a:hover, .table.data thead .sortable-text a:hover { color: #222 } -.table.data thead .sortable a::after, .table.data thead .sortable-text a::after { content: "\f107"; font-family: FontAwesome; opacity: .3; margin-left: .5em; } -.table.data thead .sortable.forwardSort a::after, .table.data thead .sortable-text.forwardSort a::after { opacity: 1; content: "\f106"; color: #d9534f } -.table.data thead .sortable.reverseSort a::after, .table.data thead .sortable-text.reverseSort a::after { opacity: 1; content: "\f107"; color: #d9534f } -.table.data thead .sortable:hover a::after, .table.data thead .sortable-text:hover a::after, .table.data thead .sortable-numeric:hover a::after, .table.data thead .sortable-date:hover a::after { opacity: 1 } -.table.data thead .sortable, .table.data thead .sortable-text, .table.data thead .sortable-numeric, .table.data thead .sortable-date { cursor: pointer } -.table.data thead .sortable-text span, .table.data thead .sortable-numeric span, .table.data thead .sortable-date span { display: none } -.table.data.table-sortable > tbody > tr { cursor: move; transition-duration: .5s } -.table.data.table-sortable > tbody > tr.ghost { background-color: rgba(93, 109, 202, 0.16); color: #d9534f !important; transition: background-color .5s, color .5s, transform 0s } -/* table-data-sm */ -.table.data.table-sm td, .table.data.table-sm th { padding: .25rem .5rem; } -.table.data.table-sm th, .table.data.table-sm thead td { font-size: 0.75rem; text-transform: none; } -/* table-data-even */ -.table.data.table-even > tbody > tr:not(:hover) { background-color: #fff } -.table.data.table-even > tbody > tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } -.table.data.table-even > tbody > tr:nth-child(2n) { background-color: #fff } -/* table-data-docs */ -.table.data .doc-item .fa { width: 1.2em; font-size: 0.9rem; text-align: center; margin-right: 0.25rem } -.table.data .doc-item { text-decoration: none } -.table.data .doc-item:hover span { text-decoration: underline } -.table.data .doc-item.private .fa::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-size: 0.75em; color: #d9534f; } -/* [ BREADCRUMBS ] */ -ul.breadcrumbs { margin: 0 1rem .5rem; padding: 0 0 .5rem; line-height: normal; font-size: .675rem; color: #888; border-bottom: 1px dotted #cecaca; } -ul.breadcrumbs li { list-style: none; display: inline-block; padding: 0; margin: 0; } -ul.breadcrumbs a { text-decoration: none; } -ul.breadcrumbs span { display: inline-block; width: 1.25em; vertical-align: top; text-indent: -2.25em; overflow: hidden; } -ul.breadcrumbs span::after { margin-left: 2em; font-family: FontAwesome; content: "\f105" } -/* [ PAGINATION ] */ -#pagination { padding: 0 1.25rem; margin: .5rem 0 0; } -#pagination ul { margin: 0 0 0 .5rem; display: inline-block; } -#pagination li { list-style: none; display: inline-block; margin: 0 0 0 1px; } -#pagination li a { display: inline-block; padding: 0 .5rem; line-height: 1.7; border: 1px solid #ddd; text-decoration: none; color: #333; } -#pagination li.currentPage a, #pagination li a:hover { color: #555; border: 1px solid #555; } -/* [ SEARCHBAR ] */ -.searchbar input[type=text] { max-width: 10rem } -/* [ WIDGETS ] */ -.widgets .card { margin-bottom: .75rem; border: 1px solid rgba(0, 0, 0, .1); border-radius: 0; background-color: #fff; -webkit-transition: box-shadow .35s; transition: box-shadow .35s; } -.widgets .card:hover { box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.07); } -.widgets .card-header { padding: .5rem 1rem; font-size: .9rem; color: #616a73; font-weight: 700; border-radius: 0; border: none; border-bottom: 1px solid rgba(0, 0, 0, .05); background-color: #fff; } -.widgets .card-header .fa { font-size: .9rem } -.widgets .card-block { padding: 0; } -.widgets .card-block .card-block p { padding: 0 1rem } -.widgets .card-block .card-body { padding: 1rem; } -.widgets .card-block .card-body + .card-body { padding-top: 0 } -.widgets .table { margin-bottom: 1rem } -.widgets .table:not(.data) tr th, .widgets .table:not(.data) tr td { padding: .15rem; } -.widgets .table tr th:first-child, .widgets .table tr td:first-child { padding-left: 1rem !important } -.widgets .table tr th:last-child, .widgets .table tr td:last-child { padding-right: 1rem !important } -.widgets .table .actions a .fa { margin: 0 .05rem; } -/* widgets custom */ -.widgets #welcome .wm_buttons { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-bottom: 1rem; padding: 0; text-align: center; border-bottom: 1px solid rgba(0, 0, 0, .05); } -.widgets #welcome .wm_button { max-width: 16.666667%; flex: 0 0 16.666667%; } -.widgets #welcome .wm_button a { display: block; height: 100%; padding: 1rem 1rem .5rem; text-decoration: none; color: #646b7b; box-shadow: none; transition-duration: .5s } -.widgets #welcome .wm_button a:hover { color: #373b46; background-color: rgba(93, 109, 202, 0.16) } -.widgets #welcome .wm_button a .fa { display: inline-block; } -.widgets #welcome .wm_button a .fa + span { display: block; padding: .5em 0; line-height: 1em; font-size: .7rem; } -.widgets #modxrecent_widget .table.data tbody tr:not(:hover) { background-color: #fff } -.widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } -.widgets #modxrecent_widget .table.data tbody tr:nth-child(2n) { background-color: #fff } -@media (max-width: 1399px) { -.widgets #welcome .wm_button { max-width: 20%; flex: 0 0 20%; } -} -@media (max-width: 1199px) { -.widgets #welcome .wm_button { max-width: 25%; flex: 0 0 25%; } -} -@media (max-width: 991px) { -.widgets #welcome .wm_button { max-width: 33.3333%; flex: 0 0 33.3333%; } -} -@media (max-width: 767px) { -.widgets #welcome .wm_button { max-width: 50%; flex: 0 0 50%; } -} -/* [ DATEPICKER ] */ -.dp_container { position: absolute; z-index: 500; } -.dp_cal { overflow: hidden; width: 220px; margin: 0.25rem 0; background-color: #fff; -webkit-box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); } -.dp_cal p { position: relative; margin: 10px; } -.dp_cal select { font-size: 1em; margin: 2px 3px; width: auto !important } -.dp_cal select option { padding: 1px 3px } -.dp_cal table { border-collapse: collapse; border-spacing: 0; width: 100% } -.dp_cal td.dp_roll { background-color: rgba(0, 0, 0, 0.1); color: #333 !important } -.dp_cal th, .dp_cal td { font-size: 1em; padding: 0.5em 0 !important; text-align: center !important; width: 14.2857%; cursor: default } -.dp_cal tbody th { background-color: #656d79; color: #fff; } -.dp_cal tbody td:nth-child(6), .dp_cal tbody td:nth-child(7) { color: indianred } -.dp_cal .dp_empty { background-color: #f9f9f9 } -.dp_cal .dp_hide { visibility: hidden } -.dp_cal .dp_today { background-color: #4caf50; color: #fff !important } -.dp_cal .dp_selected { background-color: #3189ba; color: #fff !important } -.dp_cal input { width: 68% !important } -.dp_cal button { position: absolute; top: 0; right: 0; margin: 0 !important; width: 30% !important } -/* datepicker icon clear */ -.clearDate { position: relative; margin: 0.5rem 0 0 -1.5rem; z-index: 10; } -/* [ GRID STYLE ] */ -.grid { width: 100%; background-color: #fff !important; border: 1px solid rgba(0, 0, 0, 0.1); border-collapse: collapse; } -.grid thead, .grid tfoot { background-color: #e9e9e9 } -.grid th, .grid td { padding: 0.375rem !important; border: 1px solid #ddd } -.gridHeader, .grid th { color: #333; font-weight: 500; white-space: nowrap; background-color: #e9e9e9; text-align: left; } -.grid > tbody > tr:nth-child(2n) > td { background-color: rgba(0, 0, 0, 0.03) } -.gridItem { background-color: #fff; padding: 3px; } -.gridAltItem { background-color: #f7f7f7; padding: 3px; } -.grid tbody tr:hover td { background: #e9edf3; } -.grid a { text-decoration: none; } -.grid img { vertical-align: middle; padding-right: 4px; } -/* SORTABLELIST */ -ul.sortableList { margin: 0; } -ul.sortableList li { position: relative; z-index: 1; float: left; clear: both; max-width: 100%; width: 30rem; list-style: none; font-weight: bold; cursor: move; padding: 0.46153846em 1em; margin: .0625rem 0; border: 1px solid #ccc; line-height: 1.23076923; background-color: #fff; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); box-shadow: none; transition: color .3s, box-shadow .3s, transform .3s, z-index .3s step-end; } -ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0, 0.15); transition: color .3s, box-shadow .3s, transform 0s, z-index 0s; } -/* [ TOOLTIPS ] */ -.evo-tooltip, .custom-tip { position: fixed; z-index: 13000; width: 13rem; margin: 1rem; padding: 0.9rem 1rem; font-size: 0.75rem; line-height: 1.5; font-family: sans-serif; text-align: left; color: #333; background-color: #fff; visibility: hidden; transition-duration: .3s; transform: translate3d(1rem, 0, 0); -webkit-box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); } -.evo-tooltip { opacity: 0; content: attr(data-tooltip); } -.evo-tooltip.show { opacity: 1; visibility: visible; transform: translate3d(0, 0, 0); } -[data-tooltip] { cursor: help } -[data-tooltip].fa-question-circle { opacity: 0.15; } -[data-tooltip].fa-question-circle:hover { opacity: 1; } -/* [ FILES MANAGER ] */ -#ManageFiles { padding-bottom: 1rem; } -#ManageFiles .breadcrumbs { } -#ManageFiles .breadcrumbs a, #ManageFiles .breadcrumbs span { display: inline-block; padding: 0 0.25em; } -#ManageFiles #imageviewer { text-align: center; } -#ManageFiles #imageviewer img { display: inline-block; max-width: 100%; margin-top: 1rem } -#FilesTable { margin-bottom: 1rem; border-bottom: 1px solid #ddd; } -#file_editfile.section .sectionHeader { margin: 0; padding: 0.5rem 1rem; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } -#file_editfile.section .sectionBody { margin: 0 !important; padding: 0 0 1rem; border: none; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } -#file_editfile td { padding: 0 !important; } -#file_editfile #content { float: left; width: 100%; min-height: 25rem; border: none; border-bottom: 1px solid rgba(0, 0, 0, .15) } -/* STYLES FOR PAGE HELP */ -#helpPane h1 { margin-bottom: 1em; padding: .5rem; font-size: .8rem; border-bottom: 1px solid #e0e0e0; } -#helpPane li:not(:first-child) > strong { margin-top: 1.4em; } -#helpPane li > strong { display: block; font-size: 14px; } -#helpPane pre { border: 1px solid rgba(0, 0, 0, 0.1); padding: 1em; } -/* [ DARK THEME ] */ -.dark .section-editor textarea { background-color: #282c34; color: #abb2bf } -.dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } -.dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } -.dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } -.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: transparent !important; } -.dark .multitv .list li.element { background: #fefefe !important; } -.dark .split { border-color: rgba(0, 0, 0, .05) } -.dark hr { background: transparent; } -/*.dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } -.dark .content-blocks .block .fields-group { border: 1px dashed #e2e2e2; }*/ -.dark .content-blocks input[type="text"], .dark .content-blocks input[type="password"], .dark .content-blocks input[type="number"], .dark .content-blocks textarea { background-color: #fbfbfb !important; border-color: #dbdbdb !important; } -.dark .content-blocks .controls { background: #f9f9f9 !important; } -.dark .widgets .card-header { color: #616a73; background-color: #fff; } -/* - [ OTHERS COMPONENTS ] - this components need fix css -*/ -/* extras */ -.catalog_item select[name=link] { width: auto !important; margin-left: 0.5rem } -/* ManagerManager */ -.sectionHeader.minimizable { position: relative; z-index: 1; background-color: #fafafa; padding: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.15); } -.dark .sectionHeader.minimizable { background-color: #f2f2f2 } -.imageField { min-width: 100% !important; width: 100% !important } -ul.mmTagList { float: left; margin-top: .25rem !important } -/* MCE */ -.mce-container, .mce-container-body { box-sizing: border-box !important } -.mce-container button { border: none; border-radius: 0; background-color: transparent; } -.mce-window-head .mce-close { padding: 0; } -#editorRow_TinyMCE { background-color: #fff; } -#editorRow_TinyMCE tr { border: 1px dotted rgba(0, 0, 0, .05); } -#editorRow_TinyMCE th { white-space: nowrap } -#editorRow_TinyMCE th, #editorRow_TinyMCE td { padding: 0.5em; border: none !important } -/* codeMirror */ -.CodeMirror { width: 100%; margin: 0 !important; } -.CodeMirror pre { word-break: break-all !important; } -.CodeMirror > div:first-child > textarea { /*opacity: 0;*/ z-index: -1; left: -9999rem; } -div.CodeMirror-cursors { pointer-events: none; } -/* docFinder */ -form#docfinder div.tab-page { height: auto !important } -/* SimpleGallery */ -#SimpleGallery .pagination { display: block } -#SimpleGallery .sg_image { width: auto } -/* multiTV */ -.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: transparent !important; top: -10px !important; } -.multitv .list li.element { border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } -/* loginbox animation */ -@keyframes anim-loginbox { -from { opacity: 0; transform: translateY(30px); } -to { opacity: 1; transform: translateY(0); } -} -@-webkit-keyframes anim-loginbox { -from { opacity: 0; transform: translateY(30px); } -to { opacity: 1; transform: translateY(0); } -} -.loginbox { -webkit-animation-name: anim-loginbox; -webkit-animation-duration: .5s; -webkit-animation-iteration-count: 1; -webkit-animation-timing-function: ease; -webkit-animation-fill-mode: forwards; -moz-animation-name: anim-loginbox; -moz-animation-duration: .5s; -moz-animation-iteration-count: 1; -moz-animation-timing-function: ease; -moz-animation-fill-mode: forwards; animation-name: anim-loginbox; animation-duration: .5s; animation-iteration-count: 1; animation-timing-function: ease; animation-fill-mode: forwards; } -/* end loginbox animation */ - - -/* pmfx theme */ - -#actions .dropdown-toggle:after { - display: none !important; -} - -.widgets .card { - margin-bottom: 1rem; - /* border: 1px solid rgba(0,0,0,.1); */ - border-width: 0; - border-radius: 0; - box-shadow: 0 0.1rem 0.3rem 0 rgba(0, 0, 0, 0.075); -} - -.card-header, -.widgets .card-header { - font-size: .9rem; - font-weight: 700; - text-transform: none; - background-color: transparent; - border-bottom: 1px solid rgba(0,0,0,0.05); -} - -.dark .widgets .card-header { - background-color: #fafafa; -} - -.card .table.data { - margin-bottom: 0; - border-bottom-width: 0; -} - -.table.data th, -.table.data thead td { - border-bottom-width: 1px; -} - -.card .table.data > thead > tr:first-child td, -.card .table.data > thead > tr:first-child th, -.card .table.data > tbody > tr:first-child td, -.card .table.data > tbody > tr:first-child th { - border-top-width: 0; -} - -.table.data > tbody > tr, -.table.data > tbody > tr:nth-child(2n), -.widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { - background-color: #fff; -} -.table.data > tbody > tr:hover { - background-color: rgba(0, 0, 0, 0.03) !important; -} - -ul.breadcrumbs { - margin: 0 0 1rem 0; - padding: .5rem 0.8rem; - line-height: normal; - font-size: .675rem; - color: #888; - border-width: 0; - background-image: linear-gradient(to right, rgba(0,0,0,0.04), transparent 60%); -} - -ul.breadcrumbs a { - color: #333; -} - -#settingsPane [name="site_name"], -#settingsPane [name="emailsender"], -#settingsPane [name="emailsubject"], -#settingsPane [name="datepicker_offset"], -#settingsPane [name="editor_css_path"], -#settingsPane [name="safe_functions_at_eval"], -#settingsPane [name="valid_hostnames"], -#settingsPane [name="upload_files"], -#settingsPane [name="upload_images"], -#settingsPane [name="upload_media"], -#settingsPane [name="upload_flash"], -#settingsPane [name="txt_custom_contenttype"], -#settingsPane [name="filemanager_path"], -#settingsPane [name="rb_base_url"], -#settingsPane [name="rb_base_dir"], -#settingsPane [name="thumbsDir"], -input[name="photo"], -#range input#pids, -input[maxlength="350"], -textarea.mce, -#editorRow_TinyMCE { - width: 100% !important; -} - -#news .card-block > div, -#security .card-block > div { - padding: 0 !important; -} -#news .card-block ul, -#security .card-block ul { - padding: 0; - margin: 0; -} -#news .card-block ul li, -#security .card-block ul li { - padding: 0.75rem 1rem; - border-bottom: 1px solid #ebebeb; -} - -ul.mmTagList li { - padding: 2px 8px !important; - border-radius: 3px !important; - -webkit-border-radius: 3px !important; - background-color: #eaeaea !important; - text-decoration: none !important; -} -ul.mmTagList li.tagSelected { - border-radius: 3px !important; - -webkit-border-radius: 3px !important; - background-color: #5A5E63 !important; -} \ No newline at end of file +/* [ COLS ] */ +.row { margin-left: -1.25rem; margin-right: -1.25rem } +.container { padding-left: 1.25rem; padding-right: 1.25rem; width: 100% } +/* :TODO .container-body need remove and replace .tab-content */ +.container-body { padding: 1.25rem } +/* [ FORMS ] */ +.form-row { margin-bottom: 0.25rem; } +.form-row.row { margin-left: 0; margin-right: -1rem } +.form-row label { margin-bottom: 0.15rem } +.form-row .col, .form-row .col-1, .form-row .col-10, .form-row .col-11, .form-row .col-12, .form-row .col-2, .form-row .col-3, .form-row .col-4, .form-row .col-5, .form-row .col-6, .form-row .col-7, .form-row .col-8, .form-row .col-9, .form-row .col-lg, .form-row .col-lg-1, .form-row .col-lg-10, .form-row .col-lg-11, .form-row .col-lg-12, .form-row .col-lg-2, .form-row .col-lg-3, .form-row .col-lg-4, .form-row .col-lg-5, .form-row .col-lg-6, .form-row .col-lg-7, .form-row .col-lg-8, .form-row .col-lg-9, .form-row .col-md, .form-row .col-md-1, .form-row .col-md-10, .form-row .col-md-11, .form-row .col-md-12, .form-row .col-md-2, .form-row .col-md-3, .form-row .col-md-4, .form-row .col-md-5, .form-row .col-md-6, .form-row .col-md-7, .form-row .col-md-8, .form-row .col-md-9, .form-row .col-sm, .form-row .col-sm-1, .form-row .col-sm-10, .form-row .col-sm-11, .form-row .col-sm-12, .form-row .col-sm-2, .form-row .col-sm-3, .form-row .col-sm-4, .form-row .col-sm-5, .form-row .col-sm-6, .form-row .col-sm-7, .form-row .col-sm-8, .form-row .col-sm-9, .form-row .col-xl, .form-row .col-xl-1, .form-row .col-xl-10, .form-row .col-xl-11, .form-row .col-xl-12, .form-row .col-xl-2, .form-row .col-xl-3, .form-row .col-xl-4, .form-row .col-xl-5, .form-row .col-xl-6, .form-row .col-xl-7, .form-row .col-xl-8, .form-row .col-xl-9, .form-row .col-xs, .form-row .col-xs-1, .form-row .col-xs-10, .form-row .col-xs-11, .form-row .col-xs-12, .form-row .col-xs-2, .form-row .col-xs-3, .form-row .col-xs-4, .form-row .col-xs-5, .form-row .col-xs-6, .form-row .col-xs-7, .form-row .col-xs-8, .form-row .col-xs-9 { padding-left: 0 } +.form-row .form-control { float: left; } +.form-inline .form-row .form-control { float: none; } +.container-body > .form-group:last-child, .container-body > .form-row:last-child, .container-body > p:last-child, .container-body > .form-group:last-child > p:last-child { margin-bottom: 0 } +.form-control-name { position: relative; } +.form-control-name .form-control { padding-right: 2em } +.form-control-name .custom-control { display: block; overflow: hidden; position: absolute; z-index: 3; top: 0; right: 0; width: 2em; height: 100%; margin: 0; padding: 0; cursor: pointer } +.form-control-name .custom-control input { position: absolute; left: -100% } +.form-control-name .custom-control .fa-lock { margin-top: 0.6em; font-size: 1.5em } +.form-control-name .custom-control .fa-lock::before { content: "\f09c"; color: #ddd } +.form-control-name .custom-control input:checked ~ .fa-lock::before { content: "\f023"; color: #d9534f } +input[type=date]:not(.unstyled), input[name*=date]:not(.unstyled):not([type=checkbox]):not([type=radio]), input[name=createdon], input[name=editedon], input[size="1"], select[name=usergroup]:not(.unstyled), select[name=docgroup]:not(.unstyled) { width: auto !important; vertical-align: middle } +select[size="1"]:not(.unstyled) { vertical-align: middle } +input[name*=date]:not(.unstyled) + .input-group-addon { float: left; width: auto; } +input[size="50"], select[size="50"] { width: 10rem !important } +select[name=usergroup], select[name=docgroup] { margin: 0 0.5em; } +select[name=docgroup] + input[type=submit] { float: none; margin: 0; } +#settingsPane #filemanager_path, #settingsPane #rb_base_dir, #settingsPane input[name=txt_custom_contenttype] { border-top-right-radius: 0; border-bottom-right-radius: 0 } +#settingsPane #filemanager_path + input[name=reset_filemanager_path], #settingsPane #rb_base_dir + input[name=reset_rb_base_dir], #settingsPane input[name=txt_custom_contenttype] + input[type=button], input[name=photo] + input[type=button], #range input#pids + input[name=fsubmit], input[name="ta"].inputBox + input[type=button], input[name="ta"].inputBox + .CodeMirror + input[type=button], #documentPane input[name^=tv]:not([class*=mtv]) + input[type=button] { z-index: 5; float: right; margin-top: -2.30769em; width: auto !important; border-top-left-radius: 0; border-bottom-left-radius: 0 } +#settingsPane [name=site_name], #settingsPane [name=txt_custom_contenttype], #settingsPane [name=filemanager_path], #settingsPane [name=rb_base_dir], input[name=photo], #range input#pids, input[maxlength="350"], textarea.mce, #editorRow_TinyMCE { width: 100% !important } +#range::after { content: ""; display: table; width: 100% } +/* [ Editor ] */ +.navbar.navbar-editor { +padding: .5rem 1.25rem; border-radius: 0 } +.navbar-editor > label { margin-bottom: 0 } +.section-editor textarea { float: left; border-left: none; border-right: none; font-family: 'Inconsolata', 'Monaco', 'Consolas', 'Courier New', 'Courier', monospace; font-weight: 300; font-size: 0.875rem; } +/* [ Action Buttons ] */ +/* new style */ +#actions { background: rgba(199, 199, 199, 0.25); padding: 0.5rem; position: fixed; top: 0; right: 1rem; text-align: right; z-index: 1001; border-radius: 0 0 0.3rem 0.3rem; } +#actions .btn-group { margin: 0 } +#actions .btn-group > .btn-group { display: block } +#actions .btn-group .btn, #actions .btn-group .form-control { +font-size: .6772rem; height: 2.4em; line-height: 1.4 } +#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: none; width: 1em; font-size: 1em; text-align: center } +#actions .btn-group .btn-group #Button1 { min-width: 100%; text-align: left; float: right; } +#actions .btn-group .btn-success { box-shadow: inset 0 -2px 0 rgba(0, 0, 0, .07); } +#actions .btn-group .btn-success:hover { box-shadow: none } +#actions .btn-group .plus { z-index: 2; float: right; margin: -2.4em 0 0 0; width: 2rem; padding-left: 0; padding-right: 0; text-align: center; cursor: default; } +#actions .btn-group .plus::before { content: "\f107"; font-family: FontAwesome } +#actions .btn-group .show .plus::before { content: "\f106"; } +#actions .btn-group select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; margin: -100% 0 -2rem 0; font-size: 0.675rem; opacity: 0; visibility: hidden; } +#actions .btn-group .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 2rem; margin: 0; padding: 0; text-align: left; font-size: .6772rem; +border-top: none; border-radius: 0 0 0.1em 0.1em; overflow: hidden; } +#actions .btn-group .show > .dropdown-menu { display: block } +#actions .btn-group .dropdown-menu > span { display: block; margin: 0; text-align: left; border: none; border-top: 1px solid rgba(0, 0, 0, 0.1) } +#actions .btn-group .dropdown-menu > span:first-child { border-color: transparent } +#actions .btn-group .dropdown-menu > span:hover { background-color: #e6e6e6; } +#actions .btn-group .dropdown-toggle::after { margin: 0; border-width: 0.4em; transition-duration: 0.25s } +#actions .btn-group .show .dropdown-toggle::after { transform: rotate(180deg) } +#_actions .btn-group .input-group-btn .btn { margin-left: .1875rem } +#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: .1em } +@media (max-width: 840px) { +#actions { right: 0 } +#actions .btn-group .btn span, #actions .btn-group select#stay, #_actions .btn-group .btn span { display: none } +#actions .btn-group .btn .fa, #_actions .btn-group .btn .fa { display: inline-block } +#actions .btn-group .dropdown-menu { width: 2rem } +#actions .btn-group .dropdown-menu span { padding-left: 0; padding-right: 0; text-align: center } +#_actions .btn-group .input-group-btn .btn { margin-left: -1px } +#_actions .btn-group .form-control, #_actions .btn-group .btn { border-radius: 0 } +#_actions .btn-group .form-control:first-child { border-top-left-radius: .1em; border-bottom-left-radius: .1em; } +#_actions .btn-group .btn:last-child { border-top-right-radius: .1em; border-bottom-right-radius: .1em; } +} +/* old style */ +#actions .actionButtons { float: left; min-height: 32px } +#actions .actionButtons li { position: relative; float: left; margin-right: 3px; border: none } +#actions .actionButtons li a, #actions .actionButtons .plus { float: left; padding: 0 10px !important; height: 32px; line-height: 30px; -webkit-user-select: none; user-select: none; } +#actions .actionButtons li:last-child { margin: 0 } +#actions .actionButtons #Button1 a { width: 100%; text-align: left; } +#actions .actionButtons .plus { overflow: hidden; float: right; margin: -32px 0 0 0; width: 35px; border-radius: 0 3px 3px 0 !important; text-align: center; cursor: default; font: normal normal normal 0/30px FontAwesome } +#actions .actionButtons .plus::before { content: "\f107"; font-size: 14px } +#actions .actionButtons .show .plus::before { content: "\f106"; } +#actions .actionButtons .dropdown-menu { display: none; position: absolute; z-index: -1; left: auto; right: 0; top: 100%; width: 100%; min-width: 35px; margin: -2px 0 0; padding: 2px 0 0; text-align: left; font-size: 1em; background-color: #fff; border: 1px solid #32ab9a; border-top: none; border-radius: 0 0 3px 3px; overflow: hidden; } +#actions .actionButtons .show > .dropdown-menu { display: block } +#actions .actionButtons .dropdown-menu > span { display: block; padding: 0 10px; height: 32px; line-height: 30px; border: none; border-top: 1px solid #f2f2f2; cursor: pointer; } +#actions .actionButtons .dropdown-menu > span:hover { background-color: #fbfbfb; } +#actions .actionButtons select#stay { display: block; position: relative; z-index: -1; clear: both; width: auto; height: 0; padding: 0 10px; margin: -100% 0 -32px 0; font-size: 1em; opacity: 0; visibility: hidden; } +#actions .actionButtons #Button1 a, #actions .actionButtons .plus { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } +#actions .actionButtons #Button1 a:hover, #actions .actionButtons .plus:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } +#actions .actionButtons #Button1 a:active, #actions .actionButtons .plus:active { background: #32ab9a; border-color: #32ab9a; } +@media (max-width: 900px) { +#actions .actionButtons li a, #actions .actionButtons .dropdown-menu span { font-size: 0 } +#actions .actionButtons li a .fa, #actions .actionButtons .dropdown-menu span .fa { display: inline-block; font-size: 14px; line-height: 30px } +#actions .actionButtons .dropdown-menu { width: 35px } +#actions .actionButtons #Button1 a { margin: 0; width: auto } +#actions .actionButtons .plus { margin: 0 0 0 -2px } +#actions .actionButtons select#stay { display: none } +} +/* actionButtons in content ( old style ) */ +.actionButtons { margin: 0; padding: 0; background: none; width: auto; white-space: nowrap; } +.actionButtons li { float: left; margin: 0; padding: 0; list-style: none; } +.actionButtons li:before, .mmTagList li:before, .rTable li:before, .tab-pane ul li ul li:before, .dashboard li:before, div#idShowHideSocialBox.sectionBody > div.btn-group.ope > ul.dropdown-menu > li:before, .sectionBody .multitv .list li:before { display: none; content: ''; } +.actionButtons img { vertical-align: top; margin-top: 1px; opacity: 0.3; } +.actionButtons:hover img { opacity: 1; } +.actionButtons a:hover { border-color: #999; -webkit-box-shadow: 1px 1px 2px #aaa; box-shadow: 1px 1px 2px #aaa; -webkit-transition: .3s ease; transition: .3s ease; background: -moz-linear-gradient(#fff, #f5f5f5); background: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f5f5f5)); background: -o-linear-gradient(#fff, #f5f5f5); text-decoration: none !important; } +.actionButtons a:active { background: #92aac4 bottom left; -webkit-box-shadow: 0 0 10px #b8c7d6; box-shadow: 0 0 10px #b8c7d6; } +.actionButtons a { float: left; padding: 5px 10px; height: 32px; font-size: 13px; font-weight: 500; } +.actionButtons a, .actionButtons li.primary a, .actionButtons a.primary, .actionButtons a.default { text-shadow: none; background: #fff; color: #555; border: 1px solid #e4e4e4; border-radius: 3px; /*box-shadow: 0 0 0 1px #E4E4E4;*/ +box-shadow: none; transition: none; } +.actionButtons a:hover { background: #1377c5; box-shadow: none; border-color: #1377c5; color: #fff !important; transition: none; } +.actionButtons a:active { background-color: #3189ba; border-color: #3189ba; } +.actionButtons li.primary a, .actionButtons a.primary { color: #fff; border-color: #32ab9a; background: #32ab9a linear-gradient(#32ab9a, #00948e); } +.actionButtons li.primary a:hover, .actionButtons a.primary:hover { background: #2b9385 linear-gradient(#2b9385, #007571); border-color: #2b9385; } +.actionButtons li.primary a:active, .actionButtons a.primary:active { background: #32ab9a; border-color: #32ab9a; } +.actionButtons img { display: none; } +#treePane .actionButtons img { display: inline; } +.actionButtons--tableheader .fa { font-size: 14px; } +.sectionBody .actionButtons { padding-top: 0; min-height: 40px; } +.sectionBody .actionButtons li { margin-right: 10px; } +.sectionBody .actionButtons a { display: inline-block; padding: 9px 10px; line-height: 1; } +table.actionButtons { margin-top: 1rem; margin-bottom: 10px; } +table.actionButtons img { display: inline-block; } +table.actionButtons .searchtext { padding: 5px; height: 24px; width: 150px; } +.actionButtons .fa { display: none; text-align: center; font-size: 1em; line-height: 1em; width: 1.1em; vertical-align: initial } +.actionButtons .fa, .actionButtons--eit .fa { display: inline-block; } +.optionsTitle .fa { display: inline-block; } +@media (max-width: 900px) { +.actionButtons a { display: inline-block; padding: 6px 10px } +.tab-page .actionButtons a { margin-top: 0 !important } +.actionButtons a span { display: none; } +.actionButtons a .fa { display: inline-block; } +} +/* [ TABLES ] */ +/* table */ +.table th, .table td { padding: 0.15rem 0.25rem; } +/* table-data */ +.table.data { width: 100%; max-width: 100%; margin-bottom: 0; border-bottom: 1px solid #eceeef } +.table.data th, .table.data thead td { padding: 0.75rem; text-transform: uppercase; white-space: nowrap; font-size: 0.675rem; color: #777; border-bottom: 1px solid #eceeef } +.table.data td { padding: 0.55rem 0.75rem; } +.table.data td, .table.data th, .table.data thead td { vertical-align: top; border-top: 1px solid #eceeef } +.table.data td:first-child, .table.data th:first-child, .table.data.table-sm td:first-child, .table.data.table-sm th:first-child { padding-left: 1.25rem } +.table.data td:last-child, .table.data th:last-child, .table.data.table-sm td:last-child, .table.data.table-sm th:last-child { padding-right: 1.25rem } +.table.data thead { background-color: #fff; } +.table.data > tbody > tr { background-color: #f9f9f9; transition-duration: .5s } +.table.data > tbody > tr:nth-child(2n) { background-color: #fff } +.table.data > tbody > tr:hover { cursor: default; background-color: rgba(93, 109, 202, 0.16); transition-duration: .05s } +.table.data tr.unstyled:hover { background-color: inherit } +.table.data .actions { white-space: nowrap } +.table.data .actions a { color: #555 } +.table.data .actions a .fa, .table.data .actions span .fa { position: relative; margin: 0 0.375rem; font-size: 0.9rem; color: #555 } +.table.data .actions a:hover .fa { color: #000; } +.table.data .actions a:hover .fa.fa-trash { color: #d80030 } +.table.data .actions a .fa::before { position: relative; z-index: 2; } +.table.data .actions a .fa::after { content: ""; position: absolute; z-index: 1; left: 50%; top: 50%; width: 1.5rem; height: 1.5rem; margin: -0.75rem 0 0 -0.75rem; border-radius: 50%; -webkit-transition: 0.15s; transition: 0.15s; } +.table.data .actions a:hover .fa::after { background-color: #fff } +.table.data .actions .disabled { visibility: hidden } +/* table-data-nowrap */ +.table.data.nowrap th, .table.data.nowrap td { white-space: nowrap } +/* table-data-sortable */ +.table.data thead .sortable a, .table.data thead .sortable-text a { color: #777; text-decoration: none !important; } +.table.data thead .sortable a:hover, .table.data thead .sortable-text a:hover { color: #222 } +.table.data thead .sortable a::after, .table.data thead .sortable-text a::after { content: "\f107"; font-family: FontAwesome; opacity: .3; margin-left: .5em; } +.table.data thead .sortable.forwardSort a::after, .table.data thead .sortable-text.forwardSort a::after { opacity: 1; content: "\f106"; color: #d9534f } +.table.data thead .sortable.reverseSort a::after, .table.data thead .sortable-text.reverseSort a::after { opacity: 1; content: "\f107"; color: #d9534f } +.table.data thead .sortable:hover a::after, .table.data thead .sortable-text:hover a::after, .table.data thead .sortable-numeric:hover a::after, .table.data thead .sortable-date:hover a::after { opacity: 1 } +.table.data thead .sortable, .table.data thead .sortable-text, .table.data thead .sortable-numeric, .table.data thead .sortable-date { cursor: pointer } +.table.data thead .sortable-text span, .table.data thead .sortable-numeric span, .table.data thead .sortable-date span { display: none } +.table.data.table-sortable > tbody > tr { cursor: move; transition-duration: .5s } +.table.data.table-sortable > tbody > tr.ghost { background-color: rgba(93, 109, 202, 0.16); color: #d9534f !important; transition: background-color .5s, color .5s, transform 0s } +/* table-data-sm */ +.table.data.table-sm td, .table.data.table-sm th { padding: .25rem .5rem; } +.table.data.table-sm th, .table.data.table-sm thead td { font-size: 0.75rem; text-transform: none; } +/* table-data-even */ +.table.data.table-even > tbody > tr:not(:hover) { background-color: #fff } +.table.data.table-even > tbody > tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } +.table.data.table-even > tbody > tr:nth-child(2n) { background-color: #fff } +/* table-data-docs */ +.table.data .doc-item .fa { width: 1.2em; font-size: 0.9rem; text-align: center; margin-right: 0.25rem } +.table.data .doc-item { text-decoration: none } +.table.data .doc-item:hover span { text-decoration: underline } +.table.data .doc-item.private .fa::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-size: 0.75em; color: #d9534f; } +/* [ BREADCRUMBS ] */ +ul.breadcrumbs { +margin: 0 1rem .5rem; +padding: 0 0 .5rem; line-height: normal; font-size: .675rem; +color: #888; border-bottom: 1px dotted #cecaca; } +ul.breadcrumbs li { list-style: none; display: inline-block; padding: 0; margin: 0; } +ul.breadcrumbs a { text-decoration: none; } +ul.breadcrumbs span { display: inline-block; width: 1.25em; vertical-align: top; text-indent: -2.25em; overflow: hidden; } +ul.breadcrumbs span::after { margin-left: 2em; font-family: FontAwesome; content: "\f105" } +/* [ PAGINATION ] */ +#pagination { padding: 0 1.25rem; margin: .5rem 0 0; } +#pagination ul { +margin: 0 0 0 .5rem; display: inline-block; } +#pagination li { list-style: none; display: inline-block; margin: 0 0 0 1px; } +#pagination li a { display: inline-block; padding: 0 .5rem; +line-height: 1.7; border: 1px solid #ddd; text-decoration: none; color: #333; } +#pagination li.currentPage a, #pagination li a:hover { color: #555; border: 1px solid #555; } +/* [ SEARCHBAR ] */ +.searchbar input[type=text] { max-width: 10rem } +/* [ WIDGETS ] */ +.widgets .card { margin-bottom: 1rem; border-width: 0; border-radius: 0; background-color: #fff; -webkit-transition: box-shadow .35s; transition: box-shadow .35s; box-shadow: 0 0.1rem 0.3rem 0 rgba(0, 0, 0, 0.075); } +.widgets .card:hover { box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.07); } +.widgets .card-header { padding: .5rem 1rem; font-size: .9rem; color: #616a73; font-weight: 700; border-radius: 0; border: none; border-bottom: 1px solid rgba(0, 0, 0, .05); text-transform: none; background-color: transparent; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } +.widgets .card-header .fa { font-size: .9rem } +.widgets .card-block { padding: 0; } +.widgets .card-block .card-block p { padding: 0 1rem } +.widgets .card-block .card-body { padding: 1rem; } +.widgets .card-block .card-body + .card-body { padding-top: 0 } +.widgets .table { margin-bottom: 0rem } +.widgets .table:not(.data) tr th, .widgets .table:not(.data) tr td { padding: .15rem; } +.widgets .table tr th:first-child, .widgets .table tr td:first-child { padding-left: 1rem !important } +.widgets .table tr th:last-child, .widgets .table tr td:last-child { padding-right: 1rem !important } +.widgets .table .actions a .fa { margin: 0 .05rem; } +/* widgets custom */ +.widgets #welcome .wm_buttons { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-bottom: 1rem; padding: 0; text-align: center; border-bottom: 1px solid rgba(0, 0, 0, .05); } +.widgets #welcome .wm_button { max-width: 50%; flex: 0 0 50%; } +.widgets #welcome .wm_button a { display: block; height: 100%; padding: 1rem 1rem .5rem; +text-decoration: none; color: #646b7b; box-shadow: none; transition-duration: .5s } +.widgets #welcome .wm_button a:hover { color: #373b46; background-color: rgba(93, 109, 202, 0.16) } +.widgets #welcome .wm_button a .fa { display: inline-block; } +.widgets #welcome .wm_button a .fa + span { display: block; padding: .5em 0; line-height: 1em; font-size: .7rem; } +.widgets #modxrecent_widget .table.data tbody tr:not(:hover) { background-color: #fff } +.widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { background-color: #f6f8f8 } +.widgets #modxrecent_widget .table.data tbody tr:nth-child(2n) { background-color: #fff } +@media (min-width: 568px) { +.widgets #welcome .wm_button { max-width: 25%; flex: 0 0 25%; } +} +@media (min-width: 768px) { +.widgets #welcome .wm_button { max-width: 12.5%; flex: 0 0 12.5%; } +} +@media (min-width: 992px) { +.widgets #welcome .wm_button { max-width: 25%; flex: 0 0 25%; } +} +@media (min-width: 1400px) { +.widgets #welcome .wm_button { max-width: 12.5%; flex: 0 0 12.5%; } +} +/* [ DATEPICKER ] */ +.dp_container { position: absolute; z-index: 500; } +.dp_cal { overflow: hidden; width: 220px; margin: 0.25rem 0; background-color: #fff; -webkit-box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3); } +.dp_cal p { position: relative; margin: 10px; } +.dp_cal select { font-size: 1em; margin: 2px 3px; width: auto !important } +.dp_cal select option { padding: 1px 3px } +.dp_cal table { border-collapse: collapse; border-spacing: 0; width: 100% } +.dp_cal td.dp_roll { background-color: rgba(0, 0, 0, 0.1); color: #333 !important } +.dp_cal th, .dp_cal td { font-size: 1em; padding: 0.5em 0 !important; text-align: center !important; width: 14.2857%; cursor: default } +.dp_cal tbody th { background-color: #656d79; color: #fff; } +.dp_cal tbody td:nth-child(6), .dp_cal tbody td:nth-child(7) { color: indianred } +.dp_cal .dp_empty { background-color: #f9f9f9 } +.dp_cal .dp_hide { visibility: hidden } +.dp_cal .dp_today { background-color: #4caf50; color: #fff !important } +.dp_cal .dp_selected { background-color: #3189ba; color: #fff !important } +.dp_cal input { width: 68% !important } +.dp_cal button { position: absolute; top: 0; right: 0; margin: 0 !important; width: 30% !important } +/* datepicker icon clear */ +.clearDate { position: relative; margin: 0.5rem 0 0 -1.5rem; z-index: 10; } +/* [ GRID STYLE ] */ +.grid { width: 100%; background-color: #fff !important; border: 1px solid rgba(0, 0, 0, 0.1); border-collapse: collapse; } +.grid thead, .grid tfoot { background-color: #e9e9e9 } +.grid th, .grid td { padding: 0.375rem !important; border: 1px solid #ddd } +.gridHeader, .grid th { color: #333; font-weight: 500; white-space: nowrap; background-color: #e9e9e9; text-align: left; } +.grid > tbody > tr:nth-child(2n) > td { background-color: rgba(0, 0, 0, 0.03) } +.gridItem { background-color: #fff; padding: 3px; } +.gridAltItem { background-color: #f7f7f7; padding: 3px; } +.grid tbody tr:hover td { background: #e9edf3; } +.grid a { text-decoration: none; } +.grid img { vertical-align: middle; padding-right: 4px; } +/* SORTABLELIST */ +ul.sortableList { margin: 0; } +ul.sortableList li { position: relative; z-index: 1; float: left; clear: both; max-width: 100%; width: 30rem; list-style: none; font-weight: bold; cursor: move; padding: 0.46153846em 1em; margin: .0625rem 0; +border: 1px solid #ccc; line-height: 1.23076923; background-color: #fff; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); box-shadow: none; transition: color .3s, box-shadow .3s, transform .3s, z-index .3s step-end; } +ul.sortableList li.ghost { z-index: 2; box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0, 0.15); transition: color .3s, box-shadow .3s, transform 0s, z-index 0s; } +/* [ TOOLTIPS ] */ +.evo-tooltip, .custom-tip { position: fixed; z-index: 13000; width: 13rem; margin: 1rem; padding: 0.9rem 1rem; font-size: 0.75rem; line-height: 1.5; font-family: sans-serif; text-align: left; color: #333; background-color: #fff; visibility: hidden; transition-duration: .3s; transform: translate3d(1rem, 0, 0); -webkit-box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.15); } +.evo-tooltip { opacity: 0; content: attr(data-tooltip); } +.evo-tooltip.show { opacity: 1; visibility: visible; transform: translate3d(0, 0, 0); } +[data-tooltip] { cursor: help } +[data-tooltip].fa-question-circle { opacity: 0.15; } +[data-tooltip].fa-question-circle:hover { opacity: 1; } +/* [ FILES MANAGER ] */ +#ManageFiles { padding-bottom: 1rem; } +#ManageFiles .breadcrumbs { } +#ManageFiles .breadcrumbs a, #ManageFiles .breadcrumbs span { display: inline-block; padding: 0 0.25em; } +#ManageFiles #imageviewer { text-align: center; } +#ManageFiles #imageviewer img { display: inline-block; max-width: 100%; margin-top: 1rem } +#FilesTable { margin-bottom: 1rem; border-bottom: 1px solid #ddd; } +#file_editfile.section .sectionHeader { margin: 0; padding: 0.5rem 1rem; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } +#file_editfile.section .sectionBody { margin: 0 !important; padding: 0 0 1rem; border: none; border-bottom: 1px solid #ddd; background-color: #f9f9f9 } +#file_editfile td { padding: 0 !important; } +#file_editfile #content { float: left; width: 100%; min-height: 25rem; border: none; border-bottom: 1px solid rgba(0, 0, 0, .15) } +/* STYLES FOR PAGE HELP */ +#helpPane h1 { margin-bottom: 1em; padding: .5rem; +font-size: .8rem; +border-bottom: 1px solid #e0e0e0; } +#helpPane li:not(:first-child) > strong { margin-top: 1.4em; } +#helpPane li > strong { display: block; font-size: 14px; } +#helpPane pre { border: 1px solid rgba(0, 0, 0, 0.1); padding: 1em; } +#helpPane .tab-page > img:first-of-type { margin-bottom: 1rem; } +/* modes theme */ +/* lightness */ +/* light */ +/* dark */ +.dark .section-editor textarea { background-color: #282c34; color: #abb2bf } +.dark .tab-page, .dark .sectionBody .tab-page, .dark .tab-row .tab.selected, .dark .tab-row .tab.selected.hover, .dark .tab-row .tab.selected:before, .dark .tab-row .tab.selected span { background-color: #f9f9f9; } +.dark, .dark .resourceTable .panel-heading { background: #ecf0f1 !important; } +.dark .resourceTable .panel-heading:hover { background: #ecf0f1 !important; } +.dark .multitv .list li.element a.copy, .multitv .list li.element a.remove { background: transparent !important; } +.dark .multitv .list li.element { background: #fefefe !important; } +.dark .split { border-color: rgba(0, 0, 0, .05) } +.dark hr { background: transparent; } +/*.dark .content-blocks .block { background: #fefefe; border: 1px solid #e3e3e3; } +.dark .content-blocks .block .fields-group { border: 1px dashed #e2e2e2; }*/ +.dark .content-blocks input[type="text"], .dark .content-blocks input[type="password"], .dark .content-blocks input[type="number"], .dark .content-blocks textarea { background-color: #fbfbfb !important; border-color: #dbdbdb !important; } +.dark .content-blocks .controls { background: #f9f9f9 !important; } +.dark .widgets .card-header { color: #616a73; background-color: #fafafa; } +/* darkness */ +.darkness { background-color: #282c34; color: #aaa } +.darkness .container-body { background-color: #282c34; } +.darkness > .container-body, .darkness .page { background-color: #282c34; } +.darkness .sectionBody .tab-page, .darkness .tab-page { background-color: #282c34; box-shadow: none; } +.darkness .widgets .card, .darkness h1, .darkness .element-edit-message, .darkness #ManageFiles .breadcrumbs { background-color: #202329; } +.darkness #edit-info.element-edit-message, .darkness #add-info.element-edit-message, .darkness #sort-info.element-edit-message, .darkness #categorize-info.element-edit-message { background-color: #282c34; } +.darkness .msg-container { border-bottom: 1px solid #414449; } +.darkness .widgets #welcome .wm_button a { color: #aaa; } +.darkness .widgets #welcome .wm_button a:hover { background-color: rgba(255, 255, 255, 0.08); color: #e8e8e8; } +.darkness .widgets .card-header { color: #b0b0b1; border-bottom: 1px solid #2b2e34; } +.darkness #news .card-block ul li, .darkness #security .card-block ul li { border-bottom: 1px solid #2b2e34; } +.darkness #news .card-block ul li:last-child, .darkness #security .card-block ul li:last-child, .darkness table.table.table--edit > tbody > tr > td { border: none } +.darkness .multitv .list li.element { background: #282c34 !important; border-color: #414449; } +.darkness .multitv .list li.element input[type="text"], .darkness .multitv .list li.element input[type="password"], .darkness .multitv .list li.element input[type="number"], .darkness .multitv .list li.element textarea { background-color: #202329 !important; border-color: #414449 !important; } +.darkness #displayparams { width: calc(100% + 2.5rem); max-width: calc(100% + 2.5rem); margin: 0 -1.25rem !important; } +.darkness #content_body { margin: 0 -1.5rem; } +.darkness .card .table.data, .darkness .table td[style="background-color:#ffffff;"] { background: #202329 !important; } +.darkness .table.data, .darkness .grid { background: #282c34 !important; border: none !important } +.darkness .table.data thead, .darkness .grid thead, .darkness #editorRow_TinyMCE { background: none } +.darkness .table.data thead th, .darkness .table.data thead td, .darkness .grid th, .darkness .grid thead td { padding: 0.75rem !important; background-color: #202329; border: none; border-bottom: 1px solid #1f5994; color: #777; text-transform: uppercase; font-size: 0.675rem; } +.darkness .table.data thead .sortable a, .darkness .table.data thead .sortable-text a, .darkness .sortabletable th a { color: #777; } +.darkness .table th a:hover, .darkness .table thead td a:hover, .darkness .grid th a:hover, .darkness .grid thead td a:hover, .darkness .table .sortable:hover a, .darkness .table .sortable-text:hover a { color: #eee !important; } +.darkness .table.data thead .sortable a::after, .darkness .table.data thead .sortable-text a::after { opacity: 1; } +.darkness .sortabletable thead tr, .darkness .sortabletable th:active { background-color: #202329 } +.darkness .table tbody tr, .darkness .grid tbody tr, .darkness table.table.table--edit > tbody > tr { background: none !important; } +.darkness .table > tbody > tr > td, .darkness .grid > tbody > tr > td { background: none; border: none !important; border-bottom: 1px solid #2b2e34 !important; color: inherit; } +.darkness .table > tbody > tr:nth-child(2n), .darkness .grid > tbody > tr:nth-child(2n) { background-color: #252930 !important; } +.darkness .table.data tr > td:first-child, .darkness .table.data tr > th:first-child, .darkness .grid tr > td:first-child, .darkness .grid > tr > th:first-child { padding-left: 1.25rem !important; } +.darkness .table.data tr > td:last-child, .darkness .table.data tr > th:last-child, .darkness .grid tr > td:last-child, .darkness .grid > tr > th:last-child { padding-right: 1.25rem !important; } +.darkness table.table.table--edit > tbody > tr > th, .darkness table.table.table--edit > tbody > tr > td, .darkness form[name="settings"] table > tbody td, .darkness form[name="settings"] table > tbody th { +padding: .25rem .5rem; background: none; border: none !important; color: inherit; } +.darkness .table.data .actions a, .darkness .table.data .actions a .fa, .darkness .table.data .actions span .fa { color: inherit; } +.darkness .table.data .actions a:hover .fa::before { color: #eee; } +.darkness .table.data .actions a:hover .fa::after { background-color: #3b414e; } +.darkness .table.data .actions a:hover .fa.fa-trash::before { color: #d80030; } +.darkness table .split, .darkness #editorRow_TinyMCE tr, .darkness table.table.table--edit > tbody > tr, .darkness .sysSettings > tbody > tr { border: none; border-bottom: 1px solid #23262b !important; } +.darkness table .split { margin: 0 -.5rem; } +.darkness table tr.noborder { border: none !important; } +.darkness table .comment { color: #999 !important; } +.darkness #editorRow_TinyMCE > tbody > tr:first-child > th { background: none !important; color: inherit !important; } +.darkness .section-editor, .darkness #content_body { border-top: 1px solid #414449; } +.darkness #file_editfile .navbar-editor, .darkness #file_editfile [name="editFile"], .darkness #content_body, .darkness .section-editor { border-bottom: 1px solid #414449; } +.darkness .section-editor > textarea, .darkness #content_body > div > textarea, .darkness #content_body > .section-editor { margin-top: 0 } +.darkness #content_body textarea, .darkness .section-editor textarea, .darkness #content_body > .section-editor { display: block; border: none } +.darkness ul.sortableList li { background-color: #202329; border: 1px solid #414449; } +.darkness ul.sortableList li:hover { border-color: #5d5d5d; } +.darkness ul.sortableList li.ghost { background-color: #282c34; border-color: #1976d2; } +.darkness .disabledPlugin, .darkness .disabledPlugin a { color: #de6961; } +.darkness .alert { box-shadow: 0 0.25rem 2rem rgba(0, 0, 0, 0.15); } +.darkness .alert-danger { background-color: #612329; border-color: #612329; color: #da706d; } +.darkness .alert-danger b { color: #f7e6e8 !important } +.darkness .alert-info { background-color: #193048; border-color: #193048; color: #a3b3bd; } +.darkness .alert-warning { background-color: #6c591d; border-color: #6c591d; color: #c7bd9e; } +.darkness .alert-success { background-color: #3d7544; border-color: #3d7544; color: #c4efc5; } +.darkness .loginbox, .darkness .loginbox form { background-color: #202329 } +.darkness #mainloader { background-color: transparent !important; } +.darkness #FilesTable { border-bottom: 1px solid #202329 } +.darkness #mce-modal-block { background-color: #000; } +.darkness .resourceTable .panel-heading { margin-top: -1px !important; background-color: #202329; border-top: 1px solid #414449; border-bottom: 1px solid #414449; } +.darkness .panel-title > a { color: #aaa; } +.darkness .panel-title > a:hover { background: #202329; color: #eee; } +.darkness .resourceTable ul.elements > li { border-left: 3px solid transparent; border-bottom: 1px solid #303338; } +.darkness .resourceTable ul.elements > li:hover { background-color: #202329; } +.darkness .elements_descr { color: #aaa; } +.darkness ul.elements_buttonbar li a, .darkness .msg-container { color: inherit; } +.darkness .evo-tooltip, .darkness .custom-tip { background-color: #343942; color: #eee; box-shadow: 0 0.5rem 3rem rgba(0, 0, 0, 0.4); } +.darkness div#section-body-categories div.uncategorized_elements, .darkness div#section-body-categories div.drop { border: 1px solid #414449; background-color: #202329; } +.darkness div#section-body-categories div.uncategorized_elements h2, .darkness div#section-body-categories div.drop h2 { color: #1976d2; border-bottom: 1px solid #1976d2; } +.darkness div#section-body-categories div.drag { background-color: #1976d2; } +.darkness #helpPane h1 { border-bottom: 1px solid #414449; } +.darkness #helpPane ul + h1 { margin-top: 1rem; } +.darkness #helpPane ul { margin: 0; } +.darkness #helpPane .tab-page > img:first-of-type { content: url("../images/misc/logo-navbar-white.png"); } +.darkness pre, .darkness #helpPane pre { border: 1px solid #414449; padding: 1em; color: #aaa; } +.darkness code { background-color: #202329; border: 1px solid #414449; } +.darkness .h, .darkness .e, .darkness .v { background-color: #202329; border-color: #414449; color: #eee; } +.darkness .v { background-color: #282c34; } +.darkness tr:hover .e { background-color: #282c33; } +.darkness tr:hover .v { background-color: #2b3038; } +.darkness .dp_cal { box-shadow: 0 0.5rem 3rem rgba(0, 0, 0, 0.4); } +.darkness .dp_cal, .darkness .dp_cal .dp_empty { background-color: #343942; } +.darkness .dp_cal td.dp_roll { background-color: #202329; color: #aaa !important; } +.darkness .dp_cal td.dp_selected { background-color: #3189ba; color: #fff !important; } +.darkness ul.breadcrumbs a { color: #3481bc; } +.darkness #pagination li a { border: 1px solid #414449; color: #bbb; } +.darkness #pagination li.currentPage a, .darkness #pagination li a:hover { color: #eee; border: 1px solid #1976d2; } +.darkness h2[style="color:#003399"], .darkness h3[style="color:#003399"] { color: #f44336 !important; } +.darkness h3[style="color:#003399"] + div[style] { background-color: transparent !important; border-color: #f44336 !important; color: #f44336 !important; } +.darkness .mce-container, .darkness .mce-container *, .darkness .mce-widget, .darkness .mce-widget *, .darkness .mce-reset { color: #aaa; } +.darkness .mce-panel { background: #202329; border: none !important; } +.darkness .mce-reset .mce-panel { background: #1a1c21; } +.darkness .mce-btn { background-color: #202329; border-color: transparent; } +.darkness .mce-toolbar .mce-btn-group { border-color: #414449 !important; } +.darkness .mce-label { text-shadow: none; } +.darkness .mce-menu-item.mce-selected, .darkness .mce-menu-item:hover, .darkness .mce-menu-item:focus { background: #1976d2; } +.darkness .mce-menu-item.mce-selected .mce-text, .darkness .mce-menu-item.mce-selected .mce-ico, .darkness .mce-menu-item:hover .mce-text, .darkness .mce-menu-item:focus .mce-text, .darkness .mce-menu-item:hover .mce-ico, .darkness .mce-menu-item:focus .mce-ico { color: #fff; } +.darkness .mce-menu-item .mce-caret { border-left-color: #fff; } +.darkness .mce-tabs, .darkness .mce-tabs + .mce-container-body { background: #202329; } +.darkness .mce-tab { background: #202329; border-color: #414449; border-top: 1px solid transparent; text-shadow: none !important } +.darkness .mce-tab:hover { background-color: #1a1c21; } +.darkness .mce-tab:focus { color: #eee; } +.darkness .mce-tab.mce-active { border-top-color: #414449; } +.darkness .mce-tabs { border-bottom: 1px solid #414449; } +.darkness .mce-tab.mce-active { background-color: #202329; } +.darkness .mce-menu-item.mce-disabled, .darkness .mce-menu-item.mce-disabled:hover { background: #202329; } +.darkness .mce-menu-item.mce-disabled .mce-text, .darkness .mce-menu-item.mce-disabled:hover .mce-text, .darkness .mce-menu-item.mce-disabled .mce-ico, .darkness .mce-menu-item.mce-disabled:hover .mce-ico { color: #414449; } +.darkness .mce-window-head .mce-close { background-color: #6d1215 !important; } +.darkness .mce-window-head { background: #1a1c21; border: none; } +.darkness i.mce-i-checkbox, .darkness .mce-textbox, .darkness .mce-window-body .mce-btn, .darkness .mce-foot .mce-btn { background-color: #1a1c21; border: 1px solid #414449; } +.darkness .mce-btn:hover, .darkness .mce-btn:active { background: #282c34; border-color: #414449; } +.darkness .mce-btn:focus { background: #282c34; } +.darkness .mce-btn button { background-color: transparent } +.darkness .mce-splitbtn .mce-open:hover, .darkness .mce-splitbtn .mce-open:active, .darkness .mce-splitbtn:hover .mce-open, .darkness .mce-splitbtn.mce-active:hover .mce-open { border-left: 1px solid #3d4045; } +.darkness .mce-checked i.mce-i-checkbox { color: #aaa; } +.darkness .mce-textbox { font-family: monospace; } +.darkness::-webkit-scrollbar, .darkness::-webkit-scrollbar-thumb, .darkness *::-webkit-scrollbar, .darkness *::-webkit-scrollbar-thumb { width: 1rem; height: 1rem; background-color: transparent; border-radius: .5rem; border: .25rem solid transparent; } +.darkness:hover::-webkit-scrollbar-thumb, .darkness *:hover::-webkit-scrollbar-thumb { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1); } +.darkness::-webkit-scrollbar-thumb:hover, .darkness *::-webkit-scrollbar-thumb:hover { box-shadow: inset 0 0 0 1rem rgba(255, 255, 255, 0.15); } +.darkness::-webkit-resizer, .darkness *::-webkit-resizer, .darkness::-webkit-scrollbar-corner, .darkness *::-webkit-scrollbar-corner { background-color: transparent; } +/* +[ OTHERS COMPONENTS ] - this components need fix css +*/ +/* extras */ +.catalog_item select[name=link] { width: auto !important; margin-left: 0.5rem } +/* ManagerManager */ +.sectionHeader.minimizable { position: relative; z-index: 1; background-color: #fafafa; padding: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.15); } +.dark .sectionHeader.minimizable { background-color: #f2f2f2 } +.imageField { min-width: 100% !important; width: 100% !important } +ul.mmTagList { float: left; margin-top: .25rem !important +} +/* MCE */ +.mce-container, .mce-container-body { box-sizing: border-box !important } +.mce-container button { border: none; border-radius: 0; background-color: transparent; } +.mce-window-head .mce-close { padding: 0; } +#editorRow_TinyMCE { background-color: #fff; } +#editorRow_TinyMCE tr { border: 1px dotted rgba(0, 0, 0, .05); } +#editorRow_TinyMCE th { white-space: nowrap } +#editorRow_TinyMCE th, #editorRow_TinyMCE td { padding: 0.5em; border: none !important } +/* wrap TinyMCE3 toolbar */ +.mceEditor .mceToolbar td { height: 24px; float: left } +/* codeMirror */ +.CodeMirror { width: 100%; margin: 0 !important; } +.CodeMirror pre { word-break: break-all !important; } +.CodeMirror > div:first-child > textarea { /*opacity: 0;*/ +z-index: -1; left: -9999rem; } +div.CodeMirror-cursors { pointer-events: none; } +/* docFinder */ +form#docfinder div.tab-page { height: auto !important } +/* SimpleGallery */ +#SimpleGallery .pagination { display: block } +#SimpleGallery .sg_image { width: auto } +/* multiTV */ +.multitv .list li.element a.copy, .multitv .list li.element a.remove { width: 25px !important; text-align: center; background: transparent !important; top: -10px !important; } +.multitv .list li.element { +border-radius: .25rem; border: 1px solid rgba(0, 0, 0, .125); background: #fefefe !important; margin-bottom: 10px !important; } +/* loginbox animation */ +@keyframes anim-loginbox { +from { opacity: 0; transform: translateY(30px); } +to { opacity: 1; transform: translateY(0); } +} +@-webkit-keyframes anim-loginbox { +from { opacity: 0; transform: translateY(30px); } +to { opacity: 1; transform: translateY(0); } +} +.loginbox { -webkit-animation-name: anim-loginbox; -webkit-animation-duration: .5s; -webkit-animation-iteration-count: 1; -webkit-animation-timing-function: ease; -webkit-animation-fill-mode: forwards; -moz-animation-name: anim-loginbox; -moz-animation-duration: .5s; -moz-animation-iteration-count: 1; -moz-animation-timing-function: ease; -moz-animation-fill-mode: forwards; animation-name: anim-loginbox; animation-duration: .5s; animation-iteration-count: 1; animation-timing-function: ease; animation-fill-mode: forwards; } +/* end loginbox animation */ +#actions .dropdown-toggle:after { display: none !important; } +.card .table.data { margin-bottom: 0; border-bottom-width: 0; } +.table.data th, .table.data thead td { border-bottom-width: 1px; } +.card .table.data > thead > tr:first-child td, .card .table.data > thead > tr:first-child th, .card .table.data > tbody > tr:first-child td, .card .table.data > tbody > tr:first-child th { border-top-width: 0; } +.table.data > tbody > tr, .table.data > tbody > tr:nth-child(2n), .widgets #modxrecent_widget .table.data tbody tr:nth-child(4n+1):not(:hover) { background-color: #fff; } +.table.data > tbody > tr:hover { background-color: rgba(0, 0, 0, 0.03) !important; } +ul.breadcrumbs { margin: 0 0 1rem 0; padding: .5rem 0.8rem; line-height: normal; font-size: .675rem; color: #888; border-width: 0; background-image: linear-gradient(to right, rgba(0, 0, 0, 0.04), transparent 60%); } +ul.breadcrumbs a { color: #333; } +#settingsPane [name="site_name"], #settingsPane [name="emailsender"], #settingsPane [name="emailsubject"], #settingsPane [name="datepicker_offset"], #settingsPane [name="editor_css_path"], #settingsPane [name="safe_functions_at_eval"], #settingsPane [name="valid_hostnames"], #settingsPane [name="upload_files"], #settingsPane [name="upload_images"], #settingsPane [name="upload_media"], #settingsPane [name="upload_flash"], #settingsPane [name="txt_custom_contenttype"], #settingsPane [name="filemanager_path"], #settingsPane [name="rb_base_url"], #settingsPane [name="rb_base_dir"], #settingsPane [name="thumbsDir"], input[name="photo"], #range input#pids, input[maxlength="350"], textarea.mce, #editorRow_TinyMCE { width: 100% !important; } +#news .card-block > div, #security .card-block > div { padding: 0 !important; } +#news .card-block ul, #security .card-block ul { padding: 0; margin: 0; } +#news .card-block ul li, #security .card-block ul li { padding: 0.75rem 1rem; border-bottom: 1px solid #ebebeb; } +ul.mmTagList li { padding: 2px 8px !important; margin-bottom: 5px !important; border-radius: 3px !important; -webkit-border-radius: 3px !important; background-color: #eaeaea !important; text-decoration: none !important; } +ul.mmTagList li.tagSelected { border-radius: 3px !important; -webkit-border-radius: 3px !important; background-color: #5a5e63 !important; } diff --git a/manager/media/style/default/css/fonts.css b/manager/media/style/default/css/fonts.css index 460ad792..f083024d 100755 --- a/manager/media/style/default/css/fonts.css +++ b/manager/media/style/default/css/fonts.css @@ -1,104 +1,112 @@ -html { font-size: 16px } -@media (max-width: 900px) { -html { font-size: 16px; } -} -@media (max-width: 400px) { -html { font-size: 16px; } -} -body { font-weight: normal; font-style: normal; font-size: 0.8125rem; line-height: 1.5; font-family: sans-serif; -webkit-font-smoothing: subpixel-antialiased } -/* For Arabic Font */ -html[lang="ar"] body, html[lang="ary"] body, html[lang="azb"] body, html[lang="fa-IR"] body, html[lang="haz"] body, html[lang="ps"] body, html[lang="ur"] body { font-family: Tahoma, Arial, sans-serif; } -/* For Chinese Font */ -html[lang="zh"] body { font-family: "PingFang SC", "Microsoft JhengHei", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC", Helvetica, sans-serif; } -/* For Devanagari Font */ -html[lang="bn-BD"] body, html[lang="hi-IN"] body, html[lang="mr-IN"] body { font-family: Arial, sans-serif; } -/* For Greek Font */ -html[lang="el"] body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } -/* For Gujarati Font */ -html[lang="gu-IN"] body { font-family: Arial, sans-serif; } -/* For Hebrew Font */ -html[lang="he"] body { font-family: "Arial Hebrew", Arial, sans-serif; } -/* For Japanese Font */ -html[lang="ja"] body { font-family: Meiryo, "Hiragino Kaku Gothic Pro", sans-serif; } -/* For Korean font */ -html[lang="ko-KR"] body { font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; } -/* For Thai Font */ -html[lang="th"] body { font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; } -/* For Arabic Font */ -html[lang="fa"] body { font-family: Tahoma, Arial, sans-serif; } -body { background-color: #fafafa; color: #444; } -body.drag *, body.drag::after { cursor: grabbing !important; cursor: -moz-grabbing !important; cursor: -webkit-grabbing !important; cursor: -moz-grab !important; -moz-user-select: none !important; -webkit-user-select: none !important; user-select: none !important } -body.drag::after { bottom: 0; content: ""; left: 0; position: fixed; right: 0; top: 0; z-index: 999 } -body, ul, li { padding: 0; margin: 0; } -ul { margin-left: 1rem; margin-right: 1rem; } -li { list-style: none } -img { max-width: 100%; height: auto } -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { margin-bottom: .5rem; font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit } -.h1, h1 { font-size: 1.75rem } -.h2, h2 { font-size: 1.5rem } -.h3, h3 { font-size: 1.25rem } -.h4, h4 { font-size: 1rem } -.h5, h5 { font-size: 0.8125rem } -.h6, h6 { font-size: 0.7rem } -h1 .fa {display: none;} -a { color: #3481bc; text-decoration: none } -.text-primary {color: #3481bc !important;} -a:focus, a:hover { color: #014c8c; text-decoration: underline } -a[href=""], a:not([href]) { cursor: default } -a:not([href]):not([tabindex]) { color: inherit; text-decoration: none } -a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { color: inherit; text-decoration: none } -a:not([href]):not([tabindex]):focus { outline: 0 } -* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box } -*::-ms-clear { display: none; } -.text-justify { text-align: justify !important } -.text-nowrap { white-space: nowrap !important } -.text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap } -.text-left { text-align: left !important } -.text-right { text-align: right !important } -.text-center { text-align: center !important } -.text-lowercase { text-transform: lowercase !important } -.text-uppercase { text-transform: uppercase !important } -.text-capitalize { text-transform: capitalize !important } -.font-weight-normal { font-weight: 400 } -.font-weight-bold { font-weight: 700 } -.font-italic { font-style: italic } -.text-white { color: #fff !important } -.text-muted { color: #818a91 !important } -.text-decoration-through { text-decoration: line-through !important } -.text-underline { text-decoration: underline !important } -a.text-underline:hover { text-decoration: none !important } -a.text-muted:focus, a.text-muted:hover { color: #4b5257 !important } -.text-primary { color: #0275d8 !important } -a.text-primary:focus, a.text-primary:hover { color: #025aa5 !important } -.text-success { color: #5cb85c !important } -a.text-success:focus, a.text-success:hover { color: #449d44 !important } -.text-info { color: #5bc0de !important } -a.text-info:focus, a.text-info:hover { color: #31b0d5 !important } -.text-warning { color: #f0ad4e !important } -a.text-warning:focus, a.text-warning:hover { color: #ec971f !important } -.text-danger { color: #d9534f !important } -a.text-danger:focus, a.text-danger:hover { color: #c9302c !important } -.text-gray-dark { color: #292b2c !important } -a.text-gray-dark:focus, a.text-gray-dark:hover { color: #101112 !important } -.text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0 } -.hide { display: none !important } -.show { display: block !important } -.visible { visibility: visible !important; } -.invisible { visibility: hidden !important; } -.clear { clear: both; } -/* custom */ -#loadingmask { display: none !important; } -.fa > .fa-lock { position: relative; float: left; width: auto !important; margin-top: -1em; font-size: 0.7em !important; color: #FFC107 !important; -webkit-text-stroke: 1px rgba(0, 0, 0, 0.39); text-stroke: 1px rgba(0, 0, 0, 0.39); } -.rotate180 { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); } -.disabledPlugin, .disabledPlugin a { color: #B68282; font-style: italic; } -h1 { font-size: 1.5em; line-height: 1.5rem; padding: 0.8rem; margin: 0; } -h1 .fa { margin-right: 0.25em; color: #1377c5; } -h1 .help { margin: 0 0 0 0.25em; color: rgba(0, 0, 0, 0.15); font-size: 0.8em; cursor: pointer } -h1 .help:hover { color: rgba(0, 0, 0, 0.3); } -h1 small { margin-left: 0.5em; line-height: 1em } -.split { height: 0; font-size: 0; clear: both; padding: 0; border-top: 1px dotted rgba(0, 0, 0, .1) } -#previewIframe { width: 100%; height: 400px; } -.messageRead { color: #333; } -.messageUnread { color: #3CB371; font-weight: 500; } -.element-edit-message { display: none } -.element-edit-message p:last-child, .element-edit-message-tab p:last-child { margin-bottom: 0 } +html { font-size: 16px } +@media (max-width: 900px) { +html { font-size: 16px; } +} +@media (max-width: 400px) { +html { font-size: 16px; } +} +@supports (-webkit-overflow-scrolling: touch) { +html, body { -webkit-overflow-scrolling: touch; overflow: auto; height: 100%; /* ios iframe scroll jumping to top fix */ } +} +body { font-weight: normal; font-style: normal; font-size: 0.8125rem; line-height: 1.5; font-family: sans-serif; -webkit-font-smoothing: subpixel-antialiased } +/* For Arabic Font */ +html[lang="ar"] body, html[lang="ary"] body, html[lang="azb"] body, html[lang="fa-IR"] body, html[lang="haz"] body, html[lang="ps"] body, html[lang="ur"] body { font-family: Tahoma, Arial, sans-serif; } +/* For Chinese Font */ +html[lang="zh"] body { font-family: "PingFang SC", "Microsoft JhengHei", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC", Helvetica, sans-serif; } +/* For Devanagari Font */ +html[lang="bn-BD"] body, html[lang="hi-IN"] body, html[lang="mr-IN"] body { font-family: Arial, sans-serif; } +/* For Greek Font */ +html[lang="el"] body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } +/* For Gujarati Font */ +html[lang="gu-IN"] body { font-family: Arial, sans-serif; } +/* For Hebrew Font */ +html[lang="he"] body { font-family: "Arial Hebrew", Arial, sans-serif; } +/* For Japanese Font */ +html[lang="ja"] body { font-family: Meiryo, "Hiragino Kaku Gothic Pro", sans-serif; } +/* For Korean font */ +html[lang="ko-KR"] body { font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; } +/* For Thai Font */ +html[lang="th"] body { font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; } +/* For Arabic Font */ +html[lang="fa"] body { font-family: Tahoma, Arial, sans-serif; } +body { background-color: #fafafa; color: #444; } +body.drag *, body.drag::after { cursor: grabbing !important; cursor: -moz-grabbing !important; cursor: -webkit-grabbing !important; cursor: -moz-grab !important; -moz-user-select: none !important; -webkit-user-select: none !important; user-select: none !important } +body.drag::after { bottom: 0; content: ""; left: 0; position: fixed; right: 0; top: 0; z-index: 999 } +body, ul, li { padding: 0; margin: 0; } +ul { margin-left: 1rem; margin-right: 1rem; } +li { list-style: none } +img { max-width: 100%; height: auto } +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { +margin-bottom: .5rem; font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit } +.h1, h1 { font-size: 1.75rem } +.h2, h2 { font-size: 1.5rem } +.h3, h3 { font-size: 1.25rem } +.h4, h4 { font-size: 1rem } +.h5, h5 { font-size: 0.8125rem } +.h6, h6 { font-size: 0.7rem } +h1 .fa:first-child { color:#444; margin-right: 0.5em } +a { color: #3481bc; text-decoration: none } +.text-primary { color: #3481bc !important; } +a:focus, a:hover { color: #014c8c; text-decoration: underline } +a[href=""], a:not([href]) { cursor: default } +a:not([href]):not([tabindex]) { color: inherit; text-decoration: none } +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { color: inherit; text-decoration: none } +a:not([href]):not([tabindex]):focus { outline: 0 } +* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box } +*::-ms-clear { display: none; } +.text-justify { text-align: justify !important } +.text-nowrap { white-space: nowrap !important } +.text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap } +.text-left { text-align: left !important } +.text-right { text-align: right !important } +.text-center { text-align: center !important } +.text-lowercase { text-transform: lowercase !important } +.text-uppercase { text-transform: uppercase !important } +.text-capitalize { text-transform: capitalize !important } +.font-weight-normal { font-weight: 400 } +.font-weight-bold { font-weight: 700 } +.font-italic { font-style: italic } +.text-white { color: #fff !important } +.text-muted { color: #818a91 !important } +.text-decoration-through { text-decoration: line-through !important } +.text-underline { text-decoration: underline !important } +a.text-underline:hover { text-decoration: none !important } +a.text-muted:focus, a.text-muted:hover { color: #4b5257 !important } +.text-primary { color: #0275d8 !important } +a.text-primary:focus, a.text-primary:hover { color: #025aa5 !important } +.text-success { color: #5cb85c !important } +a.text-success:focus, a.text-success:hover { color: #449d44 !important } +.text-info { color: #5bc0de !important } +a.text-info:focus, a.text-info:hover { color: #31b0d5 !important } +.text-warning { color: #f0ad4e !important } +a.text-warning:focus, a.text-warning:hover { color: #ec971f !important } +.text-danger { color: #d9534f !important } +a.text-danger:focus, a.text-danger:hover { color: #c9302c !important } +.text-gray-dark { color: #292b2c !important } +a.text-gray-dark:focus, a.text-gray-dark:hover { color: #101112 !important } +.text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0 } +.hide { display: none !important } +.show { display: block !important } +.visible { visibility: visible !important; } +.invisible { visibility: hidden !important; } +.clear { clear: both; } +/* custom */ +#loadingmask { display: none !important; } +.fa > .fa-lock { position: relative; float: left; width: auto !important; margin-top: -1em; font-size: 0.7em !important; color: #ffc107 !important; -webkit-text-stroke: 1px rgba(0, 0, 0, 0.39); text-stroke: 1px rgba(0, 0, 0, 0.39); } +.rotate180 { -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); transform: rotate(180deg); } +.disabledPlugin, .disabledPlugin a { color: #b68282; font-style: italic; } +h1 { font-size: 1.5em; line-height: 1.5rem; padding: 0.8rem; margin: 0; } +h1 .fa { margin-right: 0.25em; color: #1377c5; } +h1 .help { margin: 0 0 0 0.25em; color: rgba(0, 0, 0, 0.15); font-size: 0.8em; cursor: pointer } +h1 .help:hover { color: rgba(0, 0, 0, 0.3); } +h1 small { margin-left: 0.5em; line-height: 1em } +.split { height: 0; font-size: 0; clear: both; padding: 0; border-top: 1px dotted rgba(0, 0, 0, .1) } +#previewIframe { width: 100%; height: 400px; } +.messageRead { color: #333; } +.messageUnread { color: #3cb371; font-weight: 500; } +.element-edit-message { display: none } +.element-edit-message p:last-child, .element-edit-message-tab p:last-child { margin-bottom: 0 } +/* modes theme */ +/* darkness */ +.darkness h1 .help { color: #1976d2; opacity: .5; } +.darkness h1 .help:hover { opacity: 1; } diff --git a/manager/media/style/default/css/forms.css b/manager/media/style/default/css/forms.css index d9530796..8fd4ac99 100755 --- a/manager/media/style/default/css/forms.css +++ b/manager/media/style/default/css/forms.css @@ -1,51 +1,94 @@ -/* [ FORMS ] */ -legend { font-size: 1em; } -label { cursor: pointer; display: inline-block; margin-bottom: .5em } -label:not([for]) { cursor: default } -button, input { margin: 0; padding: 0; border: none; font: inherit; line-height: normal; } -input[type=checkbox], input[type=radio] { width: 0.8125rem !important; height: 0.8125rem !important; margin-right: 0.25em; vertical-align: -0.15em; border-radius: .1rem; border: 1px solid #d4d4d4; background: #fff no-repeat 50% -1em; outline: none; transition: border-color .2s, background-position .1s; } -input[type=checkbox] { background-image: url("data:image/svg+xml;utf8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1671%20566q0%2040-28%2068l-724%20724-136%20136q-28%2028-68%2028t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28%2068-28t68%2028l294%20295%20656-657q28-28%2068-28t68%2028l136%20136q28%2028%2028%2068z%27%20fill%3D%27%23444%27/%3E%3C/svg%3E"); background-size: .875em; } -input[type=radio] { background-image: url("data:image/svg+xml;utf-8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1664%20896q0%20209-103%20385.5t-279.5%20279.5-385.5%20103-385.5-103-279.5-279.5-103-385.5%20103-385.5%20279.5-279.5%20385.5-103%20385.5%20103%20279.5%20279.5%20103%20385.5z%27%20fill%3D%27%23444%27/%3E%3C/svg%3E"); background-size: .6em; border-radius: 50% } -input[type=checkbox]:hover, input[type=radio]:hover { border-color: #bcbcbc } -input[type=checkbox]:active, input[type=radio]:active { background-color: #fafafa; } -input[type=checkbox]:focus, input[type=radio]:focus { border-color: #4d8ef9 !important; box-shadow: 0 0 0 1px rgba(77, 142, 249, 0.5) } -input[type=checkbox]:checked, input[type=radio]:checked { background-position: 50% 50% } -input[type=checkbox]:disabled { background-image: url("data:image/svg+xml;utf8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1671%20566q0%2040-28%2068l-724%20724-136%20136q-28%2028-68%2028t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28%2068-28t68%2028l294%20295%20656-657q28-28%2068-28t68%2028l136%20136q28%2028%2028%2068z%27%20fill%3D%27%23bbb%27/%3E%3C/svg%3E"); background-size: .875em; } -button, input, optgroup, select, textarea { position: relative; font-family: sans-serif; font-size: 0.8125rem; line-height: 1.23076923; margin: 0; -webkit-appearance: none; -moz-appearance: none; } -.form-control, input[type=text]:not(.form-control), input[type=password], input[type=number], input[type=email], input[type=date], input[type=url], input[type=search], select, textarea { display: inline-block; width: 100%; max-width: 100%; padding: 0.46153846em .5em; line-height: 1.23076923; vertical-align: inherit; font-size: 0.8125rem; color: #464a4c; background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #d4d4d4; border-radius: .1em; -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } -.form-control:focus, input:not([type=radio]):not([type=checkbox]):focus, select:focus, textarea:focus, .btn.focus, .btn:focus { z-index: 3; outline-offset: -1px; outline: rgba(77, 142, 249, 0.5) solid 2px; border-color: #66afe9; } -input:not([type=button]):not([type=submit]):hover:not(:focus), select:hover:not(:focus), textarea:hover:not(:focus) { border-color: #bbb; transition: border-color 0s, background-position .1s; } -.btn, button:not(.btn), input[type=button]:not(.btn), input[type=submit]:not(.btn) { display: inline-block; padding: 0.46153846em 1em; line-height: 1.23076923; vertical-align: inherit; text-align: center; text-decoration: none !important; font-size: 0.8125rem; font-weight: 400; white-space: nowrap; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; background-color: #fff; border: 1px solid #d4d4d4; border-radius: .1em; -webkit-transition: all .2s ease-in-out; -o-transition: all .2s ease-in-out; transition: all .2s ease-in-out } -select:not([size]):not([multiple]), select.form-control:not([size]):not([multiple]), select[size="1"]:not([multiple]) { height: 2.3076923em; line-height: 1.38461538 } -.form-control-sm, .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn, input.form-control-sm, .btn-group-sm > .btn, .btn-sm, .input-group-addon.form-control-sm, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .input-group-addon.btn { padding: 0.46153846em .5rem; font-size: .6772rem; border-radius: .1rem; } -.form-control-lg, .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn, input.form-control-lg, .btn-group-lg > .btn, .btn-lg, .input-group-addon.form-control-lg, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .input-group-addon.btn { padding: 0.46153846em .5rem; font-size: 1.15rem; border-radius: .1rem; } -.btn:hover, input[type=button]:not(.btn):hover, input[type=submit]:not(.btn):hover { color: #292b2c; background-color: #efefef; border-color: #c3c3c3 } -.btn:focus, input[type=button]:not(.btn):focus, input[type=submit]:not(.btn):focus { background-color: #e6e6e6; border-color: #adadad } -.btn-primary { color: #fff; background-color: #0275d8; border-color: #0275d8 } -.btn-primary:hover { color: #fff; background-color: #025aa5; border-color: #01549b } -.btn-secondary { color: #292b2c; background-color: #fff; border-color: #d4d4d4 } -.btn-secondary:hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } -.btn-success { color: #fff; background-color: #5cb85c; border-color: #56ac56 } -.btn-success:hover { color: #fff; background-color: #449d44; border-color: #419641 } -.btn-danger { color: #fff; background-color: #d9534f; border-color: #d9534f } -.btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #c12e2a } -.btn-warning { color: #fff; background-color: #f0ad4e; border-color: #f0ad4e; } -.btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #eb9316; } -.btn-info { color: #fff; background-color: #5bc0de; border-color: #5bc0de; } -.btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #2aabd2; } -.btn-default { color: #bbb; background-color: #202329; border-color: #202329 } -.btn-default:hover { color: #fff; background-color: #1a1c21; border-color: #1a1c21 } -textarea, textarea.form-control { width: 100%; line-height: 1.5; overflow: auto; resize: vertical } -select:not([size]):not([multiple]), select[size="1"] { padding-right: 2em !important; background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTc5MiAxNzkyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGQ9J00xMzk1IDczNnEwIDEzLTEwIDIzbC00NjYgNDY2cS0xMCAxMC0yMyAxMHQtMjMtMTBsLTQ2Ni00NjZxLTEwLTEwLTEwLTIzdDEwLTIzbDUwLTUwcTEwLTEwIDIzLTEwdDIzIDEwbDM5MyAzOTMgMzkzLTM5M3ExMC0xMCAyMy0xMHQyMyAxMGw1MCA1MHExMCAxMCAxMCAyM3onIGZpbGw9JyUyMzQ0NCcvPjwvc3ZnPg==") !important; background-repeat: no-repeat; background-position: right center; background-size: 2em 1.3em } -optgroup { font-style: normal; font-weight: 500; background-color: #ddd; } -optgroup option { font-weight: normal; background-color: #fff; } -input[type=color] { width: 2.308em; height: 2.308em; -webkit-appearance: menulist; -moz-appearance: menupopup } -input[type=range] { -webkit-appearance: slider-horizontal; -moz-appearance: initial; } -.input-group-addon { padding: 0.46153846em .75em; font-size: 0.8125rem; border: 1px solid rgba(0, 0, 0, .15); border-radius: .1em; } -.form-control.dropdown-item:focus, .form-control.dropdown-item:hover { background-color: inherit } -::-ms-value { border: none; margin: 0; padding: 0 0 1px; line-height: 1 } -select::-ms-expand { display: none; } -::-moz-focus-inner { border: 0; padding: 0; } -@-moz-document url-prefix() { -select:not([size]):not([multiple]) { text-indent: -2px } -} +/* [ FORMS ] */ +legend { font-size: 1em; } +label { cursor: pointer; display: inline-block; margin-bottom: .5em } +label:not([for]) { cursor: default } +button, input { margin: 0; padding: 0; border: none; font: inherit; line-height: normal; } +input[type=checkbox], input[type=radio] { width: 0.8125rem !important; height: 0.8125rem !important; margin-right: 0.25em; vertical-align: -0.15em; border-radius: .1rem; +border: 1px solid #d4d4d4; background: #fff no-repeat 50% -1em; outline: none; transition: border-color .2s, background-position .1s; } +input[type=checkbox] { background-image: url("data:image/svg+xml;utf8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1671%20566q0%2040-28%2068l-724%20724-136%20136q-28%2028-68%2028t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28%2068-28t68%2028l294%20295%20656-657q28-28%2068-28t68%2028l136%20136q28%2028%2028%2068z%27%20fill%3D%27%23444%27/%3E%3C/svg%3E"); background-size: 1em; } +input[type=radio] { background-image: url("data:image/svg+xml;utf-8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1664%20896q0%20209-103%20385.5t-279.5%20279.5-385.5%20103-385.5-103-279.5-279.5-103-385.5%20103-385.5%20279.5-279.5%20385.5-103%20385.5%20103%20279.5%20279.5%20103%20385.5z%27%20fill%3D%27%23444%27/%3E%3C/svg%3E"); background-size: .609375em; border-radius: 50% } +input[type=checkbox]:hover, input[type=radio]:hover { border-color: #bcbcbc } +input[type=checkbox]:active, input[type=radio]:active { background-color: #fafafa; } +input[type=checkbox]:focus, input[type=radio]:focus { border-color: #4d8ef9 !important; box-shadow: 0 0 0 1px rgba(77, 142, 249, 0.5) } +input[type=checkbox]:checked, input[type=radio]:checked { background-position: 50% 50% } +input[type=checkbox]:disabled { background-image: url("data:image/svg+xml;utf8,%3Csvg%20viewBox%3D%270%200%201792%201792%27%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%3E%3Cpath%20d%3D%27M1671%20566q0%2040-28%2068l-724%20724-136%20136q-28%2028-68%2028t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28%2068-28t68%2028l294%20295%20656-657q28-28%2068-28t68%2028l136%20136q28%2028%2028%2068z%27%20fill%3D%27%23bbb%27/%3E%3C/svg%3E"); background-size: .875em; } +button, input, optgroup, select, textarea { position: relative; font-family: sans-serif; font-size: 0.8125rem; line-height: 1.23076923; margin: 0; -webkit-appearance: none; -moz-appearance: none; } +.form-control, input[type=text]:not(.form-control), input[type=password], input[type=number], input[type=email], input[type=date], input[type=url], input[type=search], select, textarea { display: inline-block; width: 100%; max-width: 100%; padding: 0.46153846em .5em; line-height: 1.23076923; vertical-align: inherit; font-size: 0.8125rem; color: #464a4c; background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #d4d4d4; border-radius: .1em; -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } +.form-control:focus, input:not([type=radio]):not([type=checkbox]):focus, select:focus, textarea:focus, .btn.focus, .btn:focus { z-index: 3; outline-offset: -1px; outline: rgba(77, 142, 249, 0.5) solid 2px; border-color: #66afe9; } +input:not([type=button]):not([type=submit]):hover:not(:focus), select:hover:not(:focus), textarea:hover:not(:focus) { border-color: #bbb; transition: border-color 0s, background-position .1s; } +.btn, button:not(.btn), input[type=button]:not(.btn), input[type=submit]:not(.btn) { display: inline-block; padding: 0.46153846em 1em; line-height: 1.23076923; vertical-align: inherit; text-align: center; text-decoration: none !important; font-size: 0.8125rem; font-weight: 400; white-space: nowrap; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; background-color: #fff; border: 1px solid #d4d4d4; border-radius: .1em; -webkit-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out; -o-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out; transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out } +select:not([size]):not([multiple]), select.form-control:not([size]):not([multiple]), select[size="1"]:not([multiple]) { height: 2.3076923em; line-height: 1.38461538 } +.form-control-sm, .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn, input.form-control-sm, .btn-group-sm > .btn, .btn-sm, .input-group-addon.form-control-sm, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .input-group-addon.btn { padding: 0.46153846em .5rem; font-size: .6772rem; border-radius: .1rem; } +.form-control-lg, .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn, input.form-control-lg, .btn-group-lg > .btn, .btn-lg, .input-group-addon.form-control-lg, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .input-group-addon.btn { padding: 0.46153846em .5rem; font-size: 1.15rem; border-radius: .1rem; } +.btn:hover, input[type=button]:not(.btn):hover, input[type=submit]:not(.btn):hover { color: #292b2c; background-color: #efefef; border-color: #c3c3c3 } +.btn:focus, input[type=button]:not(.btn):focus, input[type=submit]:not(.btn):focus { background-color: #e6e6e6; border-color: #adadad } +.btn-primary { color: #fff; background-color: #0275d8; border-color: #0275d8 } +.btn-primary:hover { color: #fff; background-color: #025aa5; border-color: #01549b } +.btn-secondary { color: #292b2c; background-color: #fff; border-color: #d4d4d4 } +.btn-secondary:hover { color: #292b2c; background-color: #e6e6e6; border-color: #adadad } +.btn-success { color: #fff; background-color: #5cb85c; border-color: #56ac56 } +.btn-success:hover { color: #fff; background-color: #449d44; border-color: #419641 } +.btn-success:focus, .btn-success:focus:active { color: #fff; background-color: #398439; border-color: #2d672d } +.btn-danger { color: #fff; background-color: #d9534f; border-color: #d9534f } +.btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #c12e2a } +.btn-danger:focus, .btn-danger:focus:active { color: #fff; background-color: #ac2925; border-color: #8b211e } +.btn-warning { color: #fff; background-color: #f0ad4e; border-color: #f0ad4e; } +.btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #eb9316; } +.btn-warning:focus, .btn-warning:focus:active { color: #fff; background-color: #d58512; border-color: #b06d0f; } +.btn-info { color: #fff; background-color: #5bc0de; border-color: #5bc0de; } +.btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #2aabd2; } +.btn-info:focus, .btn-info:focus:active { color: #fff; background-color: #269abc; border-color: #1f7e9a; } +.btn-default { color: #bbb; background-color: #202329; border-color: #202329 } +.btn-default:hover { color: #fff; background-color: #1a1c21; border-color: #1a1c21 } +textarea, textarea.form-control { width: 100%; line-height: 1.5; overflow: auto; resize: vertical } +select:not([size]):not([multiple]), select[size="1"] { padding-right: 2em !important; background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTc5MiAxNzkyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGQ9J00xMzk1IDczNnEwIDEzLTEwIDIzbC00NjYgNDY2cS0xMCAxMC0yMyAxMHQtMjMtMTBsLTQ2Ni00NjZxLTEwLTEwLTEwLTIzdDEwLTIzbDUwLTUwcTEwLTEwIDIzLTEwdDIzIDEwbDM5MyAzOTMgMzkzLTM5M3ExMC0xMCAyMy0xMHQyMyAxMGw1MCA1MHExMCAxMCAxMCAyM3onIGZpbGw9JyUyMzQ0NCcvPjwvc3ZnPg==") !important; background-repeat: no-repeat; background-position: right center; background-size: 2em 1.3em } +select[size="1"]:not(.unstyled), select[name="which_editor"] { width: auto; } +optgroup { font-style: normal; font-weight: 500; background-color: #ddd; } +optgroup option { font-weight: normal; background-color: #fff; } +input[type=color] { width: 2.308em; height: 2.308em; -webkit-appearance: menulist; -moz-appearance: menupopup } +input[type=range] { -webkit-appearance: slider-horizontal; -moz-appearance: initial; } +.input-group-addon { padding: 0.46153846em .75em; font-size: 0.8125rem; border: 1px solid rgba(0, 0, 0, .15); border-radius: .1em; } +.form-control.dropdown-item:focus, .form-control.dropdown-item:hover { background-color: inherit } +::-ms-value { border: none; margin: 0; padding: 0 0 1px; line-height: 1 } +select::-ms-expand { display: none; } +::-moz-focus-inner { border: 0; padding: 0; } +@-moz-document url-prefix() { +select:not([size]):not([multiple]) { text-indent: -2px } +} +/* darkness */ +.darkness .form-control, .darkness input[type=text]:not(.form-control), .darkness input[type=password], .darkness input[type=number], .darkness input[type=email], .darkness input[type=date], .darkness input[type=url], .darkness input[type=search], .darkness select, .darkness textarea, .darkness .btn, .darkness button:not(.btn), .darkness input[type=button]:not(.btn), .darkness input[type=submit]:not(.btn), .darkness .input-group-addon { border-color: #414449; background-color: #202329; color: #bbb; } +.darkness input:not([type=button]):not([type=submit]):hover:not(:focus), .darkness select:hover:not(:focus), .darkness textarea:hover:not(:focus) { border-color: #5d5d5d } +.darkness .btn:hover, .darkness input[type=button]:not(.btn):hover, .darkness input[type=submit]:not(.btn):hover, .darkness .input-group-addon:hover { border-color: #414449; background-color: #282c34; color: #eee; } +.darkness .btn-primary { color: #fff; background-color: #0275d8; border-color: #0275d8 } +.darkness .btn-primary:hover { color: #fff; background-color: #025aa5; border-color: #01549b } +.darkness .btn-secondary.active.focus, .darkness .btn-secondary.active:focus, .darkness .btn-secondary.active:hover, .darkness .btn-secondary:active.focus, .darkness .btn-secondary:active:focus, .darkness .btn-secondary:active:hover, .darkness .open > .btn-secondary.dropdown-toggle.focus, .darkness .open > .btn-secondary.dropdown-toggle:focus, .darkness .open > .btn-secondary.dropdown-toggle:hover, .darkness .btn-secondary.focus, .darkness .btn-secondary:focus { border-color: #414449; background-color: #1a1c21; color: #eee; } +.darkness .btn-success { color: #fff; background-color: #428743; border-color: #479048; } +.darkness .btn-success.active, .darkness .btn-success:active, .darkness .open > .btn-success.dropdown-toggle { color: #fff; border-color: #419641; background: #448546 none; } +.darkness .btn-success:hover { color: #fff; background-color: #39773a; border-color: #39773a; } +.darkness .btn-danger { color: #fff; background-color: #d9534f; border-color: #d9534f } +.darkness .btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #c12e2a } +.darkness .btn-warning { color: #fff; background-color: #f0ad4e; border-color: #f0ad4e; } +.darkness .btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #eb9316; } +.darkness .btn-info { color: #fff; background-color: #5bc0de; border-color: #5bc0de; } +.darkness .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #2aabd2; } +.darkness .btn-default { color: #bbb; background-color: #202329; border-color: #202329 } +.darkness .btn-default:hover { color: #fff; background-color: #1a1c21; border-color: #1a1c21 } +.darkness #actions { right: 0; background-color: #282c34 } +.darkness #actions .btn-group .btn-success { box-shadow: none } +.darkness #actions .dropdown-menu .btn { background-color: #343942; border-radius: 0; color: #fff; } +.darkness #actions .dropdown-menu .btn:hover { background-color: #3c424e; color: #fff } +.darkness optgroup { background-color: #202329 } +.darkness optgroup option { background-color: #1a1c21 } +.darkness .float-xs-right > select { width: auto } +.darkness input[type=checkbox], .darkness input[type=radio] { border: 1px solid #414449; background-color: #202329 } +.darkness input[type=checkbox]:checked, .darkness input[type=radio]:checked { background-color: #ffc107; border-color: #ffc107 !important } +.darkness input[type=checkbox]:checked:hover, .darkness input[type=radio]:checked:hover { box-shadow: 0 0 .5em #ffc107 } +.darkness input[type=checkbox]:checked + label { background-color: transparent !important; color: #fff; } +.darkness input[type=checkbox] + label:hover { color: #fff; } +.darkness input[type=checkbox]:disabled, .darkness input[type=radio]:disabled, .darkness input[type=checkbox]:checked:disabled, .darkness input[type=radio]:checked:disabled { background-color: #282c34; border-color: #414449 !important; box-shadow: none !important; } +.darkness select:not([size]):not([multiple]), .darkness select[size="1"] { background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTc5MiAxNzkyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyNlZWUnPjxwYXRoIGQ9J00xMzk1IDczNnEwIDEzLTEwIDIzbC00NjYgNDY2cS0xMCAxMC0yMyAxMHQtMjMtMTBsLTQ2Ni00NjZxLTEwLTEwLTEwLTIzdDEwLTIzbDUwLTUwcTEwLTEwIDIzLTEwdDIzIDEwbDM5MyAzOTMgMzkzLTM5M3ExMC0xMCAyMy0xMHQyMyAxMGw1MCA1MHExMCAxMCAxMCAyM3onLz48L3N2Zz4=") !important; background-repeat: no-repeat; } +.darkness input:-webkit-autofill, .darkness textarea:-webkit-autofill, .darkness select:-webkit-autofill, .darkness input:-webkit-autofill:focus { border-color: #ffc107 !important; -webkit-animation-name: autofill; -webkit-animation-fill-mode: both; outline: none } +.darkness input:-webkit-autofill:focus { box-shadow: 0 0 0.5em #ffc107; } +@-webkit-keyframes autofill { +to { color: #bbb; background: transparent; } +} diff --git a/manager/media/style/default/css/index.css b/manager/media/style/default/css/index.css index 3ce62c2f..782f848d 100755 --- a/manager/media/style/default/css/index.css +++ b/manager/media/style/default/css/index.css @@ -1,9 +1,17 @@ +@supports (-webkit-overflow-scrolling: touch) { +html, body { -webkit-overflow-scrolling: touch; overflow: auto; height: 100%; /* ios iframe scroll jumping to top fix */ } +} #frameset { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; } #mainMenu, #tree, #main { position: absolute; } #mainMenu { top: 0; left: 0; width: 100%; height: 2.2rem; z-index: 100; } #tree { left: 0; top: 2.2rem; bottom: 0; width: 25rem; max-width: 100%; overflow: hidden; z-index: 2; } #main { left: 25rem; top: 2.2rem; right: 0; bottom: 0; z-index: 1; } -#main #mainframe { display: block; position: absolute; width: 100%; height: 100%; overflow: auto; } +#main #mainframe { display: block; position: absolute; width: 100%; height: 100%; overflow: auto;} + +.ios #main #mainframe, .ios #main .tabframes { overflow: hidden !important; min-width: 100%!important; width: 100px!important; *width: 100%!important; } +.ios .iframe-scroller { -webkit-overflow-scrolling: touch; overflow: auto; width:100%; height:100%; } +.ios .evo-tab-page.iframe-scroller { height:calc(100% - 2.3em) } + /* floater */ #floater { position: fixed; z-index: 1000; opacity: 0; visibility: hidden; max-width: 20rem; padding: 1.5rem; top: 4rem; left: 2rem; border-radius: 0.25rem; background-color: #fff; -webkit-box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); transition-duration: 0.15s } #floater.show { opacity: 1; visibility: visible; } @@ -18,9 +26,8 @@ .sidebar-closed #tree { width: 0 !important; } .sidebar-closed #main, .sidebar-closed #resizer { left: 0 !important; } @media (min-width: 1200px) { -#mainMenu { height: 3rem; } -#tree, #main { top: 3rem; } -#tree { font-size: .875rem } +#mainMenu { height: 2.5rem; } +#tree, #main { top: 2.5rem; } } @media (max-width: 840px) { #floater { left: 0; right: 0; margin: 0 auto; } @@ -42,3 +49,8 @@ to { transform: rotate(360deg) } .dark #frameset { background-color: #202329 } .dark #main { background-color: #ecf0f1 } .dark #mainloader { background-color: rgba(0, 0, 0, 0.1); } +/* darkness */ +.darkness { letter-spacing: .021em; } +.darkness #mainloader { background-color: rgba(0, 0, 0, 0.1); } +.darkness, .darkness #frameset, .darkness #main { background-color: #282c34; color: #bdbdbd; } +.darkness > form { background-color: #202329 } diff --git a/manager/media/style/default/css/layout.css b/manager/media/style/default/css/layout.css index 8d381865..173a9bcd 100755 --- a/manager/media/style/default/css/layout.css +++ b/manager/media/style/default/css/layout.css @@ -1,29 +1,29 @@ -.layout { display: table; table-layout: fixed; height: 100%; width: 100% } -.layout > .layout-row { display: table-row; vertical-align: top; height: 100% } -.layout > .layout-row > .layout-cell { display: table-cell; vertical-align: top; height: 100% } -.layout > .layout-row > .layout-cell.layout-container, .layout > .layout-row > .layout-cell .layout-container, .layout > .layout-row > .layout-cell.padded-container, .layout > .layout-row > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } -.layout > .layout-row > .layout-cell.layout-container .container-flush, .layout > .layout-row > .layout-cell .layout-container .container-flush, .layout > .layout-row > .layout-cell.padded-container .container-flush, .layout > .layout-row > .layout-cell .padded-container .container-flush { padding-top: 0 } -.layout > .layout-row > .layout-cell .layout-relative { position: relative; height: 100% } -.layout > .layout-row > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } -.layout > .layout-row > .layout-cell.min-size { width: 0 } -.layout > .layout-row > .layout-cell.min-height { height: 0 } -.layout > .layout-row > .layout-cell.center { text-align: center } -.layout > .layout-row > .layout-cell.middle { vertical-align: middle } -.layout > .layout-row > .layout-cell.layout-container, .layout > .layout-row > .layout-cell .layout-container, .layout > .layout-row > .layout-cell.padded-container, .layout > .layout-row > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } -.layout > .layout-row > .layout-cell.layout-container .container-flush, .layout > .layout-row > .layout-cell .layout-container .container-flush, .layout > .layout-row > .layout-cell.padded-container .container-flush, .layout > .layout-row > .layout-cell .padded-container .container-flush { padding-top: 0 } -.layout > .layout-row > .layout-cell .layout-relative { position: relative; height: 100% } -.layout > .layout-row > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } -.layout > .layout-row > .layout-cell.min-size { width: 0 } -.layout > .layout-row > .layout-cell.min-height { height: 0 } -.layout > .layout-row > .layout-cell.center { text-align: center } -.layout > .layout-row > .layout-cell.middle { vertical-align: middle } -.layout > .layout-row.min-size { height: 0 } -.layout > .layout-cell { display: table-cell; vertical-align: top; height: 100% } -.layout > .layout-cell.layout-container, .layout > .layout-cell .layout-container, .layout > .layout-cell.padded-container, .layout > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } -.layout > .layout-cell.layout-container .container-flush, .layout > .layout-cell .layout-container .container-flush, .layout > .layout-cell.padded-container .container-flush, .layout > .layout-cell .padded-container .container-flush { padding-top: 0 } -.layout > .layout-cell .layout-relative { position: relative; height: 100% } -.layout > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } -.layout > .layout-cell.min-size { width: 0 } -.layout > .layout-cell.min-height { height: 0 } -.layout > .layout-cell.center { text-align: center } -.layout > .layout-cell.middle { vertical-align: middle } +.layout { display: table; table-layout: fixed; height: 100%; width: 100% } +.layout > .layout-row { display: table-row; vertical-align: top; height: 100% } +.layout > .layout-row > .layout-cell { display: table-cell; vertical-align: top; height: 100% } +.layout > .layout-row > .layout-cell.layout-container, .layout > .layout-row > .layout-cell .layout-container, .layout > .layout-row > .layout-cell.padded-container, .layout > .layout-row > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } +.layout > .layout-row > .layout-cell.layout-container .container-flush, .layout > .layout-row > .layout-cell .layout-container .container-flush, .layout > .layout-row > .layout-cell.padded-container .container-flush, .layout > .layout-row > .layout-cell .padded-container .container-flush { padding-top: 0 } +.layout > .layout-row > .layout-cell .layout-relative { position: relative; height: 100% } +.layout > .layout-row > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } +.layout > .layout-row > .layout-cell.min-size { width: 0 } +.layout > .layout-row > .layout-cell.min-height { height: 0 } +.layout > .layout-row > .layout-cell.center { text-align: center } +.layout > .layout-row > .layout-cell.middle { vertical-align: middle } +.layout > .layout-row > .layout-cell.layout-container, .layout > .layout-row > .layout-cell .layout-container, .layout > .layout-row > .layout-cell.padded-container, .layout > .layout-row > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } +.layout > .layout-row > .layout-cell.layout-container .container-flush, .layout > .layout-row > .layout-cell .layout-container .container-flush, .layout > .layout-row > .layout-cell.padded-container .container-flush, .layout > .layout-row > .layout-cell .padded-container .container-flush { padding-top: 0 } +.layout > .layout-row > .layout-cell .layout-relative { position: relative; height: 100% } +.layout > .layout-row > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } +.layout > .layout-row > .layout-cell.min-size { width: 0 } +.layout > .layout-row > .layout-cell.min-height { height: 0 } +.layout > .layout-row > .layout-cell.center { text-align: center } +.layout > .layout-row > .layout-cell.middle { vertical-align: middle } +.layout > .layout-row.min-size { height: 0 } +.layout > .layout-cell { display: table-cell; vertical-align: top; height: 100% } +.layout > .layout-cell.layout-container, .layout > .layout-cell .layout-container, .layout > .layout-cell.padded-container, .layout > .layout-cell .padded-container { padding: 1rem 1rem 0 1rem } +.layout > .layout-cell.layout-container .container-flush, .layout > .layout-cell .layout-container .container-flush, .layout > .layout-cell.padded-container .container-flush, .layout > .layout-cell .padded-container .container-flush { padding-top: 0 } +.layout > .layout-cell .layout-relative { position: relative; height: 100% } +.layout > .layout-cell .layout-absolute { position: absolute; height: 100%; width: 100% } +.layout > .layout-cell.min-size { width: 0 } +.layout > .layout-cell.min-height { height: 0 } +.layout > .layout-cell.center { text-align: center } +.layout > .layout-cell.middle { vertical-align: middle } diff --git a/manager/media/style/default/css/main.css b/manager/media/style/default/css/main.css index a3807f7e..73fd2f30 100755 --- a/manager/media/style/default/css/main.css +++ b/manager/media/style/default/css/main.css @@ -38,7 +38,7 @@ h2#edit_document_title { font-size: 0.9rem; color: #f5f5f5; width: 100%; border- fieldset#preview h2.tab { float: right; } /* * Generic styles for all form elements - */ +*/ form#mutate dt, form#mutate dd { margin-bottom: 10px; } form#mutate dt label, form#mutate dt h3.label { font-size: 1em; display: inline; float: left; width: 200px; color: #821517 !important; font-weight: 500; } form#mutate dd { margin-left: 210px; } @@ -104,6 +104,11 @@ code { font-size: inherit; font-family: Consolas, 'Courier New', 'Courier', mono table th { font-weight: 500; } .table--edit th { width: 200px; color: #555; font-size: inherit; } .table--edit input[type="text"], .table--edit input[type="password"], .table--edit input[type="number"], .table--edit textarea, .table--edit select, .settings input[type="text"], .settings input[type="password"], .settings input[type="number"], .settings textarea, .settings select { width: 300px; } +/* stacked table cells on small screens */ +@media (max-width: 567px) { +#documentPane #tabGeneral > table > tbody > tr > td, #documentPane #tabGeneral .tmplvars > table > tbody > tr > td, #documentPane #tabSettings > table > tbody > tr > td, #settingsPane > .tab-page > table > tbody > tr > td, #settingsPane > .tab-page > table > tbody > tr > th {display: block !important;width: 100% !important;} +#settingsPane > .tab-page > table > tbody > tr > th {border-bottom-width: 0;} +} /* * MODxRE2 styles * css above is original MODxRE @@ -112,8 +117,10 @@ table th { font-weight: 500; } /* nav */ .no-events { pointer-events: none; } /* Required for Bootstrap3 Collapse */ -.panel-title > a::before { content: "\f107"; /* fa-angle-down */ font-family: "FontAwesome"; } -.panel-title > a.collapsed::before { content: "\f105"; /* fa-angle-right */ padding: 0 1px 0 3px; } +.panel-title > a::before { content: "\f107"; /* fa-angle-down */ +font-family: "FontAwesome"; } +.panel-title > a.collapsed::before { content: "\f105"; /* fa-angle-right */ +padding: 0 1px 0 3px; } .panel-title > a { font-size: 1.1em; color: #657587; display: block; padding: 3px 0; } .panel-title > a:hover { text-decoration: none; color: #1377c5; background: rgba(255, 255, 255, 0.27); } /* category icons in manage elements */ @@ -175,7 +182,8 @@ ul.elements_buttonbar .fa { font-size: 0.875rem; padding: 1px 1px 0; } /* Flex-view */ .resourceTable.flex ul.elements { -webkit-column-gap: 10px; -moz-column-gap: 10px; -o-column-gap: 10px; column-gap: 10px; } .resourceTable.flex ul.elements { } -.resourceTable.flex ul.elements > li { overflow: hidden; /* fix for Firefox */ break-inside: avoid-column; -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; -o-column-break-inside: avoid; -ms-column-break-inside: avoid; column-break-inside: avoid; page-break-inside: avoid } +.resourceTable.flex ul.elements > li { overflow: hidden; /* fix for Firefox */ +break-inside: avoid-column; -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; -o-column-break-inside: avoid; -ms-column-break-inside: avoid; column-break-inside: avoid; page-break-inside: avoid } .resourceTable.flex .elements_descr { display: block; margin-left: 1.5em; } #content_body #which_editor { margin-top: 12px; } /* resource children list */ diff --git a/manager/media/style/default/css/mainmenu.css b/manager/media/style/default/css/mainmenu.css index 9f8e0476..2dbb61fd 100755 --- a/manager/media/style/default/css/mainmenu.css +++ b/manager/media/style/default/css/mainmenu.css @@ -1,131 +1,218 @@ -/* #mainMenu */ -#mainMenu { background-color: #2b323a; color: #8b9298; -webkit-box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); box-shadow: 0 0.15rem 0.15rem rgba(0, 0, 0, 0.25); } -#mainMenu.show { overflow: visible } -#mainMenu + #tree::before, #mainMenu + #tree + #main::before { content: ""; position: fixed; z-index: 9999; left: 0; top: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, .1); opacity: 0; visibility: hidden; -webkit-transition: opacity .15s, visibility .15s; transition: opacity .15s, visibility .15s; } -#mainMenu.show + #tree::before, #mainMenu.show + #tree + #main::before { opacity: 1; visibility: visible } -#mainMenu > .container { display: table; width: 100%; border-collapse: collapse } -#mainMenu > .container > .row { display: table-row } -#mainMenu > .container > .row > .cell { display: table-cell; vertical-align: top; } -#mainMenu #nav { float: left; } -#mainMenu #settings { float: right; } -#mainMenu .nav { margin: 0; white-space: nowrap; font-size: 0 } -#mainMenu .nav > li { position: relative; display: inline-block; font-size: 0.8rem; vertical-align: top } -#mainMenu .nav > li.active > a { color: #fff; background-color: rgba(255, 255, 255, 0.07) } -#mainMenu .nav > li > a, #mainMenu .nav .label_searchid { display: block; position: relative; z-index: 1; padding: 0 1rem; height: 2.2rem; line-height: 2.3rem; text-decoration: none; color: #bbb; transition-duration: 0.15s } -#mainMenu .nav > li > a:hover, #mainMenu .nav .label_searchid:hover { color: #f3f3f3; } -/*#mainMenu.show .nav > li.dropdown:hover > a, */ -#mainMenu.show .nav > li.dropdown.hover > a { background-color: #fff; color: #444; } -#mainMenu .nav > li > a .icon { display: inline-block; overflow: hidden; width: auto; height: 2rem; line-height: 2rem; font-size: 1.5em; text-align: center; margin: 0.05rem 0 0 0.5rem; vertical-align: top; border-radius: 50%; background: no-repeat 50% 50%; background-size: cover; } -#mainMenu .nav > li > a .icon.photo { width: 2rem } -#mainMenu .nav > li > a .icon .fa { font-size: 1.2rem; line-height: 2.1rem } -#mainMenu .nav > li .fa { min-width: 1em; line-height: 2.2rem; font-size: .9rem; vertical-align: top } -#mainMenu #nav > li > a > .fa { display: none } -#mainMenu #nav #bars { width: 3.5rem; text-align: center } -#mainMenu #nav #bars a { padding: 0 1rem; } -#mainMenu #nav #bars .fa { display: inline-block; min-width: 0.25rem; width: 1.5rem; margin: 0; text-align: center; overflow: hidden; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } -.sidebar-closed #mainMenu #nav #bars .fa { width: 0.25rem; } -#mainMenu #system > a > .fa { font-size: 1.3rem } -#mainMenu .nav .caret, #mainMenu .nav .divider, .dropdown-toggle::after { display: none } -#mainMenu .nav > li > ul { display: block; position: absolute; z-index: 0; overflow: auto; overflow-x: hidden; top: 100%; left: 0; margin: 0; padding: 0 0 0.25rem; min-width: 15rem; max-height: -webkit-calc(100vh - 2.2rem); max-height: calc(100vh - 2.2rem); font-size: 1em; border: none; border-radius: 0 0 0.25rem 0.25rem; background-color: #fff; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); opacity: 0; visibility: hidden; -webkit-transition-duration: 0.1s; transition-duration: 0.1s; } -/*#mainMenu.show .nav > li:hover > a + ul, */ -#mainMenu.show .nav > li.hover > a + ul, #mainMenu.show .nav > li.hover > ul.sub-menu.show { opacity: 1; visibility: visible } -#mainMenu.show .nav > li > ul.sub-menu { left: 15rem; opacity: 0; visibility: hidden; } -#mainMenu.show .nav > li:hover > ul.sub-menu { } -#mainMenu.show .nav > li:hover > ul.sub-menu.show { } -#mainMenu #settings.nav > li > ul { left: auto; right: 0 } -#mainMenu .nav > li > ul > li { border-bottom: 1px solid rgba(0, 0, 0, 0.05); margin-bottom: -1px; } -#mainMenu .nav > li > ul > li:last-child { border: none; margin-bottom: 0 } -#mainMenu .nav > li > ul > li.item-input { padding: 0.375em 0.5em; } -#mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { display: block; position: relative; padding: 0 2rem 0 1rem; line-height: 2.2rem; color: #444; text-decoration: none } -#mainMenu .nav > li > ul > li.hover > a:first-child { color: #fff; background-color: #1976d2; } -#mainMenu .nav > li > ul > li > span:first-child { padding: 0 1rem; text-align: center; font-size: 0.875em; color: #aaa; } -#mainMenu .nav > li > ul > li.dropdown-back > span { text-align: left; font-size: inherit; color: inherit } -#mainMenu .nav > li > ul > li.dropdown-back > span * { pointer-events: none } -#mainMenu .nav > li > ul > li .fa { width: 1.3em; margin-right: 0.5em; font-size: .9rem; line-height: .8rem; text-align: center; vertical-align: baseline } -#mainMenu .nav > li > ul > li.selected a:first-child::before, #main .evo-tab-row .tab.changed::before { content: ''; position: absolute; right: 0.25em; top: 0.25em; width: 0.5em; height: 0.5em; background-color: #ffc107; -webkit-border-radius: 50%; border-radius: 50%; pointer-events: none } -#mainMenu .nav > li > ul > li.dropdown-toggle > a > .toggle { position: absolute; top: 0; right: 0; height: 100%; width: 2rem; margin: 0; line-height: 2rem; text-align: center; } -#mainMenu .nav > li > ul > li.disabled > a { opacity: 0.5; color: #7d2a24; } -#mainMenu .nav > li > ul > li.locked > a { font-style: italic } -#mainMenu .nav > li > ul > li > a small { line-height: 1em } -#mainMenu .nav li.item-group { display: table; width: 100%; border-collapse: separate } -#mainMenu .nav li.item-group > * { display: table-cell !important; width: 1%; padding: 0 .75rem; border: none !important; border-left: 1px solid rgba(0, 0, 0, 0.05) !important; border-radius: 0 } -#mainMenu .nav li.item-group > *:first-child { width: 100% } -#mainMenu .nav li.item-group > *:not(:first-child) .fa { margin-right: 0 } -#mainMenu .account #msgCounter { display: none; position: absolute; z-index: 1; right: 0.4rem; top: 0.4rem; width: 0.4rem; height: 0.4rem; background-color: #ffc107; font-size: 0; border-radius: 50%;; } -#mainMenu .account #newMail { display: none } -/* statusbar */ -#statusbar { position: relative; width: 1rem; height: 2.2rem; line-height: 2.4rem; font-size: 0.875em; white-space: nowrap; float: left; } -#statusbar .fa { font-size: 0.875rem } -#statusbar #buildText, #statusbar #workText { display: none } -#statusbar .fa { margin-right: 0.375rem } -#statusbar .fa-warning { color: #f44336 } -/* search */ -#mainMenu #searchform { position: relative } -#mainMenu #searchform label { position: relative; z-index: 1; margin: 0; cursor: pointer; } -#mainMenu #searchform input { position: absolute; z-index: 0; top: 0; right: 0; min-height: 1.5rem; height: 1.5rem; width: 0; padding: 0 0.5rem; margin: 0.345rem; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 0; background: rgba(0, 0, 0, 0.1); color: #fff; text-align: left; opacity: 0; outline: none; -webkit-transition: opacity 0.2s, width 0.2s; transition: opacity 0.2s, width 0.2s; } -#mainMenu #searchform input:focus { z-index: 9; width: 15rem; max-width: 15rem; background: #000; text-align: left; border-color: rgba(255, 255, 255, 0.75); opacity: 1 } -#mainMenu #searchform input:focus + .mask { opacity: 0.7; visibility: visible; } -#mainMenu #searchform .mask { content: ""; position: absolute; z-index: 5; top: 0; right: -999rem; right: -100vw; left: -999rem; left: -100vw; height: 2.2rem; opacity: 0; visibility: hidden; background-color: rgba(0, 0, 0, 0.65); -webkit-transition-duration: 0.3s; transition-duration: 0.3s; transform: translateZ(0) } -#mainMenu #searchform .fa-search { position: relative; z-index: 1 } -#mainMenu #searchform .fa-refresh { position: absolute; z-index: 9; display: none; top: 0.6rem; right: 0.8rem; line-height: 1em } -/* #searchresult */ -#searchresult { position: absolute; z-index: 99; overflow: hidden; top: 2.2rem; right: 0; bottom: 0; width: 0; max-width: 100%; background-color: #fff; border-left: 1px solid rgba(0, 0, 0, 0.1); opacity: 0; visibility: hidden; -webkit-transition: 0.25s ease 0.5s; transition: 0.25s ease 0.5s; -webkit-transition-delay: 0.3s; transition-delay: 0.3s; } -#searchresult.open { width: 20rem; box-shadow: 0 0 4.5rem rgba(0, 0, 0, 0.15); opacity: 1; visibility: visible; -webkit-transition: 0.5s ease 0.5s; transition: 0.5s ease 0.5s; -webkit-transition-delay: 0s; transition-delay: 0s } -#searchresult .ajaxSearchResults { width: 20rem; height: 100%; overflow: auto; } -#searchresult .ajaxSearchResults ul, #searchresult .ajaxSearchResults li { margin: 0; padding: 0; list-style: none } -#searchresult .ajaxSearchResults b, #searchresult .ajaxSearchResults strong, #searchresult .ajaxSearchResults a { position: relative; z-index: 0; display: block; color: #333; padding: 0.25rem 1rem; margin-top: -1px; border-top: 1px solid rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.03); box-sizing: border-box } -#searchresult .ajaxSearchResults b { z-index: 1; background-color: #ddd } -#searchresult .ajaxSearchResults a { padding: 0.25rem 2rem 0.25rem 1rem; text-decoration: none; } -#searchresult .ajaxSearchResults a:hover { color: #333; background-color: #f2f2f2; } -#searchresult .ajaxSearchResults a > i { position: absolute; right: 0; top: 50%; width: 2rem; height: 2rem; margin-top: -1rem; line-height: 2rem; text-align: center; color: #1976d2; } -#searchresult .ajaxSearchResults a.selected > i { color: #fff } -#searchresult .ajaxSearchResults a.selected { z-index: 1; background-color: #1976d2; color: #fff; font-weight: 700; } -#searchresult .ajaxSearchResults a .text-danger { color: #333; font-weight: 700 } -#searchresult .ajaxSearchResults a.selected .text-danger { color: #ffc107; text-shadow: 0 0 1px rgba(0, 0, 0, 0.5); } -#searchresult .ajaxSearchResults .locked a { font-style: italic; color: #646464; } -#searchresult .ajaxSearchResults .disabled a { opacity: .5; color: #7d2a24; } -#searchresult .ajaxSearchResults .deleted a { color: #a52a2a; text-decoration: line-through } -@media (min-width: 1200px) { -#searchresult { top: 3rem; } -#mainMenu #nav #site::before { content: ""; display: block; overflow: hidden; width: 10rem; background: url("../images/misc/logo-navbar.png") 0 50% no-repeat; background-size: 88%; } -#mainMenu #nav #site::before , #mainMenu #nav #site a { float: left } -#mainMenu, #mainMenu .nav > li > a, #mainMenu .nav .label_searchid, #mainMenu .nav > li > a .icon, #mainMenu #searchform .mask, #mainMenu #nav #site::before { height: 3rem; } -#mainMenu .nav > li > a, #mainMenu .nav .label_searchid, #mainMenu .nav > li .fa, #mainMenu .nav > li > a .icon { line-height: 3.1rem; } -#mainMenu .nav > li > a .icon.photo { width: 2.5rem; height: 2.5rem; margin-top: .3rem; } -#mainMenu .nav > li .fa { font-size: 1rem; } -#mainMenu #nav > li > a { padding: 0 1.3rem; font-size: .875rem; } -#mainMenu #nav > li > a > .fa { display: none } -#mainMenu .nav > li > a .icon .fa { line-height: 3rem; font-size: 1.5rem; } -#mainMenu .nav > li > ul { -webkit-transform: scale(.9); transform: scale(.9); box-shadow: 0 0.5rem 3rem rgba(0, 0, 0, 0.4); } -#mainMenu .nav > li > ul > li.item-input { padding: 0.575em 0.5em; } -#mainMenu.show .nav > li.hover > a + ul, #mainMenu.show .nav > li.hover > ul.sub-menu.show { -webkit-transform: scale(1); transform: scale(1); } -#mainMenu.show + #tree, #mainMenu.show + #tree + #main { -webkit-filter: blur(1px); filter: blur(1px) } -#mainMenu.show .nav > li.dropdown.hover > a { background-color: #48535f; color: #fff; } -#mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { line-height: 2.5rem; } -#mainMenu #searchform input { min-height: 2rem; height: 2rem; margin-top: 0.6rem; } -#mainMenu .nav > li > ul > li.dropdown-toggle > a > .toggle { line-height: 2.4rem; font-size: 1rem; } -} -@media (max-width: 1020px) { -.nav > li > a, #mainMenu .nav > li > ul > li > a, #mainMenu .nav > li > ul > li > span, #mainMenu .nav .label_searchid { padding: 0 0.75rem; } -} -@media (max-width: 840px) { -#statusbar { display: none } -#mainMenu #nav #bars { width: 2.5rem } -#mainMenu .nav > li { position: static; } -#mainMenu .nav > li > a { font-size: 0; } -#mainMenu .nav > li > a, #mainMenu .nav .label_searchid { padding: 0 0.5rem; } -#mainMenu .nav > li > a > .username { font-size: .75rem; } -#mainMenu #nav > li > a > .fa { display: inline-block; } -#mainMenu .nav > li > a > .fa { display: inline-block; width: 1.3em; margin-right: 0 !important; text-align: center; } -#mainMenu .nav > li > ul { left: 0 !important; width: 100%; } -#mainMenu .nav > li > ul.sub-menu { transform: translate3d(-100%, 0, 0) } -#mainMenu.show .nav > li.active > ul.selected, #mainMenu.show .nav > li.hover > ul.selected + ul.sub-menu { opacity: 1; visibility: visible; } -#mainMenu.show .nav > li.active > ul.selected { transform: translate3d(-100%, 0, 0); } -#mainMenu.show .nav > li.hover > ul.selected + ul.sub-menu { transform: translate3d(0, 0, 0); } -} -@media (max-width: 480px) { -#mainMenu .nav > li > a .username, #searchresult .ajaxSearchResults a > i { display: none } -#mainMenu .nav > li > a .icon { margin-left: 0 } -#searchresult.open, #searchresult .ajaxSearchResults { width: 100% } -} -/* dark */ +/* #mainMenu */ +#mainMenu { background-color: #2b323a; color: #8b9298; -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .3); box-shadow: 0 2px 4px rgba(0, 0, 0, .3); } +#mainMenu.show { overflow: visible } +#mainMenu + #tree::before, #mainMenu + #tree + #main::before { content: ""; position: absolute; z-index: 9999; left: 0; top: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, .1); opacity: 0; visibility: hidden; -webkit-transition: opacity .15s, visibility .15s; transition: opacity .15s, visibility .15s; } +#mainMenu.show + #tree::before, #mainMenu.show + #tree + #main::before { opacity: 1; visibility: visible } +#mainMenu > .container { display: table; width: 100%; border-collapse: collapse } +#mainMenu > .container > .row { display: table-row } +#mainMenu > .container > .row > .cell { display: table-cell; vertical-align: top; } +#mainMenu #nav { float: left; } +#mainMenu #settings { float: right; } +#mainMenu .nav { margin: 0; white-space: nowrap; font-size: 0 } +#mainMenu .nav > li { position: relative; display: inline-block; font-size: 0.8125rem; vertical-align: top } +#mainMenu .nav > li.active > a { color: #fff; background-color: rgba(255, 255, 255, 0.07) } +#mainMenu .nav > li > a, #mainMenu .nav .label_searchid { display: block; position: relative; z-index: 1; padding: 0 1rem; height: 2.2rem; line-height: 2.3rem; text-decoration: none; color: #dcd9e3; transition-duration: 0.15s } +#mainMenu .nav > li > a:hover, #mainMenu .nav .label_searchid:hover { color: #f3f3f3; } +/*#mainMenu.show .nav > li.dropdown:hover > a, */ +#mainMenu.show .nav > li.dropdown.hover > a { background-color: #fff; color: #444; } +#mainMenu .nav > li > a .icon { display: inline-block; overflow: hidden; width: auto; height: 2rem; line-height: 2rem; font-size: 1.5em; text-align: center; margin: 0.05rem 0 0 0.5rem; vertical-align: top; border-radius: 50%; background: no-repeat 50% 50%; background-size: cover; } +#mainMenu .nav > li > a .icon.photo { width: 2rem } +#mainMenu .nav > li > a .icon .fa { font-size: 1.2rem; line-height: 2.1rem } +#mainMenu .nav > li .fa { min-width: 1em; line-height: 2.2rem; font-size: 0.875rem; vertical-align: top } +#mainMenu #nav > li > a > .fa { display: none } +#mainMenu #nav #bars { width: 3.5rem; text-align: center } +#mainMenu #nav #bars a { padding: 0; } +#mainMenu #nav #bars .fa { display: inline-block; min-width: 0.25rem; width: 1.5rem; margin: 0; text-align: center; overflow: hidden; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +.sidebar-closed #mainMenu #nav #bars .fa { width: 0.25rem; } +#mainMenu #system > a > .fa { font-size: 1.1rem } +#mainMenu .nav .caret, #mainMenu .nav .divider, .dropdown-toggle::after { display: none } +#mainMenu .nav > li > ul { display: block; position: absolute; z-index: 0; overflow: auto; overflow-x: hidden; top: 100%; left: 0; margin: 0; padding: 0 0 0.25rem; min-width: 15rem; max-height: -webkit-calc(100vh - 2.2rem); max-height: calc(100vh - 2.2rem); font-size: 1em; border: none; border-radius: 0 0 0.25rem 0.25rem; background-color: #fff; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); opacity: 0; visibility: hidden; -webkit-transition-duration: 0.1s; transition-duration: 0.1s; } +/*#mainMenu.show .nav > li:hover > a + ul, */ +#mainMenu.show .nav > li.hover > a + ul, #mainMenu.show .nav > li.hover > ul.sub-menu.show { opacity: 1; visibility: visible } +#mainMenu.show .nav > li > ul.sub-menu { left: 15rem; opacity: 0; visibility: hidden; } +#mainMenu #settings.nav > li > ul { left: auto; right: 0 } +#mainMenu .nav > li > ul > li { border-bottom: 1px solid rgba(0, 0, 0, 0.05); margin-bottom: -1px; } +#mainMenu .nav > li > ul > li:last-child { border: none; margin-bottom: 0 } +#mainMenu .nav > li > ul > li.item-input { padding: 0.375em 0.5em; } +#mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { display: block; position: relative; padding: 0 2rem 0 1rem; line-height: 2.2rem; color: #444; text-decoration: none } +#mainMenu .nav > li > ul > li.hover > a:first-child { color: #fff; background-color: #1976d2; } +#mainMenu .nav > li > ul > li > span:first-child { padding: 0 1rem; text-align: center; font-size: 0.875em; color: #aaa; } +#mainMenu .nav > li > ul > li.dropdown-back > span { text-align: left; font-size: inherit; color: inherit } +#mainMenu .nav > li > ul > li.dropdown-back > span * { pointer-events: none } +#mainMenu .nav > li > ul > li .fa { width: 1.3em; margin-right: 0.5em; font-size: .875rem; line-height: .8rem; text-align: center; vertical-align: baseline } +#mainMenu .nav > li > ul > li.selected a:first-child::before, #main .evo-tab-row .tab.changed::before { content: ''; position: absolute; right: 0.25em; top: 0.25em; width: 0.5em; height: 0.5em; background-color: #ffc107; -webkit-border-radius: 50%; border-radius: 50%; pointer-events: none } +#mainMenu .nav > li > ul > li.dropdown-toggle > a > .toggle { position: absolute; top: 0; right: 0; height: 100%; width: 2rem; margin: 0; line-height: 2rem; text-align: center; } +#mainMenu .nav > li > ul > li.disabled > a { opacity: 0.5; color: #7d2a24; } +#mainMenu .nav > li > ul > li.locked > a { font-style: italic } +#mainMenu .nav > li > ul > li > a small { line-height: 1em } +#mainMenu .nav li.item-group { display: table; width: 100%; border-collapse: separate } +#mainMenu .nav li.item-group > * { display: table-cell !important; width: 1%; padding: 0 .75rem; +border: none !important; border-left: 1px solid rgba(0, 0, 0, 0.05) !important; border-radius: 0 } +#mainMenu .nav li.item-group > *:first-child { width: 100% } +#mainMenu .nav li.item-group > *:not(:first-child) .fa { margin-right: 0 } +#mainMenu .account #msgCounter { display: none; position: absolute; z-index: 1; right: 0.4rem; top: 0.4rem; width: 0.4rem; height: 0.4rem; background-color: #ffc107; font-size: 0; border-radius: 50%;; } +#mainMenu .account #newMail { display: none } +/* statusbar */ +#statusbar { position: relative; width: 1rem; height: 2.2rem; line-height: 2.4rem; font-size: 0.875em; white-space: nowrap; float: left; } +#statusbar .fa { font-size: 0.875rem } +#statusbar #buildText, #statusbar #workText { display: none } +#statusbar .fa { margin-right: 0.375rem } +#statusbar .fa-warning { color: #f44336 } +/* search */ +#mainMenu #searchform { position: relative } +#mainMenu #searchform label { position: relative; z-index: 1; margin: 0; cursor: pointer; } +#mainMenu #searchform input { position: absolute; z-index: 0; top: 0; right: 0; min-height: 1.5rem; height: 1.5rem; width: 0; padding: 0 0.5rem; margin: 0.345rem; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 0; background: rgba(0, 0, 0, 0.1); color: #fff; text-align: left; opacity: 0; outline: none; -webkit-transition: opacity 0.2s, width 0.2s; transition: opacity 0.2s, width 0.2s; } +#mainMenu #searchform input:focus { z-index: 9; width: 15rem; max-width: 15rem; background: #000; text-align: left; border-color: rgba(255, 255, 255, 0.75); opacity: 1 } +#mainMenu #searchform input:focus + .mask { opacity: 0.7; visibility: visible; } +#mainMenu #searchform .mask { content: ""; position: absolute; z-index: 5; top: 0; right: -999rem; right: -100vw; left: -999rem; left: -100vw; height: 2.2rem; opacity: 0; visibility: hidden; background-color: rgba(0, 0, 0, 0.65); -webkit-transition-duration: 0.3s; transition-duration: 0.3s; transform: translateZ(0) } +#mainMenu #searchform .fa-search { position: relative; z-index: 1 } +#mainMenu #searchform .fa-refresh { position: absolute; z-index: 9; display: none; top: 0.6rem; right: 0.8rem; line-height: 1em } +/* #searchresult */ +#searchresult { position: absolute; z-index: 99; overflow: hidden; top: 2.2rem; right: 0; bottom: 0; width: 0; max-width: 100%; background-color: #fff; border-left: 1px solid rgba(0, 0, 0, 0.1); opacity: 0; visibility: hidden; -webkit-transition: 0.25s ease 0.5s; transition: 0.25s ease 0.5s; -webkit-transition-delay: 0.3s; transition-delay: 0.3s; } +#searchresult.open { width: 20rem; box-shadow: 0 0 4.5rem rgba(0, 0, 0, 0.15); opacity: 1; visibility: visible; -webkit-transition: 0.5s ease 0.5s; transition: 0.5s ease 0.5s; -webkit-transition-delay: 0s; transition-delay: 0s } +#searchresult .ajaxSearchResults { width: 20rem; height: 100%; overflow: auto; } +#searchresult .ajaxSearchResults ul, #searchresult .ajaxSearchResults li { margin: 0; padding: 0; list-style: none } +#searchresult .ajaxSearchResults b, #searchresult .ajaxSearchResults strong, #searchresult .ajaxSearchResults a { position: relative; z-index: 0; display: block; color: #333; padding: 0.25rem 1rem; margin-top: -1px; border-top: 1px solid rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.03); box-sizing: border-box } +#searchresult .ajaxSearchResults b { z-index: 1; background-color: #ddd } +#searchresult .ajaxSearchResults a { padding: 0.25rem 2rem 0.25rem 1rem; text-decoration: none; } +#searchresult .ajaxSearchResults a:hover { color: #333; background-color: #f2f2f2; } +#searchresult .ajaxSearchResults a > i { position: absolute; right: 0; top: 50%; width: 2rem; height: 2rem; margin-top: -1rem; line-height: 2rem; text-align: center; color: #1976d2; } +#searchresult .ajaxSearchResults a.selected > i { color: #fff } +#searchresult .ajaxSearchResults a.selected { z-index: 1; background-color: #1976d2; color: #fff; font-weight: 700; } +#searchresult .ajaxSearchResults a .text-danger { color: #333; font-weight: 700 } +#searchresult .ajaxSearchResults a.selected .text-danger { color: #ffc107; text-shadow: 0 0 1px rgba(0, 0, 0, 0.5); } +#searchresult .ajaxSearchResults .locked a { font-style: italic; color: #646464; } +#searchresult .ajaxSearchResults .disabled a { opacity: .5; color: #7d2a24; } +#searchresult .ajaxSearchResults .deleted a { color: #a52a2a; text-decoration: line-through } +@media (min-width: 1200px) { +#searchresult { top: 2.5rem; } +#mainMenu #nav #site a { margin-left: 9.25rem; } +body:not(.lightness) #mainMenu #nav #site::before { content: ""; display: block; overflow: hidden; position: absolute; left: 0; top: 0; width: 9rem; height: 100%; background: url("../images/misc/logo-navbar.png") 0 50% no-repeat; background-size: 8rem; } +#mainMenu, #mainMenu .nav > li > a, #mainMenu .nav .label_searchid, #mainMenu .nav > li > a .icon, #mainMenu #searchform .mask, #mainMenu #nav #site::before { height: 2.5rem; } +#mainMenu .nav > li > a, #mainMenu .nav .label_searchid, #mainMenu .nav > li .fa, #mainMenu .nav > li > a .icon { line-height: 2.5rem; } +#mainMenu .nav > li > a .icon.photo { width: 2.1rem; height: 2.1rem; margin-top: .2rem; } +#mainMenu .nav > li .fa { font-size: 0.875rem; } +#mainMenu #nav > li > a { padding: 0 1.25rem; } +#mainMenu #nav > li > a > .fa { display: none; } +#mainMenu .nav > li > a .icon .fa { line-height: 2.5rem; font-size: 1.5rem; } +#mainMenu .nav > li > ul { box-shadow: 0 0.5rem 3rem rgba(0, 0, 0, 0.4); } +#mainMenu .nav > li > ul > li.item-input { padding: 0.575em 0.5em; } +#mainMenu .nav > li > ul > li > a:first-child, #mainMenu .nav > li > ul > li > span { line-height: 2.5rem; } +#mainMenu #searchform input { min-height: 1.875rem; height: 1.875rem; } +#mainMenu .nav > li > ul > li.dropdown-toggle > a > .toggle { line-height: 2.4rem; font-size: 1rem; } +} +@media (max-width: 1020px) { +#mainMenu #nav #bars { width: 3rem } +.nav > li > a, #mainMenu .nav > li > ul > li > a, #mainMenu .nav > li > ul > li > span, #mainMenu .nav .label_searchid { padding: 0 0.75rem; } +} +@media (max-width: 840px) { +#statusbar { display: none } +#mainMenu #nav #bars { width: 2.5rem } +#mainMenu .nav > li { position: static; } +#mainMenu .nav > li > a { font-size: 0; } +#mainMenu .nav > li > a, #mainMenu .nav .label_searchid { padding: 0 0.5rem; } +#mainMenu .nav > li > a > .username { font-size: .75rem; } +#mainMenu #nav > li > a > .fa { display: inline-block; } +#mainMenu .nav > li > a > .fa { display: inline-block; width: 1.3em; margin-right: 0 !important; text-align: center; } +#mainMenu .nav > li > ul { left: 0 !important; width: 100%; } +#mainMenu .nav > li > ul.sub-menu { transform: translate3d(-100%, 0, 0) } +#mainMenu.show .nav > li.active > ul.selected, #mainMenu.show .nav > li.hover > ul.selected + ul.sub-menu { opacity: 1; visibility: visible; } +#mainMenu.show .nav > li.active > ul.selected { transform: translate3d(-100%, 0, 0); } +#mainMenu.show .nav > li.hover > ul.selected + ul.sub-menu { transform: translate3d(0, 0, 0); } +} +@media (max-width: 480px) { +#mainMenu .nav > li > a .username, #searchresult .ajaxSearchResults a > i { display: none } +#mainMenu .nav > li > a .icon { margin-left: 0 } +#searchresult.open, #searchresult .ajaxSearchResults { width: 100% } +} +/* theme modes */ +/* lightness */ +.lightness #mainMenu { -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); } +.lightness #mainMenu { background-color: #f1f1f1; color: #464646; } +.lightness #mainMenu .nav > li > a, .lightness #mainMenu .nav .label_searchid { color: #464646 } +.lightness #mainMenu.show .nav > li.dropdown.hover > a { color: #222; } +body:not(.navbar-left).lightness #mainMenu #nav #site::before { content: ""; display: block; overflow: hidden; position: absolute; left: 0; top: 0; width: 9rem; height: 100%; background: url("../images/misc/login-logo.png") 0 50% no-repeat; background-size: 8rem; } +/* light */ +.light #mainMenu { -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, .3); box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, .3); } +.light #mainMenu { background-color: #343944; color: #cacaca; } +.light #mainMenu .nav > li > a, .light #mainMenu .nav .label_searchid { color: #dcd9e3; } +.light #mainMenu.show .nav > li.dropdown.hover > a { color: #444; } +/* dark */ +.dark #mainMenu { -webkit-box-shadow: 0 0.25rem 0.25rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.25rem 0.25rem rgba(0, 0, 0, 0.3); } +.dark #mainMenu { background-color: #202329; color: #bbb; } +.dark #mainMenu .nav > li > a, .dark #mainMenu .nav .label_searchid { color: #bbb } +.dark #mainMenu.show .nav > li.dropdown.hover > a { color: #444; } +/* darkness */ +.darkness #mainMenu { -webkit-box-shadow: 0 0.25rem 0.25rem rgba(0, 0, 0, 0.3); box-shadow: 0 0.25rem 0.25rem rgba(0, 0, 0, 0.3); } +.darkness #mainMenu { background-color: #202329; color: #bbb; } +.darkness #mainMenu .nav > li > a, .darkness #mainMenu .nav .label_searchid, .dark.navbar-left #mainMenu .nav > li > a { color: #bbb; } +.darkness #mainMenu.show .nav > li.dropdown.hover > a, .dark.navbar-left #mainMenu.show .nav > li.dropdown.hover > a { color: #eee; background-color: #343942; } +.darkness #mainMenu .nav > li > ul, .dark.navbar-left #mainMenu .nav > li > ul { background-color: #343942; } +.darkness #mainMenu .nav > li > ul > li > a:first-child, .darkness #mainMenu .nav > li > ul > li > span, .dark.navbar-left #mainMenu .nav > li > ul > li > a:first-child, .dark.navbar-left #mainMenu .nav > li > ul > li > span, .dark.navbar-left #mainMenu .nav li.item-group > * { color: #eee; } +.darkness #mainMenu .nav > li > ul > li > span:hover, .dark.navbar-left #mainMenu .nav > li > ul > li > span:hover { background-color: inherit; } +.darkness #mainMenu .nav li.item-group > *, .dark.navbar-left #mainMenu .nav li.item-group > * { background-color: transparent } +.darkness #searchresult { background-color: #202329; border-left: 1px solid #282c34; } +.darkness #searchresult .ajaxSearchResults b { background-color: #1a1c21; } +.darkness #searchresult .ajaxSearchResults b, .darkness #searchresult .ajaxSearchResults strong, .darkness #searchresult .ajaxSearchResults a { border-color: #282c34; color: #aaa; } +.darkness #searchresult .ajaxSearchResults a:hover { background-color: #343942; } +.darkness #searchresult .ajaxSearchResults .disabled a { color: #da4439; } +/* navbar left */ +@media (min-width: 768px) { +.navbar-left #resizer { top: 1.9rem; } +.navbar-left #tree, .navbar-left #main { top: 0; } +.navbar-left #tree { padding-left: 3rem; } +.navbar-left.sidebar-closed #tree { padding-left: 0; } +.navbar-left.sidebar-closed #main { left: 3rem !important; } +.navbar-left #mainMenu { width: 3rem; height: 100%; } +.navbar-left #mainMenu > .container { display: block; padding-left: 0; padding-right: 0; } +.navbar-left #mainMenu > .container > .row { display: block; margin-left: 0; margin-right: 0; } +.navbar-left #mainMenu > .container > .row > .cell { display: block; } +.navbar-left #mainMenu #nav, .navbar-left #mainMenu #settings { float: none; } +.navbar-left #mainMenu #settings { margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid rgba(255, 255, 255, 0.15); } +.navbar-left #mainMenu .nav > li { position: static; display: block; text-align: center; } +.navbar-left #mainMenu .nav > li > a { height: auto; } +.navbar-left #mainMenu #nav > li > a, .navbar-left #mainMenu #settings > li > a { padding: 0; } +.navbar-left #mainMenu #settings > li > a { padding: .5rem 0 } +.navbar-left #mainMenu #nav > li > a > .fa { display: inline-block; } +.navbar-left #mainMenu #nav > li > a > .fa, .navbar-left #mainMenu #searchform .fa, .navbar-left #mainMenu #preview .fa, .navbar-left #mainMenu #nav > li > .fa, .navbar-left #mainMenu #nav > li > a > .fa, .navbar-left #mainMenu #system > a > .fa { font-size: 0.875rem; } +.navbar-left #mainMenu .nav > li > ul, .navbar-left #mainMenu #settings.nav > li > ul { left: 3rem; top: 0; right: auto; bottom: 0; max-height: 100%; min-width: 20rem; padding: 0; border-radius: 0; } +.navbar-left #mainMenu #settings.nav > li > ul { max-height: none; } +.navbar-left #mainMenu #settings.nav > #account, .navbar-left #mainMenu #settings.nav > #system, .navbar-left #mainMenu #settings.nav > #fullscreen { position: absolute; width: 3rem; } +.navbar-left #mainMenu #settings.nav > #account { bottom: 0; } +.navbar-left #mainMenu #settings.nav > #system { bottom: 3.2rem; } +.navbar-left #mainMenu #settings.nav > #fullscreen { bottom: 5rem; } +.navbar-left #mainMenu #settings.nav > #account > ul, .navbar-left #mainMenu #settings.nav > #system > ul { top: auto; bottom: 0; } +.navbar-left #mainMenu #settings.nav > #system > ul { bottom: -5rem; } +.navbar-left #mainMenu .nav > li > .sub-menu { margin-left: 3rem; border-radius: 0; } +.navbar-left #mainMenu .menu-item-text, .navbar-left #mainMenu .username { display: none; } +.navbar-left #mainMenu .icon, .navbar-left #mainMenu .icon.photo, .navbar-left #mainMenu .nav > li > a .icon { margin-top: 0; margin-left: 0; } +.navbar-left #mainMenu #nav #bars { width: 100%; } +.navbar-left #mainMenu #nav #site a { position: static; padding: 0.5rem 0; } +.navbar-left #mainMenu #nav #site a::before { display: block; content: ""; left: auto; width: 100%; height: 2.25rem; background: transparent url("../images/misc/logo-navbar-left.png") no-repeat 50% 50%; background-size: 2.25rem; } +.navbar-left #mainMenu #nav #site a i { display: none; } +.navbar-left #mainMenu #searchform input, .navbar-left #mainMenu #searchform .mask { left: 0; right: auto; } +.navbar-left #mainMenu #searchform .mask { display: none; width: 15.75rem; height: 2.6rem; } +.navbar-left #searchresult { top: 0; } +/* theme modes */ +.navbar-left.lightness #mainMenu { -webkit-box-shadow: 0 2px 0 1px rgba(0, 0, 0, 0.15); box-shadow: 0 2px 0 1px rgba(0, 0, 0, 0.15); } +.navbar-left.lightness #mainMenu .nav > li { /*border-bottom-color: rgba(0,0,0,0.05);*/ } +.navbar-left.light .treeframebody { background-color: #f3f3f3; } +.navbar-left.dark #mainMenu { -webkit-box-shadow: 0 2px 0 1px rgba(255, 255, 255, 0.07); box-shadow: 0 2px 0 1px rgba(255, 255, 255, 0.07); background-color: #17191e; } +.navbar-left.dark #mainMenu .nav > li > a, .navbar-left.dark #mainMenu .nav .label_searchid { color: #dcd9e3; } +.navbar-left.darkness #mainMenu { -webkit-box-shadow: 0 2px 0 1px rgba(255, 255, 255, 0.07); box-shadow: 0 2px 0 1px rgba(255, 255, 255, 0.07); background-color: #17191e; } +.navbar-left.light #mainMenu #nav #site a::before, .navbar-left.dark #mainMenu #nav #site a::before, .navbar-left.darkness #mainMenu #nav #site a::before { background-image: url("../images/misc/logo-navbar-left-white.png"); } +.navbar-left.lightness #mainMenu #settings { border-top: 1px solid rgba(0, 0, 0, 0.1); } +} +@media (min-width: 1200px) { +.navbar-left #tree { padding-left: 5rem; } +.navbar-left.sidebar-closed #main { left: 5rem !important; } +.navbar-left #mainMenu, .navbar-left #mainMenu #nav.nav > #bars, .navbar-left #mainMenu #settings.nav > #account, .navbar-left #mainMenu #settings.nav > #system { width: 5rem; } +.navbar-left #mainMenu #nav #site::before { display: none; } +.navbar-left #mainMenu #nav #site a { margin-left: 0; } +.navbar-left #mainMenu #nav > li > a > .fa, .navbar-left #mainMenu #searchform .fa, .navbar-left #mainMenu #preview .fa, .navbar-left #mainMenu #nav > li > .fa, .navbar-left #mainMenu #nav > li > a > .fa, .navbar-left #mainMenu #system > a > .fa { font-size: 1.125rem; } +.navbar-left #mainMenu .menu-item-text, .navbar-left #mainMenu .username { display: block; font-size: 0.6875rem; line-height: 1em; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 0 0.3125rem .5rem; } +.navbar-left #mainMenu #nav #site a .menu-item-text { padding-top: .5rem; padding-bottom: 0; } +.navbar-left #mainMenu #settings.nav > #system { bottom: 5rem; } +.navbar-left #mainMenu .nav > li > ul, .navbar-left #mainMenu #settings.nav > li > ul { left: 5rem; } +.navbar-left #mainMenu .nav > li > .sub-menu { margin-left: 5rem; } +} diff --git a/manager/media/style/default/css/page.css b/manager/media/style/default/css/page.css index 3f82254b..8c16bb22 100755 --- a/manager/media/style/default/css/page.css +++ b/manager/media/style/default/css/page.css @@ -1,9 +1,9 @@ -@import "../../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; -@import "../../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; -@import 'fonts.css?v=1.3.5'; -@import "forms.css?v=1.3.5"; -@import "mainmenu.css?v=1.3.5"; -@import "tree.css"; -@import "tabpane.css"; -@import "contextmenu.css"; -@import "index.css"; +@import "../../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; +@import "../../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; +@import 'fonts.css?v=1.3.5'; +@import "forms.css?v=1.3.5"; +@import "mainmenu.css?v=1.3.5"; +@import "tree.css"; +@import "tabpane.css"; +@import "contextmenu.css"; +@import "index.css"; diff --git a/manager/media/style/default/css/tabpane.css b/manager/media/style/default/css/tabpane.css index eb31a88a..ec1cb14a 100755 --- a/manager/media/style/default/css/tabpane.css +++ b/manager/media/style/default/css/tabpane.css @@ -22,7 +22,8 @@ .tab-pane > .tab-page > div:first-of-type, .tab-pane > .tab-page > table { margin-top: -2.5rem } .dynamic-tab-pane-control.tab-pane > .tab-page > div:first-of-type, .dynamic-tab-pane-control.tab-pane > .tab-page > table { margin-top: 0 } .tab-page { clear: both; width: 100%; background-color: #fff; padding: 0; border: 0; border-radius: 0; box-shadow: 0 0 0.3rem 0 rgba(0, 0, 0, .1) } -.tab-page .tab-header, .sectionHeader { margin-top: 1em; padding: .5rem 1.25rem; letter-spacing: .03rem } +.tab-page .tab-header, .sectionHeader { margin-top: 1em; padding: .5rem 1.25rem; +letter-spacing: 0; font-size: 0.875rem; font-weight: bold; color: #777; } .tab-page .tab-header + .tab-header, .tab-page .sectionHeader + .sectionHeader { margin-top: 0; border-top: 1px solid #ccc; } .tab-page > .tab-body .tab-header { padding-left: 0; padding-right: 0 } .tab-page > .tab-header:first-child, .tab-page > .tab-body > .tab-header:first-child, .tab-page .sectionHeader:first-child, .tab-page > script + .sectionHeader, .sectionBody .tab-page > script + .tab-section { margin-top: 0 } @@ -33,7 +34,10 @@ .tab-page .tab-body > .form-group:last-child, .tab-page .tab-body > .form-row:last-child, .tab-page .tab-body > p:last-child, .tab-page .tab-body > .form-group:last-child > p:last-child, .tab-page .sectionBody:last-child { margin-bottom: 0 } .tab-page .tab-section, .tab-page .sectionHeader + .sectionBody { margin-top: 1.25rem; background-color: #fafafa; border: 1px solid #e0e0e0; border-radius: .1rem; } .tab-page .tab-section:first-child, .tab-page .sectionHeader + .sectionBody, .tab-page .sectionBody ~ .sectionHeader { margin-top: 0 } -.tab-page .tab-section .tab-header, .tab-page .sectionHeader { margin-left: -1px; margin-right: -1px; padding-left: .5rem; padding-right: .5rem; background-color: #efeff6; border: 1px solid #e0e0e0; border-bottom: 2px solid #e0e0ec; } +.tab-page .tab-section .tab-header, .tab-page .sectionHeader { margin-left: -1px; margin-right: -1px; padding-left: .5rem; +padding-right: .5rem; +background-color: #efeff6; border: 1px solid #e0e0e0; border-bottom: 2px solid #e0e0ec; } +.tab-page .tab-header, .tab-page .tab-section .tab-header, .tab-page .sectionHeader { background-color: #f3f3f3; border-bottom-width: 1px; } .tab-page .tab-section .tab-header:first-child, .tab-page .sectionHeader { margin-top: 0; border-top: none } .tab-page .tab-section .tab-header + .tab-header, .tab-page .tab-section .tab-body + .tab-header, .tab-page .sectionHeader { border-top: 1px solid #e0e0e0; } .tab-page .tab-section .tab-body, .tab-page .sectionBody { padding: 1rem; } @@ -64,6 +68,9 @@ .sectionBody > p:first-child { margin-left: 1rem; margin-right: 1rem } .showHideVisible, .layerVisible { margin: 0 10px 4px; } .sectionBody td, .sectionBody th { padding: 0.15rem 0.25rem; vertical-align: top; } +.sectionBody .tab-page#tabGeneral > table + div { margin-top: 1.3rem; } +#tabGeneral > table { margin-bottom: 1rem; } +#tab1Help > img { margin-bottom: 1.25rem; } /* [ POPUPS ] */ .evo-popup { display: none; position: absolute; z-index: 10500; box-shadow: 0 0.2rem 2rem rgba(0, 0, 0, 0.1); } .evo-popup.animation { -webkit-transition: .25s; transition: .25s } @@ -81,11 +88,15 @@ .evo-popup.alert-danger { border-color: rgba(0, 0, 0, 0.1); background-color: #d9534f; color: #fff; } .evo-popup.alert-danger hr { border-color: rgba(255, 255, 255, 0.5); } .evo-popup.alert.evo-popup-iframe { padding: 0; border: none; background-color: #fafafa; overflow: hidden; } -.evo-popup.alert .evo-popup-header { padding-bottom: .5rem; margin-bottom: .5rem; border-bottom: 1px solid } +.evo-popup.alert .evo-popup-header { +padding-bottom: .5rem; +margin-bottom: .5rem; border-bottom: 1px solid } .evo-popup .close { position: absolute; top: .3em; right: .3em; } .evo-popup.evo-popup-iframe .close { position: absolute; z-index: 9; opacity: 1; top: 0; right: 0; width: 1.5rem; height: 1.5rem; line-height: 1.4rem; color: #fff; background-color: #e5a2a0; text-align: center; font-weight: 100; } .evo-popup.evo-popup-iframe .close:hover { opacity: 1; background-color: #d9534f; } -.evo-popup.evo-popup-iframe .evo-popup-header { position: relative; height: 1.5rem; margin: 0; padding: 0 1.5rem 0 .5rem; line-height: 1.5rem; font-size: .9rem; border-bottom: 1px solid #dedede; } +.evo-popup.evo-popup-iframe .evo-popup-header { position: relative; height: 1.5rem; margin: 0; padding: 0 1.5rem 0 .5rem; +line-height: 1.5rem; font-size: .9rem; +border-bottom: 1px solid #dedede; } .evo-popup.evo-popup-iframe .evo-popup-header i { line-height: 1.5rem !important; } .evo-popup.evo-popup-iframe .evo-popup-body { position: absolute; z-index: 1; left: 0; top: 0; right: 0; bottom: 0; } .evo-popup.evo-popup-iframe .evo-popup-header + .evo-popup-body { top: 1.5rem } @@ -96,17 +107,19 @@ .evo-popup.resize .border-outline { display: none; } .evo-popup.resize:hover .border-outline, .evo-popup.is-resize .border-outline, .evo-popup.resize:hover .border-outline i, .evo-popup.is-resize .border-outline i { display: block !important } .evo-popup.resize .border-outline i { position: absolute; z-index: 99; display: none; background-color: transparent } -.evo-popup.resize .border-outline .bo-left, .evo-popup.resize .border-outline .bo-right { width: .25rem; height: 100%; } +.evo-popup.resize .border-outline .bo-left, .evo-popup.resize .border-outline .bo-right { +width: .25rem; height: 100%; } .evo-popup.resize .border-outline .bo-left { left: 0; } .evo-popup.resize .border-outline .bo-right { right: 0; } -.evo-popup.resize .border-outline .bo-top, .evo-popup.resize .border-outline .bo-bottom { height: .25rem; width: 100%; } +.evo-popup.resize .border-outline .bo-top, .evo-popup.resize .border-outline .bo-bottom { +height: .25rem; width: 100%; } .evo-popup.resize .border-outline .bo-top { top: 0; } .evo-popup.resize .border-outline .bo-bottom { bottom: 0; } -.dark .evo-popup.alert.evo-popup-iframe { background-color: #ecf0f1 } /* [ EVO-TABS ] */ .evo-tab-row { height: 1.875rem; padding: 0; background-color: #dfdfdf; } .evo-tab-row:after { background-color: #cfd2d6 } -.evo-tab-row .tab-row .tab { height: 1.875rem; line-height: 2rem; font-size: .8125rem; text-transform: none; border: none; border-right: 1px solid #cfd2d6; border-left: 1px solid #cfd2d6; margin-left: -1px; } +.evo-tab-row .tab-row .tab { height: 1.875rem; line-height: 2rem; font-size: .8125rem; +text-transform: none; border: none; border-right: 1px solid #cfd2d6; border-left: 1px solid #cfd2d6; margin-left: -1px; } .evo-tab-row .tab-row .tab:hover { background-color: rgba(255, 255, 255, 0.5) } .evo-tab-row .tab-row .tab.changed { color: #0275d8; } .evo-tab-row .tab-row .tab.selected { font-weight: normal; color: #444; background-color: #fafafa; } @@ -116,17 +129,46 @@ .evo-tab-row .tab-row .tab:not(#evo-tab-home) i, .evo-popup.evo-popup-iframe .evo-popup-header i { margin-right: .25em } .evo-tab-row .tab-row .tab span { background: none !important } .evo-tab-row .tab-row .tab .tab-title { float: left; width: 5rem; line-height: 2rem; text-overflow: ellipsis; overflow: hidden; } -.evo-tab-row .tab-row .tab .tab-close { float: right; margin: 0 -.75rem 0 .5rem; padding: .25em; line-height: 1.3em; font-size: 1.3em; font-weight: 700; color: #9e9e9e } +.evo-tab-row .tab-row .tab .tab-close { float: right; margin: 0 -.75rem 0 .5rem; +padding: .25em; line-height: 1.3em; font-size: 1.3em; font-weight: 700; color: #9e9e9e } .evo-tab-row .tab-row .tab .tab-close:hover { color: #d9534f } .evo-tab-page { position: absolute; overflow: hidden; z-index: -1; display: block; left: 0; top: 2.3em; right: 0; bottom: 0; height: auto; box-shadow: none; background-color: #fafafa; } .evo-tab-page.show { z-index: 1; } .evo-tab-page iframe { position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: #fafafa; overflow: hidden; } +@media (min-width: 1200px) { +.evo-tab-row .tab-row .tab .tab-title { width: 7rem; } +} +/* modes theme */ +/* lightness */ +.lightness .evo-tab-row { background-color: #e8e8e8; } +/* light */ +.light .evo-tab-row { background-color: #dfdfdf; } /* dark */ -.dark .evo-popup-overlay { background-color: rgba(0, 0, 0, 0.3); } -.dark .evo-tab-row { background-color: #1a1c21; border-bottom: none; } -.dark .evo-tab-row:after { background-color: #1a1c21; } -.dark .evo-tab-row .tab-row .tab { color: #aaa; border-color: #2a2d33 } -.dark .evo-tab-row .tab-row .tab:hover { background-color: #2d3033 } -.dark .evo-tab-row .tab-row .tab.changed { color: #7cb2dc; } -.dark .evo-tab-row .tab-row .tab.selected { background-color: #414550; color: #eee; border-bottom: 3px solid #1976d2; } -.dark .evo-tab-page, .dark .evo-tab-page iframe { background-color: #ecf0f1 } +.dark .evo-popup.alert.evo-popup-iframe { background-color: #ecf0f1 } +.dark .evo-popup-overlay, .darkness .evo-popup-overlay { background-color: rgba(0, 0, 0, 0.3); } +.dark .evo-tab-row, .darkness .evo-tab-row { background-color: #1a1c21; border-bottom: none; } +.dark .evo-tab-row:after, .darkness .evo-tab-row:after { background-color: #1a1c21; } +.dark .evo-tab-row .tab-row .tab, .darkness .evo-tab-row .tab-row .tab { color: #aaa; border-color: #2a2d33 } +.dark .evo-tab-row .tab-row .tab:hover, .darkness .evo-tab-row .tab-row .tab:hover { background-color: #2d3033 } +.dark .evo-tab-row .tab-row .tab.changed, .darkness .evo-tab-row .tab-row .tab.changed { color: #7cb2dc; } +.dark .evo-tab-row .tab-row .tab.selected, .darkness .evo-tab-row .tab-row .tab.selected { background-color: #414550; color: #eee; border-bottom: 3px solid #1976d2; } +.dark .evo-tab-page, .dark .evo-tab-page iframe, .darkness .evo-tab-page, .darkness .evo-tab-page iframe { background-color: #ecf0f1 } +/* darkness */ +.darkness .evo-popup.alert.evo-popup-iframe, .darkness .evo-tab-page iframe { background-color: #282c34 } +.darkness .evo-popup.evo-popup-iframe .close { opacity: 0.64; background-color: #ca000c; font-family: serif; } +.darkness .evo-popup.evo-popup-iframe .close:hover { opacity: 1; } +.darkness .evo-popup.evo-popup-iframe .evo-popup-header { border-bottom: 1px solid #17191d; } +.darkness .evo-popup.evo-popup-iframe .evo-popup-header { color: #eee; } +.darkness .sectionBody .tab-row-container, .darkness .tab-pane .tab-row-container, .darkness .tab-pane .tab-row { background-color: #202329; } +.darkness .tab-pane .tab-pane .tab-row { background-color: #282c34; } +.darkness .tab-row .tab.selected { border-color: #414449; background-color: #282c34; color: #eee; } +.darkness .tab-row .tab, .darkness .tab-row .tab a, .darkness .tab-pane > .tab-page > .tab { color: inherit } +.darkness .tab-row::after, .darkness .tab-row-container::after { background-color: #414449; } +.darkness .tab-row-container .tab-row { z-index: auto; } +.darkness .evo-tab-row .tab-row .tab:hover { background-color: #282c34; } +.darkness .evo-tab-row .tab-row .tab.selected { background-color: #282c34; border-color: #343942; border-bottom: 3px solid #1976d2; } +.darkness .sectionBody fieldset, .darkness .sectionBody legend { background: none; border: 1px solid #414449; box-shadow: none; } +.darkness .tab-page .tab-section .tab-header, .darkness .tab-page .sectionHeader { background-color: #202329; border: 1px solid #414449; } +.darkness .tab-page .tab-section .tab-header:first-child, .darkness .tab-page .sectionHeader { margin-top: -1px; } +.darkness .tab-page .tab-section, .darkness .tab-page .sectionHeader + .sectionBody { background: none; border: 1px solid #414449; } +.darkness .tab-page .sectionHeader + .sectionBody { border-top: none; } diff --git a/manager/media/style/default/css/tree.css b/manager/media/style/default/css/tree.css index 55ce9cb6..38c13a68 100755 --- a/manager/media/style/default/css/tree.css +++ b/manager/media/style/default/css/tree.css @@ -1,4 +1,5 @@ /* tree */ +#tree { font-size: 0.8125rem; } #treeloader { position: absolute; display: block; overflow: hidden; right: 0.3em; top: 0.15em; opacity: 0; visibility: hidden; -webkit-transition-duration: 0.5s; transition-duration: 0.5s } #treeloader .fa { font-size: 1em; } #treeloader.visible { opacity: 0.7; visibility: visible; -webkit-transition-duration: 0s; transition-duration: 0s } @@ -9,13 +10,13 @@ #treeMenu .treeButton:not(.disabled):active { background-color: #d5d5d5 } #treeMenu .treeButton .fa { display: block; width: 1.2em; height: 1.2em; margin: auto; line-height: 1.3em; font-size: 1.1em; } #treeMenu .treeButton.disabled { color: #777; opacity: 0.5 } -#treeHolder { position: relative; z-index: 1; cursor: default; overflow: auto; height: 100%; max-height: calc(100% - 30px); white-space: nowrap } +#treeHolder { position: relative; z-index: 1; cursor: default; overflow: auto; height: 100%; max-height: calc(100% - 30px); white-space: nowrap; padding-bottom:10px; } #treeHolder .rootNode { position: relative; } -#treeHolder .rootNode a { display: block; overflow: hidden; padding: 1em 1em 0.5em 1em; text-overflow: ellipsis; color: #333; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s; font-weight: bold } +#treeHolder .rootNode a { display: block; overflow: hidden; padding: 1em 1em 0.5em 1.25em; text-overflow: ellipsis; color: #333; cursor: pointer; -webkit-transition-duration: 0.15s; transition-duration: 0.15s; font-weight: bold } #treeHolder .rootNode a .fa { margin-right: 0.5em } #treeHolder .rootNode .icon { display: none; } #treeRoot { float: left; width: 100%; color: #333; } -#treeRoot a { display: block; clear: both; overflow: hidden; text-decoration: none; padding: 0.1em 0 0.1em 2.2em; font-size: 1em; text-overflow: ellipsis; color: #333; cursor: default; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot a { display: block; clear: both; overflow: hidden; text-decoration: none; padding-top: 0.1em; padding-bottom: 0.1em; padding-left: 2.5em !important; padding-right: 0; font-size: 1em; text-overflow: ellipsis; color: #333; cursor: default; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } #treeRoot a:hover:not(.empty), #treeRoot a.current { background-color: rgba(33, 150, 243, 0.1) } #treeRoot a small { margin: 0 0.8em 0 0.2em } #treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 0, 0, 0.1); } @@ -37,32 +38,43 @@ #treeRoot .toggle { float: left; margin: 1px 0.2em 1px -1.5em; width: 1.3em; height: 1.3em; line-height: 1.4em; text-align: center; vertical-align: top; cursor: pointer; border-radius: 50%; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } #treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.5); } #treeRoot .toggle .fa { margin: 0; width: auto; } -#treeRoot .fa, #treeHolder .rootNode .fa { margin-right: 1px; width: 1em; font-size: 1.1em; text-align: center; color: #565656; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } +#treeRoot .fa, #treeHolder .rootNode .fa { margin-right: 1px; width: 1em; font-size: 1.08em; text-align: center; color: #565656; -webkit-transition-duration: 0.15s; transition-duration: 0.15s } #treeRoot a[data-private="1"] .icon::after { position: relative; float: left; margin: .5em -1em 0 0; content: "\f023"; font-family: FontAwesome; font-size: 0.75em; color: #d9534f; } #treeRoot .fa-file, #treeRoot .fa-file-o, #treeRoot .fa-file-code, #treeRoot .fa-file-code-o { } #treeRoot .fa-folder, #treeRoot .fa-folder-open, #treeRoot .fa-folder-o, #treeRoot .fa-folder-open-o, #treeRoot .fa-exclamation-triangle { margin-top: 0.1em; text-align: left } #treeRoot .fa-link { margin-right: 0; font-size: 0.8em } #treeRoot #binFull { display: none } -/* treeRoot dark */ +/* modes theme */ +/* lightness */ +.lightness #treeMenu { background-color: #e8e8e8 } +.lightness .treeframebody { background-color: #fafafa; } +/* light */ +.light #treeMenu { background-color: #dfdfdf } +.light .treeframebody { background-color: #fafafa; } +/* dark */ .dark #treeMenu { background-color: rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.2); border-right-color: #2a2d33 } -.dark #treeMenu .treeButton { color: #a9a9a9; } -.dark #treeMenu .treeButton:hover:not(.disabled) { background-color: #2d3033; color: #fff } -.dark #tree .treeframebody { background-color: #202329; border-color: #2a2d33 } -.dark #treeHolder .rootNode a { color: #c5c5c5; } -.dark #treeHolder .rootNode a:hover { color: #eee } -.dark #treeRoot { color: #b3b3b3; } -.dark #treeRoot a { color: #b3b3b3; } -.dark #treeRoot a:hover:not(.empty), .dark #treeRoot a.current { background-color: rgba(255, 255, 255, 0.15); } -.dark #treeRoot a.selected, #treeRoot .dragenter > a { background-color: rgba(0, 142, 255, 0.19); } -.dark #treeRoot .dragafter > a::after, .dark #treeRoot .dragbefore > a::before { background-color: rgba(255, 255, 255, 0.25); } -.dark #treeRoot a .title { color: #7cb2dc; } -.dark #treeRoot a.hidemenu .title { color: #c5c5c5; } -.dark #treeRoot a.deleted .title { color: #a52a2a; } -.dark #treeRoot a.unpublished .title { color: #d0726b } -.dark #treeRoot .icon:hover > .fa { color: #fff } -.dark #treeRoot a .title:hover { color: #a2d4fb; } -.dark #treeRoot a.hidemenu .title:hover { color: #eee } -.dark #treeRoot a.unpublished .title:hover { color: #f38e86 } -.dark #treeRoot a.deleted .title:hover { color: #e23d3d } -.dark #treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.19); } -.dark #treeRoot .fa, .dark #treeHolder .rootNode .fa { color: #bcbec0; } +.dark #treeMenu .treeButton, .darkness #treeMenu .treeButton { color: #a9a9a9; } +.dark #treeMenu .treeButton:hover:not(.disabled), .darkness #treeMenu .treeButton:hover:not(.disabled) { background-color: #2d3033; color: #fff } +.dark #tree .treeframebody, .darkness #tree .treeframebody { background-color: #202329; border-color: #2a2d33 } +.dark #treeHolder .rootNode a, .darkness #treeHolder .rootNode a { color: #c5c5c5; } +.dark #treeHolder .rootNode a:hover, .darkness #treeHolder .rootNode a:hover { color: #eee } +.dark #treeRoot, .darkness #treeRoot { color: #b3b3b3; } +.dark #treeRoot a, .darkness #treeRoot a { color: #b3b3b3; } +.dark #treeRoot a:hover:not(.empty), .dark #treeRoot a.current, .darkness #treeRoot a:hover:not(.empty), .darkness #treeRoot a.current { background-color: rgba(255, 255, 255, 0.15); } +.dark #treeRoot a.selected, .dark #treeRoot .dragenter > a, .darkness #treeRoot a.selected, .darkness#treeRoot .dragenter > a { background-color: rgba(0, 142, 255, 0.19); } +.dark #treeRoot .dragafter > a::after, .dark #treeRoot .dragbefore > a::before, .darkness #treeRoot .dragafter > a::after, .darkness #treeRoot .dragbefore > a::before { background-color: rgba(255, 255, 255, 0.25); } +.dark #treeRoot a .title, .darkness #treeRoot a .title { color: #7cb2dc; } +.dark #treeRoot a.hidemenu .title, .darkness #treeRoot a.hidemenu .title { color: #c5c5c5; } +.dark #treeRoot a.deleted .title, .darkness #treeRoot a.deleted .title { color: #a52a2a; } +.dark #treeRoot a.unpublished .title, .darkness #treeRoot a.unpublished .title { color: #d0726b } +.dark #treeRoot .icon:hover > .fa, .darkness #treeRoot .icon:hover > .fa { color: #fff } +.dark #treeRoot a .title:hover, .darkness #treeRoot a .title:hover { color: #a2d4fb; } +.dark #treeRoot a.hidemenu .title:hover, .darkness #treeRoot a.hidemenu .title:hover { color: #eee } +.dark #treeRoot a.unpublished .title:hover, .darkness #treeRoot a.unpublished .title:hover { color: #f38e86 } +.dark #treeRoot a.deleted .title:hover, .darkness #treeRoot a.deleted .title:hover { color: #e23d3d } +.dark #treeRoot .toggle:hover, .darkness #treeRoot .toggle:hover { background-color: rgba(255, 255, 255, 0.19); } +.dark #treeRoot .fa, .dark #treeHolder .rootNode .fa, .darkness #treeRoot .fa, .darkness #treeHolder .rootNode .fa { color: #bcbec0; } +/* darkness */ +.darkness #tree .treeframebody { background-color: #202329; border-color: #414449; } +.darkness #treeMenu { background-color: #1a1c21; border-color: #414449; } +.darkness #mainMenu .nav > li > ul > li, .dark.navbar-left #mainMenu .nav > li > ul > li { border-bottom-color: rgba(0, 0, 0, 0.15); } diff --git a/manager/media/style/default/images/login/default/login-background.jpg b/manager/media/style/default/images/login/default/login-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f73e282efa5fc0b80738a79ffd17579a4d8ee54f GIT binary patch literal 201833 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

          B7F8$4sqmCvr|KRpcWEJ^Ii?EmoK&0AKb{^|N_B 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 QK2OQASlf5^+h5lI17=4oWdHyG literal 0 HcmV?d00001 diff --git a/manager/media/style/default/images/login/default/login-logo.png b/manager/media/style/default/images/login/default/login-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..39e2dbd06541a71732ceb89c10b6db6170efcdd2 GIT binary patch literal 5587 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 G`ab~7;k@(! literal 0 HcmV?d00001 diff --git a/manager/media/style/default/images/misc/logo-navbar-left-white.png b/manager/media/style/default/images/misc/logo-navbar-left-white.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff7479b913d1c9b442e6e2b62953525ac218fcf GIT binary patch literal 24430 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 literal 0 HcmV?d00001 diff --git a/manager/media/style/default/images/misc/logo-navbar-left.png b/manager/media/style/default/images/misc/logo-navbar-left.png new file mode 100644 index 0000000000000000000000000000000000000000..fede6fc5aaa728e03049bd4efb917fa2a5d5f557 GIT binary patch literal 25427 zcmbTd1y>wh6D>TrySonV?h@Ps1cJM}4DK3S1`Qr0gx~~sCxc6Hx8M%J;hX2Z-~9u3 z*7TaSdi9ypUFTHQuDz>cKdLKWppv2j000anMOiHX0LJgX0~rx|#vjf=8~~sOD9K8H z^36M4_Y3?q|0sDm<$139LExWUm=yyWbpxuy5J6VEjugI@k%ME?xr$EJ>++NHQ?>D0 z6O-Q0CWjs!X}NC;WjZ)R6#4@>)(zP3xYPkWy!T=~lDH|>=T?~=i=ro7hn9>+e+=-Y_`-V7j<7|<`pfKELu#f6Cb4GS(v zlv4>NW#(~{B)>;Ok1TXy@_hrTsO%=>PW2PkB?p&7tR~WjYQSfik~54WjCr}XvDK=# z;N7b^K|$NL)wzcC@CL6-%|S72S-3vF>|Qt+E1qd2DF);tGb?YC9E4u4B{z1!3Jf69 zpNk$qAtlax99bm7waEQ(WUwh*j-t0CcJJSJ`G>b)FP9JRCd`u`mAb$9+nqHUA&X@8 z`kC$F{vHb@qIf?!uygye0+AwsG3@P34P`&Y&22FF;?(i>5CtO&+v=iepY**=KD;87 z7y&>8U;?CI6tz%r%i19UsBkh=G9_rQaZ1>*-D-_}AEyn37!qVGfaQAdFzL8;I0+MMzG;Yyi;`3wR=hYunJ~4_V~Z~Lp)_gKez7zMD&an!25vCy{76@a#T)d5=PRWXTN+fTL8>*CcFYzJB2t^*LE)1nm_jFd$ zsk)1uRfpV@0q;9D-R992?nmL!4An+0_#q^X36k#lqtNt+AM}M*lyCkkQp(?WNraGk zK>!6|3hm-qV9rVIe&(51Lq)yLUtUXM0QOoLGv7~*tORM6kxc?^g==HTY=xssCcu0nub8n@C*$kljaw z7|55ghxa?ev0M#TRuZ0zOsZz?ioQWW@|ne3WwStD_>(fFeII+ctiGxB>~b}U(1~pE zpYa;bqc-HF-@O)UNGwCX=5C+&)9NEH=9uPm5YU z$;bR&uBEggk40$en@$Ka9T;4cVjqbFlCWoVM3`PIl~Az*6Wv4#u){e>AG}<1=2

          LYk06ItrzI{&`MGvbw5gMxySb+NYmAUl2KXun!SDO5Fzz@1T)CcI~#u-D=G zv5JCg2OOM+7G^2l#3!7yBk9ocfCz~Ex5YS>&(j+64t!g7<-1C5&H$6h$>fQ`-Ss^X z*ZNmwF$UHrx1X$zW*5S2?nKDPmVre7_#j?Det$0PJtg%Ki{gLyqtC@u#@f`1)vG>X zB)({DlqMguUsLD$Kng67+|rnM*@Y)p4(qL8fUeWgiS9rCt0yo;U-Lge;TDLE5Vh5A zDeLuU#heu5PJ}|W*m78T_M!VR%U=>Cl6fu*d=%o2pfnNOrKNqN2t`pJNjvmc^pG^_ zl^f_jRanIItgzbT9}WQy))sJ#zs(+fY=_I(vm8YC_kC?Vf`4NF zz9Up_>HcwAPPh;YTaW97)VA`f^Jp z&>O(p=_jg_y~FMtzz#Y+wSm@9B>(GSPHf~KPH6Bo~%MYDTSsCwvg;}I(OL*GXpAmG`5?txsrv? z-X5bOa`P}5zW$)63R95G&u8FWy@0(`30xfegc3!=>T|+cd3>vBhVCtrXGQ&EF}fQR zQJ`Eh-(b4f4A<)OR+UF2jjxSVS0E33a@lTyzBKH^1INxBi1P_T(?{Ge}@YA8X6)i#BVAvvNh4c~$-5e${4Mu)Y; zZf8<);`ZJ?oI%Eh}E}n&`D#Hz*7~3UuII24uaPW$Mb$>y0z2CUZRgRcKpFj;?CH^nww$t zdYS@=MeezJJGbRO?|m*44Oif`^vz<#^X4kaMm~x4E16vJhZr0+jAhNQU^}eE#l;Q& zw3NKF(;|~*Q;?cg1km+mBd3XiP^_xXYuDEo6H9awOKLLUKm#w!!WY66inLlvZ`4>s zQ$mCy?*zRN^%3yli^#?DN6NL?;{#?I4eC?CB|&yKK79{%q$?p&cgM&E(;4q>nddM5 zm|d7WY7|E72j9@AVPPl7oa}2Qs&)q!=^xj_#?)r+)LY&5+xs$U7PDqV8GAFDanznt zg#j?#M1&#a7nt4)W1K3Ew?;OUe;$E|bvTjx=q7z&$$*=N`=5CUGw$d)kE2m^F?YNA z(-5<~i0o&CQWsJwA3J8+&s|FEP5J0+?Pkrk^>bnLag>F7RE9zIpM4-ieM0j`dbq|P z73PLVdsl{aB@m>T;Vy9N$b%nez?B=T`=G#BmtmCy8?<6i;vI6>Nkm^o{46B@*xk?n zN*vYUBKH7f_95M zlD$PWz<+K(muK*(e2LKP8Ws0a(QNAcnb0I8u=mI;Z+aK}LPz$!5Q57Iz&S-c`nrPb zoAuRH$@9*@`zCwH!7*oo!^Feg)WNk7^HL5F44}3;f+Ob7*;O9%jTQ~it{-3B4{s6=LI`y*_2IuEX5{FfuMyAJatq>l<< zemeq0Fce;L)s}e_*XWG+#BdDh8FCOAp02|6g#1Juun(AT|^m zq%ad~5%HiAch`qJOnDU7zhgv6@Ow=FW3NjYL)e^OgJq69hel0-bNnc7GcWoD&jHH% zkuK1c*5~!4M|<@GSVDuEv?72CyRNRj#$0LU>sSQzretmZ6))%PMe_pZybgWoRuKTq zd>%sp_Yr1?do_6C_rHJ|Bey8q+PQCf)rO3Z3JdBT>9GY7E8=i~j_i7={=0E;Jd@8r z!;aYH_(=##!?QovCZMQC{iNy%V8UJk^^qNV*lw6Pyk$eJx7s?l`g4$2ocMnZemrCP zB2{uTxXaGN$05aq0P(Wt#x@`>4|5Q8odqIkAl4yya^}kAmNQo`bjS|CnxyCf zMa_jVP3AmKechxgTEE@J=WbBY@THZ%-E;Z+dNUODr%nN1YTz(R;{z^oxHF(}cO4doR6f}b< zwc)eaYVC^qP2u!jXWV_ac=Sj%P!hl@;_F4U&*nB6t|D%&j)YrVdM*l|2H@vBH8Hu zL{8foy0kI@ECFzHx|JhcXj>!U|5|Ib`^@mei$f&mPo)W}!U{s>!35{H@h*tEUU`)M zeY*Wfl5WeM{*f`2DUh0e)B9l1dPp6q7^ETCV>)E^B~bRk_kTxkUkji;bXLa z3u2J#5A;1t&`0-2RKj&l2#5El2C{SM1AT!wV&Y>RBCWRf_^_KuMGD?JsNV#Yf)9p2 zR}PC(D3;;|GrV86+Y`Yx66f!K>ZrI2znl{tVSimYlEMe38xray&h>HPUco~XG@Jf25trkC{?zklRq{XZt;dFKHGGjfqVcpz z%c4c)mr*(lIC~fxYH>Xh4Spg+kdy#Q)!>&~dQ4YF#CrzoeUe4FzYu{Ie6|D0_n|KO zz*_Y1gCF_4%06?T)vvZK9a`^=zJnS=?O~fIeQL^w+mF9I&%H(B27s#n#gzt^;T!6= z)VX>+GdX20u9IdZSH{!!{Nllq{iI*f_2}IVg4R-_ro*oecE&43=ISGR@C@D7eQX!n z>Lc!TkxJ0#&wcBGUpoMi+t6)Y4Yx;k#7`PgfTyj4m)F-=Z#1Zl-se;1x`Vs6 z${9~e@6utzpAksJg8G~;R@IRjOh3>=&99a#T?AB2@l~BwkIX$MZMk)Y?tUh3hfe2X za@t@HDQ2AzvViiQ#;JN}V20QvhVR8{OpdOff~cin>E{&|#>pWc-f^X<$}PFk;5zs( zPen&KReq8Z#aU!#8kQH(BlMt{nOW;@j7C|Wf8FybvlgPrN?a&!`L6Ew@UtW*A9HXf z>l@{gn7B&Z7TKXZN3w!$^1@xaH4THUq3Ao3*kMX^Sg6><2dH0^sqGQ6(Lm9dZ^XSxj+ zAE-f<=mSp>Dkh5eNdTW=r9OIQagcjz^ezVMabte5`9h5%@?4?fsVhVfN~iQT<25&# zQglC~=AgrSdAR1Ta_}>_G7gs%?hk17&nC`Qtw_(_yT@;m!Y$IfK( zKbP<@uydXN(D`}dw2G|_QL5o{ zl{Sirrt0+L?4Nj{AEtxde_%`{M2@gVK&zvf2^j1X*O5J@`HqGcHinswajlA>hr&PL zYnhbGt0Xx?zJ`ste{}5YKJ#LHn<5fi#Bi=*^W@??!5;o@>(KM-CbOCTaonpiSgDu9 zdu{9k4A+Dvbh7cZyFrEc*dZqXQZr?T71#Yg{(Fq<#*<$zE9{9Eo$i_$&X3dA`#F;h z2#zqf4NoS7TD-n;^&fAXZ70pZwL8hb$Re1VbVuA#ayzT&8H`4Fvk4ULyhJn+?r}mVN#{l{+G|;_<=GBZ+Kk z*ZL>jZ3SU-Rh?hvkz1e7uUy~ej)d^bI>ugZ;tr%A=C@6!?Ab)mvP{>TM1V`jzV)2i z+^;+Tg=51Yvaw7@%2i*;j6YW^j+ANTxw-h;+}hRHTj880ld{I_?adq&?A+Qw&jy2* zpt$eLKt!(A6S^BMhYDBsN@5;!JepF=F=6J!-d&Ldl~Udo$-{{8Zsz(4h&*m~&PuF% zhX^1Z@UR#F`8U(^^px}jacnin zVEKsujMGcPA5p`&bvKY~&y($Q|Fgq*fJ{XtKV|}Vyr<)+>}**V!_^zaXf_qx<)0Vg+VzB%q2 zYe9~hMys^A3Z=KJySXo+hm^b{jhbZerh!wXW$U(G8k%6Ezc2fn;5`yRQnoM7^z#Y^ z)?e?mByHL8WFmt4BRp4aBy=81DUVDJGel!vpVNlgJWN^5bQ$Y$!+O%KLKvFDRO=Vt zIXt?g^ll2*rJRy2%Vy)gQ^wPHkZEc?W@;@OuXw%k ztO)EOWS+K=zrlFyn?5e}`34;!d!4KbeA)a(_9*(u{{7=uPPe+d4@%9Qe&3mtPkEl$ zdx#RO5x>mUas>a$-K+yHQw?LHd~a7Xz80`%c%ObclB6E)87CgIG1QucW!w%X8Y*^pj0- z;d;aGEV2tGZpO#|I8AExX8pjAA12#8$9Kg43xvvnPm-6L{xo}7?jN6f2doiDlRNAu zTzeY1*?8N$id$Q}NAmVq<(sA$rVoAL>XvKIDc@_S@-RPW;(L}#{=3Q=L|*0f((@du z;8iJj|6P+kF58=2YxpS#Z;F_k(GNFJK}@ijDk$@p@EuNh$w&MlqoY^JC-G3M{(Rp3 z)q4$5_k(MzyqS*m4;|tKFc!+tT;Ai$lC7R_Ff8EsCE5`UjmS_p+f)y6|ej}=pUr2R8ZQuU1c(U>4**&v>Fau!W^W0U$L?FG)UJQ;SoU(fY0l(Rwb&VT%f8egtn z*QRIx2IYZ%O*s5++b7twR-;b!r^cNs==oG`h`HW~%nR&;a~`)Z@}&_CviQRqy6SH~ zkhQ+F5=t4i-Za48rPVC)yj$k>^NiJn(f;DfL@QBV2zmP(E{$$PGM1Rv8@ah5?5bG|L$cXUREpxd9d3oz!O(JEhuEb(~)LcelHS@9yix}4X)*FeF)oMztqbH)7$ z;4KKg+yRP89=00IRJ!)1zlLVlCjNbi0e7xaz2JnJaLZZMg46kWR`6<>Pyy5>rt4w= zMp0^iuN30MbF}?zu*5DAk*V`*Vav~=^8MZ`Qz}jp}9@GNqgW$WtFSTJf zGXwJ~qXknCWC8lXWjKo*<6D{zTH%&4dW|BgVJh$){7r3sk~H*s+3^;*6ypNM{jHP5 zcl$I9njy!nnw6iwXob1M_el#VT=@iiPbRO%zzrsi#Y_uh*)10Qp&{}f=b97q<*IA1 zk1X*rJTkI)mvu^SeNA%=Vch+BzH9^Z?uB#GOmX0)#-e|Y0GuY+m+j_qr1IbY7~*B( z@Jw-)W*X|0Oz3d5rO6F(OxhfGX6Mzvd}C6!PzgAWKn*oX*fUZaJ*^ZFFF5@5*c~A^ zENq;QF96~7&Gfs{`+#)gnh*8o^gZnKon!zliw}>7>lO2|TA3j`CNsylu_P})l**|o z3>FIw)TZOn4+wqd@p);OP#=L#;c+N>5upX(RPb#-$-%&C!Q(X~(ay60HCb6^?|H?> zk0+0ad0}|Wx1&Cm{;!_{kD*Deexfc<5<-GHI4wBjMqAez3NxDOE(47T<*_(u$eZW&922B(bIMf4n|D-50oxZ}6Y6 zp)>0SIh_1th!(+iX#0zQvKzbB-q1@5q2RQ}IUKT{%WM+*-&iQYP!hHi}~eO zJdJlN1Ad7(;haQrOJ~RN`c{_DTIq9w)YAIo0Lk-7D_gE9W>PA?Pa6}2dy(c_9N&0y zlD%_19qhIL)*Y+}UPS-?>}^TiI!RG`&)7(Ij+C=cG$qIi&9Tz&(E~ z;y8>U4}Qq$+*RuC)_3{oD75osV$9X_(K~_;hB~|Y1@DW1PPzes zHXGC6@K-pcw{J}cHUMI0N7*kkz?^v2J3hd9M9(Dbln6e!m`Oa6LwIE#Hplp>MV8ge zO?ILlPRV5VmOJLhL8X_#XM`Rbn+tPO4nwVnNn7>75+>!T)Vl+MLYPZA&xyL>YrN;i z#j{3+;_QU4T`^b{qTbXMCm+=7BnvM1_-=-SCaz=Jf5ZFF$3i#Mkv_6ns7dT~!ygiB zP6jQ=O=B1nr_ci$5?Cy3c$rEA2{C+V9wsa$gHs>qC#QKzb5v%>Nuu3ilc$2XT8+%e zP?{+DkOjRuVuZ@CS-klSxh7pC3B~=#@f}t7P1D(bcA&GKe0F0GO`I{3Nr6*ezjEo{ zs~BKBMVi>-UU+j06_9LRJkOvZOXsq~VY(Ka!I#tAk&|jv5y&=Zt4b!QAB;}UgGjdj zEj9-r3gJvX#r0wi`*4a=B%Uf!Dw+Fpgj zvxNc3=Gpq-k6&h;Z}mkpVw-5IK(812Fugis0-me86Kc6_F~Ctz|H0q2-tkTZ3&`H$ z7g=Q~#+*$m*LYM*_AUzA|A(#5|>zeoH=DBq+-wfTB)VGEtdJTn6Yln)&`7ky3 zTLH1KOGv=yu0i$#Bp&V*PyMmfh?LjlTn1p<>byAS9(|LI)%U%BZ#iUBwRr*jvC3^ha>TiwSct%W9VxJb zuEYn+9UqG}mzQ%5=dto=%%3m}eCl_kh4wYWgd1z;2NzM2@%Q$$Cu9M%TKIA(>?cal)jp+DE9TtNGU9kjUi`)*d2cP57h)x8eN}*ULhJ>4) zqR_alYW!5M_|HX>oQ^$!n%b|3!e?!@wDun9A+lyNE#^#6M-zX@>4Tdpr&Usgp;zN_ zy)5gG82|uV)k;M;qMF}dHqljoi>}gA6JIVilKw1SuSO;HtOT+7tV%$%;73Xi9R%-3 z&;0$$9Q`6f1ab>!aL@3rKrpA~u_RO6?0~hzzioNIvqjs#(wut=M{E)@d|a2cOza zMtVBEI>s%$96*q}8*w|&u2#I}{3an}-`GV?FZEkeaT-T+>ywo>S=J+*m~j7GPXiAj zlBS9G##R5{tjS^;s2p#9&e`m=JWD)whhTE?$%a$~)=*`1>>UnN+b&~L+fr-REnA0d zM;;iWqLWd=*{NC}w!B_vJB6Ql{RyB=Z-)*;$psI;+xv#N6Y-WT6%K<^hkpD>S&Nl` z0gyo08$BHz<;;Y`VXyp0kNyYyLek3181sa;sR^$fj0QC=$TU8BhTu! z;|U}~Lqox1u+1~bwLZmGofy-astMHgiGIRpQe8=nmWaAN+RR#uB* zNfo|A#7;AtruhJm)O&E*Fvy<*Is;IpTvfhjd9sXc=-1#%0Ho|*5JsB2w+i&0AHPo} ziJZ`<$;73c2414x{yHXvD!6j71q!vc#xQNph2SS93imG)MLnA2YqiB+JkM-dj_vI<@(!ef2dLX%7k6l zD0~0=8y(W$fG!PWhy?A6Bp{-ybJIMD;e+P%+5LWi7?yw6Mz_F*=r^m0XJ0`$ZgE+P z4Wj}}Z?V*s!c_#O9eQ#CV-L@u_&j_$S(G`t8LQ!_C0tyjSUcBJTRbz+`SjCzfK3j5 zx@Go*e1uG}cSrS#__zIiU)RO;H)pdo#NPVRXm~3CsAZT5a^vqRrOGM;(crT1M>9>6 zzUXZ>PI4-vcS8jrTj*V<{`#r=j+jst0|#CgfH3Bk2T7P3mNFv6ntbV#(Iw3LqauJn zIpq%c9w{;$=~KOw&(pt4l7DbjL*Ks(*vS+3#Os|0H2b{x7$IU?N}DA4_(^+v2j^J= zDU`@>7S16Z5=rfR;mnGquoNARY+oT4OLQeqb`V){=a4`&DX4&MA!$>CH>je*!cvg* zSEO*NMR;@9kE)2yhl)#`_0pFih7akFYm;%1%;78%M&qrI2R?{~^e3-De z1QFdhDU~o)E^}U{US3|}p)#Wpst87#m}Co#MfN6Ax$u|tungShJnbx`OR>o1y!Mr- z9v-#q6>K5=*FtGzI07T>rcO?0i#zLiDiat?uv#7pV5IRv$c5uy3@zH9-SupxyZge< z&25dvYd?CNJ!t$<$^EIg;RFG#lYe7&{@(dN^XxXHIN~KZ1NZme`LDbUx)-03vt5(j z*kyTk@sK-Dugf_$41P5Ufa5daq@6ZRkcu#Sf4-XD`*$hWgKZ*wF-0WWKm_ts3?_LO zkXIRdxyRa>iRQ8B5A@AkBmbN+9bOme;0iK+c*1g;^{IASeC9e99E64Wtf6wfE?+U# zl7LZpH9RF~K35r9IfXBH8!q-SO6y7~vLxwn#r`otlnEf9jEbS|Dyql_L29smlWe#Q5 z205-eNd%dhm=yP=+)$8t+mn#vz517Cl{Yn-b#)E?wFmn7J!a0LZthpb$C`DL^Z~QZ zDysw9IvAg%v1**)u|10=ye}LI{bppNrIBo|ajJ*petLX%!w9{#tD%va*h$M9E4)Sr zL?AVT=(SpINF`*v4VRc%DB+L0r7qi=;@mbj(qK#kmr5{S5F7HZj>yG=z%_tFd2%7&W}p7z!1Zv}kX?%*Mraq-L+;THBXh zFkqug*25fPus@K44@p!9>AMpTu2Y{EF8El}V`5%;{TQ^NsE8q`3koUJBPMxjHpPJM zr8Z?fu+)2|Hn266l2(fNoKH)YB8)x^q2}L`aJG;3-F2<2YOA}*kXOZQl@7XZWQWTn zHuGg4lCPLS4#Da!T5MBt5qxp18i{sH%`HC}OL!q@0zk;;MUQbq>gT3MpIn@XozA4| z{@aAU?d}PC`_C(+AMyMDRM^|91qc+>D_~MdsD__oc#aY-49+W#le}!-Hk-L&_7j}Z zc1uFjQcMtyK4*1XFwxG#jquOxk`sT&*UefJO807f;8mNI zn?!=QvlsrFa%;6WomjyP;Cr;#Z{N1YM$l)m-4l*Qs{T%+d6r&YwUr$E_~YYaargp^ z-F3e%en?L}FGJ-_zYYwjlbt*b)Mfu8b{nL08gi*T?*2aHV3$GWZr62Yx749trstxf zqk|EaNlGr!+3PoqsG^uZzZl zTlDWTsZFF=ruiEv$M&TZA;qo{1L!zHRo?^7Q% zZDWa;2!TKR`Ei8!p}6WNTaArC>Ct`PL)kzaVb6P?@32ogLonLz-~pkk&nijMoluR} zR%~Jnf_<1O+Rt&?i zq~?TxmG)fqS~XyYMkjvgUK zosbfrcN|~N&Um?)`I5~tifYJ~NWSld$^lZ#mRz35KPx^m$3+m!FH2EBp9F>h#J zkM(ft$$vUp$5RpQnoGS^;|<_0aI_JkE7o4AO$)YLsR~P>NaHy8$sD zgwRT_fCd#*GlK)uN%{T|8^vc}0ZLeYxTpQfHIlWbG%D?KlzcKL6?uD_IB*XWYPPO} zbHdc|Pi_>(B_>xwfIW9 z=(wVQ&i6$`HjUGt7xqjKoRue}FfZb-;ND)*2{iWL`=~u3pR24YT z=d+g18|T2k(8w_nyy9wTD&pWX;I!=*8+?}fw5So?H>LxB#ewPAuuhSlp5BPJ9TYKe z-h9h2BGL3!E+t0P^v<=i=_QKk@5NhJY=8fdNa&A6N?-|)31`z^44~xD_8lq3%BWZ% z!|S!YSw5mJQTksQzwHa%Ia!@MnyO7F(ftETT=piv1Pj9|Q7pgSuy~rn`@i)C$#|U2 zd4gjmq|uqIr)tNP+^{71`YX4-JXm{W3pA-W0;%6UYlE%sEL#n%nQLoCSfMu`C@in%U^C6CkM@mzv(~GnV*TL*jf5BkkEMj7v?f+< z`RRwvwYZG6^}b2Cc|dO-OY%q&S=uA~jT*ACP3X6;a~m352`1QozWT+J+$+k$n3c?M zqo_aG(B`;&0N*d_Z=gpX6+x9sPPy01ri!Q%hXv=zQiHS$VIfrodh;>wQ7ESQ#1(Ae z_K@Guz{C55fhM4LfmFgaNmPYv@ZYS|w}#(fqa`1}(SLR{uDe$6N$0tF5~)SlAb7>W zj`LJ|(;=}XrN1^_MSe5UK;dN-;-&s!NuYPI_nTg&rCHCL41k8}mS-u_IZaAkU7d=U z-5QnNxCufW`9eu@DCu`?6@iNd3BwNQR>l%A?B-*p#$;P;1xP95$1|}6wmez$^X6)q zDdXYaw+DlB(l4$=?vw+>Lo=qER#hrhc3D(#*byb=ikNAVQT*US4cRbyTe%hO_2q_E zZPq@_HEyIJhBS_^_Z+jBx6Evm=8O8+z{FIVWTq)DYUvH$PYLL_Ha#I3KZo88VDg0$ z0j6g=-06y!W}9kJzGsYCiNAemQU3D;XiedN74Nv`D7UuZi0&Kl3x9DpF){h=kYYo; zeWwoZrgd1-31Hx#{0<=T2GD+Qr8;I1v2oxN`Rmcq11vuSSB=bFG?l`xqIKP+GWmL z-X*g?l0)vKDW0?aQtV+WzIJMRhYsac&(E*sxB9ihn!*14Tu$FV^?|B)1V})zneE3( zQ@X91`4!w9tdbRzICj(^e6c7br}e_?hi%y2A@Ax_EBvsC1poVuut9lF2WFp3`+MmYEo*PXU4@%-?*EUun zdfccXo5JRhW(5J&S_Dh8R-9wQvI=oj{lU*ah4i_nwG8yzMvsK@1|ty$^{{tRka5=m zTa>)#bc!9RGVfxmGqxY!fj{{6Z6PpK9i&Ahs@d7?L14yWwunvFI?*=UYxHB+ex`*k z^dW`JaiKaR8F-t&oE@Yk^-*d;z$~f1?5|8pWfK=6FufZoNF$l- zrvZ4;Ghctl^}zAWuj_y{wmGrSCq748eWzhSvI!VK2D*bXb&&N<^Fw1FDW@RyNyhnU zqIkV^A4kT2YFqxUqr|uV3;pQ%yCO9S3M2uTZqIR&y5)6?&FfGcuj{PH*mq9UM^C{fOAx4WsykqT0_2Y zdDw_exz=;MIHR9<2%w95FwPs4bBAX9UqItN_^Y@SQ!Jc5M)`=w=5Gs!dgRboakfWU z#@;X@lCROnDKqlL`Bu0Ue8oy&R5611j3Ab2bzG<0%Cfe4!69E1d7i|Pq}C{&R-#|5 zhzV%e>`7_EQaA-DzwRNtS@J1XZi3G=j^;Aec*_L3z>V}$@~-*qaHUa3pD!$W$#DG7 z0$dHLFFhJ}<$^*mOo^e1=|knk1wJfUuq%i0g~z=K?XDrGViZZ57K2KrBM8SoJXjXI z7`_8XTt(9Ku$+TPRefetd&8>4FkL?f1O-U-W6b=axmfa7qA}&8>+jFWAsq{F%FN1g zg%JW>SPi#!c6Pe7aG0i~d9nd&`?eEx#SfcRA}aaGzA+4I@{~lGA+Hje9IxXX_u{~8 zy04Kv10rAa<`*V2Pf^_v__aw>m>`u64IZ2kCOkrcpx1M8UOEa^cHq8()bH1EEz36* zRhZ%Mqo5KQ`hA4vA#*&2Go)xFh;J0NK63uA31WpWV{y)kJ_;~PgsLg=?hLf ziz%*Z(vVXi-fafM+?HRIXnne4?dHrc%D<^L1ryq~fEo=DgD1In#7M%4Yj zg#W(kgg#<{|J|AHm8$qqEb9k-U;2JdQKrTDIq5JGv{jKma1x&fLX_Vo7K6?CgKGfH zQ&DAety~@qhuDcq+{upG?g3?Tqd7|w$VEJ;!)!>5M6obGt<&4=8r(&y$p78jTP98d zijdV6y1He5L(@LF6O9Vhv`LuTo8%LO;B^t4*IlJq{H0sOBO&zi;;!=gcFR?%TaAjn ztsgP)KOSSIsSp3X3Gks&cbCC?2JNpbaXz$Ko)6vbV01B#8F9k+jrt)3cDQZNxg&ST z(5{gr;!pWM!8`3l^y7C-pEWMXNyRPaR!6l2`XTz*XsM0*`@ymUSs5$<88jY@VIvBn z`|#dHAdkgMvh&!`(BMA@n}Cb6?&_PuExx&{w307?Alw!OnB)N)us6INNcMo$PNGo<3ItX}I${z3EWk)bf9)l> z4Yt>**yY!babrvLbs z#7CuDlyR*O3WnqkR%_e0M{GU0-10JZSs~Vjevhbt6LieN!mKPok9STFPfu~cB$}U1 zcGtZ(%hjU<AxY!ngp{N6?JqOHkR2F< zePq*82BOri?~_clkj#VuiuP*zjS-+WB!eUKB{u<$>HV;?^zcUpz&C@RI+;&_V{EbP zgf3^8fR02=-UkS5?L9piU7S+)h$kT&7I9(U{3&ivBPT7HqJU#t^nEFo@MwCN(0J)K zwQ)^7-orZ}w2YrW1&iljc!+5V=mZ?+We{=pPHm>~!xG*|JotA?!v6uYxX0uSY*Mgi zQyk1tA)dS$`n7n$FF>cg9&fj$(y<656(~0m26o%ma~RhvIMrg- z1EUKUqHoOL2RVy};cJk~n8O5v7pT<&TEEfvF z%yR%I3{L}2Y{|ldE4E1pguBEKq}plXx(OvT%O*9bw%hxiQS0)W)`}Or)oH`<#z`wV zoMTA59K)Gm)?1B+&7o~8o+I5?sT|B!)fT)cmsXV*-{=d8pX!56bann^0Q<77948hG zz)w+TpQ1#QrGBl^cOU7o)DsXuRTREqM1W_zPzyfCS?B2JXqPvs9w2-UU^YMpVbf-7ee<^b&qY;$;$XG{gX}x z?ujkzkJFt`oM9WI_j|$Mi>o|)FQZ43i$~}|H0}#$+|*&|6rm#etFe*q6syu|NX}9V zkYl$1Wj=9&b|@kcIAfqaH6cIwn&OhpU)7`1(TUpC9(9KJ(A`Qo(atbYgXd@MR6l9y z=p2Ke@DUe4K>~%a(@4;NkAqD!UflerI(6w=WBcJKBO9VH(xsYMbi>#Z(hNG)vU6 znp-5%hEF*-&GLqe=GJ6yZaO!7U^=T|HX9KmPJUKa(jANNfexo{K`jBWp-SjaVM+fk z@W@=^#c;Qy{+V4yAEOo$7$@N(Mod9pBoRW46jwW!h}QW;M;h)Yt%*b8EQ`#%Bl#)w zj9ouS&LOCJD9sO&8A7gxElf>jIO7!tb9nx5B{11m-d=8~Tz$k-2r5!=ZtgxZN=foc z#7E$R7{@Q{`Ti68kc+rB(*n?Xv1ng7GGDb~xG{S9P^fk0!l4Fb;L^dZ(|~>cQDTq6 zJ^eZK*<(akiZfI*@Hd)ODg%#;Me*urVD~}s;~SWOS9MH*-9Vl{)E68`W?$2z5TH4z zWOBR)2A}63gAMz{8ctX(WQEM1a_4?!PU@}LEsNvB@nI+Qz}1~k31Vu+lt)_a(rYx9 zS_LQ_{#{loZY+L*bZ+}yeE4k}l-Zo`J0(1ajGKR~zrECb6X83KM#(igTsCPTaQU{C3{RQD|g1 zicBX)IW?pH1xFdm<{My32#BalX^FX=DeHSJH#aD6k__@uNPV5V3awAfMpX&yzVTOv zZXX5*VUpCK;y6X6Ldy>s8!_1_GvaO*j%_FZw--R%&A62DZ?a??0l@ZlK1tAjevJ*x zJwJNoEVr}+Le{+QSa(r*58Raoe;_2MGjooex=&rd(yM^RHIg>tk?RZu?76C6EU|rhsrcZU?J+-0t9~u_i5{jgEF}}nurT8B zE2iEZFWgFIJOrMNW6p`zLd-x*%fh?Fd@lV{CMSc)OP`ovSo`^VPJ*(s@`?)U*t>zj zktkv$nn=K~!N2?1FdM{oxUF9*tbvwL(c$28wSl!g!ip>~dtzMXEk{-3cQ8^a_0Hx< zpfew%>HX2I0RXOaFW+lEY=i5nWZaw{!S~@r(tq)qsP2>tD!Nt6tik?;rERXdQVz5e z#LLWh4CJKivvq=s$yvjJyfNyw-yM|1rVehLy+t@W5~z6SOWHoydcqh1rkM|acu}4Z zVxxTE=9Wlhd;9%+4Uk^O5EX3L38KL2_PZR zXWrH*039enYg*`Y`PUR%!gpL>l(1+4&2|Bwfib+0bJU-#e)J>ElfCLF*nq-oX}!Mu zY!KbXfx$q0AOByq)Xrl4%7)xtw!CL;)!wmbwM80y!2JAktG?0GH+ZO?oCxwo~4aR;rJIiaP5ip+$@DDA4g_z5HX=3(#lSpib9tp(Z+u4r+ z_}(_CCqq<8U`^+T_ASN}v>sb+~Qe1nw^ z5Gv6E?r=R5(7nJEK$xsnHb8Wq11xlKKPa;SNe$ZN)*_<*OeTIa`jd&a40F9SO1Pvh)Iv7%|X zv%v+DHV`fVgIVtIA>thn?F}W{HPKOR!&`DaP2z13{9=p(*E(AiUiH3Q?pB5*^a56s z`&S~tium%)6g}-$t2cu>#PXt`ag!<_fxaN@!s@$-88(rZS|Y<8 zGk)RBu5^Ieku`z*avZ;9gtlFGkcA9XM30!|R&XWciU2er=rv~RtLstyMj|`E4yPdZ zo7LSf-x;O+ESU)y5CqUG2&)s)*IHK=zAvvSMlwu61fA%hr7_+)JQ3c_Y-zMZEcE5; zEdS@nVvVzbD1Lu{qSE)%I^vpm31%j59ZgNmFS_nX7Oa5>AsVX1qVgbox@bqP(gozXuQsO$3*JRO9w8kNvz#;D0YtGebFVTCatp2&L6B_ zVpT`k$uN{gRv;7m4$>jo3N(2;gqeU|YSRWCr2Ynkw5}ZTk|2pvnU_@Kv<Fpvg&{=EN>GNOXhZQ#&`3T5YFW!9MAG+mQ1U;!7%>u_>SOT))4;KvNO*iH zvQlLVS^0Dhj8Gf=Spm5S*+Q0pk>^X#r$JL4@9;C~26ADg6K{&U2EWOy#!DUx{#-p* ze2_x!+t`%_GH--+<2wWpU)?*N76ppTu1<6m1dTip?w0Dw{iq3MsP^$!?H7`ppEg** z&>e@1c1^R2CM3g;@n6vW-ZYj7(wxGvvK`c0){TeXp8)3=7Rii1LHStQi%a*37i4YcB38oyO*t16swdYfac>h-D-#=g}8w zNn&JUCIelV@IR&l#-*`9#zfb$Am<@nX92g$w%wBo^cw0DXF+o=tv z`$BT6<0+JZrcZvF@?nQwsyNa->32iMH%~8etasQM1}JpaR(i;Lw@*zo!bW~w^>>G6 zb0csA4qTIb#|L9-A^cFG%Pv~(yq!q_N}uQn3eU8W;B%Rn>5Wax@EGMh{Xn}37DQwk z;uD#1xX>wn0r^zdRC&`DM;R*}ww^2SFAN7OjQV@QP&H*R@Y-zZg=k=~N2s^~W(uX_ z;_*EeXgZ%i={>BpPD%`sW@eFpbEB3=B~H`J!7F(C2X*v|`2$P3pkbp>;46kJ93r_M zjt~p?PC89e8D>$gy$y`1(04ztLPGC3ql5jA)K5zl;0b$&^YJ%>F}Gh>2u)*MfPS9m z61VgM-cM(Hun#VGKJiYN3|gu_0my4P?5G6)GIM|KIx=(3u^v3YXx$1G(X8jNbUh=a zswUXVuNx`Ujtdmt zRuJM0ddFTv%Xwo*AGgs=Ns@g2HH=9*gw1me@Y%z5cQDMTlEh_VU^-$p(rzFcieN1# z^ybjTv-^y^lS)k95RvDymv$?tOD-OcXCIt*wl$I${!yEkRkE&xhUSi6+^613h@Xxy zM<{X`8`>|%ivosYFEf0)ID;%jdA^O&Oz+{bIsSRgrPi&67;Qn}H4}N%Re#fv#8;`L zF-_|Q>8t4sP12)fkn^k*wbVd&Z^uZpBocUBk{a%~TWZSMTlKek$Mv~bSA3uplA%?J zcXEEJkApn5Hf+8$E+dw7+$U1K_*=muEaG8SL%La1yD zkyk~6?~!x+JAP-gi4*`z&IcnL6r{E7mT!8YR_1mgCa+|eSw|b;Jjojai{J7|5g}>5 zv!}d&LURMP6^4X26LpreAAW!Nh5((;`PE_olr>#l#WZZe(OHD(@c|Yw&^AID%xz3kOZc8p~h?JC?t6#5j3d4z;TY zSDEPfK0$YZH~TZ#tY&i+*3V$YYgzE#%Mb}yh=Ws9>@Ff9$SK`LUj@d%!JvhaA+ykY zi2)E*pS}5^Gf6@{-oZgZCB7~VHWNSD#zr@dziwyaQ`=9@al4B-@n>2KnC+|4<*U?+ zA=cE^^h4gG@-lt?s<~%qz}n>m#8mDC_;aKEFY6GLL)o2#7mtL}rP>DtF@R9l?(%Z( zJj(8$B3oseDpAWj=5HAyP#w!~Ge-)i)S>2^v2D| z_`9^hr^07f=k-`P;xC#a2kWggVHEbhuk^l$h%%@s+&Tal%oJQ>vn>}`9QQS}S&V5DZvE#{!P zG_jqnr@-1Mx`C zBG;KG*i8S&84bE_tHHTynvy@~xrAPsUA7YtP2)5*t~2T~by=1>;=HvadTsRTH4n9v zj`F%F1wZuNFB6Aik0uBzs1J$?aBexs2im|YfNi(=k0T=6urZnMtiL*MA~(I~z*tkN z?tAj9l%a!s=p-VhIPBL;VS#ydV0L4-vm~<4UwQLccs*7YnKM6a#1Pwi2Jl6&0waOD zOImft+Ld(?*h($ZKE1VdzM^tCkTU+jnEhH%-dlIFYtE7Wm9bRd2G`;>Qo*<*{oK6Gj###LTF^gdpFI$ z8?%}GLp=ky9FXlD|lGd@H9HUTYXS`CDdH(0wW$ zr#lL(qhg>;QVFhsq;KIDT2LFOzR~4? zrgd&T>9?+IY2Tbm3{qxmaDPmQvIhkb3_}AvFQSOuGJ$B=6kO4aP(+*cB{Rj}BwK$F zfNVLsL>@Gh)texY;xc&fd^Fd#4}fFSc}%R>{YRLV#P`iIl-@mP$&XdO!_VDXI!;e~Cj(UIkNN%BWEWY;x)0Y$>DShO*yUn4|-NqFL*t=&N417~)9e@~~-5*4l# z>R&vr^n~Q!yS*1pZ%k^k1c>0?;~sI?y4`a+u{h8kBxn z+~f=Up5gd}Q{)aO{!^OQX511YHj(?f3QU&qTHf1hmtKh|=f3x1R9`19p85}@`=sJv zau!!8OW`6bZHlPXijgZ+?E}^l3~2sPR;)B8pyHb-av%Tp9)A0%8(b(BL-11sdB}B+ zE3dLL57}c@NK=!2Y#0^lFc#)uf$e2)!LJQPF>*zgUJNSv3eCVhw)@!*UNXvQ>!{I+ zEYdGl74;#)Hi7@vskn-gV8B9aCr#Sl7eG+Zios?A$Y$i%pd=LWjj6o>bBe(DU%weR z|C9%$fkkLip3 zE3^1c&}{>0L5bOnL2A7TVOdUVQ=g(TeV9En)H zFlO#)=ZMU6fj`@_91P|*(Y8OnvgyL@9X~C@ z3JW6(eB^xSoi{RDDiVuRe5s?2VJesY$b%`L{hdcT3C;5al$-CN`%l<^eTk+N3TRdK zC2hIwzuI7+i!9hZpKE91x2xAkI2~g=-an?Cf$-I80a|1xIaAmc@p3}bc?0vr@i)Ju z*`M{EQV2WZ^^zS-6wCHaoRk&ge+j)_fHH+q9IQ>}DKJO1$39Lr;bx;0qDf~Ti=(}5 zDuzeYw1uYFNgJo~A#HoS%-5(U;Fu2FEfb4-**1H13~|#v8pqzmVZE2)x2=2r=*wE9 zFk2Erma27)+DZYc6vGDv4>$&yL$kNr!v%ynW?{hf#50Q{=L#Riu<_oUFXZAk;J@&L zW{eL0kAq`9quEXBQ3ZmpF3CO}1(K7;Mo_S*PcCV0aft@ZF>U_`cxU!~OnIlG>t>$X zUk8V%zIBx=vsEMQ*u8<~V_2X5dGWzGF5Q*zH4>z@Sm!fQWH#d;=!4|Pd@*e6RGK6h zQk9j3`~l=W{`3CM)lG_zrx5W*K?3;S9vX)b2~9*h1HSJDkUf_J+U#o)QkeL9z_!25r0j4vvB zZfwI(Nhvb73%WmlQ@v54HOAKQYIG;a48xlNBkq1U zgEvJ*pIa{$=UQ8R*pp|TFV8A~&{CI^`^?ASWv$N5&Evgj< zZ@usl`cyqC|44pnc+^1ZnHufQRb9>;(6~xWg>m;($NB(&tC&J|Tr@R+GH#(u*Sc?nux< zN-J2G6GRFo@mG9_No3UEa3=i-{^>C5FdB1$x?(^SIk&kug?O>nb~bvlJuoc!M@0qz z4LixEDV;U&8jO~GIG7$6!WHtuGaOWP~ zKC9mRM5@P30PC0X?>PSM8px!Ff|b6mKPL$N#r>OQ>@`Ltj`xM z-5vt=DDU`6e?$&_;MU!hUtcx9Kyh!T%ZwegHE#n7j!SusFSYl_lsQ5Fb9rvm&>SUB zjK9jh>2k0H_i>*Bv^7Kz|G(A7R_#~mH`ySyvBpT^Q0L^P{){dQvTwf=1NHG7%PyQo zn>{FoyKxIuG(-1GsffDw54`d9r8WZ%|0glXn+nL{MGd3|v7tsg=YnzCl4ZhMi$}>gP(6iChqne4t zGQkR>1*s&z!@vlP^-Cl<73bo&)ru3iwPJOlO(n5JyfUY)6;mlb@Mdqff;F!{B}Ui0 z!5oe`Kf?eXqWW=52lme6Z?1qAF(SL1E$V+UMfaDL3#A*0yF z!=rNP&2@V-!bautei$P;X@(}D4*=yke~3r!0!A;>W|-BUn72lwGkAC~Knh56?Id{q zIH@l>dX&PkyJ1>3(T=B_F~boFczA_vj-GgiHAjRwEcZBU@*?+4cM1*zfc}u4|2{N0 z_>7Dvxh!f=#Dm|+@aX>%0bIQ8lt}YlDm=eC3_r<7(8PQ$4-IZr-X*KMsPygpvC~p> z-Xq;$hPU^Ud6_}&N#J;11WCm>5JgAdn@ClSSvYPUy1U7qlu_vRrT63w^YpQE96T%} zqjNigNu25Wx>bxsi_sojkC3&?V)-h8rNUEdS!g4!B{A2f3Pa7tO16FybUNzYJa&u8 z>K=T*ibR9$PR!uyH%T@H8)0btF(UKppgXPB1xTgRRR#R;E_BXZp;iLBfjqXE?g(xi znBf;aC57Zu$fZMfwMHTO&&LdA+@CHr>Ss}S>@FRAXUe8wZKa2}{kFG%gFhWy;(qX8 z`eyYn%#+eOH7{!;aR2;xN8SAN88VmBMRpiVzVpdLtRJp!&-!fY^7{$9 zXYo=e-=ITcZESgJ@X+(F>`4QyX0yWJSK+ft;PNm>s%*nena9XYf;>~E{YxUJ(DAf1 z(v2$h=o*uqqd3~VUu(rs9bI+9h)H=*y3=UJsJkjg>F6u#%D;(1`4<{X*?F%YX6B82 z@dq)*{a{_ zqqrV8_2X^U-$?|XsqAFrKUF@?N=h2;>G|CA;Xa*FGX?9ZG+c(M&aRea9xqw~Gy-t9 zy4&=)!J25BX(f;$$Pv}o0FF{plpv(1EY7!JN;R>g8LJ*FTBhuP=e~ZEMrgTYHbfjV zKSCF^*WjE)@je?U1n6xfFt2;=<{=MZomm*VdfTLmBvYYMYrZBI6xBK?Rji%+QT4Cy zn}f1WS&BciNh!@($)RkPZBF6dyc;Fml8~DIjPGqgG?a`(COe4wn=|JreWM%7@Kb1V zG$?|;e%Zg`$4~I)==1?dGgG>zbTt%C2(*|L(F`MQ-Vq$9mv!+rVs6j4)Alr zf^2+LLDkRP0zvY|8-oy{lHF-UE)a4aV=-ooy?&2O?INxy!f1cZm-qnyC|Ccz5g_@{ zbe;8od0&4Fj8$#b<=OeFCyaU_4pCT-`LO09`%Pn*hnJB1A54&ATdOH>x;Y0JLIA46 z6PB~QL5omWcQ~(E=4IMc%kH!-HLmJj=yXZ8%pdFJS@Dku#PlO8H1IV1Afl8Vgwhs# zK1@5(df&#u3D?`uHJfq}P4NV^(TizV5IlsGWQ zrY10T5G+_x+z111+s|Y87cov6tWUMi?`!X*eaWXfk<$1|ov_Cx92R8BADDQe-hck2 zO#B}3rqA!Sl<{r*G71M#q`)n+P*bN!S9Z88$rL%dtF-5&uEvM=pf$i$L3~Bi=FgCN z>M0t<7%*})LKdUA2h3@_iUKe{xpX>Qv9c-~G)o`AVR^dGc2`&N57~}Cg|*;|@*HvY z+6^BLu{{s!-1jGl;cbU&ds5cvyD&5S=xQh@tv=}tvTanV+k@@;1gGqh9H$o#Kl&>k zfak`Q^A(Cdez8;zx@p0j*R7N{22pWk2}D>{YK=#H?Grn|!_0R7y|jh^BD%gCV9yjL zJTK&CjQnBr>f@v9M;T@@hqL040>jb6KXMW=?i`t1=&e**^`}ebK`&2)P@4M+uT}Y0 z!H=5qufeR`>XkQJmTt!z?Kp)qEV#xp5jYegWS4XyE4LGjXzOlhhvtLo?2DDX1yzNJ zaDUVc-Gi5G5jiE0xDOpxTNPf?%L|Ov{9*6^o6yGA` QV;KM?d3Cuu8S^jy10Kv*ng9R* literal 0 HcmV?d00001 diff --git a/manager/media/style/default/images/misc/logo-navbar-white.png b/manager/media/style/default/images/misc/logo-navbar-white.png new file mode 100644 index 0000000000000000000000000000000000000000..41fa6a72bf9156cfe78b9095ed07f7493658c845 GIT binary patch literal 5867 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 literal 0 HcmV?d00001 diff --git a/manager/media/style/default/index.html b/manager/media/style/default/index.html index cfb7d0fe..fdd37917 100755 --- a/manager/media/style/default/index.html +++ b/manager/media/style/default/index.html @@ -1,2 +1,2 @@ -

          Unauthorized access

          +

          Unauthorized access

          You're not allowed to access file folder \ No newline at end of file diff --git a/manager/media/style/default/js/color.switcher.js b/manager/media/style/default/js/color.switcher.js index 655f19ec..65b250c4 100755 --- a/manager/media/style/default/js/color.switcher.js +++ b/manager/media/style/default/js/color.switcher.js @@ -1,281 +1,281 @@ -//Evolution color switcher -jQuery(document).ready(function($) { - //appear the evo colors switcher sidebar - $('.evocp-box .evocp-icon').on('click', function() { - $('.evocp-box').toggleClass('appear-it'); - }); - $('.evocp-box').attr('unselectable', 'on') - .css('user-select', 'none') - .on('selectstart', false); - - //vars// - var bgmcolor; - var color; - var menuColor; - var menuHColor; - var alinkcolor; - - // Get text color - var my_evo_color = localStorage.getItem('my_evo_color'); - if (my_evo_color) { - color = my_evo_color; - setColor(color); - } - // Get alink color - var my_evo_alinkcolor = localStorage.getItem('my_evo_alinkcolor'); - if (my_evo_alinkcolor) { - alinkcolor = my_evo_alinkcolor; - setalinkColor(alinkcolor); - } - // Get background menu color - var my_evo_bgmcolor = localStorage.getItem('my_evo_bgmcolor'); - if (my_evo_bgmcolor) { - bgmcolor = my_evo_bgmcolor; - setBgmColor(bgmcolor); - } - // Get menu link color - var my_evo_menuColor = localStorage.getItem('my_evo_menuColor'); - if (my_evo_menuColor) { - menuColor = my_evo_menuColor; - setMenuColor(menuColor); - } - // Get menu link hover color - var my_evo_menuHColor = localStorage.getItem('my_evo_menuHColor'); - if (my_evo_menuHColor) { - menuHColor = my_evo_menuHColor; - setMenuHColor(menuHColor); - } - - //Menu background part - - //change elements colors - function setBgmColor(bgmcolor) { - $('[data-evocp="bgmColor"]').css('backgroundColor', bgmcolor); - $('#mainMenu li.item > a').mouseover(function() { - $(this).css('backgroundColor', bgmcolor); - $(this).css('color', '#fff'); - }).mouseout(function() { - $(this).css('backgroundColor', '#FFF'); - $(this).css('color', '#444'); - }); - } - //store the color value in a variable - $('.evocp-bgmcolor').each(function(i) { - $('.evocp-bgmcolor').eq(i).css('backgroundColor', $(this).text()); - $('.evocp-bgmcolor').eq(i).on('click', function() { - bgmcolor = $(this).css('backgroundColor'); - // Save the color in local storage - localStorage.setItem('my_evo_bgmcolor', bgmcolor); - $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); - }); - }); - //Color Picker colors - $('.bgmPicker .sp-top-inner').on('click', function() { - bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_bgmcolor', bgmcolor); - setBgmColor(bgmcolor); - }); - $('.bgmPicker .sp-input').on('keydown', function() { - bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_bgmcolor', bgmcolor); - setBgmColor(bgmcolor); - }); - //apply colors - $('*').on('click', function() { - setBgmColor(bgmcolor); - }); - - /////menu link Color part - - //change elements colors - function setMenuColor(menucolor) { - $('[data-evocp="menuColor"]').css('color', menuColor); - $("#mainMenu:not(.show) .nav > li > a").css('color', menuColor); - $("#mainMenu .nav .label_searchid").css('color', menuColor); - $("#mainMenu.show .nav > li > a").css('color', '#444!important'); - } - //store the color value in a variable - $('.evocp-menuColor').each(function(i) { - $('.evocp-menuColor').eq(i).css('backgroundColor', $(this).text()); - $('.evocp-menuColor').eq(i).on('click', function() { - menuColor = $(this).css('backgroundColor'); - // Save the color in local storage - localStorage.setItem('my_evo_menuColor', menuColor); - $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); - }); - }); - - //Color Picker colors - $('.menucolorPicker .sp-top-inner').on('click', function() { - menuColor = $('.menuColors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_menuColor', menuColor); - setMenuColor(menuColor); - }); - $('.menucolorPicker .sp-input').on('keydown', function() { - menuColor = $('.menuColors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_menuColor', menuColor); - setMenuColor(menuColor); - }); - //apply colors - $('*').on('click', function() { - setMenuColor(menuColor); - }); - - /////menu link Hover Color - - //change elements colors - function setMenuHColor(menuHcolor) { - $('[data-evocp="menuHColor"]').css('color', menuHColor); - $('#mainMenu .nav > li:not(.active) > a.hover').css('color', menuHColor); - $('[data-evocp="menuColor"].hover').css('color', menuHColor); - - //$('#evo-tab-home.tab.selected').css('backgroundColor', bgcolor); - - $('#mainMenu .nav > li:not(.active) > a').mouseover(function() { - $(this).css('color', menuHColor); - }).mouseout(function() { - $(this).css('color', menuColor); - }); - $('#mainMenu .nav .label_searchid').mouseover(function() { - $(this).css('color', menuHColor); - }).mouseout(function() { - $(this).css('color', menuColor); - }); - $('#mainMenu .nav > li.active > a').css('color', menuHColor); - //#mainMenu.show .nav > li.dropdown.hover > a - //$('#bgPicker').val('bgcolor'); - } - //store the color value in a variable - $('.evocp-menuHColor').each(function(i) { - $('.evocp-menuHColor').eq(i).css('backgroundColor', $(this).text()); - $('.evocp-menuHColor').eq(i).on('click', function() { - menuHColor = $(this).css('backgroundColor'); - // Save the color in local storage - localStorage.setItem('my_evo_menuHColor', menuHColor); - $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); - }); - }); - - //Color Picker colors - $('.menuHcolorPicker .sp-top-inner').on('click', function() { - menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_menuHColor', menuHColor); - setMenuHColor(menuHColor); - }); - $('.menuHcolorPicker .sp-input').on('keydown', function() { - menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_menuHColor', menuHColor); - setMenuHColor(menuHColor); - }); - //apply colors - $('*').on('click', function() { - setMenuHColor(menuHColor); - }); - - ///// Body Links color - //change elements colors - function setalinkColor(alinkcolor) { - $('[data-evocp="alinkcolor"]').css('color', alinkcolor); - //need fix and move to dedicated tree panel - // $('body:not(.dark) #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); - // $('body #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); - $('.container-body a:not(.btn)').css('color', alinkcolor); - } - //store the color value in a variable - $('.evocp-alinkcolor').each(function(i) { - $('.evocp-alinkcolor').eq(i).css('backgroundColor', $(this).text()); - $('.evocp-alinkcolor').eq(i).on('click', function() { - alinkcolor = $(this).css('backgroundColor'); - window.main.location.reload(); - // Save the color in local storage - localStorage.setItem('my_evo_alinkcolor', alinkcolor); - $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); - }); - }); - //Color Picker colors - $('.linkcolorPicker .sp-top-inner').on('click', function() { - alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_alinkcolor', alinkcolor); - setalinkColor(alinkcolor); - window.main.location.reload(); - }); - $('.linkcolorPicker .sp-input').on('keydown', function() { - alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_alinkcolor', alinkcolor); - setalinkColor(alinkcolor); - window.main.location.reload(); - }); - //apply colors - $('*').on('click', function() { - setalinkColor(alinkcolor); - }); - - /////Body text color - //change elements colors - function setColor(color) { - $('[data-evocp="color"]').css('color', color); - $('[data-evocp="borderColor"]').css('border-color', color); - $('h1 .fa:not(.help)').css('color', color); - } - //store the color value in a variable - $('.evocp-color').each(function(i) { - $('.evocp-color').eq(i).css('backgroundColor', $(this).text()); - $('.evocp-color').eq(i).on('click', function() { - color = $(this).css('backgroundColor'); - window.main.location.reload(); - // Save the color in local storage - localStorage.setItem('my_evo_color', color); - $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); - //alert("Text color is " + color); - - }); - }); - - //custom colors - $('.textcolorPicker .sp-top-inner').on('click', function() { - color = $('.cpcolors .sp-preview-inner').css("background-color"); - // Save the color in local storage - localStorage.setItem('my_evo_color', color); - setColor(color); - window.main.location.reload(); - }); - - //apply colors - $('*').on('click', function() { - setColor(color); - }); - - -////close document ready -}); -//clear Local Storage and reload only main frame -function cleanLocalStorageReloadMain(keys) { - keys = keys.split(','); - for (var i = 0; i < keys.length; i++) { - delete localStorage[keys[i]]; - } - window.main.location.reload(); -} -//clear Local Storage and reload all frames -function cleanLocalStorageReloadAll(keys) { - keys = keys.split(','); - for (var i = 0; i < keys.length; i++) { - delete localStorage[keys[i]]; - } - location.reload(); -} -//toggle chevron icon -jQuery(document).on('click', '.panel-heading h3', function(e) { - var $this = $(this); - icon = $(this).find("i.togglearrow"); - icon.toggleClass("fa-chevron-right fa-chevron-down") - -}) +//Evolution color switcher +jQuery(document).ready(function($) { + //appear the evo colors switcher sidebar + $('.evocp-box .evocp-icon').on('click', function() { + $('.evocp-box').toggleClass('appear-it'); + }); + $('.evocp-box').attr('unselectable', 'on') + .css('user-select', 'none') + .on('selectstart', false); + + //vars// + var bgmcolor; + var color; + var menuColor; + var menuHColor; + var alinkcolor; + + // Get text color + var my_evo_color = localStorage.getItem('my_evo_color'); + if (my_evo_color) { + color = my_evo_color; + setColor(color); + } + // Get alink color + var my_evo_alinkcolor = localStorage.getItem('my_evo_alinkcolor'); + if (my_evo_alinkcolor) { + alinkcolor = my_evo_alinkcolor; + setalinkColor(alinkcolor); + } + // Get background menu color + var my_evo_bgmcolor = localStorage.getItem('my_evo_bgmcolor'); + if (my_evo_bgmcolor) { + bgmcolor = my_evo_bgmcolor; + setBgmColor(bgmcolor); + } + // Get menu link color + var my_evo_menuColor = localStorage.getItem('my_evo_menuColor'); + if (my_evo_menuColor) { + menuColor = my_evo_menuColor; + setMenuColor(menuColor); + } + // Get menu link hover color + var my_evo_menuHColor = localStorage.getItem('my_evo_menuHColor'); + if (my_evo_menuHColor) { + menuHColor = my_evo_menuHColor; + setMenuHColor(menuHColor); + } + + //Menu background part + + //change elements colors + function setBgmColor(bgmcolor) { + $('[data-evocp="bgmColor"]').css('backgroundColor', bgmcolor); + $('#mainMenu li.item > a').mouseover(function() { + $(this).css('backgroundColor', bgmcolor); + $(this).css('color', '#fff'); + }).mouseout(function() { + $(this).css('backgroundColor', '#FFF'); + $(this).css('color', '#444'); + }); + } + //store the color value in a variable + $('.evocp-bgmcolor').each(function(i) { + $('.evocp-bgmcolor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-bgmcolor').eq(i).on('click', function() { + bgmcolor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + //Color Picker colors + $('.bgmPicker .sp-top-inner').on('click', function() { + bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + setBgmColor(bgmcolor); + }); + $('.bgmPicker .sp-input').on('keydown', function() { + bgmcolor = $('.bgmcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_bgmcolor', bgmcolor); + setBgmColor(bgmcolor); + }); + //apply colors + $('*').on('click', function() { + setBgmColor(bgmcolor); + }); + + /////menu link Color part + + //change elements colors + function setMenuColor(menucolor) { + $('[data-evocp="menuColor"]').css('color', menuColor); + $("#mainMenu:not(.show) .nav > li > a").css('color', menuColor); + $("#mainMenu .nav .label_searchid").css('color', menuColor); + $("#mainMenu.show .nav > li > a").css('color', '#444!important'); + } + //store the color value in a variable + $('.evocp-menuColor').each(function(i) { + $('.evocp-menuColor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-menuColor').eq(i).on('click', function() { + menuColor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + + //Color Picker colors + $('.menucolorPicker .sp-top-inner').on('click', function() { + menuColor = $('.menuColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + setMenuColor(menuColor); + }); + $('.menucolorPicker .sp-input').on('keydown', function() { + menuColor = $('.menuColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuColor', menuColor); + setMenuColor(menuColor); + }); + //apply colors + $('*').on('click', function() { + setMenuColor(menuColor); + }); + + /////menu link Hover Color + + //change elements colors + function setMenuHColor(menuHcolor) { + $('[data-evocp="menuHColor"]').css('color', menuHColor); + $('#mainMenu .nav > li:not(.active) > a.hover').css('color', menuHColor); + $('[data-evocp="menuColor"].hover').css('color', menuHColor); + + //$('#evo-tab-home.tab.selected').css('backgroundColor', bgcolor); + + $('#mainMenu .nav > li:not(.active) > a').mouseover(function() { + $(this).css('color', menuHColor); + }).mouseout(function() { + $(this).css('color', menuColor); + }); + $('#mainMenu .nav .label_searchid').mouseover(function() { + $(this).css('color', menuHColor); + }).mouseout(function() { + $(this).css('color', menuColor); + }); + $('#mainMenu .nav > li.active > a').css('color', menuHColor); + //#mainMenu.show .nav > li.dropdown.hover > a + //$('#bgPicker').val('bgcolor'); + } + //store the color value in a variable + $('.evocp-menuHColor').each(function(i) { + $('.evocp-menuHColor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-menuHColor').eq(i).on('click', function() { + menuHColor = $(this).css('backgroundColor'); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + + //Color Picker colors + $('.menuHcolorPicker .sp-top-inner').on('click', function() { + menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + setMenuHColor(menuHColor); + }); + $('.menuHcolorPicker .sp-input').on('keydown', function() { + menuHColor = $('.menuHColors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_menuHColor', menuHColor); + setMenuHColor(menuHColor); + }); + //apply colors + $('*').on('click', function() { + setMenuHColor(menuHColor); + }); + + ///// Body Links color + //change elements colors + function setalinkColor(alinkcolor) { + $('[data-evocp="alinkcolor"]').css('color', alinkcolor); + //need fix and move to dedicated tree panel + // $('body:not(.dark) #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); + // $('body #treeRoot a:not(.deleted):not(.unpublished):not(.hidemenu) .title').css('color', alinkcolor); + $('.container-body a:not(.btn)').css('color', alinkcolor); + } + //store the color value in a variable + $('.evocp-alinkcolor').each(function(i) { + $('.evocp-alinkcolor').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-alinkcolor').eq(i).on('click', function() { + alinkcolor = $(this).css('backgroundColor'); + window.main.location.reload(); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + }); + }); + //Color Picker colors + $('.linkcolorPicker .sp-top-inner').on('click', function() { + alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + setalinkColor(alinkcolor); + window.main.location.reload(); + }); + $('.linkcolorPicker .sp-input').on('keydown', function() { + alinkcolor = $('.alinkcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_alinkcolor', alinkcolor); + setalinkColor(alinkcolor); + window.main.location.reload(); + }); + //apply colors + $('*').on('click', function() { + setalinkColor(alinkcolor); + }); + + /////Body text color + //change elements colors + function setColor(color) { + $('[data-evocp="color"]').css('color', color); + $('[data-evocp="borderColor"]').css('border-color', color); + $('h1 .fa:not(.help)').css('color', color); + } + //store the color value in a variable + $('.evocp-color').each(function(i) { + $('.evocp-color').eq(i).css('backgroundColor', $(this).text()); + $('.evocp-color').eq(i).on('click', function() { + color = $(this).css('backgroundColor'); + window.main.location.reload(); + // Save the color in local storage + localStorage.setItem('my_evo_color', color); + $(this).addClass('colorSelected').siblings().removeClass('colorSelected'); + //alert("Text color is " + color); + + }); + }); + + //custom colors + $('.textcolorPicker .sp-top-inner').on('click', function() { + color = $('.cpcolors .sp-preview-inner').css("background-color"); + // Save the color in local storage + localStorage.setItem('my_evo_color', color); + setColor(color); + window.main.location.reload(); + }); + + //apply colors + $('*').on('click', function() { + setColor(color); + }); + + +////close document ready +}); +//clear Local Storage and reload only main frame +function cleanLocalStorageReloadMain(keys) { + keys = keys.split(','); + for (var i = 0; i < keys.length; i++) { + delete localStorage[keys[i]]; + } + window.main.location.reload(); +} +//clear Local Storage and reload all frames +function cleanLocalStorageReloadAll(keys) { + keys = keys.split(','); + for (var i = 0; i < keys.length; i++) { + delete localStorage[keys[i]]; + } + location.reload(); +} +//toggle chevron icon +jQuery(document).on('click', '.panel-heading h3', function(e) { + var $this = $(this); + icon = $(this).find("i.togglearrow"); + icon.toggleClass("fa-chevron-right fa-chevron-down") + +}) diff --git a/manager/media/style/default/js/modx.js b/manager/media/style/default/js/modx.js index 89741f05..806566ff 100755 --- a/manager/media/style/default/js/modx.js +++ b/manager/media/style/default/js/modx.js @@ -5,6 +5,7 @@ minWidth: 840, isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), typesactions: {'16': 1, '301': 2, '78': 3, '22': 4, '102': 5, '108': 6, '3': 7, '4': 7, '6': 7, '27': 7, '61': 7, '62': 7, '63': 7, '72': 7}, + thememodes: ['', 'lightness', 'light', 'dark', 'darkness'], tabsTimer: 0, popupTimer: 0, init: function() { @@ -890,28 +891,33 @@ } }, toggleTheme: function() { - var myCodeMirrors = w.main.myCodeMirrors, key; - if (d.body.classList.contains('dark')) { - d.body.classList.remove('dark'); - w.main.document.body.classList.remove('dark'); - d.cookie = 'MODX_themeColor='; - if (myCodeMirrors) { - for (key in myCodeMirrors) { - if (myCodeMirrors.hasOwnProperty(key)) { - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.darktheme); - w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme); - } - } - } - } else { - d.body.classList.add('dark'); - w.main.document.body.classList.add('dark'); - d.cookie = 'MODX_themeColor=dark'; - if (myCodeMirrors) { - for (key in myCodeMirrors) { - if (myCodeMirrors.hasOwnProperty(key)) { + var a, b = 1, myCodeMirrors = w.main.myCodeMirrors, key; + if (typeof localStorage['MODX_themeMode'] === 'undefined') { + localStorage['MODX_themeMode'] = modx.config.theme_mode; + } + if (modx.thememodes[parseInt(localStorage['MODX_themeMode']) + 1]) { + b = parseInt(localStorage['MODX_themeMode']) + 1; + } + a = modx.thememodes[b]; + for (key in modx.thememodes) { + if (modx.thememodes[key]) { + d.body.classList.remove(modx.thememodes[key]); + w.main.document.body.classList.remove(modx.thememodes[key]); + } + } + d.body.classList.add(a); + w.main.document.body.classList.add(a); + d.cookie = 'MODX_themeMode=' + b; + localStorage['MODX_themeMode'] = b; + if (typeof myCodeMirrors !== 'undefined') { + for (key in myCodeMirrors) { + if (myCodeMirrors.hasOwnProperty(key)) { + if (~a.indexOf('dark')) { w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.darktheme); w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.defaulttheme); + } else { + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-' + myCodeMirrors[key].options.darktheme); + w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-' + myCodeMirrors[key].options.defaulttheme); } } } @@ -1023,7 +1029,7 @@ this.restoreTree(); } else { modx.tabs({url: modx.MODX_MANAGER_URL + href, title: title + '(' + id + ')'}); - if (modx.isMobile) modx.resizer.toggle(); + if (modx.isMobile && w.innerWidth < modx.minWidth) modx.resizer.toggle(); } } this.itemToChange = id; @@ -1485,6 +1491,7 @@ this.timer = null; this.olduid = ''; this.closeactions = [6, 61, 62, 63, 94]; + this.saveAndCloseActions = [75, 86, 99, 106]; this.reload = typeof a.reload !== 'undefined' ? a.reload : 1; this.action = modx.getActionFromUrl(a.url); this.uid = modx.getActionFromUrl(a.url, 2) ? 'home' : modx.urlToUid(a.url); @@ -1537,8 +1544,12 @@ } this.page = d.createElement('div'); this.page.id = 'evo-tab-page-' + this.uid; - this.page.className = 'evo-tab-page show'; - this.page.innerHTML = ''; + this.page.className = 'evo-tab-page iframe-scroller show'; + if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) { + this.page.innerHTML=''; + } else { + this.page.innerHTML='' + }; d.getElementById('main').appendChild(this.page); console.time('load-tab'); this.page.firstElementChild.onload = function(e) { @@ -1576,7 +1587,7 @@ if (!!w.main.__alertQuit) { w.main.alert = function(a) { }; var message = w.main.document.body.innerHTML; - w.main.document.body.innerHTML = ''; + w.main.document.body.style.display = 'none'; history.pushState(null, d.title, modx.getActionFromUrl(w.location.search, 2) ? modx.MODX_MANAGER_URL : '#' + w.location.search); w.onpopstate = function() { history.go(1); @@ -1598,7 +1609,7 @@ } }); } else { - if (modx.getActionFromUrl(this.url, 2)) { + if (modx.getActionFromUrl(this.url, 2) || (~this.saveAndCloseActions.indexOf(modx.getActionFromUrl(this.url)) && parseInt(modx.main.getQueryVariable('r', this.url)))) { this.close(e); } else if (this.olduid !== this.uid && d.getElementById('evo-tab-' + this.uid)) { this.close(e); @@ -1647,6 +1658,9 @@ var documentDirty = this.page.firstElementChild.contentWindow.documentDirty; var checkDirt = !!this.page.firstElementChild.contentWindow.checkDirt; if (documentDirty && checkDirt && confirm(this.page.firstElementChild.contentWindow.checkDirt(e)) || !documentDirty) { + if (modx.tabs.selected === this.tab) { + tree.ca = 'open'; + } modx.tabs.selected = this.tab.classList.contains('selected') ? this.tab.previousElementSibling : this.row.querySelector('.selected'); this.page.parentNode.removeChild(this.page); this.row.removeChild(this.tab); @@ -1738,7 +1752,7 @@ title: '', url: '', width: '20rem', - wrap: w.main.document.body, // parentNode + wrap: a.wrap || w.main.document.body, // parentNode zIndex: 10500, w: null, show: function() { diff --git a/manager/media/style/default/js/modx.min.js b/manager/media/style/default/js/modx.min.js index 960096ca..cc08800b 100755 --- a/manager/media/style/default/js/modx.min.js +++ b/manager/media/style/default/js/modx.min.js @@ -1 +1 @@ -(function($,w,d,u){'use strict';modx.extended({frameset:'frameset',minWidth:840,isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),typesactions:{'16':1,'301':2,'78':3,'22':4,'102':5,'108':6,'3':7,'4':7,'6':7,'27':7,'61':7,'62':7,'63':7,'72':7},tabsTimer:0,popupTimer:0,init:function(){if(!localStorage.getItem('MODX_widthSideBar')){localStorage.setItem('MODX_widthSideBar',this.config.tree_width)}this.mainmenu.init();if(w.location.hash){if(modx.getActionFromUrl(w.location.hash,2)){w.history.replaceState(null,d.title,modx.MODX_MANAGER_URL)}else if(modx.getActionFromUrl(w.location.hash)||modx.main.getQueryVariable('filemanager',w.location.hash)){var url=modx.main.getQueryVariable('filemanager',w.location.hash)?modx.MODX_MANAGER_URL+modx.main.getQueryVariable('filemanager',w.location.hash)+w.location.hash.replace('#?','?'):w.location.href.replace('#?','?');if(modx.config.global_tabs){modx.tabs({url:url,title:'blank'})}else if(w.main){w.main.frameElement.src=url}else{modx.openWindow(url)}}}this.resizer.init();this.search.init();if(this.config.session_timeout>0){w.setInterval(this.keepMeAlive,1000*60*this.config.session_timeout)}if(modx.config.mail_check_timeperiod>0&&modx.permission.messages){setTimeout('modx.updateMail(true)',1000)}d.addEventListener('click',this.hideDropDown,false);if(modx.config.global_tabs){d.addEventListener('click',this.tabs,false);this.tabs({url:'?a=2',reload:0})}},mainmenu:{id:'mainMenu',init:function(){var $mm=$('#mainMenu'),mm=d.getElementById('mainMenu'),timer;$mm.on('click','a',function(e){if($(this).hasClass('dropdown-toggle')){if($mm.hasClass('show')&&($(this).hasClass('selected')||!modx.isMobile&&$(this).parent().hasClass('hover'))){$(this).removeClass('selected');$mm.removeClass('show')}else{$('.nav > li > a:not(:hover)').removeClass('selected');$(this).addClass('selected');$mm.addClass('show')}e.stopPropagation();e.target.dataset.toggle='#mainMenu';modx.hideDropDown(e)}if($(this).closest('ul').hasClass('dropdown-menu')&&!$(this).parent('li').hasClass('dropdown-back')){$('.nav > .active').removeClass('active');$('.nav li.selected').removeClass('selected');$(this).closest('.nav > li').addClass('active');if(this.offsetParent.id){d.getElementById(this.offsetParent.id.substr(7)).classList.add('selected')}if((modx.isMobile||w.innerWidth li',function(){var els=mm.querySelectorAll('.nav > li.hover:not(:hover)');for(var i=0;i li li',function(e){var self=this,ul;var els=mm.querySelectorAll('.nav > li li.hover:not(:hover)');for(var i=0;i'+modx.lang.paging_prev+''+data}ul.id='parent_'+self.id;ul.innerHTML=data;var id=w.location.hash.substr(2).replace(/=/g,'_').replace(/&/g,'__');var el=d.getElementById(id);if(el){el.parentNode.classList.add('selected');d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected')}for(var i=0;iitems.length-1){index=items.length-1}if(index>=0&&index2){s.timer=setTimeout(function(){s.loader.style.display='block';modx.get(modx.MODX_MANAGER_URL+'?a=71&ajax=1&submitok=Search&searchid='+s.input.value,function(data){s.loader.style.display='none';s.results=data.querySelector('.ajaxSearchResults');if(s.results&&s.results.innerHTML!==''){s.result.innerHTML=s.results.outerHTML;s.open();s.result.onclick=function(e){var t=e.target,p=t.parentNode;if(t.tagName==='I'){modx.openWindow({title:p.innerText,id:p.id,url:p.href});e.preventDefault();e.stopPropagation()}else{var a=t.tagName==='A'&&t||p.tagName==='A'&&p;if(a){var el=s.result.querySelector('.selected');if(el)el.className='';a.className='selected';if(modx.isMobile)s.close()}}}}else{s.empty()}},'document')},300)}else{s.empty()}};if(modx.isMobile){this.input.onblur=this.close}this.input.onfocus=this.open;this.input.onclick=this.open;this.input.onmouseenter=this.open;this.result.onmouseenter=this.open;this.result.onmouseleave=this.close;this.mask.onmouseenter=this.open;this.mask.onmouseleave=this.close},open:function(){if(modx.search.results){modx.search.result.classList.add('open')}},close:function(){modx.search.result.classList.remove('open')},empty:function(){modx.search.result.classList.remove('open');modx.search.result.innerHTML=''}},main:{id:'main',idFrame:'mainframe',as:null,onload:function(e){w.main=e.target.contentWindow||e.target.defaultView;modx.main.tabRow.init();modx.main.stopWork();modx.main.scrollWork();w.main.document.addEventListener('click',modx.hideDropDown,false);w.main.document.addEventListener('contextmenu',modx.main.oncontextmenu,false);if(modx.config.global_tabs){w.main.document.addEventListener('click',modx.tabs,false)}w.history.replaceState(null,d.title,modx.getActionFromUrl(w.main.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.main.location.search);setTimeout('modx.tree.restoreTree()',100)},oncontextmenu:function(e){if(e.ctrlKey)return;var el=e.target;if(modx.user.role===1&&/modxtv|modxplaceholder|modxattributevalue|modxchunk|modxsnippet|modxsnippetnocache/i.test(el.className)){var id=Date.now(),name=el.innerText.replace(/[\[|\]|{|}|\*||\#|\+|?|\!|&|=|`|:]/g,''),type=el.className.replace(/cm-modx/,''),n=!!name.replace(/^\d+$/,'');if(name&&n){e.preventDefault();modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',{a:'modxTagHelper',name:name,type:type},function(r){if(r){r=JSON.parse(r);for(var k in r){if(r.hasOwnProperty(k)&&r[k].url){r[k]['onclick']='if(event.shiftKey){modx.openWindow({url:\''+r[k].url+'\'})}else{modx.popup({url:\''+r[k].url+'\',title:\''+r.header.innerHTML+'\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:0,position:\'center elements\',animation:0,icon:\'none\'})}'}}r=JSON.stringify(r);el.id='node'+id;el.dataset.contextmenu=r;modx.tree.showPopup(e,id,name)}})}e.preventDefault()}},tabRow:{init:function(){var row=w.main.document.querySelector('.tab-pane > .tab-row');if(row)this.build(row)},build:function(row){var rowContainer=d.createElement('div'),sel=row.querySelector('.selected');rowContainer.className='tab-row-container';row.parentNode.insertBefore(rowContainer,row);rowContainer.appendChild(row);var p=d.createElement('i');p.className='fa fa-angle-left prev disable';p.onclick=function(e){e.stopPropagation();e.preventDefault();var sel=row.querySelector('.selected');if(sel.previousSibling){sel.previousSibling.click();modx.main.tabRow.scroll(row)}};rowContainer.appendChild(p);var n=d.createElement('i');n.className='fa fa-angle-right next disable';n.onclick=function(e){e.stopPropagation();e.preventDefault();var sel=row.querySelector('.selected');if(sel.nextSibling){sel.nextSibling.click();modx.main.tabRow.scroll(row)}};rowContainer.appendChild(n);setTimeout(function(){sel=row.querySelector('.selected');modx.main.tabRow.scroll(row,sel);w.main.addEventListener('resize',function(){modx.main.tabRow.scroll(row)},false);if(sel){if(sel.previousSibling)p.classList.remove('disable');if(sel.nextSibling)n.classList.remove('disable')}},100);row.onclick=function(e){var sel=e.target.tagName==='H2'?e.target:e.target.tagName==='SPAN'?e.target.parentNode:null;if(sel){if(sel.previousSibling){this.parentNode.querySelector('i.prev').classList.remove('disable')}else{this.parentNode.querySelector('i.prev').classList.add('disable')}if(sel.nextSibling){this.parentNode.querySelector('i.next').classList.remove('disable')}else{this.parentNode.querySelector('i.next').classList.add('disable')}modx.main.tabRow.scroll(this,sel)}}},scroll:function(row,sel,a){sel=sel||row.querySelector('.selected')||row.firstChild;a=a||100;var c=0,elms=row.childNodes;for(var i=0;isel.offsetLeft){$(row).animate({scrollLeft:sel.offsetLeft-(sel.previousSibling?30:1)},a)}if(sel.offsetLeft+sel.offsetWidth>row.offsetWidth+row.scrollLeft){$(row).animate({scrollLeft:sel.offsetLeft-row.offsetWidth+sel.offsetWidth+(sel.nextSibling?30:0)},a)}if(c>row.offsetWidth){this.drag(row)}},drag:function(row){row.onmousedown=function(e){if(e.button===0){e.preventDefault();var x=e.clientX,f=row.scrollLeft;row.ownerDocument.body.focus();row.onmousemove=row.ownerDocument.onmousemove=function(e){if(Math.abs(e.clientX-x)>5){e.stopPropagation();row.scrollLeft=f-(e.clientX-x);row.ownerDocument.body.classList.add('drag')}};row.onmouseup=row.ownerDocument.onmouseup=function(e){e.stopPropagation();row.onmousemove=null;row.ownerDocument.onmousemove=null;row.ownerDocument.body.classList.remove('drag')}}}}},work:function(){d.getElementById('mainloader').classList.add('show')},stopWork:function(){d.getElementById('mainloader').classList.remove('show')},scrollWork:function(){var a=w.main.frameElement.contentWindow,b=a.location.search.substring(1)||a.location.hash.substring(2),c=localStorage.getItem('page_y')||0,f=localStorage.getItem('page_url')||b;if(((modx.getActionFromUrl(f)===modx.getActionFromUrl(b))&&(modx.main.getQueryVariable('id',f)&&modx.main.getQueryVariable('id',f)===modx.main.getQueryVariable('id',b)))||(f===b)){a.scrollTo(0,c)}a.addEventListener('scroll',function(){if(this.pageYOffset>=0){localStorage.setItem('page_y',this.pageYOffset.toString());localStorage.setItem('page_url',b)}},false)},getQueryVariable:function(a,b){var f='';if(b||typeof b==='string'){b=b.split('?');b=b[1]||b[0];b=b.split('&');for(var i=0;iMath.abs(ay)&&this.swipe){if(ax<0&&this.sidebar){if(Math.abs(ax)>h)ax=-h;tree.style.transform='translate3d('+ax+'px, 0, 0)';tree.style.WebkitTransform='translate3d('+ax+'px, 0, 0)';modx.resizer.mask.style.opacity=(0.5-0.5/-h*ax).toFixed(2);if(Math.abs(ax)>h/3){this.swipe='left'}else{this.swipe='right'}}else if(ax>0&&!this.sidebar){if(Math.abs(ax)>h)ax=h;tree.style.transform='translate3d('+ -(h-ax)+'px, 0, 0)';tree.style.WebkitTransform='translate3d('+ -(h-ax)+'px, 0, 0)';modx.resizer.mask.style.opacity=(0.5/h*ax).toFixed(2);if(Math.abs(ax)>h/3){this.swipe='right'}else{this.swipe='left'}}}},false);w.addEventListener('touchend',function(){if(this.swipe==='left'){d.body.classList.add('sidebar-closed');modx.resizer.setWidth(0)}if(this.swipe==='right'){d.body.classList.remove('sidebar-closed');modx.resizer.setWidth(h)}tree.style.cssText='';modx.resizer.mask.style.cssText=''},false)}},onMouseDown:function(e){e=e||w.event;modx.resizer.dragElement=e.target!==null?e.target:e.srcElement;if((e.buttons===1||e.button===0)&&modx.resizer.dragElement.id===modx.resizer.id){modx.resizer.oldZIndex=modx.resizer.dragElement.style.zIndex;modx.resizer.dragElement.style.zIndex=modx.resizer.newZIndex;modx.resizer.dragElement.style.background=modx.resizer.background;localStorage.setItem('MODX_widthSideBar',modx.resizer.dragElement.offsetLeft>0?modx.resizer.dragElement.offsetLeft:0);d.body.appendChild(modx.resizer.mask);d.onmousemove=modx.resizer.onMouseMove;d.body.focus();d.body.classList.add('resizer_move');d.onselectstart=function(){return false};modx.resizer.dragElement.ondragstart=function(){return false};return false}},onMouseMove:function(e){e=e||w.event;if(e.clientX>0){modx.resizer.left=e.clientX}else{modx.resizer.left=0}modx.resizer.dragElement.style.left=modx.pxToRem(modx.resizer.left)+'rem';d.getElementById('tree').style.width=modx.pxToRem(modx.resizer.left)+'rem';d.getElementById('main').style.left=modx.pxToRem(modx.resizer.left)+'rem';if(e.clientX<-2||e.clientY<-2){modx.resizer.onMouseUp(e)}},onMouseUp:function(e){if(modx.resizer.dragElement!==null&&e.button===0&&modx.resizer.dragElement.id===modx.resizer.id){if(e.clientX>0){d.body.classList.remove('sidebar-closed');modx.resizer.left=e.clientX}else{d.body.classList.add('sidebar-closed');modx.resizer.left=0}d.cookie='MODX_widthSideBar='+modx.pxToRem(modx.resizer.left);modx.resizer.dragElement.style.zIndex=modx.resizer.oldZIndex;modx.resizer.dragElement.style.background='';modx.resizer.dragElement.ondragstart=null;modx.resizer.dragElement=null;d.body.classList.remove('resizer_move');d.body.removeChild(modx.resizer.mask);d.onmousemove=null;d.onselectstart=null}},toggle:function(){if(modx.isMobile||w.innerWidth<=modx.minWidth){if(d.body.classList.contains('sidebar-closed')){d.body.classList.remove('sidebar-closed');localStorage.setItem('MODX_widthSideBar',0);d.cookie='MODX_widthSideBar='+modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth))}else{localStorage.setItem('MODX_widthSideBar',parseInt(d.getElementById('tree').offsetWidth));d.body.classList.add('sidebar-closed');d.cookie='MODX_widthSideBar=0'}}else{var p=d.getElementById('tree').offsetWidth!==0?0:parseInt(localStorage.getItem('MODX_widthSideBar'))?parseInt(localStorage.getItem('MODX_widthSideBar')):modx.config.tree_width;modx.resizer.setWidth(p)}},setWidth:function(a){if(a>0){localStorage.setItem('MODX_widthSideBar',0);d.body.classList.remove('sidebar-closed')}else{localStorage.setItem('MODX_widthSideBar',parseInt(d.getElementById('tree').offsetWidth));d.body.classList.add('sidebar-closed')}d.cookie='MODX_widthSideBar='+modx.pxToRem(a);d.getElementById('tree').style.width=modx.pxToRem(a)+'rem';d.getElementById('resizer').style.left=modx.pxToRem(a)+'rem';d.getElementById('main').style.left=modx.pxToRem(a)+'rem'},setDefaultWidth:function(){modx.resizer.setWidth(modx.remToPx(modx.config.tree_width))}},tree:{ctx:null,rpcNode:null,itemToChange:'',selectedObjectName:null,selectedObject:0,selectedObjectDeleted:0,selectedObjectUrl:'',drag:false,deleted:[],init:function(){this.restoreTree()},draggable:function(){if(modx.permission.dragndropdocintree){var els=d.querySelectorAll('#treeRoot a:not(.empty)');for(var i=0;i-1:true;modx.tree.itemToChange=this.dataset.id||this.parentNode.id.replace('node','');modx.tree.selectedObjectName=this.dataset.titleEsc;if(draggable){this.parentNode.draggable=true;this.parentNode.ondragstart=modx.tree.ondragstart}else{this.parentNode.draggable=false;this.parentNode.ondragstart=function(){return false}}}},ondragstart:function(e){e.dataTransfer.effectAllowed='all';e.dataTransfer.dropEffect='all';e.dataTransfer.setData('text',this.id.substr(4))},ondragenter:function(e){if(d.getElementById('node'+modx.tree.itemToChange)===(this.parentNode.closest('#node'+modx.tree.itemToChange)||this.parentNode)){this.parentNode.className='';e.dataTransfer.effectAllowed='none';e.dataTransfer.dropEffect='none';modx.tree.drag=false}else{this.parentNode.className='dragenter';e.dataTransfer.effectAllowed='copy';e.dataTransfer.dropEffect='copy';modx.tree.drag=true}e.preventDefault()},ondragover:function(e){if(modx.tree.drag){var a=e.clientY;var b=parseInt(this.getBoundingClientRect().top);var c=a-b;if(c>this.offsetHeight/1.51){this.parentNode.classList.add('dragafter');this.parentNode.classList.remove('dragbefore');this.parentNode.classList.remove('dragenter');e.dataTransfer.effectAllowed='link';e.dataTransfer.dropEffect='link'}else if(c
          '}if(this.nextSibling){if(this.nextSibling.innerHTML){this.nextSibling.appendChild(el)}else{el.parentNode.removeChild(el)}els=this.parentNode.lastChild.children;for(i=0;i'}this.parentNode.parentNode.insertBefore(el,this.parentNode.nextSibling);els=this.parentNode.parentNode.children;for(i=0;i'}this.parentNode.parentNode.insertBefore(el,this.parentNode);els=this.parentNode.parentNode.children;for(i=0;i-1:true)){alert(modx.lang.error_no_privileges);modx.tree.restoreTree();return}modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',{a:'movedocument',id:id,parent:parent,menuindex:menuindex},function(r){if(r.errors)alert(r.errors);modx.tree.restoreTree()},'json');var b=w.main.frameElement.contentWindow.location.search.substr(1);if(modx.getActionFromUrl(b,27)&&parseInt(modx.main.getQueryVariable('id',b))===parseInt(id)){var index=menuindex.indexOf(id),elMenuIndex=w.main.document.querySelector('#documentPane input[name=menuindex]'),elParent=w.main.document.querySelector('#documentPane input[name=parent]'),elParentName=w.main.document.querySelector('#documentPane #parentName');if(elMenuIndex&&index>=0)elMenuIndex.value=index;if(elParent&&elParentName){elParent.value=parent;elParentName.innerHTML=parent+' ('+d.querySelector('#node'+parent+' > a').dataset.titleEsc+')'}}},toggleTheme:function(){var myCodeMirrors=w.main.myCodeMirrors,key;if(d.body.classList.contains('dark')){d.body.classList.remove('dark');w.main.document.body.classList.remove('dark');d.cookie='MODX_themeColor=';if(myCodeMirrors){for(key in myCodeMirrors){if(myCodeMirrors.hasOwnProperty(key)){w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-'+myCodeMirrors[key].options.darktheme);w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-'+myCodeMirrors[key].options.defaulttheme)}}}}else{d.body.classList.add('dark');w.main.document.body.classList.add('dark');d.cookie='MODX_themeColor=dark';if(myCodeMirrors){for(key in myCodeMirrors){if(myCodeMirrors.hasOwnProperty(key)){w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-'+myCodeMirrors[key].options.darktheme);w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-'+myCodeMirrors[key].options.defaulttheme)}}}}},toggleNode:function(e,id){e=e||w.event;if(e.ctrlKey)return;e.stopPropagation();var el=d.getElementById('node'+id).firstChild;this.rpcNode=el.nextSibling;var toggle=el.querySelector('.toggle'),icon=el.querySelector('.icon');if(this.rpcNode.innerHTML===''){if(toggle)toggle.innerHTML=el.dataset.iconCollapsed;icon.innerHTML=el.dataset.iconFolderOpen;var rpcNodeText=this.rpcNode.innerHTML,loadText=modx.lang.loading_doc_tree;modx.openedArray[id]=1;if(rpcNodeText===''||rpcNodeText.indexOf(loadText)>0){var folderState=this.getFolderState();d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent='+el.dataset.indent+'&parent='+id+'&expandAll='+el.dataset.expandall+folderState,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})}this.saveFolderState()}else{if(toggle)toggle.innerHTML=el.dataset.iconExpanded;icon.innerHTML=el.dataset.iconFolderClose;delete modx.openedArray[id];this.rpcNode.style.overflow='hidden';$(this.rpcNode.firstChild).animate({marginTop:-this.rpcNode.offsetHeight+'px'},100,function(){this.parentNode.innerHTML=''});this.saveFolderState()}e.preventDefault()},rpcLoadData:function(a){if(this.rpcNode!==null){var el;this.rpcNode.innerHTML=typeof a==='object'?a.responseText:a;this.rpcNode.loaded=true;if(this.rpcNode.firstChild.tagName==='DIV'){if(this.rpcNode.id==='treeRoot'){el=d.getElementById('binFull');if(el){this.showBin(true)}else{this.showBin(false)}}else{this.rpcNode.style.overflow='hidden';this.rpcNode.firstElementChild.style.marginTop=-this.rpcNode.offsetHeight+'px';$(this.rpcNode.firstChild).animate({marginTop:0},100)}d.getElementById('treeloader').classList.remove('visible')}else{el=d.getElementById('loginfrm');if(el){this.rpcNode.parentNode.removeChild(this.rpcNode);w.location.href=modx.MODX_MANAGER_URL}}}},treeAction:function(e,id,title){if(e.ctrlKey)return;var el=d.getElementById('node'+id).firstChild,treepageclick=el.dataset.treepageclick,showchildren=parseInt(el.dataset.showchildren),openfolder=parseInt(el.dataset.openfolder);title=title||el.dataset&&el.dataset.titleEsc;if(tree.ca==='move'){try{this.setSelectedByContext(id);w.main.setMoveValue(id,title)}catch(oException){alert(modx.lang.unable_set_parent)}}if(tree.ca==='open'||tree.ca===''){if(id===0){href='?a=2'}else{var href='';if(!isNaN(treepageclick)&&isFinite(treepageclick)){href='?a='+treepageclick+'&r=1&id='+id+(openfolder===0?this.getFolderState():'')}else{href=treepageclick}if(openfolder===2){if(showchildren!==1){href=''}this.toggleNode(e,id)}}if(href){if(e.shiftKey){w.getSelection().removeAllRanges();modx.openWindow(href);this.restoreTree()}else{modx.tabs({url:modx.MODX_MANAGER_URL+href,title:title+'('+id+')'});if(modx.isMobile)modx.resizer.toggle()}}this.itemToChange=id;this.setSelected(id)}if(tree.ca==='parent'){try{this.setSelectedByContext(id);w.main.setParent(id,title)}catch(oException){alert(modx.lang.unable_set_parent)}}if(tree.ca==='link'){try{this.setSelectedByContext(id);w.main.setLink(id)}catch(oException){alert(modx.lang.unable_set_link)}}e.preventDefault()},showPopup:function(e,id,title){if(e.ctrlKey)return;e.preventDefault();var tree=d.getElementById('tree'),el=d.getElementById('node'+id)||e.target,x=0,y=0;if(el.firstChild&&el.firstChild.dataset&&el.firstChild.dataset.contextmenu){el=el.firstChild}if(el){if(el.dataset.contextmenu){e.target.dataset.toggle='#contextmenu';modx.hideDropDown(e);this.ctx=d.createElement('div');this.ctx.id='contextmenu';this.ctx.className='dropdown-menu';d.getElementById(modx.frameset).appendChild(this.ctx);this.setSelectedByContext(id);var dataJson=JSON.parse(el.dataset.contextmenu);for(var key in dataJson){if(dataJson.hasOwnProperty(key)){var item=d.createElement('div');for(var k in dataJson[key]){if(dataJson[key].hasOwnProperty(k)){if(k.substring(0,2)==='on'){var onEvent=dataJson[key][k];item[k]=function(onEvent){return function(event){eval(onEvent)}}(onEvent)}else{item[k]=dataJson[key][k]}}}if(key.indexOf('header')===0)item.className+=' menuHeader';if(key.indexOf('item')===0)item.className+=' menuLink';if(key.indexOf('seperator')===0||key.indexOf('separator')===0)item.className+=' seperator separator';this.ctx.appendChild(item)}}x=e.clientX>0?e.clientX:e.pageX;y=e.clientY>0?e.clientY:e.pageY;e.view.position=e.view.frameElement?e.view.frameElement.getBoundingClientRect():e.target.offsetParent.getBoundingClientRect();if(e.view.frameElement){x+=e.view.position.left;y+=e.view.frameElement.offsetParent.offsetTop}else{if(e.target.parentNode.parentNode.classList.contains('node')){x+=50}}if(x>e.view.position.width){x=e.view.position.width-this.ctx.offsetWidth}if(y+this.ctx.offsetHeight/2>e.view.position.height){y=e.view.position.height-this.ctx.offsetHeight-5}else if(y-this.ctx.offsetHeight/20?e.clientX:e.pageX;y=e.clientY>0?e.clientY:e.pageY;if(y+ctx.offsetHeight/2>bodyHeight){y=bodyHeight-ctx.offsetHeight-5}else if(y-ctx.offsetHeight/230){this.selectedObjectName=this.selectedObjectName.substr(0,30)+'...'}var f=d.getElementById('nameHolder');f.innerHTML=this.selectedObjectName;el.style.left=a+(modx.config.textdir?'-190':'')+'px';el.style.top=b+'px';el.classList.add('show')},menuHandler:function(a){switch(a){case 1:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=3&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 2:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=27&r=1&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 3:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=4&pid='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 4:if(this.selectedObjectDeleted){alert('"'+this.selectedObjectName+'" '+modx.lang.already_deleted)}else if(confirm('"'+this.selectedObjectName+'"\n\n'+modx.lang.confirm_delete_resource)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=6&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 5:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=51&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 6:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=72&pid='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 7:if(confirm(modx.lang.confirm_resource_duplicate)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=94&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 8:if(d.getElementById('node'+this.itemToChange).firstChild.dataset.deleted){if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_undelete)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=63&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}}else{alert('"'+this.selectedObjectName+'"'+modx.lang.not_deleted)}break;case 9:if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_publish)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=61&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 10:if(this.itemToChange!==modx.config.site_start){if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_unpublish)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=62&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}}else{alert('Document is linked to site_start variable and cannot be unpublished!')}break;case 11:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=56&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 12:w.open(d.getElementById('node'+this.itemToChange).firstChild.dataset.href,'previeWin');break;default:alert('Unknown operation command.')}},setSelected:function(a){var el=d.querySelector('#tree .current');if(el)el.classList.remove('current');if(a){if(typeof a==='object'){a.classList.add('current')}else{el=d.querySelector('#node'+a+'>.node')||d.getElementById('node'+a);if(el)el.classList.add('current')}}},setActiveFromContextMenu:function(a){var el=d.querySelector('#node'+a+'>.node');if(el)this.setSelected(el)},setSelectedByContext:function(a){var el=d.querySelector('#treeRoot .selected');if(el)el.classList.remove('selected');el=d.querySelector('#node'+a+'>.node');if(el)el.classList.add('selected')},setItemToChange:function(){var a=w.main.document&&(w.main.document.URL||w.main.document.location.search),b=modx.getActionFromUrl(a);if(a&&modx.typesactions[b]){this.itemToChange=(modx.typesactions[b]===7?'':modx.typesactions[b]+'_')+parseInt(modx.main.getQueryVariable('id',a))}else{this.itemToChange=''}this.setSelected(this.itemToChange)},restoreTree:function(){if(d.getElementById('treeRoot')){d.getElementById('treeloader').classList.add('visible');this.setItemToChange();this.rpcNode=d.getElementById('treeRoot');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=2&id='+this.itemToChange,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})}},expandTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=1&id='+this.itemToChange,function(r){modx.tree.rpcLoadData(r);modx.tree.saveFolderState();modx.tree.draggable()})},collapseTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=0&id='+this.itemToChange,function(r){modx.openedArray=[];modx.tree.saveFolderState();modx.tree.rpcLoadData(r);modx.tree.draggable()})},updateTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');var a=d.sortFrm;var b='a=1&f=nodes&indent=1&parent=0&expandAll=2&dt='+a.dt.value+'&tree_sortby='+a.sortby.value+'&tree_sortdir='+a.sortdir.value+'&tree_nodename='+a.nodename.value+'&id='+this.itemToChange+'&showonlyfolders='+a.showonlyfolders.value;modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',b,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})},getFolderState:function(){var a;if(modx.openedArray!==[0]){a='&opened=';for(var key in modx.openedArray){if(modx.openedArray[key]){a+=key+'|'}}}else{a='&opened='}return a},saveFolderState:function(){modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&savestateonly=1'+this.getFolderState())},showSorter:function(e){e=e||w.event;var el=d.getElementById('floater');e.target.dataset.toggle='#floater';el.classList.toggle('show');el.onclick=function(e){e.stopPropagation()}},emptyTrash:function(){if(confirm(modx.lang.confirm_empty_trash)===true){modx.get(modx.MODX_MANAGER_URL+'?a=64',function(){modx.tabsClose(modx.tree.deleted);modx.tree.deleted=[];modx.tree.restoreTree()})}},showBin:function(a){var el=d.getElementById('treeMenu_emptytrash');if(el){if(a){el.title=modx.lang.empty_recycle_bin;el.classList.remove('disabled');el.innerHTML=modx.style.empty_recycle_bin;el.onclick=function(){modx.tree.emptyTrash()};var els=d.getElementById('tree').querySelectorAll('.deleted');for(var i=0;i0){if(el){el.innerHTML=c[0];el.style.display='block'}}else{if(el)el.style.display='none'}if(c[1]>0){el=d.getElementById('newMail');if(el){el.innerHTML=''+modx.style.email+modx.lang.inbox+' ('+c[0]+' / '+c[1]+')';el.style.display='block'}}if(modx.config.mail_check_timeperiod>0)setTimeout('modx.updateMail(true)',1000*modx.config.mail_check_timeperiod)})}}catch(oException){setTimeout('modx.updateMail(true)',1000*modx.config.mail_check_timeperiod)}},openWindow:function(a){if(typeof a!=='object'){a={'url':a}}if(!a.width)a.width=parseInt(w.innerWidth*0.9)+'px';if(!a.height)a.height=parseInt(w.innerHeight*0.8)+'px';if(!a.left)a.left=parseInt(w.innerWidth*0.05)+'px';if(!a.top)a.top=parseInt(w.innerHeight*0.1)+'px';if(!a.title)a.title=Math.floor((Math.random()*999999)+1);if(a.url){if(this.plugins.EVOmodal===1){top.EVO.modal.show(a)}else{w.open(a.url,a.title,'width='+a.width+',height='+a.height+',top='+a.top+',left='+a.left+',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no')}}},tabsClose:function(a){if(modx.config.global_tabs&&a){for(var k in a){if(a.hasOwnProperty(k)){var el=d.getElementById(a[k]);if(el){el.firstElementChild.contentWindow.documentDirty=false;el.close()}}}}},tabs:function(a){function Tabs(a){var s=this;this.url=a.url;this.title=a.title||'';this.name=a.name||'';this.timer=null;this.olduid='';this.closeactions=[6,61,62,63,94];this.reload=typeof a.reload!=='undefined'?a.reload:1;this.action=modx.getActionFromUrl(a.url);this.uid=modx.getActionFromUrl(a.url,2)?'home':modx.urlToUid(a.url);this.page=d.getElementById('evo-tab-page-'+this.uid);this.row=d.getElementsByClassName('evo-tab-row')[0].firstElementChild;this.tab=d.getElementById('evo-tab-'+this.uid);if(this.page){if(this.uid==='home'){if(this.reload){this.page.firstElementChild.src=this.url;this.show()}else{this.reload=1;if(this.tab.onclick===null){this.tab.onclick=function(e){s.select.call(s,e,this)}}this.tab.show=function(e){s.show.call(s,e)};modx.tabs.selected=this.tab}}else{this.show();if(~this.closeactions.indexOf(this.action)){this.setDocPublished();modx.get(this.url,function(){modx.tree.restoreTree()})}}}else if(~this.closeactions.indexOf(this.action)){modx.get(this.url,function(){modx.tree.restoreTree()})}else{this.create()}}Tabs.prototype={create:function(){var s=this;modx.main.work();modx.tabs.selected=this.row.querySelector('.selected');if(modx.tabs.selected){d.getElementById(modx.tabs.selected.id.replace('tab','tab-page')).classList.remove('show');modx.tabs.selected.classList.remove('selected')}this.page=d.createElement('div');this.page.id='evo-tab-page-'+this.uid;this.page.className='evo-tab-page show';this.page.innerHTML='';d.getElementById('main').appendChild(this.page);console.time('load-tab');this.page.firstElementChild.onload=function(e){s.onload.call(s,e);console.timeEnd('load-tab')};this.tab=d.createElement('h2');this.tab.id='evo-tab-'+this.uid;this.tab.className='tab selected';this.icon='';if(!/'}this.tab.innerHTML=''+this.icon+this.title+'×';this.row.appendChild(this.tab);this.tab.onclick=function(e){s.select.call(s,e,this)};this.tab.close=function(e){s.close.call(s,e)};this.tab.show=function(e){s.show.call(s,e)};this.page.close=function(e){s.close.call(s,e)}},onload:function(e){var s=this;w.main=e.target.contentWindow||e.target.defaultView;this.url=w.main.location.search||w.location.hash.substring(1);this.olduid=this.uid;this.uid=modx.urlToUid(this.url);if(!!w.main.__alertQuit){w.main.alert=function(a){};var message=w.main.document.body.innerHTML;w.main.document.body.innerHTML='';history.pushState(null,d.title,modx.getActionFromUrl(w.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.location.search);w.onpopstate=function(){history.go(1)};modx.popup({type:'warning',title:'MODX :: Alert',position:'top center alertQuit',content:message,wrap:'body'});modx.getLockedElements(modx.getActionFromUrl(this.url),modx.main.getQueryVariable('id',this.url),function(data){if(!!data){s.page.close();modx.tree.restoreTree()}else{w.main.location.href=modx.MODX_MANAGER_URL+s.url;w.history.replaceState(null,d.title,modx.getActionFromUrl(s.url,2)?modx.MODX_MANAGER_URL:'#'+s.url)}})}else{if(modx.getActionFromUrl(this.url,2)){this.close(e)}else if(this.olduid!==this.uid&&d.getElementById('evo-tab-'+this.uid)){this.close(e);d.getElementById('evo-tab-'+this.uid).show()}else{this.title=w.main.document.body.querySelectorAll('h1')[0]&&w.main.document.body.querySelectorAll('h1')[0].innerHTML||this.title;if(this.title&&this.uid!=='home'){this.tab.innerHTML=''+this.title+'×'}this.page.id='evo-tab-page-'+this.uid;this.tab.id='evo-tab-'+this.uid;this.tab.classList.remove('changed');this.show();modx.main.onload(e);w.main.document.addEventListener('click',function a(e){if(typeof e.view.documentDirty!=='undefined'&&e.view.documentDirty&&!s.tab.classList.contains('changed')){s.tab.classList.add('changed');this.removeEventListener(e.type,a,false)}},false);w.main.document.addEventListener('keyup',function a(e){if(typeof e.view.documentDirty!=='undefined'&&e.view.documentDirty&&!s.tab.classList.contains('changed')){s.tab.classList.add('changed');this.removeEventListener(e.type,a,false)}},false)}}},show:function(){var s=this;modx.tabs.selected=this.row.querySelector('.selected');if(modx.tabs.selected&&modx.tabs.selected!==this.tab){d.getElementById(modx.tabs.selected.id.replace('tab','tab-page')).classList.remove('show');modx.tabs.selected.classList.remove('selected')}this.page.classList.add('show');this.tab.classList.add('selected');modx.tabs.selected=this.tab;w.main=this.page.firstElementChild.contentWindow;w.history.replaceState(null,w.main.document.title,modx.getActionFromUrl(w.main.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.main.location.search);modx.tree.setItemToChange();modx.main.tabRow.scroll(this.row,this.tab,350)},close:function(e){var documentDirty=this.page.firstElementChild.contentWindow.documentDirty;var checkDirt=!!this.page.firstElementChild.contentWindow.checkDirt;if(documentDirty&&checkDirt&&confirm(this.page.firstElementChild.contentWindow.checkDirt(e))||!documentDirty){modx.tabs.selected=this.tab.classList.contains('selected')?this.tab.previousElementSibling:this.row.querySelector('.selected');this.page.parentNode.removeChild(this.page);this.row.removeChild(this.tab);modx.tabs.selected.show()}},select:function(e){if(e.target.className==='tab-close'){this.close(e)}else if(modx.tabs.selected===this.tab){var s=this;if(this.timer){clearTimeout(this.timer);this.timer=null;w.main.location.reload()}else{this.timer=setTimeout(function(){s.timer=null},250)}}else{this.show()}},setDocPublished:function(){var el=w.main.document.getElementsByName('publishedcheck')[0];if(el){el.checked=this.action===61;w.main.document.getElementsByName('published')[0].value=+el.checked}if(modx.getActionFromUrl(w.main.location.search,3)){w.main.location.reload()}}};if(modx.config.global_tabs){if(typeof a.currentTarget!=='undefined'){var e=a;if(e.button===0&&e.target&&(e.target.tagName==='A'&&e.target.target==='main'||(e.target.parentNode&&e.target.parentNode.tagName==='A'&&e.target.parentNode.target==='main'))){a=e.target.tagName==='A'&&e.target||e.target.parentNode.tagName==='A'&&e.target.parentNode;if(e.shiftKey){modx.openWindow({url:a.href})}else{modx.tabs({url:a.href,title:a.innerHTML})}e.preventDefault()}}else{return new Tabs(a)}}else if(a.url){if(w.main){w.main.frameElement.src=a.url}else{modx.openWindow(a.url)}}},popup:function(a){if(typeof a==='object'&&(a.url||a.content||a.text)){var o={addclass:'',animation:'fade',content:a.content||a.text||'',clickclose:0,closeall:0,data:'',dataType:'document',delay:5000,draggable:!1,event:null,height:'auto',hide:1,hover:1,icon:'',iframe:'iframe',margin:'.5rem',maxheight:'',method:'GET',overlay:0,overlayclose:0,position:'center',resize:!1,selector:'',showclose:1,target:'main',uid:'',type:'default',title:'',url:'',width:'20rem',wrap:w.main.document.body,zIndex:10500,w:null,show:function(){if(~o.position.indexOf('center')){if(o.event){o.el.style.left=o.event.clientX+o.mt+'px';o.el.style.bottom=o.w.innerHeight-o.el.offsetHeight-o.event.clientY+o.mt+'px'}else{o.el.style.left=/(%)/.test(o.width)?(100-parseInt(o.width))/2-o.mt/(o.w.innerWidth/100)+'%':(o.w.innerWidth-o.el.offsetWidth)/2-o.mt+'px';o.el.style.bottom=/(%)/.test(o.height)?(100-parseInt(o.height))/2-o.mt/(o.w.innerHeight/100)+'%':(o.w.innerHeight-o.el.offsetHeight-o.wrap.offsetTop)/2-o.mt+'px'}}if(~o.position.indexOf('left')){o.el.style.left=0}if(~o.position.indexOf('right')){o.el.style.right=0}else{o.el.style.right='auto'}if(~o.position.indexOf('top')){o.el.style.top=0;o.el.style.bottom=''}else{o.el.style.top='auto'}if(~o.position.indexOf('bottom')){o.el.style.bottom=0}o.calc();o.el.className+=' in';if(o.showclose){o.el.querySelector('.close').onclick=o.close}if(o.hide){o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);o.close()},o.delay)}if(o.hover){o.el.onmouseenter=function(){clearTimeout(o.el.timer)};o.el.onmouseleave=o.close}if(o.overlayclose&&o.o){o.o.onclick=o.close}if(o.clickclose){o.el.onclick=o.close}if(o.draggable){modx.dragging(o.el,{wrap:o.wrap,resize:o.resize})}},close:function(e){o.event=e||o.event||w.event;if(o.url&&o.iframe==='iframe'){var els=o.wrap.ownerDocument.querySelectorAll('.'+o.className+'.in');if(els){var documentDirty=o.el.lastElementChild.firstElementChild.contentWindow.documentDirty;if(documentDirty&&confirm(o.el.lastElementChild.firstElementChild.contentWindow.checkDirt(o.event))||!documentDirty){o.el.classList.remove('in');if(!o.animation){o.el.classList.remove('show')}o.calc(1);if(o.o&&o.o.parentNode){o.o.parentNode.removeChild(o.o);o.wrap.style.overflow=''}o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);if(o.el.parentNode){o.el.parentNode.removeChild(o.el)}},200)}}}else{o.el.classList.remove('in');if(!o.animation){o.el.classList.remove('show')}o.calc(1);if(o.o&&o.o.parentNode){o.o.parentNode.removeChild(o.o);o.wrap.style.overflow=''}o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);if(o.el.parentNode){o.el.parentNode.removeChild(o.el)}},200)}if(typeof o.onclose==='function'){o.onclose(e,o.el)}},calc:function(f){var els=o.wrap.ownerDocument.querySelectorAll('.'+o.className+'.in[data-position="'+o.el.dataset.position+'"]');if(els&&els.length){o.els=[];for(var i=0;i×
          '}if(o.title){o.header=document.createElement('div');if(o.icon!=='none'){o.header.innerHTML+=''}o.header.innerHTML+=o.title;o.header.className='evo-popup-header';o.el.appendChild(o.header)}o.el.innerHTML+='
          ';o.wrap.appendChild(o.el);o.mt=parseFloat(getComputedStyle(o.el).marginTop);if(o.maxheight){o.maxheight=/(%)/.test(o.maxheight)?(o.w.innerHeight-o.el.offsetHeight-o.mt)/100*parseInt(o.maxheight):o.maxheight;o.el.lastChild.style.overflowY='auto';o.el.lastChild.style.maxHeight=o.maxheight+'px'}if(o.url){o.draggable=1;if(o.iframe==='iframe'){o.resize=1;o.uid=modx.urlToUid(a.url);o.el.className+=' '+o.addclass+' '+o.className+'-iframe';o.el.id='evo-popup-'+o.uid;d.getElementById('mainloader').className='show';o.frame=d.createElement('iframe');o.frame.width='100%';o.frame.height='100%';o.frame.frameBorder='0';o.frame.src=o.url;o.frame.onload=function(e){e.target.contentWindow.opener=o.w;a.url=e.target.contentWindow.location.href;o.uid=modx.urlToUid(a.url);o.event=e;if(!!e.target.contentWindow.__alertQuit){modx.popup({type:'warning',title:'MODX :: Alert',position:'top center alertQuit',content:e.target.contentWindow.document.body.querySelector('p').innerHTML});e.target.contentWindow.document.body.innerHTML='';e.target.contentWindow.alert=function(){}}else{if(modx.getActionFromUrl(a.url,2)||o.wrap.querySelectorAll('#evo-popup-'+o.uid).length>1){o.el.close()}else{if(e.target.contentDocument.querySelectorAll('h1')[0]){a.title=e.target.contentDocument.querySelectorAll('h1')[0].innerHTML}else if(e.target.contentDocument.title){a.title=e.target.contentDocument.title}if(o.header){e.target.offsetParent.offsetParent.getElementsByClassName(o.header.className)[0].innerHTML=a.title}e.target.offsetParent.offsetParent.id='evo-popup-'+o.uid;e.target.offsetParent.offsetParent.classList.remove('changed')}}e.target.contentWindow.close=o.close;modx.main.stopWork()};o.el.lastChild.appendChild(o.frame);o.show()}else{var xhr=new XMLHttpRequest();xhr.open(o.method,o.url,true);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');if(o.dataType){xhr.responseType=o.dataType}xhr.onload=function(){if(this.readyState===4){o.el.className+=' '+o.className+'-ajax';if(o.dataType==='document'){if(o.selector){var r=this.response.documentElement.querySelector(o.selector);if(r){o.el.lastChild.innerHTML+=r.innerHTML}}else{o.el.lastChild.innerHTML+=this.response.body.innerHTML}}else{o.el.lastChild.innerHTML+=this.response}o.show()}};xhr.send(o.data)}}else{o.el.lastChild.innerHTML+=o.content;o.show()}}return o}},getWindowDimension:function(){var a=0,b=0,c=d.documentElement,e=d.body;if(typeof(w.innerWidth)==='number'){a=w.innerWidth;b=w.innerHeight}else if(c&&(c.clientWidth||c.clientHeight)){a=c.clientWidth;b=c.clientHeight}else if(e&&(e.clientWidth||e.clientHeight)){a=e.clientWidth;b=e.clientHeight}return{'width':a,'height':b}},hideDropDown:function(e){e=e||w.event||w.main.event;if(tree.ca==='open'||tree.ca===''){modx.tree.setSelectedByContext()}if(modx.tree.ctx!==null){d.getElementById(modx.frameset).removeChild(modx.tree.ctx);modx.tree.ctx=null}if(!/dropdown\-item/.test(e.target.className)){var els=d.querySelectorAll('.dropdown.show'),n=null,t=e.target||e.target.parentNode,i;if(typeof t.dataset.toggle!=='undefined'){n=d.querySelector(t.dataset.toggle)}else if(t.classList.contains('dropdown-toggle')){n=t.offsetParent}for(i=0;i';if(this.classDrag)this.el.classList.add(this.classDrag);if(this.classResize)this.el.classList.add(this.classResize);this.el.insertBefore(this.borders,this.el.firstChild);if(this.handler&&this.el.getElementsByClassName(this.handler)[0]){this.handler=this.el.getElementsByClassName(this.handler)[0];this.handlerHeight=this.handler.offsetHeight}this.el.onmousedown=function(e){s.mousedown(e)};this.el.ontouchstart=function(e){s.mousedown(e.changedTouches[0])};this.wrap.addEventListener('mousemove',function(e){s.calc(e)},false);this.wrap.addEventListener('touchmove',function(e){s.calc(e.changedTouches[0])},false)};this.dragging.init.prototype={mousedown:function(e){if(e.target.classList.contains('close')){return}e=document.all?window.event:e;var s=this,x=document.all?window.event.clientX:e.clientX,y=document.all?window.event.clientY:e.clientY,style=w.getComputedStyle(this.el);this.elmX=(x-this.el.offsetLeft+parseInt(style.marginLeft));this.elmY=(y-this.el.offsetTop+parseInt(style.marginTop));this.el.position=this.el.getBoundingClientRect();this.el.style.position='fixed';this.el.style.transitionDuration='0s';this.el.style.webkitTransitionDuration='0s';this.el.style.left=this.el.offsetLeft-parseInt(style.marginLeft)+'px';this.el.style.top=this.el.offsetTop-parseInt(style.marginTop)+'px';this.el.style.right='auto';this.el.style.bottom='auto';this.el.style.width=this.el.position.width+'px';this.el.style.height=this.el.position.height+'px';if(e.target.parentNode===this.borders){this.isresize=this.resize;this.el.classList.add('is-resize')}else{if(!this.handler||(this.handler&&e.target===this.handler)){this.isdrag=true;this.el.classList.add('is-drag')}}if(typeof this.start==='function'){this.onstart(e,this.el)}if(e.preventDefault){e.preventDefault()}else{document.onselectstart=function(){return false}}this.wrap.onmousemove=function(e){s.mousemove(e)};this.wrap.ontouchmove=function(e){s.mousemove(e.changedTouches[0]);e.stopPropagation()};this.wrap.onmouseup=function(e){s.mouseup(e)};this.wrap.ontouchend=function(e){s.mouseup(e.changedTouches[0]);e.stopPropagation()}},mousemove:function(e){var x=document.all?window.event.clientX:e.clientX,y=document.all?window.event.clientY:e.clientY;if(this.isresize){if(this.onRight)this.el.style.width=Math.max(x-this.el.position.left+(this.el.position.width-this.x),this.minWidth)+'px';if(this.onBottom)this.el.style.height=Math.max(y-this.el.position.top+(this.el.position.height-this.y),this.minHeight)+'px';if(this.onLeft){this.width=Math.max(this.el.position.left-x+this.el.position.width+this.x,this.minWidth);if(this.width>this.minWidth){this.el.style.width=this.width+'px';this.el.style.left=x-this.elmX+'px'}}if(this.onTop){var currentHeight=Math.max(this.el.position.top-y+this.el.position.height+this.y,this.minHeight);if(currentHeight>this.minHeight){this.el.style.height=currentHeight+'px';this.el.style.top=y-this.elmY+'px'}}if(typeof this.onresize==='function'){this.onresize(e,this.el)}}else if(this.isdrag){this.el.style.opacity=this.opacity;this.el.style.left=x-this.elmX+'px';this.el.style.top=y-this.elmY+'px';if(typeof this.drag==='function'){this.ondrag(e,this.el)}}},mouseup:function(e){if(this.isdrag||this.isresize){this.el.classList.remove('is-resize');this.el.classList.remove('is-drag');this.el.style.opacity='';this.el.style.transitionDuration='';this.el.style.webkitTransitionDuration='';this.el.position=this.el.getBoundingClientRect();this.isdrag=false;this.isresize=false;this.wrap.onmousemove=null;this.wrap.onselectstart=null;if(typeof this.stop==='function'){this.onstop(e,this.el)}}},calc:function(e){if(this.isresize||this.isdrag){return}this.x=e.clientX-this.el.offsetLeft;this.y=e.clientY-this.el.offsetTop;if(this.resize){this.onTop=this.y=this.el.offsetWidth-this.border;this.onBottom=this.y>=this.el.offsetHeight-this.border;if(this.onRight&&this.onBottom||this.onLeft&&this.onTop){this.el.style.cursor='nwse-resize'}else if(this.onRight&&this.onTop||this.onBottom&&this.onLeft){this.el.style.cursor='nesw-resize'}else if(this.onRight||this.onLeft){this.el.style.cursor='ew-resize'}else if(this.onBottom||this.onTop){this.el.style.cursor='ns-resize'}else if(this.x>0&&this.y>0&&(this.x=this.border)){this.el.style.cursor='move'}else{this.el.style.cursor='default'}}else{if(this.x>0&&this.y>0&&(this.x=this.border)){this.el.style.cursor='move'}}}};return new this.dragging.init(a,b)},setTypeIcon:function(a){var b='';switch(this.typesactions[a]){case 1:b='fa fa-newspaper-o';break;case 2:b='fa fa-list-alt';break;case 3:b='fa fa-th-large';break;case 4:b='fa fa-code';break;case 5:b='fa fa-plug';break;case 6:b='fa fa-cube';break;case 7:b='fa fa-pencil-square-o';break;default:b='fa fa-circle'}return b}});w.mainMenu={};w.mainMenu.stopWork=function(){modx.main.stopWork()};w.mainMenu.work=function(){modx.main.work()};w.mainMenu.reloadtree=function(){if(modx.plugins.ElementsInTree){setTimeout('reloadElementsInTree()',50)}if(modx.config.global_tabs){setTimeout('modx.tree.restoreTree()',100)}};w.mainMenu.startrefresh=function(a){if(a===1){}if(a===2){}if(a===9){modx.tree.restoreTree()}if(a===10){w.location.href=modx.MODX_MANAGER_URL}};w.mainMenu.startmsgcount=function(a,b,c){modx.updateMail(c)};w.mainMenu.hideTreeFrame=function(){modx.resizer.setWidth(0)};w.mainMenu.defaultTreeFrame=function(){modx.resizer.setDefaultWidth()};w.tree={};w.tree.ca='open';w.tree.document=document;w.tree.saveFolderState=function(){};w.tree.updateTree=function(){modx.tree.updateTree()};w.tree.restoreTree=function(){modx.tree.restoreTree()};w.tree.resizeTree=function(){};w.onbeforeunload=function(){var a=w.main.frameElement.contentWindow;if(modx.getActionFromUrl(a.location.search,27)){modx.get(modx.MODX_MANAGER_URL+'?a=67&type=7&id='+modx.main.getQueryVariable('id',a.location.search.substring(1)))}};d.addEventListener('DOMContentLoaded',function(){modx.init()})})(typeof jQuery!=='undefined'?jQuery:'',window,document,undefined);(function(){if(!Element.prototype.closest){Element.prototype.closest=function(a){var b=this,c,d;['matches','webkitMatchesSelector','mozMatchesSelector','msMatchesSelector','oMatchesSelector'].some(function(fn){if(typeof document.body[fn]==='function'){c=fn;return true}return false});if(b&&c&&b[c](a))return b;while(b){d=b.parentElement;if(d&&c&&d[c](a))return d;b=d}return null}}})(); \ No newline at end of file +(function($,w,d,u){'use strict';modx.extended({frameset:'frameset',minWidth:840,isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),typesactions:{'16':1,'301':2,'78':3,'22':4,'102':5,'108':6,'3':7,'4':7,'6':7,'27':7,'61':7,'62':7,'63':7,'72':7},thememodes:['','lightness','light','dark','darkness'],tabsTimer:0,popupTimer:0,init:function(){if(!localStorage.getItem('MODX_widthSideBar')){localStorage.setItem('MODX_widthSideBar',this.config.tree_width)}this.mainmenu.init();if(w.location.hash){if(modx.getActionFromUrl(w.location.hash,2)){w.history.replaceState(null,d.title,modx.MODX_MANAGER_URL)}else if(modx.getActionFromUrl(w.location.hash)||modx.main.getQueryVariable('filemanager',w.location.hash)){var url=modx.main.getQueryVariable('filemanager',w.location.hash)?modx.MODX_MANAGER_URL+modx.main.getQueryVariable('filemanager',w.location.hash)+w.location.hash.replace('#?','?'):w.location.href.replace('#?','?');if(modx.config.global_tabs){modx.tabs({url:url,title:'blank'})}else if(w.main){w.main.frameElement.src=url}else{modx.openWindow(url)}}}this.resizer.init();this.search.init();if(this.config.session_timeout>0){w.setInterval(this.keepMeAlive,1000*60*this.config.session_timeout)}if(modx.config.mail_check_timeperiod>0&&modx.permission.messages){setTimeout('modx.updateMail(true)',1000)}d.addEventListener('click',this.hideDropDown,false);if(modx.config.global_tabs){d.addEventListener('click',this.tabs,false);this.tabs({url:'?a=2',reload:0})}},mainmenu:{id:'mainMenu',init:function(){var $mm=$('#mainMenu'),mm=d.getElementById('mainMenu'),timer;$mm.on('click','a',function(e){if($(this).hasClass('dropdown-toggle')){if($mm.hasClass('show')&&($(this).hasClass('selected')||!modx.isMobile&&$(this).parent().hasClass('hover'))){$(this).removeClass('selected');$mm.removeClass('show')}else{$('.nav > li > a:not(:hover)').removeClass('selected');$(this).addClass('selected');$mm.addClass('show')}e.stopPropagation();e.target.dataset.toggle='#mainMenu';modx.hideDropDown(e)}if($(this).closest('ul').hasClass('dropdown-menu')&&!$(this).parent('li').hasClass('dropdown-back')){$('.nav > .active').removeClass('active');$('.nav li.selected').removeClass('selected');$(this).closest('.nav > li').addClass('active');if(this.offsetParent.id){d.getElementById(this.offsetParent.id.substr(7)).classList.add('selected')}if((modx.isMobile||w.innerWidth li',function(){var els=mm.querySelectorAll('.nav > li.hover:not(:hover)');for(var i=0;i li li',function(e){var self=this,ul;var els=mm.querySelectorAll('.nav > li li.hover:not(:hover)');for(var i=0;i'+modx.lang.paging_prev+''+data}ul.id='parent_'+self.id;ul.innerHTML=data;var id=w.location.hash.substr(2).replace(/=/g,'_').replace(/&/g,'__');var el=d.getElementById(id);if(el){el.parentNode.classList.add('selected');d.getElementById(el.parentNode.parentNode.id.substr(7)).classList.add('selected')}for(var i=0;iitems.length-1){index=items.length-1}if(index>=0&&index2){s.timer=setTimeout(function(){s.loader.style.display='block';modx.get(modx.MODX_MANAGER_URL+'?a=71&ajax=1&submitok=Search&searchid='+s.input.value,function(data){s.loader.style.display='none';s.results=data.querySelector('.ajaxSearchResults');if(s.results&&s.results.innerHTML!==''){s.result.innerHTML=s.results.outerHTML;s.open();s.result.onclick=function(e){var t=e.target,p=t.parentNode;if(t.tagName==='I'){modx.openWindow({title:p.innerText,id:p.id,url:p.href});e.preventDefault();e.stopPropagation()}else{var a=t.tagName==='A'&&t||p.tagName==='A'&&p;if(a){var el=s.result.querySelector('.selected');if(el)el.className='';a.className='selected';if(modx.isMobile)s.close()}}}}else{s.empty()}},'document')},300)}else{s.empty()}};if(modx.isMobile){this.input.onblur=this.close}this.input.onfocus=this.open;this.input.onclick=this.open;this.input.onmouseenter=this.open;this.result.onmouseenter=this.open;this.result.onmouseleave=this.close;this.mask.onmouseenter=this.open;this.mask.onmouseleave=this.close},open:function(){if(modx.search.results){modx.search.result.classList.add('open')}},close:function(){modx.search.result.classList.remove('open')},empty:function(){modx.search.result.classList.remove('open');modx.search.result.innerHTML=''}},main:{id:'main',idFrame:'mainframe',as:null,onload:function(e){w.main=e.target.contentWindow||e.target.defaultView;modx.main.tabRow.init();modx.main.stopWork();modx.main.scrollWork();w.main.document.addEventListener('click',modx.hideDropDown,false);w.main.document.addEventListener('contextmenu',modx.main.oncontextmenu,false);if(modx.config.global_tabs){w.main.document.addEventListener('click',modx.tabs,false)}w.history.replaceState(null,d.title,modx.getActionFromUrl(w.main.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.main.location.search);setTimeout('modx.tree.restoreTree()',100)},oncontextmenu:function(e){if(e.ctrlKey)return;var el=e.target;if(modx.user.role===1&&/modxtv|modxplaceholder|modxattributevalue|modxchunk|modxsnippet|modxsnippetnocache/i.test(el.className)){var id=Date.now(),name=el.innerText.replace(/[\[|\]|{|}|\*||\#|\+|?|\!|&|=|`|:]/g,''),type=el.className.replace(/cm-modx/,''),n=!!name.replace(/^\d+$/,'');if(name&&n){e.preventDefault();modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',{a:'modxTagHelper',name:name,type:type},function(r){if(r){r=JSON.parse(r);for(var k in r){if(r.hasOwnProperty(k)&&r[k].url){r[k]['onclick']='if(event.shiftKey){modx.openWindow({url:\''+r[k].url+'\'})}else{modx.popup({url:\''+r[k].url+'\',title:\''+r.header.innerHTML+'\',width:\'95%\',height:\'95%\',margin:0,hide:0,hover:0,overlay:1,overlayclose:0,position:\'center elements\',animation:0,icon:\'none\'})}'}}r=JSON.stringify(r);el.id='node'+id;el.dataset.contextmenu=r;modx.tree.showPopup(e,id,name)}})}e.preventDefault()}},tabRow:{init:function(){var row=w.main.document.querySelector('.tab-pane > .tab-row');if(row)this.build(row)},build:function(row){var rowContainer=d.createElement('div'),sel=row.querySelector('.selected');rowContainer.className='tab-row-container';row.parentNode.insertBefore(rowContainer,row);rowContainer.appendChild(row);var p=d.createElement('i');p.className='fa fa-angle-left prev disable';p.onclick=function(e){e.stopPropagation();e.preventDefault();var sel=row.querySelector('.selected');if(sel.previousSibling){sel.previousSibling.click();modx.main.tabRow.scroll(row)}};rowContainer.appendChild(p);var n=d.createElement('i');n.className='fa fa-angle-right next disable';n.onclick=function(e){e.stopPropagation();e.preventDefault();var sel=row.querySelector('.selected');if(sel.nextSibling){sel.nextSibling.click();modx.main.tabRow.scroll(row)}};rowContainer.appendChild(n);setTimeout(function(){sel=row.querySelector('.selected');modx.main.tabRow.scroll(row,sel);w.main.addEventListener('resize',function(){modx.main.tabRow.scroll(row)},false);if(sel){if(sel.previousSibling)p.classList.remove('disable');if(sel.nextSibling)n.classList.remove('disable')}},100);row.onclick=function(e){var sel=e.target.tagName==='H2'?e.target:e.target.tagName==='SPAN'?e.target.parentNode:null;if(sel){if(sel.previousSibling){this.parentNode.querySelector('i.prev').classList.remove('disable')}else{this.parentNode.querySelector('i.prev').classList.add('disable')}if(sel.nextSibling){this.parentNode.querySelector('i.next').classList.remove('disable')}else{this.parentNode.querySelector('i.next').classList.add('disable')}modx.main.tabRow.scroll(this,sel)}}},scroll:function(row,sel,a){sel=sel||row.querySelector('.selected')||row.firstChild;a=a||100;var c=0,elms=row.childNodes;for(var i=0;isel.offsetLeft){$(row).animate({scrollLeft:sel.offsetLeft-(sel.previousSibling?30:1)},a)}if(sel.offsetLeft+sel.offsetWidth>row.offsetWidth+row.scrollLeft){$(row).animate({scrollLeft:sel.offsetLeft-row.offsetWidth+sel.offsetWidth+(sel.nextSibling?30:0)},a)}if(c>row.offsetWidth){this.drag(row)}},drag:function(row){row.onmousedown=function(e){if(e.button===0){e.preventDefault();var x=e.clientX,f=row.scrollLeft;row.ownerDocument.body.focus();row.onmousemove=row.ownerDocument.onmousemove=function(e){if(Math.abs(e.clientX-x)>5){e.stopPropagation();row.scrollLeft=f-(e.clientX-x);row.ownerDocument.body.classList.add('drag')}};row.onmouseup=row.ownerDocument.onmouseup=function(e){e.stopPropagation();row.onmousemove=null;row.ownerDocument.onmousemove=null;row.ownerDocument.body.classList.remove('drag')}}}}},work:function(){d.getElementById('mainloader').classList.add('show')},stopWork:function(){d.getElementById('mainloader').classList.remove('show')},scrollWork:function(){var a=w.main.frameElement.contentWindow,b=a.location.search.substring(1)||a.location.hash.substring(2),c=localStorage.getItem('page_y')||0,f=localStorage.getItem('page_url')||b;if(((modx.getActionFromUrl(f)===modx.getActionFromUrl(b))&&(modx.main.getQueryVariable('id',f)&&modx.main.getQueryVariable('id',f)===modx.main.getQueryVariable('id',b)))||(f===b)){a.scrollTo(0,c)}a.addEventListener('scroll',function(){if(this.pageYOffset>=0){localStorage.setItem('page_y',this.pageYOffset.toString());localStorage.setItem('page_url',b)}},false)},getQueryVariable:function(a,b){var f='';if(b||typeof b==='string'){b=b.split('?');b=b[1]||b[0];b=b.split('&');for(var i=0;iMath.abs(ay)&&this.swipe){if(ax<0&&this.sidebar){if(Math.abs(ax)>h)ax=-h;tree.style.transform='translate3d('+ax+'px, 0, 0)';tree.style.WebkitTransform='translate3d('+ax+'px, 0, 0)';modx.resizer.mask.style.opacity=(0.5-0.5/-h*ax).toFixed(2);if(Math.abs(ax)>h/3){this.swipe='left'}else{this.swipe='right'}}else if(ax>0&&!this.sidebar){if(Math.abs(ax)>h)ax=h;tree.style.transform='translate3d('+ -(h-ax)+'px, 0, 0)';tree.style.WebkitTransform='translate3d('+ -(h-ax)+'px, 0, 0)';modx.resizer.mask.style.opacity=(0.5/h*ax).toFixed(2);if(Math.abs(ax)>h/3){this.swipe='right'}else{this.swipe='left'}}}},false);w.addEventListener('touchend',function(){if(this.swipe==='left'){d.body.classList.add('sidebar-closed');modx.resizer.setWidth(0)}if(this.swipe==='right'){d.body.classList.remove('sidebar-closed');modx.resizer.setWidth(h)}tree.style.cssText='';modx.resizer.mask.style.cssText=''},false)}},onMouseDown:function(e){e=e||w.event;modx.resizer.dragElement=e.target!==null?e.target:e.srcElement;if((e.buttons===1||e.button===0)&&modx.resizer.dragElement.id===modx.resizer.id){modx.resizer.oldZIndex=modx.resizer.dragElement.style.zIndex;modx.resizer.dragElement.style.zIndex=modx.resizer.newZIndex;modx.resizer.dragElement.style.background=modx.resizer.background;localStorage.setItem('MODX_widthSideBar',modx.resizer.dragElement.offsetLeft>0?modx.resizer.dragElement.offsetLeft:0);d.body.appendChild(modx.resizer.mask);d.onmousemove=modx.resizer.onMouseMove;d.body.focus();d.body.classList.add('resizer_move');d.onselectstart=function(){return false};modx.resizer.dragElement.ondragstart=function(){return false};return false}},onMouseMove:function(e){e=e||w.event;if(e.clientX>0){modx.resizer.left=e.clientX}else{modx.resizer.left=0}modx.resizer.dragElement.style.left=modx.pxToRem(modx.resizer.left)+'rem';d.getElementById('tree').style.width=modx.pxToRem(modx.resizer.left)+'rem';d.getElementById('main').style.left=modx.pxToRem(modx.resizer.left)+'rem';if(e.clientX<-2||e.clientY<-2){modx.resizer.onMouseUp(e)}},onMouseUp:function(e){if(modx.resizer.dragElement!==null&&e.button===0&&modx.resizer.dragElement.id===modx.resizer.id){if(e.clientX>0){d.body.classList.remove('sidebar-closed');modx.resizer.left=e.clientX}else{d.body.classList.add('sidebar-closed');modx.resizer.left=0}d.cookie='MODX_widthSideBar='+modx.pxToRem(modx.resizer.left);modx.resizer.dragElement.style.zIndex=modx.resizer.oldZIndex;modx.resizer.dragElement.style.background='';modx.resizer.dragElement.ondragstart=null;modx.resizer.dragElement=null;d.body.classList.remove('resizer_move');d.body.removeChild(modx.resizer.mask);d.onmousemove=null;d.onselectstart=null}},toggle:function(){if(modx.isMobile||w.innerWidth<=modx.minWidth){if(d.body.classList.contains('sidebar-closed')){d.body.classList.remove('sidebar-closed');localStorage.setItem('MODX_widthSideBar',0);d.cookie='MODX_widthSideBar='+modx.pxToRem(parseInt(d.getElementById('tree').offsetWidth))}else{localStorage.setItem('MODX_widthSideBar',parseInt(d.getElementById('tree').offsetWidth));d.body.classList.add('sidebar-closed');d.cookie='MODX_widthSideBar=0'}}else{var p=d.getElementById('tree').offsetWidth!==0?0:parseInt(localStorage.getItem('MODX_widthSideBar'))?parseInt(localStorage.getItem('MODX_widthSideBar')):modx.config.tree_width;modx.resizer.setWidth(p)}},setWidth:function(a){if(a>0){localStorage.setItem('MODX_widthSideBar',0);d.body.classList.remove('sidebar-closed')}else{localStorage.setItem('MODX_widthSideBar',parseInt(d.getElementById('tree').offsetWidth));d.body.classList.add('sidebar-closed')}d.cookie='MODX_widthSideBar='+modx.pxToRem(a);d.getElementById('tree').style.width=modx.pxToRem(a)+'rem';d.getElementById('resizer').style.left=modx.pxToRem(a)+'rem';d.getElementById('main').style.left=modx.pxToRem(a)+'rem'},setDefaultWidth:function(){modx.resizer.setWidth(modx.remToPx(modx.config.tree_width))}},tree:{ctx:null,rpcNode:null,itemToChange:'',selectedObjectName:null,selectedObject:0,selectedObjectDeleted:0,selectedObjectUrl:'',drag:false,deleted:[],init:function(){this.restoreTree()},draggable:function(){if(modx.permission.dragndropdocintree){var els=d.querySelectorAll('#treeRoot a:not(.empty)');for(var i=0;i-1:true;modx.tree.itemToChange=this.dataset.id||this.parentNode.id.replace('node','');modx.tree.selectedObjectName=this.dataset.titleEsc;if(draggable){this.parentNode.draggable=true;this.parentNode.ondragstart=modx.tree.ondragstart}else{this.parentNode.draggable=false;this.parentNode.ondragstart=function(){return false}}}},ondragstart:function(e){e.dataTransfer.effectAllowed='all';e.dataTransfer.dropEffect='all';e.dataTransfer.setData('text',this.id.substr(4))},ondragenter:function(e){if(d.getElementById('node'+modx.tree.itemToChange)===(this.parentNode.closest('#node'+modx.tree.itemToChange)||this.parentNode)){this.parentNode.className='';e.dataTransfer.effectAllowed='none';e.dataTransfer.dropEffect='none';modx.tree.drag=false}else{this.parentNode.className='dragenter';e.dataTransfer.effectAllowed='copy';e.dataTransfer.dropEffect='copy';modx.tree.drag=true}e.preventDefault()},ondragover:function(e){if(modx.tree.drag){var a=e.clientY;var b=parseInt(this.getBoundingClientRect().top);var c=a-b;if(c>this.offsetHeight/1.51){this.parentNode.classList.add('dragafter');this.parentNode.classList.remove('dragbefore');this.parentNode.classList.remove('dragenter');e.dataTransfer.effectAllowed='link';e.dataTransfer.dropEffect='link'}else if(c'}if(this.nextSibling){if(this.nextSibling.innerHTML){this.nextSibling.appendChild(el)}else{el.parentNode.removeChild(el)}els=this.parentNode.lastChild.children;for(i=0;i'}this.parentNode.parentNode.insertBefore(el,this.parentNode.nextSibling);els=this.parentNode.parentNode.children;for(i=0;i'}this.parentNode.parentNode.insertBefore(el,this.parentNode);els=this.parentNode.parentNode.children;for(i=0;i-1:true)){alert(modx.lang.error_no_privileges);modx.tree.restoreTree();return}modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',{a:'movedocument',id:id,parent:parent,menuindex:menuindex},function(r){if(r.errors)alert(r.errors);modx.tree.restoreTree()},'json');var b=w.main.frameElement.contentWindow.location.search.substr(1);if(modx.getActionFromUrl(b,27)&&parseInt(modx.main.getQueryVariable('id',b))===parseInt(id)){var index=menuindex.indexOf(id),elMenuIndex=w.main.document.querySelector('#documentPane input[name=menuindex]'),elParent=w.main.document.querySelector('#documentPane input[name=parent]'),elParentName=w.main.document.querySelector('#documentPane #parentName');if(elMenuIndex&&index>=0)elMenuIndex.value=index;if(elParent&&elParentName){elParent.value=parent;elParentName.innerHTML=parent+' ('+d.querySelector('#node'+parent+' > a').dataset.titleEsc+')'}}},toggleTheme:function(){var a,b=1,myCodeMirrors=w.main.myCodeMirrors,key;if(typeof localStorage['MODX_themeMode']==='undefined'){localStorage['MODX_themeMode']=modx.config.theme_mode}if(modx.thememodes[parseInt(localStorage['MODX_themeMode'])+1]){b=parseInt(localStorage['MODX_themeMode'])+1}a=modx.thememodes[b];for(key in modx.thememodes){if(modx.thememodes[key]){d.body.classList.remove(modx.thememodes[key]);w.main.document.body.classList.remove(modx.thememodes[key])}}d.body.classList.add(a);w.main.document.body.classList.add(a);d.cookie='MODX_themeMode='+b;localStorage['MODX_themeMode']=b;if(typeof myCodeMirrors!=='undefined'){for(key in myCodeMirrors){if(myCodeMirrors.hasOwnProperty(key)){if(~a.indexOf('dark')){w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-'+myCodeMirrors[key].options.darktheme);w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-'+myCodeMirrors[key].options.defaulttheme)}else{w.main.document.getElementsByName(key)[0].nextElementSibling.classList.remove('cm-s-'+myCodeMirrors[key].options.darktheme);w.main.document.getElementsByName(key)[0].nextElementSibling.classList.add('cm-s-'+myCodeMirrors[key].options.defaulttheme)}}}}},toggleNode:function(e,id){e=e||w.event;if(e.ctrlKey)return;e.stopPropagation();var el=d.getElementById('node'+id).firstChild;this.rpcNode=el.nextSibling;var toggle=el.querySelector('.toggle'),icon=el.querySelector('.icon');if(this.rpcNode.innerHTML===''){if(toggle)toggle.innerHTML=el.dataset.iconCollapsed;icon.innerHTML=el.dataset.iconFolderOpen;var rpcNodeText=this.rpcNode.innerHTML,loadText=modx.lang.loading_doc_tree;modx.openedArray[id]=1;if(rpcNodeText===''||rpcNodeText.indexOf(loadText)>0){var folderState=this.getFolderState();d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent='+el.dataset.indent+'&parent='+id+'&expandAll='+el.dataset.expandall+folderState,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})}this.saveFolderState()}else{if(toggle)toggle.innerHTML=el.dataset.iconExpanded;icon.innerHTML=el.dataset.iconFolderClose;delete modx.openedArray[id];this.rpcNode.style.overflow='hidden';$(this.rpcNode.firstChild).animate({marginTop:-this.rpcNode.offsetHeight+'px'},100,function(){this.parentNode.innerHTML=''});this.saveFolderState()}e.preventDefault()},rpcLoadData:function(a){if(this.rpcNode!==null){var el;this.rpcNode.innerHTML=typeof a==='object'?a.responseText:a;this.rpcNode.loaded=true;if(this.rpcNode.firstChild.tagName==='DIV'){if(this.rpcNode.id==='treeRoot'){el=d.getElementById('binFull');if(el){this.showBin(true)}else{this.showBin(false)}}else{this.rpcNode.style.overflow='hidden';this.rpcNode.firstElementChild.style.marginTop=-this.rpcNode.offsetHeight+'px';$(this.rpcNode.firstChild).animate({marginTop:0},100)}d.getElementById('treeloader').classList.remove('visible')}else{el=d.getElementById('loginfrm');if(el){this.rpcNode.parentNode.removeChild(this.rpcNode);w.location.href=modx.MODX_MANAGER_URL}}}},treeAction:function(e,id,title){if(e.ctrlKey)return;var el=d.getElementById('node'+id).firstChild,treepageclick=el.dataset.treepageclick,showchildren=parseInt(el.dataset.showchildren),openfolder=parseInt(el.dataset.openfolder);title=title||el.dataset&&el.dataset.titleEsc;if(tree.ca==='move'){try{this.setSelectedByContext(id);w.main.setMoveValue(id,title)}catch(oException){alert(modx.lang.unable_set_parent)}}if(tree.ca==='open'||tree.ca===''){if(id===0){href='?a=2'}else{var href='';if(!isNaN(treepageclick)&&isFinite(treepageclick)){href='?a='+treepageclick+'&r=1&id='+id+(openfolder===0?this.getFolderState():'')}else{href=treepageclick}if(openfolder===2){if(showchildren!==1){href=''}this.toggleNode(e,id)}}if(href){if(e.shiftKey){w.getSelection().removeAllRanges();modx.openWindow(href);this.restoreTree()}else{modx.tabs({url:modx.MODX_MANAGER_URL+href,title:title+'('+id+')'});if(modx.isMobile&&w.innerWidth0?e.clientX:e.pageX;y=e.clientY>0?e.clientY:e.pageY;e.view.position=e.view.frameElement?e.view.frameElement.getBoundingClientRect():e.target.offsetParent.getBoundingClientRect();if(e.view.frameElement){x+=e.view.position.left;y+=e.view.frameElement.offsetParent.offsetTop}else{if(e.target.parentNode.parentNode.classList.contains('node')){x+=50}}if(x>e.view.position.width){x=e.view.position.width-this.ctx.offsetWidth}if(y+this.ctx.offsetHeight/2>e.view.position.height){y=e.view.position.height-this.ctx.offsetHeight-5}else if(y-this.ctx.offsetHeight/20?e.clientX:e.pageX;y=e.clientY>0?e.clientY:e.pageY;if(y+ctx.offsetHeight/2>bodyHeight){y=bodyHeight-ctx.offsetHeight-5}else if(y-ctx.offsetHeight/230){this.selectedObjectName=this.selectedObjectName.substr(0,30)+'...'}var f=d.getElementById('nameHolder');f.innerHTML=this.selectedObjectName;el.style.left=a+(modx.config.textdir?'-190':'')+'px';el.style.top=b+'px';el.classList.add('show')},menuHandler:function(a){switch(a){case 1:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=3&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 2:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=27&r=1&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 3:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=4&pid='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 4:if(this.selectedObjectDeleted){alert('"'+this.selectedObjectName+'" '+modx.lang.already_deleted)}else if(confirm('"'+this.selectedObjectName+'"\n\n'+modx.lang.confirm_delete_resource)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=6&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 5:this.setActiveFromContextMenu(this.itemToChange);modx.tabs({url:modx.MODX_MANAGER_URL+'?a=51&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 6:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=72&pid='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 7:if(confirm(modx.lang.confirm_resource_duplicate)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=94&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 8:if(d.getElementById('node'+this.itemToChange).firstChild.dataset.deleted){if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_undelete)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=63&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}}else{alert('"'+this.selectedObjectName+'"'+modx.lang.not_deleted)}break;case 9:if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_publish)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=61&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}break;case 10:if(this.itemToChange!==modx.config.site_start){if(confirm('"'+this.selectedObjectName+'" '+modx.lang.confirm_unpublish)===true){modx.tabs({url:modx.MODX_MANAGER_URL+'?a=62&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'})}}else{alert('Document is linked to site_start variable and cannot be unpublished!')}break;case 11:modx.tabs({url:modx.MODX_MANAGER_URL+'?a=56&id='+this.itemToChange,title:this.selectedObjectName+'('+this.itemToChange+')'});break;case 12:w.open(d.getElementById('node'+this.itemToChange).firstChild.dataset.href,'previeWin');break;default:alert('Unknown operation command.')}},setSelected:function(a){var el=d.querySelector('#tree .current');if(el)el.classList.remove('current');if(a){if(typeof a==='object'){a.classList.add('current')}else{el=d.querySelector('#node'+a+'>.node')||d.getElementById('node'+a);if(el)el.classList.add('current')}}},setActiveFromContextMenu:function(a){var el=d.querySelector('#node'+a+'>.node');if(el)this.setSelected(el)},setSelectedByContext:function(a){var el=d.querySelector('#treeRoot .selected');if(el)el.classList.remove('selected');el=d.querySelector('#node'+a+'>.node');if(el)el.classList.add('selected')},setItemToChange:function(){var a=w.main.document&&(w.main.document.URL||w.main.document.location.search),b=modx.getActionFromUrl(a);if(a&&modx.typesactions[b]){this.itemToChange=(modx.typesactions[b]===7?'':modx.typesactions[b]+'_')+parseInt(modx.main.getQueryVariable('id',a))}else{this.itemToChange=''}this.setSelected(this.itemToChange)},restoreTree:function(){if(d.getElementById('treeRoot')){d.getElementById('treeloader').classList.add('visible');this.setItemToChange();this.rpcNode=d.getElementById('treeRoot');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=2&id='+this.itemToChange,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})}},expandTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=1&id='+this.itemToChange,function(r){modx.tree.rpcLoadData(r);modx.tree.saveFolderState();modx.tree.draggable()})},collapseTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&indent=1&parent=0&expandAll=0&id='+this.itemToChange,function(r){modx.openedArray=[];modx.tree.saveFolderState();modx.tree.rpcLoadData(r);modx.tree.draggable()})},updateTree:function(){this.rpcNode=d.getElementById('treeRoot');d.getElementById('treeloader').classList.add('visible');var a=d.sortFrm;var b='a=1&f=nodes&indent=1&parent=0&expandAll=2&dt='+a.dt.value+'&tree_sortby='+a.sortby.value+'&tree_sortdir='+a.sortdir.value+'&tree_nodename='+a.nodename.value+'&id='+this.itemToChange+'&showonlyfolders='+a.showonlyfolders.value;modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php',b,function(r){modx.tree.rpcLoadData(r);modx.tree.draggable()})},getFolderState:function(){var a;if(modx.openedArray!==[0]){a='&opened=';for(var key in modx.openedArray){if(modx.openedArray[key]){a+=key+'|'}}}else{a='&opened='}return a},saveFolderState:function(){modx.post(modx.MODX_MANAGER_URL+'media/style/'+modx.config.theme+'/ajax.php','a=1&f=nodes&savestateonly=1'+this.getFolderState())},showSorter:function(e){e=e||w.event;var el=d.getElementById('floater');e.target.dataset.toggle='#floater';el.classList.toggle('show');el.onclick=function(e){e.stopPropagation()}},emptyTrash:function(){if(confirm(modx.lang.confirm_empty_trash)===true){modx.get(modx.MODX_MANAGER_URL+'?a=64',function(){modx.tabsClose(modx.tree.deleted);modx.tree.deleted=[];modx.tree.restoreTree()})}},showBin:function(a){var el=d.getElementById('treeMenu_emptytrash');if(el){if(a){el.title=modx.lang.empty_recycle_bin;el.classList.remove('disabled');el.innerHTML=modx.style.empty_recycle_bin;el.onclick=function(){modx.tree.emptyTrash()};var els=d.getElementById('tree').querySelectorAll('.deleted');for(var i=0;i0){if(el){el.innerHTML=c[0];el.style.display='block'}}else{if(el)el.style.display='none'}if(c[1]>0){el=d.getElementById('newMail');if(el){el.innerHTML=''+modx.style.email+modx.lang.inbox+' ('+c[0]+' / '+c[1]+')';el.style.display='block'}}if(modx.config.mail_check_timeperiod>0)setTimeout('modx.updateMail(true)',1000*modx.config.mail_check_timeperiod)})}}catch(oException){setTimeout('modx.updateMail(true)',1000*modx.config.mail_check_timeperiod)}},openWindow:function(a){if(typeof a!=='object'){a={'url':a}}if(!a.width)a.width=parseInt(w.innerWidth*0.9)+'px';if(!a.height)a.height=parseInt(w.innerHeight*0.8)+'px';if(!a.left)a.left=parseInt(w.innerWidth*0.05)+'px';if(!a.top)a.top=parseInt(w.innerHeight*0.1)+'px';if(!a.title)a.title=Math.floor((Math.random()*999999)+1);if(a.url){if(this.plugins.EVOmodal===1){top.EVO.modal.show(a)}else{w.open(a.url,a.title,'width='+a.width+',height='+a.height+',top='+a.top+',left='+a.left+',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no')}}},tabsClose:function(a){if(modx.config.global_tabs&&a){for(var k in a){if(a.hasOwnProperty(k)){var el=d.getElementById(a[k]);if(el){el.firstElementChild.contentWindow.documentDirty=false;el.close()}}}}},tabs:function(a){function Tabs(a){var s=this;this.url=a.url;this.title=a.title||'';this.name=a.name||'';this.timer=null;this.olduid='';this.closeactions=[6,61,62,63,94];this.saveAndCloseActions=[75,86,99,106];this.reload=typeof a.reload!=='undefined'?a.reload:1;this.action=modx.getActionFromUrl(a.url);this.uid=modx.getActionFromUrl(a.url,2)?'home':modx.urlToUid(a.url);this.page=d.getElementById('evo-tab-page-'+this.uid);this.row=d.getElementsByClassName('evo-tab-row')[0].firstElementChild;this.tab=d.getElementById('evo-tab-'+this.uid);if(this.page){if(this.uid==='home'){if(this.reload){this.page.firstElementChild.src=this.url;this.show()}else{this.reload=1;if(this.tab.onclick===null){this.tab.onclick=function(e){s.select.call(s,e,this)}}this.tab.show=function(e){s.show.call(s,e)};modx.tabs.selected=this.tab}}else{this.show();if(~this.closeactions.indexOf(this.action)){this.setDocPublished();modx.get(this.url,function(){modx.tree.restoreTree()})}}}else if(~this.closeactions.indexOf(this.action)){modx.get(this.url,function(){modx.tree.restoreTree()})}else{this.create()}}Tabs.prototype={create:function(){var s=this;modx.main.work();modx.tabs.selected=this.row.querySelector('.selected');if(modx.tabs.selected){d.getElementById(modx.tabs.selected.id.replace('tab','tab-page')).classList.remove('show');modx.tabs.selected.classList.remove('selected')}this.page=d.createElement('div');this.page.id='evo-tab-page-'+this.uid;this.page.className='evo-tab-page iframe-scroller show';if(/iPhone|iPad|iPod/i.test(navigator.userAgent)){this.page.innerHTML=''}else{this.page.innerHTML=''};d.getElementById('main').appendChild(this.page);console.time('load-tab');this.page.firstElementChild.onload=function(e){s.onload.call(s,e);console.timeEnd('load-tab')};this.tab=d.createElement('h2');this.tab.id='evo-tab-'+this.uid;this.tab.className='tab selected';this.icon='';if(!/'}this.tab.innerHTML=''+this.icon+this.title+'×';this.row.appendChild(this.tab);this.tab.onclick=function(e){s.select.call(s,e,this)};this.tab.close=function(e){s.close.call(s,e)};this.tab.show=function(e){s.show.call(s,e)};this.page.close=function(e){s.close.call(s,e)}},onload:function(e){var s=this;w.main=e.target.contentWindow||e.target.defaultView;this.url=w.main.location.search||w.location.hash.substring(1);this.olduid=this.uid;this.uid=modx.urlToUid(this.url);if(!!w.main.__alertQuit){w.main.alert=function(a){};var message=w.main.document.body.innerHTML;w.main.document.body.style.display='none';history.pushState(null,d.title,modx.getActionFromUrl(w.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.location.search);w.onpopstate=function(){history.go(1)};modx.popup({type:'warning',title:'MODX :: Alert',position:'top center alertQuit',content:message,wrap:'body'});modx.getLockedElements(modx.getActionFromUrl(this.url),modx.main.getQueryVariable('id',this.url),function(data){if(!!data){s.page.close();modx.tree.restoreTree()}else{w.main.location.href=modx.MODX_MANAGER_URL+s.url;w.history.replaceState(null,d.title,modx.getActionFromUrl(s.url,2)?modx.MODX_MANAGER_URL:'#'+s.url)}})}else{if(modx.getActionFromUrl(this.url,2)||(~this.saveAndCloseActions.indexOf(modx.getActionFromUrl(this.url))&&parseInt(modx.main.getQueryVariable('r',this.url)))){this.close(e)}else if(this.olduid!==this.uid&&d.getElementById('evo-tab-'+this.uid)){this.close(e);d.getElementById('evo-tab-'+this.uid).show()}else{this.title=w.main.document.body.querySelectorAll('h1')[0]&&w.main.document.body.querySelectorAll('h1')[0].innerHTML||this.title;if(this.title&&this.uid!=='home'){this.tab.innerHTML=''+this.title+'×'}this.page.id='evo-tab-page-'+this.uid;this.tab.id='evo-tab-'+this.uid;this.tab.classList.remove('changed');this.show();modx.main.onload(e);w.main.document.addEventListener('click',function a(e){if(typeof e.view.documentDirty!=='undefined'&&e.view.documentDirty&&!s.tab.classList.contains('changed')){s.tab.classList.add('changed');this.removeEventListener(e.type,a,false)}},false);w.main.document.addEventListener('keyup',function a(e){if(typeof e.view.documentDirty!=='undefined'&&e.view.documentDirty&&!s.tab.classList.contains('changed')){s.tab.classList.add('changed');this.removeEventListener(e.type,a,false)}},false)}}},show:function(){var s=this;modx.tabs.selected=this.row.querySelector('.selected');if(modx.tabs.selected&&modx.tabs.selected!==this.tab){d.getElementById(modx.tabs.selected.id.replace('tab','tab-page')).classList.remove('show');modx.tabs.selected.classList.remove('selected')}this.page.classList.add('show');this.tab.classList.add('selected');modx.tabs.selected=this.tab;w.main=this.page.firstElementChild.contentWindow;w.history.replaceState(null,w.main.document.title,modx.getActionFromUrl(w.main.location.search,2)?modx.MODX_MANAGER_URL:'#'+w.main.location.search);modx.tree.setItemToChange();modx.main.tabRow.scroll(this.row,this.tab,350)},close:function(e){var documentDirty=this.page.firstElementChild.contentWindow.documentDirty;var checkDirt=!!this.page.firstElementChild.contentWindow.checkDirt;if(documentDirty&&checkDirt&&confirm(this.page.firstElementChild.contentWindow.checkDirt(e))||!documentDirty){if(modx.tabs.selected===this.tab){tree.ca='open'}modx.tabs.selected=this.tab.classList.contains('selected')?this.tab.previousElementSibling:this.row.querySelector('.selected');this.page.parentNode.removeChild(this.page);this.row.removeChild(this.tab);modx.tabs.selected.show()}},select:function(e){if(e.target.className==='tab-close'){this.close(e)}else if(modx.tabs.selected===this.tab){var s=this;if(this.timer){clearTimeout(this.timer);this.timer=null;w.main.location.reload()}else{this.timer=setTimeout(function(){s.timer=null},250)}}else{this.show()}},setDocPublished:function(){var el=w.main.document.getElementsByName('publishedcheck')[0];if(el){el.checked=this.action===61;w.main.document.getElementsByName('published')[0].value=+el.checked}if(modx.getActionFromUrl(w.main.location.search,3)){w.main.location.reload()}}};if(modx.config.global_tabs){if(typeof a.currentTarget!=='undefined'){var e=a;if(e.button===0&&e.target&&(e.target.tagName==='A'&&e.target.target==='main'||(e.target.parentNode&&e.target.parentNode.tagName==='A'&&e.target.parentNode.target==='main'))){a=e.target.tagName==='A'&&e.target||e.target.parentNode.tagName==='A'&&e.target.parentNode;if(e.shiftKey){modx.openWindow({url:a.href})}else{modx.tabs({url:a.href,title:a.innerHTML})}e.preventDefault()}}else{return new Tabs(a)}}else if(a.url){if(w.main){w.main.frameElement.src=a.url}else{modx.openWindow(a.url)}}},popup:function(a){if(typeof a==='object'&&(a.url||a.content||a.text)){var o={addclass:'',animation:'fade',content:a.content||a.text||'',clickclose:0,closeall:0,data:'',dataType:'document',delay:5000,draggable:!1,event:null,height:'auto',hide:1,hover:1,icon:'',iframe:'iframe',margin:'.5rem',maxheight:'',method:'GET',overlay:0,overlayclose:0,position:'center',resize:!1,selector:'',showclose:1,target:'main',uid:'',type:'default',title:'',url:'',width:'20rem',wrap:a.wrap||w.main.document.body,zIndex:10500,w:null,show:function(){if(~o.position.indexOf('center')){if(o.event){o.el.style.left=o.event.clientX+o.mt+'px';o.el.style.bottom=o.w.innerHeight-o.el.offsetHeight-o.event.clientY+o.mt+'px'}else{o.el.style.left=/(%)/.test(o.width)?(100-parseInt(o.width))/2-o.mt/(o.w.innerWidth/100)+'%':(o.w.innerWidth-o.el.offsetWidth)/2-o.mt+'px';o.el.style.bottom=/(%)/.test(o.height)?(100-parseInt(o.height))/2-o.mt/(o.w.innerHeight/100)+'%':(o.w.innerHeight-o.el.offsetHeight-o.wrap.offsetTop)/2-o.mt+'px'}}if(~o.position.indexOf('left')){o.el.style.left=0}if(~o.position.indexOf('right')){o.el.style.right=0}else{o.el.style.right='auto'}if(~o.position.indexOf('top')){o.el.style.top=0;o.el.style.bottom=''}else{o.el.style.top='auto'}if(~o.position.indexOf('bottom')){o.el.style.bottom=0}o.calc();o.el.className+=' in';if(o.showclose){o.el.querySelector('.close').onclick=o.close}if(o.hide){o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);o.close()},o.delay)}if(o.hover){o.el.onmouseenter=function(){clearTimeout(o.el.timer)};o.el.onmouseleave=o.close}if(o.overlayclose&&o.o){o.o.onclick=o.close}if(o.clickclose){o.el.onclick=o.close}if(o.draggable){modx.dragging(o.el,{wrap:o.wrap,resize:o.resize})}},close:function(e){o.event=e||o.event||w.event;if(o.url&&o.iframe==='iframe'){var els=o.wrap.ownerDocument.querySelectorAll('.'+o.className+'.in');if(els){var documentDirty=o.el.lastElementChild.firstElementChild.contentWindow.documentDirty;if(documentDirty&&confirm(o.el.lastElementChild.firstElementChild.contentWindow.checkDirt(o.event))||!documentDirty){o.el.classList.remove('in');if(!o.animation){o.el.classList.remove('show')}o.calc(1);if(o.o&&o.o.parentNode){o.o.parentNode.removeChild(o.o);o.wrap.style.overflow=''}o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);if(o.el.parentNode){o.el.parentNode.removeChild(o.el)}},200)}}}else{o.el.classList.remove('in');if(!o.animation){o.el.classList.remove('show')}o.calc(1);if(o.o&&o.o.parentNode){o.o.parentNode.removeChild(o.o);o.wrap.style.overflow=''}o.el.timer=setTimeout(function(){clearTimeout(o.el.timer);if(o.el.parentNode){o.el.parentNode.removeChild(o.el)}},200)}if(typeof o.onclose==='function'){o.onclose(e,o.el)}},calc:function(f){var els=o.wrap.ownerDocument.querySelectorAll('.'+o.className+'.in[data-position="'+o.el.dataset.position+'"]');if(els&&els.length){o.els=[];for(var i=0;i×
          '}if(o.title){o.header=document.createElement('div');if(o.icon!=='none'){o.header.innerHTML+=''}o.header.innerHTML+=o.title;o.header.className='evo-popup-header';o.el.appendChild(o.header)}o.el.innerHTML+='
          ';o.wrap.appendChild(o.el);o.mt=parseFloat(getComputedStyle(o.el).marginTop);if(o.maxheight){o.maxheight=/(%)/.test(o.maxheight)?(o.w.innerHeight-o.el.offsetHeight-o.mt)/100*parseInt(o.maxheight):o.maxheight;o.el.lastChild.style.overflowY='auto';o.el.lastChild.style.maxHeight=o.maxheight+'px'}if(o.url){o.draggable=1;if(o.iframe==='iframe'){o.resize=1;o.uid=modx.urlToUid(a.url);o.el.className+=' '+o.addclass+' '+o.className+'-iframe';o.el.id='evo-popup-'+o.uid;d.getElementById('mainloader').className='show';o.frame=d.createElement('iframe');o.frame.width='100%';o.frame.height='100%';o.frame.frameBorder='0';o.frame.src=o.url;o.frame.onload=function(e){e.target.contentWindow.opener=o.w;a.url=e.target.contentWindow.location.href;o.uid=modx.urlToUid(a.url);o.event=e;if(!!e.target.contentWindow.__alertQuit){modx.popup({type:'warning',title:'MODX :: Alert',position:'top center alertQuit',content:e.target.contentWindow.document.body.querySelector('p').innerHTML});e.target.contentWindow.document.body.innerHTML='';e.target.contentWindow.alert=function(){}}else{if(modx.getActionFromUrl(a.url,2)||o.wrap.querySelectorAll('#evo-popup-'+o.uid).length>1){o.el.close()}else{if(e.target.contentDocument.querySelectorAll('h1')[0]){a.title=e.target.contentDocument.querySelectorAll('h1')[0].innerHTML}else if(e.target.contentDocument.title){a.title=e.target.contentDocument.title}if(o.header){e.target.offsetParent.offsetParent.getElementsByClassName(o.header.className)[0].innerHTML=a.title}e.target.offsetParent.offsetParent.id='evo-popup-'+o.uid;e.target.offsetParent.offsetParent.classList.remove('changed')}}e.target.contentWindow.close=o.close;modx.main.stopWork()};o.el.lastChild.appendChild(o.frame);o.show()}else{var xhr=new XMLHttpRequest();xhr.open(o.method,o.url,true);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');xhr.setRequestHeader('X-REQUESTED-WITH','XMLHttpRequest');if(o.dataType){xhr.responseType=o.dataType}xhr.onload=function(){if(this.readyState===4){o.el.className+=' '+o.className+'-ajax';if(o.dataType==='document'){if(o.selector){var r=this.response.documentElement.querySelector(o.selector);if(r){o.el.lastChild.innerHTML+=r.innerHTML}}else{o.el.lastChild.innerHTML+=this.response.body.innerHTML}}else{o.el.lastChild.innerHTML+=this.response}o.show()}};xhr.send(o.data)}}else{o.el.lastChild.innerHTML+=o.content;o.show()}}return o}},getWindowDimension:function(){var a=0,b=0,c=d.documentElement,e=d.body;if(typeof(w.innerWidth)==='number'){a=w.innerWidth;b=w.innerHeight}else if(c&&(c.clientWidth||c.clientHeight)){a=c.clientWidth;b=c.clientHeight}else if(e&&(e.clientWidth||e.clientHeight)){a=e.clientWidth;b=e.clientHeight}return{'width':a,'height':b}},hideDropDown:function(e){e=e||w.event||w.main.event;if(tree.ca==='open'||tree.ca===''){modx.tree.setSelectedByContext()}if(modx.tree.ctx!==null){d.getElementById(modx.frameset).removeChild(modx.tree.ctx);modx.tree.ctx=null}if(!/dropdown\-item/.test(e.target.className)){var els=d.querySelectorAll('.dropdown.show'),n=null,t=e.target||e.target.parentNode,i;if(typeof t.dataset.toggle!=='undefined'){n=d.querySelector(t.dataset.toggle)}else if(t.classList.contains('dropdown-toggle')){n=t.offsetParent}for(i=0;i';if(this.classDrag)this.el.classList.add(this.classDrag);if(this.classResize)this.el.classList.add(this.classResize);this.el.insertBefore(this.borders,this.el.firstChild);if(this.handler&&this.el.getElementsByClassName(this.handler)[0]){this.handler=this.el.getElementsByClassName(this.handler)[0];this.handlerHeight=this.handler.offsetHeight}this.el.onmousedown=function(e){s.mousedown(e)};this.el.ontouchstart=function(e){s.mousedown(e.changedTouches[0])};this.wrap.addEventListener('mousemove',function(e){s.calc(e)},false);this.wrap.addEventListener('touchmove',function(e){s.calc(e.changedTouches[0])},false)};this.dragging.init.prototype={mousedown:function(e){if(e.target.classList.contains('close')){return}e=document.all?window.event:e;var s=this,x=document.all?window.event.clientX:e.clientX,y=document.all?window.event.clientY:e.clientY,style=w.getComputedStyle(this.el);this.elmX=(x-this.el.offsetLeft+parseInt(style.marginLeft));this.elmY=(y-this.el.offsetTop+parseInt(style.marginTop));this.el.position=this.el.getBoundingClientRect();this.el.style.position='fixed';this.el.style.transitionDuration='0s';this.el.style.webkitTransitionDuration='0s';this.el.style.left=this.el.offsetLeft-parseInt(style.marginLeft)+'px';this.el.style.top=this.el.offsetTop-parseInt(style.marginTop)+'px';this.el.style.right='auto';this.el.style.bottom='auto';this.el.style.width=this.el.position.width+'px';this.el.style.height=this.el.position.height+'px';if(e.target.parentNode===this.borders){this.isresize=this.resize;this.el.classList.add('is-resize')}else{if(!this.handler||(this.handler&&e.target===this.handler)){this.isdrag=true;this.el.classList.add('is-drag')}}if(typeof this.start==='function'){this.onstart(e,this.el)}if(e.preventDefault){e.preventDefault()}else{document.onselectstart=function(){return false}}this.wrap.onmousemove=function(e){s.mousemove(e)};this.wrap.ontouchmove=function(e){s.mousemove(e.changedTouches[0]);e.stopPropagation()};this.wrap.onmouseup=function(e){s.mouseup(e)};this.wrap.ontouchend=function(e){s.mouseup(e.changedTouches[0]);e.stopPropagation()}},mousemove:function(e){var x=document.all?window.event.clientX:e.clientX,y=document.all?window.event.clientY:e.clientY;if(this.isresize){if(this.onRight)this.el.style.width=Math.max(x-this.el.position.left+(this.el.position.width-this.x),this.minWidth)+'px';if(this.onBottom)this.el.style.height=Math.max(y-this.el.position.top+(this.el.position.height-this.y),this.minHeight)+'px';if(this.onLeft){this.width=Math.max(this.el.position.left-x+this.el.position.width+this.x,this.minWidth);if(this.width>this.minWidth){this.el.style.width=this.width+'px';this.el.style.left=x-this.elmX+'px'}}if(this.onTop){var currentHeight=Math.max(this.el.position.top-y+this.el.position.height+this.y,this.minHeight);if(currentHeight>this.minHeight){this.el.style.height=currentHeight+'px';this.el.style.top=y-this.elmY+'px'}}if(typeof this.onresize==='function'){this.onresize(e,this.el)}}else if(this.isdrag){this.el.style.opacity=this.opacity;this.el.style.left=x-this.elmX+'px';this.el.style.top=y-this.elmY+'px';if(typeof this.drag==='function'){this.ondrag(e,this.el)}}},mouseup:function(e){if(this.isdrag||this.isresize){this.el.classList.remove('is-resize');this.el.classList.remove('is-drag');this.el.style.opacity='';this.el.style.transitionDuration='';this.el.style.webkitTransitionDuration='';this.el.position=this.el.getBoundingClientRect();this.isdrag=false;this.isresize=false;this.wrap.onmousemove=null;this.wrap.onselectstart=null;if(typeof this.stop==='function'){this.onstop(e,this.el)}}},calc:function(e){if(this.isresize||this.isdrag){return}this.x=e.clientX-this.el.offsetLeft;this.y=e.clientY-this.el.offsetTop;if(this.resize){this.onTop=this.y=this.el.offsetWidth-this.border;this.onBottom=this.y>=this.el.offsetHeight-this.border;if(this.onRight&&this.onBottom||this.onLeft&&this.onTop){this.el.style.cursor='nwse-resize'}else if(this.onRight&&this.onTop||this.onBottom&&this.onLeft){this.el.style.cursor='nesw-resize'}else if(this.onRight||this.onLeft){this.el.style.cursor='ew-resize'}else if(this.onBottom||this.onTop){this.el.style.cursor='ns-resize'}else if(this.x>0&&this.y>0&&(this.x=this.border)){this.el.style.cursor='move'}else{this.el.style.cursor='default'}}else{if(this.x>0&&this.y>0&&(this.x=this.border)){this.el.style.cursor='move'}}}};return new this.dragging.init(a,b)},setTypeIcon:function(a){var b='';switch(this.typesactions[a]){case 1:b='fa fa-newspaper-o';break;case 2:b='fa fa-list-alt';break;case 3:b='fa fa-th-large';break;case 4:b='fa fa-code';break;case 5:b='fa fa-plug';break;case 6:b='fa fa-cube';break;case 7:b='fa fa-pencil-square-o';break;default:b='fa fa-circle'}return b}});w.mainMenu={};w.mainMenu.stopWork=function(){modx.main.stopWork()};w.mainMenu.work=function(){modx.main.work()};w.mainMenu.reloadtree=function(){if(modx.plugins.ElementsInTree){setTimeout('reloadElementsInTree()',50)}if(modx.config.global_tabs){setTimeout('modx.tree.restoreTree()',100)}};w.mainMenu.startrefresh=function(a){if(a===1){}if(a===2){}if(a===9){modx.tree.restoreTree()}if(a===10){w.location.href=modx.MODX_MANAGER_URL}};w.mainMenu.startmsgcount=function(a,b,c){modx.updateMail(c)};w.mainMenu.hideTreeFrame=function(){modx.resizer.setWidth(0)};w.mainMenu.defaultTreeFrame=function(){modx.resizer.setDefaultWidth()};w.tree={};w.tree.ca='open';w.tree.document=document;w.tree.saveFolderState=function(){};w.tree.updateTree=function(){modx.tree.updateTree()};w.tree.restoreTree=function(){modx.tree.restoreTree()};w.tree.resizeTree=function(){};w.onbeforeunload=function(){var a=w.main.frameElement.contentWindow;if(modx.getActionFromUrl(a.location.search,27)){modx.get(modx.MODX_MANAGER_URL+'?a=67&type=7&id='+modx.main.getQueryVariable('id',a.location.search.substring(1)))}};d.addEventListener('DOMContentLoaded',function(){modx.init()})})(typeof jQuery!=='undefined'?jQuery:'',window,document,undefined);(function(){if(!Element.prototype.closest){Element.prototype.closest=function(a){var b=this,c,d;['matches','webkitMatchesSelector','mozMatchesSelector','msMatchesSelector','oMatchesSelector'].some(function(fn){if(typeof document.body[fn]==='function'){c=fn;return true}return false});if(b&&c&&b[c](a))return b;while(b){d=b.parentElement;if(d&&c&&d[c](a))return d;b=d}return null}}})(); \ No newline at end of file diff --git a/manager/media/style/default/login.tpl b/manager/media/style/default/login.tpl index 76d6185f..69390768 100755 --- a/manager/media/style/default/login.tpl +++ b/manager/media/style/default/login.tpl @@ -1,101 +1,535 @@ - - - - [(site_name)] (Evolution CMS Manager Login) - - - - - - - - -
          -
          - - [+OnManagerLoginFormPrerender+] -
          - -
          -
          - - -
          -
          - - -
          -
          -
          [+login_captcha_message+]
          -

          [+captcha_image+]

          - [+captcha_input+] -
          -
          - - -
          - [+OnManagerLoginFormRender+] - -
          -
          -

          -
          © 2005-2018 by the EVO. EVO™ is licensed under the GPL.
          -
          -
          -
          - - - \ No newline at end of file + + + + [(site_name)] (Evolution CMS Manager Login) + + + + + + + + +
          +
          +
          + + + [+OnManagerLoginFormPrerender+] + + + + + +
          + + +
          + + +
          + + +
          + + +
          +
          [+login_captcha_message+]
          +

          [+captcha_image+]

          + [+captcha_input+] +
          + + +
          + + +
          + + + [+OnManagerLoginFormRender+] + +
          +
          + + +
          +

          +
          © 2005-2018 by the EVO. EVO™ is licensed under the GPL.
          +
          +
          + + +
          + + + + + diff --git a/manager/media/style/default/manager.lockout.tpl b/manager/media/style/default/manager.lockout.tpl index 0b636b5d..f35eac54 100755 --- a/manager/media/style/default/manager.lockout.tpl +++ b/manager/media/style/default/manager.lockout.tpl @@ -1,66 +1,321 @@ - - - - EVO Content Manager - - - - - - - - -
          -
          - -
          - [+logo_slogan+] -
          - -
          -

          [(site_name)]

          -
          [+manager_lockout_message+]
          -
          - -   - -
          -
          -
          -
          -
          - - - -

          EVO™ is licensed under the GPL license. © 2005-2018 EVO.

          - - + + + + [(site_name)] (Evolution CMS Manager Login) + + + + + + + + +
          +
          +
          + + + + +
          +

          [(site_name)]

          + + [+manager_lockout_message+] +
          + + +
          + + +
          + +
          +
          + + +
          +

          +
          © 2005-2018 by the EVO. EVO™ is licensed under the GPL.
          +
          +
          + + + + + \ No newline at end of file diff --git a/manager/media/style/default/snippets/welcome/RecentInfo.php b/manager/media/style/default/snippets/welcome/RecentInfo.php new file mode 100644 index 00000000..509f2cdc --- /dev/null +++ b/manager/media/style/default/snippets/welcome/RecentInfo.php @@ -0,0 +1,103 @@ +getDatabase()->select('*', $modx->getDatabase()->getFullTableName('site_content'), '', 'editedon DESC', 10); + +if ($modx->getDatabase()->getRecordCount($rs) < 1) { + return '[%no_activity_message%]'; +} +$tpl = ' + [+id+] + [+pagetitle+] + [+editedon:math("%s+[(server_offset_time)]"):dateFormat=`'.$modx->toDateFormat(0,'formatOnly').' %H:%M:%S`+] + [+username+] + [+edit_btn+][+preview_btn+][+delete_btn+][+publish_btn+][+info_btn+] + + + +
          +
            +
          • [%long_title%]: [+longtitle+]
          • +
          • [%description%]: [+description+]
          • +
          • [%resource_summary%]: [+introtext+]
          • +
          • [%type%]: [+type:is(reference):then([%weblink%]):else([%resource%])+]
          • +
          • [%resource_alias%]: [+alias+]
          • +
          • [%page_data_cacheable%]: [+cacheable:is(1):then([%yes%]):else([%no%])+]
          • +
          • [%resource_opt_show_menu%]: [+hidemenu:is(0):then([%yes%]):else([%no%])+]
          • +
          • [%page_data_template%]: [+template:templatename+]
          • +
          +
          + +'; + +$btntpl['edit'] = ' '; +$btntpl['preview_btn'] = ' '; + +$output = array(); +while ($ph = $modx->getDatabase()->getRow($rs)) { + $docid = $ph['id']; + $_ = $modx->getUserInfo($ph['editedby']); + $ph['username'] = $_['username']; + + if ($ph['deleted'] == 1) { + $ph['status'] = 'deleted text-danger'; + } elseif ($ph['published'] == 0) { + $ph['status'] = 'unpublished font-italic text-muted'; + } else { + $ph['status'] = 'published'; + } + + if ($modx->hasPermission('edit_document')) { + $ph['edit_btn'] = str_replace('[+id+]', $docid, $btntpl['edit']); + } else { + $ph['edit_btn'] = ''; + } + + $preview_disabled = ($ph['deleted'] == 1) ? 'disabled' : ''; + $ph['preview_btn'] = str_replace(array( + '[+id+]', + '[+preview_disabled+]' + ), array( + $docid, + $preview_disabled + ), $btntpl['preview_btn']); + + if ($modx->hasPermission('delete_document')) { + if ($ph['deleted'] == 0) { + $delete_btn = ' '; + } else { + $delete_btn = ' '; + } + $ph['delete_btn'] = str_replace('[+id+]', $docid, $delete_btn); + } else { + $ph['delete_btn'] = ''; + } + + if ($ph['deleted'] == 1 && $ph['published'] == 0) { + $publish_btn = ' '; + } elseif ($ph['deleted'] == 1 && $ph['published'] == 1) { + $publish_btn = ' '; + } elseif ($ph['deleted'] == 0 && $ph['published'] == 0) { + $publish_btn = ' '; + } else { + $publish_btn = ' '; + } + $ph['publish_btn'] = str_replace('[+id+]', $docid, $publish_btn); + + $ph['info_btn'] = str_replace('[+id+]', $docid, ''); + + if ($ph['longtitle'] == '') { + $ph['longtitle'] = '([%not_set%])'; + } + if ($ph['description'] == '') { + $ph['description'] = '([%not_set%])'; + } + if ($ph['introtext'] == '') { + $ph['introtext'] = '([%not_set%])'; + } + if ($ph['alias'] == '') { + $ph['alias'] = '([%not_set%])'; + } + + $output[] = $modx->parseText($tpl, $ph); +} + +return implode("\n", $output); diff --git a/manager/media/style/default/style.css b/manager/media/style/default/style.css index a68b6c31..d86ee14d 100755 --- a/manager/media/style/default/style.css +++ b/manager/media/style/default/style.css @@ -1,8 +1,8 @@ -@import "../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; -@import "../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; -@import "css/fonts.css?v=1.3.5"; -@import "css/forms.css?v=1.3.5"; -@import "css/custom.css?v=1.3.5"; -@import "css/tabpane.css"; -@import "css/contextmenu.css"; -@import "css/main.css"; +@import "../common/bootstrap/css/bootstrap.min.css?v=4.0.0-alpha.5"; +@import "../common/font-awesome/css/font-awesome.min.css?v=4.7.0"; +@import "css/fonts.css?v=1.3.5"; +@import "css/forms.css?v=1.3.5"; +@import "css/custom.css?v=1.3.5"; +@import "css/tabpane.css"; +@import "css/contextmenu.css"; +@import "css/main.css"; diff --git a/manager/media/style/default/style.php b/manager/media/style/default/style.php index 3500aee0..ae23a67e 100755 --- a/manager/media/style/default/style.php +++ b/manager/media/style/default/style.php @@ -1,514 +1,514 @@ -config['manager_theme']/style.php - * Function: Manager style variables for images and icons. - * Encoding: UTF-8 - * Credit: icons by Mark James of FamFamFam http://www.famfamfam.com/lab/icons/ - * Date: 18-Mar-2010 - * Version: 1.1 - * MODX version: 1.0.3 - */ -$style_path = 'media/style/' . $modx->config['manager_theme'] . '/images/'; -$modx->config['mgr_date_picker_path'] = 'media/calendar/datepicker.inc.php'; -if(!$modx->config['lang_code']) { - global $modx_lang_attribute; - $modx->config['lang_code'] = !$modx_lang_attribute ? 'en' : $modx_lang_attribute; -} - -if($_GET['a'] == 2) { - include_once('welcome.php'); -} - -// Favicon -$_style['favicon'] = (file_exists(MODX_BASE_PATH . 'favicon.ico') ? MODX_SITE_URL . 'favicon.ico' : 'media/style/' . $modx->config['manager_theme'] . '/images/favicon.ico'); - -//Main Menu -$_style['menu_search'] = ''; -$_style['menu_preview_site'] = ''; -$_style['menu_new_resource'] = ''; -$_style['menu_system'] = ''; -$_style['menu_user'] = ''; -// full screen -$_style['menu_expand'] = 'fa-expand'; -$_style['menu_compress'] = 'fa-compress'; -//help toggle -$_style['icons_help'] = ''; -//pages -$_style['page_settings'] = ''; -$_style['page_shedule'] = ''; -$_style['page_eventlog'] = ''; -$_style['page_manager_logs'] = ''; -$_style['page_sys_info'] = ''; -$_style['page_help'] = ''; -$_style['page_change_password'] = ''; -$_style['page_logout'] = ''; - -// Tree Menu Toolbar -$_style['add_doc_tree'] = ''; -$_style['add_weblink_tree'] = ''; -$_style['collapse_tree'] = ''; -$_style['empty_recycle_bin'] = ''; -$_style['empty_recycle_bin_empty'] = ''; -$_style['expand_tree'] = ''; -$_style['hide_tree'] = ''; -$_style['refresh_tree'] = ''; -$_style['show_tree'] = $style_path.'tree/expand.png'; -$_style['sort_tree'] = ''; -$_style['sort_menuindex'] = ''; -$_style['element_management'] = ''; -$_style['images_management'] = ''; -$_style['files_management'] = ''; -$_style['email'] = ''; - -//Tree Contextual Menu Popup -$_style['ctx_new_document'] = 'fa fa-file-o'; -$_style['ctx_edit_document'] = 'fa fa-pencil-square-o'; -$_style['ctx_move_document'] = 'fa fa-arrows'; -$_style['ctx_resource_duplicate'] = 'fa fa-clone'; -$_style['ctx_sort_menuindex'] = 'fa fa-sort-numeric-asc'; -$_style['ctx_publish_document'] = 'fa fa-arrow-up'; -$_style['ctx_unpublish_resource'] = 'fa fa-arrow-down'; -$_style['ctx_delete'] = 'fa fa-trash'; -$_style['ctx_undelete_resource'] = 'fa fa-arrow-circle-o-up'; -$_style['ctx_weblink'] = 'fa fa-link'; -$_style['ctx_resource_overview'] = 'fa fa-info'; -$_style['ctx_preview_resource'] = 'fa fa-eye'; - -// Tree Icons -$_style['tree_deletedpage'] = ""; -$_style['tree_folder'] = $style_path.'tree/folder-close-alt.png'; /* folder.png */ -$_style['tree_folderopen'] = $style_path.'tree/folder-open-alt.png'; /* folder-open.png */ -$_style['tree_globe'] = $style_path.'tree/globe.png'; -$_style['tree_folder_new'] = ""; /* folder.png */ -$_style['tree_folderopen_new'] = ""; /* folder-open.png */ -$_style['tree_folder_secure'] = ""; -$_style['tree_folderopen_secure'] = ""; -$_style['tree_linkgo'] = ""; -$_style['tree_page'] = ""; -$_style['tree_page_home'] = ""; -$_style['tree_page_404'] = ""; -$_style['tree_page_hourglass'] = ""; -$_style['tree_page_info'] = ""; -$_style['tree_page_blank'] = ""; -$_style['tree_page_css'] = ""; -$_style['tree_page_html'] = ""; -$_style['tree_page_xml'] = ""; -$_style['tree_page_js'] = ""; -$_style['tree_page_rss'] = ""; -$_style['tree_page_pdf'] = ""; -$_style['tree_page_word'] = ""; -$_style['tree_page_excel'] = ""; - -$_style['tree_minusnode'] = "";//$style_path.'tree/angle-down.png'; -$_style['tree_plusnode'] = "";//$style_path.'tree/angle-right.png'; -$_style['tree_weblink'] = $style_path.'tree/link.png'; -$_style['tree_preview_resource'] = "";//$style_path.'icons/eye.png'; - -$_style['tree_showtree'] = ''; -$_style['tree_working'] = ''; -$_style['tree_info'] = ''; - -$_style['tree_page_secure'] = ""; -$_style['tree_page_blank_secure'] = ""; -$_style['tree_page_css_secure'] = ""; -$_style['tree_page_html_secure'] = ""; -$_style['tree_page_xml_secure'] = ""; -$_style['tree_page_js_secure'] = ""; -$_style['tree_page_rss_secure'] = ""; -$_style['tree_page_pdf_secure'] = ""; -$_style['tree_page_word_secure'] = ""; -$_style['tree_page_excel_secure'] = ""; - -//search -$_style['icons_external_link'] = ''; - -//View Resource data -$_style['icons_new_document'] = 'fa fa-file-o'; -$_style['icons_new_weblink'] = 'fa fa-link'; -$_style['icons_move_document'] = 'fa fa-arrows'; -$_style['icons_publish_document'] = 'fa fa-arrow-up'; -$_style['icons_unpublish_resource'] = 'fa fa-arrow-down'; -$_style['icons_delete_resource'] = 'fa fa-trash'; -$_style['icons_undelete_resource'] = 'fa fa-arrow-circle-o-up'; -$_style['icons_resource_overview'] = 'fa fa-info'; -$_style['icons_edit_resource'] = 'fa fa-pencil-square-o'; -//context menu -$_style['icons_resource_duplicate'] = $style_path.'icons/clone.png'; -$_style['icons_edit_document'] = $style_path.'icons/save.png'; -$_style['icons_delete_document'] = $style_path.'icons/trash.png'; -//locks -$_style['icons_preview_resource'] = $style_path.'icons/eye.png';//$style_path.'icons/eye.png'; -$_style['icons_secured'] = "";//$style_path.'icons/lock.png'; - -//file manager icons -$_style['files_save'] = 'fa fa-floppy-o'; -$_style['files_folder'] = 'fa fa-folder-o'; -$_style['files_deleted_folder'] = 'fa fa-folder-o'; -$_style['files_folder-open'] = 'fa fa-folder-open-o'; -$_style['files_page_php'] = 'fa fa-file-o'; -$_style['files_page_html'] = 'fa fa-file-o'; -$_style['files_cancel'] = 'fa fa-times-circle'; -$_style['files_top'] = 'fa fa-folder-open-o'; -$_style['files_add'] = 'fa fa-plus-circle'; -$_style['files_upload'] = 'fa fa-upload'; -$_style['files_delete'] = 'fa fa-trash'; -$_style['files_duplicate'] = 'fa fa-clone'; -$_style['files_rename'] = 'fa fa-i-cursor'; -$_style['files_view'] = 'fa fa-eye'; -$_style['files_download'] = 'fa fa-download'; -$_style['files_unzip'] = 'fa fa-file-archive-o'; -$_style['files_edit'] = 'fa fa-pencil-square-o'; - -//Action buttons -$_style['actions_save'] = 'fa fa-floppy-o'; -$_style['actions_duplicate'] = 'fa fa-clone'; -$_style['actions_delete'] = 'fa fa-trash'; -$_style['actions_cancel'] = 'fa fa-times-circle'; -$_style['actions_close'] = 'fa fa-times-circle'; -$_style['actions_add'] = 'fa fa-plus-circle'; -$_style['actions_preview'] = 'fa fa-eye'; -$_style['actions_run'] = 'fa fa-play'; -$_style['actions_stop'] = 'fa fa-stop'; -$_style['actions_new'] = 'fa fa-plus-circle'; -$_style['actions_help'] = 'fa fa-question-circle'; -$_style['actions_sort'] = 'fa fa-sort'; -$_style['actions_options'] = 'fa fa-check-square'; -$_style['actions_categories'] = 'fa fa-folder-open'; -$_style['actions_search'] = 'fa fa-search'; -$_style['actions_file'] = 'fa fa-file-o'; -$_style['actions_folder'] = 'fa fa-folder-o'; -$_style['actions_folder_open'] = 'fa fa-folder-open-o'; -$_style['actions_calendar'] = 'fa fa-calendar'; -$_style['actions_calendar_delete'] = 'fa fa-calendar-times-o'; -$_style['actions_angle_up'] = 'fa fa-angle-up'; -$_style['actions_angle_down'] = 'fa fa-angle-down'; -$_style['actions_angle_left'] = 'fa fa-angle-left'; -$_style['actions_angle_right'] = 'fa fa-angle-right'; -$_style['actions_chain'] = 'fa fa-chain'; -$_style['actions_chain_broken'] = 'fa fa-chain-broken'; -$_style['actions_edit'] = 'fa fa-edit'; -$_style['actions_move'] = 'fa fa-arrows'; -$_style['actions_pencil'] = 'fa fa-pencil'; -$_style['actions_reply'] = 'fa fa-reply'; -$_style['actions_plus'] = 'fa fa-plus'; -$_style['actions_refresh'] = 'fa fa-refresh'; -$_style['actions_error'] = 'fa fa-times-circle'; -$_style['actions_info'] = 'fa fa-info-circle'; -$_style['actions_triangle'] = 'fa fa-exclamation-triangle'; -$_style['actions_table'] = 'fa fa-table'; - -//for back compatibility - -$_style['icons_save'] = $style_path.'icons/save.png'; -$_style['icons_delete'] = $style_path.'icons/trash.png'; -$_style['icons_deleted_folder'] = $style_path.'tree/deletedfolder.png'; -$_style['icons_unzip'] = $style_path.'icons/download-alt.png'; - - -// Indicators -$_style['icons_tooltip'] = 'fa fa-question-circle'; -$_style['icons_tooltip_over'] = $style_path.'icons/question-sign.png'; -$_style['icons_cal'] = $style_path.'icons/calendar.png'; -$_style['icons_cal_nodate'] = $style_path.'icons/calendar.png'; -$_style['icons_set_parent'] = $style_path.'icons/folder-open.png'; - -//modules -$_style['icons_module'] = 'fa fa-cube'; -$_style['icons_modules'] = 'fa fa-cubes'; //$style_path.'icons/modules.png'; -$_style['icons_run'] = $style_path.'icons/play.png'; - -//users and webusers -$_style['icons_user'] = 'fa fa-user'; //$style_path.'icons/user.png'; - -//Messages -$_style['icons_message_unread'] = $style_path.'icons/email.png'; -$_style['icons_message_forward'] = $style_path.'icons/forward.png'; -$_style['icons_message_reply'] = $style_path.'icons/reply.png'; - -// Icons -$_style['icons_add'] = $style_path.'icons/add.png'; -$_style['icons_cancel'] = $style_path.'icons/cancel.png'; -$_style['icons_close'] = $style_path.'icons/stop.png'; -$_style['icons_refresh'] = $style_path.'icons/refresh.png'; -$_style['icons_table'] = $style_path.'icons/table.png'; - -// top bar -$_style['icons_loading_doc_tree'] = $style_path.'icons/info-sign.png'; -$_style['icons_mail'] = $style_path.'icons/email.png'; -$_style['icons_working'] = $style_path.'icons/exclamation.png'; - -//event log -$_style['icons_event1'] = $style_path.'icons/event1.png'; -$_style['icons_event2'] = $style_path.'icons/event2.png'; -$_style['icons_event3'] = $style_path.'icons/event3.png'; - - -//nowhere in the manager -$_style['icons_folder'] = $style_path.'icons/folder.png'; -$_style['icons_email'] = $style_path.'icons/email.png'; -$_style['icons_home'] = $style_path.'icons/home.png'; -$_style['icons_sort_menuindex'] = $style_path.'icons/sort_index.png'; -$_style['icons_weblink'] = $style_path.'icons/world_link.png'; -$_style['icons_tab_preview'] = $style_path.'icons/preview.png'; // Tabs -$_style['icons_information'] = $style_path.'icons/info-sign.png'; - - -// Miscellaneous -$_style['ajax_loader'] = '

          '.$_lang['loading_page'].'

          '; -$_style['tx'] = $style_path.'misc/_tx_.gif'; -$_style['icons_right_arrow'] = $style_path.'icons/arrow-right.png'; -$_style['fade'] = $style_path.'misc/fade.gif'; -$_style['ed_save'] = $style_path.'misc/ed_save.gif'; - -// actions buttons templates -$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; -if (!empty($modx->config['global_tabs']) && !isset($_SESSION['stay'])) { - $_REQUEST['stay'] = 2; -} -if (isset($_REQUEST['stay'])) { - $_SESSION['stay'] = $_REQUEST['stay']; -} else if (isset($_SESSION['stay'])) { - $_REQUEST['stay'] = $_SESSION['stay']; -} -$stay = isset($_REQUEST['stay']) ? $_REQUEST['stay'] : ''; -$addnew = 0; -$run = 0; -switch($action) { - case '3': - case '4': - case '27': - case '72': - if($modx->hasPermission('new_document')) { - $addnew = 1; - } - break; - case '16': - case '19': - if($modx->hasPermission('new_template')) { - $addnew = 1; - } - break; - case '300': - case '301': - if($modx->hasPermission('new_snippet') && $modx->hasPermission('new_chunk') && $modx->hasPermission('new_plugin')) { - $addnew = 1; - } - break; - case '77': - case '78': - if($modx->hasPermission('new_chunk')) { - $addnew = 1; - } - break; - case '22': - case '23': - if($modx->hasPermission('new_snippet')) { - $addnew = 1; - } - break; - case '101': - case '102': - if($modx->hasPermission('new_plugin')) { - $addnew = 1; - } - break; - case '106': - case '107': - case '108': - if($modx->hasPermission('new_module')) { - $addnew = 1; - } - if($modx->hasPermission('exec_module')) { - $run = 1; - } - break; - case '88': - if($modx->hasPermission('new_web_user')) { - $addnew = 1; - } - break; -} - -$disabled = ($action == '19' || $action == '300' || $action == '77' || $action == '23' || $action == '101' || $action == '4' || $action == '72' || $action == '87' || $action == '11' || $action == '107' || $action == '38') ? ' disabled' : ''; - -$_style['actionbuttons'] = array( - 'dynamic' => array( - 'document' => '
          -
          -
          - - ' . $_lang['save'] . ' - - - -
          ' . - ($addnew ? ' - - ' . $_lang['duplicate'] . ' - - ' : '') . ' - - ' . $_lang['delete'] . ' - - - ' . $_lang['cancel'] . ' - - - ' . $_lang['preview'] . ' - -
          -
          ', - 'user' => '
          -
          -
          - - ' . $_lang['save'] . ' - - - -
          - - ' . $_lang['delete'] . ' - - - ' . $_lang['cancel'] . ' - -
          -
          ', - 'element' => '
          -
          -
          - - ' . $_lang['save'] . ' - - - -
          - ' . ($addnew ? ' - - ' . $_lang['duplicate'] . ' - - ' : '') . ' - - ' . $_lang['delete'] . ' - - - ' . $_lang['cancel'] . ' - - ' . ($run ? ' - - ' . $_lang['run_module'] . ' - - ' : '') . ' -
          -
          ', - 'newmodule' => ($addnew ? '' : ''), - 'close' => '', - 'save' => '', - 'savedelete' => '', - 'cancel' => '', - 'canceldelete' => '', - ), - 'static' => array( - 'document' => '', - 'cancel' => '', - ) -); +config['manager_theme']/style.php + * Function: Manager style variables for images and icons. + * Encoding: UTF-8 + * Credit: icons by Mark James of FamFamFam http://www.famfamfam.com/lab/icons/ + * Date: 18-Mar-2010 + * Version: 1.1 + * MODX version: 1.0.3 + */ +$style_path = 'media/style/' . $modx->config['manager_theme'] . '/images/'; +$modx->config['mgr_date_picker_path'] = 'media/calendar/datepicker.inc.php'; +if(!$modx->config['lang_code']) { + global $modx_lang_attribute; + $modx->config['lang_code'] = !$modx_lang_attribute ? 'en' : $modx_lang_attribute; +} + +if($_GET['a'] == 2) { + include_once('welcome.php'); +} + +// Favicon +$_style['favicon'] = (file_exists(MODX_BASE_PATH . 'favicon.ico') ? MODX_SITE_URL . 'favicon.ico' : 'media/style/' . $modx->config['manager_theme'] . '/images/favicon.ico'); + +//Main Menu +$_style['menu_search'] = ''; +$_style['menu_preview_site'] = ''; +$_style['menu_new_resource'] = ''; +$_style['menu_system'] = ''; +$_style['menu_user'] = ''; +// full screen +$_style['menu_expand'] = 'fa-expand'; +$_style['menu_compress'] = 'fa-compress'; +//help toggle +$_style['icons_help'] = ''; +//pages +$_style['page_settings'] = ''; +$_style['page_shedule'] = ''; +$_style['page_eventlog'] = ''; +$_style['page_manager_logs'] = ''; +$_style['page_sys_info'] = ''; +$_style['page_help'] = ''; +$_style['page_change_password'] = ''; +$_style['page_logout'] = ''; + +// Tree Menu Toolbar +$_style['add_doc_tree'] = ''; +$_style['add_weblink_tree'] = ''; +$_style['collapse_tree'] = ''; +$_style['empty_recycle_bin'] = ''; +$_style['empty_recycle_bin_empty'] = ''; +$_style['expand_tree'] = ''; +$_style['hide_tree'] = ''; +$_style['refresh_tree'] = ''; +$_style['show_tree'] = $style_path.'tree/expand.png'; +$_style['sort_tree'] = ''; +$_style['sort_menuindex'] = ''; +$_style['element_management'] = ''; +$_style['images_management'] = ''; +$_style['files_management'] = ''; +$_style['email'] = ''; + +//Tree Contextual Menu Popup +$_style['ctx_new_document'] = 'fa fa-file-o'; +$_style['ctx_edit_document'] = 'fa fa-pencil-square-o'; +$_style['ctx_move_document'] = 'fa fa-arrows'; +$_style['ctx_resource_duplicate'] = 'fa fa-clone'; +$_style['ctx_sort_menuindex'] = 'fa fa-sort-numeric-asc'; +$_style['ctx_publish_document'] = 'fa fa-arrow-up'; +$_style['ctx_unpublish_resource'] = 'fa fa-arrow-down'; +$_style['ctx_delete'] = 'fa fa-trash'; +$_style['ctx_undelete_resource'] = 'fa fa-arrow-circle-o-up'; +$_style['ctx_weblink'] = 'fa fa-link'; +$_style['ctx_resource_overview'] = 'fa fa-info'; +$_style['ctx_preview_resource'] = 'fa fa-eye'; + +// Tree Icons +$_style['tree_deletedpage'] = ""; +$_style['tree_folder'] = $style_path.'tree/folder-close-alt.png'; /* folder.png */ +$_style['tree_folderopen'] = $style_path.'tree/folder-open-alt.png'; /* folder-open.png */ +$_style['tree_globe'] = $style_path.'tree/globe.png'; +$_style['tree_folder_new'] = ""; /* folder.png */ +$_style['tree_folderopen_new'] = ""; /* folder-open.png */ +$_style['tree_folder_secure'] = ""; +$_style['tree_folderopen_secure'] = ""; +$_style['tree_linkgo'] = ""; +$_style['tree_page'] = ""; +$_style['tree_page_home'] = ""; +$_style['tree_page_404'] = ""; +$_style['tree_page_hourglass'] = ""; +$_style['tree_page_info'] = ""; +$_style['tree_page_blank'] = ""; +$_style['tree_page_css'] = ""; +$_style['tree_page_html'] = ""; +$_style['tree_page_xml'] = ""; +$_style['tree_page_js'] = ""; +$_style['tree_page_rss'] = ""; +$_style['tree_page_pdf'] = ""; +$_style['tree_page_word'] = ""; +$_style['tree_page_excel'] = ""; + +$_style['tree_minusnode'] = "";//$style_path.'tree/angle-down.png'; +$_style['tree_plusnode'] = "";//$style_path.'tree/angle-right.png'; +$_style['tree_weblink'] = $style_path.'tree/link.png'; +$_style['tree_preview_resource'] = "";//$style_path.'icons/eye.png'; + +$_style['tree_showtree'] = ''; +$_style['tree_working'] = ''; +$_style['tree_info'] = ''; + +$_style['tree_page_secure'] = ""; +$_style['tree_page_blank_secure'] = ""; +$_style['tree_page_css_secure'] = ""; +$_style['tree_page_html_secure'] = ""; +$_style['tree_page_xml_secure'] = ""; +$_style['tree_page_js_secure'] = ""; +$_style['tree_page_rss_secure'] = ""; +$_style['tree_page_pdf_secure'] = ""; +$_style['tree_page_word_secure'] = ""; +$_style['tree_page_excel_secure'] = ""; + +//search +$_style['icons_external_link'] = ''; + +//View Resource data +$_style['icons_new_document'] = 'fa fa-file-o'; +$_style['icons_new_weblink'] = 'fa fa-link'; +$_style['icons_move_document'] = 'fa fa-arrows'; +$_style['icons_publish_document'] = 'fa fa-arrow-up'; +$_style['icons_unpublish_resource'] = 'fa fa-arrow-down'; +$_style['icons_delete_resource'] = 'fa fa-trash'; +$_style['icons_undelete_resource'] = 'fa fa-arrow-circle-o-up'; +$_style['icons_resource_overview'] = 'fa fa-info'; +$_style['icons_edit_resource'] = 'fa fa-pencil-square-o'; +//context menu +$_style['icons_resource_duplicate'] = $style_path.'icons/clone.png'; +$_style['icons_edit_document'] = $style_path.'icons/save.png'; +$_style['icons_delete_document'] = $style_path.'icons/trash.png'; +//locks +$_style['icons_preview_resource'] = $style_path.'icons/eye.png';//$style_path.'icons/eye.png'; +$_style['icons_secured'] = "";//$style_path.'icons/lock.png'; + +//file manager icons +$_style['files_save'] = 'fa fa-floppy-o'; +$_style['files_folder'] = 'fa fa-folder-o'; +$_style['files_deleted_folder'] = 'fa fa-folder-o'; +$_style['files_folder-open'] = 'fa fa-folder-open-o'; +$_style['files_page_php'] = 'fa fa-file-o'; +$_style['files_page_html'] = 'fa fa-file-o'; +$_style['files_cancel'] = 'fa fa-times-circle'; +$_style['files_top'] = 'fa fa-folder-open-o'; +$_style['files_add'] = 'fa fa-plus-circle'; +$_style['files_upload'] = 'fa fa-upload'; +$_style['files_delete'] = 'fa fa-trash'; +$_style['files_duplicate'] = 'fa fa-clone'; +$_style['files_rename'] = 'fa fa-i-cursor'; +$_style['files_view'] = 'fa fa-eye'; +$_style['files_download'] = 'fa fa-download'; +$_style['files_unzip'] = 'fa fa-file-archive-o'; +$_style['files_edit'] = 'fa fa-pencil-square-o'; + +//Action buttons +$_style['actions_save'] = 'fa fa-floppy-o'; +$_style['actions_duplicate'] = 'fa fa-clone'; +$_style['actions_delete'] = 'fa fa-trash'; +$_style['actions_cancel'] = 'fa fa-times-circle'; +$_style['actions_close'] = 'fa fa-times-circle'; +$_style['actions_add'] = 'fa fa-plus-circle'; +$_style['actions_preview'] = 'fa fa-eye'; +$_style['actions_run'] = 'fa fa-play'; +$_style['actions_stop'] = 'fa fa-stop'; +$_style['actions_new'] = 'fa fa-plus-circle'; +$_style['actions_help'] = 'fa fa-question-circle'; +$_style['actions_sort'] = 'fa fa-sort'; +$_style['actions_options'] = 'fa fa-check-square'; +$_style['actions_categories'] = 'fa fa-folder-open'; +$_style['actions_search'] = 'fa fa-search'; +$_style['actions_file'] = 'fa fa-file-o'; +$_style['actions_folder'] = 'fa fa-folder-o'; +$_style['actions_folder_open'] = 'fa fa-folder-open-o'; +$_style['actions_calendar'] = 'fa fa-calendar'; +$_style['actions_calendar_delete'] = 'fa fa-calendar-times-o'; +$_style['actions_angle_up'] = 'fa fa-angle-up'; +$_style['actions_angle_down'] = 'fa fa-angle-down'; +$_style['actions_angle_left'] = 'fa fa-angle-left'; +$_style['actions_angle_right'] = 'fa fa-angle-right'; +$_style['actions_chain'] = 'fa fa-chain'; +$_style['actions_chain_broken'] = 'fa fa-chain-broken'; +$_style['actions_edit'] = 'fa fa-edit'; +$_style['actions_move'] = 'fa fa-arrows'; +$_style['actions_pencil'] = 'fa fa-pencil'; +$_style['actions_reply'] = 'fa fa-reply'; +$_style['actions_plus'] = 'fa fa-plus'; +$_style['actions_refresh'] = 'fa fa-refresh'; +$_style['actions_error'] = 'fa fa-times-circle'; +$_style['actions_info'] = 'fa fa-info-circle'; +$_style['actions_triangle'] = 'fa fa-exclamation-triangle'; +$_style['actions_table'] = 'fa fa-table'; + +//for back compatibility + +$_style['icons_save'] = $style_path.'icons/save.png'; +$_style['icons_delete'] = $style_path.'icons/trash.png'; +$_style['icons_deleted_folder'] = $style_path.'tree/deletedfolder.png'; +$_style['icons_unzip'] = $style_path.'icons/download-alt.png'; + + +// Indicators +$_style['icons_tooltip'] = 'fa fa-question-circle'; +$_style['icons_tooltip_over'] = $style_path.'icons/question-sign.png'; +$_style['icons_cal'] = $style_path.'icons/calendar.png'; +$_style['icons_cal_nodate'] = $style_path.'icons/calendar.png'; +$_style['icons_set_parent'] = $style_path.'icons/folder-open.png'; + +//modules +$_style['icons_module'] = 'fa fa-cube'; +$_style['icons_modules'] = 'fa fa-cubes'; //$style_path.'icons/modules.png'; +$_style['icons_run'] = $style_path.'icons/play.png'; + +//users and webusers +$_style['icons_user'] = 'fa fa-user'; //$style_path.'icons/user.png'; + +//Messages +$_style['icons_message_unread'] = $style_path.'icons/email.png'; +$_style['icons_message_forward'] = $style_path.'icons/forward.png'; +$_style['icons_message_reply'] = $style_path.'icons/reply.png'; + +// Icons +$_style['icons_add'] = $style_path.'icons/add.png'; +$_style['icons_cancel'] = $style_path.'icons/cancel.png'; +$_style['icons_close'] = $style_path.'icons/stop.png'; +$_style['icons_refresh'] = $style_path.'icons/refresh.png'; +$_style['icons_table'] = $style_path.'icons/table.png'; + +// top bar +$_style['icons_loading_doc_tree'] = $style_path.'icons/info-sign.png'; +$_style['icons_mail'] = $style_path.'icons/email.png'; +$_style['icons_working'] = $style_path.'icons/exclamation.png'; + +//event log +$_style['icons_event1'] = $style_path.'icons/event1.png'; +$_style['icons_event2'] = $style_path.'icons/event2.png'; +$_style['icons_event3'] = $style_path.'icons/event3.png'; + + +//nowhere in the manager +$_style['icons_folder'] = $style_path.'icons/folder.png'; +$_style['icons_email'] = $style_path.'icons/email.png'; +$_style['icons_home'] = $style_path.'icons/home.png'; +$_style['icons_sort_menuindex'] = $style_path.'icons/sort_index.png'; +$_style['icons_weblink'] = $style_path.'icons/world_link.png'; +$_style['icons_tab_preview'] = $style_path.'icons/preview.png'; // Tabs +$_style['icons_information'] = $style_path.'icons/info-sign.png'; + + +// Miscellaneous +$_style['ajax_loader'] = '

          '.$_lang['loading_page'].'

          '; +$_style['tx'] = $style_path.'misc/_tx_.gif'; +$_style['icons_right_arrow'] = $style_path.'icons/arrow-right.png'; +$_style['fade'] = $style_path.'misc/fade.gif'; +$_style['ed_save'] = $style_path.'misc/ed_save.gif'; + +// actions buttons templates +$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : ''; +if (!empty($modx->config['global_tabs']) && !isset($_SESSION['stay'])) { + $_REQUEST['stay'] = 2; +} +if (isset($_REQUEST['stay'])) { + $_SESSION['stay'] = $_REQUEST['stay']; +} else if (isset($_SESSION['stay'])) { + $_REQUEST['stay'] = $_SESSION['stay']; +} +$stay = isset($_REQUEST['stay']) ? $_REQUEST['stay'] : ''; +$addnew = 0; +$run = 0; +switch($action) { + case '3': + case '4': + case '27': + case '72': + if($modx->hasPermission('new_document')) { + $addnew = 1; + } + break; + case '16': + case '19': + if($modx->hasPermission('new_template')) { + $addnew = 1; + } + break; + case '300': + case '301': + if($modx->hasPermission('new_snippet') && $modx->hasPermission('new_chunk') && $modx->hasPermission('new_plugin')) { + $addnew = 1; + } + break; + case '77': + case '78': + if($modx->hasPermission('new_chunk')) { + $addnew = 1; + } + break; + case '22': + case '23': + if($modx->hasPermission('new_snippet')) { + $addnew = 1; + } + break; + case '101': + case '102': + if($modx->hasPermission('new_plugin')) { + $addnew = 1; + } + break; + case '106': + case '107': + case '108': + if($modx->hasPermission('new_module')) { + $addnew = 1; + } + if($modx->hasPermission('exec_module')) { + $run = 1; + } + break; + case '88': + if($modx->hasPermission('new_web_user')) { + $addnew = 1; + } + break; +} + +$disabled = ($action == '19' || $action == '300' || $action == '77' || $action == '23' || $action == '101' || $action == '4' || $action == '72' || $action == '87' || $action == '11' || $action == '107' || $action == '38') ? ' disabled' : ''; + +$_style['actionbuttons'] = array( + 'dynamic' => array( + 'document' => '
          +
          +
          + + ' . $_lang['save'] . ' + + + +
          ' . + ($addnew ? ' + + ' . $_lang['duplicate'] . ' + + ' : '') . ' + + ' . $_lang['delete'] . ' + + + ' . $_lang['cancel'] . ' + + + ' . $_lang['preview'] . ' + +
          +
          ', + 'user' => '
          +
          +
          + + ' . $_lang['save'] . ' + + + +
          + + ' . $_lang['delete'] . ' + + + ' . $_lang['cancel'] . ' + +
          +
          ', + 'element' => '
          +
          +
          + + ' . $_lang['save'] . ' + + + +
          + ' . ($addnew ? ' + + ' . $_lang['duplicate'] . ' + + ' : '') . ' + + ' . $_lang['delete'] . ' + + + ' . $_lang['cancel'] . ' + + ' . ($run ? ' + + ' . $_lang['run_module'] . ' + + ' : '') . ' +
          +
          ', + 'newmodule' => ($addnew ? '' : ''), + 'close' => '', + 'save' => '', + 'savedelete' => '', + 'cancel' => '', + 'canceldelete' => '', + ), + 'static' => array( + 'document' => '', + 'cancel' => '', + ) +); diff --git a/manager/media/style/default/welcome.php b/manager/media/style/default/welcome.php index 9e43dfc0..75f78350 100755 --- a/manager/media/style/default/welcome.php +++ b/manager/media/style/default/welcome.php @@ -1,21 +1,27 @@ -config['enable_filter'] = 1; - -$modx->addSnippet('hasPermission','return $modx->hasPermission($key);'); - -if($modx->hasPermission('new_template') || $modx->hasPermission('edit_template') || $modx->hasPermission('new_snippet') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('new_plugin') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('manage_metatags')) - $hasAnyPermission = 1; -else $hasAnyPermission = 0; -$modx->addSnippet('hasAnyPermission','global $hasAnyPermission; return $hasAnyPermission;'); -$modx->addSnippet('getLoginUserName','return $modx->getLoginUserName();'); -$code = 'global $_lang;return $_SESSION["nrtotalmessages"] ? sprintf($_lang["welcome_messages"], $_SESSION["nrtotalmessages"], \'\' . $_SESSION["nrnewmessages"] . "") : $_lang["messages_no_messages"];'; -$modx->addSnippet('getMessageCount',$code); - -// Large Icons -$_style['icons_backup_large'] = 'fa fa-database fa-fw fa-2x'; -$_style['icons_mail_large'] = 'fa fa-envelope fa-fw fa-2x'; -$_style['icons_modules_large'] = 'fa fa-cubes fa-fw fa-2x'; -$_style['icons_resources_large'] = 'fa fa-th fa-fw fa-2x'; -$_style['icons_security_large'] = 'fa fa-user fa-fw fa-2x'; -$_style['icons_webusers_large'] = 'fa fa-users fa-fw fa-2x'; -$_style['icons_help_large'] = 'fa fa-question-circle fa-fw fa-2x'; +config['enable_filter'] = 1; + +$modx->addSnippet('hasPermission','return $modx->hasPermission($key);'); + +if($modx->hasPermission('new_template') || $modx->hasPermission('edit_template') || $modx->hasPermission('new_snippet') || $modx->hasPermission('edit_snippet') || $modx->hasPermission('new_plugin') || $modx->hasPermission('edit_plugin') || $modx->hasPermission('manage_metatags')) + $hasAnyPermission = 1; +else $hasAnyPermission = 0; +$modx->addSnippet('hasAnyPermission','global $hasAnyPermission; return $hasAnyPermission;'); +$modx->addSnippet('getLoginUserName','return $modx->getLoginUserName();'); +$code = 'global $_lang;return $_SESSION["nrtotalmessages"] ? sprintf($_lang["welcome_messages"], $_SESSION["nrtotalmessages"], \'\' . $_SESSION["nrnewmessages"] . "") : $_lang["messages_no_messages"];'; +$modx->addSnippet('getMessageCount',$code); + +// Large Icons +$_style['icons_backup_large'] = 'fa fa-database fa-fw fa-2x'; +$_style['icons_mail_large'] = 'fa fa-envelope fa-fw fa-2x'; +$_style['icons_modules_large'] = 'fa fa-cubes fa-fw fa-2x'; +$_style['icons_resources_large'] = 'fa fa-th fa-fw fa-2x'; +$_style['icons_security_large'] = 'fa fa-user fa-fw fa-2x'; +$_style['icons_webusers_large'] = 'fa fa-users fa-fw fa-2x'; +$_style['icons_help_large'] = 'fa fa-question-circle fa-fw fa-2x'; +$_style['icons_resource_large'] = 'fa fa-file fa-fw fa-2x'; +$_style['icons_weblink_large'] = 'fa fa-link fa-fw fa-2x'; +$_style['icons_images_large'] = 'fa fa-camera fa-fw fa-2x'; +$_style['icons_files_large'] = 'fa fa-files-o fa-fw fa-2x'; +$_style['icons_password_large'] = 'fa fa-lock fa-fw fa-2x'; +$_style['icons_logout_large'] = 'fa fa-sign-out fa-fw fa-2x'; diff --git a/manager/media/style/default/welcome.tpl b/manager/media/style/default/welcome.tpl index 1d0a2cdf..3e66cc85 100755 --- a/manager/media/style/default/welcome.tpl +++ b/manager/media/style/default/welcome.tpl @@ -1,34 +1,34 @@ -[[@OnManagerWelcomePrerender]] - -
          - - -
          -
          - [+logout_reminder_msg+] -
          -
          - - -
          -
          - [+multiple_sessions_msg+] -
          -
          - - -
          -
          - [+config_check_results+] -
          -
          - - -
          - [+widgets+] -
          - - -
          - -[[@OnManagerWelcomeRender]] +[[@OnManagerWelcomePrerender]] + +
          + + +
          +
          + [+logout_reminder_msg+] +
          +
          + + +
          +
          + [+multiple_sessions_msg+] +
          +
          + + +
          +
          + [+config_check_results+] +
          +
          + + +
          + [+widgets+] +
          + + +
          + +[[@OnManagerWelcomeRender]] diff --git a/manager/processors/cache_sync.class.processor.php b/manager/processors/cache_sync.class.processor.php index 09f1caaf..8d6b9c8e 100755 --- a/manager/processors/cache_sync.class.processor.php +++ b/manager/processors/cache_sync.class.processor.php @@ -25,7 +25,7 @@ class synccache */ public function __construct() { - global $modx; + $modx = evolutionCMS(); $this->request_time = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; } @@ -80,7 +80,7 @@ public function escapeDoubleQuotes($s) */ public function getParents($id, $path = '') { // modx:returns child's parent - global $modx; + $modx = evolutionCMS(); if (empty($this->aliases)) { $f = "id, IF(alias='', id, alias) AS alias, parent, alias_visible"; $rs = $modx->db->select($f, '[+prefix+]site_content', 'deleted=0'); @@ -196,7 +196,7 @@ public function publishTimeConfig($cacheRefreshTime = '') */ public function getCacheRefreshTime() { - global $modx; + $modx = evolutionCMS(); // update publish time file $timesArr = array(); @@ -252,7 +252,7 @@ public function buildCache($modx) $config = array(); $content .= '$c=&$this->config;'; while (list($key, $value) = $modx->db->getRow($rs, 'num')) { - $content .= '$c[\'' . $key . '\']="' . $this->escapeDoubleQuotes($value) . '";'; + $content .= '$c[\'' . $modx->db->escape($key) . '\']="' . $this->escapeDoubleQuotes($value) . '";'; $config[$key] = $value; } @@ -313,10 +313,7 @@ public function buildCache($modx) $rs = $modx->db->select('*', '[+prefix+]site_htmlsnippets'); $content .= '$c=&$this->chunkCache;'; while ($doc = $modx->db->getRow($rs)) { - if ($modx->config['minifyphp_incache']) { - $doc['snippet'] = $this->php_strip_whitespace($doc['snippet']); - } - $content .= '$c[\'' . $doc['name'] . '\']=\'' . ($doc['disabled'] ? '' : $this->escapeSingleQuotes($doc['snippet'])) . '\';'; + $content .= '$c[\'' . $modx->db->escape($doc['name']) . '\']=\'' . ($doc['disabled'] ? '' : $this->escapeSingleQuotes($doc['snippet'])) . '\';'; } // WRITE snippets to cache file @@ -325,7 +322,7 @@ public function buildCache($modx) $rs = $modx->db->select($f, $from); $content .= '$s=&$this->snippetCache;'; while ($row = $modx->db->getRow($rs)) { - $key = $row['name']; + $key = $modx->db->escape($row['name']); if ($row['disabled']) { $content .= '$s[\'' . $key . '\']=\'return false;\';'; } else { @@ -351,7 +348,7 @@ public function buildCache($modx) $rs = $modx->db->select($f, $from, 'sp.disabled=0'); $content .= '$p=&$this->pluginCache;'; while ($row = $modx->db->getRow($rs)) { - $key = $row['name']; + $key = $modx->db->escape($row['name']); $value = trim($row['plugincode']); if ($modx->config['minifyphp_incache']) { $value = $this->php_strip_whitespace($value); diff --git a/manager/processors/delete_content.processor.php b/manager/processors/delete_content.processor.php index da68a09b..ca53de0d 100755 --- a/manager/processors/delete_content.processor.php +++ b/manager/processors/delete_content.processor.php @@ -42,7 +42,7 @@ */ function getChildren($parent) { - global $modx; + $modx = evolutionCMS(); global $children; global $site_start; global $site_unavailable_page; diff --git a/manager/processors/duplicate_content.processor.php b/manager/processors/duplicate_content.processor.php index 2ba9d370..68df5e3a 100755 --- a/manager/processors/duplicate_content.processor.php +++ b/manager/processors/duplicate_content.processor.php @@ -43,7 +43,7 @@ * @return int */ function duplicateDocument($docid, $parent=null, $_toplevel=0) { - global $modx, $_lang; + $modx = evolutionCMS(); global $_lang; // invoke OnBeforeDocDuplicate event $evtOut = $modx->invokeEvent('OnBeforeDocDuplicate', array( @@ -149,7 +149,7 @@ function duplicateDocument($docid, $parent=null, $_toplevel=0) { * @param int $newid */ function duplicateTVs($oldid, $newid){ - global $modx; + $modx = evolutionCMS(); $tbltvc = $modx->getFullTableName('site_tmplvar_contentvalues'); @@ -169,7 +169,7 @@ function duplicateTVs($oldid, $newid){ * @param int $newid */ function duplicateAccess($oldid, $newid){ - global $modx; + $modx = evolutionCMS(); $tbldg = $modx->getFullTableName('document_groups'); diff --git a/manager/processors/duplicate_tmplvars.processor.php b/manager/processors/duplicate_tmplvars.processor.php index 74d80a4c..cdf8c82e 100755 --- a/manager/processors/duplicate_tmplvars.processor.php +++ b/manager/processors/duplicate_tmplvars.processor.php @@ -26,12 +26,12 @@ 'description'=>'', 'default_text'=>'', 'elements'=>'', - 'rank'=>'', + '`rank`'=>'', 'display'=>'', 'display_params'=>'', 'category'=>'', ), $modx->getFullTableName('site_tmplvars'), // Insert into - "type, CONCAT(name, ' {$_lang['duplicated_el_suffix']}{$count}') AS name, CONCAT(caption, ' Duplicate{$count}') AS caption, description, default_text, elements, rank, display, display_params, category", $modx->getFullTableName('site_tmplvars'), "id='{$id}'"); // Copy from + "type, CONCAT(name, ' {$_lang['duplicated_el_suffix']}{$count}') AS name, CONCAT(caption, ' Duplicate{$count}') AS caption, description, default_text, elements, `rank`, display, display_params, category", $modx->getFullTableName('site_tmplvars'), "id='{$id}'"); // Copy from // duplicate TV Template Access Permissions @@ -39,9 +39,9 @@ array( 'tmplvarid'=>'', 'templateid'=>'', - 'rank'=>'', + '`rank`'=>'', ), $modx->getFullTableName('site_tmplvar_templates'), // Insert into - "'{$newid}', templateid, rank", $modx->getFullTableName('site_tmplvar_templates'), "tmplvarid='{$id}'"); // Copy from + "'{$newid}', templateid, `rank`", $modx->getFullTableName('site_tmplvar_templates'), "tmplvarid='{$id}'"); // Copy from // duplicate TV Access Permissions $modx->db->insert( diff --git a/manager/processors/execute_module.processor.php b/manager/processors/execute_module.processor.php index 3af867ca..6ef33877 100755 --- a/manager/processors/execute_module.processor.php +++ b/manager/processors/execute_module.processor.php @@ -59,8 +59,7 @@ // Set the item name for logger $_SESSION['itemname'] = $content['name']; -$output = evalModule($content["modulecode"],$parameter); -echo $output; +echo evalModule($content["modulecode"], $parameter); include MODX_MANAGER_PATH."includes/sysalert.display.inc.php"; /** @@ -71,7 +70,7 @@ * @return string */ function evalModule($moduleCode,$params){ - global $modx; + $modx = evolutionCMS(); $modx->event->params = &$params; // store params inside event object if(is_array($params)) { extract($params, EXTR_SKIP); diff --git a/manager/processors/login.processor.php b/manager/processors/login.processor.php index 0fe6f946..f7f4b0c4 100755 --- a/manager/processors/login.processor.php +++ b/manager/processors/login.processor.php @@ -20,7 +20,6 @@ if($manager_language !== 'english' && is_file("{$core_path}lang/{$manager_language}.inc.php")) { include_once("{$core_path}lang/{$manager_language}.inc.php"); } - // include the logger include_once("{$core_path}log.class.inc.php"); @@ -147,7 +146,7 @@ if($allowed_days) { $date = getdate(); $day = $date['wday'] + 1; - if(strpos($allowed_days, $day) === false) { + if(!in_array($day,explode(',',$allowed_days))) { jsAlert($_lang['login_processor_date']); return; } @@ -180,6 +179,8 @@ $matchPassword = true; } +$blocked_minutes = (int)$modx->config['blocked_minutes']; + if(!$matchPassword) { jsAlert($_lang['login_processor_wrong_password']); incrementFailedLoginCount($internalKey, $failedlogins, $failed_allowed, $blocked_minutes); @@ -297,7 +298,7 @@ * @param string $msg */ function jsAlert($msg) { - global $modx; + $modx = evolutionCMS(); if($_POST['ajax'] != 1) { echo ""; } else { @@ -312,7 +313,7 @@ function jsAlert($msg) { * @return bool */ function login($username, $givenPassword, $dbasePassword) { - global $modx; + $modx = evolutionCMS(); return $modx->phpass->CheckPassword($givenPassword, $dbasePassword); } @@ -324,7 +325,7 @@ function login($username, $givenPassword, $dbasePassword) { * @return bool */ function loginV1($internalKey, $givenPassword, $dbasePassword, $username) { - global $modx; + $modx = evolutionCMS(); $user_algo = $modx->manager->getV1UserHashAlgorithm($internalKey); @@ -354,7 +355,7 @@ function loginV1($internalKey, $givenPassword, $dbasePassword, $username) { * @return bool */ function loginMD5($internalKey, $givenPassword, $dbasePassword, $username) { - global $modx; + $modx = evolutionCMS(); if($dbasePassword != md5($givenPassword)) { return false; @@ -368,7 +369,7 @@ function loginMD5($internalKey, $givenPassword, $dbasePassword, $username) { * @param string $password */ function updateNewHash($username, $password) { - global $modx; + $modx = evolutionCMS(); $field = array(); $field['password'] = $modx->phpass->HashPassword($password); @@ -382,7 +383,7 @@ function updateNewHash($username, $password) { * @param int $blocked_minutes */ function incrementFailedLoginCount($internalKey, $failedlogins, $failed_allowed, $blocked_minutes) { - global $modx; + $modx = evolutionCMS(); $failedlogins += 1; diff --git a/manager/processors/move_document.processor.php b/manager/processors/move_document.processor.php index 4cd1a3a1..c0a8c390 100755 --- a/manager/processors/move_document.processor.php +++ b/manager/processors/move_document.processor.php @@ -43,7 +43,7 @@ * @return array */ function allChildren($currDocID) { - global $modx; + $modx = evolutionCMS(); $children= array(); $currDocID = $modx->db->escape($currDocID); $rs = $modx->db->select('id', $modx->getFullTableName('site_content'), "parent = '{$currDocID}'"); diff --git a/manager/processors/save_content.processor.php b/manager/processors/save_content.processor.php index 942e2dbc..d9dd5897 100755 --- a/manager/processors/save_content.processor.php +++ b/manager/processors/save_content.processor.php @@ -1,5 +1,5 @@ INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); } if (!$modx->hasPermission('save_document')) { @@ -14,32 +14,32 @@ $description = $modx->db->escape($_POST['description']); $alias = $modx->db->escape($_POST['alias']); $link_attributes = $modx->db->escape($_POST['link_attributes']); -$isfolder = $_POST['isfolder']; -$richtext = $_POST['richtext']; -$published = $_POST['published']; -$parent = $_POST['parent'] != '' ? $_POST['parent'] : 0; -$template = $_POST['template']; -$menuindex = !empty($_POST['menuindex']) ? $_POST['menuindex'] : 0; -$searchable = $_POST['searchable']; -$cacheable = $_POST['cacheable']; -$syncsite = $_POST['syncsite']; +$isfolder = (int)$_POST['isfolder']; +$richtext = (int)$_POST['richtext']; +$published = (int)$_POST['published']; +$parent = $_POST['parent'] != '' ? (int)$_POST['parent'] : 0; +$template = (int)$_POST['template']; +$menuindex = !empty($_POST['menuindex']) ? (int)$_POST['menuindex'] : 0; +$searchable = (int)$_POST['searchable']; +$cacheable = (int)$_POST['cacheable']; +$syncsite = (int)$_POST['syncsite']; $pub_date = $_POST['pub_date']; $unpub_date = $_POST['unpub_date']; $document_groups = (isset($_POST['chkalldocs']) && $_POST['chkalldocs'] == 'on') ? array() : $_POST['docgroups']; -$type = $_POST['type']; +$type = $modx->db->escape($_POST['type']); $contentType = $modx->db->escape($_POST['contentType']); -$contentdispo = (int) $_POST['content_dispo']; +$contentdispo = (int)$_POST['content_dispo']; $longtitle = $modx->db->escape($_POST['longtitle']); -$donthit = (int) $_POST['donthit']; +$donthit = (int)$_POST['donthit']; $menutitle = $modx->db->escape($_POST['menutitle']); -$hidemenu = (int) $_POST['hidemenu']; -$aliasvisible = $_POST['alias_visible']; +$hidemenu = (int)$_POST['hidemenu']; +$aliasvisible = (int)$_POST['alias_visible']; /************* webber ********/ -$sd = isset($_POST['dir']) ? '&dir='.$_POST['dir'] : '&dir=DESC'; -$sb = isset($_POST['sort']) ? '&sort='.$_POST['sort'] : '&sort=pub_date'; -$pg = isset($_POST['page']) ? '&page='.(int) $_POST['page'] : ''; -$add_path = $sd.$sb.$pg; +$sd=isset($_POST['dir']) && strtolower($_POST['dir']) === 'asc' ? '&dir=ASC' : '&dir=DESC'; +$sb=isset($_POST['sort'])?'&sort='.html_escape($_POST['sort'], $modx->config['modx_charset']):'&sort=pub_date'; +$pg=isset($_POST['page'])?'&page='.(int)$_POST['page']:''; +$add_path=$sd.$sb.$pg; @@ -73,7 +73,7 @@ // auto assign alias if (!$alias && $automatic_alias) { $alias = strtolower($modx->stripAlias(trim($pagetitle))); - if (!$allow_duplicate_alias) { + if(!$allow_duplicate_alias) { if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND alias='$alias'")) != 0) { $cnt = 1; $tempAlias = $alias; @@ -84,7 +84,7 @@ } $alias = $tempAlias; } - } else { + }else{ if ($modx->db->getValue($modx->db->select('COUNT(id)', $tbl_site_content, "id<>'$id' AND parent=$parent AND alias='$alias'")) != 0) { $cnt = 1; $tempAlias = $alias; @@ -165,19 +165,19 @@ } // get document groups for current user -$tmplvars = array(); +$tmplvars = array (); if ($_SESSION['mgrDocgroups']) { $docgrp = implode(",", $_SESSION['mgrDocgroups']); } // ensure that user has not made this document inaccessible to themselves -if ($_SESSION['mgrRole'] != 1 && is_array($document_groups)) { +if($_SESSION['mgrRole'] != 1 && is_array($document_groups)) { $document_group_list = implode(',', $document_groups); - $document_group_list = implode(',', array_filter(explode(',', $document_group_list), 'is_numeric')); - if (!empty($document_group_list)) { + $document_group_list = implode(',', array_filter(explode(',',$document_group_list), 'is_numeric')); + if(!empty($document_group_list)) { $rs = $modx->db->select('COUNT(mg.id)', "{$tbl_membergroup_access} AS mga, {$tbl_member_groups} AS mg", "mga.membergroup = mg.user_group AND mga.documentgroup IN({$document_group_list}) AND mg.member = {$_SESSION['mgrInternalKey']}"); $count = $modx->db->getValue($rs); - if ($count == 0) { + if($count == 0) { if ($actionToTake == 'edit') { $modx->manager->saveFormValues(27); $modx->webAlertAndQuit(sprintf($_lang["resource_permissions_error"]), "index.php?a=27&id={$id}"); @@ -190,50 +190,50 @@ } $rs = $modx->db->select( - "DISTINCT tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", + "DISTINCT tv.*, IF(tvc.value!='',tvc.value,tv.default_text) as value", "{$tbl_site_tmplvars} AS tv INNER JOIN {$tbl_site_tmplvar_templates} AS tvtpl ON tvtpl.tmplvarid = tv.id LEFT JOIN {$tbl_site_tmplvar_contentvalues} AS tvc ON tvc.tmplvarid=tv.id AND tvc.contentid = '{$id}' LEFT JOIN {$tbl_site_tmplvar_access} AS tva ON tva.tmplvarid=tv.id", - "tvtpl.templateid = '{$template}' AND (1='{$_SESSION['mgrRole']}' OR ISNULL(tva.documentgroup)".((!$docgrp) ? "" : " OR tva.documentgroup IN ($docgrp)").")", + "tvtpl.templateid = '{$template}' AND (1='{$_SESSION['mgrRole']}' OR ISNULL(tva.documentgroup)" . ((!$docgrp) ? "" : " OR tva.documentgroup IN ($docgrp)") . ")", "tv.rank" ); while ($row = $modx->db->getRow($rs)) { $tmplvar = ''; switch ($row['type']) { case 'url': - $tmplvar = $_POST["tv".$row['id']]; - if ($_POST["tv".$row['id'].'_prefix'] != '--') { - $tmplvar = str_replace(array( + $tmplvar = $_POST["tv" . $row['id']]; + if ($_POST["tv" . $row['id'] . '_prefix'] != '--') { + $tmplvar = str_replace(array ( "feed://", "ftp://", "http://", "https://", "mailto:" ), "", $tmplvar); - $tmplvar = $_POST["tv".$row['id'].'_prefix'].$tmplvar; + $tmplvar = $_POST["tv" . $row['id'] . '_prefix'] . $tmplvar; } break; case 'file': - $tmplvar = $_POST["tv".$row['id']]; + $tmplvar = $_POST["tv" . $row['id']]; break; default: - if (is_array($_POST["tv".$row['id']])) { + if (is_array($_POST["tv" . $row['id']])) { // handles checkboxes & multiple selects elements - $feature_insert = array(); - $lst = $_POST["tv".$row['id']]; - while (list ($featureValue, $feature_item) = each($lst)) { + $feature_insert = array (); + $lst = $_POST["tv" . $row['id']]; + foreach($lst as $featureValue => $feature_item) { $feature_insert[count($feature_insert)] = $feature_item; } $tmplvar = implode("||", $feature_insert); } else { - $tmplvar = $_POST["tv".$row['id']]; + $tmplvar = $_POST["tv" . $row['id']]; } break; } // save value if it was modified if (strlen($tmplvar) > 0 && $tmplvar != $row['default_text']) { - $tmplvars[$row['id']] = array( + $tmplvars[$row['id']] = array ( $row['id'], $tmplvar ); @@ -256,7 +256,7 @@ // check to see if the user is allowed to save the document in the place he wants to save it in if ($use_udperms == 1) { if ($existingDocument['parent'] != $parent) { - include_once MODX_MANAGER_PATH."processors/user_documents_permissions.class.php"; + include_once MODX_MANAGER_PATH ."processors/user_documents_permissions.class.php"; $udperms = new udperms(); $udperms->user = $modx->getLoginUserID(); $udperms->document = $parent; @@ -275,11 +275,11 @@ } switch ($actionToTake) { - case 'new' : + case 'new' : - // invoke OnBeforeDocFormSave event - switch($modx->config['docid_incrmnt_method']) - { + // invoke OnBeforeDocFormSave event + switch($modx->config['docid_incrmnt_method']) + { case '1': $from = "{$tbl_site_content} AS T0 LEFT JOIN {$tbl_site_content} AS T1 ON T0.id + 1 = T1.id"; $where = "T1.id IS NULL"; @@ -287,15 +287,15 @@ $id = $modx->db->getValue($rs); break; case '2': - $rs = $modx->db->select('MAX(id)+1', $tbl_site_content); + $rs = $modx->db->select('MAX(id)+1',$tbl_site_content); $id = $modx->db->getValue($rs); break; default: $id = ''; - } + } - $modx->invokeEvent("OnBeforeDocFormSave", array( + $modx->invokeEvent("OnBeforeDocFormSave", array ( "mode" => "new", "id" => $id )); @@ -310,47 +310,48 @@ $publishedon = ($published ? $currentdate : 0); $publishedby = ($published ? $modx->getLoginUserID() : 0); - if ((!empty($pub_date)) && ($published)) { - $publishedon = $pub_date; + if ((!empty($pub_date))&&($published)){ + $publishedon=$pub_date; } - $dbInsert = array( - "introtext" => $introtext, - "content" => $content, - "pagetitle" => $pagetitle, - "longtitle" => $longtitle, - "type" => $type, - "description" => $description, - "alias" => $alias, - "link_attributes" => $link_attributes, - "isfolder" => $isfolder, - "richtext" => $richtext, - "published" => $published, - "parent" => $parent, - "template" => $template, - "menuindex" => $menuindex, - "searchable" => $searchable, - "cacheable" => $cacheable, - "createdby" => $modx->getLoginUserID(), - "createdon" => $currentdate, - "editedby" => $modx->getLoginUserID(), - "editedon" => $currentdate, - "publishedby" => $publishedby, - "publishedon" => $publishedon, - "pub_date" => $pub_date, - "unpub_date" => $unpub_date, - "contentType" => $contentType, - "content_dispo" => $contentdispo, - "donthit" => $donthit, - "menutitle" => $menutitle, - "hidemenu" => $hidemenu, + $dbInsert = array + ( + "introtext" => $introtext , + "content" => $content , + "pagetitle" => $pagetitle , + "longtitle" => $longtitle , + "type" => $type , + "description" => $description , + "alias" => $alias , + "link_attributes" => $link_attributes , + "isfolder" => $isfolder , + "richtext" => $richtext , + "published" => $published , + "parent" => $parent , + "template" => $template , + "menuindex" => $menuindex , + "searchable" => $searchable , + "cacheable" => $cacheable , + "createdby" => $modx->getLoginUserID() , + "createdon" => $currentdate , + "editedby" => $modx->getLoginUserID() , + "editedon" => $currentdate , + "publishedby" => $publishedby , + "publishedon" => $publishedon , + "pub_date" => $pub_date , + "unpub_date" => $unpub_date , + "contentType" => $contentType , + "content_dispo" => $contentdispo , + "donthit" => $donthit , + "menutitle" => $menutitle , + "hidemenu" => $hidemenu , "alias_visible" => $aliasvisible ); if ($id != '') $dbInsert["id"] = $id; - $key = $modx->db->insert($dbInsert, $tbl_site_content); + $key = $modx->db->insert( $dbInsert, $tbl_site_content); $tvChanges = array(); foreach ($tmplvars as $field => $value) { @@ -372,7 +373,7 @@ foreach ($document_groups as $value_pair) { // first, split the pair (this is a new document, so ignore the second value list($group) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) - $new_groups[] = '('.(int) $group.','.$key.')'; + $new_groups[] = '('.(int)$group.','.$key.')'; } $saved = true; if (!empty($new_groups)) { @@ -381,7 +382,7 @@ } else { $isManager = $modx->hasPermission('access_permissions'); $isWeb = $modx->hasPermission('web_access_permissions'); - if ($use_udperms && !($isManager || $isWeb) && $parent != 0) { + if($use_udperms && !($isManager || $isWeb) && $parent != 0) { // inherit document access permissions $modx->db->insert( array( @@ -400,17 +401,17 @@ } // invoke OnDocFormSave event - $modx->invokeEvent("OnDocFormSave", array( + $modx->invokeEvent("OnDocFormSave", array ( "mode" => "new", "id" => $key )); // secure web documents - flag as private - include MODX_MANAGER_PATH."includes/secure_web_documents.inc.php"; + include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; secureWebDocument($key); // secure manager documents - flag as private - include MODX_MANAGER_PATH."includes/secure_mgr_documents.inc.php"; + include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; secureMgrDocument($key); // Set the item name for logger @@ -429,13 +430,13 @@ // document if ($_POST['mode'] == "4") $a = ($_POST['stay'] == '2') ? "27&id=$key" : "4&pid=$parent"; - $header = "Location: index.php?a=".$a."&r=1&stay=".$_POST['stay']; + $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay']; } else { $header = "Location: index.php?a=3&id=$key&r=1"; } if (headers_sent()) { - $header = str_replace('Location: ', '', $header); + $header = str_replace('Location: ','',$header); echo "\n"; } else { header($header); @@ -443,248 +444,248 @@ break; - case 'edit' : + case 'edit' : - // get the document's current parent - $oldparent = $existingDocument['parent']; - $doctype = $existingDocument['type']; + // get the document's current parent + $oldparent = $existingDocument['parent']; + $doctype = $existingDocument['type']; - if ($id == $site_start && $published == 0) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document is linked to site_start variable and cannot be unpublished!"); - } - $today = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; - if ($id == $site_start && ($pub_date > $today || $unpub_date != "0")) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); - } - if ($parent == $id) { - $modx->manager->saveFormValues(27); - $modx->webAlertAndQuit("Document can not be it's own parent!"); - } + if ($id == $site_start && $published == 0) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document is linked to site_start variable and cannot be unpublished!"); + } + $today = $_SERVER['REQUEST_TIME'] + $modx->config['server_offset_time']; + if ($id == $site_start && ($pub_date > $today || $unpub_date != "0")) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); + } + if ($parent == $id) { + $modx->manager->saveFormValues(27); + $modx->webAlertAndQuit("Document can not be it's own parent!"); + } - $parents = $modx->getParentIds($parent); - if (in_array($id, $parents)) { - $modx->webAlertAndQuit("Document descendant can not be it's parent!"); - } + $parents = $modx->getParentIds($parent); + if (in_array($id, $parents)) { + $modx->webAlertAndQuit("Document descendant can not be it's parent!"); + } - // check to see document is a folder - $rs = $modx->db->select('count(id)', $tbl_site_content, "parent='{$id}'"); - $count = $modx->db->getValue($rs); - if ($count > 0) { - $isfolder = 1; - } + // check to see document is a folder + $rs = $modx->db->select('count(id)', $tbl_site_content, "parent='{$id}'"); + $count = $modx->db->getValue($rs); + if ($count > 0) { + $isfolder = 1; + } - // set publishedon and publishedby - $was_published = $existingDocument['published']; + // set publishedon and publishedby + $was_published = $existingDocument['published']; - // keep original publish state, if change is not permitted - if (!$modx->hasPermission('publish_document')) { - $published = $was_published; - $pub_date = 'pub_date'; - $unpub_date = 'unpub_date'; - } + // keep original publish state, if change is not permitted + if (!$modx->hasPermission('publish_document')) { + $published = $was_published; + $pub_date = 'pub_date'; + $unpub_date = 'unpub_date'; + } + + // if it was changed from unpublished to published + if (!$was_published && $published) { + $publishedon = $currentdate; + $publishedby = $modx->getLoginUserID(); + }elseif ((!empty($pub_date)&& $pub_date<=$currentdate && $published)) { + $publishedon = $pub_date; + $publishedby = $modx->getLoginUserID(); + }elseif ($was_published && !$published) { + $publishedon = 0; + $publishedby = 0; + } else { + $publishedon = 'publishedon'; + $publishedby = 'publishedby'; + } + + // invoke OnBeforeDocFormSave event + $modx->invokeEvent("OnBeforeDocFormSave", array ( + "mode" => "upd", + "id" => $id + )); - // if it was changed from unpublished to published - if (!$was_published && $published) { - $publishedon = $currentdate; - $publishedby = $modx->getLoginUserID(); - }elseif ((!empty($pub_date)&& $pub_date<=$currentdate && $published)) { - $publishedon = $pub_date; - $publishedby = $modx->getLoginUserID(); - }elseif ($was_published && !$published) { - $publishedon = 0; - $publishedby = 0; + // update the document + $modx->db->update( + "introtext='{$introtext}', " + . "content='{$content}', " + . "pagetitle='{$pagetitle}', " + . "longtitle='{$longtitle}', " + . "type='{$type}', " + . "description='{$description}', " + . "alias='{$alias}', " + . "link_attributes='{$link_attributes}', " + . "isfolder={$isfolder}, " + . "richtext={$richtext}, " + . "published={$published}, " + . "pub_date={$pub_date}, " + . "unpub_date={$unpub_date}, " + . "parent={$parent}, " + . "template={$template}, " + . "menuindex={$menuindex}, " + . "searchable={$searchable}, " + . "cacheable={$cacheable}, " + . "editedby=" . $modx->getLoginUserID() . ", " + . "editedon={$currentdate}, " + . "publishedon={$publishedon}, " + . "publishedby={$publishedby}, " + . "contentType='{$contentType}', " + . "content_dispo={$contentdispo}, " + . "donthit={$donthit}, " + . "menutitle='{$menutitle}', " + . "hidemenu={$hidemenu}, " + . "alias_visible={$aliasvisible}" + , $tbl_site_content, "id='{$id}'"); + + // update template variables + $rs = $modx->db->select('id, tmplvarid', $tbl_site_tmplvar_contentvalues, "contentid='{$id}'"); + $tvIds = array (); + while ($row = $modx->db->getRow($rs)) { + $tvIds[$row['tmplvarid']] = $row['id']; + } + $tvDeletions = array(); + $tvChanges = array(); + foreach ($tmplvars as $field => $value) { + if (!is_array($value)) { + if (isset($tvIds[$value])) $tvDeletions[] = $tvIds[$value]; } else { - $publishedon = 'publishedon'; - $publishedby = 'publishedby'; - } + $tvId = $value[0]; + $tvVal = $value[1]; - // invoke OnBeforeDocFormSave event - $modx->invokeEvent("OnBeforeDocFormSave", array ( - "mode" => "upd", - "id" => $id - )); - - // update the document - $modx->db->update( - "introtext='{$introtext}', " - . "content='{$content}', " - . "pagetitle='{$pagetitle}', " - . "longtitle='{$longtitle}', " - . "type='{$type}', " - . "description='{$description}', " - . "alias='{$alias}', " - . "link_attributes='{$link_attributes}', " - . "isfolder={$isfolder}, " - . "richtext={$richtext}, " - . "published={$published}, " - . "pub_date={$pub_date}, " - . "unpub_date={$unpub_date}, " - . "parent={$parent}, " - . "template={$template}, " - . "menuindex={$menuindex}, " - . "searchable={$searchable}, " - . "cacheable={$cacheable}, " - . "editedby=" . $modx->getLoginUserID() . ", " - . "editedon={$currentdate}, " - . "publishedon={$publishedon}, " - . "publishedby={$publishedby}, " - . "contentType='{$contentType}', " - . "content_dispo={$contentdispo}, " - . "donthit={$donthit}, " - . "menutitle='{$menutitle}', " - . "hidemenu={$hidemenu}, " - . "alias_visible={$aliasvisible}" - , $tbl_site_content, "id='{$id}'"); - - // update template variables - $rs = $modx->db->select('id, tmplvarid', $tbl_site_tmplvar_contentvalues, "contentid='{$id}'"); - $tvIds = array (); - while ($row = $modx->db->getRow($rs)) { - $tvIds[$row['tmplvarid']] = $row['id']; - } - $tvDeletions = array(); - $tvChanges = array(); - foreach ($tmplvars as $field => $value) { - if (!is_array($value)) { - if (isset($tvIds[$value])) $tvDeletions[] = $tvIds[$value]; + if (isset($tvIds[$tvId])) { + $tvChanges[] = array(array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)), array('id' => $tvIds[$tvId])); } else { - $tvId = $value[0]; - $tvVal = $value[1]; - - if (isset($tvIds[$tvId])) { - $tvChanges[] = array(array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)), array('id' => $tvIds[$tvId])); - } else { - $tvAdded[] = array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)); - } + $tvAdded[] = array('tmplvarid' => $tvId, 'contentid' => $id, 'value' => $modx->db->escape($tvVal)); } } + } - if (!empty($tvDeletions)) { - $modx->db->delete($tbl_site_tmplvar_contentvalues, 'id IN('.implode(',', $tvDeletions).')'); - } + if (!empty($tvDeletions)) { + $modx->db->delete($tbl_site_tmplvar_contentvalues, 'id IN('.implode(',', $tvDeletions).')'); + } - if (!empty($tvAdded)) { - foreach ($tvAdded as $tv) { - $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); - } + if (!empty($tvAdded)) { + foreach ($tvAdded as $tv) { + $modx->db->insert($tv, $tbl_site_tmplvar_contentvalues); } + } - if (!empty($tvChanges)) { - foreach ($tvChanges as $tv) { - $modx->db->update($tv[0], $tbl_site_tmplvar_contentvalues, "id='{$tv[1]['id']}'"); - } + if (!empty($tvChanges)) { + foreach ($tvChanges as $tv) { + $modx->db->update($tv[0], $tbl_site_tmplvar_contentvalues, "id='{$tv[1]['id']}'"); } + } - // set document permissions - if ($use_udperms == 1 && is_array($document_groups)) { - $new_groups = array(); - // process the new input - foreach ($document_groups as $value_pair) { - list($group, $link_id) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) - $new_groups[$group] = $link_id; - } + // set document permissions + if ($use_udperms == 1 && is_array($document_groups)) { + $new_groups = array(); + // process the new input + foreach ($document_groups as $value_pair) { + list($group, $link_id) = explode(',', $value_pair); // @see actions/mutate_content.dynamic.php @ line 1138 (permissions list) + $new_groups[$group] = $link_id; + } - // grab the current set of permissions on this document the user can access - $isManager = $modx->hasPermission('access_permissions'); - $isWeb = $modx->hasPermission('web_access_permissions'); - $rs = $modx->db->select( - 'groups.id, groups.document_group', - "{$tbl_document_groups} AS groups - LEFT JOIN {$tbl_documentgroup_names} AS dgn ON dgn.id = groups.document_group", - "((1=".(int)$isManager." AND dgn.private_memgroup) OR (1=".(int)$isWeb." AND dgn.private_webgroup)) AND groups.document = '{$id}'" - ); - $old_groups = array(); - while ($row = $modx->db->getRow($rs)) $old_groups[$row['document_group']] = $row['id']; - - // update the permissions in the database - $insertions = $deletions = array(); - foreach ($new_groups as $group => $link_id) { - if (array_key_exists($group, $old_groups)) { - unset($old_groups[$group]); - continue; - } elseif ($link_id == 'new') { - $insertions[] = '('.(int)$group.','.$id.')'; - } - } - if (!empty($insertions)) { - $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $insertions)); - } - if (!empty($old_groups)) { - $modx->db->delete($tbl_document_groups, "id IN (".implode(',', $old_groups).")"); - } - // necessary to remove all permissions as document is public - if ((isset($_POST['chkalldocs']) && $_POST['chkalldocs'] == 'on')) { - $modx->db->delete($tbl_document_groups, "document='{$id}'"); + // grab the current set of permissions on this document the user can access + $isManager = $modx->hasPermission('access_permissions'); + $isWeb = $modx->hasPermission('web_access_permissions'); + $rs = $modx->db->select( + 'groups_document.id, groups_document.document_group', + "{$tbl_document_groups} AS groups_document + LEFT JOIN {$tbl_documentgroup_names} AS dgn ON dgn.id = groups_document.document_group", + "((1=".(int)$isManager." AND dgn.private_memgroup) OR (1=".(int)$isWeb." AND dgn.private_webgroup)) AND groups_document.document = '{$id}'" + ); + $old_groups = array(); + while ($row = $modx->db->getRow($rs)) $old_groups[$row['document_group']] = $row['id']; + + // update the permissions in the database + $insertions = $deletions = array(); + foreach ($new_groups as $group => $link_id) { + if (array_key_exists($group, $old_groups)) { + unset($old_groups[$group]); + continue; + } elseif ($link_id == 'new') { + $insertions[] = '('.(int)$group.','.$id.')'; } } - - // do the parent stuff - if ($parent != 0) { - $fields = array('isfolder' => 1); - $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); + if (!empty($insertions)) { + $modx->db->query("INSERT INTO {$tbl_document_groups} (document_group, document) VALUES ".implode(',', $insertions)); + } + if (!empty($old_groups)) { + $modx->db->delete($tbl_document_groups, "id IN (".implode(',', $old_groups).")"); + } + // necessary to remove all permissions as document is public + if ((isset($_POST['chkalldocs']) && $_POST['chkalldocs'] == 'on')) { + $modx->db->delete($tbl_document_groups, "document='{$id}'"); } + } - // finished moving the document, now check to see if the old_parent should no longer be a folder - $rs = $modx->db->select('COUNT(id)', $tbl_site_content, "parent='{$oldparent}'"); - $limit = $modx->db->getValue($rs); + // do the parent stuff + if ($parent != 0) { + $fields = array('isfolder' => 1); + $modx->db->update($fields, $tbl_site_content, "id='{$_REQUEST['parent']}'"); + } - if ($limit == 0) { - $fields = array('isfolder' => 0); - $modx->db->update($fields, $tbl_site_content, "id='{$oldparent}'"); - } + // finished moving the document, now check to see if the old_parent should no longer be a folder + $rs = $modx->db->select('COUNT(id)', $tbl_site_content, "parent='{$oldparent}'"); + $limit = $modx->db->getValue($rs); + + if ($limit == 0) { + $fields = array('isfolder' => 0); + $modx->db->update($fields, $tbl_site_content, "id='{$oldparent}'"); + } - // invoke OnDocFormSave event - $modx->invokeEvent("OnDocFormSave", array ( - "mode" => "upd", - "id" => $id - )); + // invoke OnDocFormSave event + $modx->invokeEvent("OnDocFormSave", array ( + "mode" => "upd", + "id" => $id + )); - // secure web documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; - secureWebDocument($id); + // secure web documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_web_documents.inc.php"; + secureWebDocument($id); - // secure manager documents - flag as private - include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; - secureMgrDocument($id); + // secure manager documents - flag as private + include MODX_MANAGER_PATH . "includes/secure_mgr_documents.inc.php"; + secureMgrDocument($id); - // Set the item name for logger - $_SESSION['itemname'] = $no_esc_pagetitle; + // Set the item name for logger + $_SESSION['itemname'] = $no_esc_pagetitle; - if ($syncsite == 1) { - // empty cache - $modx->clearCache('full'); - } + if ($syncsite == 1) { + // empty cache + $modx->clearCache('full'); + } - if ($_POST['refresh_preview'] == '1') - $header = "Location: ".MODX_SITE_URL."index.php?id=$id&z=manprev"; - else { - if ($_POST['stay'] != '2' && $id > 0) { - $modx->unlockElement(7, $id); - } - if ($_POST['stay'] != '') { - $id = $_REQUEST['id']; - if ($type == "reference") { - // weblink - $a = ($_POST['stay'] == '2') ? "27&id=$id" : "72&pid=$parent"; - } else { - // document - $a = ($_POST['stay'] == '2') ? "27&id=$id" : "4&pid=$parent"; - } - $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay'].$add_path; + if ($_POST['refresh_preview'] == '1') + $header = "Location: ".MODX_SITE_URL."index.php?id=$id&z=manprev"; + else { + if ($_POST['stay'] != '2' && $id > 0) { + $modx->unlockElement(7, $id); + } + if ($_POST['stay'] != '') { + $id = $_REQUEST['id']; + if ($type == "reference") { + // weblink + $a = ($_POST['stay'] == '2') ? "27&id=$id" : "72&pid=$parent"; } else { - $header = "Location: index.php?a=3&id=$id&r=1".$add_path; + // document + $a = ($_POST['stay'] == '2') ? "27&id=$id" : "4&pid=$parent"; } - } - if (headers_sent()) { - $header = str_replace('Location: ','',$header); - echo "\n"; + $header = "Location: index.php?a=" . $a . "&r=1&stay=" . $_POST['stay'].$add_path; } else { - header($header); + $header = "Location: index.php?a=3&id=$id&r=1".$add_path; } - break; - default : - $modx->webAlertAndQuit("No operation set in request."); + } + if (headers_sent()) { + $header = str_replace('Location: ','',$header); + echo "\n"; + } else { + header($header); + } + break; + default : + $modx->webAlertAndQuit("No operation set in request."); } diff --git a/manager/processors/save_module.processor.php b/manager/processors/save_module.processor.php index 44ab6638..ada5f818 100755 --- a/manager/processors/save_module.processor.php +++ b/manager/processors/save_module.processor.php @@ -185,7 +185,7 @@ */ function saveUserGroupAccessPermissons() { - global $modx; + $modx = evolutionCMS(); global $id, $newid; global $use_udperms; diff --git a/manager/processors/save_plugin.processor.php b/manager/processors/save_plugin.processor.php index 30c01270..8d2805ac 100755 --- a/manager/processors/save_plugin.processor.php +++ b/manager/processors/save_plugin.processor.php @@ -173,7 +173,7 @@ # Save Plugin Event Listeners function saveEventListeners($id, $sysevents, $mode) { - global $modx; + $modx = evolutionCMS(); // save selected system events $formEventList = array(); foreach ($sysevents as $evtId) { @@ -189,6 +189,7 @@ function saveEventListeners($id, $sysevents, $mode) } else { $priority = isset($prevPriority) ? $prevPriority : 1; } + $priority = (int)$priority; $formEventList[] = array('pluginid' => $id, 'evtid' => $evtId, 'priority' => $priority); } @@ -219,7 +220,7 @@ function saveEventListeners($id, $sysevents, $mode) */ function getEventIdByName($name) { - global $modx; + $modx = evolutionCMS(); static $eventIds=array(); if(isset($eventIds[$name])) return $eventIds[$name]; diff --git a/manager/processors/save_template.processor.php b/manager/processors/save_template.processor.php index 4e20f799..f4ee9589 100755 --- a/manager/processors/save_template.processor.php +++ b/manager/processors/save_template.processor.php @@ -149,12 +149,12 @@ */ function saveTemplateAccess($id) { - global $modx; + $modx = evolutionCMS(); if ($_POST['tvsDirty'] == 1) { $newAssignedTvs = $_POST['assignedTv']; // Preserve rankings of already assigned TVs - $rs = $modx->db->select("tmplvarid, rank", $modx->getFullTableName('site_tmplvar_templates'), "templateid='{$id}'", ""); + $rs = $modx->db->select("`tmplvarid`, `rank`", $modx->getFullTableName('site_tmplvar_templates'), "templateid='{$id}'", ""); $ranksArr = array(); $highest = 0; diff --git a/manager/processors/save_tmplvars.processor.php b/manager/processors/save_tmplvars.processor.php index 6180168e..7260cabd 100755 --- a/manager/processors/save_tmplvars.processor.php +++ b/manager/processors/save_tmplvars.processor.php @@ -179,7 +179,7 @@ function saveTemplateVarAccess() { global $id, $newid; - global $modx; + $modx = evolutionCMS(); if ($newid) { $id = $newid; @@ -191,28 +191,29 @@ function saveTemplateVarAccess() $getRankArray = array(); - $getRank = $modx->db->select("templateid, rank", $tbl_site_tmplvar_templates, "tmplvarid='{$id}'"); + $getRank = $modx->db->select("`templateid`, `rank`", $tbl_site_tmplvar_templates, "tmplvarid='{$id}'"); while ($row = $modx->db->getRow($getRank)) { $getRankArray[$row['templateid']] = $row['rank']; } - $modx->db->delete($tbl_site_tmplvar_templates, "tmplvarid = '{$id}'"); - for ($i = 0; $i < count($templates); $i++) { - $setRank = ($getRankArray[$templates[$i]]) ? $getRankArray[$templates[$i]] : 0; - $modx->db->insert(array( - 'tmplvarid' => $id, - 'templateid' => $templates[$i], - 'rank' => $setRank, - ), $tbl_site_tmplvar_templates); + if (!empty($templates)) { + for ($i = 0; $i < count($templates); $i++) { + $setRank = ($getRankArray[$templates[$i]]) ? $getRankArray[$templates[$i]] : 0; + $modx->db->insert(array( + 'tmplvarid' => $id, + 'templateid' => $templates[$i], + 'rank' => $setRank, + ), $tbl_site_tmplvar_templates); + } } } function saveDocumentAccessPermissons() { global $id, $newid; - global $modx, $use_udperms; + $modx = evolutionCMS(); global $use_udperms; $tbl_site_tmplvar_templates = $modx->getFullTableName('site_tmplvar_access'); diff --git a/manager/processors/save_user.processor.php b/manager/processors/save_user.processor.php index 73ba0821..6b9361e5 100755 --- a/manager/processors/save_user.processor.php +++ b/manager/processors/save_user.processor.php @@ -1,9 +1,9 @@ INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); +if (!defined('IN_MANAGER_MODE') || IN_MANAGER_MODE !== true) { + die("INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); } -if(!$modx->hasPermission('save_user')) { - $modx->webAlertAndQuit($_lang["error_no_privileges"]); +if (!$modx->hasPermission('save_user')) { + $modx->webAlertAndQuit($_lang["error_no_privileges"]); } $modx->loadExtension('phpass'); @@ -22,7 +22,7 @@ $passwordgenmethod = $input['passwordgenmethod']; $passwordnotifymethod = $input['passwordnotifymethod']; $specifiedpassword = $input['specifiedpassword']; -$email = $input['email']; +$email = trim($input['email']); $oldemail = $input['oldemail']; $phone = $input['phone']; $mobilephone = $input['mobilephone']; @@ -44,308 +44,319 @@ $user_groups = $input['user_groups']; // verify password -if($passwordgenmethod == "spec" && $input['specifiedpassword'] != $input['confirmpassword']) { - webAlertAndQuit("Password typed is mismatched"); +if ($passwordgenmethod == "spec" && $input['specifiedpassword'] != $input['confirmpassword']) { + webAlertAndQuit("Password typed is mismatched"); } // verify email -if($email == '' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i", $email)) { - webAlertAndQuit("E-mail address doesn't seem to be valid!"); +if ($email == '' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i", $email)) { + webAlertAndQuit("E-mail address doesn't seem to be valid!"); } // verify admin security -if($_SESSION['mgrRole'] != 1) { - // Check to see if user tried to spoof a "1" (admin) role - if(!$modx->hasPermission('save_role')) { - webAlertAndQuit("Illegal attempt to create/modify administrator by non-administrator!"); - } - // Verify that the user being edited wasn't an admin and the user ID got spoofed - $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, "internalKey='{$id}' AND role=1"); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("You cannot alter an administrative user."); - } +if ($_SESSION['mgrRole'] != 1) { + // Check to see if user tried to spoof a "1" (admin) role + if (!$modx->hasPermission('save_user')) { + webAlertAndQuit("Illegal attempt to create/modify administrator by non-administrator!", 12); + } + // Verify that the user being edited wasn't an admin and the user ID got spoofed + $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, "internalKey='{$id}' AND role=1"); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("You cannot alter an administrative user."); + } } -switch($input['mode']) { - case '11' : // new user - // check if this user name already exist - $rs = $modx->db->select('count(id)', $tbl_manager_users, sprintf("username='%s'", $modx->db->escape($newusername))); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("User name is already in use!"); - } - - // check if the email address already exist - $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, sprintf("email='%s' AND id!='%s'", $modx->db->escape($email), $id)); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("Email is already in use!"); - } - - // generate a new password for this user - if($specifiedpassword != "" && $passwordgenmethod == "spec") { - if(strlen($specifiedpassword) < 6) { - webAlertAndQuit("Password is too short!"); - } else { - $newpassword = $specifiedpassword; - } - } elseif($specifiedpassword == "" && $passwordgenmethod == "spec") { - webAlertAndQuit("You didn't specify a password for this user!"); - } elseif($passwordgenmethod == 'g') { - $newpassword = generate_password(8); - } else { - webAlertAndQuit("No password generation method specified!"); - } - - // invoke OnBeforeUserFormSave event - $modx->invokeEvent("OnBeforeUserFormSave", array( - "mode" => "new", - )); - - // create the user account - $internalKey = $modx->db->insert(array('username' => $modx->db->escape($newusername)), $tbl_manager_users); - - $field = array(); - $field['password'] = $modx->phpass->HashPassword($newpassword); - $modx->db->update($field, $tbl_manager_users, "id='{$internalKey}'"); - - $field = compact('internalKey', 'fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'blocked', 'blockeduntil', 'blockedafter'); - $field = $modx->db->escape($field); - $modx->db->insert($field, $tbl_user_attributes); - - // Save user settings - saveUserSettings($internalKey); - - // invoke OnManagerSaveUser event - $modx->invokeEvent("OnManagerSaveUser", array( - "mode" => "new", - "userid" => $internalKey, - "username" => $newusername, - "userpassword" => $newpassword, - "useremail" => $email, - "userfullname" => $fullname, - "userroleid" => $role - )); - - // invoke OnUserFormSave event - $modx->invokeEvent("OnUserFormSave", array( - "mode" => "new", - "id" => $internalKey - )); - - // Set the item name for logger - $_SESSION['itemname'] = $newusername; - - /*******************************************************************************/ - // put the user in the user_groups he/ she should be in - // first, check that up_perms are switched on! - if($use_udperms == 1) { - if(!empty($user_groups)) { - for($i = 0; $i < count($user_groups); $i++) { - $f = array(); - $f['user_group'] = (int)$user_groups[$i]; - $f['member'] = $internalKey; - $modx->db->insert($f, $tbl_member_groups); - } - } - } - // end of user_groups stuff! - - if($passwordnotifymethod == 'e') { - sendMailMessage($email, $newusername, $newpassword, $fullname); - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "12&id={$internalKey}" : "11"; - $header = "Location: index.php?a={$a}&r=2&stay=" . $input['stay']; - header($header); - } else { - $header = "Location: index.php?a=75&r=2"; - header($header); - } - } else { - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "12&id={$internalKey}" : "11"; - $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; - } else { - $stayUrl = "index.php?a=75&r=2"; - } - - include_once "header.inc.php"; - ?> - -

          - -
          - -
          - -
          -
          -
          -
          -

          - htmlspecialchars($newusername), $modx->htmlspecialchars($newpassword)); ?> -

          -
          -
          -
          - db->select('count(id)', $tbl_manager_users, sprintf("username='%s' AND id!='%s'", $modx->db->escape($newusername), $id)); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("User name is already in use!"); - } - - // check if the email address already exists - $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, sprintf("email='%s' AND internalKey!='%s'", $modx->db->escape($email), $id)); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("Email is already in use!"); - } - - // invoke OnBeforeUserFormSave event - $modx->invokeEvent("OnBeforeUserFormSave", array( - "mode" => "upd", - "id" => $id - )); - - // update user name and password - $field = array(); - $field['username'] = $modx->db->escape($newusername); - if($genpassword == 1) { - $field['password'] = $modx->phpass->HashPassword($newpassword); - } - $modx->db->update($field, $tbl_manager_users, "id='{$id}'"); - $field = compact('fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'failedlogincount', 'blocked', 'blockeduntil', 'blockedafter'); - $field = $modx->db->escape($field); - $modx->db->update($field, $tbl_user_attributes, "internalKey='{$id}'"); - - // Save user settings - saveUserSettings($id); - - // Set the item name for logger - $_SESSION['itemname'] = $newusername; - - // invoke OnManagerSaveUser event - $modx->invokeEvent("OnManagerSaveUser", array( - "mode" => "upd", - "userid" => $id, - "username" => $newusername, - "userpassword" => $newpassword, - "useremail" => $email, - "userfullname" => $fullname, - "userroleid" => $role, - "oldusername" => (($oldusername != $newusername) ? $oldusername : ""), - "olduseremail" => (($oldemail != $email) ? $oldemail : "") - )); - - // invoke OnManagerChangePassword event - if($genpassword == 1) { - $modx->invokeEvent("OnManagerChangePassword", array( - "userid" => $id, - "username" => $newusername, - "userpassword" => $newpassword - )); - } - - // invoke OnUserFormSave event - $modx->invokeEvent("OnUserFormSave", array( - "mode" => "upd", - "id" => $id - )); - - /*******************************************************************************/ - // put the user in the user_groups he/ she should be in - // first, check that up_perms are switched on! - if($use_udperms == 1) { - // as this is an existing user, delete his/ her entries in the groups before saving the new groups - $modx->db->delete($tbl_member_groups, "member='{$id}'"); - if(!empty($user_groups)) { - for($i = 0; $i < count($user_groups); $i++) { - $field = array(); - $field['user_group'] = (int)$user_groups[$i]; - $field['member'] = $id; - $modx->db->insert($field, $tbl_member_groups); - } - } - } - // end of user_groups stuff! - /*******************************************************************************/ - if($id == $modx->getLoginUserID() && ($genpassword !== 1 && $passwordnotifymethod != 's')) { - $modx->webAlertAndQuit($_lang["user_changeddata"], 'javascript:top.location.href="index.php?a=8";'); - } - if($genpassword == 1 && $passwordnotifymethod == 's') { - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "12&id={$id}" : "11"; - $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; - } else { - $stayUrl = "index.php?a=75&r=2"; - } - - include_once "header.inc.php"; - ?> - -

          - - - -
          -
          -
          -
          -

          htmlspecialchars($newusername), $modx->htmlspecialchars($newpassword)) . (($id == $modx->getLoginUserID()) ? ' ' . $_lang['user_changeddata'] : ''); ?>

          -
          -
          -
          - db->select('count(id)', $tbl_manager_users, + sprintf("username='%s'", $modx->db->escape($newusername))); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("User name is already in use!"); + } + + // check if the email address already exist + $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, + sprintf("email='%s' AND id!='%s'", $modx->db->escape($email), $id)); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("Email is already in use!"); + } + + // generate a new password for this user + if ($specifiedpassword != "" && $passwordgenmethod == "spec") { + if (strlen($specifiedpassword) < 6) { + webAlertAndQuit("Password is too short!"); + } else { + $newpassword = $specifiedpassword; + } + } elseif ($specifiedpassword == "" && $passwordgenmethod == "spec") { + webAlertAndQuit("You didn't specify a password for this user!"); + } elseif ($passwordgenmethod == 'g') { + $newpassword = generate_password(8); + } else { + webAlertAndQuit("No password generation method specified!"); + } + + // invoke OnBeforeUserFormSave event + $modx->invokeEvent("OnBeforeUserFormSave", array( + "mode" => "new", + )); + + // create the user account + $internalKey = $modx->db->insert(array('username' => $modx->db->escape($newusername)), $tbl_manager_users); + + $field = array(); + $field['password'] = $modx->phpass->HashPassword($newpassword); + $modx->db->update($field, $tbl_manager_users, "id='{$internalKey}'"); + + $field = compact('internalKey', 'fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', + 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'blocked', 'blockeduntil', 'blockedafter'); + $field = $modx->db->escape($field); + $modx->db->insert($field, $tbl_user_attributes); + + // Save user settings + saveUserSettings($internalKey); + + // invoke OnManagerSaveUser event + $modx->invokeEvent("OnManagerSaveUser", array( + "mode" => "new", + "userid" => $internalKey, + "username" => $newusername, + "userpassword" => $newpassword, + "useremail" => $email, + "userfullname" => $fullname, + "userroleid" => $role + )); + + // invoke OnUserFormSave event + $modx->invokeEvent("OnUserFormSave", array( + "mode" => "new", + "id" => $internalKey + )); + + // Set the item name for logger + $_SESSION['itemname'] = $newusername; + + /*******************************************************************************/ + // put the user in the user_groups he/ she should be in + // first, check that up_perms are switched on! + if ($use_udperms == 1) { + if (!empty($user_groups)) { + for ($i = 0; $i < count($user_groups); $i++) { + $f = array(); + $f['user_group'] = (int)$user_groups[$i]; + $f['member'] = $internalKey; + $modx->db->insert($f, $tbl_member_groups); + } + } + } + // end of user_groups stuff! + + if ($passwordnotifymethod == 'e') { + sendMailMessage($email, $newusername, $newpassword, $fullname); + if ($input['stay'] != '') { + $a = ($input['stay'] == '2') ? "12&id={$internalKey}" : "11"; + $header = "Location: index.php?a={$a}&r=2&stay=" . $input['stay']; + header($header); + } else { + $header = "Location: index.php?a=75&r=2"; + header($header); + } + } else { + if ($input['stay'] != '') { + $a = ($input['stay'] == '2') ? "12&id={$internalKey}" : "11"; + $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; + } else { + $stayUrl = "index.php?a=75&r=2"; + } + + include_once "header.inc.php"; + ?> + +

          + +
          +
          + "> + +
          +
          + +
          +
          +
          +

          + htmlspecialchars($newusername), + $modx->htmlspecialchars($newpassword)); ?> +

          +
          +
          +
          + db->select('count(id)', $tbl_manager_users, + sprintf("username='%s' AND id!='%s'", $modx->db->escape($newusername), $id)); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("User name is already in use!"); + } + + // check if the email address already exists + $rs = $modx->db->select('count(internalKey)', $tbl_user_attributes, + sprintf("email='%s' AND internalKey!='%s'", $modx->db->escape($email), $id)); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("Email is already in use!"); + } + + // invoke OnBeforeUserFormSave event + $modx->invokeEvent("OnBeforeUserFormSave", array( + "mode" => "upd", + "id" => $id + )); + + // update user name and password + $field = array(); + $field['username'] = $modx->db->escape($newusername); + if ($genpassword == 1) { + $field['password'] = $modx->phpass->HashPassword($newpassword); + } + $modx->db->update($field, $tbl_manager_users, "id='{$id}'"); + $field = compact('fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', + 'country', 'gender', 'dob', 'photo', 'comment', 'failedlogincount', 'blocked', 'blockeduntil', + 'blockedafter'); + $field = $modx->db->escape($field); + $modx->db->update($field, $tbl_user_attributes, "internalKey='{$id}'"); + + // Save user settings + saveUserSettings($id); + + // Set the item name for logger + $_SESSION['itemname'] = $newusername; + + // invoke OnManagerSaveUser event + $modx->invokeEvent("OnManagerSaveUser", array( + "mode" => "upd", + "userid" => $id, + "username" => $newusername, + "userpassword" => $newpassword, + "useremail" => $email, + "userfullname" => $fullname, + "userroleid" => $role, + "oldusername" => (($oldusername != $newusername) ? $oldusername : ""), + "olduseremail" => (($oldemail != $email) ? $oldemail : "") + )); + + // invoke OnManagerChangePassword event + if ($genpassword == 1) { + $modx->invokeEvent("OnManagerChangePassword", array( + "userid" => $id, + "username" => $newusername, + "userpassword" => $newpassword + )); + } + + // invoke OnUserFormSave event + $modx->invokeEvent("OnUserFormSave", array( + "mode" => "upd", + "id" => $id + )); + + /*******************************************************************************/ + // put the user in the user_groups he/ she should be in + // first, check that up_perms are switched on! + if ($use_udperms == 1) { + // as this is an existing user, delete his/ her entries in the groups before saving the new groups + $modx->db->delete($tbl_member_groups, "member='{$id}'"); + if (!empty($user_groups)) { + for ($i = 0; $i < count($user_groups); $i++) { + $field = array(); + $field['user_group'] = (int)$user_groups[$i]; + $field['member'] = $id; + $modx->db->insert($field, $tbl_member_groups); + } + } + } + // end of user_groups stuff! + /*******************************************************************************/ + if ($id == $modx->getLoginUserID() && ($genpassword !== 1 && $passwordnotifymethod != 's')) { + $modx->webAlertAndQuit($_lang["user_changeddata"], 'javascript:top.location.href="index.php?a=8";'); + } + if ($genpassword == 1 && $passwordnotifymethod == 's') { + if ($input['stay'] != '') { + $a = ($input['stay'] == '2') ? "12&id={$id}" : "11"; + $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; + } else { + $stayUrl = "index.php?a=75&r=2"; + } + + include_once "header.inc.php"; + ?> + +

          + + + +
          +
          +
          +

          htmlspecialchars($newusername), + $modx->htmlspecialchars($newpassword)) . (($id == $modx->getLoginUserID()) ? ' ' . $_lang['user_changeddata'] : ''); ?>

          +
          +
          +
          + "; - $param['subject'] = $emailsubject; - $param['body'] = $message; - $param['to'] = $email; - $param['type'] = 'text'; - $rs = $modx->sendmail($param); - if(!$rs) { - $modx->manager->saveFormValues(); - $modx->messageQuit("{$email} - {$_lang['error_sending_email']}"); - } +function sendMailMessage( + $email, + $uid, + $pwd, + $ufn +) { + $modx = evolutionCMS(); + global $_lang, $signupemail_message; + global $emailsubject, $emailsender; + global $site_name; + $manager_url = MODX_MANAGER_URL; + $message = sprintf($signupemail_message, $uid, $pwd); // use old method + // replace placeholders + $message = str_replace("[+uid+]", $uid, $message); + $message = str_replace("[+pwd+]", $pwd, $message); + $message = str_replace("[+ufn+]", $ufn, $message); + $message = str_replace("[+sname+]", $site_name, $message); + $message = str_replace("[+saddr+]", $emailsender, $message); + $message = str_replace("[+semail+]", $emailsender, $message); + $message = str_replace("[+surl+]", $manager_url, $message); + + $param = array(); + $param['from'] = "{$site_name}<{$emailsender}>"; + $param['subject'] = $emailsubject; + $param['body'] = $message; + $param['to'] = $email; + $param['type'] = 'text'; + $rs = $modx->sendmail($param); + if (!$rs) { + $modx->manager->saveFormValues(); + $modx->messageQuit("{$email} - {$_lang['error_sending_email']}"); + } } /** @@ -389,87 +406,89 @@ function sendMailMessage($email, $uid, $pwd, $ufn) { * * @param int $id */ -function saveUserSettings($id) { - global $modx; - $tbl_user_settings = $modx->getFullTableName('user_settings'); - - $ignore = array( - 'id', - 'oldusername', - 'oldemail', - 'newusername', - 'fullname', - 'newpassword', - 'newpasswordcheck', - 'passwordgenmethod', - 'passwordnotifymethod', - 'specifiedpassword', - 'confirmpassword', - 'email', - 'phone', - 'mobilephone', - 'fax', - 'dob', - 'country', - 'street', - 'city', - 'state', - 'zip', - 'gender', - 'photo', - 'comment', - 'role', - 'failedlogincount', - 'blocked', - 'blockeduntil', - 'blockedafter', - 'user_groups', - 'mode', - 'blockedmode', - 'stay', - 'save', - 'theme_refresher' - ); - - // determine which settings can be saved blank (based on 'default_{settingname}' POST checkbox values) - $defaults = array( - 'upload_images', - 'upload_media', - 'upload_flash', - 'upload_files' - ); - - // get user setting field names - $settings = array(); - foreach($_POST as $n => $v) { - if(in_array($n, $ignore) || (!in_array($n, $defaults) && is_scalar($v) && trim($v) == '') || (!in_array($n, $defaults) && is_array($v) && empty($v))) { - continue; - } // ignore blacklist and empties - $settings[$n] = $v; // this value should be saved - } - - foreach($defaults as $k) { - if(isset($settings['default_' . $k]) && $settings['default_' . $k] == '1') { - unset($settings[$k]); - } - unset($settings['default_' . $k]); - } - - $modx->db->delete($tbl_user_settings, "user='{$id}'"); - - foreach($settings as $n => $vl) { - if(is_array($vl)) { - $vl = implode(",", $vl); - } - if($vl != '') { - $f = array(); - $f['user'] = $id; - $f['setting_name'] = $n; - $f['setting_value'] = $vl; - $f = $modx->db->escape($f); - $modx->db->insert($f, $tbl_user_settings); - } - } +function saveUserSettings($id) +{ + $modx = evolutionCMS(); + $tbl_user_settings = $modx->getFullTableName('user_settings'); + + $ignore = array( + 'id', + 'oldusername', + 'oldemail', + 'newusername', + 'fullname', + 'newpassword', + 'newpasswordcheck', + 'passwordgenmethod', + 'passwordnotifymethod', + 'specifiedpassword', + 'confirmpassword', + 'email', + 'phone', + 'mobilephone', + 'fax', + 'dob', + 'country', + 'street', + 'city', + 'state', + 'zip', + 'gender', + 'photo', + 'comment', + 'role', + 'failedlogincount', + 'blocked', + 'blockeduntil', + 'blockedafter', + 'user_groups', + 'mode', + 'blockedmode', + 'stay', + 'save', + 'theme_refresher' + ); + + // determine which settings can be saved blank (based on 'default_{settingname}' POST checkbox values) + $defaults = array( + 'upload_images', + 'upload_media', + 'upload_flash', + 'upload_files' + ); + + // get user setting field names + $settings = array(); + foreach ($_POST as $n => $v) { + if (in_array($n, $ignore) || (!in_array($n, $defaults) && is_scalar($v) && trim($v) == '') || (!in_array($n, + $defaults) && is_array($v) && empty($v))) { + continue; + } // ignore blacklist and empties + $settings[$n] = $v; // this value should be saved + } + + foreach ($defaults as $k) { + if (isset($settings['default_' . $k]) && $settings['default_' . $k] == '1') { + unset($settings[$k]); + } + unset($settings['default_' . $k]); + } + + $modx->db->delete($tbl_user_settings, "user='{$id}'"); + + foreach ($settings as $n => $vl) { + if (is_array($vl)) { + $vl = implode(",", $vl); + } + if ($vl != '') { + $f = array(); + $f['user'] = $id; + $f['setting_name'] = $n; + $f['setting_value'] = $vl; + $f = $modx->db->escape($f); + $modx->db->insert($f, $tbl_user_settings); + } + } } /** @@ -477,11 +496,12 @@ function saveUserSettings($id) { * * @param $msg */ -function webAlertAndQuit($msg) { - global $id, $modx; - $mode = $_POST['mode']; - $modx->manager->saveFormValues($mode); - $modx->webAlertAndQuit($msg, "index.php?a={$mode}" . ($mode == '12' ? "&id={$id}" : '')); +function webAlertAndQuit($msg) +{ + global $id, $modx; + $mode = $_POST['mode']; + $modx->manager->saveFormValues($mode); + $modx->webAlertAndQuit($msg, "index.php?a={$mode}" . ($mode == '12' ? "&id={$id}" : '')); } /** @@ -490,13 +510,14 @@ function webAlertAndQuit($msg) { * @param int $length * @return string */ -function generate_password($length = 10) { - $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; - $ps_len = strlen($allowable_characters); - mt_srand((double) microtime() * 1000000); - $pass = ""; - for($i = 0; $i < $length; $i++) { - $pass .= $allowable_characters[mt_rand(0, $ps_len - 1)]; - } - return $pass; +function generate_password($length = 10) +{ + $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; + $ps_len = strlen($allowable_characters); + mt_srand((double)microtime() * 1000000); + $pass = ""; + for ($i = 0; $i < $length; $i++) { + $pass .= $allowable_characters[mt_rand(0, $ps_len - 1)]; + } + return $pass; } diff --git a/manager/processors/save_web_user.processor.php b/manager/processors/save_web_user.processor.php index 05c6c016..8a4728ff 100755 --- a/manager/processors/save_web_user.processor.php +++ b/manager/processors/save_web_user.processor.php @@ -1,9 +1,9 @@ INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); +if (!defined('IN_MANAGER_MODE') || IN_MANAGER_MODE !== true) { + die("INCLUDE_ORDERING_ERROR

          Please use the EVO Content Manager instead of accessing this file directly."); } -if(!$modx->hasPermission('save_web_user')) { - $modx->webAlertAndQuit($_lang["error_no_privileges"]); +if (!$modx->hasPermission('save_web_user')) { + $modx->webAlertAndQuit($_lang["error_no_privileges"]); } $tbl_web_users = $modx->getFullTableName('web_users'); @@ -11,11 +11,11 @@ $tbl_web_groups = $modx->getFullTableName('web_groups'); $input = $_POST; -foreach($input as $k => $v) { - if($k !== 'comment') { - $v = sanitize($v); - } - $input[$k] = $v; +foreach ($input as $k => $v) { + if ($k !== 'comment' && $k !== 'user_groups') { + $v = sanitize($v); + } + $input[$k] = $v; } $id = (int)$input['id']; @@ -27,7 +27,7 @@ $passwordgenmethod = $input['passwordgenmethod']; $passwordnotifymethod = $input['passwordnotifymethod']; $specifiedpassword = $input['specifiedpassword']; -$email = $input['email']; +$email = trim($input['email']); $esc_email = $modx->db->escape($email); $oldemail = $input['oldemail']; $phone = $input['phone']; @@ -50,81 +50,84 @@ $user_groups = $input['user_groups']; // verify password -if($passwordgenmethod == "spec" && $input['specifiedpassword'] != $input['confirmpassword']) { - webAlertAndQuit("Password typed is mismatched"); +if ($passwordgenmethod == "spec" && $input['specifiedpassword'] != $input['confirmpassword']) { + webAlertAndQuit("Password typed is mismatched"); } // verify email -if($email == '' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i", $email)) { - webAlertAndQuit("E-mail address doesn't seem to be valid!"); +if ($email == '' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i", $email)) { + webAlertAndQuit("E-mail address doesn't seem to be valid!"); } -switch($input['mode']) { - case '87' : // new user - // check if this user name already exist - $rs = $modx->db->select('count(id)', $tbl_web_users, "username='{$esc_newusername}'"); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("User name is already in use!"); - } - - // check if the email address already exist - $rs = $modx->db->select('count(id)', $tbl_web_user_attributes, "email='{$esc_email}' AND id!='{$id}'"); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("Email is already in use!"); - } - - // generate a new password for this user - if($specifiedpassword != "" && $passwordgenmethod == "spec") { - if(strlen($specifiedpassword) < 6) { - webAlertAndQuit("Password is too short!"); - } else { - $newpassword = $specifiedpassword; - } - } elseif($specifiedpassword == "" && $passwordgenmethod == "spec") { - webAlertAndQuit("You didn't specify a password for this user!"); - } elseif($passwordgenmethod == 'g') { - $newpassword = generate_password(8); - } else { - webAlertAndQuit("No password generation method specified!"); - } - - // invoke OnBeforeWUsrFormSave event - $modx->invokeEvent("OnBeforeWUsrFormSave", array( - "mode" => "new", - )); - - // create the user account - $field = array(); - $field['username'] = $esc_newusername; - $field['password'] = md5($newpassword); - $internalKey = $modx->db->insert($field, $tbl_web_users); - - $field = compact('internalKey', 'fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'blocked', 'blockeduntil', 'blockedafter'); - $field = $modx->db->escape($field); - $modx->db->insert($field, $tbl_web_user_attributes); - - // Save User Settings - saveUserSettings($internalKey); - - // Set the item name for logger - $_SESSION['itemname'] = $newusername; - - /*******************************************************************************/ - // put the user in the user_groups he/ she should be in - // first, check that up_perms are switched on! - if($use_udperms == 1) { - if(!empty($user_groups)) { - for($i = 0; $i < count($user_groups); $i++) { - $f = array(); - $f['webgroup'] = (int)$user_groups[$i]; - $f['webuser'] = $internalKey; - $modx->db->insert($f, $tbl_web_groups); - } - } - } - // end of user_groups stuff! +switch ($input['mode']) { + case '87' : // new user + // check if this user name already exist + $rs = $modx->db->select('count(id)', $tbl_web_users, "username='{$esc_newusername}'"); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("User name is already in use!"); + } + + // check if the email address already exist + if ($modx->config['allow_multiple_emails'] != 1) { + $rs = $modx->db->select('count(id)', $tbl_web_user_attributes, "email='{$esc_email}' AND id!='{$id}'"); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("Email is already in use!"); + } + } + + // generate a new password for this user + if ($specifiedpassword != "" && $passwordgenmethod == "spec") { + if (strlen($specifiedpassword) < 6) { + webAlertAndQuit("Password is too short!"); + } else { + $newpassword = $specifiedpassword; + } + } elseif ($specifiedpassword == "" && $passwordgenmethod == "spec") { + webAlertAndQuit("You didn't specify a password for this user!"); + } elseif ($passwordgenmethod == 'g') { + $newpassword = generate_password(8); + } else { + webAlertAndQuit("No password generation method specified!"); + } + + // invoke OnBeforeWUsrFormSave event + $modx->invokeEvent("OnBeforeWUsrFormSave", array( + "mode" => "new", + )); + + // create the user account + $field = array(); + $field['username'] = $esc_newusername; + $field['password'] = md5($newpassword); + $internalKey = $modx->db->insert($field, $tbl_web_users); + + $field = compact('internalKey', 'fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', + 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'blocked', 'blockeduntil', 'blockedafter'); + $field = $modx->db->escape($field); + $modx->db->insert($field, $tbl_web_user_attributes); + + // Save User Settings + saveUserSettings($internalKey); + + // Set the item name for logger + $_SESSION['itemname'] = $newusername; + + /*******************************************************************************/ + // put the user in the user_groups he/ she should be in + // first, check that up_perms are switched on! + if ($use_udperms == 1) { + if (!empty($user_groups)) { + for ($i = 0; $i < count($user_groups); $i++) { + $f = array(); + $f['webgroup'] = (int)$user_groups[$i]; + $f['webuser'] = $internalKey; + $modx->db->insert($f, $tbl_web_groups); + } + } + } + // end of user_groups stuff! // invoke OnWebSaveUser event $modx->invokeEvent("OnWebSaveUser", array( @@ -142,125 +145,130 @@ "id" => $internalKey )); - if($passwordnotifymethod == 'e') { - sendMailMessage($email, $newusername, $newpassword, $fullname); - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "88&id={$internalKey}" : "87"; - $header = "Location: index.php?a={$a}&r=2&stay=" . $input['stay']; - header($header); - } else { - $header = "Location: index.php?a=99&r=2"; - header($header); - } - } else { - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "88&id={$internalKey}" : "87"; - $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; - } else { - $stayUrl = "index.php?a=99&r=2"; - } - - include_once "header.inc.php"; - ?> - -

          - -
          - -
          - -
          -
          -
          -
          -

          - -

          -
          -
          -
          - db->select('count(id)', $tbl_web_users, "username='{$esc_newusername}' AND id!='{$id}'"); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("User name is already in use!"); - } - - // check if the email address already exists - $rs = $modx->db->select('count(internalKey)', $tbl_web_user_attributes, "email='{$esc_email}' AND internalKey!='{$id}'"); - $limit = $modx->db->getValue($rs); - if($limit > 0) { - webAlertAndQuit("Email is already in use!"); - } - - // invoke OnBeforeWUsrFormSave event - $modx->invokeEvent("OnBeforeWUsrFormSave", array( - "mode" => "upd", - "id" => $id - )); - - // update user name and password - $field = array(); - $field['username'] = $esc_newusername; - if($genpassword == 1) { - $field['password'] = md5($newpassword); - } - $modx->db->update($field, $tbl_web_users, "id='{$id}'"); - $field = compact('fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', 'country', 'gender', 'dob', 'photo', 'comment', 'failedlogincount', 'blocked', 'blockeduntil', 'blockedafter'); - $field = $modx->db->escape($field); - $modx->db->update($field, $tbl_web_user_attributes, "internalKey='{$id}'"); - - // Save User Settings - saveUserSettings($id); - - // Set the item name for logger - $_SESSION['itemname'] = $newusername; - - /*******************************************************************************/ - // put the user in the user_groups he/ she should be in - // first, check that up_perms are switched on! - if($use_udperms == 1) { - // as this is an existing user, delete his/ her entries in the groups before saving the new groups - $modx->db->delete($tbl_web_groups, "webuser='{$id}'"); - if(!empty($user_groups)) { - for($i = 0; $i < count($user_groups); $i++) { - $field = array(); - $field['webgroup'] = (int)$user_groups[$i]; - $field['webuser'] = $id; - $modx->db->insert($field, $tbl_web_groups); - } - } - } - // end of user_groups stuff! - /*******************************************************************************/ + if ($passwordnotifymethod == 'e') { + sendMailMessage($email, $newusername, $newpassword, $fullname); + if ($input['stay'] != '') { + $a = ($input['stay'] == '2') ? "88&id={$internalKey}" : "87"; + $header = "Location: index.php?a={$a}&r=2&stay=" . $input['stay']; + header($header); + } else { + $header = "Location: index.php?a=99&r=2"; + header($header); + } + } else { + if ($input['stay'] != '') { + $a = ($input['stay'] == '2') ? "88&id={$internalKey}" : "87"; + $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; + } else { + $stayUrl = "index.php?a=99&r=2"; + } + + include_once "header.inc.php"; + ?> + +

          + +
          +
          + "> + +
          +
          + +
          +
          +
          +

          + +

          +
          +
          +
          + db->select('count(id)', $tbl_web_users, "username='{$esc_newusername}' AND id!='{$id}'"); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("User name is already in use!"); + } + + // check if the email address already exists + if ($modx->config['allow_multiple_emails'] != 1) { + $rs = $modx->db->select('count(internalKey)', $tbl_web_user_attributes, + "email='{$esc_email}' AND internalKey!='{$id}'"); + $limit = $modx->db->getValue($rs); + if ($limit > 0) { + webAlertAndQuit("Email is already in use!"); + } + } + + // invoke OnBeforeWUsrFormSave event + $modx->invokeEvent("OnBeforeWUsrFormSave", array( + "mode" => "upd", + "id" => $id + )); + + // update user name and password + $field = array(); + $field['username'] = $esc_newusername; + if ($genpassword == 1) { + $field['password'] = md5($newpassword); + } + $modx->db->update($field, $tbl_web_users, "id='{$id}'"); + $field = compact('fullname', 'role', 'email', 'phone', 'mobilephone', 'fax', 'zip', 'street', 'city', 'state', + 'country', 'gender', 'dob', 'photo', 'comment', 'failedlogincount', 'blocked', 'blockeduntil', + 'blockedafter'); + $field = $modx->db->escape($field); + $modx->db->update($field, $tbl_web_user_attributes, "internalKey='{$id}'"); + + // Save User Settings + saveUserSettings($id); + + // Set the item name for logger + $_SESSION['itemname'] = $newusername; + + /*******************************************************************************/ + // put the user in the user_groups he/ she should be in + // first, check that up_perms are switched on! + if ($use_udperms == 1) { + // as this is an existing user, delete his/ her entries in the groups before saving the new groups + $modx->db->delete($tbl_web_groups, "webuser='{$id}'"); + if (!empty($user_groups)) { + for ($i = 0; $i < count($user_groups); $i++) { + $field = array(); + $field['webgroup'] = (int)$user_groups[$i]; + $field['webuser'] = $id; + $modx->db->insert($field, $tbl_web_groups); + } + } + } + // end of user_groups stuff! + /*******************************************************************************/ // invoke OnWebSaveUser event $modx->invokeEvent("OnWebSaveUser", array( @@ -275,7 +283,7 @@ )); // invoke OnWebChangePassword event - if($genpassword == 1) { + if ($genpassword == 1) { $modx->invokeEvent("OnWebChangePassword", array( "userid" => $id, "username" => $newusername, @@ -289,49 +297,49 @@ "id" => $id )); - if($genpassword == 1 && $passwordnotifymethod == 's') { - if($input['stay'] != '') { - $a = ($input['stay'] == '2') ? "88&id={$id}" : "87"; - $stayUrl = "index.php?a={$a}&r=2&stay=" . $input['stay']; - } else { - $stayUrl = "index.php?a=99&r=2"; - } - - include_once "header.inc.php"; - ?> - -

          - -
          - -
          - -
          -
          -
          -
          -

          -
          -
          -
          - + +

          + +
          +
          + "> + +
          +
          + +
          +
          +
          +

          +
          +
          +
          + "; - $param['subject'] = $emailsubject; - $param['body'] = $message; - $param['to'] = $email; - $param['type'] = 'text'; - $rs = $modx->sendmail($param); - if(!$rs) { - $modx->manager->saveFormValues(); - $modx->messageQuit("{$email} - {$_lang['error_sending_email']}"); - } +function sendMailMessage( + $email, + $uid, + $pwd, + $ufn +) { + $modx = evolutionCMS(); + global $_lang, $websignupemail_message; + global $emailsubject, $emailsender; + global $site_name, $site_url; + $message = sprintf($websignupemail_message, $uid, $pwd); // use old method + // replace placeholders + $message = str_replace("[+uid+]", $uid, $message); + $message = str_replace("[+pwd+]", $pwd, $message); + $message = str_replace("[+ufn+]", $ufn, $message); + $message = str_replace("[+sname+]", $site_name, $message); + $message = str_replace("[+saddr+]", $emailsender, $message); + $message = str_replace("[+semail+]", $emailsender, $message); + $message = str_replace("[+surl+]", $site_url, $message); + + $param = array(); + $param['from'] = "{$site_name}<{$emailsender}>"; + $param['subject'] = $emailsubject; + $param['body'] = $message; + $param['to'] = $email; + $param['type'] = 'text'; + $rs = $modx->sendmail($param); + if (!$rs) { + $modx->manager->saveFormValues(); + $modx->messageQuit("{$email} - {$_lang['error_sending_email']}"); + } } // Save User Settings -function saveUserSettings($id) { - global $modx; - $tbl_web_user_settings = $modx->getFullTableName('web_user_settings'); - - $settings = array( - "login_home", - "allowed_ip", - "allowed_days" - ); - - $modx->db->delete($tbl_web_user_settings, "webuser='{$id}'"); - - foreach($settings as $n) { - $vl = $_POST[$n]; - if(is_array($vl)) { - $vl = implode(",", $vl); - } - if($vl != '') { - $f = array(); - $f['webuser'] = $id; - $f['setting_name'] = $n; - $f['setting_value'] = $vl; - $f = $modx->db->escape($f); - $modx->db->insert($f, $tbl_web_user_settings); - } - } +function saveUserSettings($id) +{ + $modx = evolutionCMS(); + $tbl_web_user_settings = $modx->getFullTableName('web_user_settings'); + + $settings = array( + "login_home", + "allowed_ip", + "allowed_days" + ); + + $modx->db->delete($tbl_web_user_settings, "webuser='{$id}'"); + + foreach ($settings as $n) { + $vl = $_POST[$n]; + if (is_array($vl)) { + $vl = implode(",", $vl); + } + if ($vl != '') { + $f = array(); + $f['webuser'] = $id; + $f['setting_name'] = $n; + $f['setting_value'] = $vl; + $f = $modx->db->escape($f); + $modx->db->insert($f, $tbl_web_user_settings); + } + } } // Web alert - sends an alert to web browser -function webAlertAndQuit($msg) { - global $id, $modx; - $mode = $_POST['mode']; - $modx->manager->saveFormValues($mode); - $modx->webAlertAndQuit($msg, "index.php?a={$mode}" . ($mode == '88' ? "&id={$id}" : '')); +function webAlertAndQuit($msg) +{ + global $id, $modx; + $mode = $_POST['mode']; + $modx->manager->saveFormValues($mode); + $modx->webAlertAndQuit($msg, "index.php?a={$mode}" . ($mode == '88' ? "&id={$id}" : '')); } // Generate password -function generate_password($length = 10) { - $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; - $ps_len = strlen($allowable_characters); - mt_srand((double) microtime() * 1000000); - $pass = ""; - for($i = 0; $i < $length; $i++) { - $pass .= $allowable_characters[mt_rand(0, $ps_len - 1)]; - } - return $pass; +function generate_password($length = 10) +{ + $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; + $ps_len = strlen($allowable_characters); + mt_srand((double)microtime() * 1000000); + $pass = ""; + for ($i = 0; $i < $length; $i++) { + $pass .= $allowable_characters[mt_rand(0, $ps_len - 1)]; + } + return $pass; } -function sanitize($str = '', $safecount = 0) { - global $modx; - $safecount++; - if(1000 < $safecount) { - exit("error too many loops '{$safecount}'"); - } - if(is_array($str)) { - foreach($str as $i => $v) { - $str[$i] = sanitize($v, $safecount); - } - } else { - // $str = strip_tags($str); // LEAVE < and > intact - $str = htmlspecialchars($str, ENT_NOQUOTES, $modx->config['modx_charset']); - } - return $str; +function sanitize( + $str = '', + $safecount = 0 +) { + $modx = evolutionCMS(); + $safecount++; + if (1000 < $safecount) { + exit("error too many loops '{$safecount}'"); + } + if (is_array($str)) { + foreach ($str as $i => $v) { + $str[$i] = sanitize($v, $safecount); + } + } else { + // $str = strip_tags($str); // LEAVE < and > intact + $str = htmlspecialchars($str, ENT_NOQUOTES, $modx->config['modx_charset']); + } + return $str; } diff --git a/manager/processors/undelete_content.processor.php b/manager/processors/undelete_content.processor.php index 6ddbc713..84cdc95f 100755 --- a/manager/processors/undelete_content.processor.php +++ b/manager/processors/undelete_content.processor.php @@ -49,7 +49,7 @@ */ function getChildren($parent) { - global $modx; + $modx = evolutionCMS(); global $children; global $deltime; diff --git a/manager/processors/user_documents_permissions.class.php b/manager/processors/user_documents_permissions.class.php index 54ceaf65..50fdf27b 100755 --- a/manager/processors/user_documents_permissions.class.php +++ b/manager/processors/user_documents_permissions.class.php @@ -26,7 +26,7 @@ public function checkPermissions() { global $udperms_allowroot; - global $modx; + $modx = evolutionCMS(); $tblsc = $modx->getFullTableName('site_content'); $tbldg = $modx->getFullTableName('document_groups'); diff --git a/vendor/.htaccess b/vendor/.htaccess index 83c6d382..ff2beb84 100755 --- a/vendor/.htaccess +++ b/vendor/.htaccess @@ -1,2 +1,2 @@ order deny,allow -allow from all +deny from all