aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml18
-rw-r--r--README.md4
-rw-r--r--build/build.xml40
-rw-r--r--build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php (renamed from code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php)0
-rw-r--r--build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc (renamed from code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc)0
-rw-r--r--build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php (renamed from code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php)0
-rw-r--r--build/code_sniffer/phpbb/build.xml (renamed from code_sniffer/phpbb/build.xml)0
-rw-r--r--build/code_sniffer/phpbb/phpbbCodingStandard.php (renamed from code_sniffer/phpbb/phpbbCodingStandard.php)0
-rw-r--r--build/code_sniffer/ruleset-minimum.xml15
-rw-r--r--build/code_sniffer/ruleset-php-legacy.xml44
-rw-r--r--build/code_sniffer/ruleset-php-strict.xml51
-rw-r--r--phpBB/adm/images/corners_left.gifbin796 -> 0 bytes
-rw-r--r--phpBB/adm/images/corners_left2.gifbin55 -> 0 bytes
-rw-r--r--phpBB/adm/images/corners_right.gifbin175 -> 0 bytes
-rw-r--r--phpBB/adm/images/corners_right2.gifbin56 -> 0 bytes
-rw-r--r--phpBB/adm/images/loading.gifbin0 -> 1320 bytes
-rw-r--r--phpBB/adm/images/toggle.gifbin788 -> 0 bytes
-rw-r--r--phpBB/adm/style/acp_attachments.html14
-rw-r--r--phpBB/adm/style/acp_avatar_options_local.html20
-rw-r--r--phpBB/adm/style/acp_bbcodes.html4
-rw-r--r--phpBB/adm/style/acp_bots.html2
-rw-r--r--phpBB/adm/style/acp_ext_delete_data.html (renamed from phpBB/adm/style/acp_ext_purge.html)16
-rw-r--r--phpBB/adm/style/acp_ext_disable.html14
-rw-r--r--phpBB/adm/style/acp_ext_enable.html16
-rw-r--r--phpBB/adm/style/acp_ext_list.html16
-rw-r--r--phpBB/adm/style/acp_forums.html35
-rw-r--r--phpBB/adm/style/acp_groups.html13
-rw-r--r--phpBB/adm/style/acp_groups_position.html54
-rw-r--r--phpBB/adm/style/acp_icons.html6
-rw-r--r--phpBB/adm/style/acp_inactive.html2
-rw-r--r--phpBB/adm/style/acp_language.html6
-rw-r--r--phpBB/adm/style/acp_logs.html2
-rw-r--r--phpBB/adm/style/acp_main.html12
-rw-r--r--phpBB/adm/style/acp_modules.html23
-rw-r--r--phpBB/adm/style/acp_permission_roles.html6
-rw-r--r--phpBB/adm/style/acp_permissions.html14
-rw-r--r--phpBB/adm/style/acp_profile.html2
-rw-r--r--phpBB/adm/style/acp_prune_forums.html2
-rw-r--r--phpBB/adm/style/acp_ranks.html2
-rw-r--r--phpBB/adm/style/acp_reasons.html2
-rw-r--r--phpBB/adm/style/acp_search.html2
-rw-r--r--phpBB/adm/style/acp_styles.html12
-rw-r--r--phpBB/adm/style/acp_users.html4
-rw-r--r--phpBB/adm/style/acp_users_feedback.html2
-rw-r--r--phpBB/adm/style/acp_users_prefs.html5
-rw-r--r--phpBB/adm/style/acp_users_signature.html64
-rw-r--r--phpBB/adm/style/acp_users_warnings.html2
-rw-r--r--phpBB/adm/style/acp_words.html2
-rw-r--r--phpBB/adm/style/admin.css967
-rw-r--r--phpBB/adm/style/admin.js246
-rw-r--r--phpBB/adm/style/ajax.js79
-rw-r--r--phpBB/adm/style/captcha_qa_acp.html2
-rw-r--r--phpBB/adm/style/colour_swatch.html75
-rw-r--r--phpBB/adm/style/editor.js336
-rw-r--r--phpBB/adm/style/install_convert.html2
-rw-r--r--phpBB/adm/style/install_footer.html11
-rw-r--r--phpBB/adm/style/install_header.html10
-rw-r--r--phpBB/adm/style/install_update.html2
-rw-r--r--phpBB/adm/style/install_update_diff.html10
-rw-r--r--phpBB/adm/style/overall_footer.html12
-rw-r--r--phpBB/adm/style/overall_header.html77
-rw-r--r--phpBB/adm/style/permission_mask.html4
-rw-r--r--phpBB/adm/style/permission_roles_mask.html2
-rw-r--r--phpBB/adm/style/permission_trace.html2
-rw-r--r--phpBB/adm/swatch.php50
-rw-r--r--phpBB/assets/javascript/core.js286
-rw-r--r--phpBB/assets/javascript/editor.js (renamed from phpBB/styles/prosilver/template/editor.js)57
-rwxr-xr-xphpBB/bin/phpbbcli.php36
-rw-r--r--phpBB/composer.json4
-rw-r--r--phpBB/composer.lock127
-rw-r--r--phpBB/config/console.yml35
-rw-r--r--phpBB/config/notifications.yml20
-rw-r--r--phpBB/config/services.yml12
-rw-r--r--phpBB/develop/export_events_for_wiki.php307
-rw-r--r--phpBB/develop/extensions.php129
-rw-r--r--phpBB/docs/CHANGELOG.html121
-rw-r--r--phpBB/docs/events.md122
-rw-r--r--phpBB/download/file.php2
-rw-r--r--phpBB/includes/acp/acp_attachments.php1
-rw-r--r--phpBB/includes/acp/acp_bbcodes.php5
-rw-r--r--phpBB/includes/acp/acp_board.php4
-rw-r--r--phpBB/includes/acp/acp_database.php31
-rw-r--r--phpBB/includes/acp/acp_extensions.php50
-rw-r--r--phpBB/includes/acp/acp_forums.php2
-rw-r--r--phpBB/includes/acp/acp_groups.php3
-rw-r--r--phpBB/includes/acp/acp_icons.php3
-rw-r--r--phpBB/includes/acp/acp_styles.php6
-rw-r--r--phpBB/includes/acp/acp_users.php12
-rw-r--r--phpBB/includes/acp/auth.php6
-rw-r--r--phpBB/includes/captcha/captcha_gd.php15
-rw-r--r--phpBB/includes/captcha/captcha_gd_wave.php6
-rw-r--r--phpBB/includes/constants.php2
-rw-r--r--phpBB/includes/functions.php29
-rw-r--r--phpBB/includes/functions_acp.php3
-rw-r--r--phpBB/includes/functions_compress.php12
-rw-r--r--phpBB/includes/functions_content.php12
-rw-r--r--phpBB/includes/functions_convert.php43
-rw-r--r--phpBB/includes/functions_display.php4
-rw-r--r--phpBB/includes/functions_install.php48
-rw-r--r--phpBB/includes/functions_messenger.php2
-rw-r--r--phpBB/includes/ucp/info/ucp_pm.php1
-rw-r--r--phpBB/includes/ucp/ucp_activate.php5
-rw-r--r--phpBB/includes/ucp/ucp_groups.php3
-rw-r--r--phpBB/includes/ucp/ucp_notifications.php16
-rw-r--r--phpBB/includes/ucp/ucp_pm.php27
-rw-r--r--phpBB/includes/ucp/ucp_pm_viewfolder.php2
-rw-r--r--phpBB/includes/ucp/ucp_profile.php2
-rw-r--r--phpBB/includes/ucp/ucp_register.php43
-rw-r--r--phpBB/includes/ucp/ucp_zebra.php2
-rw-r--r--phpBB/install/convertors/convert_phpbb20.php30
-rw-r--r--phpBB/install/convertors/functions_phpbb20.php105
-rw-r--r--phpBB/install/index.php2
-rw-r--r--phpBB/install/install_convert.php14
-rw-r--r--phpBB/install/install_update.php2
-rw-r--r--phpBB/install/schemas/schema_data.sql4
-rw-r--r--phpBB/language/en/acp/extensions.php46
-rw-r--r--phpBB/language/en/common.php442
-rw-r--r--phpBB/language/en/email/topic_notify.txt3
-rw-r--r--phpBB/language/en/ucp.php5
-rw-r--r--phpBB/phpbb/auth/auth.php8
-rw-r--r--phpBB/phpbb/auth/provider/apache.php8
-rw-r--r--phpBB/phpbb/auth/provider/base.php8
-rw-r--r--phpBB/phpbb/auth/provider/db.php8
-rw-r--r--phpBB/phpbb/auth/provider/ldap.php9
-rw-r--r--phpBB/phpbb/auth/provider/oauth/oauth.php20
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/base.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/bitly.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/exception.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/facebook.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/google.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/service/service_interface.php8
-rw-r--r--phpBB/phpbb/auth/provider/oauth/token_storage.php12
-rw-r--r--phpBB/phpbb/auth/provider/provider_interface.php8
-rw-r--r--phpBB/phpbb/avatar/driver/driver.php8
-rw-r--r--phpBB/phpbb/avatar/driver/driver_interface.php8
-rw-r--r--phpBB/phpbb/avatar/driver/gravatar.php8
-rw-r--r--phpBB/phpbb/avatar/driver/local.php8
-rw-r--r--phpBB/phpbb/avatar/driver/remote.php39
-rw-r--r--phpBB/phpbb/avatar/driver/upload.php8
-rw-r--r--phpBB/phpbb/avatar/manager.php76
-rw-r--r--phpBB/phpbb/cache/driver/apc.php8
-rw-r--r--phpBB/phpbb/cache/driver/base.php8
-rw-r--r--phpBB/phpbb/cache/driver/driver_interface.php8
-rw-r--r--phpBB/phpbb/cache/driver/eaccelerator.php8
-rw-r--r--phpBB/phpbb/cache/driver/file.php8
-rw-r--r--phpBB/phpbb/cache/driver/memcache.php8
-rw-r--r--phpBB/phpbb/cache/driver/memory.php8
-rw-r--r--phpBB/phpbb/cache/driver/null.php8
-rw-r--r--phpBB/phpbb/cache/driver/redis.php8
-rw-r--r--phpBB/phpbb/cache/driver/wincache.php8
-rw-r--r--phpBB/phpbb/cache/driver/xcache.php8
-rw-r--r--phpBB/phpbb/cache/service.php8
-rw-r--r--phpBB/phpbb/class_loader.php10
-rw-r--r--phpBB/phpbb/config/config.php8
-rw-r--r--phpBB/phpbb/config/db.php8
-rw-r--r--phpBB/phpbb/config/db_text.php8
-rw-r--r--phpBB/phpbb/console/application.php23
-rw-r--r--phpBB/phpbb/console/command/command.php14
-rw-r--r--phpBB/phpbb/console/command/extension/command.php22
-rw-r--r--phpBB/phpbb/console/command/extension/disable.php47
-rw-r--r--phpBB/phpbb/console/command/extension/enable.php47
-rw-r--r--phpBB/phpbb/console/command/extension/purge.php47
-rw-r--r--phpBB/phpbb/console/command/extension/show.php58
-rw-r--r--phpBB/phpbb/console/command/fixup/recalculate_email_hash.php71
-rw-r--r--phpBB/phpbb/content_visibility.php8
-rw-r--r--phpBB/phpbb/controller/exception.php8
-rw-r--r--phpBB/phpbb/controller/helper.php8
-rw-r--r--phpBB/phpbb/controller/provider.php8
-rw-r--r--phpBB/phpbb/controller/resolver.php8
-rw-r--r--phpBB/phpbb/cron/manager.php8
-rw-r--r--phpBB/phpbb/cron/task/base.php8
-rw-r--r--phpBB/phpbb/cron/task/core/prune_all_forums.php8
-rw-r--r--phpBB/phpbb/cron/task/core/prune_forum.php8
-rw-r--r--phpBB/phpbb/cron/task/core/prune_notifications.php8
-rw-r--r--phpBB/phpbb/cron/task/core/queue.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_cache.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_database.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_plupload.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_search.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_sessions.php8
-rw-r--r--phpBB/phpbb/cron/task/core/tidy_warnings.php8
-rw-r--r--phpBB/phpbb/cron/task/parametrized.php8
-rw-r--r--phpBB/phpbb/cron/task/task.php8
-rw-r--r--phpBB/phpbb/cron/task/wrapper.php8
-rw-r--r--phpBB/phpbb/datetime.php4
-rw-r--r--phpBB/phpbb/db/driver/driver.php12
-rw-r--r--phpBB/phpbb/db/driver/firebird.php8
-rw-r--r--phpBB/phpbb/db/driver/mssql.php10
-rw-r--r--phpBB/phpbb/db/driver/mssql_base.php8
-rw-r--r--phpBB/phpbb/db/driver/mssql_odbc.php8
-rw-r--r--phpBB/phpbb/db/driver/mssqlnative.php181
-rw-r--r--phpBB/phpbb/db/driver/mysql.php8
-rw-r--r--phpBB/phpbb/db/driver/mysql_base.php8
-rw-r--r--phpBB/phpbb/db/driver/mysqli.php16
-rw-r--r--phpBB/phpbb/db/driver/oracle.php8
-rw-r--r--phpBB/phpbb/db/driver/postgres.php14
-rw-r--r--phpBB/phpbb/db/driver/sqlite.php8
-rw-r--r--phpBB/phpbb/db/migration/data/v310/alpha2.php28
-rw-r--r--phpBB/phpbb/db/migration/data/v310/notifications.php2
-rw-r--r--phpBB/phpbb/db/migration/data/v310/notifications_cron_p2.php27
-rw-r--r--phpBB/phpbb/db/migration/data/v310/notifications_schema_fix.php6
-rw-r--r--phpBB/phpbb/db/migration/data/v310/softdelete_p2.php6
-rw-r--r--phpBB/phpbb/db/migration/data/v310/style_update_p2.php24
-rw-r--r--phpBB/phpbb/db/migration/data/v310/teampage.php2
-rw-r--r--phpBB/phpbb/db/migration/data/v310/ucp_popuppm_module.php42
-rw-r--r--phpBB/phpbb/db/migration/exception.php8
-rw-r--r--phpBB/phpbb/db/migration/migration.php8
-rw-r--r--phpBB/phpbb/db/migration/tool/config.php4
-rw-r--r--phpBB/phpbb/db/migrator.php14
-rw-r--r--phpBB/phpbb/db/sql_insert_buffer.php8
-rw-r--r--phpBB/phpbb/db/tools.php10
-rw-r--r--phpBB/phpbb/di/extension/config.php10
-rw-r--r--phpBB/phpbb/di/extension/core.php8
-rw-r--r--phpBB/phpbb/di/extension/ext.php8
-rw-r--r--phpBB/phpbb/di/pass/collection_pass.php8
-rw-r--r--phpBB/phpbb/di/pass/kernel_pass.php8
-rw-r--r--phpBB/phpbb/di/service_collection.php8
-rw-r--r--phpBB/phpbb/error_collector.php8
-rw-r--r--phpBB/phpbb/event/data.php100
-rw-r--r--phpBB/phpbb/event/dispatcher.php8
-rw-r--r--phpBB/phpbb/event/extension_subscriber_loader.php28
-rw-r--r--phpBB/phpbb/event/kernel_exception_subscriber.php9
-rw-r--r--phpBB/phpbb/event/kernel_request_subscriber.php8
-rw-r--r--phpBB/phpbb/event/kernel_terminate_subscriber.php8
-rw-r--r--phpBB/phpbb/extension/base.php8
-rw-r--r--phpBB/phpbb/extension/exception.php8
-rw-r--r--phpBB/phpbb/extension/extension_interface.php8
-rw-r--r--phpBB/phpbb/extension/finder.php8
-rw-r--r--phpBB/phpbb/extension/manager.php14
-rw-r--r--phpBB/phpbb/extension/metadata_manager.php72
-rw-r--r--phpBB/phpbb/extension/provider.php8
-rw-r--r--phpBB/phpbb/feed/base.php10
-rw-r--r--phpBB/phpbb/feed/factory.php8
-rw-r--r--phpBB/phpbb/feed/forum.php8
-rw-r--r--phpBB/phpbb/feed/forums.php8
-rw-r--r--phpBB/phpbb/feed/helper.php8
-rw-r--r--phpBB/phpbb/feed/news.php8
-rw-r--r--phpBB/phpbb/feed/overall.php8
-rw-r--r--phpBB/phpbb/feed/post_base.php8
-rw-r--r--phpBB/phpbb/feed/topic.php8
-rw-r--r--phpBB/phpbb/feed/topic_base.php8
-rw-r--r--phpBB/phpbb/feed/topics.php8
-rw-r--r--phpBB/phpbb/feed/topics_active.php8
-rw-r--r--phpBB/phpbb/filesystem.php8
-rw-r--r--phpBB/phpbb/groupposition/exception.php8
-rw-r--r--phpBB/phpbb/groupposition/groupposition_interface.php8
-rw-r--r--phpBB/phpbb/groupposition/legend.php8
-rw-r--r--phpBB/phpbb/groupposition/teampage.php8
-rw-r--r--phpBB/phpbb/hook/finder.php8
-rw-r--r--phpBB/phpbb/json_response.php8
-rw-r--r--phpBB/phpbb/lock/db.php8
-rw-r--r--phpBB/phpbb/lock/flock.php8
-rw-r--r--phpBB/phpbb/log/log.php8
-rw-r--r--phpBB/phpbb/log/log_interface.php8
-rw-r--r--phpBB/phpbb/log/null.php8
-rw-r--r--phpBB/phpbb/notification/exception.php8
-rw-r--r--phpBB/phpbb/notification/manager.php23
-rw-r--r--phpBB/phpbb/notification/method/base.php8
-rw-r--r--phpBB/phpbb/notification/method/email.php8
-rw-r--r--phpBB/phpbb/notification/method/jabber.php8
-rw-r--r--phpBB/phpbb/notification/method/messenger_base.php8
-rw-r--r--phpBB/phpbb/notification/method/method_interface.php8
-rw-r--r--phpBB/phpbb/notification/type/admin_activate_user.php166
-rw-r--r--phpBB/phpbb/notification/type/approve_post.php8
-rw-r--r--phpBB/phpbb/notification/type/approve_topic.php10
-rw-r--r--phpBB/phpbb/notification/type/base.php8
-rw-r--r--phpBB/phpbb/notification/type/bookmark.php8
-rw-r--r--phpBB/phpbb/notification/type/disapprove_post.php8
-rw-r--r--phpBB/phpbb/notification/type/disapprove_topic.php8
-rw-r--r--phpBB/phpbb/notification/type/group_request.php8
-rw-r--r--phpBB/phpbb/notification/type/group_request_approved.php8
-rw-r--r--phpBB/phpbb/notification/type/pm.php8
-rw-r--r--phpBB/phpbb/notification/type/post.php43
-rw-r--r--phpBB/phpbb/notification/type/post_in_queue.php8
-rw-r--r--phpBB/phpbb/notification/type/quote.php8
-rw-r--r--phpBB/phpbb/notification/type/report_pm.php8
-rw-r--r--phpBB/phpbb/notification/type/report_pm_closed.php8
-rw-r--r--phpBB/phpbb/notification/type/report_post.php8
-rw-r--r--phpBB/phpbb/notification/type/report_post_closed.php8
-rw-r--r--phpBB/phpbb/notification/type/topic.php8
-rw-r--r--phpBB/phpbb/notification/type/topic_in_queue.php8
-rw-r--r--phpBB/phpbb/notification/type/type_interface.php8
-rw-r--r--phpBB/phpbb/path_helper.php8
-rw-r--r--phpBB/phpbb/permissions.php8
-rw-r--r--phpBB/phpbb/php/ini.php8
-rw-r--r--phpBB/phpbb/plupload/plupload.php8
-rw-r--r--phpBB/phpbb/request/deactivated_super_global.php8
-rw-r--r--phpBB/phpbb/request/request.php8
-rw-r--r--phpBB/phpbb/request/request_interface.php8
-rw-r--r--phpBB/phpbb/request/type_cast_helper.php8
-rw-r--r--phpBB/phpbb/request/type_cast_helper_interface.php8
-rw-r--r--phpBB/phpbb/search/base.php8
-rw-r--r--phpBB/phpbb/search/fulltext_mysql.php8
-rw-r--r--phpBB/phpbb/search/fulltext_native.php17
-rw-r--r--phpBB/phpbb/search/fulltext_postgres.php8
-rw-r--r--phpBB/phpbb/search/fulltext_sphinx.php10
-rw-r--r--phpBB/phpbb/search/sphinx/config.php8
-rw-r--r--phpBB/phpbb/search/sphinx/config_comment.php8
-rw-r--r--phpBB/phpbb/search/sphinx/config_section.php8
-rw-r--r--phpBB/phpbb/search/sphinx/config_variable.php8
-rw-r--r--phpBB/phpbb/session.php9
-rw-r--r--phpBB/phpbb/symfony_request.php8
-rw-r--r--phpBB/phpbb/template/asset.php8
-rw-r--r--phpBB/phpbb/template/base.php8
-rw-r--r--phpBB/phpbb/template/context.php12
-rw-r--r--phpBB/phpbb/template/template.php8
-rw-r--r--phpBB/phpbb/template/twig/definition.php8
-rw-r--r--phpBB/phpbb/template/twig/environment.php8
-rw-r--r--phpBB/phpbb/template/twig/extension.php82
-rw-r--r--phpBB/phpbb/template/twig/lexer.php66
-rw-r--r--phpBB/phpbb/template/twig/loader.php8
-rw-r--r--phpBB/phpbb/template/twig/node/definenode.php8
-rw-r--r--phpBB/phpbb/template/twig/node/event.php18
-rw-r--r--phpBB/phpbb/template/twig/node/expression/binary/equalequal.php8
-rw-r--r--phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php8
-rw-r--r--phpBB/phpbb/template/twig/node/includenode.php8
-rw-r--r--phpBB/phpbb/template/twig/node/includephp.php10
-rw-r--r--phpBB/phpbb/template/twig/node/php.php8
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/defineparser.php15
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/event.php8
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/includejs.php8
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/includeparser.php8
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/includephp.php10
-rw-r--r--phpBB/phpbb/template/twig/tokenparser/php.php10
-rw-r--r--phpBB/phpbb/template/twig/twig.php8
-rw-r--r--phpBB/phpbb/tree/nestedset.php8
-rw-r--r--phpBB/phpbb/tree/nestedset_forum.php8
-rw-r--r--phpBB/phpbb/tree/tree_interface.php8
-rw-r--r--phpBB/phpbb/user.php11
-rw-r--r--phpBB/phpbb/user_loader.php7
-rw-r--r--phpBB/posting.php13
-rw-r--r--phpBB/styles/prosilver/style.cfg4
-rw-r--r--phpBB/styles/prosilver/template/confirm_body.html17
-rw-r--r--phpBB/styles/prosilver/template/confirm_delete_body.html40
-rw-r--r--phpBB/styles/prosilver/template/drafts.html21
-rw-r--r--phpBB/styles/prosilver/template/forum_fn.js792
-rw-r--r--phpBB/styles/prosilver/template/forumlist_body.html10
-rw-r--r--phpBB/styles/prosilver/template/index_body.html8
-rw-r--r--phpBB/styles/prosilver/template/mcp_forum.html13
-rw-r--r--phpBB/styles/prosilver/template/mcp_front.html8
-rw-r--r--phpBB/styles/prosilver/template/mcp_header.html6
-rw-r--r--phpBB/styles/prosilver/template/mcp_logs.html2
-rw-r--r--phpBB/styles/prosilver/template/mcp_notes_user.html2
-rw-r--r--phpBB/styles/prosilver/template/mcp_post.html4
-rw-r--r--phpBB/styles/prosilver/template/mcp_queue.html2
-rw-r--r--phpBB/styles/prosilver/template/mcp_reports.html7
-rw-r--r--phpBB/styles/prosilver/template/mcp_warn_front.html6
-rw-r--r--phpBB/styles/prosilver/template/mcp_warn_list.html2
-rw-r--r--phpBB/styles/prosilver/template/memberlist_body.html7
-rw-r--r--phpBB/styles/prosilver/template/memberlist_leaders.html2
-rw-r--r--phpBB/styles/prosilver/template/overall_footer.html23
-rw-r--r--phpBB/styles/prosilver/template/overall_header.html94
-rw-r--r--phpBB/styles/prosilver/template/posting_buttons.html6
-rw-r--r--phpBB/styles/prosilver/template/posting_editor.html8
-rw-r--r--phpBB/styles/prosilver/template/posting_smilies.html2
-rw-r--r--phpBB/styles/prosilver/template/search_body.html2
-rw-r--r--phpBB/styles/prosilver/template/search_results.html3
-rw-r--r--phpBB/styles/prosilver/template/simple_header.html2
-rw-r--r--phpBB/styles/prosilver/template/ucp_attachments.html2
-rw-r--r--phpBB/styles/prosilver/template/ucp_auth_link_oauth.html2
-rw-r--r--phpBB/styles/prosilver/template/ucp_groups_manage.html17
-rw-r--r--phpBB/styles/prosilver/template/ucp_main_bookmarks.html10
-rw-r--r--phpBB/styles/prosilver/template/ucp_main_drafts.html4
-rw-r--r--phpBB/styles/prosilver/template/ucp_main_front.html9
-rwxr-xr-xphpBB/styles/prosilver/template/ucp_main_subscribed.html21
-rw-r--r--phpBB/styles/prosilver/template/ucp_notifications.html2
-rw-r--r--phpBB/styles/prosilver/template/ucp_pm_popup.html25
-rw-r--r--phpBB/styles/prosilver/template/ucp_pm_viewfolder.html5
-rw-r--r--phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html2
-rw-r--r--phpBB/styles/prosilver/template/viewforum_body.html20
-rw-r--r--phpBB/styles/prosilver/template/viewonline_body.html2
-rw-r--r--phpBB/styles/prosilver/template/viewtopic_body.html9
-rw-r--r--phpBB/styles/prosilver/theme/bidi.css14
-rw-r--r--phpBB/styles/prosilver/theme/buttons.css18
-rw-r--r--phpBB/styles/prosilver/theme/colours.css47
-rw-r--r--phpBB/styles/prosilver/theme/common.css209
-rw-r--r--phpBB/styles/prosilver/theme/content.css6
-rw-r--r--phpBB/styles/prosilver/theme/cp.css89
-rw-r--r--phpBB/styles/prosilver/theme/forms.css17
-rw-r--r--phpBB/styles/prosilver/theme/images/icon_post_menu.pngbin1844 -> 1931 bytes
-rw-r--r--phpBB/styles/prosilver/theme/images/loading.gifbin0 -> 1320 bytes
-rw-r--r--phpBB/styles/prosilver/theme/links.css6
-rw-r--r--phpBB/styles/prosilver/theme/responsive.css135
-rw-r--r--phpBB/styles/subsilver2/style.cfg4
-rw-r--r--phpBB/styles/subsilver2/template/editor.js385
-rw-r--r--phpBB/styles/subsilver2/template/index_body.html4
-rw-r--r--phpBB/styles/subsilver2/template/mcp_header.html4
-rw-r--r--phpBB/styles/subsilver2/template/overall_footer.html2
-rw-r--r--phpBB/styles/subsilver2/template/overall_header.html1
-rw-r--r--phpBB/styles/subsilver2/template/posting_body.html16
-rw-r--r--phpBB/styles/subsilver2/template/posting_buttons.html4
-rw-r--r--phpBB/styles/subsilver2/template/posting_smilies.html2
-rw-r--r--phpBB/styles/subsilver2/template/ucp_auth_link_oauth.html2
-rw-r--r--phpBB/styles/subsilver2/template/ucp_groups_manage.html6
-rw-r--r--phpBB/styles/subsilver2/template/ucp_main_drafts.html7
-rw-r--r--phpBB/styles/subsilver2/template/ucp_pm_popup.html37
-rw-r--r--phpBB/styles/subsilver2/template/ucp_profile_signature.html7
-rw-r--r--phpBB/styles/subsilver2/template/viewforum_body.html2
-rw-r--r--phpBB/styles/subsilver2/template/viewtopic_body.html2
-rw-r--r--phpBB/styles/subsilver2/theme/stylesheet.css9
-rw-r--r--phpBB/viewonline.php9
-rw-r--r--phpBB/viewtopic.php62
-rw-r--r--tests/avatar/manager_test.php72
-rw-r--r--tests/dbal/migrator_tool_config_test.php91
-rw-r--r--tests/functional/avatar_acp_groups_test.php9
-rw-r--r--tests/functional/extension_acp_test.php171
-rw-r--r--tests/functional/extension_controller_test.php2
-rw-r--r--tests/functional/extension_global_lang_test.php3
-rw-r--r--tests/functional/extension_permission_lang_test.php3
-rw-r--r--tests/functional/fixtures/ext/foo/bar/composer.json2
-rw-r--r--tests/functional/fixtures/ext/foo/bar/config/services.yml9
-rw-r--r--tests/functional/fixtures/ext/foo/bar/event/permission.php9
-rw-r--r--tests/functional/fixtures/ext/foo/bar/event/user_setup.php9
-rw-r--r--tests/functional/notification_test.php33
-rw-r--r--tests/functions_install/ignore_new_file_on_update_test.php41
-rw-r--r--tests/notification/base.php1
-rw-r--r--tests/notification/submit_post_base.php2
-rw-r--r--tests/template/template_test.php10
-rw-r--r--tests/template/templates/define.html6
-rw-r--r--tests/template/templates/define_error.html2
-rw-r--r--tests/test_framework/phpbb_functional_test_case.php26
-rwxr-xr-xtravis/setup-mariadb.sh23
-rwxr-xr-xtravis/setup-webserver.sh5
423 files changed, 5718 insertions, 4806 deletions
diff --git a/.travis.yml b/.travis.yml
index a5c27632b4..bbca989254 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,18 +10,26 @@ env:
- DB=mysql
- DB=postgres
-before_script:
- - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres; fi"
- - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database phpbb_tests;' -U postgres; fi"
+services:
+ - redis-server
+
+install:
- sh -c "if [ '$DB' = 'mariadb' ]; then travis/setup-mariadb.sh; fi"
- - sh -c "if [ '$DB' = 'mysql' -o '$DB' = 'mariadb' ]; then mysql -e 'create database IF NOT EXISTS phpbb_tests;'; fi"
+ - sh -c "if [ `php -r "echo (int) version_compare(PHP_VERSION, '5.3.19', '>=');"` = "1" ]; then travis/setup-webserver.sh; fi"
- travis/install-php-extensions.sh
- cd phpBB
- php ../composer.phar install --dev --no-interaction --prefer-source
- cd ..
- - sh -c "if [ `php -r "echo (int) version_compare(PHP_VERSION, '5.3.19', '>=');"` = "1" ]; then travis/setup-webserver.sh; fi"
+
+before_script:
+ - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres; fi"
+ - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database phpbb_tests;' -U postgres; fi"
+ - sh -c "if [ '$DB' = 'mysql' -o '$DB' = 'mariadb' ]; then mysql -e 'create database IF NOT EXISTS phpbb_tests;'; fi"
script:
+ - cd build
+ - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.5' -a '$DB' = 'mysql' ]; then ../phpBB/vendor/bin/phing sniff; fi"
+ - cd ..
- phpBB/vendor/bin/phpunit --configuration travis/phpunit-$DB-travis.xml
notifications:
diff --git a/README.md b/README.md
index 78aa306bed..4b52c1cb33 100644
--- a/README.md
+++ b/README.md
@@ -26,8 +26,8 @@ To be able to run an installation from the repo (and not from a pre-built packag
## AUTOMATED TESTING
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](http://bamboo.phpbb.com) or check our travis build below.
-develop - [![Build Status](https://secure.travis-ci.org/phpbb/phpbb3.png?branch=develop)](http://travis-ci.org/phpbb/phpbb3)
-develop-olympus - [![Build Status](https://secure.travis-ci.org/phpbb/phpbb3.png?branch=develop-olympus)](http://travis-ci.org/phpbb/phpbb3)
+develop - [![Build Status](https://secure.travis-ci.org/phpbb/phpbb.png?branch=develop)](http://travis-ci.org/phpbb/phpbb)
+develop-olympus - [![Build Status](https://secure.travis-ci.org/phpbb/phpbb.png?branch=develop-olympus)](http://travis-ci.org/phpbb/phpbb)
## LICENSE
diff --git a/build/build.xml b/build/build.xml
index 82bb979a02..ebc1f0be8b 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -2,9 +2,9 @@
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
<!-- a few settings for the build -->
- <property name="newversion" value="3.1.0-a1" />
- <property name="prevversion" value="3.0.12" />
- <property name="olderversions" value="3.0.11" />
+ <property name="newversion" value="3.1.0-a2" />
+ <property name="prevversion" value="3.1.0-a1" />
+ <property name="olderversions" value="3.0.12" />
<!-- no configuration should be needed beyond this point -->
<property name="oldversions" value="${olderversions}, ${prevversion}" />
@@ -74,6 +74,40 @@
passthru="true" />
</target>
+ <target name="sniff">
+ <exec command="phpBB/vendor/bin/phpcs
+ -s
+ --extensions=php
+ --standard=build/code_sniffer/ruleset-php-strict.xml
+ --ignore=phpBB/phpbb/db/migration/data/v30x/*
+ phpBB/phpbb"
+ dir="." returnProperty="retval-php-strict" passthru="true" />
+ <exec command="phpBB/vendor/bin/phpcs
+ -s
+ --extensions=php
+ --standard=build/code_sniffer/ruleset-php-legacy.xml
+ --ignore=phpBB/cache/*
+ --ignore=phpBB/develop/*
+ --ignore=phpBB/includes/diff/*.php
+ --ignore=phpBB/includes/sphinxapi.php
+ --ignore=phpBB/includes/utf/data/*
+ --ignore=phpBB/install/data/*
+ --ignore=phpBB/install/database_update.php
+ --ignore=phpBB/phpbb/*
+ --ignore=phpBB/vendor/*
+ phpBB"
+ dir="." returnProperty="retval-php-legacy" passthru="true" />
+ <if>
+ <or>
+ <not><equals arg1="${retval-php-strict}" arg2="0" /></not>
+ <not><equals arg1="${retval-php-legacy}" arg2="0" /></not>
+ </or>
+ <then>
+ <fail message="PHP Code Sniffer failed." />
+ </then>
+ </if>
+ </target>
+
<target name="docs">
<!-- only works if you setup phpdoctor:
git clone https://github.com/peej/phpdoctor.git
diff --git a/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
index 68e9e6bb86..68e9e6bb86 100644
--- a/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
+++ b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php
diff --git a/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc
index 0ace1c1bda..0ace1c1bda 100644
--- a/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc
+++ b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc
diff --git a/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php
index affa27b56c..affa27b56c 100644
--- a/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php
+++ b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php
diff --git a/code_sniffer/phpbb/build.xml b/build/code_sniffer/phpbb/build.xml
index b6d3bf6451..b6d3bf6451 100644
--- a/code_sniffer/phpbb/build.xml
+++ b/build/code_sniffer/phpbb/build.xml
diff --git a/code_sniffer/phpbb/phpbbCodingStandard.php b/build/code_sniffer/phpbb/phpbbCodingStandard.php
index adbba9d915..adbba9d915 100644
--- a/code_sniffer/phpbb/phpbbCodingStandard.php
+++ b/build/code_sniffer/phpbb/phpbbCodingStandard.php
diff --git a/build/code_sniffer/ruleset-minimum.xml b/build/code_sniffer/ruleset-minimum.xml
new file mode 100644
index 0000000000..33d0177390
--- /dev/null
+++ b/build/code_sniffer/ruleset-minimum.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<ruleset name="phpBB Minimum Standard">
+
+ <description>phpBB minimum coding standard</description>
+
+ <!-- All code files MUST use only UTF-8 without BOM. -->
+ <rule ref="Generic.Files.ByteOrderMark" />
+
+ <!-- All code files MUST use the Unix LF (linefeed) line ending. -->
+ <rule ref="Generic.Files.LineEndings" />
+
+ <!-- Tabs MUST be used for indentation -->
+ <rule ref="Generic.WhiteSpace.DisallowSpaceIndent" />
+
+</ruleset>
diff --git a/build/code_sniffer/ruleset-php-legacy.xml b/build/code_sniffer/ruleset-php-legacy.xml
new file mode 100644
index 0000000000..247313441d
--- /dev/null
+++ b/build/code_sniffer/ruleset-php-legacy.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<ruleset name="phpBB PHP Legacy Standard">
+
+ <description>phpBB legacy coding standard for PHP files</description>
+
+ <rule ref="./ruleset-minimum.xml" />
+
+ <!-- "for (; bar; )" should be "while (bar)" instead -->
+ <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" />
+
+ <!-- A method MUST not only call its parent -->
+ <rule ref="Generic.CodeAnalysis.UselessOverridingMethod" />
+
+ <!-- The body of each structure MUST be enclosed by braces. -->
+ <rule ref="Generic.ControlStructures.InlineControlStructure" />
+
+ <!-- There MUST not be more than one statement per line. -->
+ <rule ref="Generic.Formatting.DisallowMultipleStatements" />
+
+ <!-- Call-time pass-by-reference MUST not be used. -->
+ <rule ref="Generic.Functions.CallTimePassByReference.NotAllowed" />
+
+ <!-- Class constants MUST be declared in all upper case with underscore separators. -->
+ <rule ref="Generic.NamingConventions.UpperCaseConstantName" />
+
+ <!-- Only <?php, no short tags. -->
+ <rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound" />
+
+ <!-- Method arguments with default values MUST go at the end of the argument list. -->
+ <rule ref="PEAR.Functions.ValidDefaultValue" />
+
+ <!-- In the argument list, there MUST NOT be a space before each comma,
+ and there MUST be one space after each comma. -->
+ <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing">
+ <properties>
+ <property name="equalsSpacing" value="1"/>
+ </properties>
+ </rule>
+ <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint" />
+
+ <!-- The ?> closing tag MUST be omitted from files containing only PHP. -->
+ <rule ref="Zend.Files.ClosingTag" />
+
+</ruleset>
diff --git a/build/code_sniffer/ruleset-php-strict.xml b/build/code_sniffer/ruleset-php-strict.xml
new file mode 100644
index 0000000000..5e3c26a616
--- /dev/null
+++ b/build/code_sniffer/ruleset-php-strict.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<ruleset name="phpBB PHP Strict Standard">
+
+ <description>phpBB coding standard for PHP files</description>
+
+ <rule ref="./ruleset-php-legacy.xml" />
+
+ <!-- There SHOULD NOT be more than 80 characters per line
+ There MUST NOT be more than 120 characters per line -->
+ <!--
+ <rule ref="Generic.Files.LineLength">
+ <properties>
+ <property name="lineLimit" value="80"/>
+ <property name="absoluteLineLimit" value="120"/>
+ </properties>
+ </rule>
+ -->
+
+ <!-- The PHP constants true, false, and null MUST be in lower case. -->
+ <rule ref="Generic.PHP.LowerCaseConstant" />
+
+ <!-- PHP keywords MUST be in lower case. -->
+ <rule ref="Generic.PHP.LowerCaseKeyword" />
+
+ <!-- There MUST NOT be trailing whitespace at the end of lines. -->
+ <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" />
+
+ <!-- There MUST NOT be whitespace before the first content of a file -->
+ <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile" />
+
+ <!-- There MUST NOT be whitespace after the last content of a file -->
+ <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile" />
+
+ <!-- Functions MUST NOT contain multiple empty lines in a row -->
+ <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines" />
+
+ <!-- Classes etc. MUST be namespaced -->
+ <rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace" />
+
+ <!-- A file MUST not contain more than one class/interface -->
+ <rule ref="PSR1.Classes.ClassDeclaration.MultipleClasses" />
+
+ <!-- Files containing classes MUST not have any side-effects -->
+ <rule ref="PSR1.Files.SideEffects.FoundWithSymbols" />
+
+ <!-- When present, all use declarations MUST go after the namespace declaration.
+ There MUST be one use keyword per declaration.
+ There MUST be one blank line after the use block. -->
+ <rule ref="PSR2.Namespaces.UseDeclaration" />
+
+</ruleset>
diff --git a/phpBB/adm/images/corners_left.gif b/phpBB/adm/images/corners_left.gif
deleted file mode 100644
index bacd276495..0000000000
--- a/phpBB/adm/images/corners_left.gif
+++ /dev/null
Binary files differ
diff --git a/phpBB/adm/images/corners_left2.gif b/phpBB/adm/images/corners_left2.gif
deleted file mode 100644
index 206e50368d..0000000000
--- a/phpBB/adm/images/corners_left2.gif
+++ /dev/null
Binary files differ
diff --git a/phpBB/adm/images/corners_right.gif b/phpBB/adm/images/corners_right.gif
deleted file mode 100644
index bcb5bd7d14..0000000000
--- a/phpBB/adm/images/corners_right.gif
+++ /dev/null
Binary files differ
diff --git a/phpBB/adm/images/corners_right2.gif b/phpBB/adm/images/corners_right2.gif
deleted file mode 100644
index 0ba66d50b2..0000000000
--- a/phpBB/adm/images/corners_right2.gif
+++ /dev/null
Binary files differ
diff --git a/phpBB/adm/images/loading.gif b/phpBB/adm/images/loading.gif
new file mode 100644
index 0000000000..e1ed0883e0
--- /dev/null
+++ b/phpBB/adm/images/loading.gif
Binary files differ
diff --git a/phpBB/adm/images/toggle.gif b/phpBB/adm/images/toggle.gif
deleted file mode 100644
index 8af6861bd1..0000000000
--- a/phpBB/adm/images/toggle.gif
+++ /dev/null
Binary files differ
diff --git a/phpBB/adm/style/acp_attachments.html b/phpBB/adm/style/acp_attachments.html
index c7b451e68b..9ce9fb5f13 100644
--- a/phpBB/adm/style/acp_attachments.html
+++ b/phpBB/adm/style/acp_attachments.html
@@ -122,11 +122,11 @@
{
if (newimage == 'no_image')
{
- document.getElementById('image_upload_icon').src = "{PHPBB_ROOT_PATH}images/spacer.gif";
+ document.getElementById('image_upload_icon').src = "{ROOT_PATH}images/spacer.gif";
}
else
{
- document.getElementById('image_upload_icon').src = "{PHPBB_ROOT_PATH}{IMG_PATH}/" + newimage;
+ document.getElementById('image_upload_icon').src = "{ROOT_PATH}{IMG_PATH}/" + newimage;
}
}
@@ -192,7 +192,7 @@
<dd><select name="upload_icon" id="upload_icon" onchange="update_image(this.options[selectedIndex].value);">
<option value="no_image"<!-- IF S_NO_IMAGE --> selected="selected"<!-- ENDIF -->>{L_NO_IMAGE}</option>{S_FILENAME_LIST}
</select></dd>
- <dd>&nbsp;<img <!-- IF S_NO_IMAGE -->src="{PHPBB_ROOT_PATH}images/spacer.gif"<!-- ELSE -->src="{UPLOAD_ICON_SRC}"<!-- ENDIF --> id="image_upload_icon" alt="" title="" />&nbsp;</dd>
+ <dd>&nbsp;<img <!-- IF S_NO_IMAGE -->src="{ROOT_PATH}images/spacer.gif"<!-- ELSE -->src="{UPLOAD_ICON_SRC}"<!-- ENDIF --> id="image_upload_icon" alt="" title="" />&nbsp;</dd>
</dl>
<dl>
<dt><label for="extgroup_filesize">{L_MAX_EXTGROUP_FILESIZE}{L_COLON}</label></dt>
@@ -224,7 +224,7 @@
<fieldset class="tabulated">
<legend>{L_TITLE}</legend>
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" /><col class="row1" /><col class="row2" />
<thead>
<tr>
@@ -291,7 +291,7 @@
<fieldset class="tabulated">
<legend>{L_TITLE}</legend>
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" /><col class="row1" /><col class="row2" />
<thead>
<tr>
@@ -331,7 +331,7 @@
<fieldset class="tabulated">
<legend>{L_TITLE}</legend>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_FILENAME}</th>
@@ -389,7 +389,7 @@
<!-- ENDIF -->
</div>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_FILENAME}</th>
diff --git a/phpBB/adm/style/acp_avatar_options_local.html b/phpBB/adm/style/acp_avatar_options_local.html
index 148efd051b..0cdb3644d7 100644
--- a/phpBB/adm/style/acp_avatar_options_local.html
+++ b/phpBB/adm/style/acp_avatar_options_local.html
@@ -8,18 +8,14 @@
</select>&nbsp;<input type="submit" value="{L_GO}" name="avatar_local_go" class="button2" /></dd>
</dl>
<!-- IF AVATAR_LOCAL_SHOW -->
- <table>
+ <ul id="gallery">
<!-- BEGIN avatar_local_row -->
- <tr>
- <!-- BEGIN avatar_local_col -->
- <td class="row1" style="text-align: center;"><img src="{avatar_local_row.avatar_local_col.AVATAR_IMAGE}" alt="{avatar_local_row.avatar_local_col.AVATAR_NAME}" title="{avatar_local_row.avatar_local_col.AVATAR_NAME}"/></td>
- <!-- END avatar_local_col -->
- </tr>
- <tr>
- <!-- BEGIN avatar_local_option -->
- <td class="row2" style="text-align: center;"><input type="radio" name="avatar_local_file" id="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_option.S_ROW_COUNT}" value="{avatar_local_row.avatar_local_option.AVATAR_FILE}" /></td>
- <!-- END avatar_local_option -->
- </tr>
+ <!-- BEGIN avatar_local_col -->
+ <li>
+ <label for="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_col.S_ROW_COUNT}"><img src="{avatar_local_row.avatar_local_col.AVATAR_IMAGE}" alt="" /><br />
+ <input type="radio" name="avatar_local_file" id="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_col.S_ROW_COUNT}" value="{avatar_local_row.avatar_local_col.AVATAR_FILE}" /></label>
+ </li>
+ <!-- END avatar_local_col -->
<!-- END avatar_local_row -->
- </table>
+ </ul>
<!-- ENDIF -->
diff --git a/phpBB/adm/style/acp_bbcodes.html b/phpBB/adm/style/acp_bbcodes.html
index 5939af24ae..c22ed395e7 100644
--- a/phpBB/adm/style/acp_bbcodes.html
+++ b/phpBB/adm/style/acp_bbcodes.html
@@ -56,7 +56,7 @@
<br />
- <table cellspacing="1" id="down">
+ <table class="table1" id="down">
<thead>
<tr>
<th colspan="2">{L_TOKENS}</th>
@@ -90,7 +90,7 @@
<fieldset class="tabulated">
<legend>{L_ACP_BBCODES}</legend>
- <table cellspacing="1" id="down">
+ <table class="table1" id="down">
<thead>
<tr>
<th>{L_BBCODE_TAG}</th>
diff --git a/phpBB/adm/style/acp_bots.html b/phpBB/adm/style/acp_bots.html
index cdd0fd4a93..eeda13303d 100644
--- a/phpBB/adm/style/acp_bots.html
+++ b/phpBB/adm/style/acp_bots.html
@@ -62,7 +62,7 @@
<form id="acp_bots" method="post" action="{U_ACTION}">
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_BOT_NAME}</th>
diff --git a/phpBB/adm/style/acp_ext_purge.html b/phpBB/adm/style/acp_ext_delete_data.html
index 94bef82ca5..5b38d9b8d0 100644
--- a/phpBB/adm/style/acp_ext_purge.html
+++ b/phpBB/adm/style/acp_ext_delete_data.html
@@ -5,35 +5,35 @@
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
- <p>{L_PURGE_EXPLAIN}</p>
+ <p>{L_EXTENSION_DELETE_DATA_EXPLAIN}</p>
<!-- IF MIGRATOR_ERROR -->
<div class="errorbox">
<p><strong>{L_MIGRATION_EXCEPTION_ERROR}</strong></p>
<p>{MIGRATOR_ERROR}</p>
- <p><a href="{U_RETURN}">{L_RETURN}</a></p>
+ <p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ELSEIF PRE -->
<div class="errorbox">
- <p>{L_PURGE_CONFIRM}</p>
+ <p>{L_CONFIRM_MESSAGE}</p>
</div>
<form id="acp_extensions" method="post" action="{U_PURGE}">
<fieldset class="submit-buttons">
- <legend>{L_PURGE}</legend>
- <input class="button1" type="submit" name="purge" value="{L_PURGE}" />
+ <legend>{L_EXTENSION_DELETE_DATA}</legend>
+ <input class="button1" type="submit" name="delete_data" value="{L_EXTENSION_DELETE_DATA}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="errorbox">
- <p>{L_PURGE_IN_PROGRESS}</p>
+ <p>{L_EXTENSION_DELETE_DATA_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
- <p>{L_PURGE_SUCCESS}</p>
+ <p>{L_EXTENSION_DELETE_DATA_SUCCESS}</p>
<br />
- <p><a href="{U_RETURN}">{L_RETURN}</a></p>
+ <p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
diff --git a/phpBB/adm/style/acp_ext_disable.html b/phpBB/adm/style/acp_ext_disable.html
index 7dc3f6ec97..4fa0893be7 100644
--- a/phpBB/adm/style/acp_ext_disable.html
+++ b/phpBB/adm/style/acp_ext_disable.html
@@ -5,29 +5,29 @@
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
- <p>{L_DISABLE_EXPLAIN}</p>
+ <p>{L_EXTENSION_DISABLE_EXPLAIN}</p>
<!-- IF PRE -->
<div class="errorbox">
- <p>{L_DISABLE_CONFIRM}</p>
+ <p>{L_CONFIRM_MESSAGE}</p>
</div>
<form id="acp_extensions" method="post" action="{U_DISABLE}">
<fieldset class="submit-buttons">
- <legend>{L_DISABLE}</legend>
- <input class="button1" type="submit" name="disable" value="{L_DISABLE}" />
+ <legend>{L_EXTENSION_DISABLE}</legend>
+ <input class="button1" type="submit" name="disable" value="{L_EXTENSION_DISABLE}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="errorbox">
- <p>{L_DISABLE_IN_PROGRESS}</p>
+ <p>{L_EXTENSION_DISABLE_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
- <p>{L_DISABLE_SUCCESS}</p>
+ <p>{L_EXTENSION_DISABLE_SUCCESS}</p>
<br />
- <p><a href="{U_RETURN}">{L_RETURN}</a></p>
+ <p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
diff --git a/phpBB/adm/style/acp_ext_enable.html b/phpBB/adm/style/acp_ext_enable.html
index 35585207eb..670904a2ce 100644
--- a/phpBB/adm/style/acp_ext_enable.html
+++ b/phpBB/adm/style/acp_ext_enable.html
@@ -5,35 +5,35 @@
<h1>{L_EXTENSIONS_ADMIN}</h1>
<p>{L_EXTENSIONS_EXPLAIN}</p>
- <p>{L_ENABLE_EXPLAIN}</p>
+ <p>{L_EXTENSION_ENABLE_EXPLAIN}</p>
<!-- IF MIGRATOR_ERROR -->
<div class="errorbox">
<p><strong>{L_MIGRATION_EXCEPTION_ERROR}</strong></p>
<p>{MIGRATOR_ERROR}</p>
- <p><a href="{U_RETURN}">{L_RETURN}</a></p>
+ <p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ELSEIF PRE -->
<div class="errorbox">
- <p>{L_ENABLE_CONFIRM}</p>
+ <p>{L_CONFIRM_MESSAGE}</p>
</div>
<form id="acp_extensions" method="post" action="{U_ENABLE}">
<fieldset class="submit-buttons">
- <legend>{L_ENABLE}</legend>
- <input class="button1" type="submit" name="enable" value="{L_ENABLE}" />
+ <legend>{L_EXTENSION_ENABLE}</legend>
+ <input class="button1" type="submit" name="enable" value="{L_EXTENSION_ENABLE}" />
<input class="button2" type="submit" name="cancel" value="{L_CANCEL}" />
</fieldset>
</form>
<!-- ELSEIF S_NEXT_STEP -->
<div class="errorbox">
- <p>{L_ENABLE_IN_PROGRESS}</p>
+ <p>{L_EXTENSION_ENABLE_IN_PROGRESS}</p>
</div>
<!-- ELSE -->
<div class="successbox">
- <p>{L_ENABLE_SUCCESS}</p>
+ <p>{L_EXTENSION_ENABLE_SUCCESS}</p>
<br />
- <p><a href="{U_RETURN}">{L_RETURN}</a></p>
+ <p><a href="{U_RETURN}">{L_RETURN_TO_EXTENSION_LIST}</a></p>
</div>
<!-- ENDIF -->
diff --git a/phpBB/adm/style/acp_ext_list.html b/phpBB/adm/style/acp_ext_list.html
index 53de0b4d12..8408ebe748 100644
--- a/phpBB/adm/style/acp_ext_list.html
+++ b/phpBB/adm/style/acp_ext_list.html
@@ -6,7 +6,7 @@
<p>{L_EXTENSIONS_EXPLAIN}</p>
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" ><col class="row2" ><col class="row2" >
<thead>
<tr>
@@ -18,17 +18,15 @@
<tbody>
<!-- IF .enabled -->
<tr>
- <td class="row3" colspan="3">
- <strong>{L_ENABLED} {L_EXTENSIONS}</strong>
- </td>
+ <td class="row3" colspan="3"><strong>{L_EXTENSIONS_ENABLED}</strong></td>
</tr>
<!-- BEGIN enabled -->
<tr class="ext_enabled">
- <td><strong>{enabled.META_DISPLAY_NAME}</strong></a></td>
+ <td><strong>{enabled.META_DISPLAY_NAME}</strong></td>
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
<td style="text-align: center;">
<!-- BEGIN actions -->
- <a href="{enabled.actions.U_ACTION}" alt="{enabled.actions.L_ACTION}">{enabled.actions.L_ACTION}</a>
+ <a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
<!-- IF not enabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>
@@ -38,17 +36,17 @@
<!-- IF .disabled -->
<tr>
- <td class="row3" colspan="3"><strong>{L_DISABLED} {L_EXTENSIONS}</strong></td>
+ <td class="row3" colspan="3"><strong>{L_EXTENSIONS_DISABLED}</strong></td>
</tr>
<!-- BEGIN disabled -->
<tr class="ext_disabled">
- <td><strong>{disabled.META_DISPLAY_NAME}</strong></a></td>
+ <td><strong>{disabled.META_DISPLAY_NAME}</strong></td>
<td style="text-align: center;">
<!-- IF disabled.U_DETAILS --><a href="{disabled.U_DETAILS}">{L_DETAILS}</a><!-- ENDIF -->
</td>
<td style="text-align: center;">
<!-- BEGIN actions -->
- <a href="{disabled.actions.U_ACTION}" alt="{disabled.actions.L_ACTION}">{disabled.actions.L_ACTION}</a>
+ <a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
<!-- IF not disabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>
diff --git a/phpBB/adm/style/acp_forums.html b/phpBB/adm/style/acp_forums.html
index 7b1466cfbd..e8b20007dc 100644
--- a/phpBB/adm/style/acp_forums.html
+++ b/phpBB/adm/style/acp_forums.html
@@ -440,32 +440,23 @@
<p><strong>{NAVIGATION}<!-- IF S_NO_FORUMS --> [<a href="{U_EDIT}">{L_EDIT}</a> | <a href="{U_DELETE}">{L_DELETE}</a><!-- IF not S_LINK --> | <a href="{U_SYNC}">{L_RESYNC}</a><!-- ENDIF -->]<!-- ENDIF --></strong></p>
<!-- IF .forums -->
- <table cellspacing="1">
+ <table class="table1 forums">
<col class="row1" /><col class="row1" /><col class="row2" />
<tbody>
<!-- BEGIN forums -->
- <tr data-down="{forums.U_MOVE_DOWN}" data-up="{forums.U_MOVE_UP}">
- <td style="width: 5%; text-align: center;">{forums.FOLDER_IMAGE}</td>
- <td>
+ <tr>
+ <td class="folder">{forums.FOLDER_IMAGE}</td>
+ <td class="forum-desc">
<!-- IF forums.FORUM_IMAGE --><div style="float: {S_CONTENT_FLOW_BEGIN}; margin-right: 5px;">{forums.FORUM_IMAGE}</div><!-- ENDIF -->
<strong><!-- IF forums.S_FORUM_LINK -->{forums.FORUM_NAME}<!-- ELSE --><a href="{forums.U_FORUM}">{forums.FORUM_NAME}</a><!-- ENDIF --></strong>
<!-- IF forums.FORUM_DESCRIPTION --><br /><span>{forums.FORUM_DESCRIPTION}</span><!-- ENDIF -->
<!-- IF forums.S_FORUM_POST --><br /><br /><span>{L_TOPICS}{L_COLON} <strong>{forums.FORUM_TOPICS}</strong> / {L_POSTS}{L_COLON} <strong>{forums.FORUM_POSTS}</strong></span><!-- ENDIF -->
</td>
- <td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
- <!-- IF forums.S_FIRST_ROW && not forums.S_LAST_ROW -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down"><a href="{forums.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF not forums.S_FIRST_ROW && not forums.S_LAST_ROW -->
- <span class="up"><a href="{forums.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down"><a href="{forums.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF forums.S_LAST_ROW && not forums.S_FIRST_ROW -->
- <span class="up"><a href="{forums.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ELSE -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ENDIF -->
+ <td class="actions">
+ <span class="up-disabled" style="display:none;">{ICON_MOVE_UP_DISABLED}</span>
+ <span class="up"><a href="{forums.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
+ <span class="down-disabled" style="display:none;">{ICON_MOVE_DOWN_DISABLED}</span>
+ <span class="down"><a href="{forums.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<a href="{forums.U_EDIT}">{ICON_EDIT}</a>
<!-- IF not forums.S_FORUM_LINK -->
<a href="{forums.U_SYNC}" onclick="popup_progress_bar();">{ICON_SYNC}</a>
@@ -501,14 +492,6 @@
</fieldset>
</form>
- <div class="hidden">
- <a class="template-up-img" href="#">{ICON_MOVE_UP}</a>
- <span class="template-up-img-disabled">{ICON_MOVE_UP_DISABLED}</span>
-
- <a class="template-down-img" href="#">{ICON_MOVE_DOWN}</a>
- <span class="template-down-img-disabled">{ICON_MOVE_DOWN_DISABLED}</span>
- </div>
-
<!-- ENDIF -->
<!-- INCLUDE overall_footer.html -->
diff --git a/phpBB/adm/style/acp_groups.html b/phpBB/adm/style/acp_groups.html
index 2953e85bd9..925d24f3a3 100644
--- a/phpBB/adm/style/acp_groups.html
+++ b/phpBB/adm/style/acp_groups.html
@@ -92,7 +92,12 @@
</dl>
<dl>
<dt><label for="group_colour">{L_GROUP_COLOR}{L_COLON}</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></dt>
- <dd><input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" /><!-- IF GROUP_COLOUR -->&nbsp;<span style="background-color: #{GROUP_COLOUR}">&nbsp; &nbsp;</span><!-- ENDIF -->&nbsp;&nbsp;<span>[ <a href="{U_SWATCH}" onclick="popup(this.href, 636, 150, '_swatch'); return false">{L_COLOUR_SWATCH}</a> ]</span></dd>
+ <dd>
+ <input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" />
+ <!-- IF GROUP_COLOUR -->&nbsp;<span style="background-color: #{GROUP_COLOUR}">&nbsp; &nbsp;</span><!-- ENDIF -->&nbsp;&nbsp;<span>
+ [ <a href="#" id="color_palette_toggle">{L_COLOUR_SWATCH}</a> ]</span>
+ <div id="color_palette_placeholder" style="display: none;" data-orientation="h" data-height="12" data-width="15" data-target="#group_colour"></div>
+ </dd>
</dl>
<dl>
<dt><label for="group_rank">{L_GROUP_RANK}{L_COLON}</label></dt>
@@ -150,7 +155,7 @@
<a href="{U_DEFAULT_ALL}">&raquo; {L_MAKE_DEFAULT_FOR_ALL}</a>
</fieldset>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
@@ -261,7 +266,7 @@
<form id="acp_groups" method="post" action="{U_ACTION}">
- <table cellspacing="1">
+ <table class="table1">
<col class="col1" /><col class="col1" /><col class="col2" /><col class="col2" /><col class="col2" />
<thead>
<tr>
@@ -295,7 +300,7 @@
<p>{L_SPECIAL_GROUPS_EXPLAIN}</p>
- <table cellspacing="1">
+ <table class="table1">
<col class="col1" /><col class="col1" /><col class="col2" /><col class="col2" /><col class="col2" />
<thead>
<tr>
diff --git a/phpBB/adm/style/acp_groups_position.html b/phpBB/adm/style/acp_groups_position.html
index cf1a7be427..b1df6b6162 100644
--- a/phpBB/adm/style/acp_groups_position.html
+++ b/phpBB/adm/style/acp_groups_position.html
@@ -27,7 +27,7 @@
<p>{L_LEGEND_EXPLAIN}</p>
- <table cellspacing="1">
+ <table class="table1">
<col class="col1" /><col class="col2" /><col class="col2" />
<thead>
<tr>
@@ -38,23 +38,14 @@
</thead>
<tbody>
<!-- BEGIN legend -->
- <tr data-down="{legend.U_MOVE_DOWN}" data-up="{legend.U_MOVE_UP}">
+ <tr>
<td><strong<!-- IF legend.GROUP_COLOUR --> style="color: {legend.GROUP_COLOUR}"<!-- ENDIF -->>{legend.GROUP_NAME}</strong></td>
<td style="text-align: center;">{legend.GROUP_TYPE}</td>
- <td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
- <!-- IF legend.S_FIRST_ROW && not legend.S_LAST_ROW -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF not legend.S_FIRST_ROW && not legend.S_LAST_ROW -->
- <span class="up"><a href="{legend.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF legend.S_LAST_ROW && not legend.S_FIRST_ROW -->
- <span class="up"><a href="{legend.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ELSE -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ENDIF -->
+ <td class="actions">
+ <span class="up-disabled" style="display: none;">{ICON_MOVE_UP_DISABLED}</span>
+ <span class="up"><a href="{legend.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
+ <span class="down-disabled" style="display:none;">{ICON_MOVE_DOWN_DISABLED}</span>
+ <span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<a href="{legend.U_DELETE}">{ICON_DELETE}</a>
</td>
</tr>
@@ -115,7 +106,7 @@
<!-- IF S_TEAMPAGE_CATEGORY and CURRENT_CATEGORY_NAME --><p><strong><a href="{U_ACTION}">{L_TEAMPAGE}</a> &raquo; {CURRENT_CATEGORY_NAME}</strong></p><!-- ENDIF -->
- <table cellspacing="1">
+ <table class="table1">
<col class="col1" /><col class="col2" /><col class="col2" />
<thead>
<tr>
@@ -126,7 +117,7 @@
</thead>
<tbody>
<!-- BEGIN teampage -->
- <tr data-down="{teampage.U_MOVE_DOWN}" data-up="{teampage.U_MOVE_UP}">
+ <tr>
<td>
<!-- IF teampage.U_CATEGORY -->
<a href="{teampage.U_CATEGORY}">{teampage.GROUP_NAME}</a>
@@ -136,20 +127,11 @@
</td>
<td style="text-align: center;"><!-- IF teampage.GROUP_TYPE -->{teampage.GROUP_TYPE}<!-- ELSE -->-<!-- ENDIF -->
</td></td>
- <td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
- <!-- IF teampage.S_FIRST_ROW && not teampage.S_LAST_ROW -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF not teampage.S_FIRST_ROW && not teampage.S_LAST_ROW -->
- <span class="up"><a href="{teampage.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
- <!-- ELSEIF teampage.S_LAST_ROW && not teampage.S_FIRST_ROW -->
- <span class="up"><a href="{teampage.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ELSE -->
- <span class="up">{ICON_MOVE_UP_DISABLED}</span>
- <span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
- <!-- ENDIF -->
+ <td class="actions">
+ <span class="up-disabled" style="display: none;">{ICON_MOVE_UP_DISABLED}</span>
+ <span class="up"><a href="{teampage.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
+ <span class="down-disabled" style="display:none;">{ICON_MOVE_DOWN_DISABLED}</span>
+ <span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<a href="{teampage.U_DELETE}">{ICON_DELETE}</a>
</td>
</tr>
@@ -186,12 +168,4 @@
</fieldset>
</form>
- <div class="hidden">
- <a class="template-up-img" href="#">{ICON_MOVE_UP}</a>
- <span class="template-up-img-disabled">{ICON_MOVE_UP_DISABLED}</span>
-
- <a class="template-down-img" href="#">{ICON_MOVE_DOWN}</a>
- <span class="template-down-img-disabled">{ICON_MOVE_DOWN_DISABLED}</span>
- </div>
-
<!-- INCLUDE overall_footer.html -->
diff --git a/phpBB/adm/style/acp_icons.html b/phpBB/adm/style/acp_icons.html
index eca02d2798..bfe4878ba5 100644
--- a/phpBB/adm/style/acp_icons.html
+++ b/phpBB/adm/style/acp_icons.html
@@ -22,7 +22,7 @@
{
var use_element = smiley[newimage];
- document.getElementById('add_image_src').src = '{PHPBB_ROOT_PATH}{IMG_PATH}/' + encodeURI(newimage);
+ document.getElementById('add_image_src').src = '{ROOT_PATH}{IMG_PATH}/' + encodeURI(newimage);
document.getElementById('add_code').value = use_element['code'];
document.getElementById('add_emotion').value = use_element['emotion'];
document.getElementById('add_width').value = use_element['width'];
@@ -74,7 +74,7 @@
<fieldset class="tabulated">
<legend>{L_TITLE}</legend>
- <table cellspacing="1" id="smilies">
+ <table class="table1" id="smilies">
<thead>
<tr>
<th colspan="{COLSPAN}">{L_CONFIG}</th>
@@ -218,7 +218,7 @@
<legend>{L_TITLE}</legend>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_TITLE}</th>
diff --git a/phpBB/adm/style/acp_inactive.html b/phpBB/adm/style/acp_inactive.html
index 68a168a5d6..0302007861 100644
--- a/phpBB/adm/style/acp_inactive.html
+++ b/phpBB/adm/style/acp_inactive.html
@@ -16,7 +16,7 @@
</div>
<!-- ENDIF -->
-<table cellspacing="1">
+<table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
diff --git a/phpBB/adm/style/acp_language.html b/phpBB/adm/style/acp_language.html
index c400437049..d4fd572376 100644
--- a/phpBB/adm/style/acp_language.html
+++ b/phpBB/adm/style/acp_language.html
@@ -75,7 +75,7 @@
<form id="missing" method="post" action="{U_MISSING_ACTION}">
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_LANGUAGE_KEY}</th>
@@ -129,7 +129,7 @@
</style>
<![endif]-->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<!-- IF S_EMAIL_FILE -->
<tr>
@@ -211,7 +211,7 @@
<p>{L_ACP_LANGUAGE_PACKS_EXPLAIN}</p>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_LANGUAGE_PACK_NAME}</th>
diff --git a/phpBB/adm/style/acp_logs.html b/phpBB/adm/style/acp_logs.html
index e13196f65d..f22eb67a72 100644
--- a/phpBB/adm/style/acp_logs.html
+++ b/phpBB/adm/style/acp_logs.html
@@ -22,7 +22,7 @@
<div><br style="clear: both;" /></div>
<!-- IF .log -->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
diff --git a/phpBB/adm/style/acp_main.html b/phpBB/adm/style/acp_main.html
index b644862ce1..bb39ffe050 100644
--- a/phpBB/adm/style/acp_main.html
+++ b/phpBB/adm/style/acp_main.html
@@ -78,7 +78,7 @@
<!-- EVENT acp_main_notice_after -->
- <table cellspacing="1">
+ <table class="table1 two-columns no-header" data-no-responsive-header="true">
<caption>{L_FORUM_STATS}</caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead>
@@ -168,21 +168,21 @@
</dl>
</form>
- <form id="action_stats_form" method="post" action="{U_ACTION}" data-ajax="true">
+ <form id="action_stats_form" method="post" action="{U_ACTION}">
<dl>
<dt><label for="action_stats">{L_RESYNC_STATS}</label><br /><span>{L_RESYNC_STATS_EXPLAIN}</span></dt>
<dd><input type="hidden" name="action" value="stats" /><input class="button2" type="submit" id="action_stats" name="action_stats" value="{L_RUN}" /></dd>
</dl>
</form>
- <form id="action_user_form" method="post" action="{U_ACTION}" data-ajax="true">
+ <form id="action_user_form" method="post" action="{U_ACTION}">
<dl>
<dt><label for="action_user">{L_RESYNC_POSTCOUNTS}</label><br /><span>{L_RESYNC_POSTCOUNTS_EXPLAIN}</span></dt>
<dd><input type="hidden" name="action" value="user" /><input class="button2" type="submit" id="action_user" name="action_user" value="{L_RUN}" /></dd>
</dl>
</form>
- <form id="action_db_track_form" method="post" action="{U_ACTION}" data-ajax="true">
+ <form id="action_db_track_form" method="post" action="{U_ACTION}">
<dl>
<dt><label for="action_db_track">{L_RESYNC_POST_MARKING}</label><br /><span>{L_RESYNC_POST_MARKING_EXPLAIN}</span></dt>
<dd><input type="hidden" name="action" value="db_track" /><input class="button2" type="submit" id="action_db_track" name="action_db_track" value="{L_RUN}" /></dd>
@@ -216,7 +216,7 @@
<div style="text-align: right;"><a href="{U_ADMIN_LOG}">&raquo; {L_VIEW_ADMIN_LOG}</a></div>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
@@ -249,7 +249,7 @@
<div style="text-align: right;"><a href="{U_INACTIVE_USERS}">&raquo; {L_VIEW_INACTIVE_USERS}</a></div>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
diff --git a/phpBB/adm/style/acp_modules.html b/phpBB/adm/style/acp_modules.html
index 1e49198725..8870c815af 100644
--- a/phpBB/adm/style/acp_modules.html
+++ b/phpBB/adm/style/acp_modules.html
@@ -132,7 +132,7 @@
</div>
<!-- ENDIF -->
- <table cellspacing="1">
+ <table class="table1">
<tbody>
<tr>
<td class="row3">{NAVIGATION}<!-- IF S_NO_MODULES --> [<a href="{U_EDIT}">{L_EDIT}</a> | <a href="{U_DELETE}">{L_DELETE}</a> | <!-- IF MODULE_ENABLED --><a href="{U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{U_ENABLE}">{L_ENABLE}</a><!-- ENDIF -->]<!-- ENDIF --></td>
@@ -141,7 +141,7 @@
</table>
<!-- IF .modules -->
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" /><col class="row1" /><col class="row2" /><col class="row2" />
<tbody>
<!-- BEGIN modules -->
@@ -149,20 +149,11 @@
<td style="width: 5%; text-align: center;">{modules.MODULE_IMAGE}</td>
<td><a href="{modules.U_MODULE}">{modules.MODULE_TITLE}</a><!-- IF not modules.MODULE_DISPLAYED --> <span class="small">[{L_HIDDEN_MODULE}]</span><!-- ENDIF --></td>
<td style="width: 15%; white-space: nowrap; text-align: center; vertical-align: middle;">&nbsp;<!-- IF modules.MODULE_ENABLED --><a href="{modules.U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{modules.U_ENABLE}">{L_ENABLE}</a><!-- ENDIF -->&nbsp;</td>
- <td style="width:90px; white-space: nowrap; text-align: right; vertical-align: middle;">
- <!-- IF modules.S_FIRST_ROW && not modules.S_LAST_ROW -->
- {ICON_MOVE_UP_DISABLED}
- <a href="{modules.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
- <!-- ELSEIF not modules.S_FIRST_ROW && not modules.S_LAST_ROW-->
- <a href="{modules.U_MOVE_UP}">{ICON_MOVE_UP}</a>
- <a href="{modules.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
- <!-- ELSEIF modules.S_LAST_ROW && not modules.S_FIRST_ROW -->
- <a href="{modules.U_MOVE_UP}">{ICON_MOVE_UP}</a>
- {ICON_MOVE_DOWN_DISABLED}
- <!-- ELSE -->
- {ICON_MOVE_UP_DISABLED}
- {ICON_MOVE_DOWN_DISABLED}
- <!-- ENDIF -->
+ <td class="actions">
+ <span class="up-disabled" style="display:none;">{ICON_MOVE_UP_DISABLED}</span>
+ <span class="up"><a href="{modules.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a></span>
+ <span class="down-disabled" style="display:none;">{ICON_MOVE_DOWN_DISABLED}</span>
+ <span class="down"><a href="{modules.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a></span>
<a href="{modules.U_EDIT}">{ICON_EDIT}</a>
<a href="{modules.U_DELETE}" data-ajax="row_delete">{ICON_DELETE}</a>
</td>
diff --git a/phpBB/adm/style/acp_permission_roles.html b/phpBB/adm/style/acp_permission_roles.html
index d654c320ca..b8fdaeb837 100644
--- a/phpBB/adm/style/acp_permission_roles.html
+++ b/phpBB/adm/style/acp_permission_roles.html
@@ -90,9 +90,8 @@
</div>
<!-- BEGIN auth -->
<div class="permissions-panel" id="options00{auth.S_ROW_COUNT}"<!-- IF auth.S_FIRST_ROW --><!-- ELSE --> style="display: none;"<!-- ENDIF -->>
- <span class="corners-top"><span></span></span>
<div class="tablewrap">
- <table id="table00{auth.S_ROW_COUNT}" cellspacing="1">
+ <table id="table00{auth.S_ROW_COUNT}" class="table1 not-responsive">
<colgroup>
<col class="permissions-name" />
<col class="permissions-yes" />
@@ -120,7 +119,6 @@
</tbody>
</table>
</div>
- <span class="corners-bottom"><span></span></span>
</div>
<!-- END auth -->
</div>
@@ -144,7 +142,7 @@
<form id="acp_roles" method="post" action="{U_ACTION}">
- <table cellspacing="1">
+ <table class="table1">
<col class="col2" /><col class="col2" /><col class="col1" /><col class="col2" /><col class="col2" />
<thead>
<tr>
diff --git a/phpBB/adm/style/acp_permissions.html b/phpBB/adm/style/acp_permissions.html
index 88a82532a1..6dc9dca2e7 100644
--- a/phpBB/adm/style/acp_permissions.html
+++ b/phpBB/adm/style/acp_permissions.html
@@ -110,7 +110,7 @@
<!-- ELSEIF S_SELECT_USERGROUP -->
- <div style="float: {S_CONTENT_FLOW_BEGIN}; width: 48%;">
+ <div class="column1">
<!-- IF S_CAN_SELECT_USER -->
@@ -155,7 +155,7 @@
</div>
- <div style="float: {S_CONTENT_FLOW_END}; width: 48%">
+ <div class="column2">
<!-- IF S_CAN_SELECT_GROUP -->
@@ -200,7 +200,7 @@
<!-- ELSEIF S_SELECT_USERGROUP_VIEW -->
- <div style="float: {S_CONTENT_FLOW_BEGIN}; width: 48%;">
+ <div class="column1">
<h1>{L_USERS}</h1>
@@ -241,7 +241,7 @@
</div>
- <div style="float: {S_CONTENT_FLOW_END}; width: 48%">
+ <div class="column2">
<h1>{L_USERGROUPS}</h1>
@@ -324,7 +324,7 @@
</form>
<!-- ENDIF -->
- <br /><br />
+ <br class="responsive-hide" /><br class="responsive-hide" />
<!-- include tooltip file -->
<script type="text/javascript" src="style/tooltip.js"></script>
@@ -340,7 +340,7 @@
<!-- INCLUDE permission_mask.html -->
- <br /><br />
+ <br class="responsive-hide" /><br class="responsive-hide" />
<fieldset class="quick" style="float: {S_CONTENT_FLOW_END};">
<input class="button1" type="submit" name="action[apply_all_permissions]" value="{L_APPLY_ALL_PERMISSIONS}" />
@@ -348,7 +348,7 @@
{S_FORM_TOKEN}
</fieldset>
- <br /><br />
+ <br class="responsive-hide" /><br class="responsive-hide" />
</form>
diff --git a/phpBB/adm/style/acp_profile.html b/phpBB/adm/style/acp_profile.html
index 13be669f70..3546873f6c 100644
--- a/phpBB/adm/style/acp_profile.html
+++ b/phpBB/adm/style/acp_profile.html
@@ -185,7 +185,7 @@
</div>
<!-- ENDIF -->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_FIELD_IDENT}</th>
diff --git a/phpBB/adm/style/acp_prune_forums.html b/phpBB/adm/style/acp_prune_forums.html
index 67cdaa784a..1be9689cc7 100644
--- a/phpBB/adm/style/acp_prune_forums.html
+++ b/phpBB/adm/style/acp_prune_forums.html
@@ -8,7 +8,7 @@
<p>{L_PRUNE_SUCCESS}</p>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_FORUM}</th>
diff --git a/phpBB/adm/style/acp_ranks.html b/phpBB/adm/style/acp_ranks.html
index 4b2e52536f..a1409b15ef 100644
--- a/phpBB/adm/style/acp_ranks.html
+++ b/phpBB/adm/style/acp_ranks.html
@@ -65,7 +65,7 @@
<fieldset class="tabulated">
<legend>{L_ACP_MANAGE_RANKS}</legend>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_RANK_IMAGE}</th>
diff --git a/phpBB/adm/style/acp_reasons.html b/phpBB/adm/style/acp_reasons.html
index 2f39f64614..ca3aebb338 100644
--- a/phpBB/adm/style/acp_reasons.html
+++ b/phpBB/adm/style/acp_reasons.html
@@ -68,7 +68,7 @@
<legend>{L_ACP_REASONS}</legend>
<!-- IF .reasons -->
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" /><col class="row1" /><col class="row2" />
<thead>
<tr>
diff --git a/phpBB/adm/style/acp_search.html b/phpBB/adm/style/acp_search.html
index bf353d62f2..496a8b2675 100644
--- a/phpBB/adm/style/acp_search.html
+++ b/phpBB/adm/style/acp_search.html
@@ -112,7 +112,7 @@
<legend>{L_INDEX_STATS}{L_COLON} {backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></legend>
- <table cellspacing="1">
+ <table class="table1">
<caption>{backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead>
diff --git a/phpBB/adm/style/acp_styles.html b/phpBB/adm/style/acp_styles.html
index 3dc4c2d616..b5c691b36b 100644
--- a/phpBB/adm/style/acp_styles.html
+++ b/phpBB/adm/style/acp_styles.html
@@ -79,7 +79,7 @@
<!-- ENDIF -->
<!-- IF .styles_list -->
- <table cellspacing="1">
+ <table class="table1 styles">
<thead>
<tr>
<th>{L_STYLE_NAME}</th>
@@ -97,9 +97,9 @@
<!-- ELSE -->
<!-- IF $ROW_CLASS == 'row2a' --><!-- DEFINE $ROW_CLASS = 'row2b' --><!-- ELSE --><!-- DEFINE $ROW_CLASS = 'row2a' --><!-- ENDIF -->
<!-- ENDIF -->
- <td class="{$ROW_CLASS}" style="padding-left: {styles_list.PADDING}px;">
+ <td class="{$ROW_CLASS}" style="padding-{S_CONTENT_FLOW_BEGIN}: {styles_list.PADDING}px;">
<!-- IF styles_list.STYLE_ID and styles_list.COMMENT == '' and styles_list.STYLE_ACTIVE -->
- <div class="default-style" style="display: none; float: right;">
+ <div class="default-style" style="display: none; float: {S_CONTENT_FLOW_END};">
<input class="radio" type="radio" name="default" value="{styles_list.STYLE_ID}"<!-- IF styles_list.DEFAULT --> checked="checked"<!-- ELSE --><!-- DEFINE $S_DEFAULT = 1 --><!-- ENDIF --> title="{L_STYLE_DEFAULT}" />
</div>
<!-- ENDIF -->
@@ -117,9 +117,9 @@
<!-- ENDIF -->
</td>
<!-- IF not STYLES_LIST_HIDE_COUNT -->
- <td class="{$ROW_CLASS}" style="text-align: center;">{styles_list.USERS}</td>
+ <td class="{$ROW_CLASS} users">{styles_list.USERS}</td>
<!-- ENDIF -->
- <td class="{$ROW_CLASS}" style="text-align: center;">
+ <td class="{$ROW_CLASS} actions">
<!-- BEGIN actions -->
<!-- IF styles_list.actions.S_ROW_COUNT > 0 --> | <!-- ENDIF -->
<!-- IF styles_list.actions.U_ACTION -->
@@ -129,7 +129,7 @@
<!-- END actions -->
</td>
{styles_list.EXTRA}
- <td class="{$ROW_CLASS}" width="20" style="text-align: center;">
+ <td class="{$ROW_CLASS} mark" width="20">
<!-- IF styles_list.STYLE_ID -->
<input class="checkbox" type="checkbox" name="ids[]" value="{styles_list.STYLE_ID}" />
<!-- ELSE -->
diff --git a/phpBB/adm/style/acp_users.html b/phpBB/adm/style/acp_users.html
index 96c9de6ebb..b213587def 100644
--- a/phpBB/adm/style/acp_users.html
+++ b/phpBB/adm/style/acp_users.html
@@ -125,7 +125,7 @@
<form id="user_groups" method="post" action="{U_ACTION}">
- <table cellspacing="1">
+ <table class="table1">
<tbody>
<!-- BEGIN group -->
<!-- IF group.S_NEW_GROUP_TYPE -->
@@ -164,7 +164,7 @@
</div>
<!-- IF .attach -->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_FILENAME}</th>
diff --git a/phpBB/adm/style/acp_users_feedback.html b/phpBB/adm/style/acp_users_feedback.html
index d1a4f59445..95892f2822 100644
--- a/phpBB/adm/style/acp_users_feedback.html
+++ b/phpBB/adm/style/acp_users_feedback.html
@@ -7,7 +7,7 @@
</div>
<!-- IF .log -->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_REPORT_BY}</th>
diff --git a/phpBB/adm/style/acp_users_prefs.html b/phpBB/adm/style/acp_users_prefs.html
index f1b9e28a66..1092b25b04 100644
--- a/phpBB/adm/style/acp_users_prefs.html
+++ b/phpBB/adm/style/acp_users_prefs.html
@@ -40,11 +40,6 @@
<label><input type="radio" class="radio" name="notifypm" value="0"<!-- IF not NOTIFY_PM --> id="notifypm" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<dl>
- <dt><label for="popuppm">{L_POPUP_ON_PM}{L_COLON}</label></dt>
- <dd><label><input type="radio" class="radio" name="popuppm" value="1"<!-- IF POPUP_PM --> id="popuppm" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
- <label><input type="radio" class="radio" name="popuppm" value="0"<!-- IF not POPUP_PM --> id="popuppm" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
- </dl>
- <dl>
<dt><label for="lang">{L_BOARD_LANGUAGE}{L_COLON}</label></dt>
<dd><select id="lang" name="lang">{S_LANG_OPTIONS}</select></dd>
</dl>
diff --git a/phpBB/adm/style/acp_users_signature.html b/phpBB/adm/style/acp_users_signature.html
index 2b4964803e..0a04c411d2 100644
--- a/phpBB/adm/style/acp_users_signature.html
+++ b/phpBB/adm/style/acp_users_signature.html
@@ -3,6 +3,8 @@
var form_name = 'user_signature';
var text_name = 'signature';
+ var load_draft = false;
+ var upload = false;
// Define the bbCode tags
var bbcode = new Array();
@@ -20,11 +22,11 @@
o: '{LA_BBCODE_O_HELP}',
p: '{LA_BBCODE_P_HELP}',
w: '{LA_BBCODE_W_HELP}',
+ a: '{LA_BBCODE_A_HELP}',
s: '{LA_BBCODE_S_HELP}',
f: '{LA_BBCODE_F_HELP}',
y: '{LA_BBCODE_Y_HELP}',
- d: '{LA_BBCODE_D_HELP}',
- tip: '{L_STYLES_TIP}'
+ d: '{LA_BBCODE_D_HELP}'
<!-- BEGIN custom_tags -->
,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
<!-- END custom_tags -->
@@ -32,7 +34,7 @@
// ]]>
</script>
-<script type="text/javascript" src="{T_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<form id="user_signature" method="post" action="{U_ACTION}">
@@ -48,52 +50,46 @@
<p>{L_SIGNATURE_EXPLAIN}</p>
<div id="format-buttons">
- <input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px;" onclick="bbstyle(0)" onmouseover="helpline('b')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px;" onclick="bbstyle(2)" onmouseover="helpline('i')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px;" onclick="bbstyle(4)" onmouseover="helpline('u')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" onmouseover="helpline('q')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" onmouseover="helpline('c')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" onmouseover="helpline('l')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" onmouseover="helpline('o')" onmouseout="helpline('tip')" />
- <input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" onmouseover="helpline('y')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onclick="bbstyle(0)" title="{L_BBCODE_B_HELP}" />
+ <input type="button" class="button2" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onclick="bbstyle(2)" title="{L_BBCODE_I_HELP}" />
+ <input type="button" class="button2" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onclick="bbstyle(4)" title="{L_BBCODE_U_HELP}" />
+ <!-- IF S_BBCODE_QUOTE -->
+ <input type="button" class="button2" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onclick="bbstyle(6)" title="{L_BBCODE_Q_HELP}" />
+ <!-- ENDIF -->
+ <input type="button" class="button2" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onclick="bbstyle(8)" title="{L_BBCODE_C_HELP}" />
+ <input type="button" class="button2" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onclick="bbstyle(10)" title="{L_BBCODE_L_HELP}" />
+ <input type="button" class="button2" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onclick="bbstyle(12)" title="{L_BBCODE_O_HELP}" />
+ <input type="button" class="button2" accesskey="y" name="addlistitem" value="[*]" style="width: 40px" onclick="bbstyle(-1)" title="{L_BBCODE_LISTITEM_HELP}" />
<!-- IF S_BBCODE_IMG -->
- <input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" onmouseover="helpline('p')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="p" name="addbbcode14" value="Img" style="width: 40px" onclick="bbstyle(14)" title="{L_BBCODE_P_HELP}" />
<!-- ENDIF -->
<!-- IF S_LINKS_ALLOWED -->
- <input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" onmouseover="helpline('w')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" title="{L_BBCODE_W_HELP}" />
<!-- ENDIF -->
<!-- IF S_BBCODE_FLASH -->
- <input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" onmouseover="helpline('d')" onmouseout="helpline('tip')" />
+ <input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
<!-- ENDIF -->
-
- {L_FONT_SIZE}{L_COLON} <select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_FONT_SIZE}" onmouseover="helpline('f')" onmouseout="helpline('tip')">
+ <select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_BBCODE_F_HELP}">
<option value="50">{L_FONT_TINY}</option>
<option value="85">{L_FONT_SMALL}</option>
<option value="100" selected="selected">{L_FONT_NORMAL}</option>
- <option value="150">{L_FONT_LARGE}</option>
- <option value="200">{L_FONT_HUGE}</option>
+ <!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 150 -->
+ <option value="150">{L_FONT_LARGE}</option>
+ <!-- IF not MAX_FONT_SIZE or MAX_FONT_SIZE >= 200 -->
+ <option value="200">{L_FONT_HUGE}</option>
+ <!-- ENDIF -->
+ <!-- ENDIF -->
</select>
- <!-- IF .custom_tags -->
- <br /><br />
<!-- BEGIN custom_tags -->
- <input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})"<!-- IF custom_tags.BBCODE_HELPLINE !== '' --> onmouseover="helpline('cb_{custom_tags.BBCODE_ID}')" onmouseout="helpline('tip')"<!-- ENDIF --> />
+ <input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
<!-- END custom_tags -->
- <!-- ENDIF -->
-
</div>
- <p><input type="text" class="text full" style="border: 0; background: none;" name="helpbox" value="{L_STYLES_TIP}" /></p>
-
<dl>
- <dt style="width: 90px;">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('v', 12, 10);
- // ]]>
- </script>
+ <dt style="width: 90px;" id="color_palette_placeholder" data-orientation="v" data-height="12" data-width="15" data-bbcode="true">
</dt>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" data-bbcode="true">{SIGNATURE}</textarea></dd>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px; margin-top: 5px;">
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px;"><textarea name="signature" rows="10" cols="60" style="width: 95%;" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" data-bbcode="true">{SIGNATURE}</textarea></dd>
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 5px;">
<!-- IF S_BBCODE_ALLOWED -->
<label><input type="checkbox" class="radio" name="disable_bbcode"{S_BBCODE_CHECKED} /> {L_DISABLE_BBCODE}</label>
<!-- ENDIF -->
@@ -104,7 +100,7 @@
<label><input type="checkbox" class="radio" name="disable_magic_url"{S_MAGIC_URL_CHECKED} /> {L_DISABLE_MAGIC_URL}</label>
<!-- ENDIF -->
</dd>
- <dd style="margin-{S_CONTENT_FLOW_BEGIN}{L_COLON} 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
+ <dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
</dl>
</fieldset>
diff --git a/phpBB/adm/style/acp_users_warnings.html b/phpBB/adm/style/acp_users_warnings.html
index d27f3800fc..9d082eda6d 100644
--- a/phpBB/adm/style/acp_users_warnings.html
+++ b/phpBB/adm/style/acp_users_warnings.html
@@ -1,7 +1,7 @@
<form id="list" method="post" action="{U_ACTION}">
<!-- IF .warn -->
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_REPORT_BY}</th>
diff --git a/phpBB/adm/style/acp_words.html b/phpBB/adm/style/acp_words.html
index 4acd75f933..7e91bc4367 100644
--- a/phpBB/adm/style/acp_words.html
+++ b/phpBB/adm/style/acp_words.html
@@ -47,7 +47,7 @@
<input class="button2" name="add" type="submit" value="{L_ADD_WORD}" />
</p>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th>{L_WORD}</th>
diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css
index ca15338133..c7f91d9a8a 100644
--- a/phpBB/adm/style/admin.css
+++ b/phpBB/adm/style/admin.css
@@ -18,11 +18,11 @@ body, div, p, th, td, li, dd {
font-size: x-small;
voice-family: "\"}\"";
voice-family: inherit;
- font-size: small
+ font-size: small;
}
html>body, html>div, html>p, html>th, html>td, html>li, html>dd {
- font-size: small
+ font-size: small;
}
html {
@@ -31,6 +31,7 @@ html {
/* Always show a scrollbar for short pages - stops the jump when the scrollbar appears. non-ie browsers */
height: 100%;
margin-bottom: 1px;
+ word-wrap: break-word;
}
body {
@@ -105,6 +106,23 @@ hr {
display: none;
}
+@media only screen and (max-width: 800px), only screen and (max-device-width: 800px)
+{
+ body {
+ margin: 5px 5px 0;
+ }
+}
+
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ html, body {
+ height: auto;
+ margin: 0;
+ padding: 0;
+ }
+}
+
+
/* General links */
a:link, a:visited {
color: #105289;
@@ -136,6 +154,7 @@ li {
list-style-type: inherit;
}
+
/* Main blocks
---------------------------------------- */
#wrap {
@@ -174,7 +193,7 @@ li {
#page-body {
clear: both;
- min-width: 700px;
+ min-width: 650px;
}
#page-footer {
@@ -195,19 +214,23 @@ li {
}
#main {
- float: left;
- width: 76%;
- margin: 0 0 0 3%;
- min-height: 350px;
+ float: right;
+ width: 100%;
+ margin: 0 0 0 -210px;
}
.rtl #main {
float: right;
- margin: 0 3% 0 0;
+ margin: 0 -210px 0 0;
}
-* html #main {
- height: 350px;
+.main {
+ margin-left: 210px;
+}
+
+.rtl .main {
+ margin-left: 0;
+ margin-right: 210px;
}
#page-body.simple-page-body {
@@ -216,17 +239,81 @@ li {
min-width: 0;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ #wrap, #page-body, #page-body.simple-page-body {
+ padding: 0;
+ min-width: 300px;
+ }
+
+ #page-header {
+ margin: 5px;
+ padding-left: 160px;
+ height: auto;
+ min-height: 54px;
+ overflow: hidden;
+ }
+
+ .rtl #page-header {
+ padding-right: 160px;
+ padding-left: 0;
+ }
+
+ #page-header h1 {
+ font-size: 1.2em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ #page-header fieldset {
+ margin-top: 5px;
+ }
+
+ #main, .rtl #main, .main, .rtl .main {
+ float: none;
+ width: auto;
+ margin: 0;
+ }
+
+ #content {
+ background: #F3F3F3 url("../images/innerbox_bg.gif") repeat-x top;
+ padding: 5px;
+ }
+
+ #page-footer {
+ padding: 0 5px 5px;
+ }
+}
+
+@media only screen and (max-width: 400px), only screen and (max-device-width: 400px)
+{
+ #page-header {
+ background-size: 76px 26.5px;
+ padding-left: 80px;
+ min-height: 30px;
+ }
+
+ .rtl #page-header {
+ padding-right: 80px;
+ }
+
+ #page-header h1 {
+ padding-top: 0;
+ font-size: 1.1em;
+ }
+}
+
+
/* Tabbed menu
Based on: http://www.alistapart.com/articles/slidingdoors2/
----------------------------------------*/
#tabs {
line-height: normal;
- margin: 0 0 -6px 7px;
+ margin: 0 7px;
min-width: 600px;
-}
-
-.rtl #tabs {
- margin: 0 7px -6px 0;
+ position: relative;
+ z-index: 2;
}
#tabs ul {
@@ -235,14 +322,27 @@ li {
list-style: none;
}
+#tabs ul:after {
+ content: '';
+ display: block;
+ clear: both;
+}
+
#tabs li {
- display: inline;
+ display: block;
+ float: left;
margin: 0;
padding: 0;
font-size: 0.85em;
font-weight: bold;
}
+#tabs li:after {
+ content: '';
+ display: block;
+ clear: both;
+}
+
#tabs a {
float: left;
background:url("../images/bg_tabs1.gif") no-repeat 0% -34px;
@@ -261,6 +361,7 @@ li {
display: block;
background: url("../images/bg_tabs2.gif") no-repeat 100% -34px;
padding: 7px 10px 4px 4px;
+ min-height: 14px;
color: #767676;
white-space: nowrap;
font-family: Arial, Helvetica, sans-serif;
@@ -280,122 +381,154 @@ li {
color: #BC2A4D;
}
-#tabs #activetab a {
+#tabs a:hover {
+ background-position: 0 -69px;
+}
+
+#tabs a:hover span {
+ background-position: 100% -69px;
+}
+
+#tabs .activetab a {
background-position: 0 0;
border-bottom: 1px solid #DCDEE2;
}
-#tabs #activetab a span {
+#tabs .activetab a span {
background-position: 100% 0;
padding-bottom: 5px;
color: #23649F;
}
-#tabs a:hover {
- background-position: 0 -69px;
+#tabs .activetab a:hover span {
+ color: #115098;
}
-#tabs a:hover span {
- background-position: 100% -69px;
+.responsive-tab {
+ position: relative;
}
-#tabs #activetab a:hover span {
- color: #115098;
+.responsive-tab .responsive-tab-link span {
+ display: inline-block;
+ font-size: 16px;
+ position: relative;
+ width: 16px;
+ line-height: 14px;
+ text-decoration: none;
}
+.responsive-tab .responsive-tab-link span:before {
+ content: '';
+ position: absolute;
+ left: 5px;
+ top: 8px;
+ height: .125em;
+ width: 14px;
+ border-bottom: 0.125em solid #767676;
+ border-top: 0.375em double #767676;
+}
-/* Main Panel
----------------------------------------- */
-#acp {
- margin: 4px 0;
- padding: 3px 1px;
- min-width: 550px;
- background-color: #FFFFFF;
- border: 1px #999999 solid;
+.responsive-tab .responsive-tab-link:hover span:before {
+ border-color: #BC2A4D;
}
-.panel {
- background: #F3F3F3 url("../images/innerbox_bg.gif") repeat-x top;
- padding: 0;
+.responsive-tab.activetab .responsive-tab-link span:before {
+ border-color: #23649F;
}
-span.corners-top, span.corners-bottom,
-span.corners-top span, span.corners-bottom span {
- font-size: 1px;
- line-height: 1px;
- display: block;
- height: 5px;
- background-repeat: no-repeat;
+.responsive-tab.activetab .responsive-tab-link:hover span:before {
+ border-color: #115098;
}
-span.corners-top {
- background-image: url("../images/corners_left.gif");
- background-position: 0 0;
- margin: -4px -2px 0;
+#tabs .dropdown {
+ top: 18px;
+ margin-right: -1px;
}
-span.corners-top span {
- background-image: url("../images/corners_right.gif");
- background-position: 100% 0;
+#tabs .dropdown-right .dropdown {
+ margin-left: -2px;
}
-span.corners-bottom {
- background-image: url("../images/corners_left.gif");
- background-position: 0 100%;
- margin: 0 -2px -4px;
- clear: both;
+#tabs .dropdown li {
+ display: block !important;
+ float: none;
+ background: transparent none;
+ padding: 0;
+}
+
+#tabs .dropdown a, #tabs .dropdown a span {
+ background: transparent;
+ display: block;
+ border-width: 0;
+ float: none;
+ margin: 0;
+ padding: 0;
+ text-align: right;
}
-span.corners-bottom span {
- background-image: url("../images/corners_right.gif");
- background-position: 100% 100%;
+#tabs .dropdown a span {
+ padding: 4px 8px;
+ color: inherit !important;
}
-/* WinIE tweaks \*/
-* html span.corners-top, * html span.corners-bottom { background-image: url("../images/corners_left.gif"); }
-* html span.corners-top span, * html span.corners-bottom span { background-image: url("../images/corners_right.gif"); }
-/* End tweaks */
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ #tabs {
+ min-width: 0;
+ }
+}
-/* Sub-navigation Menu
+/* Main Panel
---------------------------------------- */
-
-/* Toggle */
-#toggle {
- padding: 5px;
- width: 5%;
- height: 100px;
- position: absolute;
- left: 15%;
- top: 28px;
- margin-left: 2px;
+#acp {
+ clear: both;
+ position: relative;
+ top: -2px;
+ margin: 0 0 2px;
+ padding: 3px 1px;
+ min-width: 550px;
+ background: #F3F3F3 url("../images/innerbox_bg.gif") repeat-x top;
+ border: 1px #999999 solid;
+ border-radius: 5px;
+ box-shadow: #FFF 0 0 0 1px inset;
}
-.rtl #toggle {
- left: 75%;
- margin-right: 0;
- margin-left: 6px;
+#acp:first-child {
+ top: 0;
}
-#toggle-handle {
- display: block;
- width: 18px;
- height: 19px;
- float: right;
- background-image: url(../images/toggle.gif);
+.panel {
+ background: #F3F3F3 url("../images/innerbox_bg.gif") repeat-x top;
+ padding: 5px 0;
+ border-radius: 5px;
+ overflow: hidden;
}
-.rtl #toggle-handle {
- background-image: url(../images/toggle.gif);
- background-position: 100% 50%;
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ #acp {
+ min-width: 0;
+ min-height: 0;
+ border-radius: 0;
+ border-width: 1px 0;
+ background: #fff;
+ padding: 1px 0;
+ box-shadow: none;
+ }
}
+/* Sub-navigation Menu
+---------------------------------------- */
+
/* Menu */
#menu {
float: left;
- width: 20%;
+ width: 200px;
font-size: 1.00em;
padding: 0;
border-right: 1px solid #CCCFD3;
+ position: relative;
+ z-index: 1;
}
.rtl #menu {
@@ -412,15 +545,16 @@ span.corners-bottom span {
list-style: none;
margin: 0;
padding: 0;
+ word-wrap: normal;
}
/* Default list state */
-#menu li {
+#menu li, #menu .header {
padding: 0;
margin: 0;
font-size: 0.85em;
font-weight: bold;
- display: inline;
+ display: block;
}
/* Link styles for the sub-section links */
@@ -437,6 +571,12 @@ span.corners-bottom span {
padding: 3px 8px 3px 3px;
}
+#menu li span, #menu .header {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
#menu li a:hover, #menu li a:hover span {
text-decoration: none;
background-color: #FFFFFF;
@@ -485,7 +625,7 @@ span.corners-bottom span {
background: url("../images/arrow_down.gif") 99% 50% no-repeat;
}
-#menu li.header {
+#menu .header {
font-family: Tahoma, Helvetica, sans-serif;
display: block;
font-weight: bold;
@@ -495,8 +635,71 @@ span.corners-bottom span {
margin-top: 15px;
text-transform: uppercase;
font-size: 0.75em;
+ text-decoration: none;
+ cursor: inherit;
+ outline-style: none;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ #menu, .rtl #menu {
+ float: none;
+ width: auto;
+ border-width: 0;
+ max-width: 200px;
+ margin: 0 auto 10px;
+ }
+
+ #menu p {
+ text-align: center;
+ }
+
+ #menu .menu-block.active {
+ margin: 0 -5px;
+ padding: 0 5px 3px;
+ background: rgba(255, 255, 255, .5);
+ border-radius: 5px;
+ }
+
+ #menu .menu-block.no-header.active {
+ padding-top: 3px;
+ }
+
+ #menu .menu-block .header {
+ margin-top: 5px;
+ cursor: pointer;
+ border-bottom-width: 0;
+ position: relative;
+ text-decoration: underline;
+ }
+
+ #menu .menu-block .header:focus, #menu .menu-block.active .header {
+ color: #D31141;
+ text-decoration: none;
+ }
+
+ #menu .menu-block ul {
+ display: none;
+ }
+
+ .nojs #menu .menu-block:hover ul, #menu .menu-block.active ul, #menu .menu-block.no-header ul {
+ display: block;
+ }
+
+ #menu .menu-block li:last-child {
+ border-bottom: 1px solid #327AA5;
+ }
+
+ #menu .menu-block:last-child li:last-child, #menu .menu-block.active li:last-child {
+ border-bottom-width: 0;
+ }
+
+ #menu .menu-block li a span {
+ border-radius: 2px;
+ }
+}
+
+
/* Table styles
---------------------------------------- */
@@ -529,6 +732,20 @@ td {
text-align: right;
}
+.table1 {
+ border-collapse: separate;
+ border-spacing: 1px;
+}
+
+dt#color_palette_placeholder table {
+ margin-right: 5px;
+ width: 80px;
+}
+
+#color_palette_placeholder td {
+ padding: 0;
+}
+
table.type2 {
border: none;
background: none;
@@ -653,6 +870,169 @@ td.name {
color: #BC2A4D;
}
+/* Specific tables */
+table.forums td.folder {
+ width: 27px;
+ text-align: center;
+}
+
+table td.actions {
+ vertical-align: middle;
+ width: 100px;
+ text-align: center;
+ white-space: nowrap;
+}
+
+table tr:first-child td.actions .up, table tr:last-child td.actions .down {
+ display: none;
+}
+
+table tr:first-child td.actions .up-disabled, table tr:last-child td.actions .down-disabled {
+ display: inline !important;
+}
+
+table.styles td.users, table td.mark {
+ text-align: center;
+}
+
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ table.responsive, table.responsive tbody, table.responsive tr, table.responsive td {
+ display: block;
+ }
+
+ table.responsive thead, table.responsive th, table.responsive colgroup {
+ display: none;
+ }
+
+ table.responsive.show-header thead, table.responsive.show-header th:first-child, table.responsive caption {
+ display: block;
+ width: auto !important;
+ text-align: left !important;
+ margin: 0;
+ }
+
+ table.responsive {
+ background: transparent none;
+ border-width: 0;
+ padding: 0;
+ }
+
+ table.responsive caption {
+ padding: 3px 4px;
+ color: #FFFFFF;
+ background: #70AED3 url("../images/gradient2b.gif") bottom left repeat-x;
+ border-top: 1px solid #6DACD2;
+ border-bottom: 1px solid #327AA5;
+ text-align: left;
+ font-size: 0.75em;
+ font-weight: bold;
+ text-transform: uppercase;
+ }
+
+ table.responsive.show-header th:first-child span.rank-img, table.responsive.no-caption caption, table.responsive.no-header thead {
+ display: none;
+ }
+
+ table.responsive tr {
+ margin: 2px 0;
+ border: 1px solid #CCCFD3;
+ background-color: #FFFFFF;
+ padding: 1px 1px 0;
+ overflow: hidden;
+ }
+
+ table.responsive tr.row1 td { background-color: #F9F9F9; }
+ table.responsive tr.row2 td { background-color: #DCEBFE; }
+ table.responsive tr.row3 td { background-color: #DBDFE2; }
+ table.responsive tr.row4 td { background-color: #E4E8EB; }
+ table.responsive tr.col1 td { background-color: #DCEBFE; }
+ table.responsive tr.col2 td { background-color: #F9F9F9; }
+ table.responsive tr.row1a td { background-color: #F9F9F9; }
+ table.responsive tr.row1b td { background-color: #F6F6F6; }
+ table.responsive tr.row2a td { background-color: #E7EEF4; }
+ table.responsive tr.row2b td { background-color: #E3EBF2; }
+
+ table.responsive td {
+ width: auto !important;
+ text-align: left !important;
+ padding: 4px;
+ margin-bottom: 1px;
+ }
+
+ table.responsive td.empty {
+ display: none !important;
+ }
+
+ table.responsive td > dfn {
+ display: inline-block !important;
+ }
+
+ table.responsive td > dfn:after {
+ content: ':';
+ padding-right: 5px;
+ }
+
+ table.responsive.two-columns td {
+ width: 50% !important;
+ float: left;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ table.responsive.two-columns td:nth-child(2n+1) {
+ clear: left;
+ }
+
+ table.responsive span.rank-img {
+ float: none;
+ padding-right: 5px;
+ }
+
+ table.responsive#memberlist td:first-child input[type="checkbox"] {
+ float: right;
+ }
+
+ /* Specific tables */
+ table.responsive.forums td.folder {
+ float: left;
+ width: 27px;
+ background: transparent;
+ }
+ .rtl table.responsive.forums td.folder {
+ float: right;
+ }
+
+ table.responsive.forums td.forum-desc {
+ margin-left: 35px;
+ min-height: 27px;
+ background: transparent;
+ }
+
+ .rtl table.responsive.forums td.forum-desc {
+ margin-left: 0;
+ margin-right: 35px;
+ }
+
+ table.responsive td.actions {
+ clear: both;
+ text-align: right !important;
+ }
+
+ .rtl table.responsive td.actions {
+ text-align: left !important;
+ }
+
+ table.responsive.styles tr.responsive-style-row td:first-child {
+ padding-left: 4px !important;
+ padding-right: 4px !important;
+ }
+
+ table.responsive.styles td:first-child > dfn, table.responsive td.actions > dfn {
+ display: none !important;
+ }
+}
+
/* General form styles
----------------------------------------*/
fieldset {
@@ -664,6 +1044,7 @@ fieldset {
border-left: 1px solid #D7D7D7;
background-color: #FFFFFF;
position: relative;
+ border-radius: 3px;
}
.rtl fieldset {
@@ -673,10 +1054,6 @@ fieldset {
border-left: 1px solid #CCCCCC;
}
-* html fieldset {
- padding: 0 10px 5px 10px;
-}
-
fieldset p {
font-size: 0.85em;
}
@@ -695,23 +1072,10 @@ legend {
vertical-align: middle;
}
-* html legend {
- margin: 0 0 -10px -7px;
- line-height: 1em;
- font-size: .85em;
-}
-
-/* Holly hack, .rtl comes after html */
-* html .rtl legend {
- margin: 0;
- margin-right: -7px;
-}
-
input, textarea {
font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 0.90em;
font-weight: normal;
- cursor: text;
vertical-align: middle;
padding: 2px;
color: #111111;
@@ -873,6 +1237,22 @@ select#full_folder_action {
width: 95%;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ fieldset {
+ padding: 5px;
+ }
+
+ fieldset.quick, p.quick {
+ float: none !important;
+ text-align: center;
+ }
+
+ fieldset.display-options {
+ clear: both;
+ }
+}
+
/* Definition list layout for forms
Other general def. list properties defined in prosilver_main.css
---------------------------------------- */
@@ -1004,6 +1384,51 @@ input:focus, textarea:focus {
outline-style: none;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ fieldset dl {
+ margin-bottom: 5px;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #e8e8e8;
+ }
+
+ fieldset > dl:last-child, fieldset > form:last-child > dl:last-child {
+ border-bottom-width: 0;
+ margin-bottom: 0;
+ }
+
+ fieldset dt, .rtl fieldset dt, fieldset dd, .rtl fieldset dd {
+ border-width: 0;
+ margin-left: 0;
+ margin-right: 0;
+ float: none;
+ width: auto;
+ }
+
+ .ltr fieldset dd {
+ padding-left: 20px;
+ }
+
+ .rtl fieldset dd {
+ padding-right: 20px;
+ }
+
+ select, dd select, dd input {
+ max-width: 300px;
+ }
+
+ input[type="number"], dd input[type="number"] {
+ max-width: 70px;
+ }
+}
+
+@media only screen and (max-width: 400px), only screen and (max-device-width: 400px)
+{
+ select, dd select, dd input {
+ max-width: 240px;
+ }
+}
+
/* Submit button fieldset or paragraph
---------------------------------------- */
fieldset.submit-buttons {
@@ -1030,6 +1455,13 @@ fieldset.submit-buttons legend {
display: none;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ p.submit-buttons {
+ margin-top: 0;
+ }
+}
+
/* Input field styles
---------------------------------------- */
@@ -1045,7 +1477,6 @@ textarea.full {
width: 99%;
}
-* html input.full, * html textarea.full { width: 95%;}
input.medium { width: 50%;}
input.narrow { width: 25%;}
input.tiny { width: 10%;}
@@ -1109,8 +1540,10 @@ input.button1:focus, input.button2:focus, input.button3:focus {
position: fixed;
display: none;
top: 150px;
- left: 25%;
- width: 50%;
+ left: 0;
+ right: 0;
+ max-width: 600px;
+ margin: 0 auto;
z-index: 50;
padding: 25px;
padding: 0 25px 20px 25px;
@@ -1164,6 +1597,37 @@ input.button1:focus, input.button2:focus, input.button3:focus {
height: 100%;
background-color: #000000;
opacity: 0.5;
+ z-index: 45;
+}
+
+@media only screen and (max-height: 500px), only screen and (max-device-width: 500px)
+{
+ .phpbb_alert {
+ top: 25px;
+ }
+}
+
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ .phpbb_alert {
+ max-width: none;
+ margin: 0 25px;
+ }
+}
+
+#loading_indicator {
+ background: #000000 url("../images/loading.gif") center center no-repeat;
+ border-radius: 5px;
+ display: none;
+ opacity: 0.8;
+ margin-top: -50px;
+ margin-left: -50px;
+ height: 50px;
+ width: 50px;
+ position: fixed;
+ left: 50%;
+ top: 50%;
+ z-index: 51;
}
/* Pagination
@@ -1247,6 +1711,20 @@ li.pagination ul {
border-color: #B4BAC0;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ .pagination, .rtl .pagination {
+ float: none;
+ text-align: center;
+ margin: 5px 0;
+ }
+
+ .pagination li a, .pagination li span {
+ display: inline-block;
+ min-width: 10px;
+ }
+}
+
/* Action Highlighting
---------------------------------------- */
.successbox, .errorbox {
@@ -1272,8 +1750,6 @@ li.pagination ul {
background-color: #BC2A4D;
}
-* html .errorbox, * html .successbox { height: 1%; } /* Pixel shift fix for IE */
-
.successbox h3, .errorbox h3 {
color: #FFFFFF;
margin: 0 0 0.5em;
@@ -1367,7 +1843,7 @@ li.pagination ul {
visibility: hidden;
}*/
-.clearfix, #tabs, .row, #content, fieldset dl, #page-body {
+.clearfix, .row, #content, fieldset dl, #page-body {
height: 1%;
overflow: hidden;
}
@@ -1422,6 +1898,15 @@ li.pagination ul {
/* Permission interface
---------------------------------------- */
+.column1, .column2 {
+ width: 48%;
+ float: left;
+}
+
+.ltr .column2, .rtl .column1 {
+ float: right;
+}
+
fieldset.permissions legend {
text-transform: none;
}
@@ -1619,60 +2104,15 @@ fieldset.permissions .padding {
float: left;
background-color: #CADCEB;
width: 100%;
+ border-radius: 5px;
+ overflow: hidden;
+ padding: 5px 0;
}
.rtl .permissions-panel {
float: right;
}
-.permissions-panel span.corners-top {
- background-image: url("../images/corners_left2.gif");
-}
-
-.permissions-panel span.corners-top span {
- background-image: url("../images/corners_right2.gif");
-}
-
-.permissions-panel span.corners-bottom {
- background-image: url("../images/corners_left2.gif");
-}
-
-.permissions-panel span.corners-bottom span {
- background-image: url("../images/corners_right2.gif");
-}
-
-.permissions-panel span.corners-top, .permissions-panel span.corners-bottom,
-.permissions-panel span.corners-top span, .permissions-panel span.corners-bottom span {
- font-size: 1px;
- line-height: 1px;
- display: block;
- height: 5px;
- background-repeat: no-repeat;
-}
-
-.permissions-panel span.corners-top {
- background-image: url("../images/corners_left2.gif");
- background-position: 0 0;
- margin: 0 0;
-}
-
-.permissions-panel span.corners-top span {
- background-image: url("../images/corners_right2.gif");
- background-position: 100% 0;
-}
-
-.permissions-panel span.corners-bottom {
- background-image: url("../images/corners_left2.gif");
- background-position: 0 100%;
- margin: 0 0;
- clear: both;
-}
-
-.permissions-panel span.corners-bottom span {
- background-image: url("../images/corners_right2.gif");
- background-position: 100% 100%;
-}
-
/* Permission table
---------------------------------------- */
.permissions-panel .tablewrap {
@@ -1755,6 +2195,205 @@ fieldset.permissions .padding {
padding: 0;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ .column1, .column2 {
+ float: none !important;
+ width: auto;
+ }
+
+ .permissions-simple {
+ clear: both;
+ }
+
+ .permissions-simple td, .permissions-simple dd {
+ width: auto !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+
+ .permissions-simple dd {
+ margin-top: 5px;
+ }
+
+ .permissions-panel .tablewrap {
+ margin: 0 5px;
+ }
+
+ .permissions-category {
+ min-width: 0;
+ margin: 0 !important;
+ }
+
+ .permissions-category a, .permissions-category a span.tabbg {
+ display: block;
+ float: none !important;
+ background: transparent none;
+ }
+
+ .permissions-category a {
+ background: #d9e5ee;
+ margin: 5px 0;
+ padding: 0 !important;
+ border-radius: 3px;
+ text-decoration: underline;
+ }
+
+ .permissions-category .activetab a {
+ background-color: #dd6900;
+ color: #fff;
+ }
+
+ .permissions-category a span.tabbg {
+ color: inherit !important;
+ padding-top: 6px !important;
+ padding-bottom: 6px !important;
+ }
+
+ .permissions-category .activetab span.colour {
+ border-color: #fff;
+ }
+}
+
+/* Avatars gallery
+---------------------------------------- */
+#gallery {
+ display: block;
+ margin: 0 -5px;
+ padding: 0;
+ overflow: hidden;
+}
+
+#gallery li {
+ display: block;
+ float: left;
+ border: 1px solid #ccc;
+ border-radius: 2px;
+ background: #fff;
+ padding: 5px;
+ margin: 5px;
+}
+
+#gallery li:hover {
+ background-color: #eee;
+}
+
+#gallery li label {
+ display: block;
+ text-align: center;
+ padding: 0;
+}
+
+/* Dropdown menu
+----------------------------------------*/
+.dropdown {
+ position: absolute;
+ left: 0;
+ top: 22px;
+ z-index: 2;
+ border: 1px solid transparent;
+ border-radius: 5px;
+ padding: 9px 0 0;
+}
+
+.dropdown-up .dropdown {
+ top: auto;
+ bottom: 18px;
+ padding: 0 0 9px;
+}
+
+.dropdown-left .dropdown {
+ left: auto;
+ right: 0;
+}
+
+.dropdown .pointer, .dropdown .pointer-inner {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top-width: 0;
+ border-bottom: 10px solid transparent;
+ border-left: 10px dashed transparent;
+ border-right: 10px dashed transparent;
+ -webkit-transform: rotate(360deg); /* better anti-aliasing in webkit */
+ display: block;
+}
+
+.dropdown-up .pointer, .dropdown-up .pointer-inner {
+ border-bottom-width: 0;
+ border-top: 10px solid transparent;
+}
+
+.dropdown .pointer {
+ right: auto;
+ left: 10px;
+ top: 0;
+ z-index: 3;
+}
+
+.dropdown-up .pointer {
+ bottom: 0;
+ top: auto;
+}
+
+.dropdown-left .dropdown .pointer {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown .pointer-inner {
+ top: auto;
+ bottom: -11px;
+ left: -10px;
+}
+
+.dropdown-up .pointer-inner {
+ bottom: auto;
+ top: -11px;
+}
+
+.dropdown .pointer {
+ border-color: #B9B9B9 transparent;
+}
+
+.dropdown .pointer-inner {
+ border-color: #FFF transparent;
+}
+
+.dropdown .dropdown-contents {
+ z-index: 2;
+ overflow: hidden;
+ background: #fff;
+ border: 1px solid #b9b9b9;
+ border-radius: 5px;
+ padding: 5px;
+ position: relative;
+ box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.2);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.dropdown-up .dropdown-contents {
+ box-shadow: 1px 0 5px rgba(0, 0, 0, 0.2);
+}
+
+.dropdown li {
+ float: none;
+ margin: 0;
+ white-space: nowrap;
+ text-align: left;
+}
+
+.wrap .dropdown li, .dropdown.wrap li {
+ white-space: normal;
+}
+
+.dropdown li:before, .dropdown li:after {
+ display: none !important;
+}
+
+
/* Classes for additional tasks
---------------------------------------- */
@@ -1777,3 +2416,11 @@ fieldset.permissions .padding {
color: #FFFFFF;
font-size: 1.4em;
}
+
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ .responsive-hide { display: none !important; }
+ .responsive-show { display: block !important; }
+ .responsive-show-inline { display: inline !important; }
+ .responsive-show-inline-block { display: inline-block !important; }
+}
diff --git a/phpBB/adm/style/admin.js b/phpBB/adm/style/admin.js
new file mode 100644
index 0000000000..dd46124f97
--- /dev/null
+++ b/phpBB/adm/style/admin.js
@@ -0,0 +1,246 @@
+/**
+* phpBB3 ACP functions
+*/
+
+/**
+* Parse document block
+*/
+function parse_document(container)
+{
+ var test = document.createElement('div'),
+ oldBrowser = (typeof test.style.borderRadius == 'undefined');
+
+ delete test;
+
+ /**
+ * Navigation
+ */
+ container.find('#menu').each(function() {
+ var menu = $(this),
+ blocks = menu.children('.menu-block');
+
+ if (!blocks.length) {
+ return;
+ }
+
+ // Set onclick event
+ blocks.children('a.header').click(function() {
+ var parent = $(this).parent();
+ if (!parent.hasClass('active')) {
+ parent.siblings().removeClass('active');
+ }
+ parent.toggleClass('active');
+ });
+
+ // Set active menu
+ menu.find('#activemenu').parents('.menu-block').addClass('active');
+
+ // Check if there is active menu
+ if (!blocks.filter('.active').length) {
+ blocks.filter(':first').addClass('active');
+ }
+ });
+
+ /**
+ * Responsive tables
+ */
+ container.find('table').not('.not-responsive').each(function() {
+ var $this = $(this),
+ th = $this.find('thead > tr > th'),
+ columns = th.length,
+ headers = [],
+ totalHeaders = 0,
+ i, headersLength;
+
+ // Find columns
+ $this.find('colgroup:first').children().each(function(i) {
+ var column = $(this);
+ $this.find('td:nth-child(' + (i + 1) + ')').addClass(column.prop('className'));
+ });
+
+ // Styles table
+ if ($this.hasClass('styles')) {
+ $this.find('td:first-child[style]').each(function() {
+ var style = $(this).attr('style');
+ if (style.length) {
+ $(this).parent('tr').attr('style', style.toLowerCase().replace('padding', 'margin')).addClass('responsive-style-row');
+ }
+ });
+ }
+
+ // Find each header
+ if (!$this.data('no-responsive-header'))
+ {
+ th.each(function(column) {
+ var cell = $(this),
+ colspan = parseInt(cell.attr('colspan')),
+ dfn = cell.attr('data-dfn'),
+ text = dfn ? dfn : cell.text().trim();
+
+ if (text == '&nbsp;') text = '';
+ colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
+
+ for (i=0; i<colspan; i++) {
+ headers.push(text);
+ }
+ totalHeaders ++;
+
+ if (dfn && !column) {
+ $this.addClass('show-header');
+ }
+ });
+ }
+
+ headersLength = headers.length;
+
+ // Add header text to each cell as <dfn>
+ $this.addClass('responsive');
+
+ if (totalHeaders < 2) {
+ $this.addClass('show-header');
+ return;
+ }
+
+ $this.find('tbody > tr').each(function() {
+ var row = $(this),
+ cells = row.children('td'),
+ column = 0;
+
+ if (cells.length == 1) {
+ row.addClass('big-column');
+ return;
+ }
+
+ cells.each(function() {
+ var cell = $(this),
+ colspan = parseInt(cell.attr('colspan')),
+ text = cell.text().trim();
+
+ if (headersLength <= column) {
+ return;
+ }
+
+ if ((text.length && text !== '-') || cell.children().length) {
+ if (headers[column] != '') {
+ cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
+ }
+ }
+ else {
+ cell.addClass('empty');
+ }
+
+ colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
+ column += colspan;
+ });
+ });
+
+ // Remove <dfn> in disabled extensions list
+ $this.find('tr.ext_disabled > .empty:nth-child(2) + .empty').siblings(':first-child').children('dfn').remove();
+ });
+
+ /**
+ * Hide empty responsive tables
+ */
+ container.find('table.responsive > tbody').each(function() {
+ var items = $(this).children('tr');
+ if (items.length == 0)
+ {
+ $(this).parent('table:first').addClass('responsive-hide');
+ }
+ });
+
+ /**
+ * Fieldsets with empty <span>
+ */
+ container.find('fieldset dt > span:last-child').each(function() {
+ var $this = $(this);
+ if ($this.html() == '&nbsp;') {
+ $this.addClass('responsive-hide');
+ }
+
+ });
+
+ /**
+ * Responsive tabs
+ */
+ container.find('#tabs').not('[data-skip-responsive]').each(function() {
+ var $this = $(this),
+ $body = $('body'),
+ ul = $this.children(),
+ tabs = ul.children().not('[data-skip-responsive]'),
+ links = tabs.children('a'),
+ item = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span>&nbsp;</span></a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
+ menu = item.find('.dropdown-contents'),
+ maxHeight = 0,
+ lastWidth = false,
+ responsive = false;
+
+ links.each(function() {
+ var link = $(this);
+ maxHeight = Math.max(maxHeight, Math.max(link.outerHeight(true), link.parent().outerHeight(true)));
+ })
+
+ function check() {
+ var width = $body.width(),
+ height = $this.height();
+
+ if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
+ return;
+ }
+
+ tabs.show();
+ item.hide();
+
+ lastWidth = width;
+ height = $this.height();
+ if (height <= maxHeight) {
+ responsive = false;
+ if (item.hasClass('dropdown-visible')) {
+ phpbb.toggleDropdown.call(item.find('a.responsive-tab-link').get(0));
+ }
+ return;
+ }
+
+ responsive = true;
+ item.show();
+ menu.html('');
+
+ var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
+ total = availableTabs.length,
+ i, tab;
+
+ for (i = total - 1; i >= 0; i --) {
+ tab = availableTabs.eq(i);
+ menu.prepend(tab.clone(true));
+ tab.hide();
+ if ($this.height() <= maxHeight) {
+ menu.find('a').click(function() { check(true); });
+ return;
+ }
+ }
+ menu.find('a').click(function() { check(true); });
+ }
+
+ phpbb.registerDropdown(item.find('a.responsive-tab-link'), item.find('.dropdown'), {visibleClass: 'activetab', verticalDirection: 'down'});
+
+ check(true);
+ $(window).resize(check);
+ });
+}
+
+/**
+* Run onload functions
+*/
+(function($) {
+ $(document).ready(function() {
+ // Swap .nojs and .hasjs
+ $('body.nojs').toggleClass('nojs hasjs');
+
+ // Focus forms
+ $('form[data-focus]:first').each(function() {
+ $('#' + this.getAttribute('data-focus')).focus();
+ });
+
+ parse_document($('body'));
+ });
+})(jQuery);
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js
index efb0639f1b..78fcbd88fd 100644
--- a/phpBB/adm/style/ajax.js
+++ b/phpBB/adm/style/ajax.js
@@ -2,13 +2,6 @@
"use strict";
-var imgTemplates = {
- up: $('.template-up-img'),
- upDisabled: $('.template-up-img-disabled'),
- down: $('.template-down-img'),
- downDisabled: $('.template-down-img-disabled')
-};
-
/**
* The following callbacks are for reording items. row_down
* is triggered when an item is moved down, and row_up is triggered when
@@ -20,43 +13,7 @@ phpbb.addAjaxCallback('row_down', function() {
tr = el.parents('tr'),
trSwap = tr.next();
- /*
- * If the element was the first one, we have to:
- * - Add the up-link to the row we moved
- * - Remove the up-link on the next row
- */
- if (tr.is(':first-child')) {
- var upImg = imgTemplates.up.clone().attr('href', tr.attr('data-up'));
- tr.find('.up').html(upImg);
-
- phpbb.ajaxify({
- selector: tr.find('.up').children('a'),
- callback: 'row_up',
- overlay: false
- });
-
- trSwap.find('.up').html(imgTemplates.upDisabled.clone());
- }
-
tr.insertAfter(trSwap);
-
- /*
- * As well as:
- * - Remove the down-link on the moved row, if it is now the last row
- * - Add the down-link to the next row, if it was the last row
- */
- if (tr.is(':last-child')) {
- tr.find('.down').html(imgTemplates.downDisabled.clone());
-
- var downImg = imgTemplates.down.clone().attr('href', trSwap.attr('data-down'));
- trSwap.find('.down').html(downImg);
-
- phpbb.ajaxify({
- selector: trSwap.find('.down').children('a'),
- callback: 'row_down',
- overlay: false
- });
- }
});
phpbb.addAjaxCallback('row_up', function() {
@@ -64,43 +21,7 @@ phpbb.addAjaxCallback('row_up', function() {
tr = el.parents('tr'),
trSwap = tr.prev();
- /*
- * If the element was the last one, we have to:
- * - Add the down-link to the row we moved
- * - Remove the down-link on the next row
- */
- if (tr.is(':last-child')) {
- var downImg = imgTemplates.down.clone().attr('href', tr.attr('data-down'));
- tr.find('.down').html(downImg);
-
- phpbb.ajaxify({
- selector: tr.find('.down').children('a'),
- callback: 'row_down',
- overlay: false
- });
-
- trSwap.find('.down').html(imgTemplates.downDisabled.clone());
- }
-
tr.insertBefore(trSwap);
-
- /*
- * As well as:
- * - Remove the up-link on the moved row, if it is now the first row
- * - Add the up-link to the previous row, if it was the first row
- */
- if (tr.is(':first-child')) {
- tr.find('.up').html(imgTemplates.upDisabled.clone());
-
- var upImg = imgTemplates.up.clone().attr('href', trSwap.attr('data-up'));
- trSwap.find('.up').html(upImg);
-
- phpbb.ajaxify({
- selector: trSwap.find('.up').children('a'),
- callback: 'row_up',
- overlay: false
- });
- }
});
/**
diff --git a/phpBB/adm/style/captcha_qa_acp.html b/phpBB/adm/style/captcha_qa_acp.html
index 99f3f24f70..4ff7c328fc 100644
--- a/phpBB/adm/style/captcha_qa_acp.html
+++ b/phpBB/adm/style/captcha_qa_acp.html
@@ -14,7 +14,7 @@
<fieldset class="tabulated">
<legend>{L_QUESTIONS}</legend>
- <table cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th colspan="3">{L_QUESTIONS}</th>
diff --git a/phpBB/adm/style/colour_swatch.html b/phpBB/adm/style/colour_swatch.html
deleted file mode 100644
index e731620bd3..0000000000
--- a/phpBB/adm/style/colour_swatch.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html>
-<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
-<head>
-<meta charset="utf-8">
-<title>{L_COLOUR_SWATCH}</title>
-
-<style type="text/css">
-/* <![CDATA[ */
- body {
- background-color: #404040;
- color: #fff;
- }
-
- td {
- border: solid 1px #333;
- }
-
- .over {
- border-color: white;
- }
-
- .out {
- border-color: #333333;
- }
-
- img {
- border: 0;
- }
-/* ]]> */
-</style>
-</head>
-
-<body>
-
-<script type="text/javascript">
-// <![CDATA[
- var r = 0, g = 0, b = 0;
-
- var numberList = new Array(6);
- numberList[0] = '00';
- numberList[1] = '33';
- numberList[2] = '66';
- numberList[3] = '99';
- numberList[4] = 'CC';
- numberList[5] = 'FF';
-
- document.writeln('<table cellspacing="0" cellpadding="0" border="0">');
-
- for (r = 0; r < 6; r++)
- {
- document.writeln('<tr>');
-
- for (g = 0; g < 6; g++)
- {
- for (b = 0; b < 6; b++)
- {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td style="background-color: #' + color + ';" onmouseover="this.className=\'over\'" onmouseout="this.className=\'out\'">');
- document.write('<a href="#" onclick="cell(\'' + color + '\'); return false;"><img src="{T_IMAGES_PATH}spacer.gif" width="15" height="12" alt="#' + color + '" title="#' + color + '" \/><\/a>');
- document.writeln('<\/td>');
- }
- }
- document.writeln('<\/tr>');
- }
- document.writeln('<\/table>');
-
- function cell(color)
- {
- opener.document.forms["{OPENER}"].{NAME}.value = color;
- }
-// ]]>
-</script>
-
-</body>
-</html>
diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js
deleted file mode 100644
index 9938ff5d0b..0000000000
--- a/phpBB/adm/style/editor.js
+++ /dev/null
@@ -1,336 +0,0 @@
-/**
-* bbCode control by subBlue design [ www.subBlue.com ]
-* Includes unixsafe colour palette selector by SHS`
-*/
-
-// Startup variables
-var imageTag = false;
-var theSelection = false;
-
-// Check for Browser & Platform for PC & IE specific bits
-// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
-var clientPC = navigator.userAgent.toLowerCase(); // Get client info
-var clientVer = parseInt(navigator.appVersion, 10); // Get browser version
-
-var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
-var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));
-var baseHeight;
-
-/**
-* Shows the help messages in the helpline window
-*/
-function helpline(help) {
- document.forms[form_name].helpbox.value = help_line[help];
-}
-
-/**
-* Fix a bug involving the TextRange object. From
-* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
-*/
-function initInsertions() {
- var doc;
-
- if (document.forms[form_name]) {
- doc = document;
- } else {
- doc = opener.document;
- }
-
- var textarea = doc.forms[form_name].elements[text_name];
-
- if (is_ie && typeof(baseHeight) !== 'number') {
- textarea.focus();
- baseHeight = doc.selection.createRange().duplicate().boundingHeight;
-
- if (!document.forms[form_name]) {
- document.body.focus();
- }
- }
-}
-
-/**
-* bbstyle
-*/
-function bbstyle(bbnumber) {
- if (bbnumber !== -1) {
- bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
- } else {
- insert_text('[*]');
- document.forms[form_name].elements[text_name].focus();
- }
-}
-
-/**
-* Apply bbcodes
-*/
-function bbfontstyle(bbopen, bbclose) {
- theSelection = false;
-
- var textarea = document.forms[form_name].elements[text_name];
-
- textarea.focus();
-
- if ((clientVer >= 4) && is_ie && is_win) {
- // Get text selection
- theSelection = document.selection.createRange().text;
-
- if (theSelection) {
- // Add tags around selection
- document.selection.createRange().text = bbopen + theSelection + bbclose;
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
- } else if (document.forms[form_name].elements[text_name].selectionEnd
- && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) {
- mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
-
- //The new position for the cursor after adding the bbcode
- var caret_pos = getCaretPosition(textarea).start;
- var new_pos = caret_pos + bbopen.length;
-
- // Open tag
- insert_text(bbopen + bbclose);
-
- // Center the cursor when we don't have a selection
- // Gecko and proper browsers
- if (!isNaN(textarea.selectionStart)) {
- textarea.selectionStart = new_pos;
- textarea.selectionEnd = new_pos;
- }
- // IE
- else if (document.selection) {
- var range = textarea.createTextRange();
- range.move("character", new_pos);
- range.select();
- storeCaret(textarea);
- }
-
- textarea.focus();
- return;
-}
-
-/**
-* Insert text at position
-*/
-function insert_text(text, spaces, popup) {
- var textarea;
-
- if (!popup) {
- textarea = document.forms[form_name].elements[text_name];
- } else {
- textarea = opener.document.forms[form_name].elements[text_name];
- }
-
- if (spaces) {
- text = ' ' + text + ' ';
- }
-
- if (!isNaN(textarea.selectionStart)) {
- var sel_start = textarea.selectionStart;
- var sel_end = textarea.selectionEnd;
-
- mozWrap(textarea, text, '');
- textarea.selectionStart = sel_start + text.length;
- textarea.selectionEnd = sel_end + text.length;
- } else if (textarea.createTextRange && textarea.caretPos) {
- if (baseHeight !== textarea.caretPos.boundingHeight) {
- textarea.focus();
- storeCaret(textarea);
- }
-
- var caret_pos = textarea.caretPos;
- caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
- } else {
- textarea.value = textarea.value + text;
- }
-
- if (!popup) {
- textarea.focus();
- }
-}
-
-/**
-* Add inline attachment at position
-*/
-function attach_inline(index, filename) {
- insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
- document.forms[form_name].elements[text_name].focus();
-}
-
-/**
-* Add quote text to message
-*/
-function addquote(post_id, username)
-{
- var message_name = 'message_' + post_id;
- var theSelection = '';
- var divarea = false;
-
- if (document.all) {
- divarea = document.all[message_name];
- } else {
- divarea = document.getElementById(message_name);
- }
-
- // Get text selection - not only the post content :(
- if (window.getSelection) {
- theSelection = window.getSelection().toString();
- } else if (document.getSelection) {
- theSelection = document.getSelection();
- } else if (document.selection) {
- theSelection = document.selection.createRange().text;
- }
-
- if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
- if (divarea.innerHTML) {
- theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
- theSelection = theSelection.replace(/<br\/>/ig, '\n');
- theSelection = theSelection.replace(/&lt\;/ig, '<');
- theSelection = theSelection.replace(/&gt\;/ig, '>');
- theSelection = theSelection.replace(/&amp\;/ig, '&');
- theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
- } else if (document.all) {
- theSelection = divarea.innerText;
- } else if (divarea.textContent) {
- theSelection = divarea.textContent;
- } else if (divarea.firstChild.nodeValue) {
- theSelection = divarea.firstChild.nodeValue;
- }
- }
-
- if (theSelection) {
- insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
- }
-
- return;
-}
-
-/**
-* From http://www.massless.org/mozedit/
-*/
-function mozWrap(txtarea, open, close) {
- var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
- var scrollTop = txtarea.scrollTop;
-
- if (selEnd === 1 || selEnd === 2) {
- selEnd = selLength;
- }
-
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd);
- var s3 = (txtarea.value).substring(selEnd, selLength);
-
- txtarea.value = s1 + open + s2 + close + s3;
- txtarea.selectionStart = selStart + open.length;
- txtarea.selectionEnd = selEnd + open.length;
- txtarea.focus();
- txtarea.scrollTop = scrollTop;
-
- return;
-}
-
-/**
-* Insert at Caret position. Code from
-* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
-*/
-function storeCaret(textEl) {
- if (textEl.createTextRange) {
- textEl.caretPos = document.selection.createRange().duplicate();
- }
-}
-
-/**
-* Color pallette
-*/
-function colorPalette(dir, width, height) {
- var r = 0, g = 0, b = 0;
- var numberList = new Array(6);
- var color = '';
-
- numberList[0] = '00';
- numberList[1] = '40';
- numberList[2] = '80';
- numberList[3] = 'BF';
- numberList[4] = 'FF';
-
- document.writeln('<table class="type2">');
-
- for (r = 0; r < 5; r++) {
- if (dir === 'h') {
- document.writeln('<tr>');
- }
-
- for (g = 0; g < 5; g++) {
- if (dir === 'v') {
- document.writeln('<tr>');
- }
-
- for (b = 0; b < 5; b++) {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
- document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
- document.writeln('</td>');
- }
-
- if (dir === 'v') {
- document.writeln('</tr>');
- }
- }
-
- if (dir === 'h') {
- document.writeln('</tr>');
- }
- }
- document.writeln('</table>');
-}
-
-/**
-* Caret Position object
-*/
-function caretPosition() {
- var start = null;
- var end = null;
-}
-
-/**
-* Get the caret position in an textarea
-*/
-function getCaretPosition(txtarea) {
- var caretPos = new caretPosition();
-
- // simple Gecko/Opera way
- if (txtarea.selectionStart || txtarea.selectionStart === 0) {
- caretPos.start = txtarea.selectionStart;
- caretPos.end = txtarea.selectionEnd;
- }
- // dirty and slow IE way
- else if (document.selection) {
- // get current selection
- var range = document.selection.createRange();
-
- // a new selection of the whole textarea
- var range_all = document.body.createTextRange();
- range_all.moveToElementText(txtarea);
-
- // calculate selection start point by moving beginning of range_all to beginning of range
- var sel_start;
- for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
- range_all.moveStart('character', 1);
- }
-
- txtarea.sel_start = sel_start;
-
- // we ignore the end value for IE, this is already dirty enough and we don't need it
- caretPos.start = txtarea.sel_start;
- caretPos.end = txtarea.sel_start;
- }
-
- return caretPos;
-}
diff --git a/phpBB/adm/style/install_convert.html b/phpBB/adm/style/install_convert.html
index 5fec8c4789..7e22404f56 100644
--- a/phpBB/adm/style/install_convert.html
+++ b/phpBB/adm/style/install_convert.html
@@ -22,7 +22,7 @@
<!-- ENDIF -->
<!-- IF S_LIST -->
- <table cellspacing="1">
+ <table class="table1">
<caption>{L_AVAILABLE_CONVERTORS}</caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead>
diff --git a/phpBB/adm/style/install_footer.html b/phpBB/adm/style/install_footer.html
index f7d62d7c7e..c5356e7b9d 100644
--- a/phpBB/adm/style/install_footer.html
+++ b/phpBB/adm/style/install_footer.html
@@ -1,10 +1,7 @@
-
- </div>
+ </div>
+ </div><!-- /#main -->
</div>
- <span class="corners-bottom"><span></span></span>
- <div class="clear"></div>
- </div>
- </div>
+ </div><!-- /#acp -->
</div>
<div id="page-footer">
@@ -14,6 +11,8 @@
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
+<!-- INCLUDEJS admin.js -->
+{$SCRIPTS}
</body>
</html>
diff --git a/phpBB/adm/style/install_header.html b/phpBB/adm/style/install_header.html
index 5631b83e17..560bf501e9 100644
--- a/phpBB/adm/style/install_header.html
+++ b/phpBB/adm/style/install_header.html
@@ -2,6 +2,7 @@
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
<meta charset="utf-8">
+<meta name="viewport" content="width=device-width" />
<!-- IF META -->{META}<!-- ENDIF -->
<title>{PAGE_TITLE}</title>
@@ -34,7 +35,7 @@ function dE(n, s, type)
</head>
-<body class="{S_CONTENT_DIRECTION}">
+<body class="{S_CONTENT_DIRECTION} nojs">
<div id="wrap">
<div id="page-header">
<h1>{L_INSTALL_PANEL}</h1>
@@ -54,16 +55,15 @@ function dE(n, s, type)
<div id="tabs">
<ul>
<!-- BEGIN t_block1 -->
- <li<!-- IF t_block1.S_SELECTED --> id="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
+ <li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
<!-- END t_block1 -->
</ul>
</div>
<div id="acp">
- <div class="panel">
- <span class="corners-top"><span></span></span>
<div id="content">
<div id="menu">
+ <div class="menu-block no-header">
<ul>
<!-- BEGIN l_block1 -->
<li<!-- IF l_block1.S_SELECTED --> id="activemenu"<!-- ENDIF -->><a href="{l_block1.U_TITLE}"><span>{l_block1.L_TITLE}</span></a></li>
@@ -72,6 +72,8 @@ function dE(n, s, type)
<li<!-- IF l_block2.S_SELECTED --> id="activemenu"<!-- ENDIF -->><span<!-- IF l_block2.S_COMPLETE --> class="completed"<!-- ENDIF -->>{l_block2.L_TITLE}</span></li>
<!-- END l_block2 -->
</ul>
+ </div>
</div>
<div id="main" class="install-body">
+ <div class="main">
diff --git a/phpBB/adm/style/install_update.html b/phpBB/adm/style/install_update.html
index 57e2c8ffea..d746226753 100644
--- a/phpBB/adm/style/install_update.html
+++ b/phpBB/adm/style/install_update.html
@@ -395,7 +395,7 @@
<p>{L_MAPPING_FILE_STRUCTURE}</p>
- <table cellspacing="1">
+ <table class="table1">
<col class="row1" /><col class="row2" /><col class="row1" />
<thead>
<tr>
diff --git a/phpBB/adm/style/install_update_diff.html b/phpBB/adm/style/install_update_diff.html
index 1f30fe4d13..c27304a425 100644
--- a/phpBB/adm/style/install_update_diff.html
+++ b/phpBB/adm/style/install_update_diff.html
@@ -2,6 +2,7 @@
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
<meta charset="utf-8">
+<meta name="viewport" content="width=device-width" />
<!-- IF META -->{META}<!-- ENDIF -->
<title>{PAGE_TITLE}</title>
@@ -33,7 +34,7 @@ window.onresize = resize_panel;
<style type="text/css">
/* <![CDATA[ */
-#main {
+#main, .rtl #main {
font-size: 1em;
line-height: 0.7em;
margin: 0;
@@ -43,6 +44,7 @@ window.onresize = resize_panel;
#diff_content {
padding: 30px 10px 10px;
+ overflow: hidden;
}
<!-- IF DIFF_MODE neq 'side_by_side' and DIFF_MODE neq 'raw' -->
@@ -238,15 +240,13 @@ table.hrdiff caption span {
<div id="page-body">
<div id="acp">
- <div class="panel" id="codepanel">
- <span class="corners-top"><span></span></span>
+ <div id="codepanel">
<div id="diff_content">
<div id="main">
{DIFF_CONTENT}
</div>
</div>
- <span class="corners-bottom"><span></span></span>
- </div>
+ </div>
</div>
</div>
diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html
index 145ad18709..72af9d3388 100644
--- a/phpBB/adm/style/overall_footer.html
+++ b/phpBB/adm/style/overall_footer.html
@@ -1,10 +1,7 @@
-
- </div>
+ </div>
+ </div><!-- /#main -->
</div>
- <span class="corners-bottom"><span></span></span>
- <div class="clear"></div>
- </div>
- </div>
+ </div><!-- /#acp -->
</div>
<div id="page-footer">
@@ -20,8 +17,8 @@
<div id="darkenwrapper" data-ajax-error-title="{L_AJAX_ERROR_TITLE}" data-ajax-error-text="{L_AJAX_ERROR_TEXT}" data-ajax-error-text-abort="{L_AJAX_ERROR_TEXT_ABORT}" data-ajax-error-text-timeout="{L_AJAX_ERROR_TEXT_TIMEOUT}" data-ajax-error-text-parsererror="{L_AJAX_ERROR_TEXT_PARSERERROR}">
<div id="darken">&nbsp;</div>
- <div class="jalert" id="loadingalert"><h3>{L_LOADING}</h3><p>{L_PLEASE_WAIT}</p></div>
</div>
+ <div id="loading_indicator"></div>
<div id="phpbb_alert" class="phpbb_alert" data-l-err="{L_ERROR}" data-l-timeout-processing-req="{L_TIMEOUT_PROCESSING_REQ}">
<a href="#" class="alert_close"></a>
@@ -38,6 +35,7 @@
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js?assets_version={T_ASSETS_VERSION}" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
<!-- INCLUDEJS ajax.js -->
+<!-- INCLUDEJS admin.js -->
{$SCRIPTS}
<!-- EVENT acp_overall_footer_after -->
diff --git a/phpBB/adm/style/overall_header.html b/phpBB/adm/style/overall_header.html
index 3a9b6db2a3..fcef3bb8ac 100644
--- a/phpBB/adm/style/overall_header.html
+++ b/phpBB/adm/style/overall_header.html
@@ -2,6 +2,7 @@
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
<head>
<meta charset="utf-8">
+<meta name="viewport" content="width=device-width" />
<!-- IF META -->{META}<!-- ENDIF -->
<title>{PAGE_TITLE}</title>
@@ -14,9 +15,6 @@ var on_page = '{ON_PAGE}';
var per_page = '{PER_PAGE}';
var base_url = '{BASE_URL|e('js')}';
-var menu_state = 'shown';
-
-
/**
* Jump to page
*/
@@ -103,62 +101,12 @@ function popup(url, width, height, name)
return false;
}
-/**
-* Hiding/Showing the side menu
-*/
-function switch_menu()
-{
- var menu = document.getElementById('menu');
- var main = document.getElementById('main');
- var toggle = document.getElementById('toggle');
- var handle = document.getElementById('toggle-handle');
-
- switch (menu_state)
- {
- // hide
- case 'shown':
- main.style.width = '93%';
- menu_state = 'hidden';
- menu.style.display = 'none';
- toggle.style.width = '20px';
- handle.style.backgroundImage = 'url(images/toggle.gif)';
- handle.style.backgroundRepeat = 'no-repeat';
-
- <!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
- handle.style.backgroundPosition = '0% 50%';
- toggle.style.left = '96%';
- <!-- ELSE -->
- handle.style.backgroundPosition = '100% 50%';
- toggle.style.left = '0';
- <!-- ENDIF -->
- break;
-
- // show
- case 'hidden':
- main.style.width = '76%';
- menu_state = 'shown';
- menu.style.display = 'block';
- toggle.style.width = '5%';
- handle.style.backgroundImage = 'url(images/toggle.gif)';
- handle.style.backgroundRepeat = 'no-repeat';
-
- <!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
- handle.style.backgroundPosition = '100% 50%';
- toggle.style.left = '75%';
- <!-- ELSE -->
- handle.style.backgroundPosition = '0% 50%';
- toggle.style.left = '15%';
- <!-- ENDIF -->
- break;
- }
-}
-
// ]]>
</script>
<!-- EVENT acp_overall_header_head_append -->
</head>
-<body class="{S_CONTENT_DIRECTION}">
+<body class="{S_CONTENT_DIRECTION} nojs">
<div id="wrap">
<div id="page-header">
@@ -171,29 +119,25 @@ function switch_menu()
<div id="tabs">
<ul>
<!-- BEGIN t_block1 -->
- <li<!-- IF t_block1.S_SELECTED --> id="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
+ <li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
<!-- END t_block1 -->
</ul>
</div>
<div id="acp">
- <div class="panel">
- <span class="corners-top"><span></span></span>
<div id="content">
- <!-- IF not S_USER_NOTICE -->
- <div id="toggle">
- <a id="toggle-handle" accesskey="m" title="{L_MENU_TOGGLE}" onclick="switch_menu(); return false;" href="#"></a></div>
- <!-- ENDIF -->
<div id="menu">
<p>{L_LOGGED_IN_AS}<br /><strong>{USERNAME}</strong> [&nbsp;<a href="{U_LOGOUT}">{L_LOGOUT}</a>&nbsp;][&nbsp;<a href="{U_ADM_LOGOUT}">{L_ADM_LOGOUT}</a>&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
- <ul>
<!-- DEFINE $LI_USED = 0 -->
<!-- BEGIN l_block1 -->
<!-- IF l_block1.S_SELECTED -->
<!-- BEGIN l_block2 -->
<!-- IF .l_block1.l_block2.l_block3 -->
- <li class="header">{l_block1.l_block2.L_TITLE}</li>
+ <!-- IF $LI_USED --></ul></div><!-- ENDIF -->
+ <div class="menu-block">
+ <a class="header" href="javascript:void(0);">{l_block1.l_block2.L_TITLE}</a>
+ <ul>
<!-- DEFINE $LI_USED = 1 -->
<!-- ENDIF -->
@@ -205,10 +149,11 @@ function switch_menu()
<!-- ENDIF -->
<!-- END l_block1 -->
- <!-- IF not $LI_USED -->
- <li></li>
+ <!-- IF $LI_USED -->
+ </ul>
+ </div>
<!-- ENDIF -->
- </ul>
</div>
<div id="main">
+ <div class="main">
diff --git a/phpBB/adm/style/permission_mask.html b/phpBB/adm/style/permission_mask.html
index 4d52b901c3..7b5c071693 100644
--- a/phpBB/adm/style/permission_mask.html
+++ b/phpBB/adm/style/permission_mask.html
@@ -75,9 +75,8 @@
<!-- BEGIN category -->
<div class="permissions-panel" id="options{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" <!-- IF p_mask.S_FIRST_ROW and p_mask.f_mask.S_FIRST_ROW and p_mask.f_mask.category.S_FIRST_ROW --><!-- ELSE --> style="display: none;"<!-- ENDIF -->>
- <span class="corners-top"><span></span></span>
<div class="tablewrap">
- <table id="table{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" cellspacing="1">
+ <table id="table{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" class="table1 not-responsive">
<colgroup>
<col class="permissions-name" />
<col class="permissions-yes" />
@@ -128,7 +127,6 @@
<!-- ENDIF -->
- <span class="corners-bottom"><span></span></span>
</div>
<!-- END category -->
<div class="clearfix"></div>
diff --git a/phpBB/adm/style/permission_roles_mask.html b/phpBB/adm/style/permission_roles_mask.html
index 42a7fc3e4e..3a14e65004 100644
--- a/phpBB/adm/style/permission_roles_mask.html
+++ b/phpBB/adm/style/permission_roles_mask.html
@@ -1,7 +1,7 @@
<!-- BEGIN role_mask -->
- <table cellspacing="1">
+ <table class="table1">
<caption><!-- IF role_mask.FORUM_ID -->{L_FORUM}{L_COLON} <!-- ENDIF -->{role_mask.NAME}</caption>
<tbody>
<tr>
diff --git a/phpBB/adm/style/permission_trace.html b/phpBB/adm/style/permission_trace.html
index 744ad3293e..7330ffee41 100644
--- a/phpBB/adm/style/permission_trace.html
+++ b/phpBB/adm/style/permission_trace.html
@@ -8,7 +8,7 @@
<br />
- <table cellspacing="1" class="type1">
+ <table class="table1">
<thead>
<tr>
<th>{L_TRACE_WHO}</th>
diff --git a/phpBB/adm/swatch.php b/phpBB/adm/swatch.php
deleted file mode 100644
index e9d46d65b5..0000000000
--- a/phpBB/adm/swatch.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
-*
-* @package phpBB3
-* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-define('IN_PHPBB', true);
-define('ADMIN_START', true);
-$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
-$phpEx = substr(strrchr(__FILE__, '.'), 1);
-include($phpbb_root_path . 'common.' . $phpEx);
-
-// Start session management
-$user->session_begin(false);
-$auth->acl($user->data);
-$user->setup();
-
-// Set custom template for admin area
-$template->set_custom_style('adm', $phpbb_admin_path . 'style');
-
-$template->set_filenames(array(
- 'body' => 'colour_swatch.html')
-);
-
-$form = request_var('form', '');
-$name = request_var('name', '');
-
-// We validate form and name here, only id/class allowed
-$form = (!preg_match('/^[a-z0-9_-]+$/i', $form)) ? '' : $form;
-$name = (!preg_match('/^[a-z0-9_-]+$/i', $name)) ? '' : $name;
-
-$template->assign_vars(array(
- 'OPENER' => $form,
- 'NAME' => $name,
- 'T_IMAGES_PATH' => "{$phpbb_root_path}images/",
-
- 'S_USER_LANG' => $user->lang['USER_LANG'],
- 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
- 'S_CONTENT_ENCODING' => 'UTF-8',
-));
-
-$template->display('body');
-
-garbage_collection();
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index ab0891e70c..8d0db5da1a 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -12,31 +12,28 @@ var keymap = {
};
var dark = $('#darkenwrapper');
-var loadingAlert = $('#loadingalert');
+var loadingIndicator = $('#loading_indicator');
var phpbbAlertTimer = null;
+var isTouch = (window && typeof window.ontouchstart !== 'undefined');
/**
* Display a loading screen
*
- * @returns object Returns loadingAlert.
+ * @returns object Returns loadingIndicator.
*/
-phpbb.loadingAlert = function() {
- if (dark.is(':visible')) {
- loadingAlert.fadeIn(phpbb.alertTime);
- } else {
- loadingAlert.show();
- dark.fadeIn(phpbb.alertTime, function() {
- // Wait five seconds and display an error if nothing has been returned by then.
- phpbbAlertTimer = setTimeout(function() {
- if (loadingAlert.is(':visible')) {
- phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req'));
- }
- }, 5000);
- });
+phpbb.loadingIndicator = function() {
+ if (!loadingIndicator.is(':visible')) {
+ loadingIndicator.fadeIn(phpbb.alertTime);
+ // Wait fifteen seconds and display an error if nothing has been returned by then.
+ phpbbAlertTimer = setTimeout(function() {
+ if (loadingIndicator.is(':visible')) {
+ phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req'));
+ }
+ }, 15000);
}
- return loadingAlert;
+ return loadingIndicator;
};
/**
@@ -66,6 +63,10 @@ phpbb.alert = function(title, msg, fadedark) {
div.find('.alert_title').html(title);
div.find('.alert_text').html(msg);
+ if (!dark.is(':visible')) {
+ dark.fadeIn(phpbb.alertTime);
+ }
+
div.bind('click', function(e) {
e.stopPropagation();
});
@@ -97,8 +98,8 @@ phpbb.alert = function(title, msg, fadedark) {
e.preventDefault();
});
- if (loadingAlert.is(':visible')) {
- loadingAlert.fadeOut(phpbb.alertTime, function() {
+ if (loadingIndicator.is(':visible')) {
+ loadingIndicator.fadeOut(phpbb.alertTime, function() {
dark.append(div);
div.fadeIn(phpbb.alertTime);
});
@@ -131,6 +132,10 @@ phpbb.confirm = function(msg, callback, fadedark) {
var div = $('#phpbb_confirm');
div.find('.alert_text').html(msg);
+ if (!dark.is(':visible')) {
+ dark.fadeIn(phpbb.alertTime);
+ }
+
div.bind('click', function(e) {
e.stopPropagation();
});
@@ -184,8 +189,8 @@ phpbb.confirm = function(msg, callback, fadedark) {
e.preventDefault();
});
- if (loadingAlert.is(':visible')) {
- loadingAlert.fadeOut(phpbb.alertTime, function() {
+ if (loadingIndicator.is(':visible')) {
+ loadingIndicator.fadeOut(phpbb.alertTime, function() {
dark.append(div);
div.fadeIn(phpbb.alertTime);
});
@@ -326,12 +331,12 @@ phpbb.ajaxify = function(options) {
// If confirmation is required, display a dialog to the user.
phpbb.confirm(res.MESSAGE_BODY, function(del) {
if (del) {
- phpbb.loadingAlert();
+ phpbb.loadingIndicator();
data = $('<form>' + res.S_HIDDEN_FIELDS + '</form>').serialize();
$.ajax({
url: res.S_CONFIRM_ACTION,
type: 'POST',
- data: data + '&confirm=' + res.YES_VALUE,
+ data: data + '&confirm=' + res.YES_VALUE + '&' + $('#phpbb_confirm form').serialize(),
success: returnHandler,
error: errorHandler
});
@@ -369,16 +374,19 @@ phpbb.ajaxify = function(options) {
}
if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') === 'true')) {
- phpbb.loadingAlert();
+ phpbb.loadingIndicator();
}
- $.ajax({
+ var request = $.ajax({
url: action,
type: method,
data: data,
success: returnHandler,
error: errorHandler
});
+ request.always(function() {
+ loadingIndicator.fadeOut(phpbb.alertTime);
+ });
event.preventDefault();
});
@@ -616,8 +624,9 @@ phpbb.resizeTextArea = function(items, options) {
resetCallback: function(item) { }
};
- if (arguments.length > 1)
- {
+ if (isTouch) return;
+
+ if (arguments.length > 1) {
configuration = $.extend(configuration, options);
}
@@ -830,12 +839,237 @@ phpbb.applyCodeEditor = function(textarea) {
};
/**
+* List of classes that toggle dropdown menu,
+* list of classes that contain visible dropdown menu
+*
+* Add your own classes to strings with comma (probably you
+* will never need to do that)
+*/
+phpbb.dropdownHandles = '.dropdown-container.dropdown-visible .dropdown-toggle';
+phpbb.dropdownVisibleContainers = '.dropdown-container.dropdown-visible';
+
+/**
+* Dropdown toggle event handler
+* This handler is used by phpBB.registerDropdown() and other functions
+*/
+phpbb.toggleDropdown = function() {
+ var $this = $(this),
+ options = $this.data('dropdown-options'),
+ parent = options.parent,
+ visible = parent.hasClass('dropdown-visible');
+
+ if (!visible) {
+ // Hide other dropdown menus
+ $(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
+
+ // Figure out direction of dropdown
+ var direction = options.direction,
+ verticalDirection = options.verticalDirection,
+ offset = $this.offset();
+
+ if (direction == 'auto') {
+ if (($(window).width() - $this.outerWidth(true)) / 2 > offset.left) {
+ direction = 'right';
+ }
+ else {
+ direction = 'left';
+ }
+ }
+ parent.toggleClass(options.leftClass, direction == 'left').toggleClass(options.rightClass, direction == 'right');
+
+ if (verticalDirection == 'auto') {
+ var height = $(window).height(),
+ top = offset.top - $(window).scrollTop();
+
+ if (top < height * 0.7) {
+ verticalDirection = 'down';
+ }
+ else {
+ verticalDirection = 'up';
+ }
+ }
+ parent.toggleClass(options.upClass, verticalDirection == 'up').toggleClass(options.downClass, verticalDirection == 'down');
+ }
+
+ options.dropdown.toggle();
+ parent.toggleClass(options.visibleClass, !visible).toggleClass('dropdown-visible', !visible);
+
+ // Check dimensions when showing dropdown
+ // !visible because variable shows state of dropdown before it was toggled
+ if (!visible) {
+ options.dropdown.find('.dropdown-contents').each(function() {
+ var $this = $(this),
+ windowWidth = $(window).width();
+
+ $this.css({
+ marginLeft: 0,
+ left: 0,
+ maxWidth: (windowWidth - 4) + 'px'
+ });
+
+ var offset = $this.offset().left,
+ width = $this.outerWidth(true);
+
+ if (offset < 2) {
+ $this.css('left', (2 - offset) + 'px');
+ }
+ else if ((offset + width + 2) > windowWidth) {
+ $this.css('margin-left', (windowWidth - offset - width - 2) + 'px');
+ }
+ });
+ }
+
+ // Prevent event propagation
+ if (arguments.length > 0) {
+ try {
+ var e = arguments[0];
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ catch (error) { }
+ }
+ return false;
+};
+
+/**
+* Register dropdown menu
+* Shows/hides dropdown, decides which side to open to
+*
+* @param {jQuery} toggle Link that toggles dropdown.
+* @param {jQuery} dropdown Dropdown menu.
+* @param {Object} options List of options. Optional.
+*/
+phpbb.registerDropdown = function(toggle, dropdown, options)
+{
+ var ops = {
+ parent: toggle.parent(), // Parent item to add classes to
+ direction: 'auto', // Direction of dropdown menu. Possible values: auto, left, right
+ verticalDirection: 'auto', // Vertical direction. Possible values: auto, up, down
+ visibleClass: 'visible', // Class to add to parent item when dropdown is visible
+ leftClass: 'dropdown-left', // Class to add to parent item when dropdown opens to left side
+ rightClass: 'dropdown-right', // Class to add to parent item when dropdown opens to right side
+ upClass: 'dropdown-up', // Class to add to parent item when dropdown opens above menu item
+ downClass: 'dropdown-down' // Class to add to parent item when dropdown opens below menu item
+ };
+ if (options) {
+ ops = $.extend(ops, options);
+ }
+ ops.dropdown = dropdown;
+
+ ops.parent.addClass('dropdown-container');
+ toggle.addClass('dropdown-toggle');
+
+ toggle.data('dropdown-options', ops);
+
+ toggle.click(phpbb.toggleDropdown);
+};
+
+/**
+* Get the HTML for a color palette table.
+*
+* @param string dir Palette direction - either v or h
+* @param int width Palette cell width.
+* @param int height Palette cell height.
+*/
+phpbb.colorPalette = function(dir, width, height) {
+ var r = 0,
+ g = 0,
+ b = 0,
+ numberList = new Array(6),
+ color = '',
+ html = '';
+
+ numberList[0] = '00';
+ numberList[1] = '40';
+ numberList[2] = '80';
+ numberList[3] = 'BF';
+ numberList[4] = 'FF';
+
+ html += '<table style="width: auto;">';
+
+ for (r = 0; r < 5; r++) {
+ if (dir == 'h') {
+ html += '<tr>';
+ }
+
+ for (g = 0; g < 5; g++) {
+ if (dir == 'v') {
+ html += '<tr>';
+ }
+
+ for (b = 0; b < 5; b++) {
+ color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
+ html += '<td style="background-color: #' + color + '; width: ' + width + 'px; height: ' + height + 'px;">';
+ html += '<a href="#" data-color="' + color + '" style="display: block; width: ' + width + 'px; height: ' + height + 'px; " alt="#' + color + '" title="#' + color + '"></a>';
+ html += '</td>';
+ }
+
+ if (dir == 'v') {
+ html += '</tr>';
+ }
+ }
+
+ if (dir == 'h') {
+ html += '</tr>';
+ }
+ }
+ html += '</table>';
+ return html;
+}
+
+/**
+* Register a color palette.
+*
+* @param object el jQuery object for the palette container.
+*/
+phpbb.registerPalette = function(el) {
+ var orientation = el.attr('data-orientation'),
+ height = el.attr('data-height'),
+ width = el.attr('data-width'),
+ target = el.attr('data-target'),
+ bbcode = el.attr('data-bbcode');
+
+ // Insert the palette HTML into the container.
+ el.html(phpbb.colorPalette(orientation, width, height));
+
+ // Add toggle control.
+ $('#color_palette_toggle').click(function(e) {
+ el.toggle();
+ e.preventDefault();
+ });
+
+ // Attach event handler when a palette cell is clicked.
+ $(el).on('click', 'a', function(e) {
+ var color = $(this).attr('data-color');
+
+ if (bbcode) {
+ bbfontstyle('[color=#' + color + ']', '[/color]');
+ } else {
+ $(target).val(color);
+ }
+ e.preventDefault();
+ });
+}
+
+/**
* Apply code editor to all textarea elements with data-bbcode attribute
*/
$(document).ready(function() {
$('textarea[data-bbcode]').each(function() {
phpbb.applyCodeEditor(this);
});
+
+ // Hide active dropdowns when click event happens outside
+ $('body').click(function(e) {
+ var parents = $(e.target).parents();
+ if (!parents.is(phpbb.dropdownVisibleContainers)) {
+ $(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
+ }
+ });
+
+ $('#color_palette_placeholder').each(function() {
+ phpbb.registerPalette($(this));
+ });
});
})(jQuery); // Avoid conflicts with other libraries
diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/assets/javascript/editor.js
index 66a3cb51ac..5222de9fee 100644
--- a/phpBB/styles/prosilver/template/editor.js
+++ b/phpBB/assets/javascript/editor.js
@@ -295,63 +295,6 @@ function storeCaret(textEl) {
}
/**
-* Color pallette
-*/
-function colorPalette(dir, width, height) {
- var r = 0,
- g = 0,
- b = 0,
- numberList = new Array(6),
- color = '',
- html = '';
-
- numberList[0] = '00';
- numberList[1] = '40';
- numberList[2] = '80';
- numberList[3] = 'BF';
- numberList[4] = 'FF';
-
- html += '<table>';
-
- for (r = 0; r < 5; r++) {
- if (dir == 'h') {
- html += '<tr>';
- }
-
- for (g = 0; g < 5; g++) {
- if (dir == 'v') {
- html += '<tr>';
- }
-
- for (b = 0; b < 5; b++) {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- html += '<td style="background-color: #' + color + '; width: ' + width + 'px; height: ' + height + 'px;">';
- html += '<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;" style="display: block; width: ' + width + 'px; height: ' + height + 'px; " alt="#' + color + '" title="#' + color + '"></a>';
- html += '</td>';
- }
-
- if (dir == 'v') {
- html += '</tr>';
- }
- }
-
- if (dir == 'h') {
- html += '</tr>';
- }
- }
- html += '</table>';
- return html;
-}
-
-(function($) {
- $(document).ready(function() {
- $('#color_palette_placeholder').each(function() {
- $(this).html(colorPalette('h', 15, 12));
- });
- });
-})(jQuery);
-
-/**
* Caret Position object
*/
function caretPosition() {
diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php
new file mode 100755
index 0000000000..49f4ca13e7
--- /dev/null
+++ b/phpBB/bin/phpbbcli.php
@@ -0,0 +1,36 @@
+#!/usr/bin/env php
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+if (php_sapi_name() != 'cli')
+{
+ echo 'This program must be run from the command line.' . PHP_EOL;
+ exit(1);
+}
+
+define('IN_PHPBB', true);
+$phpbb_root_path = __DIR__ . '/../';
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+require($phpbb_root_path . 'includes/startup.' . $phpEx);
+require($phpbb_root_path . 'config.' . $phpEx);
+require($phpbb_root_path . 'includes/constants.' . $phpEx);
+require($phpbb_root_path . 'includes/functions.' . $phpEx);
+require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
+require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
+
+$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
+$phpbb_class_loader->register();
+$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
+$phpbb_class_loader_ext->register();
+
+$phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config");
+
+$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION);
+$application->register_container_commands($phpbb_container);
+$application->run();
diff --git a/phpBB/composer.json b/phpBB/composer.json
index 455ad49aac..3cf83a8fe9 100644
--- a/phpBB/composer.json
+++ b/phpBB/composer.json
@@ -3,6 +3,7 @@
"require": {
"lusitanian/oauth": "0.2.*",
"symfony/config": "2.3.*",
+ "symfony/console": "2.3.*",
"symfony/dependency-injection": "2.3.*",
"symfony/event-dispatcher": "2.3.*",
"symfony/http-kernel": "2.3.*",
@@ -14,6 +15,7 @@
"fabpot/goutte": "1.0.*",
"phpunit/dbunit": "1.2.*",
"phpunit/phpunit": "3.7.*",
- "phing/phing": "2.4.*"
+ "phing/phing": "2.4.*",
+ "squizlabs/php_codesniffer": "1.*"
}
}
diff --git a/phpBB/composer.lock b/phpBB/composer.lock
index eb57ddb4d9..c0eb7afcbb 100644
--- a/phpBB/composer.lock
+++ b/phpBB/composer.lock
@@ -3,7 +3,7 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "0bc0fd0d784720629ae0ba6d4be6a577",
+ "hash": "cc83663b780856890f787b9b4d6ea474",
"packages": [
{
"name": "lusitanian/oauth",
@@ -155,6 +155,59 @@
"time": "2013-08-06 05:49:23"
},
{
+ "name": "symfony/console",
+ "version": "v2.3.6",
+ "target-dir": "Symfony/Component/Console",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Console.git",
+ "reference": "f880062d56edefb25b36f2defa65aafe65959dc7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Console/zipball/f880062d56edefb25b36f2defa65aafe65959dc7",
+ "reference": "f880062d56edefb25b36f2defa65aafe65959dc7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "symfony/event-dispatcher": "~2.1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Console\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "http://symfony.com",
+ "time": "2013-09-25 06:04:15"
+ },
+ {
"name": "symfony/debug",
"version": "v2.3.4",
"target-dir": "Symfony/Component/Debug",
@@ -302,7 +355,7 @@
"Symfony\\Component\\EventDispatcher\\": ""
}
},
- "notification-url": "http://packagist.org/downloads/",
+ "notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
@@ -1376,6 +1429,76 @@
"time": "2013-01-13 10:24:48"
},
{
+ "name": "squizlabs/php_codesniffer",
+ "version": "1.5.0RC4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "146a9b54e4adeaca0a3ae073e0a8a03570d6cc43"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/146a9b54e4adeaca0a3ae073e0a8a03570d6cc43",
+ "reference": "146a9b54e4adeaca0a3ae073e0a8a03570d6cc43",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.1.2"
+ },
+ "suggest": {
+ "phpunit/php-timer": "dev-master"
+ },
+ "bin": [
+ "scripts/phpcs"
+ ],
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "CodeSniffer.php",
+ "CodeSniffer/CLI.php",
+ "CodeSniffer/Exception.php",
+ "CodeSniffer/File.php",
+ "CodeSniffer/Report.php",
+ "CodeSniffer/Reporting.php",
+ "CodeSniffer/Sniff.php",
+ "CodeSniffer/Tokens.php",
+ "CodeSniffer/Reports/",
+ "CodeSniffer/CommentParser/",
+ "CodeSniffer/Tokenizers/",
+ "CodeSniffer/DocGenerators/",
+ "CodeSniffer/Standards/AbstractPatternSniff.php",
+ "CodeSniffer/Standards/AbstractScopeSniff.php",
+ "CodeSniffer/Standards/AbstractVariableSniff.php",
+ "CodeSniffer/Standards/IncorrectPatternException.php",
+ "CodeSniffer/Standards/Generic/Sniffs/",
+ "CodeSniffer/Standards/MySource/Sniffs/",
+ "CodeSniffer/Standards/PEAR/Sniffs/",
+ "CodeSniffer/Standards/PSR1/Sniffs/",
+ "CodeSniffer/Standards/PSR2/Sniffs/",
+ "CodeSniffer/Standards/Squiz/Sniffs/",
+ "CodeSniffer/Standards/Zend/Sniffs/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "http://www.squizlabs.com/php-codesniffer",
+ "keywords": [
+ "phpcs",
+ "standards"
+ ],
+ "time": "2013-09-26 00:14:02"
+ },
+ {
"name": "symfony/browser-kit",
"version": "v2.3.4",
"target-dir": "Symfony/Component/BrowserKit",
diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml
new file mode 100644
index 0000000000..c85a9d19ed
--- /dev/null
+++ b/phpBB/config/console.yml
@@ -0,0 +1,35 @@
+services:
+ console.command.extension.disable:
+ class: phpbb\console\command\extension\disable
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.enable:
+ class: phpbb\console\command\extension\enable
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.purge:
+ class: phpbb\console\command\extension\purge
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.extension.show:
+ class: phpbb\console\command\extension\show
+ arguments:
+ - @ext.manager
+ tags:
+ - { name: console.command }
+
+ console.command.fixup.recalculate_email_hash:
+ class: phpbb\console\command\fixup\recalculate_email_hash
+ arguments:
+ - @dbal.conn
+ tags:
+ - { name: console.command }
diff --git a/phpBB/config/notifications.yml b/phpBB/config/notifications.yml
index 6fecae2aeb..5675e76a99 100644
--- a/phpBB/config/notifications.yml
+++ b/phpBB/config/notifications.yml
@@ -266,7 +266,7 @@ services:
- { name: notification.type }
notification.type.report_post_closed:
- class: phpbb\notification\type\report_post
+ class: phpbb\notification\type\report_post_closed
scope: prototype # scope MUST be prototype for this to work!
arguments:
- @user_loader
@@ -319,6 +319,24 @@ services:
tags:
- { name: notification.type }
+ notification.type.admin_activate_user:
+ class: phpbb\notification\type\admin_activate_user
+ scope: prototype # scope MUST be prototype for this to work!
+ arguments:
+ - @user_loader
+ - @dbal.conn
+ - @cache.driver
+ - @user
+ - @auth
+ - @config
+ - %core.root_path%
+ - %core.php_ext%
+ - %tables.notification_types%
+ - %tables.notifications%
+ - %tables.user_notifications%
+ tags:
+ - { name: notification.type }
+
notification.method.email:
class: phpbb\notification\method\email
scope: prototype # scope MUST be prototype for this to work!
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index 09fcb5dc8f..2ad0586961 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -6,6 +6,7 @@ imports:
- { resource: avatars.yml }
- { resource: feed.yml }
- { resource: auth_providers.yml }
+ - { resource: console.yml }
- { resource: mimetype_guessers.yml }
services:
@@ -23,7 +24,6 @@ services:
arguments:
- @config
- @avatar.driver_collection
- - @service_container
cache:
class: phpbb\cache\service
@@ -142,10 +142,17 @@ services:
class: phpbb\event\extension_subscriber_loader
arguments:
- @dispatcher
- - @ext.manager
+ - @event.listener_collection
calls:
- [load, []]
+ event.listener_collection:
+ class: phpbb\di\service_collection
+ arguments:
+ - @service_container
+ tags:
+ - { name: service_collection, tag: event.listener }
+
ext.manager:
class: phpbb\extension\manager
arguments:
@@ -238,6 +245,7 @@ services:
- @notification.method_collection
- @service_container
- @user_loader
+ - @config
- @dbal.conn
- @cache
- @user
diff --git a/phpBB/develop/export_events_for_wiki.php b/phpBB/develop/export_events_for_wiki.php
new file mode 100644
index 0000000000..b276b4c5fa
--- /dev/null
+++ b/phpBB/develop/export_events_for_wiki.php
@@ -0,0 +1,307 @@
+<?php
+/**
+*
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+if (php_sapi_name() != 'cli')
+{
+ die("This program must be run from the command line.\n");
+}
+
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+$phpbb_root_path = __DIR__ . '/../';
+
+function usage()
+{
+ echo "Usage: export_events_for_wiki.php COMMAND\n";
+ echo "\n";
+ echo "acp:\n";
+ echo " Export all events for files in the acp style.\n";
+ echo "\n";
+ echo "styles:\n";
+ echo " Export all events for files in the prosilver and subsilver2 styles.\n";
+ echo "\n";
+ echo "php:\n";
+ echo " Export all events for php-files.\n";
+ exit(2);
+}
+
+function export_from_eventsmd($phpbb_root_path, $filter)
+{
+ $file_content = file_get_contents($phpbb_root_path . 'docs/events.md');
+
+ $events = explode("\n\n", $file_content);
+ foreach ($events as $event)
+ {
+ // Last row of the file
+ if (strpos($event, "\n===\n") === false) continue;
+
+ list($event_name, $details) = explode("\n===\n", $event);
+
+ if ($filter == 'acp' && strpos($event_name, 'acp_') !== 0) continue;
+ if ($filter == 'styles' && strpos($event_name, 'acp_') === 0) continue;
+
+ list($file_details, $details) = explode("\n* Since: ", $details);
+ list($version, $explanition) = explode("\n* Purpose: ", $details);
+
+ echo "|- id=\"{$event_name}\"\n";
+ echo "| [[#{$event_name}|{$event_name}]] || ";
+
+ if (strpos($file_details, "* Locations:\n + ") === 0)
+ {
+ $file_details = substr($file_details, strlen("* Locations:\n + "));
+ $files = explode("\n + ", $file_details);
+ $prosilver = $subsilver2 = array();
+ foreach ($files as $file)
+ {
+ if (strpos($file, 'styles/prosilver/template/') === 0)
+ {
+ $prosilver[] = substr($file, strlen('styles/prosilver/template/'));
+ }
+ if (strpos($file, 'styles/subsilver2/template/') === 0)
+ {
+ $subsilver2[] = substr($file, strlen('styles/subsilver2/template/'));
+ }
+ }
+ echo implode(', ', $prosilver) . ' || ' . implode(', ', $subsilver2);
+ }
+ else if ($filter == 'acp')
+ {
+ echo substr($file_details, strlen("* Location: adm/style/"));
+ }
+ echo " || {$version} || " . str_replace("\n", ' ', $explanition) . "\n";
+
+ }
+}
+
+function export_from_php($phpbb_root_path)
+{
+ $files = get_file_list($phpbb_root_path);
+ $events = array();
+ foreach ($files as $file)
+ {
+ $file_events = check_for_events($phpbb_root_path, $file);
+ if (!empty($file_events))
+ {
+ $events = array_merge($events, $file_events);
+ }
+ }
+
+ ksort($events);
+
+ foreach ($events as $event)
+ {
+ echo '|- id="' . $event['event'] . '"' . "\n";
+ echo '| [[#' . $event['event'] . '|' . $event['event'] . ']] || ' . $event['file'] . ' || ' . implode(', ', $event['arguments']) . ' || ' . $event['since'] . ' || ' . $event['description'] . "\n";
+ }
+}
+
+function check_for_events($phpbb_root_path, $file)
+{
+ $events = array();
+ $content = file_get_contents($phpbb_root_path . $file);
+
+ if (strpos($content, "phpbb_dispatcher->trigger_event('") || strpos($content, "phpbb_dispatcher->dispatch('"))
+ {
+ $lines = explode("\n", $content);
+ for ($i = 0, $num_lines = sizeof($lines); $i < $num_lines; $i++)
+ {
+ $event_line = 0;
+ if ($found_trigger_event = strpos($lines[$i], "phpbb_dispatcher->trigger_event('"))
+ {
+ $event_line = $i;
+ $event_name = $lines[$event_line];
+ $event_name = substr($event_name, $found_trigger_event + strlen("phpbb_dispatcher->trigger_event('"));
+ $event_name = substr($event_name, 0, strpos($event_name, "'"));
+
+ // Find $vars array lines
+ $find_varsarray_line = 1;
+ while (strpos($lines[$event_line - $find_varsarray_line], "vars = array('") === false)
+ {
+ $find_varsarray_line++;
+
+ if ($find_varsarray_line > min(50, $event_line))
+ {
+ throw new LogicException('Can not find "$vars = array()"-line for event "' . $event_name . '" in file "' . $file . '"');
+ }
+ }
+ $varsarray = substr(trim($lines[$event_line - $find_varsarray_line]), strlen("\$vars = array('"), -3);
+ $arguments = explode("', '", $varsarray);
+
+ // Validate $vars array with @var
+ $find_vars_line = 3;
+ $doc_vars = array();
+ while (strpos(trim($lines[$event_line - $find_vars_line]), '*') === 0)
+ {
+ $var_line = trim($lines[$event_line - $find_vars_line]);
+ $var_line = preg_replace('!\s+!', ' ', $var_line);
+ if (strpos($var_line, '* @var ') === 0)
+ {
+ $doc_line = explode(' ', $var_line);
+ if (isset($doc_line[3]))
+ {
+ $doc_vars[] = $doc_line[3];
+ }
+ }
+ $find_vars_line++;
+ }
+ if (sizeof($arguments) !== sizeof($doc_vars) && array_intersect($arguments, $doc_vars))
+ {
+ throw new LogicException('$vars array does not match the list of @var tags for event "' . $event_name . '" in file "' . $file . '"');
+ }
+ }
+ else if ($found_trigger_event = strpos($lines[$i], "phpbb_dispatcher->dispatch('"))
+ {
+ $event_line = $i;
+ $event_name = $lines[$event_line];
+ $event_name = substr($event_name, $found_trigger_event + strlen("phpbb_dispatcher->dispatch('"));
+ $event_name = substr($event_name, 0, strpos($event_name, "'"));
+ $arguments = array();
+ }
+
+ if ($event_line)
+ {
+ // Validate @event name
+ $find_event_line = 1;
+ while (strpos($lines[$event_line - $find_event_line], '* @event ') === false)
+ {
+ $find_event_line++;
+
+ if ($find_event_line > min(50, $event_line))
+ {
+ throw new LogicException('Can not find @event tag for event "' . $event_name . '" in file "' . $file . '"');
+ }
+ }
+ $event_name_tag = substr(trim($lines[$event_line - $find_event_line]), strlen('* @event '));
+ if ($event_name_tag !== $event_name)
+ {
+ throw new LogicException('Event name does not match @event tag for event "' . $event_name . '" in file "' . $file . '"');
+ }
+
+ // Find @since
+ $find_since_line = 1;
+ while (strpos($lines[$event_line - $find_since_line], '* @since ') === false)
+ {
+ $find_since_line++;
+
+ if ($find_since_line > min(50, $event_line))
+ {
+ throw new LogicException('Can not find @since tag for event "' . $event_name . '" in file "' . $file . '"');
+ }
+ }
+ $since = substr(trim($lines[$event_line - $find_since_line]), strlen('* @since '));
+ $since = ($since == '3.1-A1') ? '3.1.0-a1' : $since;
+
+ // Find event description line
+ $find_description_line = 3;
+ while (strpos(trim($lines[$event_line - $find_description_line]), '*') === 0)
+ {
+ $find_description_line++;
+
+ if ($find_description_line > min(50, $event_line))
+ {
+ throw new LogicException('Can not find description-line for event "' . $event_name . '" in file "' . $file . '"');
+ }
+ }
+ $description = substr(trim($lines[$event_line - $find_description_line + 1]), strlen('* '));
+
+ $events[$event_name] = array(
+ 'event' => $event_name,
+ 'file' => $file,
+ 'arguments' => $arguments,
+ 'since' => $since,
+ 'description' => $description,
+ );
+ }
+ }
+ }
+
+ return $events;
+}
+
+/**
+* Returns a list of files in that directory
+*
+* Works recursive with any depth
+*
+* @param string $dir Directory to go through
+* @return array List of files (including directories from within $dir
+*/
+function get_file_list($dir, $path = '')
+{
+ try
+ {
+ $iterator = new \DirectoryIterator($dir);
+ }
+ catch (Exception $e)
+ {
+ return array();
+ }
+
+ $files = array();
+ foreach ($iterator as $file_info)
+ {
+ if ($file_info->isDot())
+ {
+ continue;
+ }
+
+ // Do not scan some directories
+ if ($file_info->isDir() && (
+ ($path == '' && in_array($file_info->getFilename(), array('cache', 'develop', 'ext', 'files', 'language', 'store', 'vendor')))
+ || ($path == '/includes' && in_array($file_info->getFilename(), array('utf')))
+ || ($path == '/phpbb/db/migration' && in_array($file_info->getFilename(), array('data')))
+ || ($path == '/phpbb' && in_array($file_info->getFilename(), array('event')))
+ ))
+ {
+ continue;
+ }
+ else if ($file_info->isDir())
+ {
+ $sub_dir = get_file_list($file_info->getPath() . '/' . $file_info->getFilename(), $path . '/' . $file_info->getFilename());
+ foreach ($sub_dir as $file)
+ {
+ $files[] = $file_info->getFilename() . '/' . $file;
+ }
+ }
+ else if ($file_info->getExtension() == 'php')
+ {
+ $files[] = $file_info->getFilename();
+ }
+ }
+
+ return $files;
+}
+
+function validate_argument_count($arguments, $count)
+{
+ if ($arguments <= $count)
+ {
+ usage();
+ }
+}
+
+validate_argument_count($argc, 1);
+
+$action = $argv[1];
+
+switch ($action)
+{
+ case 'acp':
+ export_from_eventsmd($phpbb_root_path, 'acp');
+ break;
+
+ case 'styles':
+ export_from_eventsmd($phpbb_root_path, 'styles');
+ break;
+
+ case 'php':
+ export_from_php($phpbb_root_path);
+ break;
+
+ default:
+ usage();
+}
diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php
deleted file mode 100644
index 43621f3080..0000000000
--- a/phpBB/develop/extensions.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
-*
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-define('IN_PHPBB', 1);
-define('ANONYMOUS', 1);
-$phpEx = substr(strrchr(__FILE__, '.'), 1);
-$phpbb_root_path = __DIR__.'/../';
-
-include($phpbb_root_path . 'common.'.$phpEx);
-
-function usage()
-{
- echo "Usage: extensions.php COMMAND [OPTION]...\n";
- echo "Console extension manager.\n";
- echo "\n";
- echo "list:\n";
- echo " Lists all extensions in the database and the filesystem.\n";
- echo "\n";
- echo "enable NAME:\n";
- echo " Enables the specified extension.\n";
- echo "\n";
- echo "disable NAME:\n";
- echo " Disables the specified extension.\n";
- echo "\n";
- echo "purge NAME:\n";
- echo " Purges the specified extension.\n";
- exit(2);
-}
-
-function list_extensions()
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->load_extensions();
- $all = array_keys($phpbb_extension_manager->all_available());
-
- if (empty($all))
- {
- echo "There were no extensions found.\n";
- exit(3);
- }
-
- echo "Enabled:\n";
- $enabled = array_keys($phpbb_extension_manager->all_enabled());
- print_extensions($enabled);
- echo "\n";
-
- echo "Disabled:\n";
- $disabled = array_keys($phpbb_extension_manager->all_disabled());
- print_extensions($disabled);
- echo "\n";
-
- echo "Available:\n";
- $purged = array_diff($all, $enabled, $disabled);
- print_extensions($purged);
-}
-
-function print_extensions($exts)
-{
- foreach ($exts as $ext)
- {
- echo "- $ext\n";
- }
-}
-
-function enable_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->enable($name);
-}
-
-function disable_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->disable($name);
-}
-
-function purge_extension($name)
-{
- global $phpbb_extension_manager;
-
- $phpbb_extension_manager->purge($name);
-}
-
-function validate_argument_count($count)
-{
- global $argv;
-
- if (count($argv) <= $count)
- {
- usage();
- }
-}
-
-validate_argument_count(1);
-
-$action = $argv[1];
-
-switch ($action)
-{
- case 'list':
- list_extensions();
- break;
-
- case 'enable':
- validate_argument_count(2);
- enable_extension($argv[2]);
- break;
-
- case 'disable':
- validate_argument_count(2);
- disable_extension($argv[2]);
- break;
-
- case 'purge':
- validate_argument_count(2);
- purge_extension($argv[2]);
- break;
-
- default:
- usage();
-}
diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html
index 7c96dd1b78..b10d2772a2 100644
--- a/phpBB/docs/CHANGELOG.html
+++ b/phpBB/docs/CHANGELOG.html
@@ -46,6 +46,7 @@
<ol>
<li><a href="#changelog">Changelog</a>
<ol style="list-style-type: lower-roman;">
+ <li><a href="#v310a1">Changes since 3.1.0-a1</a></li>
<li><a href="#v30x">Changes since 3.0.x</a></li>
<li><a href="#v3011">Changes since 3.0.11</a></li>
<li><a href="#v3010">Changes since 3.0.10</a></li>
@@ -87,7 +88,83 @@
<div class="content">
- <a name="v30x"></a><h3>1.i. Changes since 3.0.x</h3>
+ <a name="v310a1"></a><h3>1.i. Changes since 3.1.0-a1</h3>
+
+<h4>Bug</h4>
+<ul>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-4776">PHPBB3-4776</a>] - Long post gets hidden behind posting profile</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10449">PHPBB3-10449</a>] - Lines spilling in subscriptions view</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10948">PHPBB3-10948</a>] - Color swatch in 3.1 does not display properly</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11030">PHPBB3-11030</a>] - I beam cursor in prosilver when hovering on browse button for uploading attachments</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11073">PHPBB3-11073</a>] - Reported/Unapproved moderator information in viewtopic is striked through instead of underlined</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11138">PHPBB3-11138</a>] - Resync features in ACP should not use AJAX</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11280">PHPBB3-11280</a>] - Double clicking &quot;mark topics read&quot; produces an error the second time</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11525">PHPBB3-11525</a>] - phpbb_avatar_manager::clean_row collapses user_id and group_id</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11534">PHPBB3-11534</a>] - Remote avatar does not properly check if remote file is an image</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11626">PHPBB3-11626</a>] - Auth ACP options should be moved to separate html file</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11663">PHPBB3-11663</a>] - In generate_text_for_storage the function does not check for errors of parse_message:parse() and act accordingly</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11691">PHPBB3-11691</a>] - Soft delete migration conversion should be staggered</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11739">PHPBB3-11739</a>] - Wrong name for UCP Module &quot;Edit &quot;Remember Me&quot; login keys&quot;</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11842">PHPBB3-11842</a>] - Create a new group Error with avatar driver</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11857">PHPBB3-11857</a>] - Avatar manager must not depend on entire container</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11872">PHPBB3-11872</a>] - MCP: Users with most warnings list is invalid</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11896">PHPBB3-11896</a>] - &quot;Mark all notifications read&quot; does not work</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11899">PHPBB3-11899</a>] - New ajax poll vote should give feedback while waiting for servers response</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11916">PHPBB3-11916</a>] - Remove files from hidden attach list after deletion</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11922">PHPBB3-11922</a>] - Migrator fails to remove columns on MSSQL when they have/had an index</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11923">PHPBB3-11923</a>] - UCP avatar error when user has no permissions to change his/her avatar</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11924">PHPBB3-11924</a>] - Add a script to export the events in wiki format</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11926">PHPBB3-11926</a>] - Plupload Migration has a broken dependency.</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11927">PHPBB3-11927</a>] - Missing Files after 3.1.0-A1 Automatic Updater</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11930">PHPBB3-11930</a>] - Avatar paths are incorrect when using app.php</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11935">PHPBB3-11935</a>] - Invalid HTML in &quot;Sort By&quot; form elements in Prosilver</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11936">PHPBB3-11936</a>] - Fixes to Notifications Window</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11939">PHPBB3-11939</a>] - Quick reply editor has unnecessary data-ajax attribute</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11943">PHPBB3-11943</a>] - $VAR = false has unexpected result</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11945">PHPBB3-11945</a>] - Focused buttons are hard to notice</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11947">PHPBB3-11947</a>] - Notification popup does not appear when clicking number in text</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11948">PHPBB3-11948</a>] - Extensions should be allowed to have more then 1 routing file</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11949">PHPBB3-11949</a>] - cannot upgrade to 3.1</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11960">PHPBB3-11960</a>] - Responsive design removed teampage names</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11972">PHPBB3-11972</a>] - Add template event posting_editor_subject_after</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11977">PHPBB3-11977</a>] - Ajax delete should disable moving options</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11982">PHPBB3-11982</a>] - Navigation is shown above AJAX background in ACP</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11983">PHPBB3-11983</a>] - Subscriptions argument missing from docblock in ucp_notifications</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11986">PHPBB3-11986</a>] - Undefined index: poster_id in file.php</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11987">PHPBB3-11987</a>] - {ROOT_PATH} in ACP leads to adm/</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11990">PHPBB3-11990</a>] - Remove result_mssqlnative from acp_database</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11991">PHPBB3-11991</a>] - PHP notices when closing reported posts entries in MCP</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11992">PHPBB3-11992</a>] - Wrong variable to close &quot;Users with most warnings&quot; block at MCP</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11994">PHPBB3-11994</a>] - Admin options for extensions are bad/misleading</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11995">PHPBB3-11995</a>] - Reverting a config.remove fails</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12002">PHPBB3-12002</a>] - Extension management page should use generate/check link hash</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12007">PHPBB3-12007</a>] - Default last_result of callable steps must be integer instead of false</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12008">PHPBB3-12008</a>] - &quot;Prune notifications&quot; cron task always ran, blocking others</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12016">PHPBB3-12016</a>] - Event listeners should be services</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12017">PHPBB3-12017</a>] - Extension tests are broken on current develop</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12018">PHPBB3-12018</a>] - Use path_helper for admin style CSS in sql report</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12023">PHPBB3-12023</a>] - New css files missing after update</li>
+</ul>
+<h4>Improvement</h4>
+<ul>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11552">PHPBB3-11552</a>] - Responsive design for prosilver</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11746">PHPBB3-11746</a>] - Add &quot;account activation required&quot; notification for Administrators</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11921">PHPBB3-11921</a>] - Improve Notifications and PMs in the header</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11928">PHPBB3-11928</a>] - Replace AJAX loading info pop up with animation</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11957">PHPBB3-11957</a>] - Responsive design for admin control panel</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11973">PHPBB3-11973</a>] - Remove logic from language files where possible</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11974">PHPBB3-11974</a>] - All timezones should be translatable</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11975">PHPBB3-11975</a>] - Add ACP link next to MCP</li>
+</ul>
+<h4>Task</h4>
+<ul>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11031">PHPBB3-11031</a>] - Bring phpBB2 converter up to speed with 3.1 changes</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11980">PHPBB3-11980</a>] - Setup PHP Code Sniffer</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11981">PHPBB3-11981</a>] - Review/Fix Code Sniffer complaints</li>
+<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11998">PHPBB3-11998</a>] - Add console / command line client environment </li>
+</ul>
+
+ <a name="v30x"></a><h3>1.ii. Changes since 3.0.x</h3>
<h4>Bug</h4>
<ul>
@@ -768,7 +845,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11913">PHPBB3-11913</a>] - Apply reorganisation of download.phpbb.com to build_announcement.php</li>
</ul>
- <a name="v3011"></a><h3>1.ii. Changes since 3.0.11</h3>
+ <a name="v3011"></a><h3>1.iii. Changes since 3.0.11</h3>
<h4>Bug</h4>
<ul>
@@ -923,7 +1000,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11753">PHPBB3-11753</a>] - Upgrade mysql_upgrader.php schema data.</li>
</ul>
- <a name="v3010"></a><h3>1.iii. Changes since 3.0.10</h3>
+ <a name="v3010"></a><h3>1.iv. Changes since 3.0.10</h3>
<h4>Bug</h4>
<ul>
@@ -1048,7 +1125,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10909">PHPBB3-10909</a>] - Update Travis Test Configuration: Travis no longer supports PHP 5.3.2</li>
</ul>
- <a name="v309"></a><h3>1.iv. Changes since 3.0.9</h3>
+ <a name="v309"></a><h3>1.v. Changes since 3.0.9</h3>
<h4>Bug</h4>
<ul>
@@ -1184,7 +1261,7 @@
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-10480">PHPBB3-10480</a>] - Automate changelog building</li>
</ul>
- <a name="v308"></a><h3>1.v. Changes since 3.0.8</h3>
+ <a name="v308"></a><h3>1.vi. Changes since 3.0.8</h3>
<h4> Bug
</h4>
@@ -1552,7 +1629,7 @@
</ul>
- <a name="v307-PL1"></a><h3>1.vi. Changes since 3.0.7-PL1</h3>
+ <a name="v307-PL1"></a><h3>1.vii. Changes since 3.0.7-PL1</h3>
<h4> Security
</h4>
<ul>
@@ -2010,13 +2087,13 @@
</ul>
- <a name="v307"></a><h3>1.vii. Changes since 3.0.7</h3>
+ <a name="v307"></a><h3>1.viii. Changes since 3.0.7</h3>
<ul>
<li>[Sec] Do not expose forum content of forums with ACL entries but no actual permission in ATOM Feeds. (Bug #58595)</li>
</ul>
- <a name="v306"></a><h3>1.viii. Changes since 3.0.6</h3>
+ <a name="v306"></a><h3>1.ix. Changes since 3.0.6</h3>
<ul>
<li>[Fix] Allow ban reason and length to be selected and copied in ACP and subsilver2 MCP. (Bug #51095)</li>
@@ -2120,7 +2197,7 @@
</ul>
- <a name="v305"></a><h3>1.ix. Changes since 3.0.5</h3>
+ <a name="v305"></a><h3>1.x. Changes since 3.0.5</h3>
<ul>
<li>[Fix] Allow whitespaces in avatar gallery names. (Bug #44955)</li>
@@ -2342,7 +2419,7 @@
<li>[Feature] Send anonymous statistical information to phpBB on installation and update (optional).</li>
</ul>
- <a name="v304"></a><h3>1.x. Changes since 3.0.4</h3>
+ <a name="v304"></a><h3>1.xi. Changes since 3.0.4</h3>
<ul>
<li>[Fix] Delete user entry from ban list table upon user deletion (Bug #40015 - Patch by TerraFrost)</li>
@@ -2431,7 +2508,7 @@
<li>[Sec] Only use forum id supplied for posting if global announcement detected. (Reported by nickvergessen)</li>
</ul>
- <a name="v303"></a><h3>1.xi. Changes since 3.0.3</h3>
+ <a name="v303"></a><h3>1.xii. Changes since 3.0.3</h3>
<ul>
<li>[Fix] Allow mixed-case template directories to be inherited (Bug #36725)</li>
@@ -2463,7 +2540,7 @@
<li>[Sec] Ask for forum password if post within passworded forum quoted in private message. (Reported by nickvergessen)</li>
</ul>
- <a name="v302"></a><h3>1.xii. Changes since 3.0.2</h3>
+ <a name="v302"></a><h3>1.xiii. Changes since 3.0.2</h3>
<ul>
<li>[Fix] Correctly set topic starter if first post in topic removed (Bug #30575 - Patch by blueray2048)</li>
@@ -2562,7 +2639,7 @@
<li>[Sec Precaution] Stricter validation of the HTTP_HOST header (Thanks to Techie-Micheal et al for pointing out possible issues in derived code)</li>
</ul>
- <a name="v301"></a><h3>1.xiii. Changes since 3.0.1</h3>
+ <a name="v301"></a><h3>1.xiv. Changes since 3.0.1</h3>
<ul>
<li>[Fix] Ability to set permissions on non-mysql dbms (Bug #24955)</li>
@@ -2610,7 +2687,7 @@
<li>[Sec] Only allow urls gone through redirect() being used within login_box(). (thanks nookieman)</li>
</ul>
- <a name="v300"></a><h3>1.xiv Changes since 3.0.0</h3>
+ <a name="v300"></a><h3>1.xv Changes since 3.0.0</h3>
<ul>
<li>[Change] Validate birthdays (Bug #15004)</li>
@@ -2681,7 +2758,7 @@
<li>[Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)</li>
</ul>
- <a name="v30rc8"></a><h3>1.xv. Changes since 3.0.RC8</h3>
+ <a name="v30rc8"></a><h3>1.xvi. Changes since 3.0.RC8</h3>
<ul>
<li>[Fix] Cleaned usernames contain only single spaces, so &quot;a_name&quot; and &quot;a__name&quot; are treated as the same name (Bug #15634)</li>
@@ -2690,7 +2767,7 @@
<li>[Fix] Call garbage_collection() within database updater to correctly close connections (affects Oracle for example)</li>
</ul>
- <a name="v30rc7"></a><h3>1.xvi. Changes since 3.0.RC7</h3>
+ <a name="v30rc7"></a><h3>1.xvii. Changes since 3.0.RC7</h3>
<ul>
<li>[Fix] Fixed MSSQL related bug in the update system</li>
@@ -2725,7 +2802,7 @@
<li>[Fix] No duplication of active topics (Bug #15474)</li>
</ul>
- <a name="v30rc6"></a><h3>1.xvii. Changes since 3.0.RC6</h3>
+ <a name="v30rc6"></a><h3>1.xviii. Changes since 3.0.RC6</h3>
<ul>
<li>[Fix] Submitting language changes using acp_language (Bug #14736)</li>
@@ -2735,7 +2812,7 @@
<li>[Fix] Able to request new password (Bug #14743)</li>
</ul>
- <a name="v30rc5"></a><h3>1.xviii. Changes since 3.0.RC5</h3>
+ <a name="v30rc5"></a><h3>1.xix. Changes since 3.0.RC5</h3>
<ul>
<li>[Feature] Removing constant PHPBB_EMBEDDED in favor of using an exit_handler(); the constant was meant to achive this more or less.</li>
@@ -2798,7 +2875,7 @@
<li>[Sec] New password hashing mechanism for storing passwords (#i42)</li>
</ul>
- <a name="v30rc4"></a><h3>1.xix. Changes since 3.0.RC4</h3>
+ <a name="v30rc4"></a><h3>1.xx. Changes since 3.0.RC4</h3>
<ul>
<li>[Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)</li>
@@ -2849,7 +2926,7 @@
<li>[Fix] odbc_autocommit causing existing result sets to be dropped (Bug #14182)</li>
</ul>
- <a name="v30rc3"></a><h3>1.xx. Changes since 3.0.RC3</h3>
+ <a name="v30rc3"></a><h3>1.xxi. Changes since 3.0.RC3</h3>
<ul>
<li>[Fix] Fixing some subsilver2 and prosilver style issues</li>
@@ -2958,7 +3035,7 @@
</ul>
- <a name="v30rc2"></a><h3>1.xxi. Changes since 3.0.RC2</h3>
+ <a name="v30rc2"></a><h3>1.xxii. Changes since 3.0.RC2</h3>
<ul>
<li>[Fix] Re-allow searching within the memberlist</li>
@@ -3004,7 +3081,7 @@
</ul>
- <a name="v30rc1"></a><h3>1.xxii. Changes since 3.0.RC1</h3>
+ <a name="v30rc1"></a><h3>1.xxiii. Changes since 3.0.RC1</h3>
<ul>
<li>[Fix] (X)HTML issues within the templates (Bug #11255, #11255)</li>
diff --git a/phpBB/docs/events.md b/phpBB/docs/events.md
index bef4727149..b15b8b2e6e 100644
--- a/phpBB/docs/events.md
+++ b/phpBB/docs/events.md
@@ -1,41 +1,49 @@
acp_forums_normal_settings_append
===
* Location: adm/style/acp_forums.html
+* Since: 3.1.0-a1
* Purpose: Add settings to forums
acp_main_actions_append
===
* Location: adm/style/acp_main.html
+* Since: 3.1.0-a1
* Purpose: Add actions to the ACP main page below the cache purge action
acp_main_notice_after
===
* Location: adm/style/acp_main.html
+* Since: 3.1.0-a1
* Purpose: Add notices or other blocks in the ACP below other configuration notices
acp_overall_footer_after
===
* Location: adm/style/overall_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content below the footer in the ACP
acp_overall_header_head_append
===
* Location: adm/style/overall_header.html
-* Add assets within the `<head>` tags in the ACP
+* Since: 3.1.0-a1
+* Purpose: Add assets within the `<head>` tags in the ACP
acp_simple_footer_after
===
* Location: adm/style/simple_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content below the simple footer in the ACP
acp_simple_header_head_append
===
* Location: adm/style/overall_header.html
-* Add assets within the `<head>` tags in the simple header of the ACP
+* Since: 3.1.0-a1
+* Purpose: Add assets within the `<head>` tags in the simple header of the ACP
acp_users_overview_options_append
===
* Location: adm/style/acp_users.html
+* Since: 3.1.0-a1
* Purpose: Add options and settings on user overview page
forumlist_body_last_post_title_prepend
@@ -43,6 +51,7 @@ forumlist_body_last_post_title_prepend
* Locations:
+ styles/prosilver/template/forumlist_body.html
+ styles/subsilver2/template/forumlist_body.html
+* Since: 3.1.0-a1
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
index_body_stat_blocks_before
@@ -50,6 +59,7 @@ index_body_stat_blocks_before
* Locations:
+ styles/prosilver/template/index_body.html
+ styles/subsilver2/template/index_body.html
+* Since: 3.1.0-a1
* Purpose: Add new statistic blocks above the Who Is Online and Board Statistics blocks
memberlist_body_username_append
@@ -57,6 +67,7 @@ memberlist_body_username_append
* Locations:
+ styles/prosilver/template/memberlist_body.html
+ styles/subsilver2/template/memberlist_body.html
+* Since: 3.1.0-a1
* Purpose: Add information after every username in the memberlist. Works in
all display modes (leader, group and normal memberlist).
@@ -65,6 +76,7 @@ memberlist_body_username_prepend
* Locations:
+ styles/prosilver/template/memberlist_body.html
+ styles/subsilver2/template/memberlist_body.html
+* Since: 3.1.0-a1
* Purpose: Add information before every username in the memberlist. Works in
all display modes (leader, group and normal memberlist).
@@ -73,6 +85,7 @@ memberlist_view_user_statistics_after
* Locations:
+ styles/prosilver/template/memberlist_view.html
+ styles/subsilver2/template/memberlist_view.html
+* Since: 3.1.0-a1
* Purpose: Add entries after the user statistics part of any user profile
memberlist_view_user_statistics_before
@@ -80,6 +93,7 @@ memberlist_view_user_statistics_before
* Locations:
+ styles/prosilver/template/memberlist_view.html
+ styles/subsilver2/template/memberlist_view.html
+* Since: 3.1.0-a1
* Purpose: Add entries before the user statistics part of any user profile
overall_footer_after
@@ -87,18 +101,30 @@ overall_footer_after
* Locations:
+ styles/prosilver/template/overall_footer.html
+ styles/subsilver2/template/overall_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content at the end of the file, directly prior to the `</body>` tag
overall_footer_breadcrumb_append
===
-* Location: styles/prosilver/template/overall_footer.html
+* Locations:
+ + styles/prosilver/template/overall_footer.html
+* Since: 3.1.0-a1
* Purpose: Add links to the list of breadcrumbs in the footer
+overall_footer_content_after
+===
+* Locations:
+ + styles/prosilver/template/overall_footer.html
+ + styles/subsilver2/template/overall_footer.html
+* Since: 3.1.0-a3
+* Purpose: Add content on all pages after the main content, before the footer
+
overall_footer_copyright_append
===
* Locations:
+ styles/prosilver/template/overall_footer.html
+ styles/subsilver2/template/overall_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content after the copyright line (no new line by default), before the ACP link
overall_footer_copyright_prepend
@@ -106,6 +132,7 @@ overall_footer_copyright_prepend
* Locations:
+ styles/prosilver/template/overall_footer.html
+ styles/subsilver2/template/overall_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content before the copyright line
overall_header_breadcrumb_append
@@ -113,35 +140,84 @@ overall_header_breadcrumb_append
* Locations:
+ styles/prosilver/template/overall_header.html
+ styles/subsilver2/template/breadcrumbs.html
+* Since: 3.1.0-a1
* Purpose: Add links to the list of breadcrumbs in the header
+overall_header_content_before
+===
+* Locations:
+ + styles/prosilver/template/overall_header.html
+ + styles/subsilver2/template/overall_header.html
+* Since: 3.1.0-a3
+* Purpose: Add content on all pages before the main content, after the header
+
overall_header_head_append
===
* Locations:
+ styles/prosilver/template/overall_header.html
+ styles/subsilver2/template/overall_header.html
+* Since: 3.1.0-a1
* Purpose: Add asset calls directly before the `</head>` tag
overall_header_navigation_append
===
-* Location: styles/prosilver/template/overall_header.html
+* Locations:
+ + styles/prosilver/template/overall_header.html
+* Since: 3.1.0-a1
* Purpose: Add links after the navigation links in the header
overall_header_navigation_prepend
===
-* Location: styles/prosilver/template/overall_header.html
+* Locations:
+ + styles/prosilver/template/overall_header.html
+* Since: 3.1.0-a1
* Purpose: Add links before the navigation links in the header
+posting_editor_message_after
+===
+* Locations:
+ + styles/prosilver/template/posting_editor.html
+ + styles/subsilver2/template/posting_body.html
+* Since: 3.1.0-a2
+* Purpose: Add field (e.g. textbox) to the posting screen after the message
+
+posting_editor_message_before
+===
+* Locations:
+ + styles/prosilver/template/posting_editor.html
+ + styles/subsilver2/template/posting_body.html
+* Since: 3.1.0-a2
+* Purpose: Add field (e.g. textbox) to the posting screen before the message
+
posting_editor_options_prepend
===
* Locations:
+ styles/prosilver/template/posting_editor.html
- + styles/prosilver/template/posting_body.html
+ + styles/subsilver2/template/posting_body.html
+* Since: 3.1.0-a1
* Purpose: Add posting options on the posting screen
+posting_editor_subject_after
+===
+* Locations:
+ + styles/prosilver/template/posting_editor.html
+ + styles/subsilver2/template/posting_body.html
+* Since: 3.1.0-a2
+* Purpose: Add field (e.g. textbox) to the posting screen after the subject
+
+posting_editor_subject_before
+===
+* Locations:
+ + styles/prosilver/template/posting_editor.html
+ + styles/subsilver2/template/posting_body.html
+* Since: 3.1.0-a2
+* Purpose: Add field (e.g. textbox) to the posting screen before the subject
+
simple_footer_after
===
-* Location: styles/prosilver/template/simple_footer.html
+* Locations:
+ + styles/prosilver/template/simple_footer.html
+* Since: 3.1.0-a1
* Purpose: Add content directly prior to the `</body>` tag of the simple footer
topiclist_row_prepend
@@ -151,6 +227,7 @@ topiclist_row_prepend
+ styles/prosilver/template/viewforum_body.html
+ styles/subsilver2/template/search_results.html
+ styles/subsilver2/template/viewforum_body.html
+* Since: 3.1.0-a1
* Purpose: Add content into topic rows (inside the elements containing topic titles)
topiclist_row_append
@@ -160,23 +237,30 @@ topiclist_row_append
+ styles/prosilver/template/viewforum_body.html
+ styles/subsilver2/template/search_results.html
+ styles/subsilver2/template/viewforum_body.html
+* Since: 3.1.0-a1
* Purpose: Add content into topic rows (inside the elements containing topic titles)
ucp_pm_viewmessage_custom_fields_after
===
-* Location: styles/prosilver/template/ucp_pm_viewmessage.html
+* Locations:
+ + styles/prosilver/template/ucp_pm_viewmessage.html
+* Since: 3.1.0-a1
* Purpose: Add data after the custom fields on the user profile when viewing
a private message
ucp_pm_viewmessage_custom_fields_before
===
-* Location: styles/prosilver/template/ucp_pm_viewmessage.html
+* Locations:
+ + styles/prosilver/template/ucp_pm_viewmessage.html
+* Since: 3.1.0-a1
* Purpose: Add data before the custom fields on the user profile when viewing
a private message
ucp_pm_viewmessage_print_head_append
===
-* Location: styles/prosilver/template/ucp_pm_viewmessage_print.html
+* Locations:
+ + styles/prosilver/template/ucp_pm_viewmessage_print.html
+* Since: 3.1.0-a1
* Purpose: Add asset calls directly before the `</head>` tag of the Print PM screen
ucp_prefs_personal_prepend
@@ -184,6 +268,7 @@ ucp_prefs_personal_prepend
* Locations:
+ styles/prosilver/template/ucp_prefs_personal.html
+ styles/subsilver2/template/ucp_prefs_personal.html
+* Since: 3.1.0-a1
* Purpose: Add user options to the top of the Edit Global Settings block
ucp_prefs_personal_append
@@ -191,6 +276,7 @@ ucp_prefs_personal_append
* Locations:
+ styles/prosilver/template/ucp_prefs_personal.html
+ styles/subsilver2/template/ucp_prefs_personal.html
+* Since: 3.1.0-a1
* Purpose: Add user options to the bottom of the Edit Global Settings block
ucp_prefs_post_prepend
@@ -198,6 +284,7 @@ ucp_prefs_post_prepend
* Locations:
+ styles/prosilver/template/ucp_prefs_post.html
+ styles/subsilver2/template/ucp_prefs_post.html
+* Since: 3.1.0-a1
* Purpose: Add user options to the top of the Edit Posting Defaults block
ucp_prefs_post_append
@@ -205,6 +292,7 @@ ucp_prefs_post_append
* Locations:
+ styles/prosilver/template/ucp_prefs_post.html
+ styles/subsilver2/template/ucp_prefs_post.html
+* Since: 3.1.0-a1
* Purpose: Add user options to the bottom of the Edit Posting Defaults block
ucp_prefs_view_radio_buttons_prepend
@@ -212,6 +300,7 @@ ucp_prefs_view_radio_buttons_prepend
* Locations:
+ styles/prosilver/template/ucp_prefs_view.html
+ styles/subsilver2/template/ucp_prefs_view.html
+* Since: 3.1.0-a1
* Purpose: Add options to the top of the radio buttons block of the Edit
Display Options screen
@@ -220,6 +309,7 @@ ucp_prefs_view_radio_buttons_append
* Locations:
+ styles/prosilver/template/ucp_prefs_view.html
+ styles/subsilver2/template/ucp_prefs_view.html
+* Since: 3.1.0-a1
* Purpose: Add options to the bottom of the radio buttons block of the Edit
Display Options screen
@@ -228,6 +318,7 @@ ucp_prefs_view_select_menu_prepend
* Locations:
+ styles/prosilver/template/ucp_prefs_view.html
+ styles/subsilver2/template/ucp_prefs_view.html
+* Since: 3.1.0-a1
* Purpose: Add options to the top of the drop-down lists block of the Edit
Display Options screen
@@ -236,12 +327,15 @@ ucp_prefs_view_select_menu_append
* Locations:
+ styles/prosilver/template/ucp_prefs_view.html
+ styles/subsilver2/template/ucp_prefs_view.html
+* Since: 3.1.0-a1
* Purpose: Add options to the bottom of the drop-down lists block of the Edit
Display Options screen
viewtopic_print_head_append
===
-* Location: styles/prosilver/template/viewtopic_print.html
+* Locations:
+ + styles/prosilver/template/viewtopic_print.html
+* Since: 3.1.0-a1
* Purpose: Add asset calls directly before the `</head>` tag of the Print Topic screen
viewtopic_body_footer_before
@@ -249,6 +343,7 @@ viewtopic_body_footer_before
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add content to the bottom of the View topic screen below the posts
and quick reply, directly before the jumpbox in Prosilver, breadcrumbs in
Subsilver2.
@@ -258,6 +353,7 @@ viewtopic_body_post_buttons_after
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add post button to posts (next to edit, quote etc), at the end of
the list.
@@ -266,6 +362,7 @@ viewtopic_body_post_buttons_before
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add post button to posts (next to edit, quote etc), at the start of
the list.
@@ -274,6 +371,7 @@ viewtopic_body_postrow_custom_fields_after
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add data after the custom fields on the user profile when viewing
a post
@@ -282,6 +380,7 @@ viewtopic_body_postrow_custom_fields_before
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add data before the custom fields on the user profile when viewing
a post
@@ -290,4 +389,5 @@ viewtopic_topic_title_prepend
* Locations:
+ styles/prosilver/template/viewtopic_body.html
+ styles/subsilver2/template/viewtopic_body.html
+* Since: 3.1.0-a1
* Purpose: Add content directly before the topic title link on the View topic screen
diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 04d68f6a48..7d39ee4821 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -181,7 +181,7 @@ else
trigger_error('NO_ATTACHMENT_SELECTED');
}
-$sql = 'SELECT attach_id, post_msg_id, topic_id, in_message, is_orphan, physical_filename, real_filename, extension, mimetype, filesize, filetime
+$sql = 'SELECT attach_id, post_msg_id, topic_id, in_message, poster_id, is_orphan, physical_filename, real_filename, extension, mimetype, filesize, filetime
FROM ' . ATTACHMENTS_TABLE . "
WHERE $sql_where";
$result = $db->sql_query($sql);
diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php
index 55459739ca..2282863746 100644
--- a/phpBB/includes/acp/acp_attachments.php
+++ b/phpBB/includes/acp/acp_attachments.php
@@ -748,7 +748,6 @@ class acp_attachments
}
$template->assign_vars(array(
- 'PHPBB_ROOT_PATH' => $phpbb_root_path,
'IMG_PATH' => $img_path,
'ACTION' => $action,
'GROUP_ID' => $group_id,
diff --git a/phpBB/includes/acp/acp_bbcodes.php b/phpBB/includes/acp/acp_bbcodes.php
index dca39df38c..575ac84012 100644
--- a/phpBB/includes/acp/acp_bbcodes.php
+++ b/phpBB/includes/acp/acp_bbcodes.php
@@ -108,11 +108,12 @@ class acp_bbcodes
'DISPLAY_ON_POSTING' => $display_on_posting)
);
- foreach ($user->lang['tokens'] as $token => $token_explain)
+ $bbcode_tokens = array('TEXT', 'SIMPLETEXT', 'INTTEXT', 'IDENTIFIER', 'NUMBER', 'EMAIL', 'URL', 'LOCAL_URL', 'RELATIVE_URL', 'COLOR');
+ foreach ($bbcode_tokens as $token)
{
$template->assign_block_vars('token', array(
'TOKEN' => '{' . $token . '}',
- 'EXPLAIN' => ($token === 'LOCAL_URL') ? sprintf($token_explain, generate_board_url() . '/') : $token_explain,
+ 'EXPLAIN' => ($token === 'LOCAL_URL') ? $user->lang(array('tokens', $token), generate_board_url() . '/') : $user->lang(array('tokens', $token)),
));
}
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index 40dca53b76..10fbde8c9b 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -763,8 +763,8 @@ class acp_board
global $user, $config;
$act_ary = array(
- 'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
- 'ACC_NONE' => USER_ACTIVATION_NONE,
+ 'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
+ 'ACC_NONE' => USER_ACTIVATION_NONE,
);
if ($config['email_enable'])
{
diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php
index fc08a5fb94..8afc3709b9 100644
--- a/phpBB/includes/acp/acp_database.php
+++ b/phpBB/includes/acp/acp_database.php
@@ -94,29 +94,29 @@ class acp_database
case 'mysqli':
case 'mysql4':
case 'mysql':
- $extractor = new mysql_extractor($download, $store, $format, $filename, $time);
+ $extractor = new mysql_extractor($format, $filename, $time, $download, $store);
break;
case 'sqlite':
- $extractor = new sqlite_extractor($download, $store, $format, $filename, $time);
+ $extractor = new sqlite_extractor($format, $filename, $time, $download, $store);
break;
case 'postgres':
- $extractor = new postgres_extractor($download, $store, $format, $filename, $time);
+ $extractor = new postgres_extractor($format, $filename, $time, $download, $store);
break;
case 'oracle':
- $extractor = new oracle_extractor($download, $store, $format, $filename, $time);
+ $extractor = new oracle_extractor($format, $filename, $time, $download, $store);
break;
case 'mssql':
case 'mssql_odbc':
case 'mssqlnative':
- $extractor = new mssql_extractor($download, $store, $format, $filename, $time);
+ $extractor = new mssql_extractor($format, $filename, $time, $download, $store);
break;
case 'firebird':
- $extractor = new firebird_extractor($download, $store, $format, $filename, $time);
+ $extractor = new firebird_extractor($format, $filename, $time, $download, $store);
break;
}
@@ -488,7 +488,7 @@ class base_extractor
var $format;
var $run_comp = false;
- function base_extractor($download = false, $store = false, $format, $filename, $time)
+ function base_extractor($format, $filename, $time, $download = false, $store = false)
{
global $request;
@@ -1607,16 +1607,17 @@ class mssql_extractor extends base_extractor
return;
}
- $sql = "SELECT * FROM $table_name";
- $result_fields = $db->sql_query_limit($sql, 1);
-
- $row = new result_mssqlnative($result_fields);
- $i_num_fields = $row->num_fields();
+ $sql = "SELECT COLUMN_NAME, DATA_TYPE
+ FROM INFORMATION_SCHEMA.COLUMNS
+ WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = '" . $db->sql_escape($table_name) . "'";
+ $result_fields = $db->sql_query($sql);
- for ($i = 0; $i < $i_num_fields; $i++)
+ $i_num_fields = 0;
+ while ($row = $db->sql_fetchrow($result_fields))
{
- $ary_type[$i] = $row->field_type($i);
- $ary_name[$i] = $row->field_name($i);
+ $ary_type[$i_num_fields] = $row['DATA_TYPE'];
+ $ary_name[$i_num_fields] = $row['COLUMN_NAME'];
+ $i_num_fields++;
}
$db->sql_freeresult($result_fields);
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index b41f4d4e81..c21c9f4e9d 100644
--- a/phpBB/includes/acp/acp_extensions.php
+++ b/phpBB/includes/acp/acp_extensions.php
@@ -55,6 +55,11 @@ class acp_extensions
$ext_name = '';
}
+ if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($request->variable('hash', ''), $action . '.' . $ext_name))
+ {
+ trigger_error('FORM_INVALID', E_USER_WARNING);
+ }
+
// If they've specified an extension, let's load the metadata manager and validate it.
if ($ext_name)
{
@@ -66,7 +71,7 @@ class acp_extensions
}
catch(\phpbb\extension\exception $e)
{
- trigger_error($e);
+ trigger_error($e, E_USER_WARNING);
}
}
@@ -96,8 +101,9 @@ class acp_extensions
$this->tpl_name = 'acp_ext_enable';
$template->assign_vars(array(
- 'PRE' => true,
- 'U_ENABLE' => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name),
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_ENABLE' => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name),
));
break;
@@ -116,7 +122,7 @@ class acp_extensions
{
$template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
}
}
}
@@ -128,7 +134,7 @@ class acp_extensions
$this->tpl_name = 'acp_ext_enable';
$template->assign_vars(array(
- 'U_RETURN' => $this->u_action . '&amp;action=list',
+ 'U_RETURN' => $this->u_action . '&amp;action=list',
));
break;
@@ -141,8 +147,9 @@ class acp_extensions
$this->tpl_name = 'acp_ext_disable';
$template->assign_vars(array(
- 'PRE' => true,
- 'U_DISABLE' => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name),
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_DISABLE' => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name),
));
break;
@@ -154,7 +161,7 @@ class acp_extensions
{
$template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
}
}
@@ -165,16 +172,21 @@ class acp_extensions
));
break;
- case 'purge_pre':
- $this->tpl_name = 'acp_ext_purge';
+ case 'delete_data_pre':
+ if ($phpbb_extension_manager->enabled($ext_name))
+ {
+ redirect($this->u_action);
+ }
+ $this->tpl_name = 'acp_ext_delete_data';
$template->assign_vars(array(
- 'PRE' => true,
- 'U_PURGE' => $this->u_action . '&amp;action=purge&amp;ext_name=' . urlencode($ext_name),
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_PURGE' => $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name),
));
break;
- case 'purge':
+ case 'delete_data':
try
{
while ($phpbb_extension_manager->purge_step($ext_name))
@@ -184,7 +196,7 @@ class acp_extensions
{
$template->assign_var('S_NEXT_STEP', true);
- meta_refresh(0, $this->u_action . '&amp;action=purge&amp;ext_name=' . urlencode($ext_name));
+ meta_refresh(0, $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
}
}
}
@@ -193,7 +205,7 @@ class acp_extensions
$template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
}
- $this->tpl_name = 'acp_ext_purge';
+ $this->tpl_name = 'acp_ext_delete_data';
$template->assign_vars(array(
'U_RETURN' => $this->u_action . '&amp;action=list',
@@ -233,7 +245,6 @@ class acp_extensions
$this->output_actions('enabled', array(
'DISABLE' => $this->u_action . '&amp;action=disable_pre&amp;ext_name=' . urlencode($name),
- 'PURGE' => $this->u_action . '&amp;action=purge_pre&amp;ext_name=' . urlencode($name),
));
}
catch(\phpbb\extension\exception $e)
@@ -267,7 +278,7 @@ class acp_extensions
$this->output_actions('disabled', array(
'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
- 'PURGE' => $this->u_action . '&amp;action=purge_pre&amp;ext_name=' . urlencode($name),
+ 'DELETE_DATA' => $this->u_action . '&amp;action=delete_data_pre&amp;ext_name=' . urlencode($name),
));
}
catch(\phpbb\extension\exception $e)
@@ -325,8 +336,9 @@ class acp_extensions
foreach ($actions as $lang => $url)
{
$this->template->assign_block_vars($block . '.actions', array(
- 'L_ACTION' => $this->user->lang($lang),
- 'U_ACTION' => $url,
+ 'L_ACTION' => $this->user->lang('EXTENSION_' . $lang),
+ 'L_ACTION_EXPLAIN' => (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',
+ 'U_ACTION' => $url,
));
}
}
diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php
index 258aabcc0d..029f4b23c9 100644
--- a/phpBB/includes/acp/acp_forums.php
+++ b/phpBB/includes/acp/acp_forums.php
@@ -1470,7 +1470,7 @@ class acp_forums
/**
* Event when we move content from one forum to another
*
- * @event core.acp_manage_forums_move_children
+ * @event core.acp_manage_forums_move_content
* @var int from_id If of the current parent forum
* @var int to_id If of the new parent forum
* @var bool sync Shall we sync the "to"-forum's data
diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php
index ad29a5521b..c170c67d49 100644
--- a/phpBB/includes/acp/acp_groups.php
+++ b/phpBB/includes/acp/acp_groups.php
@@ -324,7 +324,7 @@ class acp_groups
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
// This is normalised data, without the group_ prefix
- $avatar_data = \phpbb\avatar\manager::clean_row($group_row);
+ $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
}
@@ -657,7 +657,6 @@ class acp_groups
'GROUP_HIDDEN' => $type_hidden,
'U_BACK' => $u_back,
- 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
'U_ACTION' => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(),
));
diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php
index 5b23f9c3a0..658be4cc6b 100644
--- a/phpBB/includes/acp/acp_icons.php
+++ b/phpBB/includes/acp/acp_icons.php
@@ -307,7 +307,6 @@ class acp_icons
'IMG_SRC' => $phpbb_root_path . $img_path . '/' . $default_row['smiley_url'],
'IMG_PATH' => $img_path,
- 'PHPBB_ROOT_PATH' => $phpbb_root_path,
'CODE' => $default_row['code'],
'EMOTION' => $default_row['emotion'],
@@ -480,7 +479,7 @@ class acp_icons
$icons_updated++;
}
- }
+ }
}
$cache->destroy('_icons');
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 094d84de40..d5492d85a3 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -888,7 +888,11 @@ class acp_styles
protected function list_style(&$style, $level)
{
// Mark row as shown
- if (!empty($style['_shown'])) return;
+ if (!empty($style['_shown']))
+ {
+ return;
+ }
+
$style['_shown'] = true;
// Generate template variables
diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php
index 8853200ddc..fbc1cc1f14 100644
--- a/phpBB/includes/acp/acp_users.php
+++ b/phpBB/includes/acp/acp_users.php
@@ -396,6 +396,9 @@ class acp_users
{
if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
{
+ $phpbb_notifications = $phpbb_container->get('notification_manager');
+ $phpbb_notifications->delete_notifications('admin_activate_user', $user_row['user_id']);
+
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger(false);
@@ -647,8 +650,8 @@ class acp_users
while ($row = $db->sql_fetchrow($result))
{
if ($topic_id_ary[$row['topic_id']][ITEM_APPROVED] == $row['topic_posts_approved']
- && $topic_id_ary[$row['topic_id']][ITEM_UNAPPROVED] == $row['topic_posts_unapproved']
- && $topic_id_ary[$row['topic_id']][ITEM_DELETED] == $row['topic_posts_softdeleted'])
+ && $topic_id_ary[$row['topic_id']][ITEM_UNAPPROVED] == $row['topic_posts_unapproved']
+ && $topic_id_ary[$row['topic_id']][ITEM_DELETED] == $row['topic_posts_softdeleted'])
{
$move_topic_ary[] = $row['topic_id'];
}
@@ -1509,7 +1512,6 @@ class acp_users
'hideonline' => request_var('hideonline', !$user_row['user_allow_viewonline']),
'notifymethod' => request_var('notifymethod', $user_row['user_notify_type']),
'notifypm' => request_var('notifypm', $user_row['user_notify_pm']),
- 'popuppm' => request_var('popuppm', $this->optionget($user_row, 'popuppm')),
'allowpm' => request_var('allowpm', $user_row['user_allow_pm']),
'topic_sk' => request_var('topic_sk', ($user_row['user_topic_sortby_type']) ? $user_row['user_topic_sortby_type'] : 't'),
@@ -1553,7 +1555,6 @@ class acp_users
if (!sizeof($error))
{
- $this->optionset($user_row, 'popuppm', $data['popuppm']);
$this->optionset($user_row, 'viewimg', $data['view_images']);
$this->optionset($user_row, 'viewflash', $data['view_flash']);
$this->optionset($user_row, 'viewsmilies', $data['view_smilies']);
@@ -1696,7 +1697,6 @@ class acp_users
'NOTIFY_IM' => ($data['notifymethod'] == NOTIFY_IM) ? true : false,
'NOTIFY_BOTH' => ($data['notifymethod'] == NOTIFY_BOTH) ? true : false,
'NOTIFY_PM' => $data['notifypm'],
- 'POPUP_PM' => $data['popuppm'],
'BBCODE' => $data['bbcode'],
'SMILIES' => $data['smilies'],
'ATTACH_SIG' => $data['sig'],
@@ -1742,7 +1742,7 @@ class acp_users
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
// This is normalised data, without the user_ prefix
- $avatar_data = \phpbb\avatar\manager::clean_row($user_row);
+ $avatar_data = \phpbb\avatar\manager::clean_row($user_row, 'user');
if ($submit)
{
diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php
index f5f90fb5b8..a023bced0a 100644
--- a/phpBB/includes/acp/auth.php
+++ b/phpBB/includes/acp/auth.php
@@ -506,7 +506,7 @@ class auth_admin extends \phpbb\auth\auth
'FORUM_ID' => $forum_id)
);
- $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
+ $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
unset($content_array[$ug_id]);
}
@@ -593,7 +593,7 @@ class auth_admin extends \phpbb\auth\auth
'FORUM_ID' => $forum_id)
);
- $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
+ $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
}
unset($hold_ary[$ug_id], $ug_names_ary[$ug_id]);
@@ -1099,7 +1099,7 @@ class auth_admin extends \phpbb\auth\auth
* Assign category to template
* used by display_mask()
*/
- function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $show_trace = false, $s_view)
+ function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $s_view, $show_trace = false)
{
global $template, $user, $phpbb_admin_path, $phpEx, $phpbb_container;
diff --git a/phpBB/includes/captcha/captcha_gd.php b/phpBB/includes/captcha/captcha_gd.php
index f58b590c4b..ab45aa9db6 100644
--- a/phpBB/includes/captcha/captcha_gd.php
+++ b/phpBB/includes/captcha/captcha_gd.php
@@ -26,7 +26,6 @@ class captcha
var $width = 360;
var $height = 96;
-
/**
* Create the image containing $code with a seed of $seed
*/
@@ -69,7 +68,6 @@ class captcha
$bounding_boxes[$i] = $box;
}
-
// Redistribute leftover x-space
$offset = array();
for ($i = 0; $i < $code_len; ++$i)
@@ -99,12 +97,12 @@ class captcha
imagedashedline($img, mt_rand($x -3, $x + 3), mt_rand(0, 4), mt_rand($x -3, $x + 3), mt_rand($this->height - 5, $this->height), $current_colour);
}
}
+
if ($config['captcha_gd_wave'] && ($config['captcha_gd_y_grid'] || $config['captcha_gd_y_grid']))
{
$this->wave($img);
}
-
-
+
if ($config['captcha_gd_3d_noise'])
{
$xoffset = mt_rand(0,9);
@@ -122,11 +120,12 @@ class captcha
$dimm = $bounding_boxes[$i];
$xoffset += ($offset[$i] - $dimm[0]);
$yoffset = mt_rand(-$dimm[1], $this->height - $dimm[3]);
-
+
$noise[$i]->drawchar($sizes[$i], $xoffset, $yoffset, $img, $colour->get_resource('background'), $scheme);
$xoffset += $dimm[2];
}
}
+
$xoffset = 5;
for ($i = 0; $i < $code_len; ++$i)
{
@@ -137,14 +136,17 @@ class captcha
$characters[$i]->drawchar($sizes[$i], $xoffset, $yoffset, $img, $colour->get_resource('background'), $scheme);
$xoffset += $dimm[2];
}
+
if ($config['captcha_gd_wave'])
{
$this->wave($img);
}
+
if ($config['captcha_gd_foreground_noise'])
{
$this->noise_line($img, 0, 0, $this->width, $this->height, $colour->get_resource('background'), $scheme, $bg_colours);
}
+
// Send image
header('Content-Type: image/png');
header('Cache-control: no-cache, no-store');
@@ -233,7 +235,6 @@ class captcha
imagesetthickness($img, 1);
}
-
function captcha_noise_bg_bitmaps()
{
return array(
@@ -292,7 +293,7 @@ class captcha
),
));
}
-
+
/**
* Return bitmaps
*/
diff --git a/phpBB/includes/captcha/captcha_gd_wave.php b/phpBB/includes/captcha/captcha_gd_wave.php
index e19f54f777..185352dd4e 100644
--- a/phpBB/includes/captcha/captcha_gd_wave.php
+++ b/phpBB/includes/captcha/captcha_gd_wave.php
@@ -86,7 +86,7 @@ class captcha
$fontcolors[0] = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
- $colors = array();
+ $colors = array();
$minr = mt_rand(20, 30);
$ming = mt_rand(20, 30);
@@ -184,7 +184,7 @@ class captcha
for ($x = 1; $x <= $full_x; ++$x)
{
- $cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, 1, $x_grid, $y_grid);
+ $cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, $x_grid, $y_grid, 1);
// height is a z-factor, not a y-factor
$offset = $cur_height - $prev_height;
@@ -264,7 +264,7 @@ class captcha
return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak);
}
- function grid_height($x, $y, $factor = 1, $x_grid, $y_grid)
+ function grid_height($x, $y, $x_grid, $y_grid, $factor = 1)
{
return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0);
}
diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php
index e1da41d106..855b6ff187 100644
--- a/phpBB/includes/constants.php
+++ b/phpBB/includes/constants.php
@@ -24,7 +24,7 @@ if (!defined('IN_PHPBB'))
*/
// phpBB Version
-define('PHPBB_VERSION', '3.1.0-a2-dev');
+define('PHPBB_VERSION', '3.1.0-a3-dev');
// QA-related
// define('PHPBB_QA', 1);
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index ad5e3c05ce..3a915de82b 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1318,18 +1318,12 @@ function phpbb_timezone_select($user, $default = '', $truncate = false)
$tz_dates .= '<option value="' . $timezone['offest'] . ' - ' . $timezone['current'] . '"' . $selected . '>' . $timezone['offest'] . ' - ' . $timezone['current'] . '</option>';
}
- if (isset($user->lang['timezones'][$timezone['tz']]))
+ $label = $timezone['tz'];
+ if (isset($user->lang['timezones'][$label]))
{
- $title = $label = $user->lang['timezones'][$timezone['tz']];
- }
- else
- {
- // No label, we'll figure one out
- $bits = explode('/', str_replace('_', ' ', $timezone['tz']));
-
- $label = implode(' - ', $bits);
- $title = $timezone['offest'] . ' - ' . $label;
+ $label = $user->lang['timezones'][$label];
}
+ $title = $timezone['offest'] . ' - ' . $label;
if ($truncate)
{
@@ -1478,7 +1472,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
$sql = 'SELECT forum_id
FROM ' . FORUMS_TRACK_TABLE . "
WHERE user_id = {$user->data['user_id']}
- AND mark_time < $post_time
AND " . $db->sql_in_set('forum_id', $forum_id);
$result = $db->sql_query($sql);
@@ -5365,7 +5358,6 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
- 'U_POPUP_PM' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=popup'),
'U_MEMBERLIST' => append_sid("{$phpbb_root_path}memberlist.$phpEx"),
'U_VIEWONLINE' => ($auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) ? append_sid("{$phpbb_root_path}viewonline.$phpEx") : '',
'U_LOGIN_LOGOUT' => $u_login_logout,
@@ -5393,7 +5385,6 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
'S_BOARD_DISABLED' => ($config['board_disable']) ? true : false,
'S_REGISTERED_USER' => (!empty($user->data['is_registered'])) ? true : false,
'S_IS_BOT' => (!empty($user->data['is_bot'])) ? true : false,
- 'S_USER_PM_POPUP' => $user->optionget('popuppm'),
'S_USER_LANG' => $user_lang,
'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'],
'S_USERNAME' => $user->data['username'],
@@ -5597,14 +5588,14 @@ function garbage_collection()
global $cache, $db;
global $phpbb_dispatcher;
- /**
- * Unload some objects, to free some memory, before we finish our task
- *
- * @event core.garbage_collection
- * @since 3.1-A1
- */
if (!empty($phpbb_dispatcher))
{
+ /**
+ * Unload some objects, to free some memory, before we finish our task
+ *
+ * @event core.garbage_collection
+ * @since 3.1-A1
+ */
$phpbb_dispatcher->dispatch('core.garbage_collection');
}
diff --git a/phpBB/includes/functions_acp.php b/phpBB/includes/functions_acp.php
index c83bc1f7a6..b9210114ef 100644
--- a/phpBB/includes/functions_acp.php
+++ b/phpBB/includes/functions_acp.php
@@ -67,7 +67,8 @@ function adm_page_header($page_title)
'SID' => $SID,
'_SID' => $_SID,
'SESSION_ID' => $user->session_id,
- 'ROOT_PATH' => $phpbb_admin_path,
+ 'ROOT_PATH' => $phpbb_root_path,
+ 'ADMIN_ROOT_PATH' => $phpbb_admin_path,
'U_LOGOUT' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=logout'),
'U_ADM_LOGOUT' => append_sid("{$phpbb_admin_path}index.$phpEx", 'action=admlogout'),
diff --git a/phpBB/includes/functions_compress.php b/phpBB/includes/functions_compress.php
index c79a31930e..39a1b2ad21 100644
--- a/phpBB/includes/functions_compress.php
+++ b/phpBB/includes/functions_compress.php
@@ -46,7 +46,7 @@ class compress
if (is_file($phpbb_root_path . $src))
{
- $this->data($src_path, file_get_contents("$phpbb_root_path$src"), false, stat("$phpbb_root_path$src"));
+ $this->data($src_path, file_get_contents("$phpbb_root_path$src"), stat("$phpbb_root_path$src"), false);
}
else if (is_dir($phpbb_root_path . $src))
{
@@ -86,7 +86,7 @@ class compress
continue;
}
- $this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), false, stat("$phpbb_root_path$src$path$file"));
+ $this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), stat("$phpbb_root_path$src$path$file"), false);
}
}
}
@@ -109,7 +109,7 @@ class compress
return false;
}
- $this->data($filename, file_get_contents($src), false, stat($src));
+ $this->data($filename, file_get_contents($src), stat($src), false);
return true;
}
@@ -123,7 +123,7 @@ class compress
$stat[4] = $stat[5] = 0;
$stat[7] = strlen($src);
$stat[9] = time();
- $this->data($name, $src, false, $stat);
+ $this->data($name, $src, $stat, false);
return true;
}
@@ -395,7 +395,7 @@ class compress_zip extends compress
/**
* Create the structures ... note we assume version made by is MSDOS
*/
- function data($name, $data, $is_dir = false, $stat)
+ function data($name, $data, $stat, $is_dir = false)
{
$name = str_replace('\\', '/', $name);
$name = $this->unique_filename($name);
@@ -669,7 +669,7 @@ class compress_tar extends compress
/**
* Create the structures
*/
- function data($name, $data, $is_dir = false, $stat)
+ function data($name, $data, $stat, $is_dir = false)
{
$name = $this->unique_filename($name);
$this->wrote = true;
diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php
index c5347ef262..8122b87e4b 100644
--- a/phpBB/includes/functions_content.php
+++ b/phpBB/includes/functions_content.php
@@ -481,6 +481,16 @@ function generate_text_for_display($text, $uid, $bitfield, $flags, $censor_text
* For parsing custom parsed text to be stored within the database.
* This function additionally returns the uid and bitfield that needs to be stored.
* Expects $text to be the value directly from request_var() and in it's non-parsed form
+*
+* @param string $text The text to be replaced with the parsed one
+* @param string $uid The BBCode uid for this parse
+* @param string $bitfield The BBCode bitfield for this parse
+* @param int $flags The allow_bbcode, allow_urls and allow_smilies compiled into a single integer.
+* @param bool $allow_bbcode If BBCode is allowed (i.e. if BBCode is parsed)
+* @param bool $allow_urls If urls is allowed
+* @param bool $allow_smilies If smilies are allowed
+*
+* @return array An array of string with the errors that occurred while parsing
*/
function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bbcode = false, $allow_urls = false, $allow_smilies = false)
{
@@ -542,7 +552,7 @@ function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bb
$vars = array('text', 'uid', 'bitfield', 'flags');
extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_after', compact($vars)));
- return;
+ return $message_parser->warn_msg;
}
/**
diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php
index a34a193f60..1646c79161 100644
--- a/phpBB/includes/functions_convert.php
+++ b/phpBB/includes/functions_convert.php
@@ -823,7 +823,7 @@ function get_avatar_dim($src, $axis, $func = false, $arg1 = false, $arg2 = false
break;
case AVATAR_REMOTE:
- // see notes on this functions usage and (hopefully) model $func to avoid this accordingly
+ // see notes on this functions usage and (hopefully) model $func to avoid this accordingly
return get_remote_avatar_dim($src, $axis);
break;
@@ -1027,7 +1027,6 @@ function set_user_options()
'attachsig' => array('bit' => 6, 'default' => 0),
'bbcode' => array('bit' => 8, 'default' => 1),
'smilies' => array('bit' => 9, 'default' => 1),
- 'popuppm' => array('bit' => 10, 'default' => 0),
'sig_bbcode' => array('bit' => 15, 'default' => 1),
'sig_smilies' => array('bit' => 16, 'default' => 1),
'sig_links' => array('bit' => 17, 'default' => 1),
@@ -1117,7 +1116,7 @@ function words_unique(&$words)
* Adds a user to the specified group and optionally makes them a group leader
* This function does not create the group if it does not exist and so should only be called after the groups have been created
*/
-function add_user_group($group_id, $user_id, $group_leader=false)
+function add_user_group($group_id, $user_id, $group_leader = false)
{
global $convert, $phpbb_root_path, $config, $user, $db;
@@ -1297,7 +1296,7 @@ function restore_config($schema)
$src_ary = $schema['array_name'];
$config_value = (isset($convert_config[$src_ary][$src])) ? $convert_config[$src_ary][$src] : '';
}
- }
+ }
if ($config_value !== '')
{
@@ -1719,7 +1718,7 @@ function add_default_groups()
'GUESTS' => array('', 0, 0),
'REGISTERED' => array('', 0, 0),
'REGISTERED_COPPA' => array('', 0, 0),
- 'GLOBAL_MODERATORS' => array('00AA00', 1, 0),
+ 'GLOBAL_MODERATORS' => array('00AA00', 2, 0),
'ADMINISTRATORS' => array('AA0000', 1, 1),
'BOTS' => array('9E8DA7', 0, 0),
'NEWLY_REGISTERED' => array('', 0, 0),
@@ -1748,7 +1747,7 @@ function add_default_groups()
'group_type' => GROUP_SPECIAL,
'group_colour' => (string) $data[0],
'group_legend' => (int) $data[1],
- 'group_founder_manage' => (int) $data[2]
+ 'group_founder_manage' => (int) $data[2],
);
}
@@ -1758,6 +1757,38 @@ function add_default_groups()
}
}
+function add_groups_to_teampage()
+{
+ global $db;
+
+ $teampage_groups = array(
+ 'ADMINISTRATORS' => 1,
+ 'GLOBAL_MODERATORS' => 2,
+ );
+
+ $sql = 'SELECT *
+ FROM ' . GROUPS_TABLE . '
+ WHERE ' . $db->sql_in_set('group_name', array_keys($teampage_groups));
+ $result = $db->sql_query($sql);
+
+ $teampage_ary = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $teampage_ary[] = array(
+ 'group_id' => (int) $row['group_id'],
+ 'teampage_name' => '',
+ 'teampage_position' => (int) $teampage_groups[$row['group_name']],
+ 'teampage_parent' => 0,
+ );
+ }
+ $db->sql_freeresult($result);
+
+ if (sizeof($teampage_ary))
+ {
+ $db->sql_multi_insert(TEAMPAGE_TABLE, $teampage_ary);
+ }
+}
+
/**
* Sync post count. We might need to do this in batches.
diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php
index c6ab5df90f..f03e4c01d0 100644
--- a/phpBB/includes/functions_display.php
+++ b/phpBB/includes/functions_display.php
@@ -1352,7 +1352,7 @@ function get_user_rank($user_rank, $user_posts, &$rank_title, &$rank_img, &$rank
*/
function phpbb_get_user_avatar($user_row, $alt = 'USER_AVATAR', $ignore_config = false)
{
- $row = \phpbb\avatar\manager::clean_row($user_row);
+ $row = \phpbb\avatar\manager::clean_row($user_row, 'user');
return phpbb_get_avatar($row, $alt, $ignore_config);
}
@@ -1367,7 +1367,7 @@ function phpbb_get_user_avatar($user_row, $alt = 'USER_AVATAR', $ignore_config =
*/
function phpbb_get_group_avatar($user_row, $alt = 'GROUP_AVATAR', $ignore_config = false)
{
- $row = \phpbb\avatar\manager::clean_row($user_row);
+ $row = \phpbb\avatar\manager::clean_row($user_row, 'group');
return phpbb_get_avatar($row, $alt, $ignore_config);
}
diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php
index 1be6e49471..deb304b838 100644
--- a/phpBB/includes/functions_install.php
+++ b/phpBB/includes/functions_install.php
@@ -533,3 +533,51 @@ function phpbb_create_config_file_data($data, $dbms, $debug = false, $debug_test
return $config_data;
}
+
+/**
+* Check whether a file should be ignored on update
+*
+* We ignore new files in some circumstances:
+* 1. The file is a language file, but the language is not installed
+* 2. The file is a style file, but the style is not installed
+* 3. The file is a style language file, but the language is not installed
+*
+* @param string $phpbb_root_path phpBB root path
+* @param string $file File including path from phpbb root
+* @return bool Should we ignore the new file or add it to the board?
+*/
+function phpbb_ignore_new_file_on_update($phpbb_root_path, $file)
+{
+ $ignore_new_file = false;
+
+ // We ignore new files in some circumstances:
+ // 1. The file is a language file, but the language is not installed
+ if (!$ignore_new_file && strpos($file, 'language/') === 0)
+ {
+ list($language_dir, $language_iso) = explode('/', $file);
+ $ignore_new_file = !file_exists($phpbb_root_path . $language_dir . '/' . $language_iso);
+ }
+
+ // 2. The file is a style file, but the style is not installed
+ if (!$ignore_new_file && strpos($file, 'styles/') === 0)
+ {
+ list($styles_dir, $style_name) = explode('/', $file);
+ $ignore_new_file = !file_exists($phpbb_root_path . $styles_dir . '/' . $style_name);
+ }
+
+ // 3. The file is a style language file, but the language is not installed
+ if (!$ignore_new_file && strpos($file, 'styles/') === 0)
+ {
+ $dirs = explode('/', $file);
+ if (sizeof($dirs) >= 5)
+ {
+ list($styles_dir, $style_name, $template_component, $language_iso) = explode('/', $file);
+ if ($template_component == 'theme' && $language_iso !== 'images')
+ {
+ $ignore_new_file = !file_exists($phpbb_root_path . 'language/' . $language_iso);
+ }
+ }
+ }
+
+ return $ignore_new_file;
+}
diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php
index 5b343e616e..6ceeb50330 100644
--- a/phpBB/includes/functions_messenger.php
+++ b/phpBB/includes/functions_messenger.php
@@ -1414,7 +1414,7 @@ class smtp_class
$result = false;
$stream_meta = stream_get_meta_data($this->socket);
- if (socket_set_blocking($this->socket, 1));
+ if (socket_set_blocking($this->socket, 1))
{
$result = stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
socket_set_blocking($this->socket, (int) $stream_meta['blocked']);
diff --git a/phpBB/includes/ucp/info/ucp_pm.php b/phpBB/includes/ucp/info/ucp_pm.php
index 02931e9d31..a80de21999 100644
--- a/phpBB/includes/ucp/info/ucp_pm.php
+++ b/phpBB/includes/ucp/info/ucp_pm.php
@@ -22,7 +22,6 @@ class ucp_pm_info
'compose' => array('title' => 'UCP_PM_COMPOSE', 'auth' => 'cfg_allow_privmsg', 'cat' => array('UCP_PM')),
'drafts' => array('title' => 'UCP_PM_DRAFTS', 'auth' => 'cfg_allow_privmsg', 'cat' => array('UCP_PM')),
'options' => array('title' => 'UCP_PM_OPTIONS', 'auth' => 'cfg_allow_privmsg', 'cat' => array('UCP_PM')),
- 'popup' => array('title' => 'UCP_PM_POPUP_TITLE', 'auth' => 'cfg_allow_privmsg', 'display' => false, 'cat' => array('UCP_PM')),
),
);
}
diff --git a/phpBB/includes/ucp/ucp_activate.php b/phpBB/includes/ucp/ucp_activate.php
index 898dacd831..2a94acbe02 100644
--- a/phpBB/includes/ucp/ucp_activate.php
+++ b/phpBB/includes/ucp/ucp_activate.php
@@ -27,7 +27,7 @@ class ucp_activate
function main($id, $mode)
{
global $config, $phpbb_root_path, $phpEx;
- global $db, $user, $auth, $template;
+ global $db, $user, $auth, $template, $phpbb_container;
$user_id = request_var('u', 0);
$key = request_var('k', '');
@@ -108,6 +108,9 @@ class ucp_activate
if ($config['require_activation'] == USER_ACTIVATION_ADMIN && !$update_password)
{
+ $phpbb_notifications = $phpbb_container->get('notification_manager');
+ $phpbb_notifications->delete_notifications('admin_activate_user', $user_row['user_id']);
+
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger(false);
diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php
index a75d2e9bfc..716289eded 100644
--- a/phpBB/includes/ucp/ucp_groups.php
+++ b/phpBB/includes/ucp/ucp_groups.php
@@ -465,7 +465,7 @@ class ucp_groups
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
// This is normalised data, without the group_ prefix
- $avatar_data = \phpbb\avatar\manager::clean_row($group_row);
+ $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
}
// Did we submit?
@@ -699,7 +699,6 @@ class ucp_groups
'GROUP_CLOSED' => $type_closed,
'GROUP_HIDDEN' => $type_hidden,
- 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=ucp&amp;name=group_colour'),
'S_UCP_ACTION' => $this->u_action . "&amp;action=$action&amp;g=$group_id",
'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(),
));
diff --git a/phpBB/includes/ucp/ucp_notifications.php b/phpBB/includes/ucp/ucp_notifications.php
index 145963837c..63dbe79666 100644
--- a/phpBB/includes/ucp/ucp_notifications.php
+++ b/phpBB/includes/ucp/ucp_notifications.php
@@ -27,7 +27,8 @@ class ucp_notifications
add_form_key('ucp_notification');
$start = $request->variable('start', 0);
- $form_time = min($request->variable('form_time', 0), time());
+ $form_time = $request->variable('form_time', 0);
+ $form_time = ($form_time <= 0 || $form_time > time()) ? time() : $form_time;
$phpbb_notifications = $phpbb_container->get('notification_manager');
@@ -78,9 +79,9 @@ class ucp_notifications
trigger_error($message);
}
- $this->output_notification_methods('notification_methods', $phpbb_notifications, $template, $user);
+ $this->output_notification_methods($phpbb_notifications, $template, $user, 'notification_methods');
- $this->output_notification_types($subscriptions, 'notification_types', $phpbb_notifications, $template, $user);
+ $this->output_notification_types($subscriptions, $phpbb_notifications, $template, $user, 'notification_types');
$this->tpl_name = 'ucp_notifications';
$this->page_title = 'UCP_NOTIFICATION_OPTIONS';
@@ -162,12 +163,13 @@ class ucp_notifications
/**
* Output all the notification types to the template
*
- * @param string $block
+ * @param array $subscriptions Array containing global subscriptions
* @param \phpbb\notification\manager $phpbb_notifications
* @param \phpbb\template\template $template
* @param \phpbb\user $user
+ * @param string $block
*/
- public function output_notification_types($subscriptions, $block = 'notification_types', \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user)
+ public function output_notification_types($subscriptions, \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user, $block = 'notification_types')
{
$notification_methods = $phpbb_notifications->get_subscription_methods();
@@ -209,12 +211,12 @@ class ucp_notifications
/**
* Output all the notification methods to the template
*
- * @param string $block
* @param \phpbb\notification\manager $phpbb_notifications
* @param \phpbb\template\template $template
* @param \phpbb\user $user
+ * @param string $block
*/
- public function output_notification_methods($block = 'notification_methods', \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user)
+ public function output_notification_methods(\phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user, $block = 'notification_methods')
{
$notification_methods = $phpbb_notifications->get_subscription_methods();
diff --git a/phpBB/includes/ucp/ucp_pm.php b/phpBB/includes/ucp/ucp_pm.php
index d4ce8e41ee..517ae0b08c 100644
--- a/phpBB/includes/ucp/ucp_pm.php
+++ b/phpBB/includes/ucp/ucp_pm.php
@@ -83,33 +83,6 @@ class ucp_pm
switch ($mode)
{
- // New private messages popup
- case 'popup':
-
- $l_new_message = '';
- if ($user->data['is_registered'])
- {
- if ($user->data['user_new_privmsg'])
- {
- $l_new_message = ($user->data['user_new_privmsg'] == 1) ? $user->lang['YOU_NEW_PM'] : $user->lang['YOU_NEW_PMS'];
- }
- else
- {
- $l_new_message = $user->lang['YOU_NO_NEW_PM'];
- }
- }
-
- $template->assign_vars(array(
- 'MESSAGE' => $l_new_message,
- 'S_NOT_LOGGED_IN' => ($user->data['user_id'] == ANONYMOUS) ? true : false,
- 'CLICK_TO_VIEW' => sprintf($user->lang['CLICK_VIEW_PRIVMSG'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox') . '" onclick="jump_to_inbox(this.href); return false;">', '</a>'),
- 'U_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
- 'UA_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox', false))
- );
-
- $tpl_file = 'ucp_pm_popup';
- break;
-
// Compose message
case 'compose':
$action = request_var('action', 'post');
diff --git a/phpBB/includes/ucp/ucp_pm_viewfolder.php b/phpBB/includes/ucp/ucp_pm_viewfolder.php
index 625da23736..9393e65f3c 100644
--- a/phpBB/includes/ucp/ucp_pm_viewfolder.php
+++ b/phpBB/includes/ucp/ucp_pm_viewfolder.php
@@ -269,7 +269,7 @@ function view_folder($id, $mode, $folder_id, $folder)
// There is the chance that all recipients of the message got deleted. To avoid creating
// exports without recipients, we add a bogus "undisclosed recipient".
if (!(isset($address[$message_id]['g']) && sizeof($address[$message_id]['g'])) &&
- !(isset($address[$message_id]['u']) && sizeof($address[$message_id]['u'])))
+ !(isset($address[$message_id]['u']) && sizeof($address[$message_id]['u'])))
{
$address[$message_id]['u'] = array();
$address[$message_id]['u']['to'] = array();
diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php
index 3f58ce20b4..f7c6aca9e8 100644
--- a/phpBB/includes/ucp/ucp_profile.php
+++ b/phpBB/includes/ucp/ucp_profile.php
@@ -567,7 +567,7 @@ class ucp_profile
$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
// This is normalised data, without the user_ prefix
- $avatar_data = \phpbb\avatar\manager::clean_row($user->data);
+ $avatar_data = \phpbb\avatar\manager::clean_row($user->data, 'user');
if ($submit)
{
diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php
index 1f9ab23326..1641c6eef1 100644
--- a/phpBB/includes/ucp/ucp_register.php
+++ b/phpBB/includes/ucp/ucp_register.php
@@ -379,41 +379,16 @@ class ucp_register
}
$messenger->send(NOTIFY_EMAIL);
+ }
- if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
- {
- // Grab an array of user_id's with a_user permissions ... these users can activate a user
- $admin_ary = $auth->acl_get_list(false, 'a_user', false);
- $admin_ary = (!empty($admin_ary[0]['a_user'])) ? $admin_ary[0]['a_user'] : array();
-
- // Also include founders
- $where_sql = ' WHERE user_type = ' . USER_FOUNDER;
-
- if (sizeof($admin_ary))
- {
- $where_sql .= ' OR ' . $db->sql_in_set('user_id', $admin_ary);
- }
-
- $sql = 'SELECT user_id, username, user_email, user_lang, user_jabber, user_notify_type
- FROM ' . USERS_TABLE . ' ' .
- $where_sql;
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $messenger->template('admin_activate', $row['user_lang']);
- $messenger->set_addresses($row);
-
- $messenger->assign_vars(array(
- 'USERNAME' => htmlspecialchars_decode($data['username']),
- 'U_USER_DETAILS' => "$server_url/memberlist.$phpEx?mode=viewprofile&u=$user_id",
- 'U_ACTIVATE' => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
- );
-
- $messenger->send($row['user_notify_type']);
- }
- $db->sql_freeresult($result);
- }
+ if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
+ {
+ $phpbb_notifications = $phpbb_container->get('notification_manager');
+ $phpbb_notifications->add_notifications('admin_activate_user', array(
+ 'user_id' => $user_id,
+ 'user_actkey' => $user_row['user_actkey'],
+ 'user_regdate' => $user_row['user_regdate'],
+ ));
}
// Perform account linking if necessary
diff --git a/phpBB/includes/ucp/ucp_zebra.php b/phpBB/includes/ucp/ucp_zebra.php
index 6bb3cdc145..090f9bf34c 100644
--- a/phpBB/includes/ucp/ucp_zebra.php
+++ b/phpBB/includes/ucp/ucp_zebra.php
@@ -64,7 +64,7 @@ class ucp_zebra
* @var array user_ids User ids we remove
* @since 3.1-A1
*/
- $vars = array('user_ids');
+ $vars = array('mode', 'user_ids');
extract($phpbb_dispatcher->trigger_event('core.ucp_remove_zebra', compact($vars)));
$sql = 'DELETE FROM ' . ZEBRA_TABLE . '
diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php
index 03ed15c0ec..dd4ef13e49 100644
--- a/phpBB/install/convertors/convert_phpbb20.php
+++ b/phpBB/install/convertors/convert_phpbb20.php
@@ -33,7 +33,7 @@ $dbms = phpbb_convert_30_dbms_to_31($dbms);
$convertor_data = array(
'forum_name' => 'phpBB 2.0.x',
'version' => '1.0.3',
- 'phpbb_version' => '3.1.0-a2-dev',
+ 'phpbb_version' => '3.1.0-a2',
'author' => '<a href="https://www.phpbb.com/">phpBB Group</a>',
'dbms' => $dbms,
'dbhost' => $dbhost,
@@ -136,7 +136,7 @@ $config_schema = array(
'avatar_max_width' => 'avatar_max_width',
'avatar_max_height' => 'avatar_max_height',
'default_dateformat' => 'phpbb_set_encoding(default_dateformat)',
- 'board_timezone' => 'board_timezone',
+ 'board_timezone' => 'phpbb_convert_timezone(board_timezone)',
'allow_privmsg' => 'not(privmsg_disable)',
'gzip_compress' => 'gzip_compress',
'coppa_enable' => '!is_empty(coppa_mail)',
@@ -341,6 +341,9 @@ if (!$get_info)
update_folder_pm_count();
', '
update_unread_count();
+ ', (defined('MOD_ATTACHMENT')) ? '
+ phpbb_attachment_extension_group_name();
+ ' : '
', '
phpbb_convert_authentication(\'start\');
', '
@@ -399,7 +402,7 @@ if (!$get_info)
array('is_orphan', 0, ''),
array('poster_id', 'attachments.user_id_1 AS poster_id', 'phpbb_user_id'),
array('physical_filename', 'attachments_desc.physical_filename', 'import_attachment'),
- array('real_filename', 'attachments_desc.real_filename', ''),
+ array('real_filename', 'attachments_desc.real_filename', 'phpbb_set_encoding'),
array('download_count', 'attachments_desc.download_count', ''),
array('attach_comment', 'attachments_desc.comment', array('function1' => 'phpbb_set_encoding', 'function2' => 'utf8_htmlspecialchars')),
array('extension', 'attachments_desc.extension', ''),
@@ -497,7 +500,7 @@ if (!$get_info)
array('topic_title', 'topics.topic_title', 'phpbb_set_encoding'),
array('topic_time', 'topics.topic_time', ''),
array('topic_views', 'topics.topic_views', ''),
- array('topic_posts_approved', 'topics.topic_replies + 1', ''),
+ array('topic_posts_approved', 'topics.topic_replies', 'phpbb_topic_replies_to_posts'),
array('topic_posts_unapproved', 0, ''),
array('topic_posts_softdeleted',0, ''),
array('topic_last_post_id', 'topics.topic_last_post_id', ''),
@@ -506,6 +509,8 @@ if (!$get_info)
array('topic_type', 'topics.topic_type', 'phpbb_convert_topic_type'),
array('topic_first_post_id', 'topics.topic_first_post_id', ''),
array('topic_last_view_time', 'posts.post_time', 'intval'),
+ array('topic_visibility', ITEM_APPROVED, ''),
+
array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'htmlspecialchars_decode', 'function4' => 'utf8_htmlspecialchars')),
array('poll_start', 'vote_desc.vote_start', 'null_to_zero'),
array('poll_length', 'vote_desc.vote_length', 'null_to_zero'),
@@ -531,7 +536,7 @@ if (!$get_info)
array('topic_title', 'topics.topic_title', 'phpbb_set_encoding'),
array('topic_time', 'topics.topic_time', ''),
array('topic_views', 'topics.topic_views', ''),
- array('topic_posts_approved', 'topics.topic_replies + 1', ''),
+ array('topic_posts_approved', 'topics.topic_replies', 'phpbb_topic_replies_to_posts'),
array('topic_posts_unapproved', 0, ''),
array('topic_posts_softdeleted',0, ''),
array('topic_last_post_id', 'topics.topic_last_post_id', ''),
@@ -539,6 +544,7 @@ if (!$get_info)
array('topic_moved_id', 'topics.topic_moved_id', ''),
array('topic_type', 'topics.topic_type', 'phpbb_convert_topic_type'),
array('topic_first_post_id', 'topics.topic_first_post_id', ''),
+ array('topic_visibility', ITEM_APPROVED, ''),
array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'htmlspecialchars_decode', 'function4' => 'utf8_htmlspecialchars')),
array('poll_start', 'vote_desc.vote_start', 'null_to_zero'),
@@ -646,6 +652,7 @@ if (!$get_info)
array('post_edit_count', 'posts.post_edit_count', ''),
array('post_edit_reason', '', ''),
array('post_edit_user', '', 'phpbb_post_edit_user'),
+ array('post_visibility', ITEM_APPROVED, ''),
array('bbcode_uid', 'posts.post_time', 'make_uid'),
array('post_text', 'posts_text.post_text', 'phpbb_prepare_message'),
@@ -821,7 +828,10 @@ if (!$get_info)
array(
'target' => GROUPS_TABLE,
'autoincrement' => 'group_id',
- 'query_first' => array('target', $convert->truncate_statement . GROUPS_TABLE),
+ 'query_first' => array(
+ array('target', $convert->truncate_statement . GROUPS_TABLE),
+ array('target', $convert->truncate_statement . TEAMPAGE_TABLE),
+ ),
array('group_id', 'groups.group_id', ''),
array('group_type', 'groups.group_type', 'phpbb_convert_group_type'),
@@ -838,6 +848,7 @@ if (!$get_info)
'query_first' => array('target', $convert->truncate_statement . USER_GROUP_TABLE),
'execute_first' => '
add_default_groups();
+ add_groups_to_teampage();
',
array('group_id', 'groups.group_id', ''),
@@ -865,7 +876,8 @@ if (!$get_info)
'autoincrement' => 'user_id',
'query_first' => array(
array('target', 'DELETE FROM ' . USERS_TABLE . ' WHERE user_id <> ' . ANONYMOUS),
- array('target', $convert->truncate_statement . BOTS_TABLE)
+ array('target', $convert->truncate_statement . BOTS_TABLE),
+ array('target', $convert->truncate_statement . USER_NOTIFICATIONS_TABLE),
),
'execute_last' => '
@@ -889,7 +901,7 @@ if (!$get_info)
array('user_lastmark', 'users.user_lastvisit', 'intval'),
array('user_lang', $config['default_lang'], ''),
array('', 'users.user_lang', ''),
- array('user_timezone', 'users.user_timezone', 'floatval'),
+ array('user_timezone', 'users.user_timezone', 'phpbb_convert_timezone'),
array('user_dateformat', 'users.user_dateformat', array('function1' => 'phpbb_set_encoding', 'function2' => 'fill_dateformat')),
array('user_inactive_reason', '', 'phpbb_inactive_reason'),
array('user_inactive_time', '', 'phpbb_inactive_time'),
@@ -938,6 +950,8 @@ if (!$get_info)
array('user_sig_bbcode_bitfield', '', 'get_bbcode_bitfield'),
array('', 'users.user_regdate AS post_time', ''),
+ array('', 'users.user_notify_pm', 'phpbb_add_notification_options'),
+
'where' => 'users.user_id <> -1',
),
),
diff --git a/phpBB/install/convertors/functions_phpbb20.php b/phpBB/install/convertors/functions_phpbb20.php
index a698f0ef13..29e5f7ab09 100644
--- a/phpBB/install/convertors/functions_phpbb20.php
+++ b/phpBB/install/convertors/functions_phpbb20.php
@@ -540,6 +540,15 @@ function phpbb_user_id($user_id)
return (int) $user_id;
}
+/**
+* Return correct user id value
+* Everyone's id will be one higher to allow the guest/anonymous user to have a positive id as well
+*/
+function phpbb_topic_replies_to_posts($num_replies)
+{
+ return (int) $num_replies + 1;
+}
+
/* Copy additional table fields from old forum to new forum if user wants this (for Mod compatibility for example)
function phpbb_copy_table_fields()
{
@@ -1406,6 +1415,55 @@ function phpbb_attachment_category($cat_id)
}
/**
+* Convert the attachment extension names
+* This is only used if the Attachment MOD was installed
+*/
+function phpbb_attachment_extension_group_name()
+{
+ global $db, $phpbb_root_path, $phpEx;
+
+ // Update file extension group names to use language strings.
+ $sql = 'SELECT lang_dir
+ FROM ' . LANG_TABLE;
+ $result = $db->sql_query($sql);
+
+ $extension_groups_updated = array();
+ while ($lang_dir = $db->sql_fetchfield('lang_dir'))
+ {
+ $lang_dir = basename($lang_dir);
+ $lang_file = $phpbb_root_path . 'language/' . $lang_dir . '/acp/attachments.' . $phpEx;
+
+ if (!file_exists($lang_file))
+ {
+ continue;
+ }
+
+ $lang = array();
+ include($lang_file);
+
+ foreach ($lang as $lang_key => $lang_val)
+ {
+ if (isset($extension_groups_updated[$lang_key]) || strpos($lang_key, 'EXT_GROUP_') !== 0)
+ {
+ continue;
+ }
+
+ $sql_ary = array(
+ 'group_name' => substr($lang_key, 10), // Strip off 'EXT_GROUP_'
+ );
+
+ $sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . '
+ SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
+ WHERE group_name = '" . $db->sql_escape($lang_val) . "'";
+ $db->sql_query($sql);
+
+ $extension_groups_updated[$lang_key] = true;
+ }
+ }
+ $db->sql_freeresult($result);
+}
+
+/**
* Obtain list of forums in which different attachment categories can be used
*/
function phpbb_attachment_forum_perms($forum_permissions)
@@ -1868,3 +1926,50 @@ function phpbb_check_username_collisions()
$drop_sql = 'DROP TABLE ' . USERCONV_TABLE;
$db->sql_query($drop_sql);
}
+
+function phpbb_convert_timezone($timezone)
+{
+ global $config, $db, $phpbb_root_path, $phpEx, $table_prefix;
+ $timezone_migration = new \phpbb\db\migration\data\v310\timezone($config, $db, new \phpbb\db\tools($db), $phpbb_root_path, $phpEx, $table_prefix);
+ return $timezone_migration->convert_phpbb30_timezone($timezone, 0);
+}
+
+function phpbb_add_notification_options($user_notify_pm)
+{
+ global $convert_row, $db;
+
+ $user_id = phpbb_user_id($convert_row['user_id']);
+ if ($user_id == ANONYMOUS)
+ {
+ return;
+ }
+
+ $rows = array();
+
+ $rows[] = array(
+ 'item_type' => 'post',
+ 'item_id' => 0,
+ 'user_id' => (int) $user_id,
+ 'notify' => 1,
+ 'method' => 'email',
+ );
+ $rows[] = array(
+ 'item_type' => 'topic',
+ 'item_id' => 0,
+ 'user_id' => (int) $user_id,
+ 'notify' => 1,
+ 'method' => 'email',
+ );
+ if ($user_notify_pm)
+ {
+ $rows[] = array(
+ 'item_type' => 'pm',
+ 'item_id' => 0,
+ 'user_id' => (int) $user_id,
+ 'notify' => 1,
+ 'method' => 'email',
+ );
+ }
+
+ $sql = $db->sql_multi_insert(USER_NOTIFICATIONS_TABLE, $rows);
+}
diff --git a/phpBB/install/index.php b/phpBB/install/index.php
index c9bf76bf04..2e09e95ea7 100644
--- a/phpBB/install/index.php
+++ b/phpBB/install/index.php
@@ -691,7 +691,7 @@ class module
/**
* Generate the relevant HTML for an input field and the associated label and explanatory text
*/
- function input_field($name, $type, $value='', $options='')
+ function input_field($name, $type, $value = '', $options = '')
{
global $lang;
$tpl_type = explode(':', $type);
diff --git a/phpBB/install/install_convert.php b/phpBB/install/install_convert.php
index 4d3e1d3d4a..1c7e2dca76 100644
--- a/phpBB/install/install_convert.php
+++ b/phpBB/install/install_convert.php
@@ -90,13 +90,21 @@ class install_convert extends module
function main($mode, $sub)
{
global $lang, $template, $phpbb_root_path, $phpEx, $cache, $config, $language, $table_prefix;
- global $convert;
+ global $convert, $request, $phpbb_container;
$this->tpl_name = 'install_convert';
$this->mode = $mode;
$convert = new convert($this->p_master);
+ // Enable super globals to prevent issues with the new \phpbb\request\request object
+ $request->enable_super_globals();
+ // Create a normal container now
+ $phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx);
+
+ // Create cache
+ $cache = $phpbb_container->get('cache');
+
switch ($sub)
{
case 'intro':
@@ -418,6 +426,7 @@ class install_convert extends module
{
$error[] = sprintf($lang['TABLE_PREFIX_SAME'], $src_table_prefix);
}
+ $src_dbms = phpbb_convert_30_dbms_to_31($src_dbms);
// Check table prefix
if (!sizeof($error))
@@ -1537,7 +1546,7 @@ class install_convert extends module
function finish_conversion()
{
global $db, $phpbb_root_path, $phpEx, $convert, $config, $language, $user, $template;
- global $cache, $auth;
+ global $cache, $auth, $phpbb_container, $phpbb_log;
$db->sql_query('DELETE FROM ' . CONFIG_TABLE . "
WHERE config_name = 'convert_progress'
@@ -1550,6 +1559,7 @@ class install_convert extends module
phpbb_cache_moderators($db, $cache, $auth);
// And finally, add a note to the log
+ $phpbb_log = $phpbb_container->get('log');
add_log('admin', 'LOG_INSTALL_CONVERTED', $convert->convertor_data['forum_name'], $config['version']);
$url = $this->p_master->module_url . "?mode={$this->mode}&amp;sub=final&amp;language=$language";
diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php
index b7b358ab2f..dc6e57c851 100644
--- a/phpBB/install/install_update.php
+++ b/phpBB/install/install_update.php
@@ -1311,7 +1311,7 @@ class install_update extends module
}
}*/
- if (file_exists($phpbb_root_path . dirname($file)) || (strpos($file, 'styles/') !== 0 && strpos($file, 'language/') !== 0))
+ if (!phpbb_ignore_new_file_on_update($phpbb_root_path, $file))
{
$this->get_custom_info($update_list['new'], $file);
$update_list['new'][] = array('filename' => $file, 'custom' => false);
diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index 794def40dc..8a16526f36 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -232,7 +232,6 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('print_pm', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('queue_interval', '60');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('ranks_path', 'images/ranks');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('read_notification_expire_days', '30');
-INSERT INTO phpbb_config (config_name, config_value) VALUES ('read_notification_last_gc', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('read_notification_gc', '86400');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('require_activation', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('referer_validation', '1');
@@ -270,7 +269,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('use_system_cron', '0');
-INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.0-a2-dev');
+INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.0-a3-dev');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400');
@@ -288,6 +287,7 @@ INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_us
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('plupload_last_gc', '0', 1);
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('rand_seed', '0', 1);
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('rand_seed_last_update', '0', 1);
+INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('read_notification_last_gc', '0', 1);
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('record_online_date', '0', 1);
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('record_online_users', '0', 1);
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('search_indexing_state', '', 1);
diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php
index 0adaff10c8..8279a68022 100644
--- a/phpBB/language/en/acp/extensions.php
+++ b/phpBB/language/en/acp/extensions.php
@@ -39,47 +39,39 @@ $lang = array_merge($lang, array(
'EXTENSIONS' => 'Extensions',
'EXTENSIONS_ADMIN' => 'Extensions Manager',
'EXTENSIONS_EXPLAIN' => 'The Extensions Manager is a tool in your phpBB Board which allows you to manage all of your extensions statuses and view information about them.',
- 'EXTENSION_INVALID_LIST' => 'The "%s" extension is not valid.<br /><p>%s</p>',
+ 'EXTENSION_INVALID_LIST' => 'The “%s” extension is not valid.<br />%s<br /><br />',
'EXTENSION_NOT_AVAILABLE' => 'The selected extension is not available for this board, please verify your phpBB and PHP versions are allowed (see the details page).',
'DETAILS' => 'Details',
- 'AVAILABLE' => 'Available',
- 'ENABLED' => 'Enabled',
- 'DISABLED' => 'Disabled',
- 'PURGED' => 'Purged',
- 'UPLOADED' => 'Uploaded',
+ 'EXTENSIONS_DISABLED' => 'Disabled Extensions',
+ 'EXTENSIONS_ENABLED' => 'Enabled Extensions',
- 'ENABLE' => 'Enable',
- 'DISABLE' => 'Disable',
- 'PURGE' => 'Purge',
+ 'EXTENSION_DELETE_DATA' => 'Delete data',
+ 'EXTENSION_DISABLE' => 'Disable',
+ 'EXTENSION_ENABLE' => 'Enable',
- 'ENABLE_EXPLAIN' => 'Enabling an extension allows you to use it on your board.',
- 'DISABLE_EXPLAIN' => 'Disabling an extension retains its files and settings but removes any functionality added by the extension.',
- 'PURGE_EXPLAIN' => 'Purging an extension clears an extensions data while retaining its files.',
- 'DELETE_EXPLAIN' => 'Deleting an extension removes all of its files and settings. Log entries will remain, although any language variables added by the extension will not be available.',
+ 'EXTENSION_DELETE_DATA_EXPLAIN' => 'Deleting an extension’s data removes all of its data and settings. The extension files are retained so it can be enabled again.',
+ 'EXTENSION_DISABLE_EXPLAIN' => 'Disabling an extension retains its files, data and settings but removes any functionality added by the extension.',
+ 'EXTENSION_ENABLE_EXPLAIN' => 'Enabling an extension allows you to use it on your board.',
- 'DISABLE_IN_PROGRESS' => 'The extension is currently being disabled, please do not leave this page or refresh until it is completed.',
- 'ENABLE_IN_PROGRESS' => 'The extension is currently being installed, please do not leave this page or refresh until it is completed.',
- 'PURGE_IN_PROGRESS' => 'The extension is currently being purged, please do not leave this page or refresh until it is completed.',
- 'ENABLE_SUCCESS' => 'The extension was enabled successfully',
- 'DISABLE_SUCCESS' => 'The extension was disabled successfully',
- 'PURGE_SUCCESS' => 'The extension was purged successfully',
+ 'EXTENSION_DELETE_DATA_IN_PROGRESS' => 'The extension’s data is currently being deleted. Please do not leave or refresh this page until it is completed.',
+ 'EXTENSION_DISABLE_IN_PROGRESS' => 'The extension is currently being disabled. Please do not leave or refresh this page until it is completed.',
+ 'EXTENSION_ENABLE_IN_PROGRESS' => 'The extension is currently being enabled. Please do not leave or refresh this page until it is completed.',
- 'ENABLE_FAIL' => 'The extension could not be enabled',
- 'DISABLE_FAIL' => 'The extension could not be disabled',
- 'PURGE_FAIL' => 'The extension could not be purged',
+ 'EXTENSION_DELETE_DATA_SUCCESS' => 'The extension’s data was deleted successfully',
+ 'EXTENSION_DISABLE_SUCCESS' => 'The extension was disabled successfully',
+ 'EXTENSION_ENABLE_SUCCESS' => 'The extension was enabled successfully',
'EXTENSION_NAME' => 'Extension Name',
'EXTENSION_ACTIONS' => 'Actions',
'EXTENSION_OPTIONS' => 'Options',
- 'ENABLE_CONFIRM' => 'Are you sure that you wish to enable this extension?',
- 'DISABLE_CONFIRM' => 'Are you sure that you wish to disable this extension?',
- 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension&#39;s data? This will remove all settings stored for this extension and cannot be undone!',
+ 'EXTENSION_DELETE_DATA_CONFIRM' => 'Are you sure that you wish to delete the data associated with “%s”?<br /><br />This removes all of its data and settings and cannot be undone!',
+ 'EXTENSION_DISABLE_CONFIRM' => 'Are you sure that you wish to disable the “%s” extension?',
+ 'EXTENSION_ENABLE_CONFIRM' => 'Are you sure that you wish to enable the “%s” extension?',
- 'WARNING' => 'Warning',
- 'RETURN' => 'Return',
+ 'RETURN_TO_EXTENSION_LIST' => 'Return to the extension list',
'EXT_DETAILS' => 'Extension Details',
'DISPLAY_NAME' => 'Display Name',
diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php
index bb1c4698ec..29e61e68c2 100644
--- a/phpBB/language/en/common.php
+++ b/phpBB/language/en/common.php
@@ -62,6 +62,7 @@ $lang = array_merge($lang, array(
'ACCOUNT_DEACTIVATED' => 'Your account has been manually deactivated and is only able to be reactivated by an administrator.',
'ACCOUNT_NOT_ACTIVATED' => 'Your account has not been activated yet.',
'ACP' => 'Administration Control Panel',
+ 'ACP_SHORT' => 'Administer',
'ACTIVE' => 'active',
'ACTIVE_ERROR' => 'The specified username is currently inactive. If you have problems activating your account, please contact a board administrator.',
'ADMINISTRATOR' => 'Administrator',
@@ -152,7 +153,6 @@ $lang = array_merge($lang, array(
1 => '%d character',
2 => '%d characters',
),
- 'CLICK_VIEW_PRIVMSG' => '%sGo to your inbox%s',
'COLLAPSE_VIEW' => 'Collapse view',
'CLOSE_WINDOW' => 'Close window',
'COLOUR_SWATCH' => 'Colour swatch',
@@ -381,6 +381,7 @@ $lang = array_merge($lang, array(
'MB' => 'MB',
'MIB' => 'MiB',
'MCP' => 'Moderator Control Panel',
+ 'MCP_SHORT' => 'Moderate',
'MEMBERLIST' => 'Members',
'MEMBERLIST_EXPLAIN' => 'View complete list of members',
'MERGE' => 'Merge',
@@ -414,14 +415,17 @@ $lang = array_merge($lang, array(
'NOT_WATCHING_TOPIC' => 'You are no longer subscribed to this topic.',
'NOTIFICATIONS' => 'Notifications',
'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.',
+ 'NOTIFICATION_BOOKMARK_TRIMMED' => '%1$s and %3$d others replied to the topic “%2$s” you have bookmarked.',
'NOTIFICATION_GROUP_REQUEST' => '%1$s is requesting to join the group %2$s.',
'NOTIFICATION_GROUP_REQUEST_APPROVED' => 'Your request to join the group %1$s has been approved.',
'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".',
'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".',
+ 'NOTIFICATION_POST_TRIMMED' => '%1$s and %3$d others replied to the topic “%2$s”',
'NOTIFICATION_POST_APPROVED' => 'Your post was approved "%2$s".',
'NOTIFICATION_POST_DISAPPROVED' => 'Your post "%1$s" was disapproved for reason: "%2$s".',
'NOTIFICATION_POST_IN_QUEUE' => 'A new post titled "%2$s" was posted by %1$s and needs approval.',
'NOTIFICATION_QUOTE' => '%1$s quoted you in the post "%2$s".',
+ 'NOTIFICATION_QUOTE_TRIMMED' => '%1$s and %3$d others replied to the topic “%2$s”',
'NOTIFICATION_REPORT_PM' => '%1$s reported a Private Message "%2$s" for reason: "%3$s".',
'NOTIFICATION_REPORT_POST' => '%1$s reported a post "%2$s" for reason: "%3$s".',
'NOTIFICATION_REPORT_CLOSED' => '%1$s closed the report you made for "%2$s".',
@@ -430,6 +434,7 @@ $lang = array_merge($lang, array(
'NOTIFICATION_TOPIC_DISAPPROVED' => 'Your topic "%1$s" was disapproved for reason: "%2$s".',
'NOTIFICATION_TOPIC_IN_QUEUE' => 'A new topic titled "%2$s" was posted by %1$s and needs approval.',
'NOTIFICATION_TYPE_NOT_EXIST' => 'The notification type "%s" is missing from the file system.',
+ 'NOTIFICATION_ADMIN_ACTIVATE_USER' => 'The user “%1$s” is newly registered and requires activation.',
'NOTIFY_ADMIN' => 'Please notify the board administrator or webmaster.',
'NOTIFY_ADMIN_EMAIL' => 'Please notify the board administrator or webmaster: <a href="mailto:%1$s">%1$s</a>',
'NO_ACCESS_ATTACHMENT' => 'You are not allowed to access this file.',
@@ -833,9 +838,6 @@ $lang = array_merge($lang, array(
'YES' => 'Yes',
'YIM' => 'YIM',
'YOU_LAST_VISIT' => 'Last visit was: %s',
- 'YOU_NEW_PM' => 'A new private message is waiting for you in your Inbox.',
- 'YOU_NEW_PMS' => 'New private messages are waiting for you in your Inbox.',
- 'YOU_NO_NEW_PM' => 'No new private messages are waiting for you.',
'datetime' => array(
'TODAY' => 'Today',
@@ -893,6 +895,8 @@ $lang = array_merge($lang, array(
// Timezones can be translated. We use this for the Etc/GMT timezones here,
// because they are named invers to their offset.
'timezones' => array(
+ 'UTC' => 'UTC',
+
'Etc/GMT-12' => 'GMT+12',
'Etc/GMT-11' => 'GMT+11',
'Etc/GMT-10' => 'GMT+10',
@@ -917,6 +921,436 @@ $lang = array_merge($lang, array(
'Etc/GMT+10' => 'GMT-10',
'Etc/GMT+11' => 'GMT-11',
'Etc/GMT+12' => 'GMT-12',
+
+ 'Africa/Abidjan' => 'Africa/Abidjan',
+ 'Africa/Accra' => 'Africa/Accra',
+ 'Africa/Addis_Ababa' => 'Africa/Addis Ababa',
+ 'Africa/Algiers' => 'Africa/Algiers',
+ 'Africa/Asmara' => 'Africa/Asmara',
+ 'Africa/Bamako' => 'Africa/Bamako',
+ 'Africa/Bangui' => 'Africa/Bangui',
+ 'Africa/Banjul' => 'Africa/Banjul',
+ 'Africa/Bissau' => 'Africa/Bissau',
+ 'Africa/Blantyre' => 'Africa/Blantyre',
+ 'Africa/Brazzaville' => 'Africa/Brazzaville',
+ 'Africa/Bujumbura' => 'Africa/Bujumbura',
+ 'Africa/Cairo' => 'Africa/Cairo',
+ 'Africa/Casablanca' => 'Africa/Casablanca',
+ 'Africa/Ceuta' => 'Africa/Ceuta',
+ 'Africa/Conakry' => 'Africa/Conakry',
+ 'Africa/Dakar' => 'Africa/Dakar',
+ 'Africa/Dar_es_Salaam' => 'Africa/Dar es Salaam',
+ 'Africa/Djibouti' => 'Africa/Djibouti',
+ 'Africa/Douala' => 'Africa/Douala',
+ 'Africa/El_Aaiun' => 'Africa/El Aaiun',
+ 'Africa/Freetown' => 'Africa/Freetown',
+ 'Africa/Gaborone' => 'Africa/Gaborone',
+ 'Africa/Harare' => 'Africa/Harare',
+ 'Africa/Johannesburg' => 'Africa/Johannesburg',
+ 'Africa/Juba' => 'Africa/Juba',
+ 'Africa/Kampala' => 'Africa/Kampala',
+ 'Africa/Khartoum' => 'Africa/Khartoum',
+ 'Africa/Kigali' => 'Africa/Kigali',
+ 'Africa/Kinshasa' => 'Africa/Kinshasa',
+ 'Africa/Lagos' => 'Africa/Lagos',
+ 'Africa/Libreville' => 'Africa/Libreville',
+ 'Africa/Lome' => 'Africa/Lome',
+ 'Africa/Luanda' => 'Africa/Luanda',
+ 'Africa/Lubumbashi' => 'Africa/Lubumbashi',
+ 'Africa/Lusaka' => 'Africa/Lusaka',
+ 'Africa/Malabo' => 'Africa/Malabo',
+ 'Africa/Maputo' => 'Africa/Maputo',
+ 'Africa/Maseru' => 'Africa/Maseru',
+ 'Africa/Mbabane' => 'Africa/Mbabane',
+ 'Africa/Mogadishu' => 'Africa/Mogadishu',
+ 'Africa/Monrovia' => 'Africa/Monrovia',
+ 'Africa/Nairobi' => 'Africa/Nairobi',
+ 'Africa/Ndjamena' => 'Africa/Ndjamena',
+ 'Africa/Niamey' => 'Africa/Niamey',
+ 'Africa/Nouakchott' => 'Africa/Nouakchott',
+ 'Africa/Ouagadougou' => 'Africa/Ouagadougou',
+ 'Africa/Porto-Novo' => 'Africa/Porto-Novo',
+ 'Africa/Sao_Tome' => 'Africa/Sao Tome',
+ 'Africa/Tripoli' => 'Africa/Tripoli',
+ 'Africa/Tunis' => 'Africa/Tunis',
+ 'Africa/Windhoek' => 'Africa/Windhoek',
+
+ 'America/Adak' => 'America/Adak',
+ 'America/Anchorage' => 'America/Anchorage',
+ 'America/Anguilla' => 'America/Anguilla',
+ 'America/Antigua' => 'America/Antigua',
+ 'America/Araguaina' => 'America/Araguaina',
+
+ 'America/Argentina/Buenos_Aires' => 'America/Argentina/Buenos Aires',
+ 'America/Argentina/Catamarca' => 'America/Argentina/Catamarca',
+ 'America/Argentina/Cordoba' => 'America/Argentina/Cordoba',
+ 'America/Argentina/Jujuy' => 'America/Argentina/Jujuy',
+ 'America/Argentina/La_Rioja' => 'America/Argentina/La Rioja',
+ 'America/Argentina/Mendoza' => 'America/Argentina/Mendoza',
+ 'America/Argentina/Rio_Gallegos' => 'America/Argentina/Rio Gallegos',
+ 'America/Argentina/Salta' => 'America/Argentina/Salta',
+ 'America/Argentina/San_Juan' => 'America/Argentina/San Juan',
+ 'America/Argentina/San_Luis' => 'America/Argentina/San Luis',
+ 'America/Argentina/Tucuman' => 'America/Argentina/Tucuman',
+ 'America/Argentina/Ushuaia' => 'America/Argentina/Ushuaia',
+
+ 'America/Aruba' => 'America/Aruba',
+ 'America/Asuncion' => 'America/Asuncion',
+ 'America/Atikokan' => 'America/Atikokan',
+ 'America/Bahia' => 'America/Bahia',
+ 'America/Bahia_Banderas' => 'America/Bahia Banderas',
+ 'America/Barbados' => 'America/Barbados',
+ 'America/Belem' => 'America/Belem',
+ 'America/Belize' => 'America/Belize',
+ 'America/Blanc-Sablon' => 'America/Blanc-Sablon',
+ 'America/Boa_Vista' => 'America/Boa Vista',
+ 'America/Bogota' => 'America/Bogota',
+ 'America/Boise' => 'America/Boise',
+ 'America/Cambridge_Bay' => 'America/Cambridge Bay',
+ 'America/Campo_Grande' => 'America/Campo Grande',
+ 'America/Cancun' => 'America/Cancun',
+ 'America/Caracas' => 'America/Caracas',
+ 'America/Cayenne' => 'America/Cayenne',
+ 'America/Cayman' => 'America/Cayman',
+ 'America/Chicago' => 'America/Chicago',
+ 'America/Chihuahua' => 'America/Chihuahua',
+ 'America/Costa_Rica' => 'America/Costa Rica',
+ 'America/Creston' => 'America/Creston',
+ 'America/Cuiaba' => 'America/Cuiaba',
+ 'America/Curacao' => 'America/Curacao',
+ 'America/Danmarkshavn' => 'America/Danmarkshavn',
+ 'America/Dawson' => 'America/Dawson',
+ 'America/Dawson_Creek' => 'America/Dawson Creek',
+ 'America/Denver' => 'America/Denver',
+ 'America/Detroit' => 'America/Detroit',
+ 'America/Dominica' => 'America/Dominica',
+ 'America/Edmonton' => 'America/Edmonton',
+ 'America/Eirunepe' => 'America/Eirunepe',
+ 'America/El_Salvador' => 'America/El Salvador',
+ 'America/Fortaleza' => 'America/Fortaleza',
+ 'America/Glace_Bay' => 'America/Glace Bay',
+ 'America/Godthab' => 'America/Godthab',
+ 'America/Goose_Bay' => 'America/Goose Bay',
+ 'America/Grand_Turk' => 'America/Grand Turk',
+ 'America/Grenada' => 'America/Grenada',
+ 'America/Guadeloupe' => 'America/Guadeloupe',
+ 'America/Guatemala' => 'America/Guatemala',
+ 'America/Guayaquil' => 'America/Guayaquil',
+ 'America/Guyana' => 'America/Guyana',
+ 'America/Halifax' => 'America/Halifax',
+ 'America/Havana' => 'America/Havana',
+ 'America/Hermosillo' => 'America/Hermosillo',
+ 'America/Indiana/Indianapolis' => 'America/Indiana/Indianapolis',
+ 'America/Indiana/Knox' => 'America/Indiana/Knox',
+ 'America/Indiana/Marengo' => 'America/Indiana/Marengo',
+ 'America/Indiana/Petersburg' => 'America/Indiana/Petersburg',
+ 'America/Indiana/Tell_City' => 'America/Indiana/Tell City',
+ 'America/Indiana/Vevay' => 'America/Indiana/Vevay',
+ 'America/Indiana/Vincennes' => 'America/Indiana/Vincennes',
+ 'America/Indiana/Winamac' => 'America/Indiana/Winamac',
+ 'America/Inuvik' => 'America/Inuvik',
+ 'America/Iqaluit' => 'America/Iqaluit',
+ 'America/Jamaica' => 'America/Jamaica',
+ 'America/Juneau' => 'America/Juneau',
+ 'America/Kentucky/Louisville' => 'America/Kentucky/Louisville',
+ 'America/Kentucky/Monticello' => 'America/Kentucky/Monticello',
+ 'America/Kralendijk' => 'America/Kralendijk',
+ 'America/La_Paz' => 'America/La Paz',
+ 'America/Lima' => 'America/Lima',
+ 'America/Los_Angeles' => 'America/Los Angeles',
+ 'America/Lower_Princes' => 'America/Lower Princes',
+ 'America/Maceio' => 'America/Maceio',
+ 'America/Managua' => 'America/Managua',
+ 'America/Manaus' => 'America/Manaus',
+ 'America/Marigot' => 'America/Marigot',
+ 'America/Martinique' => 'America/Martinique',
+ 'America/Matamoros' => 'America/Matamoros',
+ 'America/Mazatlan' => 'America/Mazatlan',
+ 'America/Menominee' => 'America/Menominee',
+ 'America/Merida' => 'America/Merida',
+ 'America/Metlakatla' => 'America/Metlakatla',
+ 'America/Mexico_City' => 'America/Mexico City',
+ 'America/Miquelon' => 'America/Miquelon',
+ 'America/Moncton' => 'America/Moncton',
+ 'America/Monterrey' => 'America/Monterrey',
+ 'America/Montevideo' => 'America/Montevideo',
+ 'America/Montreal' => 'America/Montreal',
+ 'America/Montserrat' => 'America/Montserrat',
+ 'America/Nassau' => 'America/Nassau',
+ 'America/New_York' => 'America/New York',
+ 'America/Nipigon' => 'America/Nipigon',
+ 'America/Nome' => 'America/Nome',
+ 'America/Noronha' => 'America/Noronha',
+ 'America/North_Dakota/Beulah' => 'America/North Dakota/Beulah',
+ 'America/North_Dakota/Center' => 'America/North Dakota/Center',
+ 'America/North_Dakota/New_Salem' => 'America/North Dakota/New Salem',
+ 'America/Ojinaga' => 'America/Ojinaga',
+ 'America/Panama' => 'America/Panama',
+ 'America/Pangnirtung' => 'America/Pangnirtung',
+ 'America/Paramaribo' => 'America/Paramaribo',
+ 'America/Phoenix' => 'America/Phoenix',
+ 'America/Port-au-Prince' => 'America/Port-au-Prince',
+ 'America/Port_of_Spain' => 'America/Port of Spain',
+ 'America/Porto_Velho' => 'America/Porto Velho',
+ 'America/Puerto_Rico' => 'America/Puerto Rico',
+ 'America/Rainy_River' => 'America/Rainy River',
+ 'America/Rankin_Inlet' => 'America/Rankin Inlet',
+ 'America/Recife' => 'America/Recife',
+ 'America/Regina' => 'America/Regina',
+ 'America/Resolute' => 'America/Resolute',
+ 'America/Rio_Branco' => 'America/Rio Branco',
+ 'America/Santa_Isabel' => 'America/Santa Isabel',
+ 'America/Santarem' => 'America/Santarem',
+ 'America/Santiago' => 'America/Santiago',
+ 'America/Santo_Domingo' => 'America/Santo Domingo',
+ 'America/Sao_Paulo' => 'America/Sao Paulo',
+ 'America/Scoresbysund' => 'America/Scoresbysund',
+ 'America/Shiprock' => 'America/Shiprock',
+ 'America/Sitka' => 'America/Sitka',
+ 'America/St_Barthelemy' => 'America/St. Barthelemy',
+ 'America/St_Johns' => 'America/St. Johns',
+ 'America/St_Kitts' => 'America/St. Kitts',
+ 'America/St_Lucia' => 'America/St. Lucia',
+ 'America/St_Thomas' => 'America/St. Thomas',
+ 'America/St_Vincent' => 'America/St. Vincent',
+ 'America/Swift_Current' => 'America/Swift Current',
+ 'America/Tegucigalpa' => 'America/Tegucigalpa',
+ 'America/Thule' => 'America/Thule',
+ 'America/Thunder_Bay' => 'America/Thunder Bay',
+ 'America/Tijuana' => 'America/Tijuana',
+ 'America/Toronto' => 'America/Toronto',
+ 'America/Tortola' => 'America/Tortola',
+ 'America/Vancouver' => 'America/Vancouver',
+ 'America/Whitehorse' => 'America/Whitehorse',
+ 'America/Winnipeg' => 'America/Winnipeg',
+ 'America/Yakutat' => 'America/Yakutat',
+ 'America/Yellowknife' => 'America/Yellowknife',
+
+ 'Antarctica/Casey' => 'Antarctica/Casey',
+ 'Antarctica/Davis' => 'Antarctica/Davis',
+ 'Antarctica/DumontDUrville' => 'Antarctica/DumontDUrville',
+ 'Antarctica/Macquarie' => 'Antarctica/Macquarie',
+ 'Antarctica/Mawson' => 'Antarctica/Mawson',
+ 'Antarctica/McMurdo' => 'Antarctica/McMurdo',
+ 'Antarctica/Palmer' => 'Antarctica/Palmer',
+ 'Antarctica/Rothera' => 'Antarctica/Rothera',
+ 'Antarctica/South_Pole' => 'Antarctica/South Pole',
+ 'Antarctica/Syowa' => 'Antarctica/Syowa',
+ 'Antarctica/Vostok' => 'Antarctica/Vostok',
+
+ 'Arctic/Longyearbyen' => 'Arctic/Longyearbyen',
+
+ 'Asia/Aden' => 'Asia/Aden',
+ 'Asia/Almaty' => 'Asia/Almaty',
+ 'Asia/Amman' => 'Asia/Amman',
+ 'Asia/Anadyr' => 'Asia/Anadyr',
+ 'Asia/Aqtau' => 'Asia/Aqtau',
+ 'Asia/Aqtobe' => 'Asia/Aqtobe',
+ 'Asia/Ashgabat' => 'Asia/Ashgabat',
+ 'Asia/Baghdad' => 'Asia/Baghdad',
+ 'Asia/Bahrain' => 'Asia/Bahrain',
+ 'Asia/Baku' => 'Asia/Baku',
+ 'Asia/Bangkok' => 'Asia/Bangkok',
+ 'Asia/Beirut' => 'Asia/Beirut',
+ 'Asia/Bishkek' => 'Asia/Bishkek',
+ 'Asia/Brunei' => 'Asia/Brunei',
+ 'Asia/Choibalsan' => 'Asia/Choibalsan',
+ 'Asia/Chongqing' => 'Asia/Chongqing',
+ 'Asia/Colombo' => 'Asia/Colombo',
+ 'Asia/Damascus' => 'Asia/Damascus',
+ 'Asia/Dhaka' => 'Asia/Dhaka',
+ 'Asia/Dili' => 'Asia/Dili',
+ 'Asia/Dubai' => 'Asia/Dubai',
+ 'Asia/Dushanbe' => 'Asia/Dushanbe',
+ 'Asia/Gaza' => 'Asia/Gaza',
+ 'Asia/Harbin' => 'Asia/Harbin',
+ 'Asia/Hebron' => 'Asia/Hebron',
+ 'Asia/Ho_Chi_Minh' => 'Asia/Ho Chi Minh',
+ 'Asia/Hong_Kong' => 'Asia/Hong Kong',
+ 'Asia/Hovd' => 'Asia/Hovd',
+ 'Asia/Irkutsk' => 'Asia/Irkutsk',
+ 'Asia/Jakarta' => 'Asia/Jakarta',
+ 'Asia/Jayapura' => 'Asia/Jayapura',
+ 'Asia/Jerusalem' => 'Asia/Jerusalem',
+ 'Asia/Kabul' => 'Asia/Kabul',
+ 'Asia/Kamchatka' => 'Asia/Kamchatka',
+ 'Asia/Karachi' => 'Asia/Karachi',
+ 'Asia/Kashgar' => 'Asia/Kashgar',
+ 'Asia/Kathmandu' => 'Asia/Kathmandu',
+ 'Asia/Khandyga' => 'Asia/Khandyga',
+ 'Asia/Kolkata' => 'Asia/Kolkata',
+ 'Asia/Krasnoyarsk' => 'Asia/Krasnoyarsk',
+ 'Asia/Kuala_Lumpur' => 'Asia/Kuala Lumpur',
+ 'Asia/Kuching' => 'Asia/Kuching',
+ 'Asia/Kuwait' => 'Asia/Kuwait',
+ 'Asia/Macau' => 'Asia/Macau',
+ 'Asia/Magadan' => 'Asia/Magadan',
+ 'Asia/Makassar' => 'Asia/Makassar',
+ 'Asia/Manila' => 'Asia/Manila',
+ 'Asia/Muscat' => 'Asia/Muscat',
+ 'Asia/Nicosia' => 'Asia/Nicosia',
+ 'Asia/Novokuznetsk' => 'Asia/Novokuznetsk',
+ 'Asia/Novosibirsk' => 'Asia/Novosibirsk',
+ 'Asia/Omsk' => 'Asia/Omsk',
+ 'Asia/Oral' => 'Asia/Oral',
+ 'Asia/Phnom_Penh' => 'Asia/Phnom Penh',
+ 'Asia/Pontianak' => 'Asia/Pontianak',
+ 'Asia/Pyongyang' => 'Asia/Pyongyang',
+ 'Asia/Qatar' => 'Asia/Qatar',
+ 'Asia/Qyzylorda' => 'Asia/Qyzylorda',
+ 'Asia/Rangoon' => 'Asia/Rangoon',
+ 'Asia/Riyadh' => 'Asia/Riyadh',
+ 'Asia/Sakhalin' => 'Asia/Sakhalin',
+ 'Asia/Samarkand' => 'Asia/Samarkand',
+ 'Asia/Seoul' => 'Asia/Seoul',
+ 'Asia/Shanghai' => 'Asia/Shanghai',
+ 'Asia/Singapore' => 'Asia/Singapore',
+ 'Asia/Taipei' => 'Asia/Taipei',
+ 'Asia/Tashkent' => 'Asia/Tashkent',
+ 'Asia/Tbilisi' => 'Asia/Tbilisi',
+ 'Asia/Tehran' => 'Asia/Tehran',
+ 'Asia/Thimphu' => 'Asia/Thimphu',
+ 'Asia/Tokyo' => 'Asia/Tokyo',
+ 'Asia/Ulaanbaatar' => 'Asia/Ulaanbaatar',
+ 'Asia/Urumqi' => 'Asia/Urumqi',
+ 'Asia/Ust-Nera' => 'Asia/Ust-Nera',
+ 'Asia/Vientiane' => 'Asia/Vientiane',
+ 'Asia/Vladivostok' => 'Asia/Vladivostok',
+ 'Asia/Yakutsk' => 'Asia/Yakutsk',
+ 'Asia/Yekaterinburg' => 'Asia/Yekaterinburg',
+ 'Asia/Yerevan' => 'Asia/Yerevan',
+
+ 'Atlantic/Azores' => 'Atlantic/Azores',
+ 'Atlantic/Bermuda' => 'Atlantic/Bermuda',
+ 'Atlantic/Canary' => 'Atlantic/Canary',
+ 'Atlantic/Cape_Verde' => 'Atlantic/Cape Verde',
+ 'Atlantic/Faroe' => 'Atlantic/Faroe',
+ 'Atlantic/Madeira' => 'Atlantic/Madeira',
+ 'Atlantic/Reykjavik' => 'Atlantic/Reykjavik',
+ 'Atlantic/South_Georgia' => 'Atlantic/South Georgia',
+ 'Atlantic/St_Helena' => 'Atlantic/St. Helena',
+ 'Atlantic/Stanley' => 'Atlantic/Stanley',
+
+ 'Australia/Adelaide' => 'Australia/Adelaide',
+ 'Australia/Brisbane' => 'Australia/Brisbane',
+ 'Australia/Broken_Hill' => 'Australia/Broken Hill',
+ 'Australia/Currie' => 'Australia/Currie',
+ 'Australia/Darwin' => 'Australia/Darwin',
+ 'Australia/Eucla' => 'Australia/Eucla',
+ 'Australia/Hobart' => 'Australia/Hobart',
+ 'Australia/Lindeman' => 'Australia/Lindeman',
+ 'Australia/Lord_Howe' => 'Australia/Lord Howe',
+ 'Australia/Melbourne' => 'Australia/Melbourne',
+ 'Australia/Perth' => 'Australia/Perth',
+ 'Australia/Sydney' => 'Australia/Sydney',
+
+ 'Europe/Amsterdam' => 'Europe/Amsterdam',
+ 'Europe/Andorra' => 'Europe/Andorra',
+ 'Europe/Athens' => 'Europe/Athens',
+ 'Europe/Belgrade' => 'Europe/Belgrade',
+ 'Europe/Berlin' => 'Europe/Berlin',
+ 'Europe/Bratislava' => 'Europe/Bratislava',
+ 'Europe/Brussels' => 'Europe/Brussels',
+ 'Europe/Bucharest' => 'Europe/Bucharest',
+ 'Europe/Budapest' => 'Europe/Budapest',
+ 'Europe/Busingen' => 'Europe/Busingen',
+ 'Europe/Chisinau' => 'Europe/Chisinau',
+ 'Europe/Copenhagen' => 'Europe/Copenhagen',
+ 'Europe/Dublin' => 'Europe/Dublin',
+ 'Europe/Gibraltar' => 'Europe/Gibraltar',
+ 'Europe/Guernsey' => 'Europe/Guernsey',
+ 'Europe/Helsinki' => 'Europe/Helsinki',
+ 'Europe/Isle_of_Man' => 'Europe/Isle of Man',
+ 'Europe/Istanbul' => 'Europe/Istanbul',
+ 'Europe/Jersey' => 'Europe/Jersey',
+ 'Europe/Kaliningrad' => 'Europe/Kaliningrad',
+ 'Europe/Kiev' => 'Europe/Kiev',
+ 'Europe/Lisbon' => 'Europe/Lisbon',
+ 'Europe/Ljubljana' => 'Europe/Ljubljana',
+ 'Europe/London' => 'Europe/London',
+ 'Europe/Luxembourg' => 'Europe/Luxembourg',
+ 'Europe/Madrid' => 'Europe/Madrid',
+ 'Europe/Malta' => 'Europe/Malta',
+ 'Europe/Mariehamn' => 'Europe/Mariehamn',
+ 'Europe/Minsk' => 'Europe/Minsk',
+ 'Europe/Monaco' => 'Europe/Monaco',
+ 'Europe/Moscow' => 'Europe/Moscow',
+ 'Europe/Oslo' => 'Europe/Oslo',
+ 'Europe/Paris' => 'Europe/Paris',
+ 'Europe/Podgorica' => 'Europe/Podgorica',
+ 'Europe/Prague' => 'Europe/Prague',
+ 'Europe/Riga' => 'Europe/Riga',
+ 'Europe/Rome' => 'Europe/Rome',
+ 'Europe/Samara' => 'Europe/Samara',
+ 'Europe/San_Marino' => 'Europe/San Marino',
+ 'Europe/Sarajevo' => 'Europe/Sarajevo',
+ 'Europe/Simferopol' => 'Europe/Simferopol',
+ 'Europe/Skopje' => 'Europe/Skopje',
+ 'Europe/Sofia' => 'Europe/Sofia',
+ 'Europe/Stockholm' => 'Europe/Stockholm',
+ 'Europe/Tallinn' => 'Europe/Tallinn',
+ 'Europe/Tirane' => 'Europe/Tirane',
+ 'Europe/Uzhgorod' => 'Europe/Uzhgorod',
+ 'Europe/Vaduz' => 'Europe/Vaduz',
+ 'Europe/Vatican' => 'Europe/Vatican',
+ 'Europe/Vienna' => 'Europe/Vienna',
+ 'Europe/Vilnius' => 'Europe/Vilnius',
+ 'Europe/Volgograd' => 'Europe/Volgograd',
+ 'Europe/Warsaw' => 'Europe/Warsaw',
+ 'Europe/Zagreb' => 'Europe/Zagreb',
+ 'Europe/Zaporozhye' => 'Europe/Zaporozhye',
+ 'Europe/Zurich' => 'Europe/Zurich',
+
+ 'Indian/Antananarivo' => 'Indian/Antananarivo',
+ 'Indian/Chagos' => 'Indian/Chagos',
+ 'Indian/Christmas' => 'Indian/Christmas',
+ 'Indian/Cocos' => 'Indian/Cocos',
+ 'Indian/Comoro' => 'Indian/Comoro',
+ 'Indian/Kerguelen' => 'Indian/Kerguelen',
+ 'Indian/Mahe' => 'Indian/Mahe',
+ 'Indian/Maldives' => 'Indian/Maldives',
+ 'Indian/Mauritius' => 'Indian/Mauritius',
+ 'Indian/Mayotte' => 'Indian/Mayotte',
+ 'Indian/Reunion' => 'Indian/Reunion',
+
+ 'Pacific/Apia' => 'Pacific/Apia',
+ 'Pacific/Auckland' => 'Pacific/Auckland',
+ 'Pacific/Chatham' => 'Pacific/Chatham',
+ 'Pacific/Chuuk' => 'Pacific/Chuuk',
+ 'Pacific/Easter' => 'Pacific/Easter',
+ 'Pacific/Efate' => 'Pacific/Efate',
+ 'Pacific/Enderbury' => 'Pacific/Enderbury',
+ 'Pacific/Fakaofo' => 'Pacific/Fakaofo',
+ 'Pacific/Fiji' => 'Pacific/Fiji',
+ 'Pacific/Funafuti' => 'Pacific/Funafuti',
+ 'Pacific/Galapagos' => 'Pacific/Galapagos',
+ 'Pacific/Gambier' => 'Pacific/Gambier',
+ 'Pacific/Guadalcanal' => 'Pacific/Guadalcanal',
+ 'Pacific/Guam' => 'Pacific/Guam',
+ 'Pacific/Honolulu' => 'Pacific/Honolulu',
+ 'Pacific/Johnston' => 'Pacific/Johnston',
+ 'Pacific/Kiritimati' => 'Pacific/Kiritimati',
+ 'Pacific/Kosrae' => 'Pacific/Kosrae',
+ 'Pacific/Kwajalein' => 'Pacific/Kwajalein',
+ 'Pacific/Majuro' => 'Pacific/Majuro',
+ 'Pacific/Marquesas' => 'Pacific/Marquesas',
+ 'Pacific/Midway' => 'Pacific/Midway',
+ 'Pacific/Nauru' => 'Pacific/Nauru',
+ 'Pacific/Niue' => 'Pacific/Niue',
+ 'Pacific/Norfolk' => 'Pacific/Norfolk',
+ 'Pacific/Noumea' => 'Pacific/Noumea',
+ 'Pacific/Pago_Pago' => 'Pacific/Pago Pago',
+ 'Pacific/Palau' => 'Pacific/Palau',
+ 'Pacific/Pitcairn' => 'Pacific/Pitcairn',
+ 'Pacific/Pohnpei' => 'Pacific/Pohnpei',
+ 'Pacific/Port_Moresby' => 'Pacific/Port Moresby',
+ 'Pacific/Rarotonga' => 'Pacific/Rarotonga',
+ 'Pacific/Saipan' => 'Pacific/Saipan',
+ 'Pacific/Tahiti' => 'Pacific/Tahiti',
+ 'Pacific/Tarawa' => 'Pacific/Tarawa',
+ 'Pacific/Tongatapu' => 'Pacific/Tongatapu',
+ 'Pacific/Wake' => 'Pacific/Wake',
+ 'Pacific/Wallis' => 'Pacific/Wallis',
),
// The value is only an example and will get replaced by the current time on view
diff --git a/phpBB/language/en/email/topic_notify.txt b/phpBB/language/en/email/topic_notify.txt
index 529478eae2..d5272d7416 100644
--- a/phpBB/language/en/email/topic_notify.txt
+++ b/phpBB/language/en/email/topic_notify.txt
@@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}"
Hello {USERNAME},
-You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
+You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. No more notifications will be sent until you visit the topic.
If you want to view the newest post made since your last visit, click the following link:
{U_NEWEST_POST}
@@ -14,7 +14,6 @@ If you want to view the forum, click the following link:
{U_FORUM}
If you no longer wish to watch this topic you can either click the "Unsubscribe topic" link found at the bottom of the topic above, or by clicking the following link:
-
{U_STOP_WATCHING_TOPIC}
{EMAIL_SIG}
diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php
index 2f4d35a5b4..6f392d6efe 100644
--- a/phpBB/language/en/ucp.php
+++ b/phpBB/language/en/ucp.php
@@ -312,6 +312,7 @@ $lang = array_merge($lang, array(
'NOTIFICATIONS_MARK_ALL_READ_SUCCESS' => 'All notifications have been marked read.',
'NOTIFICATION_GROUP_MISCELLANEOUS' => 'Miscellaneous Notifications',
'NOTIFICATION_GROUP_MODERATION' => 'Moderation Notifications',
+ 'NOTIFICATION_GROUP_ADMINISTRATION' => 'Administration Notifications',
'NOTIFICATION_GROUP_POSTING' => 'Posting Notifications',
'NOTIFICATION_METHOD_EMAIL' => 'Email',
'NOTIFICATION_METHOD_JABBER' => 'Jabber',
@@ -325,6 +326,7 @@ $lang = array_merge($lang, array(
'NOTIFICATION_TYPE_QUOTE' => 'Someone quotes you in a post',
'NOTIFICATION_TYPE_REPORT' => 'Someone reports a post',
'NOTIFICATION_TYPE_TOPIC' => 'Someone creates a topic in a forum to which you are subscribed',
+ 'NOTIFICATION_TYPE_ADMIN_ACTIVATE_USER' => 'Newly registered user requiring activation',
'NOTIFY_METHOD' => 'Notification method',
'NOTIFY_METHOD_BOTH' => 'Both',
@@ -407,7 +409,6 @@ $lang = array_merge($lang, array(
'PM_SUBJECT' => 'Message subject',
'PM_TO' => 'Send to',
'PM_USERS_REMOVED_NO_PM' => 'Some users couldn’t be added as they have disabled private message receipt.',
- 'POPUP_ON_PM' => 'Pop up window on new private message',
'POST_EDIT_PM' => 'Edit message',
'POST_FORWARD_PM' => 'Forward message',
'POST_NEW_PM' => 'Compose message',
@@ -519,8 +520,6 @@ $lang = array_merge($lang, array(
'UCP_PM_COMPOSE' => 'Compose message',
'UCP_PM_DRAFTS' => 'Manage PM drafts',
'UCP_PM_OPTIONS' => 'Rules, folders &amp; settings',
- 'UCP_PM_POPUP' => 'Private messages',
- 'UCP_PM_POPUP_TITLE' => 'Private message popup',
'UCP_PM_UNREAD' => 'Unread messages',
'UCP_PM_VIEW' => 'View messages',
diff --git a/phpBB/phpbb/auth/auth.php b/phpBB/phpbb/auth/auth.php
index b5cc675838..81676e75fc 100644
--- a/phpBB/phpbb/auth/auth.php
+++ b/phpBB/phpbb/auth/auth.php
@@ -10,14 +10,6 @@
namespace phpbb\auth;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Permission/Auth class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/auth/provider/apache.php b/phpBB/phpbb/auth/provider/apache.php
index 5cbb63c4fc..77bc976938 100644
--- a/phpBB/phpbb/auth/provider/apache.php
+++ b/phpBB/phpbb/auth/provider/apache.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Apache authentication provider for phpBB3
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/base.php b/phpBB/phpbb/auth/provider/base.php
index 2222d8c1b6..78a3289356 100644
--- a/phpBB/phpbb/auth/provider/base.php
+++ b/phpBB/phpbb/auth/provider/base.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base authentication provider class that all other providers should implement
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/db.php b/phpBB/phpbb/auth/provider/db.php
index 4654e49fb5..6ea04eab36 100644
--- a/phpBB/phpbb/auth/provider/db.php
+++ b/phpBB/phpbb/auth/provider/db.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Database authentication provider for phpBB3
*
* This is for authentication via the integrated user table
diff --git a/phpBB/phpbb/auth/provider/ldap.php b/phpBB/phpbb/auth/provider/ldap.php
index 9d29789567..4ce43853bd 100644
--- a/phpBB/phpbb/auth/provider/ldap.php
+++ b/phpBB/phpbb/auth/provider/ldap.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Database authentication provider for phpBB3
*
* This is for authentication via the integrated user table
@@ -97,7 +89,6 @@ class ldap extends \phpbb\auth\provider\base
@ldap_close($ldap);
-
if (!is_array($result) || sizeof($result) < 2)
{
return sprintf($this->user->lang['LDAP_NO_IDENTITY'], $this->user->data['username']);
diff --git a/phpBB/phpbb/auth/provider/oauth/oauth.php b/phpBB/phpbb/auth/provider/oauth/oauth.php
index de81ac0d04..2749661269 100644
--- a/phpBB/phpbb/auth/provider/oauth/oauth.php
+++ b/phpBB/phpbb/auth/provider/oauth/oauth.php
@@ -9,14 +9,6 @@
namespace phpbb\auth\provider\oauth;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use OAuth\Common\Consumer\Credentials;
use OAuth\Common\Http\Uri\Uri;
@@ -179,7 +171,7 @@ class oauth extends \phpbb\auth\provider\base
$storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->auth_provider_oauth_token_storage_table);
$query = 'mode=login&login=external&oauth_service=' . $service_name_original;
- $service = $this->get_service($service_name_original, $storage, $service_credentials, $this->service_providers[$service_name]->get_auth_scope(), $query);
+ $service = $this->get_service($service_name_original, $storage, $service_credentials, $query, $this->service_providers[$service_name]->get_auth_scope());
if ($this->request->is_set('code', \phpbb\request\request_interface::GET))
{
@@ -273,13 +265,13 @@ class oauth extends \phpbb\auth\provider\base
* @param string $service_name The name of the service
* @param \phpbb\auth\provider\oauth\token_storage $storage
* @param array $service_credentials {@see \phpbb\auth\provider\oauth\oauth::get_service_credentials}
- * @param array $scope The scope of the request against
- * the api.
* @param string $query The query string of the
* current_uri used in redirection
+ * @param array $scope The scope of the request against
+ * the api.
* @return \OAuth\Common\Service\ServiceInterface
*/
- protected function get_service($service_name, \phpbb\auth\provider\oauth\token_storage $storage, array $service_credentials, array $scopes = array(), $query)
+ protected function get_service($service_name, \phpbb\auth\provider\oauth\token_storage $storage, array $service_credentials, $query, array $scopes = array())
{
$current_uri = $this->get_current_uri($service_name, $query);
@@ -458,7 +450,7 @@ class oauth extends \phpbb\auth\provider\base
// Prepare for an authentication request
$service_credentials = $this->service_providers[$service_name]->get_service_credentials();
$scopes = $this->service_providers[$service_name]->get_auth_scope();
- $service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $scopes, $query);
+ $service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $query, $scopes);
$this->service_providers[$service_name]->set_external_service_provider($service);
// The user has already authenticated successfully, request to authenticate again
@@ -491,7 +483,7 @@ class oauth extends \phpbb\auth\provider\base
$query = 'i=ucp_auth_link&mode=auth_link&link=1&oauth_service=' . strtolower($link_data['oauth_service']);
$service_credentials = $this->service_providers[$service_name]->get_service_credentials();
$scopes = $this->service_providers[$service_name]->get_auth_scope();
- $service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $scopes, $query);
+ $service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $query, $scopes);
if ($this->request->is_set('code', \phpbb\request\request_interface::GET))
{
diff --git a/phpBB/phpbb/auth/provider/oauth/service/base.php b/phpBB/phpbb/auth/provider/oauth/service/base.php
index 61deb48695..7a144d2f51 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/base.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/base.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base OAuth abstract class that all OAuth services should implement
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/service/bitly.php b/phpBB/phpbb/auth/provider/oauth/service/bitly.php
index 47cf7ee380..b4050033a6 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/bitly.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/bitly.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Bitly OAuth service
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/service/exception.php b/phpBB/phpbb/auth/provider/oauth/service/exception.php
index 0c6cba9fb8..3bc93be01e 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/exception.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* OAuth service exception class
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/service/facebook.php b/phpBB/phpbb/auth/provider/oauth/service/facebook.php
index 4a4eeba6d5..2698be8b18 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/facebook.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/facebook.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Facebook OAuth service
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/service/google.php b/phpBB/phpbb/auth/provider/oauth/service/google.php
index 2449bbf523..08cb025c2d 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/google.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/google.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Google OAuth service
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/service/service_interface.php b/phpBB/phpbb/auth/provider/oauth/service/service_interface.php
index ab69fe6ef3..eee3a51cac 100644
--- a/phpBB/phpbb/auth/provider/oauth/service/service_interface.php
+++ b/phpBB/phpbb/auth/provider/oauth/service/service_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider\oauth\service;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* OAuth service interface
*
* @package auth
diff --git a/phpBB/phpbb/auth/provider/oauth/token_storage.php b/phpBB/phpbb/auth/provider/oauth/token_storage.php
index 2ce0e32da3..43574288dc 100644
--- a/phpBB/phpbb/auth/provider/oauth/token_storage.php
+++ b/phpBB/phpbb/auth/provider/oauth/token_storage.php
@@ -9,14 +9,6 @@
namespace phpbb\auth\provider\oauth;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use OAuth\OAuth1\Token\StdOAuth1Token;
use OAuth\Common\Token\TokenInterface;
@@ -78,7 +70,7 @@ class token_storage implements TokenStorageInterface
{
$service = $this->get_service_name_for_db($service);
- if ($this->cachedToken instanceOf TokenInterface)
+ if ($this->cachedToken instanceof TokenInterface)
{
return $this->cachedToken;
}
@@ -238,7 +230,7 @@ class token_storage implements TokenStorageInterface
{
$service = $this->get_service_name_for_db($service);
- if ($this->cachedToken instanceOf TokenInterface) {
+ if ($this->cachedToken instanceof TokenInterface) {
return $this->cachedToken;
}
diff --git a/phpBB/phpbb/auth/provider/provider_interface.php b/phpBB/phpbb/auth/provider/provider_interface.php
index 1bb209c821..946731f52d 100644
--- a/phpBB/phpbb/auth/provider/provider_interface.php
+++ b/phpBB/phpbb/auth/provider/provider_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\auth\provider;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The interface authentication provider classes have to implement.
*
* @package auth
diff --git a/phpBB/phpbb/avatar/driver/driver.php b/phpBB/phpbb/avatar/driver/driver.php
index 206df86543..d360614122 100644
--- a/phpBB/phpbb/avatar/driver/driver.php
+++ b/phpBB/phpbb/avatar/driver/driver.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base class for avatar drivers
* @package phpBB3
*/
diff --git a/phpBB/phpbb/avatar/driver/driver_interface.php b/phpBB/phpbb/avatar/driver/driver_interface.php
index d9540c19db..7f049469a2 100644
--- a/phpBB/phpbb/avatar/driver/driver_interface.php
+++ b/phpBB/phpbb/avatar/driver/driver_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Interface for avatar drivers
* @package phpBB3
*/
diff --git a/phpBB/phpbb/avatar/driver/gravatar.php b/phpBB/phpbb/avatar/driver/gravatar.php
index 3ad783932e..d64f4da734 100644
--- a/phpBB/phpbb/avatar/driver/gravatar.php
+++ b/phpBB/phpbb/avatar/driver/gravatar.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Handles avatars hosted at gravatar.com
* @package phpBB3
*/
diff --git a/phpBB/phpbb/avatar/driver/local.php b/phpBB/phpbb/avatar/driver/local.php
index 0686ffe79a..f6acc6e636 100644
--- a/phpBB/phpbb/avatar/driver/local.php
+++ b/phpBB/phpbb/avatar/driver/local.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Handles avatars selected from the board gallery
* @package phpBB3
*/
diff --git a/phpBB/phpbb/avatar/driver/remote.php b/phpBB/phpbb/avatar/driver/remote.php
index 1aa638dfe5..22d50c703e 100644
--- a/phpBB/phpbb/avatar/driver/remote.php
+++ b/phpBB/phpbb/avatar/driver/remote.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Handles avatars hosted remotely
* @package phpBB3
*/
@@ -125,6 +117,37 @@ class remote extends \phpbb\avatar\driver\driver
$types = \fileupload::image_types();
$extension = strtolower(\filespec::get_extension($url));
+ // Check if this is actually an image
+ if ($file_stream = @fopen($url, 'r'))
+ {
+ // Timeout after 1 second
+ stream_set_timeout($file_stream, 1);
+ $meta = stream_get_meta_data($file_stream);
+ foreach ($meta['wrapper_data'] as $header)
+ {
+ $header = preg_split('/ /', $header, 2);
+ if (strtr(strtolower(trim($header[0], ':')), '_', '-') === 'content-type')
+ {
+ if (strpos($header[1], 'image/') !== 0)
+ {
+ $error[] = 'AVATAR_URL_INVALID';
+ fclose($file_stream);
+ return false;
+ }
+ else
+ {
+ fclose($file_stream);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ $error[] = 'AVATAR_URL_INVALID';
+ return false;
+ }
+
if (!empty($image_data) && (!isset($types[$image_data[2]]) || !in_array($extension, $types[$image_data[2]])))
{
if (!isset($types[$image_data[2]]))
diff --git a/phpBB/phpbb/avatar/driver/upload.php b/phpBB/phpbb/avatar/driver/upload.php
index bda872df7a..822c40af98 100644
--- a/phpBB/phpbb/avatar/driver/upload.php
+++ b/phpBB/phpbb/avatar/driver/upload.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Handles avatars uploaded to the board
* @package phpBB3
*/
diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php
index c28380a401..6ce924d2eb 100644
--- a/phpBB/phpbb/avatar/manager.php
+++ b/phpBB/phpbb/avatar/manager.php
@@ -10,14 +10,6 @@
namespace phpbb\avatar;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* @package avatar
*/
class manager
@@ -42,12 +34,6 @@ class manager
protected $avatar_drivers;
/**
- * Service container object
- * @var object
- */
- protected $container;
-
- /**
* Default avatar data row
* @var array
*/
@@ -63,13 +49,27 @@ class manager
*
* @param \phpbb\config\config $config phpBB configuration
* @param array $avatar_drivers Avatar drivers passed via the service container
- * @param object $container Container object
*/
- public function __construct(\phpbb\config\config $config, $avatar_drivers, $container)
+ public function __construct(\phpbb\config\config $config, $avatar_drivers)
{
$this->config = $config;
- $this->avatar_drivers = $avatar_drivers;
- $this->container = $container;
+ $this->register_avatar_drivers($avatar_drivers);
+ }
+
+ /**
+ * Register avatar drivers
+ *
+ * @param array $avatar_drivers Service collection of avatar drivers
+ */
+ protected function register_avatar_drivers($avatar_drivers)
+ {
+ if (!empty($avatar_drivers))
+ {
+ foreach ($avatar_drivers as $driver)
+ {
+ $this->avatar_drivers[$driver->get_name()] = $driver;
+ }
+ }
}
/**
@@ -112,7 +112,7 @@ class manager
* There is no need to handle invalid avatar types as the following code
* will cause a ServiceNotFoundException if the type does not exist
*/
- $driver = $this->container->get($avatar_type);
+ $driver = $this->avatar_drivers[$avatar_type];
return $driver;
}
@@ -178,14 +178,16 @@ class manager
}
/**
- * Strip out user_ and group_ prefixes from keys
+ * Strip out user_, group_, or other prefixes from array keys
*
- * @param array $row User data or group data
+ * @param array $row User data or group data
+ * @param string $prefix Prefix of data keys (e.g. user), should not include the trailing underscore
*
- * @return array User data or group data with keys that have been
- * stripped from the preceding "user_" or "group_"
+ * @return array User or group data with keys that have been
+ * stripped from the preceding "user_" or "group_"
+ * Also the group id is prefixed with g, when the prefix group is removed.
*/
- static public function clean_row($row)
+ static public function clean_row($row, $prefix = '')
{
// Upon creation of a user/group $row might be empty
if (empty($row))
@@ -193,23 +195,19 @@ class manager
return self::$default_row;
}
- $keys = array_keys($row);
- $values = array_values($row);
-
- $keys = array_map(array('\phpbb\avatar\manager', 'strip_prefix'), $keys);
+ $output = array();
+ foreach ($row as $key => $value)
+ {
+ $key = preg_replace("#^(?:{$prefix}_)#", '', $key);
+ $output[$key] = $value;
+ }
- return array_combine($keys, $values);
- }
+ if ($prefix === 'group' && isset($output['id']))
+ {
+ $output['id'] = 'g' . $output['id'];
+ }
- /**
- * Strip prepending user_ or group_ prefix from key
- *
- * @param string Array key
- * @return string Key that has been stripped from its prefix
- */
- static protected function strip_prefix($key)
- {
- return preg_replace('#^(?:user_|group_)#', '', $key);
+ return $output;
}
/**
diff --git a/phpBB/phpbb/cache/driver/apc.php b/phpBB/phpbb/cache/driver/apc.php
index ce72ec6134..a28d91c00a 100644
--- a/phpBB/phpbb/cache/driver/apc.php
+++ b/phpBB/phpbb/cache/driver/apc.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM for APC
* @package acm
*/
diff --git a/phpBB/phpbb/cache/driver/base.php b/phpBB/phpbb/cache/driver/base.php
index 90185a00d2..feaca25a5b 100644
--- a/phpBB/phpbb/cache/driver/base.php
+++ b/phpBB/phpbb/cache/driver/base.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* @package acm
*/
abstract class base implements \phpbb\cache\driver\driver_interface
diff --git a/phpBB/phpbb/cache/driver/driver_interface.php b/phpBB/phpbb/cache/driver/driver_interface.php
index 34c60b5935..0715a4b934 100644
--- a/phpBB/phpbb/cache/driver/driver_interface.php
+++ b/phpBB/phpbb/cache/driver/driver_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* An interface that all cache drivers must implement
*
* @package acm
diff --git a/phpBB/phpbb/cache/driver/eaccelerator.php b/phpBB/phpbb/cache/driver/eaccelerator.php
index 72c0d77d02..2629cb53e5 100644
--- a/phpBB/phpbb/cache/driver/eaccelerator.php
+++ b/phpBB/phpbb/cache/driver/eaccelerator.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM for eAccelerator
* @package acm
* @todo Missing locks from destroy() talk with David
diff --git a/phpBB/phpbb/cache/driver/file.php b/phpBB/phpbb/cache/driver/file.php
index a64232400b..6686da6953 100644
--- a/phpBB/phpbb/cache/driver/file.php
+++ b/phpBB/phpbb/cache/driver/file.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM File Based Caching
* @package acm
*/
diff --git a/phpBB/phpbb/cache/driver/memcache.php b/phpBB/phpbb/cache/driver/memcache.php
index 84fe68ae49..c725ec0fb0 100644
--- a/phpBB/phpbb/cache/driver/memcache.php
+++ b/phpBB/phpbb/cache/driver/memcache.php
@@ -9,14 +9,6 @@
namespace phpbb\cache\driver;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
if (!defined('PHPBB_ACM_MEMCACHE_PORT'))
{
define('PHPBB_ACM_MEMCACHE_PORT', 11211);
diff --git a/phpBB/phpbb/cache/driver/memory.php b/phpBB/phpbb/cache/driver/memory.php
index 5a9861913f..292024212b 100644
--- a/phpBB/phpbb/cache/driver/memory.php
+++ b/phpBB/phpbb/cache/driver/memory.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM Abstract Memory Class
* @package acm
*/
diff --git a/phpBB/phpbb/cache/driver/null.php b/phpBB/phpbb/cache/driver/null.php
index c03319ad61..ea535ca1e1 100644
--- a/phpBB/phpbb/cache/driver/null.php
+++ b/phpBB/phpbb/cache/driver/null.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM Null Caching
* @package acm
*/
diff --git a/phpBB/phpbb/cache/driver/redis.php b/phpBB/phpbb/cache/driver/redis.php
index 317d07428a..3c6cb0e138 100644
--- a/phpBB/phpbb/cache/driver/redis.php
+++ b/phpBB/phpbb/cache/driver/redis.php
@@ -9,14 +9,6 @@
namespace phpbb\cache\driver;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
if (!defined('PHPBB_ACM_REDIS_PORT'))
{
define('PHPBB_ACM_REDIS_PORT', 6379);
diff --git a/phpBB/phpbb/cache/driver/wincache.php b/phpBB/phpbb/cache/driver/wincache.php
index a0b24e4a1f..1f040e9ab2 100644
--- a/phpBB/phpbb/cache/driver/wincache.php
+++ b/phpBB/phpbb/cache/driver/wincache.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM for WinCache
* @package acm
*/
diff --git a/phpBB/phpbb/cache/driver/xcache.php b/phpBB/phpbb/cache/driver/xcache.php
index fdcbf7e4b5..4d0d683b3d 100644
--- a/phpBB/phpbb/cache/driver/xcache.php
+++ b/phpBB/phpbb/cache/driver/xcache.php
@@ -10,14 +10,6 @@
namespace phpbb\cache\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* ACM for XCache
* @package acm
*
diff --git a/phpBB/phpbb/cache/service.php b/phpBB/phpbb/cache/service.php
index da8f4eb8d8..ebbcfb8cdb 100644
--- a/phpBB/phpbb/cache/service.php
+++ b/phpBB/phpbb/cache/service.php
@@ -10,14 +10,6 @@
namespace phpbb\cache;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Class for grabbing/handling cached entries
* @package acm
*/
diff --git a/phpBB/phpbb/class_loader.php b/phpBB/phpbb/class_loader.php
index 769f28b4f1..37b62fff24 100644
--- a/phpBB/phpbb/class_loader.php
+++ b/phpBB/phpbb/class_loader.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The class loader resolves class names to file system paths and loads them if
* necessary.
*
@@ -55,7 +47,7 @@ class class_loader
* @param \phpbb\cache\driver\driver_interface $cache An implementation of the phpBB cache interface.
*/
public function __construct($namespace, $path, $php_ext = 'php', \phpbb\cache\driver\driver_interface $cache = null)
- {
+ {
if ($namespace[0] !== '\\')
{
$namespace = '\\' . $namespace;
diff --git a/phpBB/phpbb/config/config.php b/phpBB/phpbb/config/config.php
index dc865df707..d37922acf1 100644
--- a/phpBB/phpbb/config/config.php
+++ b/phpBB/phpbb/config/config.php
@@ -10,14 +10,6 @@
namespace phpbb\config;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Configuration container class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/config/db.php b/phpBB/phpbb/config/db.php
index 0a490af14f..c1a3630a14 100644
--- a/phpBB/phpbb/config/db.php
+++ b/phpBB/phpbb/config/db.php
@@ -10,14 +10,6 @@
namespace phpbb\config;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Configuration container class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/config/db_text.php b/phpBB/phpbb/config/db_text.php
index 3ee3351e19..b1ea112b53 100644
--- a/phpBB/phpbb/config/db_text.php
+++ b/phpBB/phpbb/config/db_text.php
@@ -10,14 +10,6 @@
namespace phpbb\config;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Manages configuration options with an arbitrary length value stored in a TEXT
* column. In constrast to class \phpbb\config\db, values are never cached and
* prefetched, but every get operation sends a query to the database.
diff --git a/phpBB/phpbb/console/application.php b/phpBB/phpbb/console/application.php
new file mode 100644
index 0000000000..fdcd9d42f6
--- /dev/null
+++ b/phpBB/phpbb/console/application.php
@@ -0,0 +1,23 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\console;
+
+use Symfony\Component\DependencyInjection\TaggedContainerInterface;
+
+class application extends \Symfony\Component\Console\Application
+{
+ function register_container_commands(TaggedContainerInterface $container, $tag = 'console.command')
+ {
+ foreach($container->findTaggedServiceIds($tag) as $id => $void)
+ {
+ $this->add($container->get($id));
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/command.php b/phpBB/phpbb/console/command/command.php
new file mode 100644
index 0000000000..6abbdd203c
--- /dev/null
+++ b/phpBB/phpbb/console/command/command.php
@@ -0,0 +1,14 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\console\command;
+
+abstract class command extends \Symfony\Component\Console\Command\Command
+{
+}
diff --git a/phpBB/phpbb/console/command/extension/command.php b/phpBB/phpbb/console/command/extension/command.php
new file mode 100644
index 0000000000..edde7ce2e2
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/command.php
@@ -0,0 +1,22 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+abstract class command extends \phpbb\console\command\command
+{
+ /** @var \phpbb\extension\manager */
+ protected $manager;
+
+ function __construct(\phpbb\extension\manager $manager)
+ {
+ $this->manager = $manager;
+
+ parent::__construct();
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/disable.php b/phpBB/phpbb/console/command/extension/disable.php
new file mode 100644
index 0000000000..e4de70ca34
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/disable.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class disable extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:disable')
+ ->setDescription('Disables the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->disable($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<error>Could not disable extension $name</error>");
+ return 1;
+ }
+ else
+ {
+ $output->writeln("<info>Successfully disabled extension $name</info>");
+ return 0;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/enable.php b/phpBB/phpbb/console/command/extension/enable.php
new file mode 100644
index 0000000000..ee7dae76aa
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/enable.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class enable extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:enable')
+ ->setDescription('Enables the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->enable($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<info>Successfully enabled extension $name</info>");
+ return 0;
+ }
+ else
+ {
+ $output->writeln("<error>Could not enable extension $name</error>");
+ return 1;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/purge.php b/phpBB/phpbb/console/command/extension/purge.php
new file mode 100644
index 0000000000..c2e1d2928c
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/purge.php
@@ -0,0 +1,47 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class purge extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:purge')
+ ->setDescription('Purges the specified extension.')
+ ->addArgument(
+ 'extension-name',
+ InputArgument::REQUIRED,
+ 'Name of the extension'
+ )
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $name = $input->getArgument('extension-name');
+ $this->manager->purge($name);
+ $this->manager->load_extensions();
+
+ if ($this->manager->enabled($name))
+ {
+ $output->writeln("<error>Could not purge extension $name</error>");
+ return 1;
+ }
+ else
+ {
+ $output->writeln("<info>Successfully purge extension $name</info>");
+ return 0;
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/extension/show.php b/phpBB/phpbb/console/command/extension/show.php
new file mode 100644
index 0000000000..0f48ac2379
--- /dev/null
+++ b/phpBB/phpbb/console/command/extension/show.php
@@ -0,0 +1,58 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\extension;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class show extends command
+{
+ protected function configure()
+ {
+ $this
+ ->setName('extension:show')
+ ->setDescription('Lists all extensions in the database and on the filesystem.')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $this->manager->load_extensions();
+ $all = array_keys($this->manager->all_available());
+
+ if (empty($all))
+ {
+ $output->writeln('<comment>No extensions were found.</comment>');
+ return 3;
+ }
+
+ $enabled = array_keys($this->manager->all_enabled());
+ $this->print_extension_list($output, 'Enabled', $enabled);
+
+ $output->writeln('');
+
+ $disabled = array_keys($this->manager->all_disabled());
+ $this->print_extension_list($output, 'Disabled', $disabled);
+
+ $output->writeln('');
+
+ $purged = array_diff($all, $enabled, $disabled);
+ $this->print_extension_list($output, 'Available', $purged);
+ }
+
+ protected function print_extension_list(OutputInterface $output, $type, array $extensions)
+ {
+ $output->writeln("<info>$type:</info>");
+
+ foreach ($extensions as $extension)
+ {
+ $output->writeln(" - $extension");
+ }
+ }
+}
diff --git a/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
new file mode 100644
index 0000000000..04db880091
--- /dev/null
+++ b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
@@ -0,0 +1,71 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\fixup;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class recalculate_email_hash extends \phpbb\console\command\command
+{
+ /** @var \phpbb\db\driver\driver */
+ protected $db;
+
+ function __construct(\phpbb\db\driver\driver $db)
+ {
+ $this->db = $db;
+
+ parent::__construct();
+ }
+
+ protected function configure()
+ {
+ $this
+ ->setName('fixup:recalculate-email-hash')
+ ->setDescription('Recalculates the user_email_hash column of the users table.')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $sql = 'SELECT user_id, user_email, user_email_hash
+ FROM ' . USERS_TABLE . '
+ WHERE user_type <> ' . USER_IGNORE . "
+ AND user_email <> ''";
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $user_email_hash = phpbb_email_hash($row['user_email']);
+ if ($user_email_hash !== $row['user_email_hash'])
+ {
+ $sql_ary = array(
+ 'user_email_hash' => $user_email_hash,
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
+ WHERE user_id = ' . (int) $row['user_id'];
+ $this->db->sql_query($sql);
+
+ if ($output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG)
+ {
+ $output->writeln(sprintf(
+ 'user_id %d, email %s => %s',
+ $row['user_id'],
+ $row['user_email'],
+ $user_email_hash
+ ));
+ }
+ }
+ }
+ $this->db->sql_freeresult($result);
+
+ $output->writeln('<info>Successfully recalculated all email hashes.</info>');
+ }
+}
diff --git a/phpBB/phpbb/content_visibility.php b/phpBB/phpbb/content_visibility.php
index 0b351bc9ec..874889015a 100644
--- a/phpBB/phpbb/content_visibility.php
+++ b/phpBB/phpbb/content_visibility.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* phpbb_visibility
* Handle fetching and setting the visibility for topics and posts
* @package phpbb
diff --git a/phpBB/phpbb/controller/exception.php b/phpBB/phpbb/controller/exception.php
index e8694b8bcf..06ece8d1d5 100644
--- a/phpBB/phpbb/controller/exception.php
+++ b/phpBB/phpbb/controller/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\controller;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Controller exception class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/controller/helper.php b/phpBB/phpbb/controller/helper.php
index 07483a91eb..05a05d1e57 100644
--- a/phpBB/phpbb/controller/helper.php
+++ b/phpBB/phpbb/controller/helper.php
@@ -9,14 +9,6 @@
namespace phpbb\controller;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\HttpFoundation\Response;
/**
diff --git a/phpBB/phpbb/controller/provider.php b/phpBB/phpbb/controller/provider.php
index 048ca72084..fde51696e8 100644
--- a/phpBB/phpbb/controller/provider.php
+++ b/phpBB/phpbb/controller/provider.php
@@ -9,14 +9,6 @@
namespace phpbb\controller;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
diff --git a/phpBB/phpbb/controller/resolver.php b/phpBB/phpbb/controller/resolver.php
index 1cc8981105..233179e343 100644
--- a/phpBB/phpbb/controller/resolver.php
+++ b/phpBB/phpbb/controller/resolver.php
@@ -9,14 +9,6 @@
namespace phpbb\controller;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
diff --git a/phpBB/phpbb/cron/manager.php b/phpBB/phpbb/cron/manager.php
index f58ba64a3d..b6af07aff7 100644
--- a/phpBB/phpbb/cron/manager.php
+++ b/phpBB/phpbb/cron/manager.php
@@ -10,14 +10,6 @@
namespace phpbb\cron;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Cron manager class.
*
* Finds installed cron tasks, stores task objects, provides task selection.
diff --git a/phpBB/phpbb/cron/task/base.php b/phpBB/phpbb/cron/task/base.php
index f30c9daf1b..63f0407bcd 100644
--- a/phpBB/phpbb/cron/task/base.php
+++ b/phpBB/phpbb/cron/task/base.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Cron task base class. Provides sensible defaults for cron tasks
* and partially implements cron task interface, making writing cron tasks easier.
*
diff --git a/phpBB/phpbb/cron/task/core/prune_all_forums.php b/phpBB/phpbb/cron/task/core/prune_all_forums.php
index 8e3ef25ce6..90b9a5914b 100644
--- a/phpBB/phpbb/cron/task/core/prune_all_forums.php
+++ b/phpBB/phpbb/cron/task/core/prune_all_forums.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Prune all forums cron task.
*
* It is intended to be invoked from system cron.
diff --git a/phpBB/phpbb/cron/task/core/prune_forum.php b/phpBB/phpbb/cron/task/core/prune_forum.php
index f14ab7b702..e0d8b067c5 100644
--- a/phpBB/phpbb/cron/task/core/prune_forum.php
+++ b/phpBB/phpbb/cron/task/core/prune_forum.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Prune one forum cron task.
*
* It is intended to be used when cron is invoked via web.
diff --git a/phpBB/phpbb/cron/task/core/prune_notifications.php b/phpBB/phpbb/cron/task/core/prune_notifications.php
index 1f75709322..9f67c54e1c 100644
--- a/phpBB/phpbb/cron/task/core/prune_notifications.php
+++ b/phpBB/phpbb/cron/task/core/prune_notifications.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Prune notifications cron task.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/queue.php b/phpBB/phpbb/cron/task/core/queue.php
index cb13df86df..cd799b8024 100644
--- a/phpBB/phpbb/cron/task/core/queue.php
+++ b/phpBB/phpbb/cron/task/core/queue.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Queue cron task. Sends email and jabber messages queued by other scripts.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/tidy_cache.php b/phpBB/phpbb/cron/task/core/tidy_cache.php
index 021d5fd8a3..a94a85db53 100644
--- a/phpBB/phpbb/cron/task/core/tidy_cache.php
+++ b/phpBB/phpbb/cron/task/core/tidy_cache.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Tidy cache cron task.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/tidy_database.php b/phpBB/phpbb/cron/task/core/tidy_database.php
index d03cba1d86..f712a5047c 100644
--- a/phpBB/phpbb/cron/task/core/tidy_database.php
+++ b/phpBB/phpbb/cron/task/core/tidy_database.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Tidy database cron task.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/tidy_plupload.php b/phpBB/phpbb/cron/task/core/tidy_plupload.php
index 09e9dfa6b4..5a98e0bd7b 100644
--- a/phpBB/phpbb/cron/task/core/tidy_plupload.php
+++ b/phpBB/phpbb/cron/task/core/tidy_plupload.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Cron task for cleaning plupload's temporary upload directory.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/tidy_search.php b/phpBB/phpbb/cron/task/core/tidy_search.php
index ebd0d86cbc..42f7df308f 100644
--- a/phpBB/phpbb/cron/task/core/tidy_search.php
+++ b/phpBB/phpbb/cron/task/core/tidy_search.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Tidy search cron task.
*
* Will only run when the currently selected search backend supports tidying.
diff --git a/phpBB/phpbb/cron/task/core/tidy_sessions.php b/phpBB/phpbb/cron/task/core/tidy_sessions.php
index 5df019ae46..68094af1f7 100644
--- a/phpBB/phpbb/cron/task/core/tidy_sessions.php
+++ b/phpBB/phpbb/cron/task/core/tidy_sessions.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Tidy sessions cron task.
*
* @package phpBB3
diff --git a/phpBB/phpbb/cron/task/core/tidy_warnings.php b/phpBB/phpbb/cron/task/core/tidy_warnings.php
index 1cc0abbe88..a0ff23fc57 100644
--- a/phpBB/phpbb/cron/task/core/tidy_warnings.php
+++ b/phpBB/phpbb/cron/task/core/tidy_warnings.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task\core;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Tidy warnings cron task.
*
* Will only run when warnings are configured to expire.
diff --git a/phpBB/phpbb/cron/task/parametrized.php b/phpBB/phpbb/cron/task/parametrized.php
index 1d2f449c58..1aeead0399 100644
--- a/phpBB/phpbb/cron/task/parametrized.php
+++ b/phpBB/phpbb/cron/task/parametrized.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Parametrized cron task interface.
*
* Parametrized cron tasks are somewhat of a cross between regular cron tasks and
diff --git a/phpBB/phpbb/cron/task/task.php b/phpBB/phpbb/cron/task/task.php
index 84218c4fc9..3ce3de9598 100644
--- a/phpBB/phpbb/cron/task/task.php
+++ b/phpBB/phpbb/cron/task/task.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Cron task interface
* @package phpBB3
*/
diff --git a/phpBB/phpbb/cron/task/wrapper.php b/phpBB/phpbb/cron/task/wrapper.php
index aa015966c6..fc3f897206 100644
--- a/phpBB/phpbb/cron/task/wrapper.php
+++ b/phpBB/phpbb/cron/task/wrapper.php
@@ -10,14 +10,6 @@
namespace phpbb\cron\task;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Cron task wrapper class.
* Enhances cron tasks with convenience methods that work identically for all tasks.
*
diff --git a/phpBB/phpbb/datetime.php b/phpBB/phpbb/datetime.php
index 84b13202af..dfa21976e0 100644
--- a/phpBB/phpbb/datetime.php
+++ b/phpBB/phpbb/datetime.php
@@ -74,8 +74,8 @@ class datetime extends \DateTime
* finally check that relative dates are supported by the language pack
*/
if ($delta <= 3600 && $delta > -60 &&
- ($delta >= -5 || (($now_ts / 60) % 60) == (($timestamp / 60) % 60))
- && isset($this->user->lang['datetime']['AGO']))
+ ($delta >= -5 || (($now_ts / 60) % 60) == (($timestamp / 60) % 60))
+ && isset($this->user->lang['datetime']['AGO']))
{
return $this->user->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60)));
}
diff --git a/phpBB/phpbb/db/driver/driver.php b/phpBB/phpbb/db/driver/driver.php
index 53d39e9127..d721ed2eb7 100644
--- a/phpBB/phpbb/db/driver/driver.php
+++ b/phpBB/phpbb/db/driver/driver.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Database Abstraction Layer
* @package dbal
*/
@@ -824,7 +816,7 @@ class driver
*/
function sql_report($mode, $query = '')
{
- global $cache, $starttime, $phpbb_root_path, $phpbb_admin_path, $user;
+ global $cache, $starttime, $phpbb_root_path, $phpbb_path_helper, $user;
global $request;
if (is_object($request) && !$request->variable('explain', false))
@@ -854,7 +846,7 @@ class driver
<head>
<meta charset="utf-8">
<title>SQL Report</title>
- <link href="' . htmlspecialchars($phpbb_admin_path) . 'style/admin.css" rel="stylesheet" type="text/css" media="screen" />
+ <link href="' . htmlspecialchars($phpbb_path_helper->update_web_root_path($phpbb_root_path) . $phpbb_path_helper->get_adm_relative_path()) . 'style/admin.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body id="errorpage">
<div id="wrap">
diff --git a/phpBB/phpbb/db/driver/firebird.php b/phpBB/phpbb/db/driver/firebird.php
index aef75eab15..ed56a5d154 100644
--- a/phpBB/phpbb/db/driver/firebird.php
+++ b/phpBB/phpbb/db/driver/firebird.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Firebird/Interbase Database Abstraction Layer
* Minimum Requirement is Firebird 2.1
* @package dbal
diff --git a/phpBB/phpbb/db/driver/mssql.php b/phpBB/phpbb/db/driver/mssql.php
index 50096deded..6ebc891673 100644
--- a/phpBB/phpbb/db/driver/mssql.php
+++ b/phpBB/phpbb/db/driver/mssql.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* MSSQL Database Abstraction Layer
* Minimum Requirement is MSSQL 2000+
* @package dbal
@@ -259,7 +251,7 @@ class mssql extends \phpbb\db\driver\driver
{
foreach ($row as $key => $value)
{
- $row[$key] = ($value === ' ' || $value === NULL) ? '' : $value;
+ $row[$key] = ($value === ' ' || $value === null) ? '' : $value;
}
}
diff --git a/phpBB/phpbb/db/driver/mssql_base.php b/phpBB/phpbb/db/driver/mssql_base.php
index 57c4e0f1fd..113f1c6902 100644
--- a/phpBB/phpbb/db/driver/mssql_base.php
+++ b/phpBB/phpbb/db/driver/mssql_base.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* MSSQL Database Base Abstraction Layer
* @package dbal
*/
diff --git a/phpBB/phpbb/db/driver/mssql_odbc.php b/phpBB/phpbb/db/driver/mssql_odbc.php
index b9881035c0..f8c70f1cd7 100644
--- a/phpBB/phpbb/db/driver/mssql_odbc.php
+++ b/phpBB/phpbb/db/driver/mssql_odbc.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Unified ODBC functions
* Unified ODBC functions support any database having ODBC driver, for example Adabas D, IBM DB2, iODBC, Solid, Sybase SQL Anywhere...
* Here we only support MSSQL Server 2000+ because of the provided schema
diff --git a/phpBB/phpbb/db/driver/mssqlnative.php b/phpBB/phpbb/db/driver/mssqlnative.php
index aade311bcb..125db9c8d4 100644
--- a/phpBB/phpbb/db/driver/mssqlnative.php
+++ b/phpBB/phpbb/db/driver/mssqlnative.php
@@ -14,188 +14,11 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
- * Prior to version 1.1 the SQL Server Native PHP driver didn't support sqlsrv_num_rows, or cursor based seeking so we recall all rows into an array
- * and maintain our own cursor index into that array.
- */
-class result_mssqlnative
-{
- public function result_mssqlnative($queryresult = false)
- {
- $this->m_cursor = 0;
- $this->m_rows = array();
- $this->m_num_fields = sqlsrv_num_fields($queryresult);
- $this->m_field_meta = sqlsrv_field_metadata($queryresult);
-
- while ($row = sqlsrv_fetch_array($queryresult, SQLSRV_FETCH_ASSOC))
- {
- if ($row !== null)
- {
- foreach($row as $k => $v)
- {
- if (is_object($v) && method_exists($v, 'format'))
- {
- $row[$k] = $v->format("Y-m-d\TH:i:s\Z");
- }
- }
- $this->m_rows[] = $row;//read results into memory, cursors are not supported
- }
- }
-
- $this->m_row_count = sizeof($this->m_rows);
- }
-
- private function array_to_obj($array, &$obj)
- {
- foreach ($array as $key => $value)
- {
- if (is_array($value))
- {
- $obj->$key = new \stdClass();
- array_to_obj($value, $obj->$key);
- }
- else
- {
- $obj->$key = $value;
- }
- }
- return $obj;
- }
-
- public function fetch($mode = SQLSRV_FETCH_BOTH, $object_class = 'stdClass')
- {
- if ($this->m_cursor >= $this->m_row_count || $this->m_row_count == 0)
- {
- return false;
- }
-
- $ret = false;
- $arr_num = array();
-
- if ($mode == SQLSRV_FETCH_NUMERIC || $mode == SQLSRV_FETCH_BOTH)
- {
- foreach($this->m_rows[$this->m_cursor] as $key => $value)
- {
- $arr_num[] = $value;
- }
- }
-
- switch ($mode)
- {
- case SQLSRV_FETCH_ASSOC:
- $ret = $this->m_rows[$this->m_cursor];
- break;
- case SQLSRV_FETCH_NUMERIC:
- $ret = $arr_num;
- break;
- case 'OBJECT':
- $ret = $this->array_to_obj($this->m_rows[$this->m_cursor], $o = new $object_class);
- break;
- case SQLSRV_FETCH_BOTH:
- default:
- $ret = $this->m_rows[$this->m_cursor] + $arr_num;
- break;
- }
- $this->m_cursor++;
- return $ret;
- }
-
- public function get($pos, $fld)
- {
- return $this->m_rows[$pos][$fld];
- }
-
- public function num_rows()
- {
- return $this->m_row_count;
- }
-
- public function seek($iRow)
- {
- $this->m_cursor = min($iRow, $this->m_row_count);
- }
-
- public function num_fields()
- {
- return $this->m_num_fields;
- }
-
- public function field_name($nr)
- {
- $arr_keys = array_keys($this->m_rows[0]);
- return $arr_keys[$nr];
- }
-
- public function field_type($nr)
- {
- $i = 0;
- $int_type = -1;
- $str_type = '';
-
- foreach ($this->m_field_meta as $meta)
- {
- if ($nr == $i)
- {
- $int_type = $meta['Type'];
- break;
- }
- $i++;
- }
-
- //http://msdn.microsoft.com/en-us/library/cc296183.aspx contains type table
- switch ($int_type)
- {
- case SQLSRV_SQLTYPE_BIGINT: $str_type = 'bigint'; break;
- case SQLSRV_SQLTYPE_BINARY: $str_type = 'binary'; break;
- case SQLSRV_SQLTYPE_BIT: $str_type = 'bit'; break;
- case SQLSRV_SQLTYPE_CHAR: $str_type = 'char'; break;
- case SQLSRV_SQLTYPE_DATETIME: $str_type = 'datetime'; break;
- case SQLSRV_SQLTYPE_DECIMAL/*($precision, $scale)*/: $str_type = 'decimal'; break;
- case SQLSRV_SQLTYPE_FLOAT: $str_type = 'float'; break;
- case SQLSRV_SQLTYPE_IMAGE: $str_type = 'image'; break;
- case SQLSRV_SQLTYPE_INT: $str_type = 'int'; break;
- case SQLSRV_SQLTYPE_MONEY: $str_type = 'money'; break;
- case SQLSRV_SQLTYPE_NCHAR/*($charCount)*/: $str_type = 'nchar'; break;
- case SQLSRV_SQLTYPE_NUMERIC/*($precision, $scale)*/: $str_type = 'numeric'; break;
- case SQLSRV_SQLTYPE_NVARCHAR/*($charCount)*/: $str_type = 'nvarchar'; break;
- case SQLSRV_SQLTYPE_NTEXT: $str_type = 'ntext'; break;
- case SQLSRV_SQLTYPE_REAL: $str_type = 'real'; break;
- case SQLSRV_SQLTYPE_SMALLDATETIME: $str_type = 'smalldatetime'; break;
- case SQLSRV_SQLTYPE_SMALLINT: $str_type = 'smallint'; break;
- case SQLSRV_SQLTYPE_SMALLMONEY: $str_type = 'smallmoney'; break;
- case SQLSRV_SQLTYPE_TEXT: $str_type = 'text'; break;
- case SQLSRV_SQLTYPE_TIMESTAMP: $str_type = 'timestamp'; break;
- case SQLSRV_SQLTYPE_TINYINT: $str_type = 'tinyint'; break;
- case SQLSRV_SQLTYPE_UNIQUEIDENTIFIER: $str_type = 'uniqueidentifier'; break;
- case SQLSRV_SQLTYPE_UDT: $str_type = 'UDT'; break;
- case SQLSRV_SQLTYPE_VARBINARY/*($byteCount)*/: $str_type = 'varbinary'; break;
- case SQLSRV_SQLTYPE_VARCHAR/*($charCount)*/: $str_type = 'varchar'; break;
- case SQLSRV_SQLTYPE_XML: $str_type = 'xml'; break;
- default: $str_type = $int_type;
- }
- return $str_type;
- }
-
- public function free()
- {
- unset($this->m_rows);
- return;
- }
-}
-
-/**
* @package dbal
*/
class mssqlnative extends \phpbb\db\driver\mssql_base
{
- var $m_insert_id = NULL;
+ var $m_insert_id = null;
var $last_query_text = '';
var $query_options = array();
var $connect_error = '';
@@ -427,7 +250,7 @@ class mssqlnative extends \phpbb\db\driver\mssql_base
{
foreach ($row as $key => $value)
{
- $row[$key] = ($value === ' ' || $value === NULL) ? '' : $value;
+ $row[$key] = ($value === ' ' || $value === null) ? '' : $value;
}
// remove helper values from LIMIT queries
diff --git a/phpBB/phpbb/db/driver/mysql.php b/phpBB/phpbb/db/driver/mysql.php
index d215453ccb..e311f0dd74 100644
--- a/phpBB/phpbb/db/driver/mysql.php
+++ b/phpBB/phpbb/db/driver/mysql.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* MySQL4 Database Abstraction Layer
* Compatible with:
* MySQL 3.23+
diff --git a/phpBB/phpbb/db/driver/mysql_base.php b/phpBB/phpbb/db/driver/mysql_base.php
index 8f2f66674b..87b6d153a9 100644
--- a/phpBB/phpbb/db/driver/mysql_base.php
+++ b/phpBB/phpbb/db/driver/mysql_base.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Abstract MySQL Database Base Abstraction Layer
* @package dbal
*/
diff --git a/phpBB/phpbb/db/driver/mysqli.php b/phpBB/phpbb/db/driver/mysqli.php
index 4d0e43b464..adc8f96302 100644
--- a/phpBB/phpbb/db/driver/mysqli.php
+++ b/phpBB/phpbb/db/driver/mysqli.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* MySQLi Database Abstraction Layer
* mysqli-extension has to be compiled with:
* MySQL 4.1+ or MySQL 5.0+
@@ -31,7 +23,7 @@ class mysqli extends \phpbb\db\driver\mysql_base
/**
* Connect to server
*/
- function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false , $new_link = false)
+ function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false, $new_link = false)
{
if (!function_exists('mysqli_connect'))
{
@@ -47,11 +39,11 @@ class mysqli extends \phpbb\db\driver\mysql_base
$this->server = ($this->persistency) ? 'p:' . (($sqlserver) ? $sqlserver : 'localhost') : $sqlserver;
$this->dbname = $database;
- $port = (!$port) ? NULL : $port;
+ $port = (!$port) ? null : $port;
// If port is set and it is not numeric, most likely mysqli socket is set.
// Try to map it to the $socket parameter.
- $socket = NULL;
+ $socket = null;
if ($port)
{
if (is_numeric($port))
@@ -61,7 +53,7 @@ class mysqli extends \phpbb\db\driver\mysql_base
else
{
$socket = $port;
- $port = NULL;
+ $port = null;
}
}
diff --git a/phpBB/phpbb/db/driver/oracle.php b/phpBB/phpbb/db/driver/oracle.php
index 4fba654d1e..36ed43d4a7 100644
--- a/phpBB/phpbb/db/driver/oracle.php
+++ b/phpBB/phpbb/db/driver/oracle.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Oracle Database Abstraction Layer
* @package dbal
*/
diff --git a/phpBB/phpbb/db/driver/postgres.php b/phpBB/phpbb/db/driver/postgres.php
index 9cbb1ecb07..5dbd1ca74f 100644
--- a/phpBB/phpbb/db/driver/postgres.php
+++ b/phpBB/phpbb/db/driver/postgres.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* PostgreSQL Database Abstraction Layer
* Minimum Requirement is Version 7.3+
* @package dbal
@@ -328,7 +320,7 @@ class postgres extends \phpbb\db\driver\driver
return false;
}
- $temp_result = @pg_fetch_assoc($temp_q_id, NULL);
+ $temp_result = @pg_fetch_assoc($temp_q_id, null);
@pg_free_result($query_id);
return ($temp_result) ? $temp_result['last_value'] : false;
@@ -456,7 +448,7 @@ class postgres extends \phpbb\db\driver\driver
if ($result = @pg_query($this->db_connect_id, "EXPLAIN $explain_query"))
{
- while ($row = @pg_fetch_assoc($result, NULL))
+ while ($row = @pg_fetch_assoc($result, null))
{
$html_table = $this->sql_report('add_select_row', $query, $html_table, $row);
}
@@ -476,7 +468,7 @@ class postgres extends \phpbb\db\driver\driver
$endtime = $endtime[0] + $endtime[1];
$result = @pg_query($this->db_connect_id, $query);
- while ($void = @pg_fetch_assoc($result, NULL))
+ while ($void = @pg_fetch_assoc($result, null))
{
// Take the time spent on parsing rows into account
}
diff --git a/phpBB/phpbb/db/driver/sqlite.php b/phpBB/phpbb/db/driver/sqlite.php
index 55a33284f2..59ec895c0f 100644
--- a/phpBB/phpbb/db/driver/sqlite.php
+++ b/phpBB/phpbb/db/driver/sqlite.php
@@ -10,14 +10,6 @@
namespace phpbb\db\driver;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Sqlite Database Abstraction Layer
* Minimum Requirement: 2.8.2+
* @package dbal
diff --git a/phpBB/phpbb/db/migration/data/v310/alpha2.php b/phpBB/phpbb/db/migration/data/v310/alpha2.php
new file mode 100644
index 0000000000..3c0853f924
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v310/alpha2.php
@@ -0,0 +1,28 @@
+<?php
+/**
+*
+* @package migration
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v2
+*
+*/
+
+namespace phpbb\db\migration\data\v310;
+
+class alpha2 extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array(
+ '\phpbb\db\migration\data\v310\alpha1',
+ '\phpbb\db\migration\data\v310\notifications_cron_p2',
+ );
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('config.update', array('version', '3.1.0-a2')),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v310/notifications.php b/phpBB/phpbb/db/migration/data/v310/notifications.php
index 10f1392094..61be25bb5f 100644
--- a/phpBB/phpbb/db/migration/data/v310/notifications.php
+++ b/phpBB/phpbb/db/migration/data/v310/notifications.php
@@ -34,7 +34,7 @@ class notifications extends \phpbb\db\migration\migration
),
$this->table_prefix . 'notifications' => array(
'COLUMNS' => array(
- 'notification_id' => array('UINT', NULL, 'auto_increment'),
+ 'notification_id' => array('UINT', null, 'auto_increment'),
'item_type' => array('VCHAR:255', ''),
'item_id' => array('UINT', 0),
'item_parent_id' => array('UINT', 0),
diff --git a/phpBB/phpbb/db/migration/data/v310/notifications_cron_p2.php b/phpBB/phpbb/db/migration/data/v310/notifications_cron_p2.php
new file mode 100644
index 0000000000..050e679cc0
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v310/notifications_cron_p2.php
@@ -0,0 +1,27 @@
+<?php
+/**
+*
+* @package migration
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\db\migration\data\v310;
+
+class notifications_cron_p2 extends \phpbb\db\migration\migration
+{
+ static public function depends_on()
+ {
+ return array('\phpbb\db\migration\data\v310\notifications_cron');
+ }
+
+ public function update_data()
+ {
+ return array(
+ // Make read_notification_last_gc dynamic.
+ array('config.remove', array('read_notification_last_gc')),
+ array('config.add', array('read_notification_last_gc', 0, 1)),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/data/v310/notifications_schema_fix.php b/phpBB/phpbb/db/migration/data/v310/notifications_schema_fix.php
index 8ed626d8a6..eb2eb361ee 100644
--- a/phpBB/phpbb/db/migration/data/v310/notifications_schema_fix.php
+++ b/phpBB/phpbb/db/migration/data/v310/notifications_schema_fix.php
@@ -26,7 +26,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
'add_tables' => array(
$this->table_prefix . 'notification_types' => array(
'COLUMNS' => array(
- 'notification_type_id' => array('USINT', NULL, 'auto_increment'),
+ 'notification_type_id' => array('USINT', null, 'auto_increment'),
'notification_type_name' => array('VCHAR:255', ''),
'notification_type_enabled' => array('BOOL', 1),
),
@@ -37,7 +37,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
),
$this->table_prefix . 'notifications' => array(
'COLUMNS' => array(
- 'notification_id' => array('UINT:10', NULL, 'auto_increment'),
+ 'notification_id' => array('UINT:10', null, 'auto_increment'),
'notification_type_id' => array('USINT', 0),
'item_id' => array('UINT', 0),
'item_parent_id' => array('UINT', 0),
@@ -73,7 +73,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
),
$this->table_prefix . 'notifications' => array(
'COLUMNS' => array(
- 'notification_id' => array('UINT', NULL, 'auto_increment'),
+ 'notification_id' => array('UINT', null, 'auto_increment'),
'item_type' => array('VCHAR:255', ''),
'item_id' => array('UINT', 0),
'item_parent_id' => array('UINT', 0),
diff --git a/phpBB/phpbb/db/migration/data/v310/softdelete_p2.php b/phpBB/phpbb/db/migration/data/v310/softdelete_p2.php
index 0c32e474f4..38b190c766 100644
--- a/phpBB/phpbb/db/migration/data/v310/softdelete_p2.php
+++ b/phpBB/phpbb/db/migration/data/v310/softdelete_p2.php
@@ -34,7 +34,10 @@ class softdelete_p2 extends \phpbb\db\migration\migration
),
'drop_keys' => array(
$this->table_prefix . 'posts' => array('post_approved'),
- $this->table_prefix . 'topics' => array('forum_appr_last'),
+ $this->table_prefix . 'topics' => array(
+ 'forum_appr_last',
+ 'topic_approved',
+ ),
),
);
}
@@ -63,6 +66,7 @@ class softdelete_p2 extends \phpbb\db\migration\migration
),
$this->table_prefix . 'topics' => array(
'forum_appr_last' => array('forum_id', 'topic_approved', 'topic_last_post_id'),
+ 'topic_approved' => array('topic_approved'),
),
),
);
diff --git a/phpBB/phpbb/db/migration/data/v310/style_update_p2.php b/phpBB/phpbb/db/migration/data/v310/style_update_p2.php
index 202a8409fb..40d6a4dbbd 100644
--- a/phpBB/phpbb/db/migration/data/v310/style_update_p2.php
+++ b/phpBB/phpbb/db/migration/data/v310/style_update_p2.php
@@ -24,6 +24,14 @@ class style_update_p2 extends \phpbb\db\migration\migration
public function update_schema()
{
return array(
+ 'drop_keys' => array(
+ $this->table_prefix . 'styles' => array(
+ 'imageset_id',
+ 'template_id',
+ 'theme_id',
+ ),
+ ),
+
'drop_columns' => array(
$this->table_prefix . 'styles' => array(
'imageset_id',
@@ -53,10 +61,18 @@ class style_update_p2 extends \phpbb\db\migration\migration
),
),
+ 'add_index' => array(
+ $this->table_prefix . 'styles' => array(
+ 'imageset_id' => array('imageset_id'),
+ 'template_id' => array('template_id'),
+ 'theme_id' => array('theme_id'),
+ ),
+ ),
+
'add_tables' => array(
$this->table_prefix . 'styles_imageset' => array(
'COLUMNS' => array(
- 'imageset_id' => array('UINT', NULL, 'auto_increment'),
+ 'imageset_id' => array('UINT', null, 'auto_increment'),
'imageset_name' => array('VCHAR_UNI:255', ''),
'imageset_copyright' => array('VCHAR_UNI', ''),
'imageset_path' => array('VCHAR:100', ''),
@@ -68,7 +84,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
),
$this->table_prefix . 'styles_imageset_data' => array(
'COLUMNS' => array(
- 'image_id' => array('UINT', NULL, 'auto_increment'),
+ 'image_id' => array('UINT', null, 'auto_increment'),
'image_name' => array('VCHAR:200', ''),
'image_filename' => array('VCHAR:200', ''),
'image_lang' => array('VCHAR:30', ''),
@@ -83,7 +99,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
),
$this->table_prefix . 'styles_template' => array(
'COLUMNS' => array(
- 'template_id' => array('UINT', NULL, 'auto_increment'),
+ 'template_id' => array('UINT', null, 'auto_increment'),
'template_name' => array('VCHAR_UNI:255', ''),
'template_copyright' => array('VCHAR_UNI', ''),
'template_path' => array('VCHAR:100', ''),
@@ -112,7 +128,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
),
$this->table_prefix . 'styles_theme' => array(
'COLUMNS' => array(
- 'theme_id' => array('UINT', NULL, 'auto_increment'),
+ 'theme_id' => array('UINT', null, 'auto_increment'),
'theme_name' => array('VCHAR_UNI:255', ''),
'theme_copyright' => array('VCHAR_UNI', ''),
'theme_path' => array('VCHAR:100', ''),
diff --git a/phpBB/phpbb/db/migration/data/v310/teampage.php b/phpBB/phpbb/db/migration/data/v310/teampage.php
index 80cc4be1c0..172435c672 100644
--- a/phpBB/phpbb/db/migration/data/v310/teampage.php
+++ b/phpBB/phpbb/db/migration/data/v310/teampage.php
@@ -27,7 +27,7 @@ class teampage extends \phpbb\db\migration\migration
'add_tables' => array(
$this->table_prefix . 'teampage' => array(
'COLUMNS' => array(
- 'teampage_id' => array('UINT', NULL, 'auto_increment'),
+ 'teampage_id' => array('UINT', null, 'auto_increment'),
'group_id' => array('UINT', 0),
'teampage_name' => array('VCHAR_UNI:255', ''),
'teampage_position' => array('UINT', 0),
diff --git a/phpBB/phpbb/db/migration/data/v310/ucp_popuppm_module.php b/phpBB/phpbb/db/migration/data/v310/ucp_popuppm_module.php
new file mode 100644
index 0000000000..f8ada6c6f5
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v310/ucp_popuppm_module.php
@@ -0,0 +1,42 @@
+<?php
+/**
+*
+* @package migration
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\db\migration\data\v310;
+
+class ucp_popuppm_module extends \phpbb\db\migration\migration
+{
+ public function effectively_installed()
+ {
+ $sql = 'SELECT module_id
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = 'ucp'
+ AND module_langname = 'UCP_PM_POPUP_TITLE'";
+ $result = $this->db->sql_query($sql);
+ $module_id = $this->db->sql_fetchfield('module_id');
+ $this->db->sql_freeresult($result);
+
+ return $module_id == false;
+ }
+
+ static public function depends_on()
+ {
+ return array('\phpbb\db\migration\data\v310\dev');
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('module.remove', array(
+ 'ucp',
+ 'UCP_PM',
+ 'UCP_PM_POPUP_TITLE',
+ )),
+ );
+ }
+}
diff --git a/phpBB/phpbb/db/migration/exception.php b/phpBB/phpbb/db/migration/exception.php
index 58e29b5218..cfe546d1ab 100644
--- a/phpBB/phpbb/db/migration/exception.php
+++ b/phpBB/phpbb/db/migration/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\db\migration;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The migrator is responsible for applying new migrations in the correct order.
*
* @package db
diff --git a/phpBB/phpbb/db/migration/migration.php b/phpBB/phpbb/db/migration/migration.php
index aff3837279..b32de00871 100644
--- a/phpBB/phpbb/db/migration/migration.php
+++ b/phpBB/phpbb/db/migration/migration.php
@@ -10,14 +10,6 @@
namespace phpbb\db\migration;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Abstract base class for database migrations
*
* Each migration consists of a set of schema and data changes to be implemented
diff --git a/phpBB/phpbb/db/migration/tool/config.php b/phpBB/phpbb/db/migration/tool/config.php
index f2149dc59a..36a1931f4e 100644
--- a/phpBB/phpbb/db/migration/tool/config.php
+++ b/phpBB/phpbb/db/migration/tool/config.php
@@ -130,6 +130,10 @@ class config implements \phpbb\db\migration\tool\tool_interface
case 'remove':
$call = 'add';
+ if (sizeof($arguments) == 1)
+ {
+ $arguments[] = '';
+ }
break;
case 'update_if_equals':
diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php
index 47e1406043..8186493800 100644
--- a/phpBB/phpbb/db/migrator.php
+++ b/phpBB/phpbb/db/migrator.php
@@ -10,14 +10,6 @@
namespace phpbb\db;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The migrator is responsible for applying new migrations in the correct order.
*
* @package db
@@ -383,7 +375,7 @@ class migrator
foreach ($steps as $step_identifier => $step)
{
- $last_result = false;
+ $last_result = 0;
if ($state)
{
// Continue until we reach the step that matches the last step called
@@ -444,7 +436,7 @@ class migrator
* @param bool $reverse False to install, True to attempt uninstallation by reversing the call
* @return null
*/
- protected function run_step($step, $last_result = false, $reverse = false)
+ protected function run_step($step, $last_result = 0, $reverse = false)
{
$callable_and_parameters = $this->get_callable_from_step($step, $last_result, $reverse);
@@ -467,7 +459,7 @@ class migrator
* @param bool $reverse False to install, True to attempt uninstallation by reversing the call
* @return array Array with parameters for call_user_func_array(), 0 is the callable, 1 is parameters
*/
- protected function get_callable_from_step(array $step, $last_result = false, $reverse = false)
+ protected function get_callable_from_step(array $step, $last_result = 0, $reverse = false)
{
$type = $step[0];
$parameters = $step[1];
diff --git a/phpBB/phpbb/db/sql_insert_buffer.php b/phpBB/phpbb/db/sql_insert_buffer.php
index 7bbd213bdc..41026ad425 100644
--- a/phpBB/phpbb/db/sql_insert_buffer.php
+++ b/phpBB/phpbb/db/sql_insert_buffer.php
@@ -10,14 +10,6 @@
namespace phpbb\db;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Collects rows for insert into a database until the buffer size is reached.
* Then flushes the buffer to the database and starts over again.
*
diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php
index 1f156fbb04..4360c89ac3 100644
--- a/phpBB/phpbb/db/tools.php
+++ b/phpBB/phpbb/db/tools.php
@@ -10,14 +10,6 @@
namespace phpbb\db;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Database Tools for handling cross-db actions such as altering columns, etc.
* Currently not supported is returning SQL for creating tables.
*
@@ -33,7 +25,7 @@ class tools
/**
* @var object DB object
*/
- var $db = NULL;
+ var $db = null;
/**
* The Column types for every database we support
diff --git a/phpBB/phpbb/di/extension/config.php b/phpBB/phpbb/di/extension/config.php
index 85b374a3ca..2603e7b358 100644
--- a/phpBB/phpbb/di/extension/config.php
+++ b/phpBB/phpbb/di/extension/config.php
@@ -9,14 +9,6 @@
namespace phpbb\di\extension;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -78,7 +70,7 @@ class config extends Extension
{
if (preg_match('#^[a-z]+$#', $acm_type))
{
- return '\\phpbb\cache\driver\\'.$acm_type;
+ return 'phpbb\\cache\\driver\\' . $acm_type;
}
return $acm_type;
diff --git a/phpBB/phpbb/di/extension/core.php b/phpBB/phpbb/di/extension/core.php
index 1f6b700973..455dfa7ecd 100644
--- a/phpBB/phpbb/di/extension/core.php
+++ b/phpBB/phpbb/di/extension/core.php
@@ -9,14 +9,6 @@
namespace phpbb\di\extension;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
diff --git a/phpBB/phpbb/di/extension/ext.php b/phpBB/phpbb/di/extension/ext.php
index cf623a7c87..4f2f24cb1a 100644
--- a/phpBB/phpbb/di/extension/ext.php
+++ b/phpBB/phpbb/di/extension/ext.php
@@ -9,14 +9,6 @@
namespace phpbb\di\extension;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
diff --git a/phpBB/phpbb/di/pass/collection_pass.php b/phpBB/phpbb/di/pass/collection_pass.php
index ffc5a41f6d..507271de3e 100644
--- a/phpBB/phpbb/di/pass/collection_pass.php
+++ b/phpBB/phpbb/di/pass/collection_pass.php
@@ -9,14 +9,6 @@
namespace phpbb\di\pass;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
diff --git a/phpBB/phpbb/di/pass/kernel_pass.php b/phpBB/phpbb/di/pass/kernel_pass.php
index 6a9124ad78..9c2b193361 100644
--- a/phpBB/phpbb/di/pass/kernel_pass.php
+++ b/phpBB/phpbb/di/pass/kernel_pass.php
@@ -9,14 +9,6 @@
namespace phpbb\di\pass;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
diff --git a/phpBB/phpbb/di/service_collection.php b/phpBB/phpbb/di/service_collection.php
index fccdd77071..65df9ab1d1 100644
--- a/phpBB/phpbb/di/service_collection.php
+++ b/phpBB/phpbb/di/service_collection.php
@@ -9,14 +9,6 @@
namespace phpbb\di;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
diff --git a/phpBB/phpbb/error_collector.php b/phpBB/phpbb/error_collector.php
index 9b3216e32f..297972c6b8 100644
--- a/phpBB/phpbb/error_collector.php
+++ b/phpBB/phpbb/error_collector.php
@@ -9,14 +9,6 @@
namespace phpbb;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class error_collector
{
var $errors;
diff --git a/phpBB/phpbb/event/data.php b/phpBB/phpbb/event/data.php
index 3481023b74..fbb16574ed 100644
--- a/phpBB/phpbb/event/data.php
+++ b/phpBB/phpbb/event/data.php
@@ -9,62 +9,54 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\Event;
class data extends Event implements \ArrayAccess
{
- private $data;
-
- public function __construct(array $data = array())
- {
- $this->set_data($data);
- }
-
- public function set_data(array $data = array())
- {
- $this->data = $data;
- }
-
- public function get_data()
- {
- return $this->data;
- }
-
- /**
- * Returns data filtered to only include specified keys.
- *
- * This effectively discards any keys added to data by hooks.
- */
- public function get_data_filtered($keys)
- {
- return array_intersect_key($this->data, array_flip($keys));
- }
-
- public function offsetExists($offset)
- {
- return isset($this->data[$offset]);
- }
-
- public function offsetGet($offset)
- {
- return isset($this->data[$offset]) ? $this->data[$offset] : null;
- }
-
- public function offsetSet($offset, $value)
- {
- $this->data[$offset] = $value;
- }
-
- public function offsetUnset($offset)
- {
- unset($this->data[$offset]);
- }
+ private $data;
+
+ public function __construct(array $data = array())
+ {
+ $this->set_data($data);
+ }
+
+ public function set_data(array $data = array())
+ {
+ $this->data = $data;
+ }
+
+ public function get_data()
+ {
+ return $this->data;
+ }
+
+ /**
+ * Returns data filtered to only include specified keys.
+ *
+ * This effectively discards any keys added to data by hooks.
+ */
+ public function get_data_filtered($keys)
+ {
+ return array_intersect_key($this->data, array_flip($keys));
+ }
+
+ public function offsetExists($offset)
+ {
+ return isset($this->data[$offset]);
+ }
+
+ public function offsetGet($offset)
+ {
+ return isset($this->data[$offset]) ? $this->data[$offset] : null;
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ $this->data[$offset] = $value;
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->data[$offset]);
+ }
}
diff --git a/phpBB/phpbb/event/dispatcher.php b/phpBB/phpbb/event/dispatcher.php
index cc3733692e..74b35eb78d 100644
--- a/phpBB/phpbb/event/dispatcher.php
+++ b/phpBB/phpbb/event/dispatcher.php
@@ -9,14 +9,6 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher;
/**
diff --git a/phpBB/phpbb/event/extension_subscriber_loader.php b/phpBB/phpbb/event/extension_subscriber_loader.php
index ab50a589fe..6408f93e2a 100644
--- a/phpBB/phpbb/event/extension_subscriber_loader.php
+++ b/phpBB/phpbb/event/extension_subscriber_loader.php
@@ -9,39 +9,27 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class extension_subscriber_loader
{
private $dispatcher;
- private $extension_manager;
+ private $listener_collection;
- public function __construct(EventDispatcherInterface $dispatcher, \phpbb\extension\manager $extension_manager)
+ public function __construct(EventDispatcherInterface $dispatcher, \phpbb\di\service_collection $listener_collection)
{
$this->dispatcher = $dispatcher;
- $this->extension_manager = $extension_manager;
+ $this->listener_collection = $listener_collection;
}
public function load()
{
- $finder = $this->extension_manager->get_finder();
- $subscriber_classes = $finder
- ->extension_directory('/event')
- ->core_path('event/')
- ->get_classes();
-
- foreach ($subscriber_classes as $class)
+ if (!empty($this->listener_collection))
{
- $subscriber = new $class();
- $this->dispatcher->addSubscriber($subscriber);
+ foreach ($this->listener_collection as $listener)
+ {
+ $this->dispatcher->addSubscriber($listener);
+ }
}
}
}
diff --git a/phpBB/phpbb/event/kernel_exception_subscriber.php b/phpBB/phpbb/event/kernel_exception_subscriber.php
index 09103680e8..8a4de1fbad 100644
--- a/phpBB/phpbb/event/kernel_exception_subscriber.php
+++ b/phpBB/phpbb/event/kernel_exception_subscriber.php
@@ -9,14 +9,6 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
@@ -72,7 +64,6 @@ class kernel_exception_subscriber implements EventSubscriberInterface
page_footer(true, false, false);
-
$status_code = $exception instanceof HttpException ? $exception->getStatusCode() : 500;
$response = new Response($this->template->assign_display('body'), $status_code);
$event->setResponse($response);
diff --git a/phpBB/phpbb/event/kernel_request_subscriber.php b/phpBB/phpbb/event/kernel_request_subscriber.php
index a629dd8440..7d5418498b 100644
--- a/phpBB/phpbb/event/kernel_request_subscriber.php
+++ b/phpBB/phpbb/event/kernel_request_subscriber.php
@@ -9,14 +9,6 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
diff --git a/phpBB/phpbb/event/kernel_terminate_subscriber.php b/phpBB/phpbb/event/kernel_terminate_subscriber.php
index de441da102..32dba322d1 100644
--- a/phpBB/phpbb/event/kernel_terminate_subscriber.php
+++ b/phpBB/phpbb/event/kernel_terminate_subscriber.php
@@ -9,14 +9,6 @@
namespace phpbb\event;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
diff --git a/phpBB/phpbb/extension/base.php b/phpBB/phpbb/extension/base.php
index a529cc7961..1f871750e0 100644
--- a/phpBB/phpbb/extension/base.php
+++ b/phpBB/phpbb/extension/base.php
@@ -9,14 +9,6 @@
namespace phpbb\extension;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
diff --git a/phpBB/phpbb/extension/exception.php b/phpBB/phpbb/extension/exception.php
index e2ba647878..b1f4997fdd 100644
--- a/phpBB/phpbb/extension/exception.php
+++ b/phpBB/phpbb/extension/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\extension;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Exception class for metadata
*/
class exception extends \UnexpectedValueException
diff --git a/phpBB/phpbb/extension/extension_interface.php b/phpBB/phpbb/extension/extension_interface.php
index 1e5f546dc5..bddff51b5a 100644
--- a/phpBB/phpbb/extension/extension_interface.php
+++ b/phpBB/phpbb/extension/extension_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\extension;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The interface extension meta classes have to implement to run custom code
* on enable/disable/purge.
*
diff --git a/phpBB/phpbb/extension/finder.php b/phpBB/phpbb/extension/finder.php
index e787919588..c9c16ae6d5 100644
--- a/phpBB/phpbb/extension/finder.php
+++ b/phpBB/phpbb/extension/finder.php
@@ -10,14 +10,6 @@
namespace phpbb\extension;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The extension finder provides a simple way to locate files in active extensions
*
* @package extension
diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php
index ce6d7e05c8..7f009867c9 100644
--- a/phpBB/phpbb/extension/manager.php
+++ b/phpBB/phpbb/extension/manager.php
@@ -9,14 +9,6 @@
namespace phpbb\extension;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
@@ -234,7 +226,9 @@ class manager
*/
public function enable($name)
{
+ // @codingStandardsIgnoreStart
while ($this->enable_step($name));
+ // @codingStandardsIgnoreEnd
}
/**
@@ -311,7 +305,9 @@ class manager
*/
public function disable($name)
{
+ // @codingStandardsIgnoreStart
while ($this->disable_step($name));
+ // @codingStandardsIgnoreEnd
}
/**
@@ -388,7 +384,9 @@ class manager
*/
public function purge($name)
{
+ // @codingStandardsIgnoreStart
while ($this->purge_step($name));
+ // @codingStandardsIgnoreEnd
}
/**
diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php
index 19c6288e96..d0323120d8 100644
--- a/phpBB/phpbb/extension/metadata_manager.php
+++ b/phpBB/phpbb/extension/metadata_manager.php
@@ -10,14 +10,6 @@
namespace phpbb\extension;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The extension metadata manager validates and gets meta-data for extensions
*
* @package extension
@@ -147,7 +139,7 @@ class metadata_manager
if (!file_exists($this->metadata_file))
{
- throw new \phpbb\extension\exception('The required file does not exist: ' . $this->metadata_file);
+ throw new \phpbb\extension\exception('The required file does not exist: ' . $this->metadata_file);
}
}
@@ -166,12 +158,12 @@ class metadata_manager
{
if (!($file_contents = file_get_contents($this->metadata_file)))
{
- throw new \phpbb\extension\exception('file_get_contents failed on ' . $this->metadata_file);
+ throw new \phpbb\extension\exception('file_get_contents failed on ' . $this->metadata_file);
}
- if (($metadata = json_decode($file_contents, true)) === NULL)
+ if (($metadata = json_decode($file_contents, true)) === null)
{
- throw new \phpbb\extension\exception('json_decode failed on ' . $this->metadata_file);
+ throw new \phpbb\extension\exception('json_decode failed on ' . $this->metadata_file);
}
$this->metadata = $metadata;
@@ -199,50 +191,50 @@ class metadata_manager
* @return Bool True if valid, throws an exception if invalid
*/
public function validate($name = 'display')
- {
- // Basic fields
- $fields = array(
- 'name' => '#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#',
- 'type' => '#^phpbb-extension$#',
- 'licence' => '#.+#',
- 'version' => '#.+#',
- );
-
- switch ($name)
- {
- case 'all':
- $this->validate('display');
+ {
+ // Basic fields
+ $fields = array(
+ 'name' => '#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#',
+ 'type' => '#^phpbb-extension$#',
+ 'licence' => '#.+#',
+ 'version' => '#.+#',
+ );
+
+ switch ($name)
+ {
+ case 'all':
+ $this->validate('display');
$this->validate_enable();
- break;
+ break;
- case 'display':
- foreach ($fields as $field => $data)
+ case 'display':
+ foreach ($fields as $field => $data)
{
$this->validate($field);
}
$this->validate_authors();
- break;
-
- default:
- if (isset($fields[$name]))
- {
- if (!isset($this->metadata[$name]))
- {
- throw new \phpbb\extension\exception("Required meta field '$name' has not been set.");
+ break;
+
+ default:
+ if (isset($fields[$name]))
+ {
+ if (!isset($this->metadata[$name]))
+ {
+ throw new \phpbb\extension\exception("Required meta field '$name' has not been set.");
}
if (!preg_match($fields[$name], $this->metadata[$name]))
{
- throw new \phpbb\extension\exception("Meta field '$name' is invalid.");
+ throw new \phpbb\extension\exception("Meta field '$name' is invalid.");
}
}
break;
}
return true;
- }
+ }
/**
* Validates the contents of the authors field
@@ -253,14 +245,14 @@ class metadata_manager
{
if (empty($this->metadata['authors']))
{
- throw new \phpbb\extension\exception("Required meta field 'authors' has not been set.");
+ throw new \phpbb\extension\exception("Required meta field 'authors' has not been set.");
}
foreach ($this->metadata['authors'] as $author)
{
if (!isset($author['name']))
{
- throw new \phpbb\extension\exception("Required meta field 'author name' has not been set.");
+ throw new \phpbb\extension\exception("Required meta field 'author name' has not been set.");
}
}
diff --git a/phpBB/phpbb/extension/provider.php b/phpBB/phpbb/extension/provider.php
index c2a264d311..bfdc2b66b9 100644
--- a/phpBB/phpbb/extension/provider.php
+++ b/phpBB/phpbb/extension/provider.php
@@ -10,14 +10,6 @@
namespace phpbb\extension;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Provides a set of items found in extensions.
*
* This abstract class is essentially a wrapper around item-specific
diff --git a/phpBB/phpbb/feed/base.php b/phpBB/phpbb/feed/base.php
index de7dd41df4..e6c1e606fa 100644
--- a/phpBB/phpbb/feed/base.php
+++ b/phpBB/phpbb/feed/base.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base class with some generic functions and settings.
*
* @package phpBB3
@@ -150,7 +142,7 @@ abstract class base
*/
function get($key)
{
- return (isset($this->keys[$key])) ? $this->keys[$key] : NULL;
+ return (isset($this->keys[$key])) ? $this->keys[$key] : null;
}
function get_readable_forums()
diff --git a/phpBB/phpbb/feed/factory.php b/phpBB/phpbb/feed/factory.php
index e011b0e3a9..d370160563 100644
--- a/phpBB/phpbb/feed/factory.php
+++ b/phpBB/phpbb/feed/factory.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Factory class to return correct object
* @package phpBB3
*/
diff --git a/phpBB/phpbb/feed/forum.php b/phpBB/phpbb/feed/forum.php
index 83066d2d25..8026824ab7 100644
--- a/phpBB/phpbb/feed/forum.php
+++ b/phpBB/phpbb/feed/forum.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Forum feed
*
* This will give you the last {$this->num_items} posts made
diff --git a/phpBB/phpbb/feed/forums.php b/phpBB/phpbb/feed/forums.php
index 6be1c68da8..ddbb0bf7b3 100644
--- a/phpBB/phpbb/feed/forums.php
+++ b/phpBB/phpbb/feed/forums.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* 'All Forums' feed
*
* This will give you a list of all postable forums where feeds are enabled
diff --git a/phpBB/phpbb/feed/helper.php b/phpBB/phpbb/feed/helper.php
index cf8328bd5e..3f2759b85e 100644
--- a/phpBB/phpbb/feed/helper.php
+++ b/phpBB/phpbb/feed/helper.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Class with some helpful functions used in feeds
* @package phpBB3
*/
diff --git a/phpBB/phpbb/feed/news.php b/phpBB/phpbb/feed/news.php
index 20017a3248..7888e73239 100644
--- a/phpBB/phpbb/feed/news.php
+++ b/phpBB/phpbb/feed/news.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* News feed
*
* This will give you {$this->num_items} first posts
diff --git a/phpBB/phpbb/feed/overall.php b/phpBB/phpbb/feed/overall.php
index 8ee1f092ab..4545ba5c64 100644
--- a/phpBB/phpbb/feed/overall.php
+++ b/phpBB/phpbb/feed/overall.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Board wide feed (aka overall feed)
*
* This will give you the newest {$this->num_items} posts
diff --git a/phpBB/phpbb/feed/post_base.php b/phpBB/phpbb/feed/post_base.php
index 5588ecadb0..42c5eea9e3 100644
--- a/phpBB/phpbb/feed/post_base.php
+++ b/phpBB/phpbb/feed/post_base.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Abstract class for post based feeds
*
* @package phpBB3
diff --git a/phpBB/phpbb/feed/topic.php b/phpBB/phpbb/feed/topic.php
index 1eeb4fbe94..09f377dd10 100644
--- a/phpBB/phpbb/feed/topic.php
+++ b/phpBB/phpbb/feed/topic.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Topic feed for a specific topic
*
* This will give you the last {$this->num_items} posts made within this topic.
diff --git a/phpBB/phpbb/feed/topic_base.php b/phpBB/phpbb/feed/topic_base.php
index f05be9223e..7e28e67b82 100644
--- a/phpBB/phpbb/feed/topic_base.php
+++ b/phpBB/phpbb/feed/topic_base.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Abstract class for topic based feeds
*
* @package phpBB3
diff --git a/phpBB/phpbb/feed/topics.php b/phpBB/phpbb/feed/topics.php
index d70195c87b..bdc858e947 100644
--- a/phpBB/phpbb/feed/topics.php
+++ b/phpBB/phpbb/feed/topics.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* New Topics feed
*
* This will give you the last {$this->num_items} created topics
diff --git a/phpBB/phpbb/feed/topics_active.php b/phpBB/phpbb/feed/topics_active.php
index c6f46d67e6..cc0adac2eb 100644
--- a/phpBB/phpbb/feed/topics_active.php
+++ b/phpBB/phpbb/feed/topics_active.php
@@ -10,14 +10,6 @@
namespace phpbb\feed;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Active Topics feed
*
* This will give you the last {$this->num_items} topics
diff --git a/phpBB/phpbb/filesystem.php b/phpBB/phpbb/filesystem.php
index dbfaebe0fa..7878be0a5e 100644
--- a/phpBB/phpbb/filesystem.php
+++ b/phpBB/phpbb/filesystem.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* A class with various functions that are related to paths, files and the filesystem
* @package phpBB3
*/
diff --git a/phpBB/phpbb/groupposition/exception.php b/phpBB/phpbb/groupposition/exception.php
index 3a8d92dbc7..f43502235d 100644
--- a/phpBB/phpbb/groupposition/exception.php
+++ b/phpBB/phpbb/groupposition/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\groupposition;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* @package groupposition
*/
class exception extends \Exception
diff --git a/phpBB/phpbb/groupposition/groupposition_interface.php b/phpBB/phpbb/groupposition/groupposition_interface.php
index a568785185..9785172a00 100644
--- a/phpBB/phpbb/groupposition/groupposition_interface.php
+++ b/phpBB/phpbb/groupposition/groupposition_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\groupposition;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Interface to manage group positions in various places of phpbb
*
* The interface provides simple methods to add, delete and move a group
diff --git a/phpBB/phpbb/groupposition/legend.php b/phpBB/phpbb/groupposition/legend.php
index 9a1ef3d1d0..47ba06c006 100644
--- a/phpBB/phpbb/groupposition/legend.php
+++ b/phpBB/phpbb/groupposition/legend.php
@@ -10,14 +10,6 @@
namespace phpbb\groupposition;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Legend group position class
*
* group_legend is an ascending list 1, 2, ..., n for groups which are displayed. 1 is the first group, n the last.
diff --git a/phpBB/phpbb/groupposition/teampage.php b/phpBB/phpbb/groupposition/teampage.php
index 4e8228eb58..d934571ebc 100644
--- a/phpBB/phpbb/groupposition/teampage.php
+++ b/phpBB/phpbb/groupposition/teampage.php
@@ -10,14 +10,6 @@
namespace phpbb\groupposition;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Teampage group position class
*
* Teampage position is an ascending list 1, 2, ..., n for items which are displayed. 1 is the first item, n the last.
diff --git a/phpBB/phpbb/hook/finder.php b/phpBB/phpbb/hook/finder.php
index d5eb1f8186..c8f71861d9 100644
--- a/phpBB/phpbb/hook/finder.php
+++ b/phpBB/phpbb/hook/finder.php
@@ -10,14 +10,6 @@
namespace phpbb\hook;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The hook finder locates installed hooks.
*
* @package phpBB3
diff --git a/phpBB/phpbb/json_response.php b/phpBB/phpbb/json_response.php
index fe532fc9d4..45c2f6cac4 100644
--- a/phpBB/phpbb/json_response.php
+++ b/phpBB/phpbb/json_response.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* JSON class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/lock/db.php b/phpBB/phpbb/lock/db.php
index 3e15727c12..461adda045 100644
--- a/phpBB/phpbb/lock/db.php
+++ b/phpBB/phpbb/lock/db.php
@@ -10,14 +10,6 @@
namespace phpbb\lock;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Database locking class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/lock/flock.php b/phpBB/phpbb/lock/flock.php
index 2a36a853ee..94a5895440 100644
--- a/phpBB/phpbb/lock/flock.php
+++ b/phpBB/phpbb/lock/flock.php
@@ -10,14 +10,6 @@
namespace phpbb\lock;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* File locking class
* @package phpBB3
*/
diff --git a/phpBB/phpbb/log/log.php b/phpBB/phpbb/log/log.php
index 7f4e52ed39..a6ee06ebf2 100644
--- a/phpBB/phpbb/log/log.php
+++ b/phpBB/phpbb/log/log.php
@@ -10,14 +10,6 @@
namespace phpbb\log;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* This class is used to add entries into the log table.
*
* @package \phpbb\log\log
diff --git a/phpBB/phpbb/log/log_interface.php b/phpBB/phpbb/log/log_interface.php
index 427d30015d..420ba79691 100644
--- a/phpBB/phpbb/log/log_interface.php
+++ b/phpBB/phpbb/log/log_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\log;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* The interface for the log-system.
*
* @package \phpbb\log\log
diff --git a/phpBB/phpbb/log/null.php b/phpBB/phpbb/log/null.php
index 2ef69926ee..77d0fbe2d7 100644
--- a/phpBB/phpbb/log/null.php
+++ b/phpBB/phpbb/log/null.php
@@ -10,14 +10,6 @@
namespace phpbb\log;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Null logger
*
* @package phpbb_log
diff --git a/phpBB/phpbb/notification/exception.php b/phpBB/phpbb/notification/exception.php
index 275fb3b542..6bdded3fd8 100644
--- a/phpBB/phpbb/notification/exception.php
+++ b/phpBB/phpbb/notification/exception.php
@@ -10,14 +10,6 @@
namespace phpbb\notification;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Notifications exception
*
* @package notifications
diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php
index b92b247c74..2e8652771b 100644
--- a/phpBB/phpbb/notification/manager.php
+++ b/phpBB/phpbb/notification/manager.php
@@ -10,14 +10,6 @@
namespace phpbb\notification;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Notifications service class
* @package notifications
*/
@@ -35,6 +27,9 @@ class manager
/** @var \phpbb\user_loader */
protected $user_loader;
+ /** @var \phpbb\config\config */
+ protected $config;
+
/** @var \phpbb\db\driver\driver */
protected $db;
@@ -66,6 +61,7 @@ class manager
* @param array $notification_methods
* @param ContainerBuilder $phpbb_container
* @param \phpbb\user_loader $user_loader
+ * @param \phpbb\config\config $config
* @param \phpbb\db\driver\driver $db
* @param \phpbb\user $user
* @param string $phpbb_root_path
@@ -75,13 +71,14 @@ class manager
* @param string $user_notifications_table
* @return \phpbb\notification\manager
*/
- public function __construct($notification_types, $notification_methods, $phpbb_container, \phpbb\user_loader $user_loader, \phpbb\db\driver\driver $db, \phpbb\cache\service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
+ public function __construct($notification_types, $notification_methods, $phpbb_container, \phpbb\user_loader $user_loader, \phpbb\config\config $config, \phpbb\db\driver\driver $db, \phpbb\cache\service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
{
$this->notification_types = $notification_types;
$this->notification_methods = $notification_methods;
$this->phpbb_container = $phpbb_container;
$this->user_loader = $user_loader;
+ $this->config = $config;
$this->db = $db;
$this->cache = $cache;
$this->user = $user;
@@ -262,8 +259,7 @@ class manager
SET notification_read = 1
WHERE notification_time <= " . (int) $time .
(($notification_type_name !== false) ? ' AND ' .
- (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
- : '') .
+ (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name)) : '') .
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '') .
(($item_id !== false) ? ' AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) : '');
$this->db->sql_query($sql);
@@ -285,8 +281,7 @@ class manager
SET notification_read = 1
WHERE notification_time <= " . (int) $time .
(($notification_type_name !== false) ? ' AND ' .
- (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
- : '') .
+ (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name)) : '') .
(($item_parent_id !== false) ? ' AND ' . (is_array($item_parent_id) ? $this->db->sql_in_set('item_parent_id', $item_parent_id) : 'item_parent_id = ' . (int) $item_parent_id) : '') .
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '');
$this->db->sql_query($sql);
@@ -807,6 +802,8 @@ class manager
WHERE notification_time < ' . (int) $timestamp .
(($only_read) ? ' AND notification_read = 1' : '');
$this->db->sql_query($sql);
+
+ $this->config->set('read_notification_last_gc', time(), false);
}
/**
diff --git a/phpBB/phpbb/notification/method/base.php b/phpBB/phpbb/notification/method/base.php
index 327f964424..4ce42de830 100644
--- a/phpBB/phpbb/notification/method/base.php
+++ b/phpBB/phpbb/notification/method/base.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\method;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base notifications method class
* @package notifications
*/
diff --git a/phpBB/phpbb/notification/method/email.php b/phpBB/phpbb/notification/method/email.php
index b761eb5a28..e039fae8de 100644
--- a/phpBB/phpbb/notification/method/email.php
+++ b/phpBB/phpbb/notification/method/email.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\method;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Email notification method class
* This class handles sending emails for notifications
*
diff --git a/phpBB/phpbb/notification/method/jabber.php b/phpBB/phpbb/notification/method/jabber.php
index 6ec21bb735..bdfaf5a6fc 100644
--- a/phpBB/phpbb/notification/method/jabber.php
+++ b/phpBB/phpbb/notification/method/jabber.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\method;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Jabber notification method class
* This class handles sending Jabber messages for notifications
*
diff --git a/phpBB/phpbb/notification/method/messenger_base.php b/phpBB/phpbb/notification/method/messenger_base.php
index b1b30f29b7..7cb38eb59d 100644
--- a/phpBB/phpbb/notification/method/messenger_base.php
+++ b/phpBB/phpbb/notification/method/messenger_base.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\method;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Abstract notification method handling email and jabber notifications
* using the phpBB messenger.
*
diff --git a/phpBB/phpbb/notification/method/method_interface.php b/phpBB/phpbb/notification/method/method_interface.php
index 0131a8bde0..4830d06b86 100644
--- a/phpBB/phpbb/notification/method/method_interface.php
+++ b/phpBB/phpbb/notification/method/method_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\method;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base notifications method interface
* @package notifications
*/
diff --git a/phpBB/phpbb/notification/type/admin_activate_user.php b/phpBB/phpbb/notification/type/admin_activate_user.php
new file mode 100644
index 0000000000..5f146e18ff
--- /dev/null
+++ b/phpBB/phpbb/notification/type/admin_activate_user.php
@@ -0,0 +1,166 @@
+<?php
+/**
+*
+* @package notifications
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\notification\type;
+
+/**
+* Admin activation notifications class
+* This class handles notifications for users requiring admin activation
+*
+* @package notifications
+*/
+class admin_activate_user extends \phpbb\notification\type\base
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function get_type()
+ {
+ return 'admin_activate_user';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected $language_key = 'NOTIFICATION_ADMIN_ACTIVATE_USER';
+
+ /**
+ * {@inheritdoc}
+ */
+ public static $notification_option = array(
+ 'lang' => 'NOTIFICATION_TYPE_ADMIN_ACTIVATE_USER',
+ 'group' => 'NOTIFICATION_GROUP_ADMINISTRATION',
+ );
+
+ /**
+ * {@inheritdoc}
+ */
+ public function is_available()
+ {
+ return ($this->auth->acl_get('a_user') && $this->config['require_activation'] == USER_ACTIVATION_ADMIN);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function get_item_id($user)
+ {
+ return (int) $user['user_id'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function get_item_parent_id($post)
+ {
+ return 0;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function find_users_for_notification($user, $options = array())
+ {
+ $options = array_merge(array(
+ 'ignore_users' => array(),
+ ), $options);
+
+ // Grab admins that have permission to administer users.
+ $admin_ary = $this->auth->acl_get_list(false, 'a_user', false);
+ $users = (!empty($admin_ary[0]['a_user'])) ? $admin_ary[0]['a_user'] : array();
+
+ // Grab founders
+ $sql = 'SELECT user_id
+ FROM ' . USERS_TABLE . '
+ WHERE user_type = ' . USER_FOUNDER;
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($sql))
+ {
+ $users[] = (int) $row['user_id'];
+ }
+ $this->db->sql_freeresult($result);
+
+ if (empty($users))
+ {
+ return array();
+ }
+ $users = array_unique($users);
+
+ return $this->check_user_notification_options($users, $options);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_avatar()
+ {
+ return $this->user_loader->get_avatar($this->item_id);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_title()
+ {
+ $username = $this->user_loader->get_username($this->item_id, 'no_profile');
+
+ return $this->user->lang($this->language_key, $username);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_email_template()
+ {
+ return 'admin_activate';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_email_template_variables()
+ {
+ $board_url = generate_board_url();
+ $username = $this->user_loader->get_username($this->item_id, 'no_profile');
+
+ return array(
+ 'USERNAME' => htmlspecialchars_decode($username),
+ 'U_USER_DETAILS' => "{$board_url}/memberlist.{$this->php_ext}?mode=viewprofile&u={$this->item_id}",
+ 'U_ACTIVATE' => "{$board_url}/ucp.{$this->php_ext}?mode=activate&u={$this->item_id}&k={$this->get_data('user_actkey')}",
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_url()
+ {
+ return append_sid($this->phpbb_root_path . 'memberlist.' . $this->php_ext, "mode=viewprofile&u={$this->item_id}");
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function users_to_query()
+ {
+ return array($this->item_id);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function create_insert_array($user, $pre_create_data)
+ {
+ $this->set_data('user_actkey', $user['user_actkey']);
+ $this->notification_time = $user['user_regdate'];
+
+ return parent::create_insert_array($user, $pre_create_data);
+ }
+}
diff --git a/phpBB/phpbb/notification/type/approve_post.php b/phpBB/phpbb/notification/type/approve_post.php
index cf4ec57989..51a9a704b0 100644
--- a/phpBB/phpbb/notification/type/approve_post.php
+++ b/phpBB/phpbb/notification/type/approve_post.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post approved notifications class
* This class handles notifications for posts when they are approved (to their authors)
*
diff --git a/phpBB/phpbb/notification/type/approve_topic.php b/phpBB/phpbb/notification/type/approve_topic.php
index ca5bb67754..6229800c68 100644
--- a/phpBB/phpbb/notification/type/approve_topic.php
+++ b/phpBB/phpbb/notification/type/approve_topic.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Topic approved notifications class
* This class handles notifications for topics when they are approved (for authors)
*
@@ -34,7 +26,7 @@ class approve_topic extends \phpbb\notification\type\topic
{
return 'approve_topic';
}
-
+
/**
* Language key used to output the text
*
diff --git a/phpBB/phpbb/notification/type/base.php b/phpBB/phpbb/notification/type/base.php
index 3c44468bb8..951585853f 100644
--- a/phpBB/phpbb/notification/type/base.php
+++ b/phpBB/phpbb/notification/type/base.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base notifications class
* @package notifications
*/
diff --git a/phpBB/phpbb/notification/type/bookmark.php b/phpBB/phpbb/notification/type/bookmark.php
index 50ea7380af..5e6fdd2523 100644
--- a/phpBB/phpbb/notification/type/bookmark.php
+++ b/phpBB/phpbb/notification/type/bookmark.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Bookmark updating notifications class
* This class handles notifications for replies to a bookmarked topic
*
diff --git a/phpBB/phpbb/notification/type/disapprove_post.php b/phpBB/phpbb/notification/type/disapprove_post.php
index 0c9162ec5c..411d4195c7 100644
--- a/phpBB/phpbb/notification/type/disapprove_post.php
+++ b/phpBB/phpbb/notification/type/disapprove_post.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post disapproved notifications class
* This class handles notifications for posts when they are disapproved (for authors)
*
diff --git a/phpBB/phpbb/notification/type/disapprove_topic.php b/phpBB/phpbb/notification/type/disapprove_topic.php
index dde6f83ec4..19e9d468ce 100644
--- a/phpBB/phpbb/notification/type/disapprove_topic.php
+++ b/phpBB/phpbb/notification/type/disapprove_topic.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Topic disapproved notifications class
* This class handles notifications for topics when they are disapproved (for authors)
*
diff --git a/phpBB/phpbb/notification/type/group_request.php b/phpBB/phpbb/notification/type/group_request.php
index 1768a8fffa..e0527fe220 100644
--- a/phpBB/phpbb/notification/type/group_request.php
+++ b/phpBB/phpbb/notification/type/group_request.php
@@ -9,14 +9,6 @@
namespace phpbb\notification\type;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class group_request extends \phpbb\notification\type\base
{
/**
diff --git a/phpBB/phpbb/notification/type/group_request_approved.php b/phpBB/phpbb/notification/type/group_request_approved.php
index be4a902acd..448f049412 100644
--- a/phpBB/phpbb/notification/type/group_request_approved.php
+++ b/phpBB/phpbb/notification/type/group_request_approved.php
@@ -9,14 +9,6 @@
namespace phpbb\notification\type;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class group_request_approved extends \phpbb\notification\type\base
{
/**
diff --git a/phpBB/phpbb/notification/type/pm.php b/phpBB/phpbb/notification/type/pm.php
index bed0807b0f..584a30efa6 100644
--- a/phpBB/phpbb/notification/type/pm.php
+++ b/phpBB/phpbb/notification/type/pm.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Private message notifications class
* This class handles notifications for private messages
*
diff --git a/phpBB/phpbb/notification/type/post.php b/phpBB/phpbb/notification/type/post.php
index fe50e7f172..c2854c17af 100644
--- a/phpBB/phpbb/notification/type/post.php
+++ b/phpBB/phpbb/notification/type/post.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post notifications class
* This class handles notifications for replies to a topic
*
@@ -191,6 +183,10 @@ class post extends \phpbb\notification\type\base
'username' => $this->get_data('post_username'),
)), $responders);
+ $responders_cnt = sizeof($responders);
+ $responders = $this->trim_user_ary($responders);
+ $trimmed_responders_cnt = $responders_cnt - sizeof($responders);
+
foreach ($responders as $responder)
{
if ($responder['username'])
@@ -202,11 +198,18 @@ class post extends \phpbb\notification\type\base
$usernames[] = $this->user_loader->get_username($responder['poster_id'], 'no_profile');
}
}
+ $lang_key = $this->language_key;
+
+ if ($trimmed_responders_cnt)
+ {
+ $lang_key .= '_TRIMMED';
+ }
return $this->user->lang(
- $this->language_key,
- implode(', ', $usernames),
- censor_text($this->get_data('topic_title'))
+ $lang_key,
+ implode($this->user->lang['COMMA_SEPARATOR'], $usernames),
+ censor_text($this->get_data('topic_title')),
+ $trimmed_responders_cnt
);
}
@@ -242,7 +245,7 @@ class post extends \phpbb\notification\type\base
'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($this->get_data('topic_title'))),
'U_VIEW_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?p={$this->item_id}#p{$this->item_id}",
- 'U_NEWEST_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}&view=unread#unread",
+ 'U_NEWEST_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}&e=1&view=unread#unread",
'U_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
'U_VIEW_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
'U_FORUM' => generate_board_url() . "/viewforum.{$this->php_ext}?f={$this->get_data('forum_id')}",
@@ -280,6 +283,22 @@ class post extends \phpbb\notification\type\base
}
}
+ return $this->trim_user_ary($users);
+ }
+
+ /**
+ * Trim the user array passed down to 3 users if the array contains
+ * more than 4 users.
+ *
+ * @param array $users Array of users
+ * @return array Trimmed array of user_ids
+ */
+ public function trim_user_ary($users)
+ {
+ if (sizeof($users) > 4)
+ {
+ array_splice($users, 3);
+ }
return $users;
}
diff --git a/phpBB/phpbb/notification/type/post_in_queue.php b/phpBB/phpbb/notification/type/post_in_queue.php
index f05ed1ce9a..db16763583 100644
--- a/phpBB/phpbb/notification/type/post_in_queue.php
+++ b/phpBB/phpbb/notification/type/post_in_queue.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post in queue notifications class
* This class handles notifications for posts that are put in the moderation queue (for moderators)
*
diff --git a/phpBB/phpbb/notification/type/quote.php b/phpBB/phpbb/notification/type/quote.php
index 8fb433990e..e8527261d8 100644
--- a/phpBB/phpbb/notification/type/quote.php
+++ b/phpBB/phpbb/notification/type/quote.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post quoting notifications class
* This class handles notifying users when they have been quoted in a post
*
diff --git a/phpBB/phpbb/notification/type/report_pm.php b/phpBB/phpbb/notification/type/report_pm.php
index 13330e2932..55f6bf946d 100644
--- a/phpBB/phpbb/notification/type/report_pm.php
+++ b/phpBB/phpbb/notification/type/report_pm.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Private message reported notifications class
* This class handles notifications for private messages when they are reported
*
diff --git a/phpBB/phpbb/notification/type/report_pm_closed.php b/phpBB/phpbb/notification/type/report_pm_closed.php
index 2e4a1ceb30..9d2aac329e 100644
--- a/phpBB/phpbb/notification/type/report_pm_closed.php
+++ b/phpBB/phpbb/notification/type/report_pm_closed.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* PM report closed notifications class
* This class handles notifications for when reports are closed on PMs (for the one who reported the PM)
*
diff --git a/phpBB/phpbb/notification/type/report_post.php b/phpBB/phpbb/notification/type/report_post.php
index c2dad6f1bb..89b497efa6 100644
--- a/phpBB/phpbb/notification/type/report_post.php
+++ b/phpBB/phpbb/notification/type/report_post.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Reported post notifications class
* This class handles notifications for reported posts
*
diff --git a/phpBB/phpbb/notification/type/report_post_closed.php b/phpBB/phpbb/notification/type/report_post_closed.php
index 270ccf0a1a..5874d48e31 100644
--- a/phpBB/phpbb/notification/type/report_post_closed.php
+++ b/phpBB/phpbb/notification/type/report_post_closed.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Post report closed notifications class
* This class handles notifications for when reports are closed on posts (for the one who reported the post)
*
diff --git a/phpBB/phpbb/notification/type/topic.php b/phpBB/phpbb/notification/type/topic.php
index 8db02f610b..6198881d8d 100644
--- a/phpBB/phpbb/notification/type/topic.php
+++ b/phpBB/phpbb/notification/type/topic.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Topic notifications class
* This class handles notifications for new topics
*
diff --git a/phpBB/phpbb/notification/type/topic_in_queue.php b/phpBB/phpbb/notification/type/topic_in_queue.php
index 056651bc53..c8c1b5b7e2 100644
--- a/phpBB/phpbb/notification/type/topic_in_queue.php
+++ b/phpBB/phpbb/notification/type/topic_in_queue.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Topic in queue notifications class
* This class handles notifications for topics when they are put in the moderation queue (for moderators)
*
diff --git a/phpBB/phpbb/notification/type/type_interface.php b/phpBB/phpbb/notification/type/type_interface.php
index cfc6cd461e..e3e6898172 100644
--- a/phpBB/phpbb/notification/type/type_interface.php
+++ b/phpBB/phpbb/notification/type/type_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\notification\type;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base notifications interface
* @package notifications
*/
diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php
index e9fd092b62..8cd8808261 100644
--- a/phpBB/phpbb/path_helper.php
+++ b/phpBB/phpbb/path_helper.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* A class with various functions that are related to paths, files and the filesystem
* @package phpBB3
*/
diff --git a/phpBB/phpbb/permissions.php b/phpBB/phpbb/permissions.php
index d0405471bc..8319e6d123 100644
--- a/phpBB/phpbb/permissions.php
+++ b/phpBB/phpbb/permissions.php
@@ -9,14 +9,6 @@
namespace phpbb;
-/**
-* DO NOT CHANGE
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class permissions
{
/**
diff --git a/phpBB/phpbb/php/ini.php b/phpBB/phpbb/php/ini.php
index 8767091aba..f0f53807fe 100644
--- a/phpBB/phpbb/php/ini.php
+++ b/phpBB/phpbb/php/ini.php
@@ -10,14 +10,6 @@
namespace phpbb\php;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Wrapper class for ini_get function.
*
* Provides easier handling of the different interpretations of ini values.
diff --git a/phpBB/phpbb/plupload/plupload.php b/phpBB/phpbb/plupload/plupload.php
index f9f2fdd812..6bff2b8a7e 100644
--- a/phpBB/phpbb/plupload/plupload.php
+++ b/phpBB/phpbb/plupload/plupload.php
@@ -10,14 +10,6 @@
namespace phpbb\plupload;
/**
- * @ignore
- */
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* This class handles all server-side plupload functions
*
* @package \phpbb\plupload\plupload
diff --git a/phpBB/phpbb/request/deactivated_super_global.php b/phpBB/phpbb/request/deactivated_super_global.php
index 8f39960477..b03624593e 100644
--- a/phpBB/phpbb/request/deactivated_super_global.php
+++ b/phpBB/phpbb/request/deactivated_super_global.php
@@ -10,14 +10,6 @@
namespace phpbb\request;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Replacement for a superglobal (like $_GET or $_POST) which calls
* trigger_error on all operations but isset, overloads the [] operator with SPL.
*
diff --git a/phpBB/phpbb/request/request.php b/phpBB/phpbb/request/request.php
index 1c388b3c73..e158d33c01 100644
--- a/phpBB/phpbb/request/request.php
+++ b/phpBB/phpbb/request/request.php
@@ -10,14 +10,6 @@
namespace phpbb\request;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* All application input is accessed through this class.
*
* It provides a method to disable access to input data through super globals.
diff --git a/phpBB/phpbb/request/request_interface.php b/phpBB/phpbb/request/request_interface.php
index cd949147f7..1f9978b276 100644
--- a/phpBB/phpbb/request/request_interface.php
+++ b/phpBB/phpbb/request/request_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\request;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* An interface through which all application input can be accessed.
*
* @package \phpbb\request\request
diff --git a/phpBB/phpbb/request/type_cast_helper.php b/phpBB/phpbb/request/type_cast_helper.php
index 262aff73c1..e9b55663af 100644
--- a/phpBB/phpbb/request/type_cast_helper.php
+++ b/phpBB/phpbb/request/type_cast_helper.php
@@ -10,14 +10,6 @@
namespace phpbb\request;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* A helper class that provides convenience methods for type casting.
*
* @package \phpbb\request\request
diff --git a/phpBB/phpbb/request/type_cast_helper_interface.php b/phpBB/phpbb/request/type_cast_helper_interface.php
index e8195c352e..f12795eef9 100644
--- a/phpBB/phpbb/request/type_cast_helper_interface.php
+++ b/phpBB/phpbb/request/type_cast_helper_interface.php
@@ -10,14 +10,6 @@
namespace phpbb\request;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* An interface for type cast operations.
*
* @package \phpbb\request\request
diff --git a/phpBB/phpbb/search/base.php b/phpBB/phpbb/search/base.php
index f2f982c31b..9ecf3751d0 100644
--- a/phpBB/phpbb/search/base.php
+++ b/phpBB/phpbb/search/base.php
@@ -12,14 +12,6 @@ namespace phpbb\search;
/**
* @ignore
*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* @ignore
-*/
define('SEARCH_RESULT_NOT_IN_CACHE', 0);
define('SEARCH_RESULT_IN_CACHE', 1);
define('SEARCH_RESULT_INCOMPLETE', 2);
diff --git a/phpBB/phpbb/search/fulltext_mysql.php b/phpBB/phpbb/search/fulltext_mysql.php
index ca2f42358f..cdd2da222f 100644
--- a/phpBB/phpbb/search/fulltext_mysql.php
+++ b/phpBB/phpbb/search/fulltext_mysql.php
@@ -10,14 +10,6 @@
namespace phpbb\search;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* fulltext_mysql
* Fulltext search for MySQL
* @package search
diff --git a/phpBB/phpbb/search/fulltext_native.php b/phpBB/phpbb/search/fulltext_native.php
index 33326f2882..1b314a24d3 100644
--- a/phpBB/phpbb/search/fulltext_native.php
+++ b/phpBB/phpbb/search/fulltext_native.php
@@ -10,14 +10,6 @@
namespace phpbb\search;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* fulltext_native
* phpBB's own db driven fulltext search, version 2
* @package search
@@ -850,7 +842,6 @@ class fulltext_native extends \phpbb\search\base
}
$this->db->sql_freeresult($result);
-
// if we use mysql and the total result count is not cached yet, retrieve it from the db
if (!$total_results && $is_mysql)
{
@@ -1189,8 +1180,8 @@ class fulltext_native extends \phpbb\search\base
* we know that it will also be lower than CJK ranges
*/
if ((strncmp($word, UTF8_HANGUL_FIRST, 3) < 0 || strncmp($word, UTF8_HANGUL_LAST, 3) > 0)
- && (strncmp($word, UTF8_CJK_FIRST, 3) < 0 || strncmp($word, UTF8_CJK_LAST, 3) > 0)
- && (strncmp($word, UTF8_CJK_B_FIRST, 4) < 0 || strncmp($word, UTF8_CJK_B_LAST, 4) > 0))
+ && (strncmp($word, UTF8_CJK_FIRST, 3) < 0 || strncmp($word, UTF8_CJK_LAST, 3) > 0)
+ && (strncmp($word, UTF8_CJK_B_FIRST, 4) < 0 || strncmp($word, UTF8_CJK_B_LAST, 4) > 0))
{
$word = strtok(' ');
continue;
@@ -1684,8 +1675,8 @@ class fulltext_native extends \phpbb\search\base
$pos += $utf_len;
if (($utf_char >= UTF8_HANGUL_FIRST && $utf_char <= UTF8_HANGUL_LAST)
- || ($utf_char >= UTF8_CJK_FIRST && $utf_char <= UTF8_CJK_LAST)
- || ($utf_char >= UTF8_CJK_B_FIRST && $utf_char <= UTF8_CJK_B_LAST))
+ || ($utf_char >= UTF8_CJK_FIRST && $utf_char <= UTF8_CJK_LAST)
+ || ($utf_char >= UTF8_CJK_B_FIRST && $utf_char <= UTF8_CJK_B_LAST))
{
/**
* All characters within these ranges are valid
diff --git a/phpBB/phpbb/search/fulltext_postgres.php b/phpBB/phpbb/search/fulltext_postgres.php
index 756034103e..063bf52a19 100644
--- a/phpBB/phpbb/search/fulltext_postgres.php
+++ b/phpBB/phpbb/search/fulltext_postgres.php
@@ -10,14 +10,6 @@
namespace phpbb\search;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* fulltext_postgres
* Fulltext search for PostgreSQL
* @package search
diff --git a/phpBB/phpbb/search/fulltext_sphinx.php b/phpBB/phpbb/search/fulltext_sphinx.php
index cb76d58f49..acbfad9474 100644
--- a/phpBB/phpbb/search/fulltext_sphinx.php
+++ b/phpBB/phpbb/search/fulltext_sphinx.php
@@ -9,16 +9,6 @@
namespace phpbb\search;
-/**
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* @ignore
-*/
define('SPHINX_MAX_MATCHES', 20000);
define('SPHINX_CONNECT_RETRIES', 3);
define('SPHINX_CONNECT_WAIT_TIME', 300);
diff --git a/phpBB/phpbb/search/sphinx/config.php b/phpBB/phpbb/search/sphinx/config.php
index 262d6008cc..cb8e4524df 100644
--- a/phpBB/phpbb/search/sphinx/config.php
+++ b/phpBB/phpbb/search/sphinx/config.php
@@ -10,14 +10,6 @@
namespace phpbb\search\sphinx;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* \phpbb\search\sphinx\config
* An object representing the sphinx configuration
* Can read it from file and write it back out after modification
diff --git a/phpBB/phpbb/search/sphinx/config_comment.php b/phpBB/phpbb/search/sphinx/config_comment.php
index 77a943377d..20b1c19af1 100644
--- a/phpBB/phpbb/search/sphinx/config_comment.php
+++ b/phpBB/phpbb/search/sphinx/config_comment.php
@@ -10,14 +10,6 @@
namespace phpbb\search\sphinx;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* \phpbb\search\sphinx\config_comment
* Represents a comment inside the sphinx configuration
*/
diff --git a/phpBB/phpbb/search/sphinx/config_section.php b/phpBB/phpbb/search/sphinx/config_section.php
index 730abf011e..8f9253ec56 100644
--- a/phpBB/phpbb/search/sphinx/config_section.php
+++ b/phpBB/phpbb/search/sphinx/config_section.php
@@ -10,14 +10,6 @@
namespace phpbb\search\sphinx;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* \phpbb\search\sphinx\config_section
* Represents a single section inside the sphinx configuration
*/
diff --git a/phpBB/phpbb/search/sphinx/config_variable.php b/phpBB/phpbb/search/sphinx/config_variable.php
index c8f40bfb5f..c0f6d28dcc 100644
--- a/phpBB/phpbb/search/sphinx/config_variable.php
+++ b/phpBB/phpbb/search/sphinx/config_variable.php
@@ -10,14 +10,6 @@
namespace phpbb\search\sphinx;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* \phpbb\search\sphinx\config_variable
* Represents a single variable inside the sphinx configuration
*/
diff --git a/phpBB/phpbb/session.php b/phpBB/phpbb/session.php
index 5e4380bfc8..f530d30f1f 100644
--- a/phpBB/phpbb/session.php
+++ b/phpBB/phpbb/session.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Session class
* @package phpBB3
*/
@@ -1235,7 +1227,6 @@ class session
$this->session_create(ANONYMOUS);
}
-
// Determine which message to output
$till_date = ($ban_row['ban_end']) ? $this->format_date($ban_row['ban_end']) : '';
$message = ($ban_row['ban_end']) ? 'BOARD_BAN_TIME' : 'BOARD_BAN_PERM';
diff --git a/phpBB/phpbb/symfony_request.php b/phpBB/phpbb/symfony_request.php
index 92784c213b..ebe862a565 100644
--- a/phpBB/phpbb/symfony_request.php
+++ b/phpBB/phpbb/symfony_request.php
@@ -11,14 +11,6 @@ namespace phpbb;
use Symfony\Component\HttpFoundation\Request;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class symfony_request extends Request
{
/**
diff --git a/phpBB/phpbb/template/asset.php b/phpBB/phpbb/template/asset.php
index 27564bf347..24e0d6698d 100644
--- a/phpBB/phpbb/template/asset.php
+++ b/phpBB/phpbb/template/asset.php
@@ -9,14 +9,6 @@
namespace phpbb\template;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class asset
{
protected $components = array();
diff --git a/phpBB/phpbb/template/base.php b/phpBB/phpbb/template/base.php
index 86868707f0..6044effa1f 100644
--- a/phpBB/phpbb/template/base.php
+++ b/phpBB/phpbb/template/base.php
@@ -9,14 +9,6 @@
namespace phpbb\template;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
abstract class base implements template
{
/**
diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php
index 24234c1e4a..65c7d094a0 100644
--- a/phpBB/phpbb/template/context.php
+++ b/phpBB/phpbb/template/context.php
@@ -10,14 +10,6 @@
namespace phpbb\template;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Stores variables assigned to template.
*
* @package phpBB3
@@ -285,7 +277,7 @@ class context
// Search array to get correct position
list($search_key, $search_value) = @each($key);
- $key = NULL;
+ $key = null;
foreach ($block as $i => $val_ary)
{
if ($val_ary[$search_key] === $search_value)
@@ -296,7 +288,7 @@ class context
}
// key/value pair not found
- if ($key === NULL)
+ if ($key === null)
{
return false;
}
diff --git a/phpBB/phpbb/template/template.php b/phpBB/phpbb/template/template.php
index cf38bba522..d95b0a822c 100644
--- a/phpBB/phpbb/template/template.php
+++ b/phpBB/phpbb/template/template.php
@@ -9,14 +9,6 @@
namespace phpbb\template;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
interface template
{
diff --git a/phpBB/phpbb/template/twig/definition.php b/phpBB/phpbb/template/twig/definition.php
index 2490a43f81..945c46675e 100644
--- a/phpBB/phpbb/template/twig/definition.php
+++ b/phpBB/phpbb/template/twig/definition.php
@@ -10,14 +10,6 @@
namespace phpbb\template\twig;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* This class holds all DEFINE variables from the current page load
*/
class definition
diff --git a/phpBB/phpbb/template/twig/environment.php b/phpBB/phpbb/template/twig/environment.php
index a6c0e476f0..24bd55b3c5 100644
--- a/phpBB/phpbb/template/twig/environment.php
+++ b/phpBB/phpbb/template/twig/environment.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class environment extends \Twig_Environment
{
/** @var array */
diff --git a/phpBB/phpbb/template/twig/extension.php b/phpBB/phpbb/template/twig/extension.php
index 1ddb97369e..6847dbd9f8 100644
--- a/phpBB/phpbb/template/twig/extension.php
+++ b/phpBB/phpbb/template/twig/extension.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class extension extends \Twig_Extension
{
/** @var \phpbb\template\context */
@@ -48,11 +40,11 @@ class extension extends \Twig_Extension
return 'phpbb';
}
- /**
- * Returns the token parser instance to add to the existing list.
- *
- * @return array An array of Twig_TokenParser instances
- */
+ /**
+ * Returns the token parser instance to add to the existing list.
+ *
+ * @return array An array of Twig_TokenParser instances
+ */
public function getTokenParsers()
{
return array(
@@ -66,36 +58,36 @@ class extension extends \Twig_Extension
);
}
- /**
- * Returns a list of filters to add to the existing list.
- *
- * @return array An array of filters
- */
- public function getFilters()
- {
+ /**
+ * Returns a list of filters to add to the existing list.
+ *
+ * @return array An array of filters
+ */
+ public function getFilters()
+ {
return array(
new \Twig_SimpleFilter('subset', array($this, 'loop_subset'), array('needs_environment' => true)),
new \Twig_SimpleFilter('addslashes', 'addslashes'),
);
- }
-
- /**
- * Returns a list of global functions to add to the existing list.
- *
- * @return array An array of global functions
- */
- public function getFunctions()
- {
+ }
+
+ /**
+ * Returns a list of global functions to add to the existing list.
+ *
+ * @return array An array of global functions
+ */
+ public function getFunctions()
+ {
return array(
new \Twig_SimpleFunction('lang', array($this, 'lang')),
);
}
- /**
- * Returns a list of operators to add to the existing list.
- *
- * @return array An array of operators
- */
+ /**
+ * Returns a list of operators to add to the existing list.
+ *
+ * @return array An array of operators
+ */
public function getOperators()
{
return array(
@@ -126,19 +118,19 @@ class extension extends \Twig_Extension
'mod' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
),
);
- }
+ }
/**
- * Grabs a subset of a loop
- *
- * @param Twig_Environment $env A Twig_Environment instance
- * @param mixed $item A variable
- * @param integer $start Start of the subset
- * @param integer $end End of the subset
- * @param Boolean $preserveKeys Whether to preserve key or not (when the input is an array)
- *
- * @return mixed The sliced variable
- */
+ * Grabs a subset of a loop
+ *
+ * @param Twig_Environment $env A Twig_Environment instance
+ * @param mixed $item A variable
+ * @param integer $start Start of the subset
+ * @param integer $end End of the subset
+ * @param Boolean $preserveKeys Whether to preserve key or not (when the input is an array)
+ *
+ * @return mixed The sliced variable
+ */
function loop_subset(\Twig_Environment $env, $item, $start, $end = null, $preserveKeys = false)
{
// We do almost the same thing as Twig's slice (array_slice), except when $end is positive
diff --git a/phpBB/phpbb/template/twig/lexer.php b/phpBB/phpbb/template/twig/lexer.php
index d832fbf84e..f4efc58540 100644
--- a/phpBB/phpbb/template/twig/lexer.php
+++ b/phpBB/phpbb/template/twig/lexer.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class lexer extends \Twig_Lexer
{
public function tokenize($code, $filename = null)
@@ -76,6 +68,12 @@ class lexer extends \Twig_Lexer
);
// Fix tokens that may have inline variables (e.g. <!-- DEFINE $TEST = '{FOO}')
+ $code = $this->strip_surrounding_quotes(array(
+ 'INCLUDE',
+ 'INCLUDEPHP',
+ 'INCLUDEJS',
+ 'INCLUDECSS',
+ ), $code);
$code = $this->fix_inline_variable_tokens(array(
'DEFINE \$[a-zA-Z0-9_]+ =',
'INCLUDE',
@@ -83,6 +81,12 @@ class lexer extends \Twig_Lexer
'INCLUDEJS',
'INCLUDECSS',
), $code);
+ $code = $this->add_surrounding_quotes(array(
+ 'INCLUDE',
+ 'INCLUDEPHP',
+ 'INCLUDEJS',
+ 'INCLUDECSS',
+ ), $code);
// Fix our BEGIN statements
$code = $this->fix_begin_tokens($code);
@@ -116,9 +120,29 @@ class lexer extends \Twig_Lexer
}
/**
+ * Strip surrounding quotes
+ *
+ * First step to fix tokens that may have inline variables
+ * E.g. <!-- INCLUDE '{TEST}.html' to <!-- INCLUDE {TEST}.html
+ *
+ * @param array $tokens array of tokens to search for (imploded to a regular expression)
+ * @param string $code
+ * @return string
+ */
+ protected function strip_surrounding_quotes($tokens, $code)
+ {
+ // Remove matching quotes at the beginning/end if a statement;
+ // E.g. 'asdf'"' -> asdf'"
+ // E.g. "asdf'"" -> asdf'"
+ // E.g. 'asdf'" -> 'asdf'"
+ return preg_replace('#<!-- (' . implode('|', $tokens) . ') (([\'"])?(.*?)\1) -->#', '<!-- $1 $2 -->', $code);
+ }
+
+ /**
* Fix tokens that may have inline variables
*
- * E.g. <!-- INCLUDE {TEST}.html
+ * Second step to fix tokens that may have inline variables
+ * E.g. <!-- INCLUDE '{TEST}.html' to <!-- INCLUDE ' ~ {TEST} ~ '.html
*
* @param array $tokens array of tokens to search for (imploded to a regular expression)
* @param string $code
@@ -128,23 +152,31 @@ class lexer extends \Twig_Lexer
{
$callback = function($matches)
{
- // Remove matching quotes at the beginning/end if a statement;
- // E.g. 'asdf'"' -> asdf'"
- // E.g. "asdf'"" -> asdf'"
- // E.g. 'asdf'" -> 'asdf'"
- $matches[2] = preg_replace('#^([\'"])?(.*?)\1$#', '$2', $matches[2]);
-
// Replace template variables with start/end to parse variables (' ~ TEST ~ '.html)
$matches[2] = preg_replace('#{([a-zA-Z0-9_\.$]+)}#', "'~ \$1 ~'", $matches[2]);
- // Surround the matches in single quotes ('' ~ TEST ~ '.html')
- return "<!-- {$matches[1]} '{$matches[2]}' -->";
+ return "<!-- {$matches[1]} {$matches[2]} -->";
};
return preg_replace_callback('#<!-- (' . implode('|', $tokens) . ') (.+?) -->#', $callback, $code);
}
/**
+ * Add surrounding quotes
+ *
+ * Last step to fix tokens that may have inline variables
+ * E.g. <!-- INCLUDE '{TEST}.html' to <!-- INCLUDE '' ~ {TEST} ~ '.html'
+ *
+ * @param array $tokens array of tokens to search for (imploded to a regular expression)
+ * @param string $code
+ * @return string
+ */
+ protected function add_surrounding_quotes($tokens, $code)
+ {
+ return preg_replace('#<!-- (' . implode('|', $tokens) . ') (.+?) -->#', '<!-- $1 \'$2\' -->', $code);
+ }
+
+ /**
* Fix begin tokens (convert our BEGIN to Twig for)
*
* Not meant to be used outside of this context, public because the anonymous function calls this
diff --git a/phpBB/phpbb/template/twig/loader.php b/phpBB/phpbb/template/twig/loader.php
index 910061dc0f..e01e9de467 100644
--- a/phpBB/phpbb/template/twig/loader.php
+++ b/phpBB/phpbb/template/twig/loader.php
@@ -10,14 +10,6 @@
namespace phpbb\template\twig;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Twig Template loader
* @package phpBB3
*/
diff --git a/phpBB/phpbb/template/twig/node/definenode.php b/phpBB/phpbb/template/twig/node/definenode.php
index ec084d0f7d..6a9969f8c6 100644
--- a/phpBB/phpbb/template/twig/node/definenode.php
+++ b/phpBB/phpbb/template/twig/node/definenode.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class definenode extends \Twig_Node
{
diff --git a/phpBB/phpbb/template/twig/node/event.php b/phpBB/phpbb/template/twig/node/event.php
index 202db775ee..7a1181a866 100644
--- a/phpBB/phpbb/template/twig/node/event.php
+++ b/phpBB/phpbb/template/twig/node/event.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class event extends \Twig_Node
{
@@ -57,10 +49,10 @@ class event extends \Twig_Node
// templates on page load rather than at compile. This is
// slower, but makes developing extensions easier (no need to
// purge the cache when a new event template file is added)
- $compiler
- ->write("if (\$this->env->getLoader()->exists('@{$ext_namespace}/{$location}.html')) {\n")
- ->indent()
- ;
+ $compiler
+ ->write("if (\$this->env->getLoader()->exists('@{$ext_namespace}/{$location}.html')) {\n")
+ ->indent()
+ ;
}
if (defined('DEBUG') || $this->environment->getLoader()->exists('@' . $ext_namespace . '/' . $location . '.html'))
@@ -79,7 +71,7 @@ class event extends \Twig_Node
{
$compiler
->outdent()
- ->write("}\n\n")
+ ->write("}\n\n")
;
}
}
diff --git a/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php b/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php
index 48d8b814b8..f3bbfa6691 100644
--- a/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php
+++ b/phpBB/phpbb/template/twig/node/expression/binary/equalequal.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node\expression\binary;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class equalequal extends \Twig_Node_Expression_Binary
{
diff --git a/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php b/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php
index 87585dfb4c..c9c2687e08 100644
--- a/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php
+++ b/phpBB/phpbb/template/twig/node/expression/binary/notequalequal.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node\expression\binary;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class notequalequal extends \Twig_Node_Expression_Binary
{
diff --git a/phpBB/phpbb/template/twig/node/includenode.php b/phpBB/phpbb/template/twig/node/includenode.php
index 77fe7f3acb..d9b45d6407 100644
--- a/phpBB/phpbb/template/twig/node/includenode.php
+++ b/phpBB/phpbb/template/twig/node/includenode.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class includenode extends \Twig_Node_Include
{
diff --git a/phpBB/phpbb/template/twig/node/includephp.php b/phpBB/phpbb/template/twig/node/includephp.php
index 4024cf0cc8..3f4621c0a9 100644
--- a/phpBB/phpbb/template/twig/node/includephp.php
+++ b/phpBB/phpbb/template/twig/node/includephp.php
@@ -9,21 +9,13 @@
namespace phpbb\template\twig\node;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class includephp extends \Twig_Node
{
/** @var Twig_Environment */
protected $environment;
- public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $ignoreMissing = false, $lineno, $tag = null)
+ public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $ignoreMissing = false, $tag = null)
{
$this->environment = $environment;
diff --git a/phpBB/phpbb/template/twig/node/php.php b/phpBB/phpbb/template/twig/node/php.php
index b37759303d..2b18551266 100644
--- a/phpBB/phpbb/template/twig/node/php.php
+++ b/phpBB/phpbb/template/twig/node/php.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\node;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class php extends \Twig_Node
{
diff --git a/phpBB/phpbb/template/twig/tokenparser/defineparser.php b/phpBB/phpbb/template/twig/tokenparser/defineparser.php
index 688afec191..8484f2e81a 100644
--- a/phpBB/phpbb/template/twig/tokenparser/defineparser.php
+++ b/phpBB/phpbb/template/twig/tokenparser/defineparser.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class defineparser extends \Twig_TokenParser
{
@@ -38,6 +30,13 @@ class defineparser extends \Twig_TokenParser
$stream->next();
$value = $this->parser->getExpressionParser()->parseExpression();
+ if ($value instanceof \Twig_Node_Expression_Name)
+ {
+ // This would happen if someone improperly formed their DEFINE syntax
+ // e.g. <!-- DEFINE $VAR = foo -->
+ throw new \Twig_Error_Syntax('Invalid DEFINE', $token->getLine(), $this->parser->getFilename());
+ }
+
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
} else {
$capture = true;
diff --git a/phpBB/phpbb/template/twig/tokenparser/event.php b/phpBB/phpbb/template/twig/tokenparser/event.php
index 7cf4000909..8864e879f8 100644
--- a/phpBB/phpbb/template/twig/tokenparser/event.php
+++ b/phpBB/phpbb/template/twig/tokenparser/event.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class event extends \Twig_TokenParser
{
diff --git a/phpBB/phpbb/template/twig/tokenparser/includejs.php b/phpBB/phpbb/template/twig/tokenparser/includejs.php
index 30a99f3279..0e46915b86 100644
--- a/phpBB/phpbb/template/twig/tokenparser/includejs.php
+++ b/phpBB/phpbb/template/twig/tokenparser/includejs.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class includejs extends \Twig_TokenParser
{
diff --git a/phpBB/phpbb/template/twig/tokenparser/includeparser.php b/phpBB/phpbb/template/twig/tokenparser/includeparser.php
index 715c0ec84d..d351f1b4cd 100644
--- a/phpBB/phpbb/template/twig/tokenparser/includeparser.php
+++ b/phpBB/phpbb/template/twig/tokenparser/includeparser.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class includeparser extends \Twig_TokenParser_Include
{
diff --git a/phpBB/phpbb/template/twig/tokenparser/includephp.php b/phpBB/phpbb/template/twig/tokenparser/includephp.php
index d906837590..1b3d1742e3 100644
--- a/phpBB/phpbb/template/twig/tokenparser/includephp.php
+++ b/phpBB/phpbb/template/twig/tokenparser/includephp.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class includephp extends \Twig_TokenParser
{
@@ -43,7 +35,7 @@ class includephp extends \Twig_TokenParser
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
- return new \phpbb\template\twig\node\includephp($expr, $this->parser->getEnvironment(), $ignoreMissing, $token->getLine(), $this->getTag());
+ return new \phpbb\template\twig\node\includephp($expr, $this->parser->getEnvironment(), $token->getLine(), $ignoreMissing, $this->getTag());
}
/**
diff --git a/phpBB/phpbb/template/twig/tokenparser/php.php b/phpBB/phpbb/template/twig/tokenparser/php.php
index e4f70fb9b1..b427969e2d 100644
--- a/phpBB/phpbb/template/twig/tokenparser/php.php
+++ b/phpBB/phpbb/template/twig/tokenparser/php.php
@@ -9,14 +9,6 @@
namespace phpbb\template\twig\tokenparser;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class php extends \Twig_TokenParser
{
@@ -53,5 +45,5 @@ class php extends \Twig_TokenParser
public function getTag()
{
return 'PHP';
- }
+ }
}
diff --git a/phpBB/phpbb/template/twig/twig.php b/phpBB/phpbb/template/twig/twig.php
index 9df9310427..ddadcfd89a 100644
--- a/phpBB/phpbb/template/twig/twig.php
+++ b/phpBB/phpbb/template/twig/twig.php
@@ -10,14 +10,6 @@
namespace phpbb\template\twig;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Twig Template class.
* @package phpBB3
*/
diff --git a/phpBB/phpbb/tree/nestedset.php b/phpBB/phpbb/tree/nestedset.php
index 171dae4d14..13184cf41c 100644
--- a/phpBB/phpbb/tree/nestedset.php
+++ b/phpBB/phpbb/tree/nestedset.php
@@ -9,14 +9,6 @@
namespace phpbb\tree;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
abstract class nestedset implements \phpbb\tree\tree_interface
{
/** @var \phpbb\db\driver\driver */
diff --git a/phpBB/phpbb/tree/nestedset_forum.php b/phpBB/phpbb/tree/nestedset_forum.php
index 2fee5b097e..ef6023546b 100644
--- a/phpBB/phpbb/tree/nestedset_forum.php
+++ b/phpBB/phpbb/tree/nestedset_forum.php
@@ -9,14 +9,6 @@
namespace phpbb\tree;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
class nestedset_forum extends \phpbb\tree\nestedset
{
/**
diff --git a/phpBB/phpbb/tree/tree_interface.php b/phpBB/phpbb/tree/tree_interface.php
index 162c1e5e29..90ec27e024 100644
--- a/phpBB/phpbb/tree/tree_interface.php
+++ b/phpBB/phpbb/tree/tree_interface.php
@@ -9,14 +9,6 @@
namespace phpbb\tree;
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
interface tree_interface
{
/**
diff --git a/phpBB/phpbb/user.php b/phpBB/phpbb/user.php
index f97cc94d40..b2ab187a70 100644
--- a/phpBB/phpbb/user.php
+++ b/phpBB/phpbb/user.php
@@ -10,14 +10,6 @@
namespace phpbb;
/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Base user class
*
* This is the overarching class which contains (through session extend)
@@ -44,7 +36,7 @@ class user extends \phpbb\session
var $img_array = array();
// Able to add new options (up to id 31)
- var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'popuppm' => 10, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17);
+ var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17);
/**
* Constructor to set the lang path
@@ -343,7 +335,6 @@ class user extends \phpbb\session
}
}
-
// Does the user need to change their password? If so, redirect to the
// ucp profile reg_details page ... of course do not redirect if we're already in the ucp
if (!defined('IN_ADMIN') && !defined('ADMIN_START') && $config['chg_passforce'] && !empty($this->data['is_registered']) && $auth->acl_get('u_chgpasswd') && $this->data['user_passchg'] < time() - ($config['chg_passforce'] * 86400))
diff --git a/phpBB/phpbb/user_loader.php b/phpBB/phpbb/user_loader.php
index 78620ab1b9..c1d69802f8 100644
--- a/phpBB/phpbb/user_loader.php
+++ b/phpBB/phpbb/user_loader.php
@@ -10,13 +10,6 @@
namespace phpbb;
/**
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* User loader class
*
* This handles loading users from the database and
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 396b320eac..5db36007c2 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -381,7 +381,7 @@ if ($mode == 'delete' || $mode == 'soft_delete')
if ($mode == 'bump')
{
if ($bump_time = bump_topic_allowed($forum_id, $post_data['topic_bumped'], $post_data['topic_last_post_time'], $post_data['topic_poster'], $post_data['topic_last_poster_id'])
- && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}"))
+ && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}"))
{
$meta_url = phpbb_bump_topic($forum_id, $topic_id, $post_data, $current_time);
meta_refresh(3, $meta_url);
@@ -817,8 +817,13 @@ if ($submit || $preview || $refresh)
// We make sure nobody else made exactly the same change
// we're about to submit by also checking $message_md5 != $post_data['post_checksum']
- if (($edit_post_message_checksum !== '' && $edit_post_message_checksum != $post_data['post_checksum'] && $message_md5 != $post_data['post_checksum'])
- || ($edit_post_subject_checksum !== '' && $edit_post_subject_checksum != $post_data['post_subject_md5'] && md5($post_data['post_subject']) != $post_data['post_subject_md5']))
+ if ($edit_post_message_checksum !== '' &&
+ $edit_post_message_checksum != $post_data['post_checksum'] &&
+ $message_md5 != $post_data['post_checksum']
+ ||
+ $edit_post_subject_checksum !== '' &&
+ $edit_post_subject_checksum != $post_data['post_subject_md5'] &&
+ md5($post_data['post_subject']) != $post_data['post_subject_md5'])
{
if (topic_review($topic_id, $forum_id, 'post_review_edit', $post_id))
{
@@ -1525,7 +1530,7 @@ $template->assign_vars(array(
* @event core.posting_modify_template_vars
* @since 3.1-A1
*/
-$phpbb_dispatcher->trigger_event('core.posting_modify_template_vars');
+$phpbb_dispatcher->dispatch('core.posting_modify_template_vars');
// Build custom bbcodes array
display_custom_bbcodes();
diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg
index aac9d993f5..aef7a3b12a 100644
--- a/phpBB/styles/prosilver/style.cfg
+++ b/phpBB/styles/prosilver/style.cfg
@@ -18,8 +18,8 @@
# General Information about this style
name = prosilver
copyright = &copy; phpBB Group, 2007
-style_version = 3.1.0-a1
-phpbb_version = 3.1.0-a1
+style_version = 3.1.0-a2
+phpbb_version = 3.1.0-a2
# Defining a different template bitfield
# template_bitfield = lNg=
diff --git a/phpBB/styles/prosilver/template/confirm_body.html b/phpBB/styles/prosilver/template/confirm_body.html
index bf575c20fa..a0428025cf 100644
--- a/phpBB/styles/prosilver/template/confirm_body.html
+++ b/phpBB/styles/prosilver/template/confirm_body.html
@@ -1,12 +1,13 @@
<!-- IF S_AJAX_REQUEST -->
-
- <h3>{MESSAGE_TITLE}</h3>
- <p>{MESSAGE_TEXT}</p>
-
- <fieldset class="submit-buttons">
- <input type="button" name="confirm" value="{L_YES}" class="button2" />&nbsp;
- <input type="button" name="cancel" value="{L_NO}" class="button2" />
- </fieldset>
+ <form action="{S_CONFIRM_ACTION}" method="post">
+ <h3>{MESSAGE_TITLE}</h3>
+ <p>{MESSAGE_TEXT}</p>
+
+ <fieldset class="submit-buttons">
+ <input type="button" name="confirm" value="{L_YES}" class="button2" />&nbsp;
+ <input type="button" name="cancel" value="{L_NO}" class="button2" />
+ </fieldset>
+ </form>
<!-- ELSE -->
diff --git a/phpBB/styles/prosilver/template/confirm_delete_body.html b/phpBB/styles/prosilver/template/confirm_delete_body.html
index 759b6b46b2..dc09974d1c 100644
--- a/phpBB/styles/prosilver/template/confirm_delete_body.html
+++ b/phpBB/styles/prosilver/template/confirm_delete_body.html
@@ -1,27 +1,29 @@
<!-- IF S_AJAX_REQUEST -->
- <p>{MESSAGE_TEXT}</p>
+ <form action="{S_CONFIRM_ACTION}" method="post">
+ <p>{MESSAGE_TEXT}</p>
- <!-- IF not S_SOFTDELETED and (S_DELETE_REASON or (S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE)) -->
- <!-- IF S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE -->
- <label>
- <strong>{L_DELETE_PERMANENTLY}{L_COLON}</strong>
- <input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} />
- <!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF -->
- </label>
- <!-- ENDIF -->
+ <!-- IF not S_SOFTDELETED and (S_DELETE_REASON or (S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE)) -->
+ <!-- IF S_ALLOWED_DELETE and S_ALLOWED_SOFTDELETE -->
+ <label>
+ <strong>{L_DELETE_PERMANENTLY}{L_COLON}</strong>
+ <input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} />
+ <!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF -->
+ </label>
+ <!-- ENDIF -->
- <!-- IF S_DELETE_REASON -->
- <label for="delete_reason">
- <strong>{L_DELETE_REASON}{L_COLON}</strong><br /><span>{L_DELETE_REASON_EXPLAIN}</span><br />
- <input type="text" name="delete_reason" value="" class="inputbox autowidth" maxlength="120" size="45" />
- </label>
+ <!-- IF S_DELETE_REASON -->
+ <label for="delete_reason">
+ <strong>{L_DELETE_REASON}{L_COLON}</strong><br /><span>{L_DELETE_REASON_EXPLAIN}</span><br />
+ <input type="text" name="delete_reason" value="" class="inputbox autowidth" maxlength="120" size="45" />
+ </label>
+ <!-- ENDIF -->
<!-- ENDIF -->
- <!-- ENDIF -->
- <fieldset class="submit-buttons">
- <input type="button" name="confirm" value="{L_YES}" class="button1" />&nbsp;
- <input type="button" name="cancel" value="{L_NO}" class="button2" />
- </fieldset>
+ <fieldset class="submit-buttons">
+ <input type="button" name="confirm" value="{L_YES}" class="button1" />&nbsp;
+ <input type="button" name="cancel" value="{L_NO}" class="button2" />
+ </fieldset>
+ </form>
<!-- ELSE -->
diff --git a/phpBB/styles/prosilver/template/drafts.html b/phpBB/styles/prosilver/template/drafts.html
index b6e6a7f5b7..4b2e1bf0c6 100644
--- a/phpBB/styles/prosilver/template/drafts.html
+++ b/phpBB/styles/prosilver/template/drafts.html
@@ -13,26 +13,31 @@
<div class="<!-- IF not S_PRIVMSGS -->forumbg<!-- ELSE -->panel<!-- ENDIF -->">
<div class="inner">
- <ul class="topiclist">
+ <ul class="topiclist two-long-columns">
<li class="header">
<dl>
<dt>{L_LOAD_DRAFT}</dt>
- <dd class="posted">{L_SAVE_DATE}</dd>
+ <dd class="info">{L_SAVE_DATE}</dd>
</dl>
</li>
</ul>
- <ul class="topiclist<!-- IF not S_PRIVMSGS --> topics<!-- ELSE --> cplist<!-- ENDIF -->">
+ <ul class="topiclist two-long-columns<!-- IF not S_PRIVMSGS --> topics<!-- ELSE --> cplist<!-- ENDIF -->">
<!-- BEGIN draftrow -->
<li class="row<!-- IF draftrow.S_ROW_COUNT is even --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
<dl>
<dt>
- <a href="{draftrow.U_INSERT}" title="{L_LOAD_DRAFT}" class="topictitle">{draftrow.DRAFT_SUBJECT}</a><br />
- <!-- IF not S_PRIVMSGS --><!-- IF draftrow.S_LINK_TOPIC -->{L_TOPIC}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
- <!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
- <!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF --><!-- ENDIF -->
+ <div class="list-inner">
+ <a href="{draftrow.U_INSERT}" title="{L_LOAD_DRAFT}" class="topictitle">{draftrow.DRAFT_SUBJECT}</a><br />
+ <!-- IF not S_PRIVMSGS --><!-- IF draftrow.S_LINK_TOPIC -->{L_TOPIC}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
+ <!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
+ <!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF --><!-- ENDIF -->
+ <div class="responsive-show" style="display: none;">
+ {L_SAVE_DATE}{L_COLON} <strong>{draftrow.DATE}</strong>
+ </div>
+ </div>
</dt>
- <dd class="posted">{draftrow.DATE}</dd>
+ <dd class="info"><span>{draftrow.DATE}</span></dd>
</dl>
</li>
<!-- END draftrow -->
diff --git a/phpBB/styles/prosilver/template/forum_fn.js b/phpBB/styles/prosilver/template/forum_fn.js
index a2758de9dc..1b2b1954ef 100644
--- a/phpBB/styles/prosilver/template/forum_fn.js
+++ b/phpBB/styles/prosilver/template/forum_fn.js
@@ -410,424 +410,560 @@ function insert_single_user(formId, user)
}
/**
-* Run onload functions
+* Parse document block
*/
-(function($) {
- $(document).ready(function() {
- // Swap .nojs and .hasjs
- $('#phpbb.nojs').toggleClass('nojs hasjs');
-
- // Focus forms
- $('form[data-focus]:first').each(function() {
- $('#' + this.getAttribute('data-focus')).focus();
- });
+function parse_document(container)
+{
+ var test = document.createElement('div'),
+ oldBrowser = (typeof test.style.borderRadius == 'undefined');
- // Reset avatar dimensions when changing URL or EMAIL
- $('input[data-reset-on-edit]').bind('keyup', function() {
- $(this.getAttribute('data-reset-on-edit')).val('');
- });
+ delete test;
- // Pagination
- $('a.pagination-trigger').click(function() {
- jumpto($(this));
- });
+ /**
+ * Reset avatar dimensions when changing URL or EMAIL
+ */
+ container.find('input[data-reset-on-edit]').bind('keyup', function() {
+ $(this.getAttribute('data-reset-on-edit')).val('');
+ });
- // Adjust HTML code for IE8 and older versions
- var test = document.createElement('div'),
- oldBrowser = (typeof test.style.borderRadius == 'undefined');
- delete test;
+ /**
+ * Pagination
+ */
+ container.find('a.pagination-trigger').click(function() {
+ jumpto($(this));
+ });
- if (oldBrowser) {
- // Fix .linklist.bulletin lists
- $('ul.linklist.bulletin li:first-child, ul.linklist.bulletin li.rightside:last-child').addClass('no-bulletin');
+ /**
+ * Adjust HTML code for IE8 and older versions
+ */
+ if (oldBrowser) {
+ // Fix .linklist.bulletin lists
+ container.find('ul.linklist.bulletin li:first-child, ul.linklist.bulletin li.rightside:last-child').addClass('no-bulletin');
- // Do not run functions below for old browsers
- return;
- }
+ // Do not run functions below for old browsers
+ return;
+ }
- // Adjust topiclist lists with check boxes
- $('ul.topiclist dd.mark').siblings('dt').children('.list-inner').addClass('with-mark');
+ /**
+ * Resize navigation block to keep all links on same line
+ */
+ container.find('.navlinks').each(function() {
+ var $this = $(this),
+ left = $this.children().not('.rightside'),
+ right = $this.children('.rightside');
- // Resize navigation block to keep all links on same line
- $('.navlinks').each(function() {
- var $this = $(this),
- left = $this.children().not('.rightside'),
- right = $this.children('.rightside');
+ if (left.length !== 1 || !right.length) return;
- if (left.length !== 1 || !right.length) return;
+ function resize() {
+ var width = 0,
+ diff = left.outerWidth(true) - left.width();
- function resize() {
- var width = 0,
- diff = left.outerWidth(true) - left.width();
+ right.each(function() {
+ width += $(this).outerWidth(true);
+ });
+ left.css('max-width', Math.floor($this.width() - width - diff) + 'px');
+ }
- right.each(function() {
- width += $(this).outerWidth(true);
- });
- left.css('max-width', Math.floor($this.width() - width - diff) + 'px');
- }
+ resize();
+ $(window).resize(resize);
+ });
- resize();
- $(window).resize(resize);
+ /**
+ * Makes breadcrumbs responsive
+ */
+ container.find('.breadcrumbs:not([data-skip-responsive])').each(function() {
+ var $this = $(this),
+ $body = $('body'),
+ links = $this.find('.crumb'),
+ length = links.length,
+ classes = ['wrapped-max', 'wrapped-wide', 'wrapped-medium', 'wrapped-small', 'wrapped-tiny'],
+ classesLength = classes.length,
+ maxHeight = 0,
+ lastWidth = false,
+ wrapped = false;
+
+ // Set tooltips
+ $this.find('a').each(function() {
+ var $link = $(this);
+ $link.attr('title', $link.text());
});
- // Responsive breadcrumbs
- $('.breadcrumbs:not(.skip-responsive, .linklist.leftside .breadcrumbs)').each(function() {
- var $this = $(this),
- $body = $('body'),
- links = $this.find('.crumb'),
- length = links.length,
- classes = ['wrapped-wide', 'wrapped-medium', 'wrapped-small'],
- classesLength = classes.length,
- maxHeight = 0,
- lastWidth = false,
- wrapped = false;
-
- // Test height by setting nowrap
- $this.css('white-space', 'nowrap');
- maxHeight = $this.height() + 1;
- $this.css('white-space', '');
+ // Funciton that checks breadcrumbs
+ function check() {
+ var height = $this.height(),
+ width = $body.width(),
+ link, i, j;
- // Set tooltips
- $this.find('a').each(function() {
- var $link = $(this);
- $link.attr('title', $link.text());
+ maxHeight = parseInt($this.css('line-height')) | 0;
+ links.each(function() {
+ if ($(this).height() > 0) {
+ maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
+ }
});
- // Funciton that checks breadcrumbs
- function check() {
- var height = $this.height(),
- width = $body.width(),
- link, i, j;
+ if (height <= maxHeight) {
+ if (!wrapped || lastWidth === false || lastWidth >= width) {
+ lastWidth = width;
+ return;
+ }
+ }
+ lastWidth = width;
- if (height <= maxHeight) {
- if (!wrapped || lastWidth === false || lastWidth >= width) {
- lastWidth = width;
- return;
- }
+ if (wrapped) {
+ $this.removeClass('wrapped').find('.crumb.wrapped').removeClass('wrapped ' + classes.join(' '));
+ wrapped = false;
+ if ($this.height() <= maxHeight) {
+ return;
}
- lastWidth = width;
+ }
- if (wrapped) {
- $this.removeClass('wrapped').find('.crumb.wrapped').removeClass('wrapped ' + classes.join(' '));
- wrapped = false;
+ wrapped = true;
+ $this.addClass('wrapped');
+ if ($this.height() <= maxHeight) {
+ return;
+ }
+
+ for (i = 0; i < classesLength; i ++) {
+ for (j = length - 1; j >= 0; j --) {
+ links.eq(j).addClass('wrapped ' + classes[i]);
if ($this.height() <= maxHeight) {
return;
}
}
+ }
+ }
- wrapped = true;
- $this.addClass('wrapped');
- if ($this.height() <= maxHeight) {
- return;
- }
+ // Run function and set event
+ check();
+ $(window).resize(check);
+ });
- for (i = 0; i < classesLength; i ++) {
- for (j = length - 1; j >= 0; j --) {
- links.eq(j).addClass('wrapped ' + classes[i]);
- if ($this.height() <= maxHeight) {
- return;
- }
- }
- }
+ /**
+ * Adjust topiclist lists with check boxes
+ */
+ container.find('ul.topiclist dd.mark').siblings('dt').children('.list-inner').addClass('with-mark');
+
+ /**
+ * Appends contents of all extra columns to first column in
+ * .topiclist lists for mobile devices. Copies contents as is.
+ *
+ * To add that functionality to .topiclist list simply add
+ * responsive-show-all to list of classes
+ */
+ container.find('.topiclist.responsive-show-all > li > dl').each(function() {
+ var $this = $(this),
+ block = $this.find('dt .responsive-show:last-child'),
+ first = true;
+
+ // Create block that is visible only on mobile devices
+ if (!block.length) {
+ $this.find('dt > .list-inner').append('<div class="responsive-show" style="display:none;" />');
+ block = $this.find('dt .responsive-show:last-child');
+ }
+ else {
+ first = (block.text().trim().length == 0);
+ }
+
+ // Copy contents of each column
+ $this.find('dd').not('.mark').each(function() {
+ var column = $(this),
+ children = column.children(),
+ html = column.html();
+
+ if (children.length == 1 && children.text() == column.text()) {
+ html = children.html();
}
- // Run function and set event
- check();
- $(window).resize(check);
- });
+ block.append((first ? '' : '<br />') + html);
- // Responsive tables
- $('table.table1').not('.not-responsive').each(function() {
- var $this = $(this),
- th = $this.find('thead > tr > th'),
- columns = th.length,
- headers = [],
- totalHeaders = 0,
- i, headersLength;
-
- // Find each header
- th.each(function() {
- var cell = $(this),
- colspan = parseInt(cell.attr('colspan')),
- dfn = cell.attr('data-dfn'),
- text = dfn ? dfn : cell.text();
+ first = false;
+ });
+ });
- colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
+ /**
+ * Same as above, but prepends text from header to each
+ * column before contents of that column.
+ *
+ * To add that functionality to .topiclist list simply add
+ * responsive-show-columns to list of classes
+ */
+ container.find('.topiclist.responsive-show-columns').each(function() {
+ var list = $(this),
+ headers = [],
+ headersLength = 0;
+
+ // Find all headers, get contents
+ list.prev('.topiclist').find('li.header dd').not('.mark').each(function() {
+ headers.push($(this).text());
+ headersLength ++;
+ });
- for (i=0; i<colspan; i++) {
- headers.push(text);
- }
- totalHeaders ++;
- });
-
- headersLength = headers.length;
+ if (!headersLength) {
+ return;
+ }
- // Add header text to each cell as <dfn>
- $this.addClass('responsive');
+ // Parse each row
+ list.find('dl').each(function() {
+ var $this = $(this),
+ block = $this.find('dt .responsive-show:last-child'),
+ first = true;
- if (totalHeaders < 2) {
- $this.addClass('show-header');
- return;
+ // Create block that is visible only on mobile devices
+ if (!block.length) {
+ $this.find('dt > .list-inner').append('<div class="responsive-show" style="display:none;" />');
+ block = $this.find('dt .responsive-show:last-child');
+ }
+ else {
+ first = (block.text().trim().length == 0);
}
- $this.find('tbody > tr').each(function() {
- var row = $(this),
- cells = row.children('td'),
- column = 0;
+ // Copy contents of each column
+ $this.find('dd').not('.mark').each(function(i) {
+ var column = $(this),
+ children = column.children(),
+ html = column.html();
- if (cells.length == 1) {
- row.addClass('big-column');
- return;
+ if (children.length == 1 && children.text() == column.text()) {
+ html = children.html();
}
- cells.each(function() {
- var cell = $(this),
- colspan = parseInt(cell.attr('colspan')),
- text = cell.text().trim();
-
- if (headersLength <= column) {
- return;
- }
+ // Prepend contents of matching header before contents of column
+ if (i < headersLength) {
+ html = headers[i] + ': <strong>' + html + '</strong>';
+ }
- if (text.length && text !== '-') {
- cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
- }
- else {
- cell.addClass('empty');
- }
+ block.append((first ? '' : '<br />') + html);
- colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
- column += colspan;
- });
+ first = false;
});
});
+ });
- // Responsive link lists
- $('.linklist:not(.navlinks, .skip-responsive), .postbody ul.profile-icons:not(.skip-responsive)').each(function() {
- var $this = $(this),
- $body = $('body'),
- links = $this.children().not('.skip-responsive'),
- html = '<li class="responsive-menu" style="display:none;"><a href="javascript:void(0);" class="responsive-menu-link">&nbsp;</a><ul class="responsive-popup" style="display:none;" /></li>',
- // List of items that should be hidden last
- filterString = '.pagination, .icon-notifications, .icon-pm, .icon-logout, .icon-login, .mark-read, .breadcrumbs, .edit-icon, .quote-icon',
- filtered = links.filter(filterString);
-
- if (links.is('.rightside'))
- {
- links.filter('.rightside:first').before(html);
+ /**
+ * Responsive tables
+ */
+ container.find('table.table1').not('.not-responsive').each(function() {
+ var $this = $(this),
+ th = $this.find('thead > tr > th'),
+ columns = th.length,
+ headers = [],
+ totalHeaders = 0,
+ i, headersLength;
+
+ // Find each header
+ th.each(function(column) {
+ var cell = $(this),
+ colspan = parseInt(cell.attr('colspan')),
+ dfn = cell.attr('data-dfn'),
+ text = dfn ? dfn : cell.text();
+
+ colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
+
+ for (i=0; i<colspan; i++) {
+ headers.push(text);
}
- else
- {
- $this.append(html);
+ totalHeaders ++;
+
+ if (dfn && !column) {
+ $this.addClass('show-header');
}
+ });
+
+ headersLength = headers.length;
- var toggle = $this.children('.responsive-menu'),
- toggleLink = toggle.find('a.responsive-menu-link'),
- menu = toggle.find('ul.responsive-popup'),
- lastWidth = false,
- compact = false,
- responsive = false,
- copied = false;
-
- function check() {
- var width = $body.width();
- if (responsive && width <= lastWidth) {
- return;
- }
+ // Add header text to each cell as <dfn>
+ $this.addClass('responsive');
- // Reset responsive and compact layout
- if (responsive) {
- responsive = false;
- $this.removeClass('responsive');
- links.css('display', '');
- toggle.css('display', 'none');
- }
+ if (totalHeaders < 2) {
+ $this.addClass('show-header');
+ return;
+ }
- if (compact) {
- compact = false;
- $this.removeClass('compact');
- }
+ $this.find('tbody > tr').each(function() {
+ var row = $(this),
+ cells = row.children('td'),
+ column = 0;
- // Find tallest element
- var maxHeight = 0;
- links.each(function() {
- if (!$(this).height()) return;
- maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
- });
+ if (cells.length == 1) {
+ row.addClass('big-column');
+ return;
+ }
+
+ cells.each(function() {
+ var cell = $(this),
+ colspan = parseInt(cell.attr('colspan')),
+ text = cell.text().trim();
- if (maxHeight < 1) {
+ if (headersLength <= column) {
return;
}
- // Nothing to resize if block's height is not bigger than tallest element's height
- if ($this.height() <= maxHeight) {
- toggle.removeClass('visible');
- menu.hide();
- return;
+ if ((text.length && text !== '-') || cell.children().length) {
+ cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
+ }
+ else {
+ cell.addClass('empty');
}
- // Enable compact layout, find tallest element, compare to height of whole block
- compact = true;
- $this.addClass('compact');
+ colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
+ column += colspan;
+ });
+ });
+ });
- var compactMaxHeight = 0;
- links.each(function() {
- if (!$(this).height()) return;
- compactMaxHeight = Math.max(compactMaxHeight, $(this).outerHeight(true));
- });
+ /**
+ * Hide empty responsive tables
+ */
+ container.find('table.responsive > tbody').each(function() {
+ var items = $(this).children('tr');
+ if (items.length == 0)
+ {
+ $(this).parent('table:first').addClass('responsive-hide');
+ }
+ });
- if ($this.height() <= maxHeight) {
- toggle.removeClass('visible');
- menu.hide();
- return;
- }
+ /**
+ * Responsive link lists
+ */
+ container.find('.linklist:not(.navlinks, [data-skip-responsive]), .postbody ul.profile-icons:not([data-skip-responsive])').each(function() {
+ var $this = $(this),
+ $body = $('body'),
+ filterSkip = '.breadcrumbs, [data-skip-responsive]',
+ filterLast = '.pagination, .icon-notifications, .icon-pm, .icon-logout, .icon-login, .mark-read, .edit-icon, .quote-icon',
+ allLinks = $this.children(),
+ links = allLinks.not(filterSkip),
+ html = '<li class="responsive-menu" style="display:none;"><a href="javascript:void(0);" class="responsive-menu-link">&nbsp;</a><div class="dropdown" style="display:none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>',
+ filterLastList = links.filter(filterLast);
+
+ if (links.is('.rightside'))
+ {
+ links.filter('.rightside:first').before(html);
+ }
+ else
+ {
+ $this.append(html);
+ }
- // Compact layout did not resize block enough, switch to responsive layout
+ var item = $this.children('.responsive-menu'),
+ menu = item.find('.dropdown-contents'),
+ lastWidth = false,
+ compact = false,
+ responsive = false,
+ copied = false;
+
+ function check() {
+ var width = $body.width();
+ if (responsive && width <= lastWidth) {
+ return;
+ }
+
+ // Reset responsive and compact layout
+ if (responsive) {
+ responsive = false;
+ $this.removeClass('responsive');
+ links.css('display', '');
+ item.css('display', 'none');
+ }
+
+ if (compact) {
compact = false;
$this.removeClass('compact');
- responsive = true;
+ }
- if (!copied) {
- if (menu.parents().is('.rightside')) {
- menu.addClass('responsive-rightside');
- }
- menu.append(links.clone(true));
- menu.find('li.leftside, li.rightside').removeClass('leftside rightside');
- menu.find('.inputbox').parents('li:first').css('white-space', 'normal');
- copied = true;
- }
- else {
- menu.children().css('display', '');
- }
+ // Find tallest element
+ var maxHeight = 0;
+ allLinks.each(function() {
+ if (!$(this).height()) return;
+ maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
+ });
- toggle.css('display', '');
- $this.addClass('responsive');
+ if (maxHeight < 1) {
+ return;
+ }
- // Try to not hide filtered items
- if (filtered.length) {
- links.not(filterString).css('display', 'none');
+ // Nothing to resize if block's height is not bigger than tallest element's height
+ if ($this.height() <= maxHeight) {
+ return;
+ }
- maxHeight = 0;
- filtered.each(function() {
- if (!$(this).height()) return;
- maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
- });
+ // Enable compact layout, find tallest element, compare to height of whole block
+ compact = true;
+ $this.addClass('compact');
- if ($this.height() <= maxHeight) {
- menu.children().filter(filterString).css('display', 'none');
- return;
- }
- }
+ var compactMaxHeight = 0;
+ allLinks.each(function() {
+ if (!$(this).height()) return;
+ compactMaxHeight = Math.max(compactMaxHeight, $(this).outerHeight(true));
+ });
- links.css('display', 'none');
+ if ($this.height() <= maxHeight) {
+ return;
}
- toggleLink.click(function() {
- if (!responsive) return;
- if (!toggle.hasClass('visible')) {
- // Hide other popups
- $('.responsive-menu.visible').removeClass('visible').find('.responsive-popup').hide();
- }
- toggle.toggleClass('visible');
- menu.toggle();
- });
+ // Compact layout did not resize block enough, switch to responsive layout
+ compact = false;
+ $this.removeClass('compact');
+ responsive = true;
- check();
- $(window).resize(check);
- });
+ if (!copied) {
+ var clone = links.clone(true);
+ clone.filter('.rightside').each(function() {
+ menu.prepend(this);
+ });
+ menu.prepend(clone.not('.rightside'));
+ menu.find('li.leftside, li.rightside').removeClass('leftside rightside');
+ menu.find('.inputbox').parents('li:first').css('white-space', 'normal');
+ copied = true;
+ }
+ else {
+ menu.children().css('display', '');
+ }
- // Responsive tabs
- $('#tabs, #minitabs').not('.skip-responsive').each(function() {
- var $this = $(this),
- $body = $('body'),
- ul = $this.children(),
- tabs = ul.children().not('.skip-responsive'),
- links = tabs.children('a'),
- toggle = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span>&nbsp;</span></a><ul class="responsive-tabs" style="display:none;" /></li>').find('li.responsive-tab'),
- toggleLink = toggle.find('a.responsive-tab-link'),
- menu = toggle.find('ul.responsive-tabs'),
- maxHeight = 0,
- lastWidth = false,
- responsive = false;
+ item.css('display', '');
+ $this.addClass('responsive');
- links.each(function() {
- maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
- })
+ // Try to not hide filtered items
+ if (filterLastList.length) {
+ links.not(filterLast).css('display', 'none');
- function check() {
- var width = $body.width(),
- height = $this.height();
+ maxHeight = 0;
+ filterLastList.each(function() {
+ if (!$(this).height()) return;
+ maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
+ });
- if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
+ if ($this.height() <= maxHeight) {
+ menu.children().filter(filterLast).css('display', 'none');
return;
}
+ }
+
+ links.css('display', 'none');
+ }
- tabs.show();
- toggle.hide();
+ phpbb.registerDropdown(item.find('a.responsive-menu-link'), item.find('.dropdown'));
- lastWidth = width;
+ check();
+ $(window).resize(check);
+ });
+
+ /**
+ * Responsive tabs
+ */
+ container.find('#tabs, #minitabs').not('[data-skip-responsive]').each(function() {
+ var $this = $(this),
+ $body = $('body'),
+ ul = $this.children(),
+ tabs = ul.children().not('[data-skip-responsive]'),
+ links = tabs.children('a'),
+ item = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span>&nbsp;</span></a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
+ menu = item.find('.dropdown-contents'),
+ maxHeight = 0,
+ lastWidth = false,
+ responsive = false;
+
+ links.each(function() {
+ var link = $(this);
+ maxHeight = Math.max(maxHeight, Math.max(link.outerHeight(true), link.parent().outerHeight(true)));
+ })
+
+ function check() {
+ var width = $body.width(),
height = $this.height();
- if (height <= maxHeight) {
- responsive = false;
- return;
- }
- responsive = true;
- toggle.show();
- menu.hide().html('');
+ if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
+ return;
+ }
- var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
- total = availableTabs.length,
- i, tab;
+ tabs.show();
+ item.hide();
- for (i = total - 1; i >= 0; i --) {
- tab = availableTabs.eq(i);
- menu.prepend(tab.clone(true));
- tab.hide();
- if ($this.height() <= maxHeight) {
- menu.find('a').click(function() { check(true); });
- return;
- }
+ lastWidth = width;
+ height = $this.height();
+ if (height <= maxHeight) {
+ responsive = false;
+ if (item.hasClass('dropdown-visible')) {
+ phpbb.toggleDropdown.call(item.find('a.responsive-tab-link').get(0));
}
- menu.find('a').click(function() { check(true); });
+ return;
}
- toggleLink.click(function() {
- if (!responsive) return;
- menu.toggle();
- });
+ responsive = true;
+ item.show();
+ menu.html('');
- check(true);
- $(window).resize(check);
- });
+ var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
+ total = availableTabs.length,
+ i, tab;
- // Hide responsive menu and tabs
- $('#phpbb').click(function(e) {
- var parents = $(e.target).parents();
- if (!parents.is('.responsive-menu.visible')) {
- $('.responsive-menu.visible').removeClass('visible').find('.responsive-popup').hide();
- }
- if (!parents.is('.responsive-tab')) {
- $('.responsive-tabs').hide();
+ for (i = total - 1; i >= 0; i --) {
+ tab = availableTabs.eq(i);
+ menu.prepend(tab.clone(true));
+ tab.hide();
+ if ($this.height() <= maxHeight) {
+ menu.find('a').click(function() { check(true); });
+ return;
+ }
}
- });
+ menu.find('a').click(function() { check(true); });
+ }
- // Hide *CP navigation if there is only 1 item
- $('#navigation').each(function() {
- var items = $(this).children('ol, ul').children('li');
- if (items.length == 1)
- {
- $(this).addClass('responsive-hide');
- }
- });
+ phpbb.registerDropdown(item.find('a.responsive-tab-link'), item.find('.dropdown'), {visibleClass: 'activetab'});
- // Hide empty responsive tables
- $('table.responsive > tbody').each(function() {
- var items = $(this).children('tr');
- if (items.length == 0)
- {
- $(this).parent('table:first').addClass('responsive-hide');
+ check(true);
+ $(window).resize(check);
+ });
+
+ /**
+ * Hide UCP/MCP navigation if there is only 1 item
+ */
+ container.find('#navigation').each(function() {
+ var items = $(this).children('ol, ul').children('li');
+ if (items.length == 1)
+ {
+ $(this).addClass('responsive-hide');
+ }
+ });
+
+ /**
+ * Replace responsive text
+ */
+ container.find('[data-responsive-text]').each(function() {
+ var $this = $(this),
+ fullText = $this.text(),
+ responsiveText = $this.attr('data-responsive-text'),
+ responsive = false;
+
+ function check() {
+ if ($(window).width() > 700) {
+ if (!responsive) return;
+ $this.text(fullText);
+ responsive = false;
+ return;
}
+ if (responsive) return;
+ $this.text(responsiveText);
+ responsive = true;
+ }
+
+ check();
+ $(window).resize(check);
+ });
+}
+
+/**
+* Run onload functions
+*/
+(function($) {
+ $(document).ready(function() {
+ // Swap .nojs and .hasjs
+ $('#phpbb.nojs').toggleClass('nojs hasjs');
+
+ // Focus forms
+ $('form[data-focus]:first').each(function() {
+ $('#' + this.getAttribute('data-focus')).focus();
});
+
+ parse_document($('body'));
});
})(jQuery);
diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html
index 9fb6b3d951..f9019b4fe3 100644
--- a/phpBB/styles/prosilver/template/forumlist_body.html
+++ b/phpBB/styles/prosilver/template/forumlist_body.html
@@ -42,6 +42,16 @@
<a href="{forumrow.subforum.U_SUBFORUM}" class="subforum<!-- IF forumrow.subforum.S_UNREAD --> unread<!-- ELSE --> read<!-- ENDIF -->" title="<!-- IF forumrow.subforum.UNREAD -->{L_UNREAD_POSTS}<!-- ELSE -->{L_NO_UNREAD_POSTS}<!-- ENDIF -->">{forumrow.subforum.SUBFORUM_NAME}</a><!-- IF not forumrow.subforum.S_LAST_ROW -->,<!-- ENDIF -->
<!-- END subforum -->
<!-- ENDIF -->
+
+ <!-- IF not S_IS_BOT -->
+ <div class="responsive-show" style="display: none;">
+ <!-- IF forumrow.CLICKS -->
+ {L_REDIRECTS}{L_COLON} <strong>{forumrow.CLICKS}</strong>
+ <!-- ELSEIF not forumrow.S_IS_LINK and forumrow.TOPICS -->
+ {L_TOPICS}{L_COLON} <strong>{forumrow.TOPICS}</strong>
+ <!-- ENDIF -->
+ </div>
+ <!-- ENDIF -->
</div>
</dt>
<!-- IF forumrow.CLICKS -->
diff --git a/phpBB/styles/prosilver/template/index_body.html b/phpBB/styles/prosilver/template/index_body.html
index 2e21c5a341..8acc0a8812 100644
--- a/phpBB/styles/prosilver/template/index_body.html
+++ b/phpBB/styles/prosilver/template/index_body.html
@@ -1,7 +1,7 @@
<!-- INCLUDE overall_header.html -->
<p class="{S_CONTENT_FLOW_END} responsive-center<!-- IF S_USER_LOGGED_IN --> rightside<!-- ENDIF -->"><!-- IF S_USER_LOGGED_IN -->{LAST_VISIT_DATE}<!-- ELSE -->{CURRENT_TIME}<!-- ENDIF --></p>
-<!-- IF U_MCP --><p class="responsive-center">{CURRENT_TIME} <br />[&nbsp;<a href="{U_MCP}">{L_MCP}</a>&nbsp;]</p><!-- ELSEIF S_USER_LOGGED_IN --><p>{CURRENT_TIME}</p><!-- ENDIF -->
+<!-- IF S_USER_LOGGED_IN --><p class="responsive-center">{CURRENT_TIME}<!-- IF U_MCP or U_ACP --> <br />[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}" title="{L_ACP}" data-responsive-text="{L_ACP_SHORT}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}" title="{L_MCP}" data-responsive-text="{L_MCP_SHORT}">{L_MCP}</a><!-- ENDIF -->&nbsp;]<!-- ENDIF --></p><!-- ENDIF -->
<!-- IF S_DISPLAY_SEARCH or (S_USER_LOGGED_IN and not S_IS_BOT) -->
<ul class="linklist bulletin">
@@ -25,10 +25,10 @@
<form method="post" action="{S_LOGIN_ACTION}" class="headerspace">
<h3><a href="{U_LOGIN_LOGOUT}">{L_LOGIN_LOGOUT}</a><!-- IF S_REGISTER_ENABLED -->&nbsp; &bull; &nbsp;<a href="{U_REGISTER}">{L_REGISTER}</a><!-- ENDIF --></h3>
<fieldset class="quick-login">
- <label for="username">{L_USERNAME}{L_COLON}</label>&nbsp;<input type="text" name="username" id="username" size="10" class="inputbox" title="{L_USERNAME}" />
- <label for="password">{L_PASSWORD}{L_COLON}</label>&nbsp;<input type="password" name="password" id="password" size="10" class="inputbox" title="{L_PASSWORD}" />
+ <label for="username"><span>{L_USERNAME}{L_COLON}</span> <input type="text" name="username" id="username" size="10" class="inputbox" title="{L_USERNAME}" /></label>
+ <label for="password"><span>{L_PASSWORD}{L_COLON}</span> <input type="password" name="password" id="password" size="10" class="inputbox" title="{L_PASSWORD}" /></label>
<!-- IF S_AUTOLOGIN_ENABLED -->
- | <label for="autologin">{L_LOG_ME_IN} <input type="checkbox" name="autologin" id="autologin" /></label>
+ <span class="responsive-hide">|</span> <label for="autologin">{L_LOG_ME_IN} <input type="checkbox" name="autologin" id="autologin" /></label>
<!-- ENDIF -->
<input type="submit" name="login" value="{L_LOGIN}" class="button2" />
{S_LOGIN_REDIRECT}
diff --git a/phpBB/styles/prosilver/template/mcp_forum.html b/phpBB/styles/prosilver/template/mcp_forum.html
index e5dcb94855..6ca176a4aa 100644
--- a/phpBB/styles/prosilver/template/mcp_forum.html
+++ b/phpBB/styles/prosilver/template/mcp_forum.html
@@ -63,7 +63,15 @@
</ul>
</div>
<!-- ENDIF -->
- <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ <div class="responsive-hide">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ </div>
+ <div class="responsive-show" style="display: none;">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} &laquo; {topicrow.LAST_POST_TIME}<br />
+ {L_REPLIES}{L_COLON} <strong>{topicrow.REPLIES}</strong>
+ </div>
</div>
</dt>
@@ -90,7 +98,8 @@
<!-- IF U_PREVIOUS_PAGE --><a href="{U_PREVIOUS_PAGE}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}">{L_PREVIOUS}</a><!-- ENDIF -->
<label>{L_DISPLAY_TOPICS}{L_COLON} {S_SELECT_SORT_DAYS}</label>
<label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label>
- <label>{S_SELECT_SORT_DIR} <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
+ <label>{S_SELECT_SORT_DIR}</label>
+ <input type="submit" name="sort" value="{L_GO}" class="button2" />
</fieldset>
<hr />
diff --git a/phpBB/styles/prosilver/template/mcp_front.html b/phpBB/styles/prosilver/template/mcp_front.html
index 402cfe029a..44295611cf 100644
--- a/phpBB/styles/prosilver/template/mcp_front.html
+++ b/phpBB/styles/prosilver/template/mcp_front.html
@@ -21,7 +21,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist missing-column">
+ <ul class="topiclist cplist missing-column responsive-show-all">
<!-- BEGIN unapproved -->
<li class="row<!-- IF unapproved.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
@@ -75,7 +75,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist two-long-columns">
+ <ul class="topiclist cplist two-long-columns responsive-show-all">
<!-- BEGIN report -->
<li class="row<!-- IF report.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
@@ -116,7 +116,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist two-long-columns">
+ <ul class="topiclist cplist two-long-columns responsive-show-all">
<!-- BEGIN pm_report -->
<li class="row<!-- IF pm_report.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
@@ -147,7 +147,7 @@
<h3>{L_LATEST_LOGS}</h3>
- <table class="table1" cellspacing="0">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_ACTION}</th>
diff --git a/phpBB/styles/prosilver/template/mcp_header.html b/phpBB/styles/prosilver/template/mcp_header.html
index 7b9e4c13cb..e3efe49943 100644
--- a/phpBB/styles/prosilver/template/mcp_header.html
+++ b/phpBB/styles/prosilver/template/mcp_header.html
@@ -3,10 +3,8 @@
<h2>{L_MCP}</h2>
<!-- IF U_MCP -->
- <p class="linkmcp">
- [ <a href="{U_MCP}">{L_MCP}</a><!-- IF U_MCP_FORUM --> | <a href="{U_MCP_FORUM}">{L_MODERATE_FORUM}</a><!-- ENDIF -->
- <!-- IF U_MCP_TOPIC --> | <a href="{U_MCP_TOPIC}">{L_MODERATE_TOPIC}</a><!-- ENDIF -->
- <!-- IF U_MCP_POST --> | <a href="{U_MCP_POST}">{L_MODERATE_POST}</a><!-- ENDIF --> ]
+ <p class="linkmcp responsive-center">
+ [<!-- IF U_ACP -->&nbsp;<a href="{U_ACP}" title="{L_ACP}" data-responsive-text="{L_ACP_SHORT}">{L_ACP}</a>&nbsp;|<!-- ENDIF -->&nbsp;<a href="{U_MCP}" title="{L_MCP}" data-responsive-text="{L_MCP_SHORT}">{L_MCP}</a><!-- IF U_MCP_FORUM -->&nbsp;|&nbsp;<a href="{U_MCP_FORUM}">{L_MODERATE_FORUM}</a><!-- ENDIF --><!-- IF U_MCP_TOPIC -->&nbsp;|&nbsp;<a href="{U_MCP_TOPIC}">{L_MODERATE_TOPIC}</a><!-- ENDIF --><!-- IF U_MCP_POST -->&nbsp;|&nbsp;<a href="{U_MCP_POST}">{L_MODERATE_POST}</a><!-- ENDIF -->&nbsp;]
</p>
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/template/mcp_logs.html b/phpBB/styles/prosilver/template/mcp_logs.html
index 492c8cf201..b930bbbcc6 100644
--- a/phpBB/styles/prosilver/template/mcp_logs.html
+++ b/phpBB/styles/prosilver/template/mcp_logs.html
@@ -21,7 +21,7 @@
</li>
</ul>
- <table cellspacing="1" class="table1">
+ <table class="table1">
<thead>
<tr>
<th>{L_USERNAME}</th>
diff --git a/phpBB/styles/prosilver/template/mcp_notes_user.html b/phpBB/styles/prosilver/template/mcp_notes_user.html
index eb954fd11d..9b6c9b2667 100644
--- a/phpBB/styles/prosilver/template/mcp_notes_user.html
+++ b/phpBB/styles/prosilver/template/mcp_notes_user.html
@@ -64,7 +64,7 @@
</li>
</ul>
- <table cellspacing="1" class="table1">
+ <table class="table1">
<thead>
<tr>
<th>{L_REPORT_BY}</th>
diff --git a/phpBB/styles/prosilver/template/mcp_post.html b/phpBB/styles/prosilver/template/mcp_post.html
index 25464085a0..2b4ebec5c8 100644
--- a/phpBB/styles/prosilver/template/mcp_post.html
+++ b/phpBB/styles/prosilver/template/mcp_post.html
@@ -264,7 +264,7 @@
<!-- IF POST_IPADDR -->{POST_IPADDR} ({POST_IP})<!-- ELSE -->{POST_IP}<!-- IF U_LOOKUP_IP --> (<a href="{U_LOOKUP_IP}">{L_LOOKUP_IP}</a>)<!-- ENDIF --><!-- ENDIF -->
<!-- ENDIF --></p>
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_OTHER_USERS}</th>
@@ -285,7 +285,7 @@
</tbody>
</table>
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_IPS_POSTED_FROM}</th>
diff --git a/phpBB/styles/prosilver/template/mcp_queue.html b/phpBB/styles/prosilver/template/mcp_queue.html
index c2d39eff98..461d5982db 100644
--- a/phpBB/styles/prosilver/template/mcp_queue.html
+++ b/phpBB/styles/prosilver/template/mcp_queue.html
@@ -35,7 +35,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist missing-column">
+ <ul class="topiclist cplist missing-column responsive-show-all">
<!-- BEGIN postrow -->
diff --git a/phpBB/styles/prosilver/template/mcp_reports.html b/phpBB/styles/prosilver/template/mcp_reports.html
index 902744fe25..ffa82d5e0e 100644
--- a/phpBB/styles/prosilver/template/mcp_reports.html
+++ b/phpBB/styles/prosilver/template/mcp_reports.html
@@ -48,6 +48,9 @@
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.PM_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
<span>{L_MESSAGE_BY_AUTHOR} {postrow.PM_AUTHOR_FULL} &raquo; {postrow.PM_TIME}</span><br />
<span>{L_MESSAGE_TO} {postrow.RECIPIENTS}</span>
+ <div class="responsive-show" style="display: none;">
+ {L_REPORTER}{L_COLON} {postrow.REPORTER_FULL} &laquo; {postrow.REPORT_TIME}
+ </div>
</div>
</dt>
<dd class="moderation">
@@ -58,6 +61,10 @@
<div class="list-inner">
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.POST_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
<span>{L_POSTED} {L_POST_BY_AUTHOR} {postrow.POST_AUTHOR_FULL} &raquo; {postrow.POST_TIME}</span>
+ <div class="responsive-show" style="display: none;">
+ {L_REPORTER}{L_COLON} {postrow.REPORTER_FULL} &laquo; {postrow.REPORT_TIME}<br />
+ <!-- IF postrow.U_VIEWFORUM -->{L_FORUM}{L_COLON} <a href="{postrow.U_VIEWFORUM}">{postrow.FORUM_NAME}</a><!-- ELSE -->{postrow.FORUM_NAME}<!-- ENDIF -->
+ </div>
</div>
</dt>
<dd class="moderation">
diff --git a/phpBB/styles/prosilver/template/mcp_warn_front.html b/phpBB/styles/prosilver/template/mcp_warn_front.html
index 5a332cf202..668a0d81a8 100644
--- a/phpBB/styles/prosilver/template/mcp_warn_front.html
+++ b/phpBB/styles/prosilver/template/mcp_warn_front.html
@@ -33,7 +33,7 @@
<h3>{L_MOST_WARNINGS}</h3>
<!-- IF .highest -->
- <table class="table1" cellspacing="0">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_USERNAME}</th>
@@ -51,7 +51,7 @@
<td>{highest.WARNING_TIME}</td>
<td><a href="{highest.U_NOTES}">{L_VIEW_NOTES}</a></td>
</tr>
- <!-- END latest -->
+ <!-- END highest -->
</tbody>
</table>
<!-- ELSE -->
@@ -67,7 +67,7 @@
<h3>{L_LATEST_WARNINGS}</h3>
<!-- IF .latest -->
- <table class="table1" cellspacing="0">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_USERNAME}</th>
diff --git a/phpBB/styles/prosilver/template/mcp_warn_list.html b/phpBB/styles/prosilver/template/mcp_warn_list.html
index cdf2aecc0e..731c945fe6 100644
--- a/phpBB/styles/prosilver/template/mcp_warn_list.html
+++ b/phpBB/styles/prosilver/template/mcp_warn_list.html
@@ -21,7 +21,7 @@
</li>
</ul>
- <table class="table1" cellspacing="0">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_USERNAME}</th>
diff --git a/phpBB/styles/prosilver/template/memberlist_body.html b/phpBB/styles/prosilver/template/memberlist_body.html
index cec566f846..606314f9d0 100644
--- a/phpBB/styles/prosilver/template/memberlist_body.html
+++ b/phpBB/styles/prosilver/template/memberlist_body.html
@@ -55,7 +55,7 @@
<div class="forumbg forumbg-table">
<div class="inner">
- <table class="table1" cellspacing="1" id="memberlist">
+ <table class="table1" id="memberlist">
<thead>
<tr>
<th class="name" data-dfn="{L_RANK}{L_COMMA_SEPARATOR}<!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF -->"><span class="rank-img"><a href="{U_SORT_RANK}">{L_RANK}</a></span><a href="{U_SORT_USERNAME}"><!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF --></a></th>
@@ -85,7 +85,7 @@
<div class="forumbg forumbg-table">
<div class="inner">
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<!-- IF not S_LEADERS_SET -->
@@ -143,7 +143,8 @@
<!-- IF U_PREVIOUS_PAGE --><a href="{U_PREVIOUS_PAGE}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}">{L_PREVIOUS}</a><!-- ENDIF -->
<!-- IF U_NEXT_PAGE --><a href="{U_NEXT_PAGE}" class="right-box arrow-{S_CONTENT_FLOW_END}">{L_NEXT}</a><!-- ENDIF -->
<label for="sk">{L_SELECT_SORT_METHOD}{L_COLON} <select name="sk" id="sk">{S_MODE_SELECT}</select></label>
- <label for="sd">{L_ORDER} <select name="sd" id="sd">{S_ORDER_SELECT}</select> <input type="submit" name="sort" value="{L_SUBMIT}" class="button2" /></label>
+ <label for="sd">{L_ORDER} <select name="sd" id="sd">{S_ORDER_SELECT}</select></label>
+ <input type="submit" name="sort" value="{L_SUBMIT}" class="button2" />
</fieldset>
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/template/memberlist_leaders.html b/phpBB/styles/prosilver/template/memberlist_leaders.html
index c2c1644375..fd2ba564d3 100644
--- a/phpBB/styles/prosilver/template/memberlist_leaders.html
+++ b/phpBB/styles/prosilver/template/memberlist_leaders.html
@@ -8,7 +8,7 @@
<div class="forumbg forumbg-table">
<div class="inner">
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name" data-dfn="{L_RANK}{L_COMMA_SEPARATOR}{L_USERNAME}"><span class="rank-img">{L_RANK}&nbsp;</span><!-- IF group.U_GROUP --><a href="{group.U_GROUP}">{group.GROUP_NAME}</a><!-- ELSE -->{group.GROUP_NAME}<!-- ENDIF --></th>
diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html
index 6940024627..6f297660a2 100644
--- a/phpBB/styles/prosilver/template/overall_footer.html
+++ b/phpBB/styles/prosilver/template/overall_footer.html
@@ -1,3 +1,4 @@
+ <!-- EVENT overall_footer_content_after -->
</div>
<div id="page-footer">
@@ -5,21 +6,19 @@
<div class="navbar">
<div class="inner">
- <ul class="linklist leftside bulletin">
- <li class="icon-home breadcrumbs"><!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}">{L_SITE_HOME}</a> <strong>&#8249;</strong></span> <!-- ENDIF --><span class="crumb"><a href="{U_INDEX}" accesskey="h">{L_INDEX}</a></span>
+ <ul class="linklist bulletin">
+ <li class="small-icon icon-home breadcrumbs"><!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}">{L_SITE_HOME}</a> <strong>&#8249;</strong></span> <!-- ENDIF --><span class="crumb"><a href="{U_INDEX}" accesskey="h">{L_INDEX}</a></span>
<!-- EVENT overall_footer_breadcrumb_append -->
</li>
<!-- IF not S_IS_BOT -->
- <!-- IF U_WATCH_FORUM_LINK --><li <!-- IF S_WATCHING_FORUM -->class="icon-unsubscribe"<!-- ELSE -->class="icon-subscribe"<!-- ENDIF -->><a href="{U_WATCH_FORUM_LINK}" title="{S_WATCH_FORUM_TITLE}" data-ajax="toggle_link" data-toggle-class="icon-<!-- IF not S_WATCHING_FORUM -->unsubscribe<!-- ELSE -->subscribe<!-- ENDIF -->" data-toggle-text="{S_WATCH_FORUM_TOGGLE}" data-toggle-url="{U_WATCH_FORUM_TOGGLE}">{S_WATCH_FORUM_TITLE}</a></li><!-- ENDIF -->
- <!-- IF U_WATCH_TOPIC --><li <!-- IF S_WATCHING_TOPIC -->class="icon-unsubscribe"<!-- ELSE -->class="icon-subscribe"<!-- ENDIF -->><a href="{U_WATCH_TOPIC}" title="{S_WATCH_TOPIC_TITLE}" data-ajax="toggle_link" data-toggle-class="<!-- IF not S_WATCHING_TOPIC -->icon-unsubscribe<!-- ELSE -->icon-subscribe<!-- ENDIF -->" data-toggle-text="{S_WATCH_TOPIC_TOGGLE}" data-toggle-url="{U_WATCH_TOPIC_TOGGLE}">{S_WATCH_TOPIC_TITLE}</a></li><!-- ENDIF -->
- <!-- IF U_BOOKMARK_TOPIC --><li class="icon-bookmark"><a href="{U_BOOKMARK_TOPIC}" title="{L_BOOKMARK_TOPIC}" data-ajax="alt_text" data-alt-text="{S_BOOKMARK_TOGGLE}">{S_BOOKMARK_TOPIC}</a></li><!-- ENDIF -->
- <!-- IF U_BUMP_TOPIC --><li class="icon-bump"><a href="{U_BUMP_TOPIC}" title="{L_BUMP_TOPIC}" data-ajax="true">{L_BUMP_TOPIC}</a></li><!-- ENDIF -->
+ <!-- IF U_WATCH_FORUM_LINK --><li class="small-icon icon-<!-- IF S_WATCHING_FORUM -->unsubscribe<!-- ELSE -->subscribe<!-- ENDIF -->"><a href="{U_WATCH_FORUM_LINK}" title="{S_WATCH_FORUM_TITLE}" data-ajax="toggle_link" data-toggle-class="small-icon icon-<!-- IF not S_WATCHING_FORUM -->unsubscribe<!-- ELSE -->subscribe<!-- ENDIF -->" data-toggle-text="{S_WATCH_FORUM_TOGGLE}" data-toggle-url="{U_WATCH_FORUM_TOGGLE}">{S_WATCH_FORUM_TITLE}</a></li><!-- ENDIF -->
+ <!-- IF U_WATCH_TOPIC --><li class="small-icon icon-<!-- IF S_WATCHING_TOPIC -->unsubscribe<!-- ELSE -->subscribe<!-- ENDIF -->"><a href="{U_WATCH_TOPIC}" title="{S_WATCH_TOPIC_TITLE}" data-ajax="toggle_link" data-toggle-class="small-icon icon-<!-- IF not S_WATCHING_TOPIC -->unsubscribe<!-- ELSE -->subscribe<!-- ENDIF -->" data-toggle-text="{S_WATCH_TOPIC_TOGGLE}" data-toggle-url="{U_WATCH_TOPIC_TOGGLE}">{S_WATCH_TOPIC_TITLE}</a></li><!-- ENDIF -->
+ <!-- IF U_BOOKMARK_TOPIC --><li class="small-icon icon-bookmark"><a href="{U_BOOKMARK_TOPIC}" title="{L_BOOKMARK_TOPIC}" data-ajax="alt_text" data-alt-text="{S_BOOKMARK_TOGGLE}">{S_BOOKMARK_TOPIC}</a></li><!-- ENDIF -->
+ <!-- IF U_BUMP_TOPIC --><li class="small-icon icon-bump"><a href="{U_BUMP_TOPIC}" title="{L_BUMP_TOPIC}" data-ajax="true">{L_BUMP_TOPIC}</a></li><!-- ENDIF -->
<!-- ENDIF -->
- </ul>
- <ul class="linklist rightside bulletin">
- <!-- IF U_TEAM --><li><a href="{U_TEAM}">{L_THE_TEAM}</a><!-- ENDIF -->
- <!-- IF not S_IS_BOT --><li><a href="{U_DELETE_COOKIES}" data-ajax="true" data-refresh="true">{L_DELETE_COOKIES}</a></li><!-- ENDIF -->
- <li>{S_TIMEZONE}</li>
+ <li class="rightside">{S_TIMEZONE}</li>
+ <!-- IF not S_IS_BOT --><li class="rightside"><a href="{U_DELETE_COOKIES}" data-ajax="true" data-refresh="true">{L_DELETE_COOKIES}</a></li><!-- ENDIF -->
+ <!-- IF U_TEAM --><li class="rightside"><a href="{U_TEAM}">{L_THE_TEAM}</a><!-- ENDIF -->
</ul>
</div>
@@ -36,8 +35,8 @@
<div id="darkenwrapper" data-ajax-error-title="{L_AJAX_ERROR_TITLE}" data-ajax-error-text="{L_AJAX_ERROR_TEXT}" data-ajax-error-text-abort="{L_AJAX_ERROR_TEXT_ABORT}" data-ajax-error-text-timeout="{L_AJAX_ERROR_TEXT_TIMEOUT}" data-ajax-error-text-parsererror="{L_AJAX_ERROR_TEXT_PARSERERROR}">
<div id="darken">&nbsp;</div>
- <div class="phpbb_alert" id="loadingalert"><h3>{L_LOADING}</h3><p>{L_PLEASE_WAIT}</p></div>
</div>
+ <div id="loading_indicator"></div>
<div id="phpbb_alert" class="phpbb_alert" data-l-err="{L_ERROR}" data-l-timeout-processing-req="{L_TIMEOUT_PROCESSING_REQ}">
<a href="#" class="alert_close"></a>
diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html
index 6ab0b3d553..e4e1b3443b 100644
--- a/phpBB/styles/prosilver/template/overall_header.html
+++ b/phpBB/styles/prosilver/template/overall_header.html
@@ -29,7 +29,7 @@
<!-- IF S_ALLOW_CDN --><link href="//fonts.googleapis.com/css?family=Open+Sans:600&amp;subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese" rel="stylesheet" type="text/css" media="screen, projection" /><!-- ENDIF -->
<link href="{T_STYLESHEET_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
<link href="{T_STYLESHEET_LANG_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
-<link href="{T_THEME_PATH}/responsive.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
+<link href="{T_THEME_PATH}/responsive.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
<link href="{T_THEME_PATH}/bidi.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="screen, projection" />
@@ -84,7 +84,7 @@
<ul class="linklist navlinks">
<!-- DEFINE $MICRODATA = ' itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""' -->
- <li class="icon-home breadcrumbs"><!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}"{$MICRODATA}>{L_SITE_HOME}</a> <strong>&#8249;</strong></span> <!-- ENDIF -->
+ <li class="small-icon icon-home breadcrumbs"><!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}"{$MICRODATA}>{L_SITE_HOME}</a> <strong>&#8249;</strong></span> <!-- ENDIF -->
<span class="crumb"><a href="{U_INDEX}" accesskey="h"{$MICRODATA}>{L_INDEX}</a></span>
<!-- BEGIN navlinks --> <span class="crumb"><strong>&#8249;</strong> <a href="{navlinks.U_VIEW_FORUM}"{$MICRODATA}>{navlinks.FORUM_NAME}</a></span><!-- END navlinks -->
<!-- EVENT overall_header_breadcrumb_append -->
@@ -97,53 +97,55 @@
<!-- IF S_DISPLAY_SEARCH and not S_IN_SEARCH --><li class="responsive-search rightside" style="display: none;"><a href="{U_SEARCH}" title="{L_SEARCH_ADV_EXPLAIN}">{L_SEARCH}</a></li><!-- ENDIF -->
</ul>
+ <ul class="linklist bulletin">
<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
- <ul class="linklist leftside bulletin">
<!-- IF S_NOTIFICATIONS_DISPLAY -->
- <li class="icon-notification skip-responsive">
+ <li class="small-icon icon-notification" data-skip-responsive="true">
<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button"><span>{L_NOTIFICATIONS} [</span><strong>{NOTIFICATIONS_COUNT}</strong><span>]</span></a>
- <div id="notification_list" class="notification_list">
- <div class="pointer"><div class="pointer_inner"></div></div>
- <div class="header">
- {L_NOTIFICATIONS}
- <span class="header_settings"><a href="{U_NOTIFICATION_SETTINGS}">{L_SETTINGS}</a></span>
- </div>
-
- <ul>
- <!-- IF not .notifications -->
- <li>
- {L_NO_NOTIFICATIONS}
- </li>
- <!-- ENDIF -->
- <!-- BEGIN notifications -->
- <li class="<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
- <!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
- <!-- IF notifications.AVATAR -->{notifications.AVATAR}<!-- ELSE --><img src="{T_THEME_PATH}/images/no_avatar.gif" alt="" /><!-- ENDIF -->
- <div class="notification_text">
- <p>{notifications.FORMATTED_TITLE}</p>
- <p>&raquo; {notifications.TIME}</p>
-
- <!-- IF not notifications.URL and notifications.U_MARK_READ -->
- <p><a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a></p>
- <!-- ENDIF -->
- </div>
- <!-- IF notifications.URL --></a><!-- ENDIF -->
- </li>
- <!-- END notifications -->
- </ul>
-
- <div class="footer">
- <a href="{U_VIEW_ALL_NOTIFICATIONS}"><span>{L_SEE_ALL}</span></a>
+ <div id="notification_list" class="dropdown notification_list">
+ <div class="pointer"><div class="pointer-inner"></div></div>
+ <div class="dropdown-contents">
+ <div class="header">
+ {L_NOTIFICATIONS}
+ <span class="header_settings"><a href="{U_NOTIFICATION_SETTINGS}">{L_SETTINGS}</a></span>
+ </div>
+
+ <ul>
+ <!-- IF not .notifications -->
+ <li>
+ {L_NO_NOTIFICATIONS}
+ </li>
+ <!-- ENDIF -->
+ <!-- BEGIN notifications -->
+ <li class="<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
+ <!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
+ <!-- IF notifications.AVATAR -->{notifications.AVATAR}<!-- ELSE --><img src="{T_THEME_PATH}/images/no_avatar.gif" alt="" /><!-- ENDIF -->
+ <div class="notification_text">
+ <p>{notifications.FORMATTED_TITLE}</p>
+ <p>&raquo; {notifications.TIME}</p>
+
+ <!-- IF not notifications.URL and notifications.U_MARK_READ -->
+ <p><a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a></p>
+ <!-- ENDIF -->
+ </div>
+ <!-- IF notifications.URL --></a><!-- ENDIF -->
+ </li>
+ <!-- END notifications -->
+ </ul>
+
+ <div class="footer">
+ <a href="{U_VIEW_ALL_NOTIFICATIONS}"><span>{L_SEE_ALL}</span></a>
+ </div>
</div>
</div>
</li>
<!-- ENDIF -->
<!-- IF S_DISPLAY_PM -->
- <li class="icon-pm">
+ <li class="small-icon icon-pm">
<a href="{U_PRIVATEMSGS}"><span>{L_PRIVATE_MESSAGES} [</span><strong>{PRIVATE_MESSAGE_COUNT}</strong><span>]</span></a>
</li>
<!-- ENDIF -->
- <li class="icon-ucp">
+ <li class="small-icon icon-ucp">
<a href="{U_PROFILE}" title="{L_PROFILE}" accesskey="e">{L_PROFILE}</a>
</li>
<!-- IF S_DISPLAY_SEARCH -->
@@ -152,18 +154,16 @@
<!-- IF U_RESTORE_PERMISSIONS -->
<li class="icon-restore-permissions"><a href="{U_RESTORE_PERMISSIONS}">{L_RESTORE_PERMISSIONS}</a></li>
<!-- ENDIF -->
- </ul>
<!-- ENDIF -->
- <ul class="linklist rightside<!-- IF S_IS_BOT or not S_USER_LOGGED_IN --> fullwidth<!-- ENDIF -->">
- <!-- EVENT overall_header_navigation_prepend -->
- <li class="icon-faq"><a href="{U_FAQ}" title="{L_FAQ_EXPLAIN}">{L_FAQ}</a></li>
+ <!-- EVENT overall_header_navigation_append -->
<!-- IF not S_IS_BOT -->
- <!-- IF S_DISPLAY_MEMBERLIST --><li class="icon-members"><a href="{U_MEMBERLIST}" title="{L_MEMBERLIST_EXPLAIN}">{L_MEMBERLIST}</a></li><!-- ENDIF -->
- <!-- IF not S_USER_LOGGED_IN and S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --><li class="icon-register"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
- <li class="icon-logout"><a href="{U_LOGIN_LOGOUT}" title="{L_LOGIN_LOGOUT}" accesskey="x">{L_LOGIN_LOGOUT}</a></li>
+ <li class="small-icon icon-logout rightside no-bulletin"><a href="{U_LOGIN_LOGOUT}" title="{L_LOGIN_LOGOUT}" accesskey="x">{L_LOGIN_LOGOUT}</a></li>
+ <!-- IF not S_USER_LOGGED_IN and S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --><li class="small-icon icon-register rightside no-bulletin"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
+ <!-- IF S_DISPLAY_MEMBERLIST --><li class="small-icon icon-members rightside no-bulletin"><a href="{U_MEMBERLIST}" title="{L_MEMBERLIST_EXPLAIN}">{L_MEMBERLIST}</a></li><!-- ENDIF -->
<!-- ENDIF -->
- <!-- EVENT overall_header_navigation_append -->
+ <li class="small-icon icon-faq rightside no-bulletin"><a href="{U_FAQ}" title="{L_FAQ_EXPLAIN}">{L_FAQ}</a></li>
+ <!-- EVENT overall_header_navigation_prepend -->
</ul>
</div>
@@ -180,3 +180,5 @@
</div>
</div>
<!-- ENDIF -->
+
+ <!-- EVENT overall_header_content_before -->
diff --git a/phpBB/styles/prosilver/template/posting_buttons.html b/phpBB/styles/prosilver/template/posting_buttons.html
index 798faa2ff7..e8338c6c86 100644
--- a/phpBB/styles/prosilver/template/posting_buttons.html
+++ b/phpBB/styles/prosilver/template/posting_buttons.html
@@ -28,7 +28,7 @@
y: '{LA_BBCODE_Y_HELP}',
d: '{LA_BBCODE_D_HELP}'
<!-- BEGIN custom_tags -->
- ,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
+ ,cb_{custom_tags.BBCODE_ID}: '{custom_tags.A_BBCODE_HELPLINE}'
<!-- END custom_tags -->
}
@@ -49,13 +49,13 @@
// ]]>
</script>
-<!-- INCLUDEJS editor.js -->
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<!-- IF S_BBCODE_ALLOWED -->
<div id="colour_palette" style="display: none;">
<dl style="clear: left;">
<dt><label>{L_FONT_COLOR}{L_COLON}</label></dt>
- <dd id="color_palette_placeholder"></dd>
+ <dd id="color_palette_placeholder" data-orientation="h" data-height="12" data-width="15" data-bbcode="true"></dd>
</dl>
</div>
diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html
index f3e62db649..5677b92fc3 100644
--- a/phpBB/styles/prosilver/template/posting_editor.html
+++ b/phpBB/styles/prosilver/template/posting_editor.html
@@ -86,6 +86,8 @@
</dl>
<!-- ENDIF -->
+ <!-- EVENT posting_editor_subject_before -->
+
<!-- IF S_POST_ACTION or S_PRIVMSGS or S_EDIT_DRAFT -->
<dl style="clear: left;">
<dt><label for="subject">{L_SUBJECT}{L_COLON}</label></dt>
@@ -97,6 +99,8 @@
<!-- ENDIF -->
<!-- ENDIF -->
+ <!-- EVENT posting_editor_subject_after -->
+
<!-- INCLUDE posting_buttons.html -->
<div id="smiley-box">
@@ -129,9 +133,13 @@
<!-- ENDIF -->
</div>
+ <!-- EVENT posting_editor_message_before -->
+
<div id="message-box">
<textarea <!-- IF S_UCP_ACTION and not S_PRIVMSGS and not S_EDIT_DRAFT -->name="signature" id="signature" style="height: 9em;"<!-- ELSE -->name="message" id="message"<!-- ENDIF --> rows="15" cols="76" tabindex="4" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" class="inputbox">{MESSAGE}{DRAFT_MESSAGE}{SIGNATURE}</textarea>
</div>
+
+ <!-- EVENT posting_editor_message_after -->
</fieldset>
<!-- IF $EXTRA_POSTING_OPTIONS eq 1 -->
diff --git a/phpBB/styles/prosilver/template/posting_smilies.html b/phpBB/styles/prosilver/template/posting_smilies.html
index 3d56a932b7..cb542c1a8c 100644
--- a/phpBB/styles/prosilver/template/posting_smilies.html
+++ b/phpBB/styles/prosilver/template/posting_smilies.html
@@ -6,7 +6,7 @@
var text_name = opener.text_name;
// ]]>
</script>
-<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<h2>{L_SMILIES}</h2>
<div class="panel">
diff --git a/phpBB/styles/prosilver/template/search_body.html b/phpBB/styles/prosilver/template/search_body.html
index 7229e5a5dc..2f15830eb1 100644
--- a/phpBB/styles/prosilver/template/search_body.html
+++ b/phpBB/styles/prosilver/template/search_body.html
@@ -95,7 +95,7 @@
<div class="forumbg forumbg-table">
<div class="inner">
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th colspan="2" class="name">{L_RECENT_SEARCHES}</th>
diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html
index 52163aeb0a..c5b2b990c8 100644
--- a/phpBB/styles/prosilver/template/search_results.html
+++ b/phpBB/styles/prosilver/template/search_results.html
@@ -160,7 +160,8 @@
<!-- IF U_NEXT_PAGE --><a href="{U_NEXT_PAGE}" class="right-box arrow-{S_CONTENT_FLOW_END}">{L_NEXT}</a><!-- ENDIF -->
<!-- IF S_SELECT_SORT_DAYS or S_SELECT_SORT_KEY -->
<label><!-- IF S_SHOW_TOPICS -->{L_DISPLAY_POSTS}<!-- ELSE -->{L_SORT_BY}</label><label><!-- ENDIF --> {S_SELECT_SORT_DAYS}<!-- IF S_SELECT_SORT_KEY --></label> <label>{S_SELECT_SORT_KEY}</label>
- <label>{S_SELECT_SORT_DIR}<!-- ENDIF --> <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
+ <label>{S_SELECT_SORT_DIR}<!-- ENDIF --></label>
+ <input type="submit" name="sort" value="{L_GO}" class="button2" />
<!-- ENDIF -->
</fieldset>
diff --git a/phpBB/styles/prosilver/template/simple_header.html b/phpBB/styles/prosilver/template/simple_header.html
index e922893588..53c86689e0 100644
--- a/phpBB/styles/prosilver/template/simple_header.html
+++ b/phpBB/styles/prosilver/template/simple_header.html
@@ -12,7 +12,7 @@
<!-- IF S_ALLOW_CDN --><link href="//fonts.googleapis.com/css?family=Open+Sans:600&amp;subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese" rel="stylesheet" type="text/css" media="screen, projection" /><!-- ENDIF -->
<link href="{T_STYLESHEET_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
<link href="{T_STYLESHEET_LANG_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
-<link href="{T_THEME_PATH}/responsive.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
+<link href="{T_THEME_PATH}/responsive.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
<link href="{T_THEME_PATH}/bidi.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="screen, projection" />
diff --git a/phpBB/styles/prosilver/template/ucp_attachments.html b/phpBB/styles/prosilver/template/ucp_attachments.html
index feb04278dc..ed39e80c12 100644
--- a/phpBB/styles/prosilver/template/ucp_attachments.html
+++ b/phpBB/styles/prosilver/template/ucp_attachments.html
@@ -31,7 +31,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist">
+ <ul class="topiclist cplist responsive-show-columns">
<!-- BEGIN attachrow -->
<li class="row<!-- IF attachrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
diff --git a/phpBB/styles/prosilver/template/ucp_auth_link_oauth.html b/phpBB/styles/prosilver/template/ucp_auth_link_oauth.html
index a3e27328cd..18316613b0 100644
--- a/phpBB/styles/prosilver/template/ucp_auth_link_oauth.html
+++ b/phpBB/styles/prosilver/template/ucp_auth_link_oauth.html
@@ -20,7 +20,7 @@
<dt>&nbsp;</dt>
<dd><input type="submit" name="submit" tabindex="6" value="{L_UCP_AUTH_LINK_LINK}" class="button1" /></dd>
</dl>
- <!-- ENDIF-->
+ <!-- ENDIF -->
</fieldset>
{oauth.HIDDEN_FIELDS}
{S_HIDDEN_FIELDS}
diff --git a/phpBB/styles/prosilver/template/ucp_groups_manage.html b/phpBB/styles/prosilver/template/ucp_groups_manage.html
index a785d18082..eb431e9f3f 100644
--- a/phpBB/styles/prosilver/template/ucp_groups_manage.html
+++ b/phpBB/styles/prosilver/template/ucp_groups_manage.html
@@ -54,7 +54,12 @@
<fieldset>
<dl>
<dt><label for="group_colour">{L_GROUP_COLOR}{L_COLON}</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></dt>
- <dd><input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" class="inputbox narrow" /> <span style="background-color: {GROUP_COLOUR};">&nbsp;&nbsp;&nbsp;</span> [ <a href="{U_SWATCH}" onclick="popup(this.href, 636, 150, '_swatch'); return false;">{L_COLOUR_SWATCH}</a> ]</dd>
+ <dd>
+ <input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" class="inputbox narrow" />
+ <span style="background-color: {GROUP_COLOUR};">&nbsp;&nbsp;&nbsp;</span>
+ [ <a href="#" id="color_palette_toggle">{L_COLOUR_SWATCH}</a> ]
+ <div id="color_palette_placeholder" class="hidden" data-orientation="h" data-height="12" data-width="15" data-target="#group_colour"></div>
+ </dd>
</dl>
<dl>
<dt><label for="group_rank">{L_GROUP_RANK}{L_COLON}</label></dt>
@@ -77,7 +82,7 @@
<!-- ELSEIF S_LIST -->
<!-- IF .leader -->
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_GROUP_LEAD}</th>
@@ -103,7 +108,7 @@
<!-- BEGIN member -->
<!-- IF member.S_PENDING -->
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_GROUP_PENDING}</th>
@@ -119,7 +124,7 @@
</tbody>
</table>
<!-- ENDIF -->
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_GROUP_APPROVED}</th>
@@ -140,7 +145,7 @@
</tr>
<!-- ENDIF -->
<!-- BEGINELSE -->
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<tr>
<th class="name">{L_MEMBERS}</th>
@@ -214,7 +219,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist two-long-columns">
+ <ul class="topiclist cplist two-long-columns responsive-show-all">
<!-- BEGIN leader -->
<li class="row<!-- IF attachrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
diff --git a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html
index 017fadad77..477b06249e 100644
--- a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html
+++ b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html
@@ -54,7 +54,15 @@
</ul>
</div>
<!-- ENDIF -->
- <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ <div class="responsive-hide">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ </div>
+ <div class="responsive-show" style="display: none;">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} &laquo;
+ <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
+ </div>
</div>
</dt>
<dd class="lastpost"><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
diff --git a/phpBB/styles/prosilver/template/ucp_main_drafts.html b/phpBB/styles/prosilver/template/ucp_main_drafts.html
index 723186e20c..52ad5b503b 100644
--- a/phpBB/styles/prosilver/template/ucp_main_drafts.html
+++ b/phpBB/styles/prosilver/template/ucp_main_drafts.html
@@ -45,6 +45,10 @@
<!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
<!-- ELSEIF S_PRIVMSGS -->
<!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF -->
+ <div class="responsive-show" style="display: none;">
+ {L_SAVE_DATE}{L_COLON} <strong>{draftrow.DATE}</strong><br />
+ <!-- IF draftrow.U_INSERT --><a href="{draftrow.U_INSERT}">{L_LOAD_DRAFT}</a> &bull; <!-- ENDIF --><a href="{draftrow.U_VIEW_EDIT}">{L_VIEW_EDIT}</a>
+ </div>
</div>
</dt>
<dd class="info"><span>{draftrow.DATE}<br /><!-- IF draftrow.U_INSERT --><a href="{draftrow.U_INSERT}">{L_LOAD_DRAFT}</a> &bull; <!-- ENDIF --><a href="{draftrow.U_VIEW_EDIT}">{L_VIEW_EDIT}</a></span></dd>
diff --git a/phpBB/styles/prosilver/template/ucp_main_front.html b/phpBB/styles/prosilver/template/ucp_main_front.html
index 1e26e43772..fa3291cd6c 100644
--- a/phpBB/styles/prosilver/template/ucp_main_front.html
+++ b/phpBB/styles/prosilver/template/ucp_main_front.html
@@ -31,7 +31,14 @@
</ul>
</div>
<!-- ENDIF -->
- <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ <div class="responsive-hide">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ </div>
+ <div class="responsive-show" style="display: none;">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} &laquo; <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
+ </div>
</div>
</dt>
<dd class="lastpost"><span>{L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
index 90fa76cefc..7344a4af1a 100755
--- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html
+++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html
@@ -23,7 +23,17 @@
<!-- BEGIN forumrow -->
<li class="row<!-- IF forumrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
<dl class="icon {forumrow.FORUM_IMG_STYLE}">
- <dt><div class="list-inner"><a href="{forumrow.U_VIEWFORUM}" class="forumtitle">{forumrow.FORUM_NAME}</a><br />{forumrow.FORUM_DESC}</div></dt>
+ <dt>
+ <div class="list-inner">
+ <a href="{forumrow.U_VIEWFORUM}" class="forumtitle">{forumrow.FORUM_NAME}</a><br />
+ {forumrow.FORUM_DESC}
+ <!-- IF forumrow.LAST_POST_TIME -->
+ <div class="responsive-show" style="display: none;">
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {forumrow.LAST_POST_AUTHOR_FULL} &laquo; <a href="{topicrow.U_LAST_POST}">{forumrow.LAST_POST_TIME}</a>
+ </div>
+ <!-- ENDIF -->
+ </div>
+ </dt>
<dd class="lastpost"><!-- IF forumrow.LAST_POST_TIME --><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {forumrow.LAST_POST_AUTHOR_FULL}
<a href="{topicrow.U_LAST_POST}">{LAST_POST_IMG}</a> <br />{forumrow.LAST_POST_TIME}</span>
<!-- ELSE -->{L_NO_POSTS}<br />&nbsp;<!-- ENDIF -->
@@ -79,7 +89,14 @@
</ul>
</div>
<!-- ENDIF -->
- <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ <div class="responsive-hide">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ </div>
+ <div class="responsive-show" style="display: none;">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} &laquo; <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
+ </div>
</div>
</dt>
<dd class="lastpost"><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index 0392b87715..6a711cfd30 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -9,7 +9,7 @@
<p>{TITLE_EXPLAIN}</p>
<!-- IF MODE == 'notification_options' -->
- <table class="table1" cellspacing="1">
+ <table class="table1">
<thead>
<th>{L_NOTIFICATION_TYPE}</th>
<!-- BEGIN notification_methods -->
diff --git a/phpBB/styles/prosilver/template/ucp_pm_popup.html b/phpBB/styles/prosilver/template/ucp_pm_popup.html
deleted file mode 100644
index 4cc39ee450..0000000000
--- a/phpBB/styles/prosilver/template/ucp_pm_popup.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- INCLUDE simple_header.html -->
-
-<script type="text/javascript">
-// <![CDATA[
-/**
-* Jump to inbox
-*/
-function jump_to_inbox(url)
-{
- opener.document.location.href = url.replace(/&amp;/g, '&');
- window.close();
-}
-// ]]>
-</script>
-
-<div class="panel">
- <div class="inner">
- <div class="content">
- <p><!-- IF S_NOT_LOGGED_IN -->{L_LOGIN_CHECK_PM}<!-- ELSE -->{MESSAGE}<br /><br />{CLICK_TO_VIEW}<!-- ENDIF --></p>
- <p class="small"><a href="#" onclick="window.close(); return false;">{L_CLOSE_WINDOW}</a></p>
- </div>
- </div>
-</div>
-
-<!-- INCLUDE simple_footer.html -->
diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html
index 9cbff64a6a..efe6663db0 100644
--- a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html
+++ b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html
@@ -53,7 +53,7 @@
</dl>
</li>
</ul>
- <ul class="topiclist cplist pmlist <!-- IF S_SHOW_RECIPIENTS -->missing-column<!-- ELSE -->two-columns<!-- ENDIF -->">
+ <ul class="topiclist cplist pmlist responsive-show-all <!-- IF S_SHOW_RECIPIENTS -->missing-column<!-- ELSE -->two-columns<!-- ENDIF -->">
<!-- BEGIN messagerow -->
<li class="row<!-- IF messagerow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF --><!-- IF messagerow.PM_CLASS --> {messagerow.PM_CLASS}<!-- ENDIF -->">
@@ -126,7 +126,8 @@
<!-- IF U_NEXT_PAGE --><a href="{U_NEXT_PAGE}" class="right-box arrow-{S_CONTENT_FLOW_END}">{L_NEXT}</a><!-- ENDIF -->
<label>{L_DISPLAY}{L_COLON} {S_SELECT_SORT_DAYS}</label>
<label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label>
- <label>{S_SELECT_SORT_DIR} <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
+ <label>{S_SELECT_SORT_DIR}</label>
+ <input type="submit" name="sort" value="{L_GO}" class="button2" />
<input type="hidden" name="cur_folder_id" value="{CUR_FOLDER_ID}" />
</fieldset>
<!-- ENDIF -->
diff --git a/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html b/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html
index d8a78b8c6d..bf97434bac 100644
--- a/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html
+++ b/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html
@@ -15,7 +15,7 @@
<!-- ENDIF -->
<p>{L_PROFILE_AUTOLOGIN_KEYS}</p><br />
- <table cellspacing="1" class="table1">
+ <table class="table1">
<thead>
<tr>
<th>{L_MARK}</th>
diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html
index 04dc00aae2..f0994f0716 100644
--- a/phpBB/styles/prosilver/template/viewforum_body.html
+++ b/phpBB/styles/prosilver/template/viewforum_body.html
@@ -1,5 +1,5 @@
<!-- INCLUDE overall_header.html -->
-<!-- IF U_MCP --><p>[&nbsp;<a href="{U_MCP}">{L_MCP}</a>&nbsp;]</p><!-- ENDIF -->
+<!-- IF U_MCP or U_ACP --><p class="responsive-center">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}" title="{L_ACP}" data-responsive-text="{L_ACP_SHORT}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}" title="{L_MCP}" data-responsive-text="{L_MCP_SHORT}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p><!-- ENDIF -->
<h2><a href="{U_VIEW_FORUM}">{FORUM_NAME}</a></h2>
<!-- IF FORUM_DESC or MODERATORS or U_MCP -->
@@ -163,8 +163,19 @@
</ul>
</div>
<!-- ENDIF -->
- <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
- <!-- IF topicrow.S_POST_GLOBAL and FORUM_ID != topicrow.FORUM_ID --> &raquo; {L_IN} <a href="{topicrow.U_VIEW_FORUM}">{topicrow.FORUM_NAME}</a><!-- ENDIF -->
+ <div class="responsive-hide">
+ <!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
+ {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} &raquo; {topicrow.FIRST_POST_TIME}
+ <!-- IF topicrow.S_POST_GLOBAL and FORUM_ID != topicrow.FORUM_ID --> &raquo; {L_IN} <a href="{topicrow.U_VIEW_FORUM}">{topicrow.FORUM_NAME}</a><!-- ENDIF -->
+ </div>
+ <!-- IF not S_IS_BOT -->
+ <div class="responsive-show" style="display: none;">
+ {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} &laquo; <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
+ <!-- IF topicrow.S_POST_GLOBAL and FORUM_ID != topicrow.FORUM_ID --><br />{L_POSTED} {L_IN} <a href="{topicrow.U_VIEW_FORUM}">{topicrow.FORUM_NAME}</a><!-- ENDIF -->
+ <!-- IF topicrow.REPLIES --><br />{L_REPLIES}{L_COLON} <strong>{topicrow.REPLIES}</strong><!-- ENDIF -->
+ </div>
+ <!-- ENDIF -->
+
<!-- EVENT topiclist_row_append -->
</div>
</dt>
@@ -200,7 +211,8 @@
<!-- IF not S_IS_BOT -->
<label>{L_DISPLAY_TOPICS}{L_COLON} {S_SELECT_SORT_DAYS}</label>
<label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label>
- <label>{S_SELECT_SORT_DIR} <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
+ <label>{S_SELECT_SORT_DIR}</label>
+ <input type="submit" name="sort" value="{L_GO}" class="button2" />
<!-- ENDIF -->
</fieldset>
</form>
diff --git a/phpBB/styles/prosilver/template/viewonline_body.html b/phpBB/styles/prosilver/template/viewonline_body.html
index 551e52a317..13f459b57f 100644
--- a/phpBB/styles/prosilver/template/viewonline_body.html
+++ b/phpBB/styles/prosilver/template/viewonline_body.html
@@ -16,7 +16,7 @@
<div class="forumbg forumbg-table">
<div class="inner">
- <table class="table1" cellspacing="1">
+ <table class="table1">
<!-- IF .user_row -->
<thead>
diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html
index 82c380354b..46881d3b03 100644
--- a/phpBB/styles/prosilver/template/viewtopic_body.html
+++ b/phpBB/styles/prosilver/template/viewtopic_body.html
@@ -1,5 +1,5 @@
<!-- INCLUDE overall_header.html -->
-<!-- IF U_MCP --><p>[&nbsp;<a href="{U_MCP}">{L_MCP}</a>&nbsp;]</p><!-- ENDIF -->
+<!-- IF U_MCP or U_ACP --><p class="responsive-center">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}" title="{L_ACP}" data-responsive-text="{L_ACP_SHORT}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}" title="{L_MCP}" data-responsive-text="{L_MCP_SHORT}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p><!-- ENDIF -->
<h2><!-- EVENT viewtopic_topic_title_prepend --><a href="{U_VIEW_TOPIC}">{TOPIC_TITLE}</a></h2>
<!-- NOTE: remove the style="display: none" when you want to have the forum description on the topic body -->
<!-- IF FORUM_DESC --><div style="display: none !important;">{FORUM_DESC}<br /></div><!-- ENDIF -->
@@ -60,7 +60,7 @@
<div class="clear"></div>
<!-- IF S_HAS_POLL -->
- <form method="post" action="{S_POLL_ACTION}" data-ajax="vote_poll" data-overlay="false" class="topic_poll">
+ <form method="post" action="{S_POLL_ACTION}" data-ajax="vote_poll" class="topic_poll">
<div class="panel">
<div class="inner">
@@ -193,7 +193,7 @@
<!-- ENDIF -->
<!-- ENDIF -->
- <p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF -->{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; {postrow.POST_DATE} </p>
+ <p class="author"><!-- IF S_IS_BOT -->{postrow.MINI_POST_IMG}<!-- ELSE --><a href="{postrow.U_MINI_POST}">{postrow.MINI_POST_IMG}</a><!-- ENDIF --><span class="responsive-hide">{L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong> &raquo; </span>{postrow.POST_DATE} </p>
<!-- IF postrow.S_POST_UNAPPROVED -->
<form method="post" class="mcp_approve" action="{postrow.U_APPROVE_ACTION}">
@@ -283,7 +283,8 @@
<!-- IF U_NEXT_PAGE --><a href="{U_NEXT_PAGE}" class="right-box arrow-{S_CONTENT_FLOW_END}">{L_NEXT}</a><!-- ENDIF -->
<!-- IF not S_IS_BOT -->
<label>{L_DISPLAY_POSTS}{L_COLON} {S_SELECT_SORT_DAYS}</label>
- <label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label> <label>{S_SELECT_SORT_DIR} <input type="submit" name="sort" value="{L_GO}" class="button2" /></label>
+ <label>{L_SORT_BY} {S_SELECT_SORT_KEY}</label> <label>{S_SELECT_SORT_DIR}</label>
+ <input type="submit" name="sort" value="{L_GO}" class="button2" />
<!-- ENDIF -->
</fieldset>
diff --git a/phpBB/styles/prosilver/theme/bidi.css b/phpBB/styles/prosilver/theme/bidi.css
index 542440e847..b04e6576d3 100644
--- a/phpBB/styles/prosilver/theme/bidi.css
+++ b/phpBB/styles/prosilver/theme/bidi.css
@@ -231,6 +231,11 @@
unicode-bidi: embed;
}
+ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {
+ padding-left: 0;
+ padding-right: 19px;
+}
+
.rtl a.top {
float: left;
}
@@ -527,10 +532,13 @@
/* Icon images
---------------------------------------- */
-.rtl .sitehome, .rtl .icon-faq, .rtl .icon-members, .rtl .icon-home, .rtl .icon-ucp, .rtl .icon-register, .rtl .icon-logout,
-.rtl .icon-bookmark, .rtl .icon-bump, .rtl .icon-subscribe, .rtl .icon-unsubscribe, .rtl .icon-pages, .rtl .icon-search, .rtl .icon-notification, .rtl .icon-pm {
+.rtl .small-icon {
background-position: 100% 50%;
- padding: 1px 17px 0 0;
+ padding: 1px 19px 0 0;
+}
+
+.rtl ul.linklist li.small-icon {
+ padding-right: 0;
}
/* Poster profile icons
diff --git a/phpBB/styles/prosilver/theme/buttons.css b/phpBB/styles/prosilver/theme/buttons.css
index e2c0dc9145..cdd325fb13 100644
--- a/phpBB/styles/prosilver/theme/buttons.css
+++ b/phpBB/styles/prosilver/theme/buttons.css
@@ -90,16 +90,18 @@ a.sendemail {
/* Icon images
---------------------------------------- */
-.sitehome, .icon-faq, .icon-members, .icon-home, .icon-ucp, .icon-register, .icon-logout,
-.icon-bookmark, .icon-bump, .icon-subscribe, .icon-unsubscribe, .icon-pages, .icon-search, .icon-notification, .icon-pm {
+.small-icon {
background-position: 0 50%;
background-repeat: no-repeat;
background-image: none;
padding: 1px 0 0 17px;
}
-ul.linklist.bulletin li.icon-home:before, ul.linklist.bulletin li.icon-ucp:before, ul.linklist.bulletin li.icon-notification:before, ul.linklist.bulletin li.icon-pm:before,
-ul.linklist.bulletin li.icon-bookmark:before, ul.linklist.bulletin li.icon-bump:before, ul.linklist.bulletin li.icon-subscribe:before, ul.linklist.bulletin li.icon-unsubscribe:before {
+ul.linklist li.small-icon {
+ padding-left: 0;
+}
+
+ul.linklist.bulletin li.small-icon:before {
display: none;
}
@@ -170,13 +172,13 @@ ul.profile-icons.responsive a.responsive-menu-link:before {
border-top: 0.375em double transparent;
}
-.postbody ul.profile-icons.responsive .responsive-popup {
+.postbody ul.profile-icons.responsive .popup-pointer {
left: auto;
right: 7px;
- top: 19px;
+ top: 20px;
}
-.postbody ul.profile-icons.responsive .responsive-popup li, .postbody ul.profile-icons.responsive .responsive-popup li a {
+.postbody ul.profile-icons .dropdown li, .postbody ul.profile-icons .dropdown li a {
display: block;
background: transparent none;
width: auto;
@@ -187,7 +189,7 @@ ul.profile-icons.responsive a.responsive-menu-link:before {
list-style-type: none;
}
-.postbody ul.profile-icons.responsive .responsive-popup li span {
+.postbody ul.profile-icons .dropdown li span {
display: block;
text-align: right;
font-size: 1.2em;
diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css
index a0db75d07f..55b01f1269 100644
--- a/phpBB/styles/prosilver/theme/colours.css
+++ b/phpBB/styles/prosilver/theme/colours.css
@@ -684,7 +684,6 @@ a.sendemail {
/* Icon images
---------------------------------------- */
-.sitehome { background-image: url("./images/icon_home.gif"); }
.icon-faq { background-image: url("./images/icon_faq.gif"); }
.icon-members { background-image: url("./images/icon_members.gif"); }
.icon-home { background-image: url("./images/icon_home.gif"); }
@@ -844,7 +843,7 @@ ul.cplist {
background-color: #F9F9F9;
}
-#minitabs li.activetab a, #minitabs li.activetab a:hover {
+#minitabs li.activetab a span, #minitabs li.activetab a:hover span {
color: #333333;
}
@@ -889,6 +888,13 @@ ul.cplist {
color: #D31141;
}
+@media only screen and (max-width: 700px), only screen and (max-device-width: 700px)
+{
+ #navigation a, .rtl #navigation a {
+ background-image: none;
+ }
+}
+
/* Preferences pane layout
----------------------------------------*/
#cp-main h2 {
@@ -1097,9 +1103,9 @@ input.disabled {
background-color: #000000;
}
-#notification_list {
- background-color: #FFFFFF;
- border-color: #B9B9B9;
+#loading_indicator {
+ background-color: #000000;
+ background-image: url("./images/loading.gif");
}
#notification_list ul li {
@@ -1111,12 +1117,12 @@ input.disabled {
color: #000000;
}
-#notification_list > .header, .notification_list > .footer {
+#notification_list .header, .notification_list .footer {
border-color: #B9B9B9;
color: #000000;
}
-#notification_list > .header {
+#notification_list .header {
background: #F1F8FF;
background: -moz-linear-gradient(top, #F1F8FF 0%, #CADCEB 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F1F8FF), color-stop(100%, #CADCEB));
@@ -1126,33 +1132,36 @@ input.disabled {
background: linear-gradient(to bottom, #F1F8FF 0%, #CADCEB 100%);
}
-.notification_list .pointer {
- border-bottom-color: #B9B9B9;
+.dropdown .pointer {
+ border-color: #B9B9B9 transparent;
+}
+
+.dropdown .pointer-inner {
+ border-color: #FFF transparent;
}
-.notification_list .pointer_inner {
- border-bottom-color: #F1F8FF;
+#notification_list .pointer-inner, #minitabs .pointer-inner {
+ border-color: #F1F8FF transparent;
}
ul.linklist li.responsive-menu a.responsive-menu-link:before {
border-color: #105289;
}
-ul.linklist li.responsive-menu a.responsive-menu-link:hover:before {
+ul.linklist li.responsive-menu a.responsive-menu-link:hover:before, ul.linklist li.responsive-menu.visible a.responsive-menu-link:before {
border-color: #D31141;
}
-ul.responsive-popup {
+.dropdown .dropdown-contents {
background: #fff;
border-color: #b9b9b9;
box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.2);
}
-.navbar ul.responsive-popup {
- background-color: #CADCEB;
+
+.dropdown-up .dropdown-contents {
+ box-shadow: 1px 0 5px rgba(0, 0, 0, 0.2);
}
-#tabs ul.responsive-tabs, #minitabs ul.responsive-tabs {
- background: #ddedfb;
- border-color: #c0c9d5;
- box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.4);
+#minitabs .dropdown-contents {
+ background-color: #F1F8FF;
}
diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css
index 2c61ecfdea..dced25f541 100644
--- a/phpBB/styles/prosilver/theme/common.css
+++ b/phpBB/styles/prosilver/theme/common.css
@@ -361,16 +361,18 @@ ul.rightside {
text-align: right;
}
-ul.linklist.responsive {
+ul.linklist li.responsive-menu {
position: relative;
+ margin: 0 5px;
}
ul.linklist li.responsive-menu a.responsive-menu-link {
display: inline-block;
+ margin: 0 5px;
font-size: 16px;
position: relative;
width: 16px;
- line-height: 16px;
+ line-height: 16.5px;
text-decoration: none;
}
@@ -393,6 +395,24 @@ ul.linklist li.responsive-menu a.responsive-menu-link:before {
max-width: none;
}
+li.responsive-menu.dropdown-right .dropdown {
+ left: -9px;
+}
+
+li.responsive-menu.dropdown-left .dropdown {
+ right: -6px;
+}
+
+li.responsive-menu .dropdown .dropdown-contents {
+ padding: 0 5px;
+}
+
+ul.linklist .dropdown li {
+ clear: both;
+}
+
+
+
/* Bulletin icons for list items
----------------------------------------*/
ul.linklist.bulletin li:before {
@@ -415,57 +435,125 @@ ul.linklist.bulletin li.no-bulletin:before {
display: none !important;
}
-/* Responsive popup
+/* Dropdown menu
----------------------------------------*/
-ul.responsive-popup {
+.dropdown {
position: absolute;
left: 0;
- top: 24px;
+ top: 22px;
z-index: 2;
border: 1px solid transparent;
border-radius: 5px;
- padding: 5px;
+ padding: 9px 0 0;
+}
+
+.dropdown-up .dropdown {
+ top: auto;
+ bottom: 18px;
+ padding: 0 0 9px;
}
-ul.responsive-popup.responsive-rightside {
+.dropdown-left .dropdown {
left: auto;
right: 0;
}
-ul.responsive-popup li {
+
+.dropdown .pointer, .dropdown .pointer-inner {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-top-width: 0;
+ border-bottom: 10px solid transparent;
+ border-left: 10px dashed transparent;
+ border-right: 10px dashed transparent;
+ -webkit-transform: rotate(360deg); /* better anti-aliasing in webkit */
+ display: block;
+}
+
+.dropdown-up .pointer, .dropdown-up .pointer-inner {
+ border-bottom-width: 0;
+ border-top: 10px solid transparent;
+}
+
+.dropdown .pointer {
+ right: auto;
+ left: 10px;
+ top: 0;
+ z-index: 3;
+}
+
+.dropdown-up .pointer {
+ bottom: 0;
+ top: auto;
+}
+
+.dropdown-left .dropdown .pointer {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown .pointer-inner {
+ top: auto;
+ bottom: -11px;
+ left: -10px;
+}
+
+.dropdown-up .pointer-inner {
+ bottom: auto;
+ top: -11px;
+}
+
+.dropdown .dropdown-contents {
+ z-index: 2;
+ overflow: hidden;
+ border: 1px solid transparent;
+ border-radius: 5px;
+ padding: 5px;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.dropdown li {
float: none;
margin: 0;
white-space: nowrap;
text-align: left;
}
-.wrap ul.responsive-popup li {
+.wrap .dropdown li, .dropdown.wrap li, #notification_list li {
white-space: normal;
}
-ul.responsive-popup li:before, ul.responsive-popup li:after {
+.dropdown li:before, .dropdown li:after {
display: none !important;
}
/* Responsive breadcrumbs
----------------------------------------*/
.breadcrumbs .crumb {
- display: inline-block;
- vertical-align: bottom;
+ word-wrap: normal;
}
-.breadcrumbs.wrapped .crumb {
- letter-spacing: -.5px;
-}
-
-.breadcrumbs .crumb.wrapped {
+.breadcrumbs .crumb a {
+ display: inline-block;
white-space: nowrap;
- overflow: hidden;
text-overflow: ellipsis;
+ vertical-align: bottom;
+ overflow: hidden;
}
-.breadcrumbs .crumb.wrapped-wide { max-width: 120px; }
-.breadcrumbs .crumb.wrapped-medium { max-width: 80px; }
-.breadcrumbs .crumb.wrapped-small { max-width: 30px; }
+
+.breadcrumbs.wrapped .crumb a { letter-spacing: -.3px; }
+.breadcrumbs.wrapped .crumb.wrapped-medium a { letter-spacing: -.4px; }
+.breadcrumbs.wrapped .crumb.wrapped-tiny a { letter-spacing: -.5px; }
+
+.breadcrumbs .crumb.wrapped-max a { max-width: 120px; }
+.breadcrumbs .crumb.wrapped-wide a { max-width: 100px; }
+.breadcrumbs .crumb.wrapped-medium a { max-width: 80px; }
+.breadcrumbs .crumb.wrapped-small a { max-width: 60px; }
+.breadcrumbs .crumb.wrapped-tiny a { max-width: 40px; }
/* Table styles
----------------------------------------*/
@@ -543,6 +631,11 @@ table.info tbody th {
margin: 0 -1px;
}
+#color_palette_placeholder table {
+ border-collapse: separate;
+ border-spacing: 1px;
+}
+
/* Misc layout styles
---------------------------------------- */
/* column[1-2] styles are containers for two column layouts
@@ -643,7 +736,7 @@ li.pagination ul {
line-height: normal;
}
-.pagination li a, .pagnation li span, li .pagination li a, li .pagnation li span, .pagination li.active span, .pagination li.ellipsis span {
+.pagination li a, .pagnation li span, li .pagination li a, li .pagination li span, .pagination li.active span, .pagination li.ellipsis span {
font-weight: normal;
text-decoration: none;
padding: 0 2px;
@@ -670,13 +763,22 @@ li.pagination ul {
position: fixed;
display: none;
top: 150px;
- left: 25%;
- width: 50%;
+ left: 0;
+ right: 0;
+ max-width: 640px;
+ margin: 0 auto;
z-index: 50;
padding: 25px;
padding: 0 25px 20px 25px;
}
+@media only screen and (max-height: 500px), only screen and (max-device-width: 500px)
+{
+ .phpbb_alert {
+ top: 25px;
+ }
+}
+
.phpbb_alert .alert_close {
display: block;
float: right;
@@ -713,6 +815,8 @@ li.pagination ul {
#darkenwrapper {
display: none;
+ position: relative;
+ z-index: 44;
}
#darken {
@@ -722,6 +826,22 @@ li.pagination ul {
width: 100%;
height: 100%;
opacity: 0.5;
+ z-index: 45;
+}
+
+#loading_indicator {
+ background: center center no-repeat;
+ border-radius: 5px;
+ display: none;
+ opacity: 0.8;
+ margin-top: -50px;
+ margin-left: -50px;
+ height: 50px;
+ width: 50px;
+ position: fixed;
+ left: 50%;
+ top: 50%;
+ z-index: 51;
}
/* Miscellaneous styles
@@ -823,10 +943,7 @@ form > p.post-notice strong {
left: 0;
width: 330px;
z-index: 1;
- border: 1px solid;
- box-shadow: 3px 3px 5px darkgray;
- border-radius: 5px;
- top: 32px;
+ top: 22px;
}
#notification_list ul {
@@ -850,7 +967,11 @@ form > p.post-notice strong {
display: none;
}
-#notification_list > .header {
+#notification_list .dropdown-contents {
+ padding: 0;
+}
+
+#notification_list .header {
padding: 0 10px;
font-family: Arial, "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 11px;
@@ -862,18 +983,18 @@ form > p.post-notice strong {
border-radius: 5px 5px 0 0;
}
-#notification_list > .header > .header_settings {
+#notification_list .header .header_settings {
float: right;
font-weight: normal;
text-transform: none;
}
-#notification_list > .footer {
+#notification_list .footer {
text-align: center;
font-size: 1.2em;
}
-#notification_list ul li a, .notification_list dt > a, #notification_list > .footer > a {
+#notification_list ul li a, .notification_list dt > a, #notification_list .footer > a {
display: block;
text-decoration: none;
}
@@ -890,30 +1011,6 @@ form > p.post-notice strong {
margin: 0;
}
-.notification_list .pointer, .notification_list .pointer_inner {
- position: absolute;
- width: 0;
- height: 0;
- border-top-width: 0;
- border-bottom: 10px solid;
- border-left: 10px dashed transparent;
- border-right: 10px dashed transparent;
- -webkit-transform: rotate(360deg); /* better anti-aliasing in webkit */
- display: block;
-}
-
-.notification_list .pointer {
- right: auto;
- left: 10px;
- top: -11px;
-}
-
-.notification_list .pointer_inner {
- top: auto;
- bottom: -11px;
- left: -10px;
-}
-
.notification_list div.notifications {
padding: 5px;
}
diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css
index 7d91d331d6..389f93fa4e 100644
--- a/phpBB/styles/prosilver/theme/content.css
+++ b/phpBB/styles/prosilver/theme/content.css
@@ -516,6 +516,7 @@ blockquote .codebox {
padding: 6px;
border: 1px dashed transparent;
clear: left;
+ -webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
@@ -711,6 +712,11 @@ fieldset.polls dd div {
margin-bottom: 3px;
}
+.postprofile .avatar img {
+ max-width: 90%;
+ height: auto !important;
+}
+
.online {
background-image: none;
background-position: 100% 0;
diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css
index e0863f7458..2003fef954 100644
--- a/phpBB/styles/prosilver/theme/cp.css
+++ b/phpBB/styles/prosilver/theme/cp.css
@@ -105,6 +105,7 @@ ul.cplist {
.tabs-container #minitabs {
float: right;
margin-top: 19px;
+ max-width: 50%;
}
.tabs-container:after {
@@ -218,6 +219,10 @@ ul.cplist {
/* Responsive tabs
----------------------------------------*/
+.responsive-tab {
+ position: relative;
+}
+
.responsive-tab .responsive-tab-link span {
display: inline-block;
font-size: 16px;
@@ -251,29 +256,39 @@ ul.cplist {
position: relative;
}
-#tabs ul.responsive-tabs, #minitabs ul.responsive-tabs {
- position: absolute;
- right: 0;
- top: 26px;
- z-index: 2;
- border: 1px solid transparent;
- border-radius: 5px;
+#tabs .dropdown, #minitabs .dropdown {
+ top: 29px;
+ margin-right: -1px;
}
-#minitabs ul.responsive-tabs {
- top: 23px;
+#minitabs .dropdown {
+ top: 18px;
}
-.tabs-container #minitabs ul.responsive-tabs {
- right: auto;
- left: 0;
+#tabs .dropdown-up .dropdown, #minitabs .dropdown-up .dropdown {
+ bottom: -5px;
+ top: auto;
+}
+
+#minitabs .dropdown-up .dropdown {
+ bottom: 18px;
+}
+
+#tabs .dropdown-right .dropdown, #minitabs .dropdown-right .dropdown {
+ margin-left: -41px;
}
-#tabs .responsive-tabs li, #minitabs .responsive-tabs li {
+#tabs .dropdown li, #minitabs .dropdown li {
display: block !important;
+ background: transparent none;
+ padding: 0;
}
-#tabs .responsive-tabs a, #tabs .responsive-tabs a span, #minitabs .responsive-tabs a, #minitabs .responsive-tabs a span {
+.tabs-container #minitabs .dropdown a span {
+ display: block;
+}
+
+#tabs .dropdown a, #tabs .dropdown a span, #minitabs .dropdown a, #minitabs .dropdown a span {
background: transparent;
float: none;
margin: 0;
@@ -281,14 +296,16 @@ ul.cplist {
text-align: right;
}
-.tabs-container #minitabs .responsive-tabs a span {
+.tabs-container #minitabs .dropdown a span {
text-align: left;
}
-#tabs .responsive-tabs a span, #minitabs .responsive-tabs a span {
- padding: 5px;
+#tabs .dropdown a span, #minitabs .dropdown a span {
+ padding: 5px 8px;
+ color: inherit !important;
}
+
/* UCP navigation menu
----------------------------------------*/
/* Container for sub-navigation list */
@@ -417,3 +434,41 @@ ol.def-rules li {
border: 1px solid transparent;
text-align: center;
}
+
+/* Responsive *CP navigation
+----------------------------------------*/
+@media only screen and (max-width: 900px), only screen and (max-device-width: 900px)
+{
+ .nojs #tabs a span, .nojs #minitabs a span {
+ max-width: 40px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ letter-spacing: -.5px;
+ }
+
+ #cp-menu, #navigation, #cp-main {
+ float: none;
+ width: auto;
+ margin: 0;
+ }
+
+ #navigation {
+ padding: 0;
+ margin: 0 auto;
+ max-width: 320px;
+ }
+
+ #navigation a {
+ background-image: none;
+ }
+
+ #navigation li:first-child a {
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+ #navigation li:last-child a {
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+}
diff --git a/phpBB/styles/prosilver/theme/forms.css b/phpBB/styles/prosilver/theme/forms.css
index adb8c5e521..755ce4a19d 100644
--- a/phpBB/styles/prosilver/theme/forms.css
+++ b/phpBB/styles/prosilver/theme/forms.css
@@ -11,7 +11,6 @@ fieldset {
input {
font-weight: normal;
- cursor: pointer;
vertical-align: middle;
padding: 0 3px;
font-size: 1em;
@@ -206,7 +205,11 @@ fieldset.forum-selection2 {
fieldset.jumpbox {
text-align: right;
margin-top: 15px;
- height: 2.5em;
+ min-height: 2.5em;
+}
+
+fieldset.jumpbox select {
+ max-width: 50%;
}
fieldset.quickmod {
@@ -232,11 +235,6 @@ fieldset.submit-buttons input {
/* Posting page styles
----------------------------------------*/
-#colour_palette table {
- border-collapse: separate;
- border-spacing: 1px;
-}
-
/* Buttons used in the editor */
#format-buttons {
margin: 15px 0 2px 0;
@@ -275,7 +273,6 @@ fieldset.submit-buttons input {
.inputbox {
border: 1px solid transparent;
padding: 2px;
- cursor: text;
}
.inputbox:hover, .inputbox:focus {
@@ -333,6 +330,10 @@ input.button3 {
font-variant: small-caps;
}
+input[type="button"], input[type="submit"], input[type="reset"], input[type="checkbox"], input[type="radio"] {
+ cursor: pointer;
+}
+
/* Alternative button */
a.button2, input.button2, input.button3 {
border: 1px solid transparent;
diff --git a/phpBB/styles/prosilver/theme/images/icon_post_menu.png b/phpBB/styles/prosilver/theme/images/icon_post_menu.png
index 55723ddda1..2b48289fdb 100644
--- a/phpBB/styles/prosilver/theme/images/icon_post_menu.png
+++ b/phpBB/styles/prosilver/theme/images/icon_post_menu.png
Binary files differ
diff --git a/phpBB/styles/prosilver/theme/images/loading.gif b/phpBB/styles/prosilver/theme/images/loading.gif
new file mode 100644
index 0000000000..e1ed0883e0
--- /dev/null
+++ b/phpBB/styles/prosilver/theme/images/loading.gif
Binary files differ
diff --git a/phpBB/styles/prosilver/theme/links.css b/phpBB/styles/prosilver/theme/links.css
index 5dc8a13313..7e3dc094f0 100644
--- a/phpBB/styles/prosilver/theme/links.css
+++ b/phpBB/styles/prosilver/theme/links.css
@@ -43,6 +43,12 @@ a:active {
text-decoration: none;
}
+/* Navigation bar links */
+ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {
+ display: inline-block;
+ padding-left: 17px;
+}
+
/* Links for forum/topic lists */
a.forumtitle {
font-family: "Trebuchet MS", Helvetica, Arial, Sans-serif;
diff --git a/phpBB/styles/prosilver/theme/responsive.css b/phpBB/styles/prosilver/theme/responsive.css
index a9d7b1abc7..d7af7519b7 100644
--- a/phpBB/styles/prosilver/theme/responsive.css
+++ b/phpBB/styles/prosilver/theme/responsive.css
@@ -17,7 +17,7 @@ body {
}
#wrap {
- min-width: 320px;
+ min-width: 300px;
padding: 0;
}
@@ -133,35 +133,12 @@ ul.topiclist.forums dt, ul.topiclist.topics dt {
}
ul.topiclist.forums dt .list-inner, ul.topiclist.topics dt .list-inner {
margin-right: 250px;
- padding-bottom: 18px;
}
ul.topiclist.forums dd.lastpost, ul.topiclist.topics dd.lastpost {
display: block;
}
-ul.topiclist.forums dd.topics, ul.topiclist.topics dd.posts {
- display: block;
- position: absolute;
- left: 45px;
- right: 0;
- bottom: 0;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- min-height: 0;
- height: auto;
- border-width: 0;
- margin: 0;
- padding: 5px 0;
- width: auto;
- min-width: 0;
- text-align: left;
- font-weight: bold;
- font-size: 1.2em;
- line-height: 1em;
-}
-
ul.topiclist dd.mark {
display: block;
position: absolute;
@@ -196,6 +173,19 @@ ul.topiclist.forums dd.topics dfn, ul.topiclist.topics dd.posts dfn {
}
}
+li.row .responsive-show strong {
+ font-weight: bold;
+ color: inherit;
+}
+
+ul.topiclist li.row dt a.subforum {
+ display: inline-block;
+ vertical-align: bottom;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 100px;
+}
+
/* Notifications list
----------------------------------------*/
@media only screen and (max-width: 350px), only screen and (max-device-width: 350px)
@@ -211,39 +201,10 @@ ul.topiclist.forums dd.topics dfn, ul.topiclist.topics dd.posts dfn {
margin: 5px 0;
}
-/* *CP navigation
-----------------------------------------*/
-.nojs #tabs a span, .nojs #minitabs a span {
- max-width: 40px;
- overflow: hidden;
- text-overflow: ellipsis;
- letter-spacing: -.5px;
-}
-
-#cp-menu, #navigation, #cp-main {
- float: none;
- width: auto;
- margin: 0;
-}
-
-#navigation {
- padding: 0;
- margin: 0 auto;
- max-width: 320px;
-}
-
-#navigation a {
- background-image: none;
-}
-
-#navigation li:first-child a {
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
-}
-
-#navigation li:last-child a {
- border-bottom-left-radius: 5px;
- border-bottom-right-radius: 5px;
+.pagination li a, .pagination li span {
+ min-width: 10px;
+ display: inline-block;
+ text-align: center;
}
/* Responsive tables
@@ -262,6 +223,10 @@ table.responsive.show-header thead, table.responsive.show-header th:first-child
text-align: left !important;
}
+table.responsive.show-header th:first-child span.rank-img {
+ display: none;
+}
+
table.responsive tr {
margin: 2px 0;
}
@@ -355,6 +320,43 @@ dl.pmlist dd:first-of-type {
display: inline-block !important;
}
+fieldset.quick-login label {
+ display: block;
+ margin-bottom: 5px;
+ white-space: normal;
+}
+
+fieldset.quick-login label > span {
+ display: inline-block;
+ min-width: 100px;
+}
+
+fieldset.quick-login input.inputbox {
+ width: 85%;
+ max-width: 300px;
+ margin-left: 20px;
+}
+
+fieldset.quick-login label[for="autologin"] {
+ display: inline-block;
+ text-align: right;
+ min-width: 50%;
+}
+
+@media only screen and (max-width: 500px), only screen and (max-device-width: 500px)
+{
+ select, .inputbox {
+ max-width: 260px;
+ }
+}
+
+@media only screen and (max-width: 320px), only screen and (max-device-width: 320px)
+{
+ select, .inputbox {
+ max-width: 240px;
+ }
+}
+
/* User profile
----------------------------------------*/
.column1, .column2, .left-box.profile-details {
@@ -438,6 +440,14 @@ fieldset.polls dd.resultbar, fieldset.polls dd.poll_option_percent {
max-height: 32px;
}
+@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 1.5dppx)
+{
+ /* Scale online image for HD displays */
+ .online {
+ background-size: 40px;
+ }
+}
+
/* Misc stuff
----------------------------------------*/
h2 {
@@ -468,6 +478,12 @@ fieldset.quickmod {
text-align: center;
}
+fieldset.display-options label {
+ display: block;
+ clear: both;
+ margin-bottom: 5px;
+}
+
dl.mini dd.pm-legend {
float: left;
min-width: 200px;
@@ -482,6 +498,11 @@ fieldset.display-actions {
white-space: normal;
}
+.phpbb_alert {
+ max-width: none;
+ margin: 0 25px;
+}
+
@media only screen and (max-width: 500px), only screen and (max-device-width: 500px)
{
p.responsive-center {
diff --git a/phpBB/styles/subsilver2/style.cfg b/phpBB/styles/subsilver2/style.cfg
index 1d50352885..b588567153 100644
--- a/phpBB/styles/subsilver2/style.cfg
+++ b/phpBB/styles/subsilver2/style.cfg
@@ -18,8 +18,8 @@
# General Information about this style
name = subsilver2
copyright = &copy; 2005 phpBB Group
-style_version = 3.1.0-a1
-phpbb_version = 3.1.0-a1
+style_version = 3.1.0-a2
+phpbb_version = 3.1.0-a2
# Defining a different template bitfield
# template_bitfield = lNg=
diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js
deleted file mode 100644
index 6cf616e180..0000000000
--- a/phpBB/styles/subsilver2/template/editor.js
+++ /dev/null
@@ -1,385 +0,0 @@
-/**
-* bbCode control by subBlue design [ www.subBlue.com ]
-* Includes unixsafe colour palette selector by SHS`
-*/
-
-// Startup variables
-var imageTag = false;
-var theSelection = false;
-var bbcodeEnabled = true;
-
-// Check for Browser & Platform for PC & IE specific bits
-// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
-var clientPC = navigator.userAgent.toLowerCase(); // Get client info
-var clientVer = parseInt(navigator.appVersion, 10); // Get browser version
-
-var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
-var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));
-var baseHeight;
-
-/**
-* Shows the help messages in the helpline window
-*/
-function helpline(help) {
- document.forms[form_name].helpbox.value = help_line[help];
-}
-
-/**
-* Fix a bug involving the TextRange object. From
-* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
-*/
-function initInsertions() {
- var doc;
-
- if (document.forms[form_name]) {
- doc = document;
- } else {
- doc = opener.document;
- }
-
- var textarea = doc.forms[form_name].elements[text_name];
- phpbb.applyCodeEditor(textarea);
-
- if (is_ie && typeof(baseHeight) !== 'number') {
- textarea.focus();
- baseHeight = doc.selection.createRange().duplicate().boundingHeight;
-
- if (!document.forms[form_name]) {
- document.body.focus();
- }
- }
-}
-
-/**
-* bbstyle
-*/
-function bbstyle(bbnumber) {
- if (bbnumber !== -1) {
- bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
- } else {
- insert_text('[*]');
- document.forms[form_name].elements[text_name].focus();
- }
-}
-
-/**
-* Apply bbcodes
-*/
-function bbfontstyle(bbopen, bbclose) {
- theSelection = false;
-
- var textarea = document.forms[form_name].elements[text_name];
-
- textarea.focus();
-
- if ((clientVer >= 4) && is_ie && is_win) {
- // Get text selection
- theSelection = document.selection.createRange().text;
-
- if (theSelection) {
- // Add tags around selection
- document.selection.createRange().text = bbopen + theSelection + bbclose;
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
- } else if (document.forms[form_name].elements[text_name].selectionEnd
- && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) {
- mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
- document.forms[form_name].elements[text_name].focus();
- theSelection = '';
- return;
- }
-
- //The new position for the cursor after adding the bbcode
- var caret_pos = getCaretPosition(textarea).start;
- var new_pos = caret_pos + bbopen.length;
-
- // Open tag
- insert_text(bbopen + bbclose);
-
- // Center the cursor when we don't have a selection
- // Gecko and proper browsers
- if (!isNaN(textarea.selectionStart)) {
- textarea.selectionStart = new_pos;
- textarea.selectionEnd = new_pos;
- }
- // IE
- else if (document.selection) {
- var range = textarea.createTextRange();
- range.move("character", new_pos);
- range.select();
- storeCaret(textarea);
- }
-
- textarea.focus();
- return;
-}
-
-/**
-* Insert text at position
-*/
-function insert_text(text, spaces, popup) {
- var textarea;
-
- if (!popup) {
- textarea = document.forms[form_name].elements[text_name];
- } else {
- textarea = opener.document.forms[form_name].elements[text_name];
- }
-
- if (spaces) {
- text = ' ' + text + ' ';
- }
-
- // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way.
- // Therefore we simply add a !is_ie here until IE fixes the text-selection completely.
- if (!isNaN(textarea.selectionStart) && !is_ie) {
- var sel_start = textarea.selectionStart;
- var sel_end = textarea.selectionEnd;
-
- mozWrap(textarea, text, '');
- textarea.selectionStart = sel_start + text.length;
- textarea.selectionEnd = sel_end + text.length;
- } else if (textarea.createTextRange && textarea.caretPos) {
- if (baseHeight !== textarea.caretPos.boundingHeight) {
- textarea.focus();
- storeCaret(textarea);
- }
-
- var caret_pos = textarea.caretPos;
- caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
- } else {
- textarea.value = textarea.value + text;
- }
-
- if (!popup) {
- textarea.focus();
- }
-}
-
-/**
-* Add inline attachment at position
-*/
-function attach_inline(index, filename) {
- insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
- document.forms[form_name].elements[text_name].focus();
-}
-
-/**
-* Add quote text to message
-*/
-function addquote(post_id, username, l_wrote) {
- var message_name = 'message_' + post_id;
- var theSelection = '';
- var divarea = false;
- var i;
-
- if (l_wrote === undefined) {
- // Backwards compatibility
- l_wrote = 'wrote';
- }
-
- if (document.all) {
- divarea = document.all[message_name];
- } else {
- divarea = document.getElementById(message_name);
- }
-
- // Get text selection - not only the post content :(
- // IE9 must use the document.selection method but has the *.getSelection so we just force no IE
- if (window.getSelection && !is_ie && !window.opera) {
- theSelection = window.getSelection().toString();
- } else if (document.getSelection && !is_ie) {
- theSelection = document.getSelection();
- } else if (document.selection) {
- theSelection = document.selection.createRange().text;
- }
-
- if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
- if (divarea.innerHTML) {
- theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
- theSelection = theSelection.replace(/<br\/>/ig, '\n');
- theSelection = theSelection.replace(/&lt\;/ig, '<');
- theSelection = theSelection.replace(/&gt\;/ig, '>');
- theSelection = theSelection.replace(/&amp\;/ig, '&');
- theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
- } else if (document.all) {
- theSelection = divarea.innerText;
- } else if (divarea.textContent) {
- theSelection = divarea.textContent;
- } else if (divarea.firstChild.nodeValue) {
- theSelection = divarea.firstChild.nodeValue;
- }
- }
-
- if (theSelection) {
- if (bbcodeEnabled) {
- insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
- } else {
- insert_text(username + ' ' + l_wrote + ':' + '\n');
- var lines = split_lines(theSelection);
- for (i = 0; i < lines.length; i++) {
- insert_text('> ' + lines[i] + '\n');
- }
- }
- }
-
- return;
-}
-
-function split_lines(text) {
- var lines = text.split('\n');
- var splitLines = new Array();
- var j = 0;
- var i;
-
- for(i = 0; i < lines.length; i++) {
- if (lines[i].length <= 80) {
- splitLines[j] = lines[i];
- j++;
- } else {
- var line = lines[i];
- var splitAt;
- do {
- splitAt = line.indexOf(' ', 80);
-
- if (splitAt === -1) {
- splitLines[j] = line;
- j++;
- } else {
- splitLines[j] = line.substring(0, splitAt);
- line = line.substring(splitAt);
- j++;
- }
- }
- while(splitAt !== -1);
- }
- }
- return splitLines;
-}
-
-/**
-* From http://www.massless.org/mozedit/
-*/
-function mozWrap(txtarea, open, close) {
- var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
- var scrollTop = txtarea.scrollTop;
-
- if (selEnd === 1 || selEnd === 2) {
- selEnd = selLength;
- }
-
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd);
- var s3 = (txtarea.value).substring(selEnd, selLength);
-
- txtarea.value = s1 + open + s2 + close + s3;
- txtarea.selectionStart = selStart + open.length;
- txtarea.selectionEnd = selEnd + open.length;
- txtarea.focus();
- txtarea.scrollTop = scrollTop;
-
- return;
-}
-
-/**
-* Insert at Caret position. Code from
-* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
-*/
-function storeCaret(textEl) {
- if (textEl.createTextRange) {
- textEl.caretPos = document.selection.createRange().duplicate();
- }
-}
-
-/**
-* Color pallette
-*/
-function colorPalette(dir, width, height) {
- var r = 0, g = 0, b = 0;
- var numberList = new Array(6);
- var color = '';
-
- numberList[0] = '00';
- numberList[1] = '40';
- numberList[2] = '80';
- numberList[3] = 'BF';
- numberList[4] = 'FF';
-
- document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
-
- for (r = 0; r < 5; r++) {
- if (dir === 'h') {
- document.writeln('<tr>');
- }
-
- for (g = 0; g < 5; g++) {
- if (dir === 'v') {
- document.writeln('<tr>');
- }
-
- for (b = 0; b < 5; b++) {
- color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
- document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
- document.writeln('</td>');
- }
-
- if (dir === 'v') {
- document.writeln('</tr>');
- }
- }
-
- if (dir === 'h') {
- document.writeln('</tr>');
- }
- }
- document.writeln('</table>');
-}
-
-/**
-* Caret Position object
-*/
-function caretPosition() {
- var start = null;
- var end = null;
-}
-
-/**
-* Get the caret position in an textarea
-*/
-function getCaretPosition(txtarea) {
- var caretPos = new caretPosition();
-
- // simple Gecko/Opera way
- if (txtarea.selectionStart || txtarea.selectionStart === 0) {
- caretPos.start = txtarea.selectionStart;
- caretPos.end = txtarea.selectionEnd;
- }
- // dirty and slow IE way
- else if (document.selection) {
- // get current selection
- var range = document.selection.createRange();
-
- // a new selection of the whole textarea
- var range_all = document.body.createTextRange();
- range_all.moveToElementText(txtarea);
-
- // calculate selection start point by moving beginning of range_all to beginning of range
- var sel_start;
- for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
- range_all.moveStart('character', 1);
- }
-
- txtarea.sel_start = sel_start;
-
- // we ignore the end value for IE, this is already dirty enough and we don't need it
- caretPos.start = txtarea.sel_start;
- caretPos.end = txtarea.sel_start;
- }
-
- return caretPos;
-}
diff --git a/phpBB/styles/subsilver2/template/index_body.html b/phpBB/styles/subsilver2/template/index_body.html
index e07cfda8b3..158e5f2720 100644
--- a/phpBB/styles/subsilver2/template/index_body.html
+++ b/phpBB/styles/subsilver2/template/index_body.html
@@ -1,8 +1,8 @@
<!-- INCLUDE overall_header.html -->
-<!-- IF U_MCP -->
+<!-- IF U_MCP or U_ACP -->
<div id="pageheader">
- <p class="linkmcp">[ <a href="{U_MCP}">{L_MCP}</a> ]</p>
+ <p class="linkmcp">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p>
</div>
<br clear="all" /><br />
diff --git a/phpBB/styles/subsilver2/template/mcp_header.html b/phpBB/styles/subsilver2/template/mcp_header.html
index f107732234..9b9f7849f4 100644
--- a/phpBB/styles/subsilver2/template/mcp_header.html
+++ b/phpBB/styles/subsilver2/template/mcp_header.html
@@ -3,9 +3,7 @@
<div id="pageheader">
<!-- IF U_MCP -->
<p class="linkmcp">
- [ <a href="{U_MCP}">{L_MCP}</a><!-- IF U_MCP_FORUM --> | <a href="{U_MCP_FORUM}">{L_MODERATE_FORUM}</a><!-- ENDIF -->
- <!-- IF U_MCP_TOPIC --> | <a href="{U_MCP_TOPIC}">{L_MODERATE_TOPIC}</a><!-- ENDIF -->
- <!-- IF U_MCP_POST --> | <a href="{U_MCP_POST}">{L_MODERATE_POST}</a><!-- ENDIF --> ]
+ [<!-- IF U_ACP -->&nbsp;<a href="{U_ACP}">{L_ACP}</a>&nbsp;|<!-- ENDIF -->&nbsp;<a href="{U_MCP}">{L_MCP}</a><!-- IF U_MCP_FORUM -->&nbsp;|&nbsp;<a href="{U_MCP_FORUM}">{L_MODERATE_FORUM}</a><!-- ENDIF --><!-- IF U_MCP_TOPIC -->&nbsp;|&nbsp;<a href="{U_MCP_TOPIC}">{L_MODERATE_TOPIC}</a><!-- ENDIF --><!-- IF U_MCP_POST -->&nbsp;|&nbsp;<a href="{U_MCP_POST}">{L_MODERATE_POST}</a><!-- ENDIF -->&nbsp;]
</p>
<!-- ENDIF -->
diff --git a/phpBB/styles/subsilver2/template/overall_footer.html b/phpBB/styles/subsilver2/template/overall_footer.html
index dbc9fcd7aa..d2b6f6a9d7 100644
--- a/phpBB/styles/subsilver2/template/overall_footer.html
+++ b/phpBB/styles/subsilver2/template/overall_footer.html
@@ -1,3 +1,5 @@
+ <!-- EVENT overall_footer_content_after -->
+
<!-- IF not S_IS_BOT -->{RUN_CRON_TASK}<!-- ENDIF -->
</div>
diff --git a/phpBB/styles/subsilver2/template/overall_header.html b/phpBB/styles/subsilver2/template/overall_header.html
index a82a640447..16e0f6abaf 100644
--- a/phpBB/styles/subsilver2/template/overall_header.html
+++ b/phpBB/styles/subsilver2/template/overall_header.html
@@ -238,3 +238,4 @@ function marklist(id, name, state)
<!-- DEFINE $S_MICRODATA = 0 -->
<br />
+ <!-- EVENT overall_header_content_before -->
diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html
index 635b05aaa0..b501c4146a 100644
--- a/phpBB/styles/subsilver2/template/posting_body.html
+++ b/phpBB/styles/subsilver2/template/posting_body.html
@@ -25,8 +25,8 @@
<!-- IF MODERATORS -->
<p class="moderators">{L_MODERATORS}{L_COLON} {MODERATORS}</p>
<!-- ENDIF -->
- <!-- IF U_MCP -->
- <p class="linkmcp">[ <a href="{U_MCP}">{L_MCP}</a> ]</p>
+ <!-- IF U_MCP or U_ACP -->
+ <p class="linkmcp">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p>
<!-- ENDIF -->
</div>
@@ -163,11 +163,12 @@
</tr>
<!-- ENDIF -->
<!-- ENDIF -->
-
+<!-- EVENT posting_editor_subject_before -->
<tr>
<td class="row1" width="22%"><b class="genmed">{L_SUBJECT}{L_COLON}</b></td>
<td class="row2" width="78%"><input class="post" style="width:450px" type="text" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->120<!-- ELSE -->124<!-- ENDIF -->" tabindex="2" value="{SUBJECT}" /></td>
</tr>
+<!-- EVENT posting_editor_subject_after -->
<tr>
<td class="row1" valign="top"><b class="genmed">{L_MESSAGE_BODY}{L_COLON}</b><br /><span class="gensmall">{L_MESSAGE_BODY_EXPLAIN}&nbsp;</span><br /><br />
<!-- IF S_SMILIES_ALLOWED -->
@@ -202,18 +203,15 @@
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<!-- INCLUDE posting_buttons.html -->
+ <!-- EVENT posting_editor_message_before -->
<tr>
<td valign="top" style="width: 100%;"><textarea name="message" rows="15" cols="76" tabindex="3" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" style="width: 700px; height: 270px; min-width: 98%; max-width: 98%;">{MESSAGE}</textarea></td>
<!-- IF S_BBCODE_ALLOWED -->
- <td width="80" align="center" valign="top">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('v', 7, 6)
- // ]]>
- </script>
+ <td width="80" align="center" valign="top" id="color_palette_placeholder" data-orientation="v" data-width="11" data-height="10" data-bbcode="true">
</td>
<!-- ENDIF -->
</tr>
+ <!-- EVENT posting_editor_message_after -->
</table>
</td>
</tr>
diff --git a/phpBB/styles/subsilver2/template/posting_buttons.html b/phpBB/styles/subsilver2/template/posting_buttons.html
index 1a7093e1be..06de2c3169 100644
--- a/phpBB/styles/subsilver2/template/posting_buttons.html
+++ b/phpBB/styles/subsilver2/template/posting_buttons.html
@@ -27,13 +27,13 @@
d: '{LA_BBCODE_D_HELP}',
tip: '{L_STYLES_TIP}'
<!-- BEGIN custom_tags -->
- ,cb_{custom_tags.BBCODE_ID}{L_COLON} '{custom_tags.A_BBCODE_HELPLINE}'
+ ,cb_{custom_tags.BBCODE_ID}: '{custom_tags.A_BBCODE_HELPLINE}'
<!-- END custom_tags -->
}
// ]]>
</script>
- <script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+ <!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<!-- IF S_BBCODE_ALLOWED -->
<input type="button" class="btnbbcode" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px;" onclick="bbstyle(0)" onmouseover="helpline('b')" onmouseout="helpline('tip')" />
diff --git a/phpBB/styles/subsilver2/template/posting_smilies.html b/phpBB/styles/subsilver2/template/posting_smilies.html
index d0ced9ff12..0be71098db 100644
--- a/phpBB/styles/subsilver2/template/posting_smilies.html
+++ b/phpBB/styles/subsilver2/template/posting_smilies.html
@@ -6,7 +6,7 @@
var text_name = opener.text_name;
// ]]>
</script>
-<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/editor.js"></script>
+<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js -->
<table width="100%" cellspacing="1" cellpadding="4" border="0">
<tr>
diff --git a/phpBB/styles/subsilver2/template/ucp_auth_link_oauth.html b/phpBB/styles/subsilver2/template/ucp_auth_link_oauth.html
index 56a4c89125..80564d207b 100644
--- a/phpBB/styles/subsilver2/template/ucp_auth_link_oauth.html
+++ b/phpBB/styles/subsilver2/template/ucp_auth_link_oauth.html
@@ -23,7 +23,7 @@
<tr>
<td class="row1"><input type="submit" name="submit" tabindex="6" value="{L_UCP_AUTH_LINK_LINK}" class="button1" /></td>
</tr>
- <!-- ENDIF-->
+ <!-- ENDIF -->
</table>
{oauth.HIDDEN_FIELDS}
{S_HIDDEN_FIELDS}
diff --git a/phpBB/styles/subsilver2/template/ucp_groups_manage.html b/phpBB/styles/subsilver2/template/ucp_groups_manage.html
index b8e7e29481..1499f90eaf 100644
--- a/phpBB/styles/subsilver2/template/ucp_groups_manage.html
+++ b/phpBB/styles/subsilver2/template/ucp_groups_manage.html
@@ -49,7 +49,11 @@
</tr>
<tr>
<td class="row1" width="35%"><label for="group_colour">{L_GROUP_COLOR}{L_COLON}</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></td>
- <td class="row2"><input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" />&nbsp;&nbsp;<span>[ <a href="{U_SWATCH}" onclick="popup(this.href, 636, 150, '_swatch'); return false;">{L_COLOUR_SWATCH}</a> ]</span></td>
+ <td class="row2">
+ <input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" />&nbsp;&nbsp;
+ <span>[ <a href="#" id="color_palette_toggle">{L_COLOUR_SWATCH}</a> ]</span>
+ <div id="color_palette_placeholder" style="display: none;" data-orientation="h" data-height="12" data-width="15" data-target="#group_colour"></div>
+ </td>
</tr>
<tr>
<td class="row1" width="35%"><label for="group_rank">{L_GROUP_RANK}{L_COLON}</label></td>
diff --git a/phpBB/styles/subsilver2/template/ucp_main_drafts.html b/phpBB/styles/subsilver2/template/ucp_main_drafts.html
index 8e18e9cabf..d63d678250 100644
--- a/phpBB/styles/subsilver2/template/ucp_main_drafts.html
+++ b/phpBB/styles/subsilver2/template/ucp_main_drafts.html
@@ -75,12 +75,7 @@
<td colspan="9">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
- <td align="{S_CONTENT_FLOW_BEGIN}">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('h', 6, 5)
- // ]]>
- </script>
+ <td align="{S_CONTENT_FLOW_BEGIN}" id="color_palette_placeholder" data-orientation="h" data-width="11" data-height="10" data-bbcode="true">
</td>
</tr>
</table>
diff --git a/phpBB/styles/subsilver2/template/ucp_pm_popup.html b/phpBB/styles/subsilver2/template/ucp_pm_popup.html
deleted file mode 100644
index b7032c6c30..0000000000
--- a/phpBB/styles/subsilver2/template/ucp_pm_popup.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- INCLUDE simple_header.html -->
-
-<script type="text/javascript">
-// <![CDATA[
-/**
-* Jump to inbox
-*/
-function jump_to_inbox(url)
-{
- opener.document.location.href = url.replace(/&amp;/g, '&');
- window.close();
-}
-// ]]>
-</script>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="10">
-<tr>
- <td>
- <table width="100%" border="0" cellspacing="1" cellpadding="4" class="tablebg">
- <tr class="row1">
- <td valign="top" align="center">
- <br /><span class="gen">
- <!-- IF S_NOT_LOGGED_IN -->
- {L_LOGIN_CHECK_PM}
- <!-- ELSE -->
- {MESSAGE}<br /><br />{CLICK_TO_VIEW}
- <!-- ENDIF -->
- </span>
- <br /><br /><span class="genmed"><a href="#" onclick="window.close(); return false;">{L_CLOSE_WINDOW}</a></span><br /><br />
- </td>
- </tr>
- </table>
- </td>
-</tr>
-</table>
-
-<!-- INCLUDE simple_footer.html -->
diff --git a/phpBB/styles/subsilver2/template/ucp_profile_signature.html b/phpBB/styles/subsilver2/template/ucp_profile_signature.html
index 85c8b0f616..5a2690edda 100644
--- a/phpBB/styles/subsilver2/template/ucp_profile_signature.html
+++ b/phpBB/styles/subsilver2/template/ucp_profile_signature.html
@@ -61,12 +61,7 @@
<td colspan="2">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
- <td align="{S_CONTENT_FLOW_BEGIN}">
- <script type="text/javascript">
- // <![CDATA[
- colorPalette('h', 6, 5)
- // ]]>
- </script>
+ <td align="{S_CONTENT_FLOW_BEGIN}" id="color_palette_placeholder" data-orientation="h" data-width="11" data-height="10">
</td>
</tr>
</table>
diff --git a/phpBB/styles/subsilver2/template/viewforum_body.html b/phpBB/styles/subsilver2/template/viewforum_body.html
index dfbe0a605b..612c2e42ea 100644
--- a/phpBB/styles/subsilver2/template/viewforum_body.html
+++ b/phpBB/styles/subsilver2/template/viewforum_body.html
@@ -109,7 +109,7 @@
<p class="moderators"><!-- IF S_SINGLE_MODERATOR -->{L_MODERATOR}<!-- ELSE -->{L_MODERATORS}<!-- ENDIF -->{L_COLON} {MODERATORS}</p>
<!-- ENDIF -->
<!-- IF U_MCP -->
- <p class="linkmcp">[ <a href="{U_MCP}">{L_MCP}</a> ]</p>
+ <p class="linkmcp">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p>
<!-- ENDIF -->
</div>
diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html
index 26e74b8c38..c3f8bf205b 100644
--- a/phpBB/styles/subsilver2/template/viewtopic_body.html
+++ b/phpBB/styles/subsilver2/template/viewtopic_body.html
@@ -21,7 +21,7 @@
<p class="moderators"><!-- IF S_SINGLE_MODERATOR -->{L_MODERATOR}<!-- ELSE -->{L_MODERATORS}<!-- ENDIF -->{L_COLON} {MODERATORS}</p>
<!-- ENDIF -->
<!-- IF U_MCP -->
- <p class="linkmcp">[ <a href="{U_MCP}">{L_MCP}</a> ]</p>
+ <p class="linkmcp">[&nbsp;<!-- IF U_ACP --><a href="{U_ACP}">{L_ACP}</a><!-- IF U_MCP -->&nbsp;|&nbsp;<!-- ENDIF --><!-- ENDIF --><!-- IF U_MCP --><a href="{U_MCP}">{L_MCP}</a><!-- ENDIF -->&nbsp;]</p>
<!-- ENDIF -->
</div>
diff --git a/phpBB/styles/subsilver2/theme/stylesheet.css b/phpBB/styles/subsilver2/theme/stylesheet.css
index 7d14376454..da99051329 100644
--- a/phpBB/styles/subsilver2/theme/stylesheet.css
+++ b/phpBB/styles/subsilver2/theme/stylesheet.css
@@ -303,6 +303,15 @@ p.topicdetails {
/* Tables
------------ */
+#color_palette_placeholder table {
+ border-collapse: separate;
+ border-spacing: 1px;
+}
+
+#color_palette_placeholder td {
+ padding: 0;
+}
+
th {
color: #FFA34F;
font-size: 1.1em;
diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php
index 6b26a3f5d6..d6a6a79342 100644
--- a/phpBB/viewonline.php
+++ b/phpBB/viewonline.php
@@ -139,9 +139,12 @@ $sql_ary = array(
* @event core.viewonline_modify_sql
* @var array sql_ary The SQL array
* @var bool show_guests Do we display guests in the list
+* @var int guest_counter Number of guests displayed
+* @var array forum_data Array with forum data
* @since 3.1-A1
+* @change 3.1.0-a2 Added vars guest_counter and forum_data
*/
-$vars = array('sql_ary', 'show_guests');
+$vars = array('sql_ary', 'show_guests', 'guest_counter', 'forum_data');
extract($phpbb_dispatcher->trigger_event('core.viewonline_modify_sql', compact($vars)));
$result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
@@ -345,9 +348,11 @@ while ($row = $db->sql_fetchrow($result))
* @var array row Array with the users sql row
* @var string location Page name to displayed in the list
* @var string location_url Page url to displayed in the list
+ * @var array forum_data Array with forum data
* @since 3.1-A1
+ * @change 3.1.0-a2 Added var forum_data
*/
- $vars = array('on_page', 'row', 'location', 'location_url');
+ $vars = array('on_page', 'row', 'location', 'location_url', 'forum_data');
extract($phpbb_dispatcher->trigger_event('core.viewonline_overwrite_location', compact($vars)));
$template->assign_block_vars('user_row', array(
diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php
index 3a7e633c99..a182268a71 100644
--- a/phpBB/viewtopic.php
+++ b/phpBB/viewtopic.php
@@ -347,23 +347,10 @@ if ($topic_data['forum_password'])
login_forum_box($topic_data);
}
-// Redirect to login or to the correct post upon emailed notification links
-if (isset($_GET['e']))
+// Redirect to login upon emailed notification links if user is not logged in.
+if (isset($_GET['e']) && $user->data['user_id'] == ANONYMOUS)
{
- $jump_to = request_var('e', 0);
-
- $redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id");
-
- if ($user->data['user_id'] == ANONYMOUS)
- {
- login_box($redirect_url . "&amp;p=$post_id&amp;e=$jump_to", $user->lang['LOGIN_NOTIFY_TOPIC']);
- }
-
- if ($jump_to > 0)
- {
- // We direct the already logged in user to the correct post...
- redirect($redirect_url . ((!$post_id) ? "&amp;p=$jump_to" : "&amp;p=$post_id") . "#p$jump_to");
- }
+ login_box(build_url('e') . '#unread', $user->lang['LOGIN_NOTIFY_TOPIC']);
}
// What is start equal to?
@@ -1001,10 +988,19 @@ $sql_ary = array(
* Event to modify the SQL query before the post and poster data is retrieved
*
* @event core.viewtopic_get_post_data
+* @var int forum_id Forum ID
+* @var int topic_id Topic ID
+* @var array topic_data Array with topic data
+* @var array post_list Array with post_ids we are going to retrieve
+* @var int sort_days Display posts of previous x days
+* @var string sort_key Key the posts are sorted by
+* @var string sort_dir Direction the posts are sorted by
+* @var int start Pagination information
* @var array sql_ary The SQL array to get the data of posts and posters
* @since 3.1-A1
+* @change 3.1.0-a2 Added vars forum_id, topic_id, topic_data, post_list, sort_days, sort_key, sort_dir, start
*/
-$vars = array('sql_ary');
+$vars = array('forum_id', 'topic_id', 'topic_data', 'post_list', 'sort_days', 'sort_key', 'sort_dir', 'start', 'sql_ary');
extract($phpbb_dispatcher->trigger_event('core.viewtopic_get_post_data', compact($vars)));
$sql = $db->sql_build_query('SELECT', $sql_ary);
@@ -1693,19 +1689,28 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
$user_poster_data = $user_cache[$poster_id];
+ $current_row_number = $i;
+
/**
* Modify the posts template block
*
* @event core.viewtopic_modify_post_row
+ * @var int start Start item of this page
+ * @var int current_row_number Number of the post on this page
+ * @var int end Number of posts on this page
* @var array row Array with original post and user data
* @var array cp_row Custom profile field data of the poster
+ * @var array attachments List of attachments
* @var array user_poster_data Poster's data from user cache
* @var array post_row Template block array of the post
* @since 3.1-A1
+ * @change 3.1.0-a3 Added vars start, current_row_number, end, attachments
*/
- $vars = array('row', 'cp_row', 'user_poster_data', 'post_row');
+ $vars = array('start', 'current_row_number', 'end', 'row', 'cp_row', 'attachments', 'user_poster_data', 'post_row');
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_row', compact($vars)));
+ $i = $current_row_number;
+
if (isset($cp_row['row']) && sizeof($cp_row['row']))
{
$post_row = array_merge($post_row, $cp_row['row']);
@@ -1739,6 +1744,27 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
}
}
+ $current_row_number = $i;
+
+ /**
+ * Event after the post data has been assigned to the template
+ *
+ * @event core.viewtopic_post_row_after
+ * @var int start Start item of this page
+ * @var int current_row_number Number of the post on this page
+ * @var int end Number of posts on this page
+ * @var array row Array with original post and user data
+ * @var array cp_row Custom profile field data of the poster
+ * @var array attachments List of attachments
+ * @var array user_poster_data Poster's data from user cache
+ * @var array post_row Template block array of the post
+ * @since 3.1.0-a3
+ */
+ $vars = array('start', 'current_row_number', 'end', 'row', 'cp_row', 'attachments', 'user_poster_data', 'post_row');
+ extract($phpbb_dispatcher->trigger_event('core.viewtopic_post_row_after', compact($vars)));
+
+ $i = $current_row_number;
+
$prev_post_id = $row['post_id'];
unset($rowset[$post_list[$i]]);
diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php
index 4afa594beb..527bb223d5 100644
--- a/tests/avatar/manager_test.php
+++ b/tests/avatar/manager_test.php
@@ -112,7 +112,7 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
public function test_get_driver_enabled($driver_name, $expected)
{
$driver = $this->manager->get_driver($driver_name);
- $this->assertEquals($expected, $driver);
+ $this->assertEquals($expected, ($driver === null) ? null : $driver->get_name());
}
public function get_driver_data_all()
@@ -133,7 +133,7 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
public function test_get_driver_all($driver_name, $expected)
{
$driver = $this->manager->get_driver($driver_name, false);
- $this->assertEquals($expected, $driver);
+ $this->assertEquals($expected, ($driver === null) ? $driver : $driver->get_name());
}
public function test_get_avatar_settings()
@@ -152,12 +152,24 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
return array(
array(
array(
- 'user_avatar' => '',
- 'user_avatar_type' => '',
- 'user_avatar_width' => '',
+ 'user_avatar' => '',
+ 'user_avatar_type' => '',
+ 'user_avatar_width' => '',
'user_avatar_height' => '',
+ 'group_avatar' => '',
),
array(
+ 'user_avatar' => '',
+ 'user_avatar_type' => '',
+ 'user_avatar_width' => '',
+ 'user_avatar_height' => '',
+ 'group_avatar' => '',
+ ),
+ 'foobar',
+ ),
+ array(
+ array(),
+ array(
'avatar' => '',
'avatar_type' => '',
'avatar_width' => '',
@@ -166,40 +178,41 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
),
array(
array(
- 'group_avatar' => '',
- 'group_avatar_type' => '',
- 'group_avatar_width' => '',
- 'group_avatar_height' => '',
+ 'user_avatar' => '',
+ 'user_id' => 5,
+ 'group_id' => 4,
),
array(
- 'avatar' => '',
- 'avatar_type' => '',
- 'avatar_width' => '',
- 'avatar_height' => '',
+ 'user_avatar' => '',
+ 'user_id' => 5,
+ 'group_id' => 4,
),
),
array(
- array(),
array(
- 'avatar' => '',
- 'avatar_type' => '',
- 'avatar_width' => '',
- 'avatar_height' => '',
+ 'user_avatar' => '',
+ 'user_id' => 5,
+ 'group_id' => 4,
+ ),
+ array(
+ 'avatar' => '',
+ 'id' => 5,
+ 'group_id' => 4,
),
+ 'user',
),
array(
array(
- 'foobar_avatar' => '',
- 'foobar_avatar_type' => '',
- 'foobar_avatar_width' => '',
- 'foobar_avatar_height' => '',
+ 'group_avatar' => '',
+ 'user_id' => 5,
+ 'group_id' => 4,
),
array(
- 'foobar_avatar' => '',
- 'foobar_avatar_type' => '',
- 'foobar_avatar_width' => '',
- 'foobar_avatar_height' => '',
+ 'avatar' => '',
+ 'id' => 'g4',
+ 'user_id' => 5,
),
+ 'group',
),
);
}
@@ -207,14 +220,15 @@ class phpbb_avatar_manager_test extends PHPUnit_Framework_TestCase
/**
* @dataProvider database_row_data
*/
- public function test_clean_row(array $input, array $output)
+ public function test_clean_row(array $input, array $output, $prefix = '')
{
$cleaned_row = array();
- $cleaned_row = \phpbb\avatar\manager::clean_row($input);
- foreach ($output as $key => $null)
+ $cleaned_row = \phpbb\avatar\manager::clean_row($input, $prefix);
+ foreach ($output as $key => $value)
{
$this->assertArrayHasKey($key, $cleaned_row);
+ $this->assertEquals($cleaned_row[$key], $value);
}
}
diff --git a/tests/dbal/migrator_tool_config_test.php b/tests/dbal/migrator_tool_config_test.php
index a8d8966839..807399385c 100644
--- a/tests/dbal/migrator_tool_config_test.php
+++ b/tests/dbal/migrator_tool_config_test.php
@@ -20,35 +20,24 @@ class phpbb_dbal_migrator_tool_config_test extends phpbb_test_case
public function test_add()
{
- try
- {
- $this->tool->add('foo', 'bar');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->add('foo', 'bar');
+ $this->assertEquals('bar', $this->config['foo']);
+ }
+
+ public function test_add_twice()
+ {
+ $this->tool->add('foo', 'bar');
$this->assertEquals('bar', $this->config['foo']);
- try
- {
- $this->tool->add('foo', 'bar');
- $this->fail('Exception not thrown');
- }
- catch (Exception $e) {}
+ $this->tool->add('foo', 'bar2');
+ $this->assertEquals('bar', $this->config['foo']);
}
public function test_update()
{
$this->config->set('foo', 'bar');
- try
- {
- $this->tool->update('foo', 'bar2');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+
+ $this->tool->update('foo', 'bar2');
$this->assertEquals('bar2', $this->config['foo']);
}
@@ -56,24 +45,10 @@ class phpbb_dbal_migrator_tool_config_test extends phpbb_test_case
{
$this->config->set('foo', 'bar');
- try
- {
- $this->tool->update_if_equals('', 'foo', 'bar2');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->update_if_equals('', 'foo', 'bar2');
$this->assertEquals('bar', $this->config['foo']);
- try
- {
- $this->tool->update_if_equals('bar', 'foo', 'bar2');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->update_if_equals('bar', 'foo', 'bar2');
$this->assertEquals('bar2', $this->config['foo']);
}
@@ -81,41 +56,31 @@ class phpbb_dbal_migrator_tool_config_test extends phpbb_test_case
{
$this->config->set('foo', 'bar');
- try
- {
- $this->tool->remove('foo');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->remove('foo');
$this->assertFalse(isset($this->config['foo']));
}
- public function test_reverse()
+ public function test_reverse_add()
{
$this->config->set('foo', 'bar');
- try
- {
- $this->tool->reverse('add', 'foo');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->reverse('add', 'foo');
$this->assertFalse(isset($this->config['foo']));
+ }
+
+ public function test_reverse_remove()
+ {
+ $this->config->delete('foo');
+ $this->tool->reverse('remove', 'foo');
+ $this->assertEquals('', $this->config['foo']);
+ }
+
+ public function test_reverse_update_if_equals()
+ {
$this->config->set('foo', 'bar');
- try
- {
- $this->tool->reverse('update_if_equals', 'test', 'foo', 'bar');
- }
- catch (Exception $e)
- {
- $this->fail($e);
- }
+ $this->tool->reverse('update_if_equals', 'test', 'foo', 'bar');
$this->assertEquals('test', $this->config['foo']);
}
}
diff --git a/tests/functional/avatar_acp_groups_test.php b/tests/functional/avatar_acp_groups_test.php
index 9fdc29cc76..5e908bc6da 100644
--- a/tests/functional/avatar_acp_groups_test.php
+++ b/tests/functional/avatar_acp_groups_test.php
@@ -50,6 +50,15 @@ class phpbb_functional_avatar_acp_groups_test extends phpbb_functional_common_av
'avatar_delete' => array('tick', ''),
),
),
+ array(
+ 'The URL you specified is invalid.',
+ 'avatar_driver_remote',
+ array(
+ 'avatar_remote_url' => 'https://www.phpbb.com/avatar/55502f40dc8b7c769880b10874abc9d0.jpg',
+ 'avatar_remote_width' => 80,
+ 'avatar_remote_height' => 80,
+ ),
+ ),
);
}
diff --git a/tests/functional/extension_acp_test.php b/tests/functional/extension_acp_test.php
index 401b18f11c..5d391e42f7 100644
--- a/tests/functional/extension_acp_test.php
+++ b/tests/functional/extension_acp_test.php
@@ -77,59 +77,59 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
public function test_list()
{
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
- $this->assertCount(1, $crawler->filter('.ext_enabled'));
- $this->assertCount(5, $crawler->filter('.ext_disabled'));
+ $this->assertCount(1, $crawler->filter('.ext_enabled'));
+ $this->assertCount(5, $crawler->filter('.ext_disabled'));
- $this->assertContains('phpBB Foo Extension', $crawler->filter('.ext_enabled')->eq(0)->text());
- $this->assertContainsLang('PURGE', $crawler->filter('.ext_enabled')->eq(0)->text());
+ $this->assertContains('phpBB Foo Extension', $crawler->filter('.ext_enabled')->eq(0)->text());
+ $this->assertContainsLang('EXTENSION_DISABLE', $crawler->filter('.ext_enabled')->eq(0)->text());
- $this->assertContains('The "test2" extension is not valid.', $crawler->filter('.ext_disabled')->eq(0)->text());
+ $this->assertContains('The “test2” extension is not valid.', $crawler->filter('.ext_disabled')->eq(0)->text());
- $this->assertContains('The "test3" extension is not valid.', $crawler->filter('.ext_disabled')->eq(1)->text());
+ $this->assertContains('The “test3” extension is not valid.', $crawler->filter('.ext_disabled')->eq(1)->text());
- $this->assertContains('phpBB Moo Extension', $crawler->filter('.ext_disabled')->eq(2)->text());
- $this->assertContainsLang('DETAILS', $crawler->filter('.ext_disabled')->eq(2)->text());
- $this->assertContainsLang('ENABLE', $crawler->filter('.ext_disabled')->eq(2)->text());
- $this->assertContainsLang('PURGE', $crawler->filter('.ext_disabled')->eq(2)->text());
+ $this->assertContains('phpBB Moo Extension', $crawler->filter('.ext_disabled')->eq(2)->text());
+ $this->assertContainsLang('DETAILS', $crawler->filter('.ext_disabled')->eq(2)->text());
+ $this->assertContainsLang('EXTENSION_ENABLE', $crawler->filter('.ext_disabled')->eq(2)->text());
+ $this->assertContainsLang('EXTENSION_DELETE_DATA', $crawler->filter('.ext_disabled')->eq(2)->text());
- $this->assertContains('The "bar" extension is not valid.', $crawler->filter('.ext_disabled')->eq(3)->text());
+ $this->assertContains('The “bar” extension is not valid.', $crawler->filter('.ext_disabled')->eq(3)->text());
}
public function test_details()
{
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo&sid=' . $this->sid);
-
- $validation = array(
- 'DISPLAY_NAME' => 'phpBB Foo Extension',
- 'CLEAN_NAME' => 'foo/example',
- 'TYPE' => 'phpbb-extension',
- 'DESCRIPTION' => 'An example/sample extension to be used for testing purposes in phpBB Development.',
- 'VERSION' => '1.0.0',
- 'TIME' => '2012-02-15 01:01:01',
- 'LICENCE' => 'GPL-2.0',
- 'PHPBB_VERSION' => '3.1.*@dev',
- 'PHP_VERSION' => '>=5.3',
- 'AUTHOR_NAME' => 'John Smith',
- 'AUTHOR_EMAIL' => 'email@phpbb.com',
- 'AUTHOR_HOMEPAGE' => 'http://phpbb.com',
- 'AUTHOR_ROLE' => 'N/A',
- );
-
- for ($i = 0; $i < $crawler->filter('dl')->count(); $i++)
- {
- $text = $crawler->filter('dl')->eq($i)->text();
-
- $match = false;
-
- foreach ($validation as $language_key => $expected)
- {
- if (strpos($text, $this->lang($language_key)) === 0)
- {
- $match = true;
-
- $this->assertContains($expected, $text);
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=details&ext_name=foo&sid=' . $this->sid);
+
+ $validation = array(
+ 'DISPLAY_NAME' => 'phpBB Foo Extension',
+ 'CLEAN_NAME' => 'foo/example',
+ 'TYPE' => 'phpbb-extension',
+ 'DESCRIPTION' => 'An example/sample extension to be used for testing purposes in phpBB Development.',
+ 'VERSION' => '1.0.0',
+ 'TIME' => '2012-02-15 01:01:01',
+ 'LICENCE' => 'GPL-2.0',
+ 'PHPBB_VERSION' => '3.1.*@dev',
+ 'PHP_VERSION' => '>=5.3',
+ 'AUTHOR_NAME' => 'John Smith',
+ 'AUTHOR_EMAIL' => 'email@phpbb.com',
+ 'AUTHOR_HOMEPAGE' => 'http://phpbb.com',
+ 'AUTHOR_ROLE' => 'N/A',
+ );
+
+ for ($i = 0; $i < $crawler->filter('dl')->count(); $i++)
+ {
+ $text = $crawler->filter('dl')->eq($i)->text();
+
+ $match = false;
+
+ foreach ($validation as $language_key => $expected)
+ {
+ if (strpos($text, $this->lang($language_key)) === 0)
+ {
+ $match = true;
+
+ $this->assertContains($expected, $text);
}
}
@@ -143,46 +143,73 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
public function test_enable_pre()
{
// Foo is already enabled (redirect to list)
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=foo&sid=' . $this->sid);
- $this->assertContainsLang('EXTENSION_NAME', $crawler->filter('html')->text());
- $this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('html')->text());
- $this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('html')->text());
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=foo&sid=' . $this->sid);
+ $this->assertContainsLang('EXTENSION_NAME', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('div.main thead')->text());
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
- $this->assertContainsLang('ENABLE_CONFIRM', $crawler->filter('html')->text());
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContains($this->lang('EXTENSION_ENABLE_CONFIRM', 'phpBB Moo Extension'), $crawler->filter('.errorbox')->text());
}
public function test_disable_pre()
{
- // Moo is not enabled (redirect to list)
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
- $this->assertContainsLang('EXTENSION_NAME', $crawler->filter('html')->text());
- $this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('html')->text());
- $this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('html')->text());
-
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=foo&sid=' . $this->sid);
- $this->assertContainsLang('DISABLE_CONFIRM', $crawler->filter('html')->text());
+ // Moo is not enabled (redirect to list)
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContainsLang('EXTENSION_NAME', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('div.main thead')->text());
+
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=foo&sid=' . $this->sid);
+ $this->assertContains($this->lang('EXTENSION_DISABLE_CONFIRM', 'phpBB Foo Extension'), $crawler->filter('.errorbox')->text());
}
- public function test_purge_pre()
+ public function test_delete_data_pre()
{
- // test2 is not available (error)
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=test2&sid=' . $this->sid);
- $this->assertContains('The required file does not exist', $crawler->filter('html')->text());
-
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge_pre&ext_name=foo&sid=' . $this->sid);
- $this->assertContainsLang('PURGE_CONFIRM', $crawler->filter('html')->text());
+ // test2 is not available (error)
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=test2&sid=' . $this->sid);
+ $this->assertContains('The required file does not exist', $crawler->filter('.errorbox')->text());
+
+ // foo is not disabled (redirect to list)
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=foo&sid=' . $this->sid);
+ $this->assertContainsLang('EXTENSION_NAME', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_OPTIONS', $crawler->filter('div.main thead')->text());
+ $this->assertContainsLang('EXTENSION_ACTIONS', $crawler->filter('div.main thead')->text());
+
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContains('Are you sure that you wish to delete the data associated with “phpBB Moo Extension”?', $crawler->filter('.errorbox')->text());
}
public function test_actions()
{
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
- $this->assertContainsLang('ENABLE_SUCCESS', $crawler->filter('html')->text());
-
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
- $this->assertContainsLang('DISABLE_SUCCESS', $crawler->filter('html')->text());
-
- $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=purge&ext_name=vendor%2Fmoo&sid=' . $this->sid);
- $this->assertContainsLang('PURGE_SUCCESS', $crawler->filter('html')->text());
+ // Access enable page without hash
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContainsLang('FORM_INVALID', $crawler->filter('.errorbox')->text());
+
+ // Correctly submit the enable form
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $form = $crawler->selectButton('enable')->form();
+ $crawler = self::submit($form);
+ $this->assertContainsLang('EXTENSION_ENABLE_SUCCESS', $crawler->filter('.successbox')->text());
+
+ // Access disable page without hash
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContainsLang('FORM_INVALID', $crawler->filter('.errorbox')->text());
+
+ // Correctly submit the disable form
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=disable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $form = $crawler->selectButton('disable')->form();
+ $crawler = self::submit($form);
+ $this->assertContainsLang('EXTENSION_DISABLE_SUCCESS', $crawler->filter('.successbox')->text());
+
+ // Access delete_data page without hash
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $this->assertContainsLang('FORM_INVALID', $crawler->filter('.errorbox')->text());
+
+ // Correctly submit the delete data form
+ $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=delete_data_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
+ $form = $crawler->selectButton('delete_data')->form();
+ $crawler = self::submit($form);
+ $this->assertContainsLang('EXTENSION_DELETE_DATA_SUCCESS', $crawler->filter('.successbox')->text());
}
}
diff --git a/tests/functional/extension_controller_test.php b/tests/functional/extension_controller_test.php
index 41bd48c204..37752b8fbb 100644
--- a/tests/functional/extension_controller_test.php
+++ b/tests/functional/extension_controller_test.php
@@ -19,6 +19,8 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c
static protected $fixtures = array(
'foo/bar/config/',
'foo/bar/controller/',
+ 'foo/bar/event/',
+ 'foo/bar/language/en/',
'foo/bar/styles/prosilver/template/',
);
diff --git a/tests/functional/extension_global_lang_test.php b/tests/functional/extension_global_lang_test.php
index fb8f87e6de..094eda8257 100644
--- a/tests/functional/extension_global_lang_test.php
+++ b/tests/functional/extension_global_lang_test.php
@@ -17,8 +17,9 @@ class phpbb_functional_extension_global_lang_test extends phpbb_functional_test_
static private $helper;
static protected $fixtures = array(
- 'foo/bar/language/en/',
+ 'foo/bar/config/',
'foo/bar/event/',
+ 'foo/bar/language/en/',
);
static public function setUpBeforeClass()
diff --git a/tests/functional/extension_permission_lang_test.php b/tests/functional/extension_permission_lang_test.php
index 19adb89819..e922abdaf1 100644
--- a/tests/functional/extension_permission_lang_test.php
+++ b/tests/functional/extension_permission_lang_test.php
@@ -17,8 +17,9 @@ class phpbb_functional_extension_permission_lang_test extends phpbb_functional_t
static private $helper;
static protected $fixtures = array(
- 'foo/bar/language/en/',
+ 'foo/bar/config/',
'foo/bar/event/',
+ 'foo/bar/language/en/',
);
static public function setUpBeforeClass()
diff --git a/tests/functional/fixtures/ext/foo/bar/composer.json b/tests/functional/fixtures/ext/foo/bar/composer.json
index cb9dbc9514..e3e5fc21cd 100644
--- a/tests/functional/fixtures/ext/foo/bar/composer.json
+++ b/tests/functional/fixtures/ext/foo/bar/composer.json
@@ -14,7 +14,7 @@
}],
"require": {
"php": ">=5.3",
- "phpbb": "3.1.*@dev"
+ "phpbb/phpbb": "3.1.*@dev"
},
"extra": {
"display-name": "phpBB 3.1 Extension Testing"
diff --git a/tests/functional/fixtures/ext/foo/bar/config/services.yml b/tests/functional/fixtures/ext/foo/bar/config/services.yml
index 3bca4c6567..64e1163408 100644
--- a/tests/functional/fixtures/ext/foo/bar/config/services.yml
+++ b/tests/functional/fixtures/ext/foo/bar/config/services.yml
@@ -4,3 +4,12 @@ services:
arguments:
- @controller.helper
- @template
+ foo_bar.listener.permission:
+ class: foo\bar\event\permission
+ tags:
+ - { name: event.listener }
+ foo_bar.listener.user_setup:
+ class: foo\bar\event\user_setup
+ tags:
+ - { name: event.listener }
+
diff --git a/tests/functional/fixtures/ext/foo/bar/event/permission.php b/tests/functional/fixtures/ext/foo/bar/event/permission.php
index 92e24074ad..9b319dd35f 100644
--- a/tests/functional/fixtures/ext/foo/bar/event/permission.php
+++ b/tests/functional/fixtures/ext/foo/bar/event/permission.php
@@ -11,15 +11,6 @@
namespace foo\bar\event;
/**
-* @ignore
-*/
-
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Event listener
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
diff --git a/tests/functional/fixtures/ext/foo/bar/event/user_setup.php b/tests/functional/fixtures/ext/foo/bar/event/user_setup.php
index 1409f97470..8fa7ac97da 100644
--- a/tests/functional/fixtures/ext/foo/bar/event/user_setup.php
+++ b/tests/functional/fixtures/ext/foo/bar/event/user_setup.php
@@ -11,15 +11,6 @@
namespace foo\bar\event;
/**
-* @ignore
-*/
-
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
* Event listener
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
diff --git a/tests/functional/notification_test.php b/tests/functional/notification_test.php
index 7f33ad1859..dd1b8ec981 100644
--- a/tests/functional/notification_test.php
+++ b/tests/functional/notification_test.php
@@ -52,4 +52,37 @@ class phpbb_functional_notification_test extends phpbb_functional_test_case
$this->assert_checkbox_is_unchecked($cplist, $checkbox_name);
}
}
+
+ public function test_mark_notifications_read()
+ {
+ // Create a new standard user
+ $this->create_user('notificationtestuser');
+ $this->add_user_group('NEWLY_REGISTERED', array('notificationtestuser'));
+ $this->login('notificationtestuser');
+ $crawler = self::request('GET', 'index.php');
+ $this->assertContains('notificationtestuser', $crawler->filter('.icon-logout')->text());
+
+ // Post a new post that needs approval
+ $this->create_post(2, 1, 'Re: Welcome to phpBB3', 'This is a test [b]post[/b] posted by notificationtestuser.', array(), 'POST_STORED_MOD');
+ $crawler = self::request('GET', "viewtopic.php?t=1&sid={$this->sid}");
+ $this->assertNotContains('This is a test post posted by notificationtestuser.', $crawler->filter('html')->text());
+
+ // logout
+ $crawler = self::request('GET', 'ucp.php?sid=' . $this->sid . '&mode=logout');
+
+ // admin login
+ $this->login();
+ $this->add_lang('ucp');
+ $crawler = self::request('GET', 'ucp.php?i=ucp_notifications');
+
+ // At least one notification should exist
+ $this->assertGreaterThan(0, $crawler->filter('#notification_list_button strong')->text());
+
+ // Get form token
+ $link = $crawler->selectLink($this->lang('NOTIFICATIONS_MARK_ALL_READ'))->link()->getUri();
+ $crawler = self::request('GET', substr($link, strpos($link, 'ucp.')));
+ $form = $crawler->selectButton($this->lang('YES'))->form();
+ $crawler = self::submit($form);
+ $this->assertEquals(0, $crawler->filter('#notification_list_button strong')->text());
+ }
}
diff --git a/tests/functions_install/ignore_new_file_on_update_test.php b/tests/functions_install/ignore_new_file_on_update_test.php
new file mode 100644
index 0000000000..703da4e435
--- /dev/null
+++ b/tests/functions_install/ignore_new_file_on_update_test.php
@@ -0,0 +1,41 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions_install.php';
+
+class phpbb_functions_install_ignore_new_file_on_update_test extends phpbb_test_case
+{
+ static public function ignore_new_file_on_update_data()
+ {
+ return array(
+ array('willneverexist.php', false),
+ array('includes/dirwillneverexist/newfile.php', false),
+
+ array('language/en/email/short/bookmark.txt', false),
+ array('language/languagewillneverexist/email/short/bookmark.txt', true),
+
+ array('styles/prosilver/template/bbcode.html', false),
+ array('styles/stylewillneverexist/template/bbcode.html', true),
+
+ array('styles/prosilver/theme/en/icon_user_online.gif', false),
+ array('styles/prosilver/theme/languagewillneverexist/icon_user_online.gif', true),
+
+ array('styles/prosilver/theme/imageset.css', false),
+ );
+ }
+
+ /**
+ * @dataProvider ignore_new_file_on_update_data
+ */
+ public function test_ignore_new_file_on_update($file, $expected)
+ {
+ global $phpbb_root_path;
+ $this->assertEquals($expected, phpbb_ignore_new_file_on_update($phpbb_root_path, $file));
+ }
+}
diff --git a/tests/notification/base.php b/tests/notification/base.php
index 549545f01b..f6333866c3 100644
--- a/tests/notification/base.php
+++ b/tests/notification/base.php
@@ -70,6 +70,7 @@ abstract class phpbb_tests_notification_base extends phpbb_database_test_case
array(),
$this->container,
$this->user_loader,
+ $this->config,
$this->db,
$this->cache,
$this->user,
diff --git a/tests/notification/submit_post_base.php b/tests/notification/submit_post_base.php
index 8597c626a4..a9ed59686a 100644
--- a/tests/notification/submit_post_base.php
+++ b/tests/notification/submit_post_base.php
@@ -118,7 +118,7 @@ class phpbb_notification_submit_post_base extends phpbb_database_test_case
// Notification Manager
$phpbb_notifications = new \phpbb\notification\manager($notification_types_array, array(),
- $phpbb_container, $user_loader, $db, $cache, $user,
+ $phpbb_container, $user_loader, $config, $db, $cache, $user,
$phpbb_root_path, $phpEx,
NOTIFICATION_TYPES_TABLE, NOTIFICATIONS_TABLE, USER_NOTIFICATIONS_TABLE);
$phpbb_container->set('notification_manager', $phpbb_notifications);
diff --git a/tests/template/template_test.php b/tests/template/template_test.php
index 39eb08ab79..6e9b7d3ee9 100644
--- a/tests/template/template_test.php
+++ b/tests/template/template_test.php
@@ -158,7 +158,7 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
array(),
array('test_loop' => array(array(), array(), array(), array(), array(), array(), array()), 'test' => array(array()), 'test.deep' => array(array()), 'test.deep.defines' => array(array())),
array(),
- "xyz\nabc\n\$VALUE == 'abc'\n(\$VALUE == 'abc')\n((\$VALUE == 'abc'))\n!\$DOESNT_EXIST\n(!\$DOESNT_EXIST)\nabc\nbar\nbar\nabc\ntest!@#$%^&*()_-=+{}[]:;\",<.>/?[]|foobar|",
+ "xyz\nabc\n\$VALUE == 'abc'\n(\$VALUE == 'abc')\n((\$VALUE == 'abc'))\n!\$DOESNT_EXIST\n(!\$DOESNT_EXIST)\nabc\nbar\nbar\nabc\ntest!@#$%^&*()_-=+{}[]:;\",<.>/?[]|foobar|false",
),
array(
'define_advanced.html',
@@ -561,4 +561,12 @@ EOT
$expect = 'outer - 0[outer|4]outer - 1[outer|4]middle - 0[middle|1]outer - 2 - test[outer|4]middle - 0[middle|2]middle - 1[middle|2]outer - 3[outer|4]middle - 0[middle|3]middle - 1[middle|3]middle - 2[middle|3]';
$this->assertEquals($expect, str_replace(array("\n", "\r", "\t"), '', $this->display('test')), 'Ensuring S_NUM_ROWS is correct after modification');
}
+
+ /**
+ * @expectedException Twig_Error_Syntax
+ */
+ public function test_define_error()
+ {
+ $this->run_template('define_error.html', array(), array(), array(), '');
+ }
}
diff --git a/tests/template/templates/define.html b/tests/template/templates/define.html
index e7ce7f7def..276d2ebb99 100644
--- a/tests/template/templates/define.html
+++ b/tests/template/templates/define.html
@@ -29,3 +29,9 @@ $VALUE == 'abc'
<!-- DEFINE $VALUE = '' -->
[{$VALUE}]
<!-- DEFINE $TEST -->foobar<!-- ENDDEFINE -->|{$TEST}|
+<!-- DEFINE $VAR = false -->
+<!-- IF $VAR -->
+true
+<!-- ELSE -->
+false
+<!-- ENDIF -->
diff --git a/tests/template/templates/define_error.html b/tests/template/templates/define_error.html
new file mode 100644
index 0000000000..72ab1ba033
--- /dev/null
+++ b/tests/template/templates/define_error.html
@@ -0,0 +1,2 @@
+<!-- DEFINE $VAR = foo -->
+{$VAR}
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index a0d186e0f2..eba5a2dfdf 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -868,9 +868,10 @@ class phpbb_functional_test_case extends phpbb_test_case
* @param string $subject
* @param string $message
* @param array $additional_form_data Any additional form data to be sent in the request
- * @return array post_id, topic_id
+ * @param string $expected Lang var of expected message after posting
+ * @return array|null post_id, topic_id if message is 'POST_STORED'
*/
- public function create_topic($forum_id, $subject, $message, $additional_form_data = array())
+ public function create_topic($forum_id, $subject, $message, $additional_form_data = array(), $expected = 'POST_STORED')
{
$posting_url = "posting.php?mode=post&f={$forum_id}&sid={$this->sid}";
@@ -880,7 +881,7 @@ class phpbb_functional_test_case extends phpbb_test_case
'post' => true,
), $additional_form_data);
- return self::submit_post($posting_url, 'POST_TOPIC', $form_data);
+ return self::submit_post($posting_url, 'POST_TOPIC', $form_data, $expected);
}
/**
@@ -893,9 +894,10 @@ class phpbb_functional_test_case extends phpbb_test_case
* @param string $subject
* @param string $message
* @param array $additional_form_data Any additional form data to be sent in the request
- * @return array post_id, topic_id
+ * @param string $expected Lang var of expected message after posting
+ * @return array|null post_id, topic_id if message is 'POST_STORED'
*/
- public function create_post($forum_id, $topic_id, $subject, $message, $additional_form_data = array())
+ public function create_post($forum_id, $topic_id, $subject, $message, $additional_form_data = array(), $expected = 'POST_STORED')
{
$posting_url = "posting.php?mode=reply&f={$forum_id}&t={$topic_id}&sid={$this->sid}";
@@ -905,7 +907,7 @@ class phpbb_functional_test_case extends phpbb_test_case
'post' => true,
), $additional_form_data);
- return self::submit_post($posting_url, 'POST_REPLY', $form_data);
+ return self::submit_post($posting_url, 'POST_REPLY', $form_data, $expected);
}
/**
@@ -914,9 +916,10 @@ class phpbb_functional_test_case extends phpbb_test_case
* @param string $posting_url
* @param string $posting_contains
* @param array $form_data
- * @return array post_id, topic_id
+ * @param string $expected Lang var of expected message after posting
+ * @return array|null post_id, topic_id if message is 'POST_STORED'
*/
- protected function submit_post($posting_url, $posting_contains, $form_data)
+ protected function submit_post($posting_url, $posting_contains, $form_data, $expected = 'POST_STORED')
{
$this->add_lang('posting');
@@ -945,7 +948,12 @@ class phpbb_functional_test_case extends phpbb_test_case
// contained in one of the actual form fields that the browser sees (i.e. it ignores "hidden" inputs)
// Instead, I send it as a request with the submit button "post" set to true.
$crawler = self::request('POST', $posting_url, $form_data);
- $this->assertContains($this->lang('POST_STORED'), $crawler->filter('html')->text());
+ $this->assertContainsLang($expected, $crawler->filter('html')->text());
+
+ if ($expected !== 'POST_STORED')
+ {
+ return;
+ }
$url = $crawler->selectLink($this->lang('VIEW_MESSAGE', '', ''))->link()->getUri();
return array(
diff --git a/travis/setup-mariadb.sh b/travis/setup-mariadb.sh
index 02520b1c2c..aceb6af7ee 100755
--- a/travis/setup-mariadb.sh
+++ b/travis/setup-mariadb.sh
@@ -4,6 +4,7 @@
# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
#
set -e
+set -x
# MariaDB Series
VERSION='5.5'
@@ -12,21 +13,31 @@ VERSION='5.5'
OS_CODENAME=$(lsb_release --codename --short)
# Manually purge MySQL to remove conflicting files (e.g. /etc/mysql/my.cnf)
-sudo apt-get purge -qq mysql-common
+sudo apt-get purge -y mysql-common
if ! which add-apt-repository > /dev/null
then
- sudo apt-get update -qq
- sudo apt-get install -qq python-software-properties
+ sudo apt-get update
+ sudo apt-get install -y python-software-properties
fi
+MIRROR_DOMAIN='ftp.osuosl.org'
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
-sudo add-apt-repository "deb http://ftp.osuosl.org/pub/mariadb/repo/$VERSION/ubuntu $OS_CODENAME main"
-sudo apt-get update -qq
+sudo add-apt-repository "deb http://$MIRROR_DOMAIN/pub/mariadb/repo/$VERSION/ubuntu $OS_CODENAME main"
+sudo apt-get update
+
+# Pin repository in order to avoid conflicts with MySQL from distribution
+# repository. See https://mariadb.com/kb/en/installing-mariadb-deb-files
+# section "Version Mismatch Between MariaDB and Ubuntu/Debian Repositories"
+echo "
+Package: *
+Pin: origin $MIRROR_DOMAIN
+Pin-Priority: 1000
+" | sudo tee /etc/apt/preferences.d/mariadb
sudo debconf-set-selections <<< "mariadb-server-$VERSION mysql-server/root_password password rootpasswd"
sudo debconf-set-selections <<< "mariadb-server-$VERSION mysql-server/root_password_again password rootpasswd"
-sudo apt-get install -qq mariadb-server
+sudo apt-get install -y mariadb-server
# Set root password to empty string.
echo "
diff --git a/travis/setup-webserver.sh b/travis/setup-webserver.sh
index 95fc4ec1f8..f1bf69c575 100755
--- a/travis/setup-webserver.sh
+++ b/travis/setup-webserver.sh
@@ -4,9 +4,10 @@
# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
#
set -e
+set -x
-sudo apt-get update -qq
-sudo apt-get install -qq nginx realpath
+sudo apt-get update
+sudo apt-get install -y nginx realpath
sudo service nginx stop