Файловый менеджер - Редактировать - /home/u368772545/domains/remushop.com/public_html/static/img/logo/wp-admin.tar
Ðазад
link-manager.php 0000644 00000010411 15013565477 0007634 0 ustar 00 <?php /** * Link Management Administration Screen. * * @package WordPress * @subpackage Administration */ /** Load WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'manage_links' ) ) { wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) ); } $wp_list_table = _get_list_table( 'WP_Links_List_Table' ); // Handle bulk deletes. $doaction = $wp_list_table->current_action(); if ( $doaction && isset( $_REQUEST['linkcheck'] ) ) { check_admin_referer( 'bulk-bookmarks' ); $redirect_to = admin_url( 'link-manager.php' ); $bulklinks = (array) $_REQUEST['linkcheck']; if ( 'delete' === $doaction ) { foreach ( $bulklinks as $link_id ) { $link_id = (int) $link_id; wp_delete_link( $link_id ); } $redirect_to = add_query_arg( 'deleted', count( $bulklinks ), $redirect_to ); } else { $screen = get_current_screen()->id; /** This action is documented in wp-admin/edit.php */ $redirect_to = apply_filters( "handle_bulk_actions-{$screen}", $redirect_to, $doaction, $bulklinks ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } wp_redirect( $redirect_to ); exit; } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } $wp_list_table->prepare_items(); // Used in the HTML title tag. $title = __( 'Links' ); $this_file = 'link-manager.php'; $parent_file = $this_file; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . sprintf( /* translators: %s: URL to Widgets screen. */ __( 'You can add links here to be displayed on your site, usually using <a href="%s">Widgets</a>. By default, links to several sites in the WordPress community are included as examples.' ), 'widgets.php' ) . '</p>' . '<p>' . __( 'Links may be separated into Link Categories; these are different than the categories used on your posts.' ) . '</p>' . '<p>' . __( 'You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'deleting-links', 'title' => __( 'Deleting Links' ), 'content' => '<p>' . __( 'If you delete a link, it will be removed permanently, as Links do not have a Trash function yet.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://codex.wordpress.org/Links_Screen">Documentation on Managing Links</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); get_current_screen()->set_screen_reader_content( array( 'heading_list' => __( 'Links list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( ! current_user_can( 'manage_links' ) ) { wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) ); } ?> <div class="wrap nosubsub"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <a href="link-add.php" class="page-title-action"><?php echo esc_html__( 'Add Link' ); ?></a> <?php if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) { echo '<span class="subtitle">'; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '<strong>' . esc_html( wp_unslash( $_REQUEST['s'] ) ) . '</strong>' ); echo '</span>'; } ?> <hr class="wp-header-end"> <?php if ( isset( $_REQUEST['deleted'] ) ) { $deleted = (int) $_REQUEST['deleted']; /* translators: %s: Number of links. */ $deleted_message = sprintf( _n( '%s link deleted.', '%s links deleted.', $deleted ), $deleted ); wp_admin_notice( $deleted_message, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'deleted' ), $_SERVER['REQUEST_URI'] ); } ?> <form id="posts-filter" method="get"> <?php $wp_list_table->search_box( __( 'Search Links' ), 'link' ); ?> <?php $wp_list_table->display(); ?> <div id="ajax-response"></div> </form> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; site-health-info.php 0000644 00000007770 15013565477 0010445 0 ustar 00 <?php /** * Tools Administration Screen. * * @package WordPress * @subpackage Administration */ if ( ! defined( 'ABSPATH' ) ) { die(); } if ( ! class_exists( 'WP_Debug_Data' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-debug-data.php'; } if ( ! class_exists( 'WP_Site_Health' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php'; } $health_check_site_status = WP_Site_Health::get_instance(); wp_admin_notice( __( 'The Site Health check requires JavaScript.' ), array( 'type' => 'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?> <div class="health-check-body health-check-debug-tab hide-if-no-js"> <?php WP_Debug_Data::check_for_updates(); $info = WP_Debug_Data::debug_data(); ?> <h2> <?php _e( 'Site Health Info' ); ?> </h2> <p> <?php /* translators: %s: URL to Site Health Status page. */ printf( __( 'This page can show you every detail about the configuration of your WordPress website. For any improvements that could be made, see the <a href="%s">Site Health Status</a> page.' ), esc_url( admin_url( 'site-health.php' ) ) ); ?> </p> <p> <?php _e( 'If you want to export a handy list of all the information on this page, you can use the button below to copy it to the clipboard. You can then paste it in a text file and save it to your device, or paste it in an email exchange with a support engineer or theme/plugin developer for example.' ); ?> </p> <div class="site-health-copy-buttons"> <div class="copy-button-wrapper"> <button type="button" class="button copy-button" data-clipboard-text="<?php echo esc_attr( WP_Debug_Data::format( $info, 'debug' ) ); ?>"> <?php _e( 'Copy site info to clipboard' ); ?> </button> <span class="success hidden" aria-hidden="true"><?php _e( 'Copied!' ); ?></span> </div> </div> <div id="health-check-debug" class="health-check-accordion"> <?php $sizes_fields = array( 'uploads_size', 'themes_size', 'plugins_size', 'fonts_size', 'wordpress_size', 'database_size', 'total_size' ); foreach ( $info as $section => $details ) { if ( ! isset( $details['fields'] ) || empty( $details['fields'] ) ) { continue; } ?> <h3 class="health-check-accordion-heading"> <button aria-expanded="false" class="health-check-accordion-trigger" aria-controls="health-check-accordion-block-<?php echo esc_attr( $section ); ?>" type="button"> <span class="title"> <?php echo esc_html( $details['label'] ); ?> <?php if ( isset( $details['show_count'] ) && $details['show_count'] ) { printf( '(%s)', number_format_i18n( count( $details['fields'] ) ) ); } ?> </span> <?php if ( 'wp-paths-sizes' === $section ) { ?> <span class="health-check-wp-paths-sizes spinner"></span> <?php } ?> <span class="icon"></span> </button> </h3> <div id="health-check-accordion-block-<?php echo esc_attr( $section ); ?>" class="health-check-accordion-panel" hidden="hidden"> <?php if ( isset( $details['description'] ) && ! empty( $details['description'] ) ) { printf( '<p>%s</p>', $details['description'] ); } ?> <table class="widefat striped health-check-table"> <tbody> <?php foreach ( $details['fields'] as $field_name => $field ) { if ( is_array( $field['value'] ) ) { $values = '<ul>'; foreach ( $field['value'] as $name => $value ) { $values .= sprintf( '<li>%s: %s</li>', esc_html( $name ), esc_html( $value ) ); } $values .= '</ul>'; } else { $values = esc_html( $field['value'] ); } if ( in_array( $field_name, $sizes_fields, true ) ) { printf( '<tr><th scope="row">%s</th><td class="%s">%s</td></tr>', esc_html( $field['label'] ), esc_attr( $field_name ), $values ); } else { printf( '<tr><th scope="row">%s</th><td>%s</td></tr>', esc_html( $field['label'] ), $values ); } } ?> </tbody> </table> </div> <?php } ?> </div> </div> admin-functions.php 0000644 00000000737 15013565477 0010377 0 ustar 00 <?php /** * Administration Functions * * This file is deprecated, use 'wp-admin/includes/admin.php' instead. * * @deprecated 2.5.0 * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } _deprecated_file( basename( __FILE__ ), '2.5.0', 'wp-admin/includes/admin.php' ); /** WordPress Administration API: Includes all Administration functions. */ require_once ABSPATH . 'wp-admin/includes/admin.php'; plugin-install.php 0000644 00000015724 15013565477 0010245 0 ustar 00 <?php /** * Install plugin administration panel. * * @package WordPress * @subpackage Administration */ // TODO: Route this page via a specific iframe handler instead of the do_action below. if ( ! defined( 'IFRAME_REQUEST' ) && isset( $_GET['tab'] ) && ( 'plugin-information' === $_GET['tab'] ) ) { define( 'IFRAME_REQUEST', true ); } /** * WordPress Administration Bootstrap. */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'install_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) ); } if ( is_multisite() && ! is_network_admin() ) { wp_redirect( network_admin_url( 'plugin-install.php' ) ); exit; } $wp_list_table = _get_list_table( 'WP_Plugin_Install_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { $location = remove_query_arg( '_wp_http_referer', wp_unslash( $_SERVER['REQUEST_URI'] ) ); if ( ! empty( $_REQUEST['paged'] ) ) { $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); } wp_redirect( $location ); exit; } $wp_list_table->prepare_items(); $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); if ( $pagenum > $total_pages && $total_pages > 0 ) { wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } // Used in the HTML title tag. $title = __( 'Add Plugins' ); $parent_file = 'plugins.php'; wp_enqueue_script( 'plugin-install' ); if ( 'plugin-information' !== $tab ) { add_thickbox(); } $body_id = $tab; wp_enqueue_script( 'updates' ); /** * Fires before each tab on the Install Plugins screen is loaded. * * The dynamic portion of the hook name, `$tab`, allows for targeting * individual tabs. * * Possible hook names include: * * - `install_plugins_pre_beta` * - `install_plugins_pre_favorites` * - `install_plugins_pre_featured` * - `install_plugins_pre_plugin-information` * - `install_plugins_pre_popular` * - `install_plugins_pre_recommended` * - `install_plugins_pre_search` * - `install_plugins_pre_upload` * * @since 2.7.0 */ do_action( "install_plugins_pre_{$tab}" ); /* * Call the pre upload action on every non-upload plugin installation screen * because the form is always displayed on these screens. */ if ( 'upload' !== $tab ) { /** This action is documented in wp-admin/plugin-install.php */ do_action( 'install_plugins_pre_upload' ); } get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . sprintf( /* translators: %s: https://wordpress.org/plugins/ */ __( 'Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official <a href="%s">WordPress Plugin Directory</a> are compatible with the license WordPress uses.' ), __( 'https://wordpress.org/plugins/' ) ) . '</p>' . '<p>' . __( 'You can find new plugins to install by searching or browsing the directory right here in your own Plugins section.' ) . ' <span id="live-search-desc" class="hide-if-no-js">' . __( 'The search results will be updated as you type.' ) . '</span></p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'adding-plugins', 'title' => __( 'Adding Plugins' ), 'content' => '<p>' . __( 'If you know what you are looking for, Search is your best bet. The Search screen has options to search the WordPress Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting popular tags. Tags in larger type mean more plugins have been labeled with that tag.' ) . '</p>' . '<p>' . __( 'If you just want to get an idea of what’s available, you can browse Featured and Popular plugins by using the links above the plugins list. These sections rotate regularly.' ) . '</p>' . '<p>' . __( 'You can also browse a user’s favorite plugins, by using the Favorites link above the plugins list and entering their WordPress.org username.' ) . '</p>' . '<p>' . __( 'If you want to install a plugin that you’ve downloaded elsewhere, click the Upload Plugin button above the plugins list. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/plugins-add-new-screen/">Documentation on Installing Plugins</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter plugins list' ), 'heading_pagination' => __( 'Plugins list navigation' ), 'heading_list' => __( 'Plugins list' ), ) ); /** * WordPress Administration Template Header. */ require_once ABSPATH . 'wp-admin/admin-header.php'; WP_Plugin_Dependencies::initialize(); WP_Plugin_Dependencies::display_admin_notice_for_unmet_dependencies(); WP_Plugin_Dependencies::display_admin_notice_for_circular_dependencies(); ?> <div class="wrap <?php echo esc_attr( "plugin-install-tab-$tab" ); ?>"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <?php if ( ! empty( $tabs['upload'] ) && current_user_can( 'upload_plugins' ) ) { printf( ' <a href="%s" class="upload-view-toggle page-title-action"><span class="upload">%s</span><span class="browse">%s</span></a>', ( 'upload' === $tab ) ? self_admin_url( 'plugin-install.php' ) : self_admin_url( 'plugin-install.php?tab=upload' ), __( 'Upload Plugin' ), __( 'Browse Plugins' ) ); } ?> <hr class="wp-header-end"> <?php /* * Output the upload plugin form on every non-upload plugin installation screen, so it can be * displayed via JavaScript rather then opening up the devoted upload plugin page. */ if ( 'upload' !== $tab ) { ?> <div class="upload-plugin-wrap"> <?php /** This action is documented in wp-admin/plugin-install.php */ do_action( 'install_plugins_upload' ); ?> </div> <?php $wp_list_table->views(); } /** * Fires after the plugins list table in each tab of the Install Plugins screen. * * The dynamic portion of the hook name, `$tab`, allows for targeting * individual tabs. * * Possible hook names include: * * - `install_plugins_beta` * - `install_plugins_favorites` * - `install_plugins_featured` * - `install_plugins_plugin-information` * - `install_plugins_popular` * - `install_plugins_recommended` * - `install_plugins_search` * - `install_plugins_upload` * * @since 2.7.0 * * @param int $paged The current page number of the plugins list table. */ do_action( "install_plugins_{$tab}", $paged ); ?> <span class="spinner"></span> </div> <?php wp_print_request_filesystem_credentials_modal(); wp_print_admin_notice_templates(); /** * WordPress Administration Template Footer. */ require_once ABSPATH . 'wp-admin/admin-footer.php'; privacy-policy-guide.php 0000644 00000007254 15013565477 0011347 0 ustar 00 <?php /** * Privacy Policy Guide Screen. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'manage_privacy_options' ) ) { wp_die( __( 'Sorry, you are not allowed to manage privacy options on this site.' ) ); } if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-privacy-policy-content.php'; } // Used in the HTML title tag. $title = __( 'Privacy Policy Guide' ); add_filter( 'admin_body_class', static function ( $body_class ) { $body_class .= ' privacy-settings '; return $body_class; } ); wp_enqueue_script( 'privacy-tools' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="privacy-settings-header"> <div class="privacy-settings-title-section"> <h1> <?php _e( 'Privacy' ); ?> </h1> </div> <nav class="privacy-settings-tabs-wrapper hide-if-no-js" aria-label="<?php esc_attr_e( 'Secondary menu' ); ?>"> <a href="<?php echo esc_url( admin_url( 'options-privacy.php' ) ); ?>" class="privacy-settings-tab"> <?php /* translators: Tab heading for Site Health Status page. */ _ex( 'Settings', 'Privacy Settings' ); ?> </a> <a href="<?php echo esc_url( admin_url( 'options-privacy.php?tab=policyguide' ) ); ?>" class="privacy-settings-tab active" aria-current="true"> <?php /* translators: Tab heading for Site Health Status page. */ _ex( 'Policy Guide', 'Privacy Settings' ); ?> </a> </nav> </div> <hr class="wp-header-end"> <?php wp_admin_notice( __( 'The Privacy Settings require JavaScript.' ), array( 'type' => 'error', 'additional_classes' => array( 'hide-if-js' ), ) ); ?> <div class="privacy-settings-body hide-if-no-js"> <h2><?php _e( 'Privacy Policy Guide' ); ?></h2> <h3 class="section-title"><?php _e( 'Introduction' ); ?></h3> <p><?php _e( 'This text template will help you to create your website’s privacy policy.' ); ?></p> <p><?php _e( 'The template contains a suggestion of sections you most likely will need. Under each section heading, you will find a short summary of what information you should provide, which will help you to get started. Some sections include suggested policy content, others will have to be completed with information from your theme and plugins.' ); ?></p> <p><?php _e( 'Please edit your privacy policy content, making sure to delete the summaries, and adding any information from your theme and plugins. Once you publish your policy page, remember to add it to your navigation menu.' ); ?></p> <p><?php _e( 'It is your responsibility to write a comprehensive privacy policy, to make sure it reflects all national and international legal requirements on privacy, and to keep your policy current and accurate.' ); ?></p> <div class="privacy-settings-accordion"> <h4 class="privacy-settings-accordion-heading"> <button aria-expanded="false" class="privacy-settings-accordion-trigger" aria-controls="privacy-settings-accordion-block-privacy-policy-guide" type="button"> <span class="title"><?php _e( 'Privacy Policy Guide' ); ?></span> <span class="icon"></span> </button> </h4> <div id="privacy-settings-accordion-block-privacy-policy-guide" class="privacy-settings-accordion-panel" hidden="hidden"> <?php $content = WP_Privacy_Policy_Content::get_default_content( true, false ); echo $content; ?> </div> </div> <hr class="hr-separator"> <h3 class="section-title"><?php _e( 'Policies' ); ?></h3> <div class="privacy-settings-accordion wp-privacy-policy-guide"> <?php WP_Privacy_Policy_Content::privacy_policy_guide(); ?> </div> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; options-permalink.php 0000644 00000052326 15013565477 0010755 0 ustar 00 <?php /** * Permalink Settings Administration Screen. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'manage_options' ) ) { wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) ); } // Used in the HTML title tag. $title = __( 'Permalink Settings' ); $parent_file = 'options-general.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink.' ) . '</p>' . '<p>' . __( 'This screen allows you to choose your permalink structure. You can choose from common settings or create custom URL structures.' ) . '</p>' . '<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'permalink-settings', 'title' => __( 'Permalink Settings' ), 'content' => '<p>' . __( 'Permalinks can contain useful information, such as the post date, title, or other elements. You can choose from any of the suggested permalink formats, or you can craft your own if you select Custom Structure.' ) . '</p>' . '<p>' . sprintf( /* translators: %s: Percent sign (%). */ __( 'If you pick an option other than Plain, your general URL path with structure tags (terms surrounded by %s) will also appear in the custom structure field and your path can be further modified there.' ), '<code>%</code>' ) . '</p>' . '<p>' . sprintf( /* translators: 1: %category%, 2: %tag% */ __( 'When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %1$s or %2$s.' ), '<code>%category%</code>', '<code>%tag%</code>' ) . '</p>' . '<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'custom-structures', 'title' => __( 'Custom Structures' ), 'content' => '<p>' . __( 'The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be <code>/topics/uncategorized</code> instead of <code>/category/uncategorized</code>.' ) . '</p>' . '<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>', ) ); $help_sidebar_content = '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/settings-permalinks-screen/">Documentation on Permalinks Settings</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/customize-permalinks/">Documentation on Using Permalinks</a>' ) . '</p>'; if ( $is_nginx ) { $help_sidebar_content .= '<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/server/web-server/nginx/">Documentation on Nginx configuration</a>.' ) . '</p>'; } $help_sidebar_content .= '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'; get_current_screen()->set_help_sidebar( $help_sidebar_content ); unset( $help_sidebar_content ); $home_path = get_home_path(); $iis7_permalinks = iis7_supports_permalinks(); $permalink_structure = get_option( 'permalink_structure' ); $index_php_prefix = ''; $blog_prefix = ''; if ( ! got_url_rewrite() ) { $index_php_prefix = '/index.php'; } /* * In a subdirectory configuration of multisite, the `/blog` prefix is used by * default on the main site to avoid collisions with other sites created on that * network. If the `permalink_structure` option has been changed to remove this * base prefix, WordPress core can no longer account for the possible collision. */ if ( is_multisite() && ! is_subdomain_install() && is_main_site() && str_starts_with( $permalink_structure, '/blog/' ) ) { $blog_prefix = '/blog'; } $category_base = get_option( 'category_base' ); $tag_base = get_option( 'tag_base' ); $structure_updated = false; $htaccess_update_required = false; if ( isset( $_POST['permalink_structure'] ) || isset( $_POST['category_base'] ) ) { check_admin_referer( 'update-permalink' ); if ( isset( $_POST['permalink_structure'] ) ) { if ( isset( $_POST['selection'] ) && 'custom' !== $_POST['selection'] ) { $permalink_structure = $_POST['selection']; } else { $permalink_structure = $_POST['permalink_structure']; } if ( ! empty( $permalink_structure ) ) { $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) ); if ( $index_php_prefix && $blog_prefix ) { $permalink_structure = $index_php_prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure ); } else { $permalink_structure = $blog_prefix . $permalink_structure; } } $permalink_structure = sanitize_option( 'permalink_structure', $permalink_structure ); $wp_rewrite->set_permalink_structure( $permalink_structure ); $structure_updated = true; } if ( isset( $_POST['category_base'] ) ) { $category_base = $_POST['category_base']; if ( ! empty( $category_base ) ) { $category_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $category_base ) ); } $wp_rewrite->set_category_base( $category_base ); } if ( isset( $_POST['tag_base'] ) ) { $tag_base = $_POST['tag_base']; if ( ! empty( $tag_base ) ) { $tag_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $tag_base ) ); } $wp_rewrite->set_tag_base( $tag_base ); } } if ( $iis7_permalinks ) { if ( ( ! file_exists( $home_path . 'web.config' ) && win_is_writable( $home_path ) ) || win_is_writable( $home_path . 'web.config' ) ) { $writable = true; } else { $writable = false; } } elseif ( $is_nginx || $is_caddy ) { $writable = false; } else { if ( ( ! file_exists( $home_path . '.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path . '.htaccess' ) ) { $writable = true; } else { $writable = false; $existing_rules = array_filter( extract_from_markers( $home_path . '.htaccess', 'WordPress' ) ); $new_rules = array_filter( explode( "\n", $wp_rewrite->mod_rewrite_rules() ) ); $htaccess_update_required = ( $new_rules !== $existing_rules ); } } $using_index_permalinks = $wp_rewrite->using_index_permalinks(); if ( $structure_updated ) { $message = __( 'Permalink structure updated.' ); if ( ! is_multisite() && $permalink_structure && ! $using_index_permalinks ) { if ( $iis7_permalinks ) { if ( ! $writable ) { $message = sprintf( /* translators: %s: web.config */ __( 'You should update your %s file now.' ), '<code>web.config</code>' ); } else { $message = sprintf( /* translators: %s: web.config */ __( 'Permalink structure updated. Remove write access on %s file now!' ), '<code>web.config</code>' ); } } elseif ( ! $is_nginx && ! $is_caddy && $htaccess_update_required && ! $writable ) { $message = sprintf( /* translators: %s: .htaccess */ __( 'You should update your %s file now.' ), '<code>.htaccess</code>' ); } } if ( ! get_settings_errors() ) { add_settings_error( 'general', 'settings_updated', $message, 'success' ); } set_transient( 'settings_errors', get_settings_errors(), 30 ); // 30 seconds. wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) ); exit; } flush_rewrite_rules(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <form name="form" action="options-permalink.php" method="post"> <?php wp_nonce_field( 'update-permalink' ); ?> <p> <?php printf( /* translators: %s: Documentation URL. */ __( 'WordPress offers you the ability to create a custom URL structure for your permalinks and archives. Custom URL structures can improve the aesthetics, usability, and forward-compatibility of your links. A <a href="%s">number of tags are available</a>, and here are some examples to get you started.' ), __( 'https://wordpress.org/documentation/article/customize-permalinks/' ) ); ?> </p> <?php if ( is_multisite() && ! is_subdomain_install() && is_main_site() && str_starts_with( $permalink_structure, '/blog/' ) ) { $permalink_structure = preg_replace( '|^/?blog|', '', $permalink_structure ); $category_base = preg_replace( '|^/?blog|', '', $category_base ); $tag_base = preg_replace( '|^/?blog|', '', $tag_base ); } $url_base = home_url( $blog_prefix . $index_php_prefix ); $default_structures = array( array( 'id' => 'plain', 'label' => __( 'Plain' ), 'value' => '', 'example' => home_url( '/?p=123' ), ), array( 'id' => 'day-name', 'label' => __( 'Day and name' ), 'value' => $index_php_prefix . '/%year%/%monthnum%/%day%/%postname%/', 'example' => $url_base . '/' . gmdate( 'Y/m/d' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/', ), array( 'id' => 'month-name', 'label' => __( 'Month and name' ), 'value' => $index_php_prefix . '/%year%/%monthnum%/%postname%/', 'example' => $url_base . '/' . gmdate( 'Y/m' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/', ), array( 'id' => 'numeric', 'label' => __( 'Numeric' ), 'value' => $index_php_prefix . '/' . _x( 'archives', 'sample permalink base' ) . '/%post_id%', 'example' => $url_base . '/' . _x( 'archives', 'sample permalink base' ) . '/123', ), array( 'id' => 'post-name', 'label' => __( 'Post name' ), 'value' => $index_php_prefix . '/%postname%/', 'example' => $url_base . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/', ), ); $default_structure_values = wp_list_pluck( $default_structures, 'value' ); $available_tags = array( /* translators: %s: Permalink structure tag. */ 'year' => __( '%s (The year of the post, four digits, for example 2004.)' ), /* translators: %s: Permalink structure tag. */ 'monthnum' => __( '%s (Month of the year, for example 05.)' ), /* translators: %s: Permalink structure tag. */ 'day' => __( '%s (Day of the month, for example 28.)' ), /* translators: %s: Permalink structure tag. */ 'hour' => __( '%s (Hour of the day, for example 15.)' ), /* translators: %s: Permalink structure tag. */ 'minute' => __( '%s (Minute of the hour, for example 43.)' ), /* translators: %s: Permalink structure tag. */ 'second' => __( '%s (Second of the minute, for example 33.)' ), /* translators: %s: Permalink structure tag. */ 'post_id' => __( '%s (The unique ID of the post, for example 423.)' ), /* translators: %s: Permalink structure tag. */ 'postname' => __( '%s (The sanitized post title (slug).)' ), /* translators: %s: Permalink structure tag. */ 'category' => __( '%s (Category slug. Nested sub-categories appear as nested directories in the URL.)' ), /* translators: %s: Permalink structure tag. */ 'author' => __( '%s (A sanitized version of the author name.)' ), ); /** * Filters the list of available permalink structure tags on the Permalinks settings page. * * @since 4.9.0 * * @param string[] $available_tags An array of key => value pairs of available permalink structure tags. */ $available_tags = apply_filters( 'available_permalink_structure_tags', $available_tags ); /* translators: %s: Permalink structure tag. */ $tag_added = __( '%s added to permalink structure' ); /* translators: %s: Permalink structure tag. */ $tag_removed = __( '%s removed from permalink structure' ); /* translators: %s: Permalink structure tag. */ $tag_already_used = __( '%s (already used in permalink structure)' ); ?> <h2 class="title"><?php _e( 'Common Settings' ); ?></h2> <p> <?php printf( /* translators: %s: %postname% */ __( 'Select the permalink structure for your website. Including the %s tag makes links easy to understand, and can help your posts rank higher in search engines.' ), '<code>%postname%</code>' ); ?> </p> <table class="form-table permalink-structure" role="presentation"> <tbody> <tr> <th scope="row"><?php _e( 'Permalink structure' ); ?></th> <td> <fieldset class="structure-selection"> <legend class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Permalink structure' ); ?> </legend> <?php foreach ( $default_structures as $input ) : ?> <div class="row"> <input id="permalink-input-<?php echo esc_attr( $input['id'] ); ?>" name="selection" aria-describedby="permalink-<?php echo esc_attr( $input['id'] ); ?>" type="radio" value="<?php echo esc_attr( $input['value'] ); ?>" <?php checked( $input['value'], $permalink_structure ); ?> /> <div> <label for="permalink-input-<?php echo esc_attr( $input['id'] ); ?>"> <?php echo esc_html( $input['label'] ); ?> </label> <p> <code id="permalink-<?php echo esc_attr( $input['id'] ); ?>"> <?php echo esc_html( $input['example'] ); ?> </code> </p> </div> </div><!-- .row --> <?php endforeach; ?> <div class="row"> <input id="custom_selection" name="selection" type="radio" value="custom" <?php checked( ! in_array( $permalink_structure, $default_structure_values, true ) ); ?> /> <div> <label for="custom_selection"><?php _e( 'Custom Structure' ); ?></label> <p> <label for="permalink_structure" class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Customize permalink structure by selecting available tags' ); ?> </label> <span class="code"> <code id="permalink-custom"><?php echo esc_url( $url_base ); ?></code> <input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr( $permalink_structure ); ?>" aria-describedby="permalink-custom" class="regular-text code" /> </span> </p> <div class="available-structure-tags hide-if-no-js"> <div id="custom_selection_updated" aria-live="assertive" class="screen-reader-text"></div> <?php if ( ! empty( $available_tags ) ) : ?> <fieldset> <legend><?php _e( 'Available tags:' ); ?></legend> <ul role="list"> <?php foreach ( $available_tags as $tag => $explanation ) : ?> <li> <button type="button" class="button button-secondary" aria-label="<?php echo esc_attr( sprintf( $explanation, $tag ) ); ?>" data-added="<?php echo esc_attr( sprintf( $tag_added, $tag ) ); ?>" data-removed="<?php echo esc_attr( sprintf( $tag_removed, $tag ) ); ?>" data-used="<?php echo esc_attr( sprintf( $tag_already_used, $tag ) ); ?>"> <?php echo '%' . esc_html( $tag ) . '%'; ?> </button> </li> <?php endforeach; ?> </ul> </fieldset> <?php endif; ?> </div><!-- .available-structure-tags --> </div> </div><!-- .row --> </fieldset><!-- .structure-selection --> </td> </tr> </tbody> </table> <h2 class="title"><?php _e( 'Optional' ); ?></h2> <p> <?php printf( /* translators: %s: Placeholder that must come at the start of the URL. */ __( 'If you like, you may enter custom structures for your category and tag URLs here. For example, using <code>topics</code> as your category base would make your category links like <code>%s/topics/uncategorized/</code>. If you leave these blank the defaults will be used.' ), $url_base ); ?> </p> <table class="form-table" role="presentation"> <tr> <th> <label for="category_base"> <?php /* translators: Prefix for category permalinks. */ _e( 'Category base' ); ?> </label> </th> <td> <?php echo $blog_prefix; ?> <input name="category_base" id="category_base" type="text" value="<?php echo esc_attr( $category_base ); ?>" class="regular-text code" /> </td> </tr> <tr> <th> <label for="tag_base"><?php _e( 'Tag base' ); ?></label> </th> <td> <?php echo $blog_prefix; ?> <input name="tag_base" id="tag_base" type="text" value="<?php echo esc_attr( $tag_base ); ?>" class="regular-text code" /> </td> </tr> <?php do_settings_fields( 'permalink', 'optional' ); ?> </table> <?php do_settings_sections( 'permalink' ); ?> <?php submit_button(); ?> </form> <?php if ( ! is_multisite() ) : ?> <?php if ( $iis7_permalinks ) : if ( isset( $_POST['submit'] ) && $permalink_structure && ! $using_index_permalinks && ! $writable ) : if ( file_exists( $home_path . 'web.config' ) ) : ?> <p id="iis-description-a"> <?php printf( /* translators: 1: web.config, 2: Documentation URL, 3: Ctrl + A, 4: ⌘ + A, 5: Element code. */ __( '<strong>Error:</strong> Your %1$s file is not <a href="%2$s">writable</a>, so updating it automatically was not possible. This is the URL rewrite rule you should have in your %1$s file. Click in the field and press %3$s (or %4$s on Mac) to select all. Then insert this rule inside of the %5$s element in %1$s file.' ), '<code>web.config</code>', __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ), '<kbd>Ctrl + A</kbd>', '<kbd>⌘ + A</kbd>', '<code>/<configuration>/<system.webServer>/<rewrite>/<rules></code>' ); ?> </p> <form action="options-permalink.php" method="post"> <?php wp_nonce_field( 'update-permalink' ); ?> <p> <label for="rules"><?php _e( 'Rewrite rules:' ); ?></label><br /> <textarea rows="9" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="iis-description-a" ><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules() ); ?></textarea> </p> </form> <p> <?php printf( /* translators: %s: web.config */ __( 'If you temporarily make your %s file writable to generate rewrite rules automatically, do not forget to revert the permissions after the rule has been saved.' ), '<code>web.config</code>' ); ?> </p> <?php else : ?> <p id="iis-description-b"> <?php printf( /* translators: 1: Documentation URL, 2: web.config, 3: Ctrl + A, 4: ⌘ + A */ __( '<strong>Error:</strong> The root directory of your site is not <a href="%1$s">writable</a>, so creating a file automatically was not possible. This is the URL rewrite rule you should have in your %2$s file. Create a new file called %2$s in the root directory of your site. Click in the field and press %3$s (or %4$s on Mac) to select all. Then insert this code into the %2$s file.' ), __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ), '<code>web.config</code>', '<kbd>Ctrl + A</kbd>', '<kbd>⌘ + A</kbd>' ); ?> </p> <form action="options-permalink.php" method="post"> <?php wp_nonce_field( 'update-permalink' ); ?> <p> <label for="rules"><?php _e( 'Rewrite rules:' ); ?></label><br /> <textarea rows="18" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="iis-description-b" ><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules( true ) ); ?></textarea> </p> </form> <p> <?php printf( /* translators: %s: web.config */ __( 'If you temporarily make your site’s root directory writable to generate the %s file automatically, do not forget to revert the permissions after the file has been created.' ), '<code>web.config</code>' ); ?> </p> <?php endif; // End if 'web.config' exists. ?> <?php endif; // End if $_POST['submit'] && ! $writable. ?> <?php else : ?> <?php if ( $permalink_structure && ! $using_index_permalinks && ! $writable && $htaccess_update_required ) : ?> <p id="htaccess-description"> <?php printf( /* translators: 1: .htaccess, 2: Documentation URL, 3: Ctrl + A, 4: ⌘ + A */ __( '<strong>Error:</strong> Your %1$s file is not <a href="%2$s">writable</a>, so updating it automatically was not possible. These are the mod_rewrite rules you should have in your %1$s file. Click in the field and press %3$s (or %4$s on Mac) to select all.' ), '<code>.htaccess</code>', __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ), '<kbd>Ctrl + A</kbd>', '<kbd>⌘ + A</kbd>' ); ?> </p> <form action="options-permalink.php" method="post"> <?php wp_nonce_field( 'update-permalink' ); ?> <p> <label for="rules"><?php _e( 'Rewrite rules:' ); ?></label><br /> <textarea rows="8" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="htaccess-description" ><?php echo esc_textarea( $wp_rewrite->mod_rewrite_rules() ); ?></textarea> </p> </form> <?php endif; // End if ! $writable && $htaccess_update_required. ?> <?php endif; // End if $iis7_permalinks. ?> <?php endif; // End if ! is_multisite(). ?> </div><!-- .wrap --> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> users.php 0000644 00000056436 15013565477 0006451 0 ustar 00 <?php /** * User administration panel * * @package WordPress * @subpackage Administration * @since 1.0.0 */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'list_users' ) ) { wp_die( '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' . '<p>' . __( 'Sorry, you are not allowed to list users.' ) . '</p>', 403 ); } $wp_list_table = _get_list_table( 'WP_Users_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); // Used in the HTML title tag. $title = __( 'Users' ); $parent_file = 'users.php'; add_screen_option( 'per_page' ); // Contextual help - choose Help on the top right of admin panel to preview this. get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.' ) . '</p>' . '<p>' . __( 'To add a new user for your site, click the Add User button at the top of the screen or Add User in the Users menu section.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'screen-content', 'title' => __( 'Screen Content' ), 'content' => '<p>' . __( 'You can customize the display of this screen in a number of ways:' ) . '</p>' . '<ul>' . '<li>' . __( 'You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.' ) . '</li>' . '<li>' . __( 'You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.' ) . '</li>' . '<li>' . __( 'You can view all posts made by a user by clicking on the number under the Posts column.' ) . '</li>' . '</ul>', ) ); $help = '<p>' . __( 'Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:' ) . '</p>' . '<ul>' . '<li>' . __( '<strong>Edit</strong> takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.' ) . '</li>'; if ( is_multisite() ) { $help .= '<li>' . __( '<strong>Remove</strong> allows you to remove a user from your site. It does not delete their content. You can also remove multiple users at once by using bulk actions.' ) . '</li>'; } else { $help .= '<li>' . __( '<strong>Delete</strong> brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their content. You can also delete multiple users at once by using bulk actions.' ) . '</li>'; } $help .= '<li>' . __( '<strong>View</strong> takes you to a public author archive which lists all the posts published by the user.' ) . '</li>'; if ( current_user_can( 'edit_users' ) ) { $help .= '<li>' . __( '<strong>Send password reset</strong> sends the user an email with a link to set a new password.' ) . '</li>'; } $help .= '</ul>'; get_current_screen()->add_help_tab( array( 'id' => 'action-links', 'title' => __( 'Available Actions' ), 'content' => $help, ) ); unset( $help ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/users-screen/">Documentation on Managing Users</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/roles-and-capabilities/">Descriptions of Roles and Capabilities</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter users list' ), 'heading_pagination' => __( 'Users list navigation' ), 'heading_list' => __( 'Users list' ), ) ); if ( empty( $_REQUEST ) ) { $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />'; } elseif ( isset( $_REQUEST['wp_http_referer'] ) ) { $redirect = remove_query_arg( array( 'wp_http_referer', 'updated', 'delete_count' ), wp_unslash( $_REQUEST['wp_http_referer'] ) ); $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr( $redirect ) . '" />'; } else { $redirect = 'users.php'; $referer = ''; } $update = ''; switch ( $wp_list_table->current_action() ) { /* Bulk Dropdown menu Role changes */ case 'promote': check_admin_referer( 'bulk-users' ); if ( ! current_user_can( 'promote_users' ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); } if ( empty( $_REQUEST['users'] ) ) { wp_redirect( $redirect ); exit; } $editable_roles = get_editable_roles(); $role = $_REQUEST['new_role']; // Mocking the `none` role so we are able to save it to the database $editable_roles['none'] = array( 'name' => __( '— No role for this site —' ), ); if ( ! $role || empty( $editable_roles[ $role ] ) ) { wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); } if ( 'none' === $role ) { $role = ''; } $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); $update = 'promote'; foreach ( $user_ids as $id ) { if ( ! current_user_can( 'promote_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); } // The new role of the current user must also have the promote_users cap or be a multisite super admin. if ( $id === $current_user->ID && ! $wp_roles->role_objects[ $role ]->has_cap( 'promote_users' ) && ! ( is_multisite() && current_user_can( 'manage_network_users' ) ) ) { $update = 'err_admin_role'; continue; } // If the user doesn't already belong to the blog, bail. if ( is_multisite() && ! is_user_member_of_blog( $id ) ) { wp_die( '<h1>' . __( 'An error occurred.' ) . '</h1>' . '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>', 403 ); } $user = get_userdata( $id ); $user->set_role( $role ); } wp_redirect( add_query_arg( 'update', $update, $redirect ) ); exit; case 'dodelete': if ( is_multisite() ) { wp_die( __( 'User deletion is not allowed from this screen.' ), 400 ); } check_admin_referer( 'delete-users' ); if ( empty( $_REQUEST['users'] ) ) { wp_redirect( $redirect ); exit; } $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); if ( empty( $_REQUEST['delete_option'] ) ) { $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $user_ids ) . '&error=true' ); $url = str_replace( '&', '&', wp_nonce_url( $url, 'bulk-users' ) ); wp_redirect( $url ); exit; } if ( ! current_user_can( 'delete_users' ) ) { wp_die( __( 'Sorry, you are not allowed to delete users.' ), 403 ); } $update = 'del'; $delete_count = 0; foreach ( $user_ids as $id ) { if ( ! current_user_can( 'delete_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to delete that user.' ), 403 ); } if ( $id === $current_user->ID ) { $update = 'err_admin_del'; continue; } switch ( $_REQUEST['delete_option'] ) { case 'delete': wp_delete_user( $id ); break; case 'reassign': wp_delete_user( $id, $_REQUEST['reassign_user'] ); break; } ++$delete_count; } $redirect = add_query_arg( array( 'delete_count' => $delete_count, 'update' => $update, ), $redirect ); wp_redirect( $redirect ); exit; case 'resetpassword': check_admin_referer( 'bulk-users' ); if ( ! current_user_can( 'edit_users' ) ) { $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to edit users.' ) ); } if ( empty( $_REQUEST['users'] ) ) { wp_redirect( $redirect ); exit(); } $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); $reset_count = 0; foreach ( $user_ids as $id ) { if ( ! current_user_can( 'edit_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ) ); } if ( $id === $current_user->ID ) { $update = 'err_admin_reset'; continue; } // Send the password reset link. $user = get_userdata( $id ); if ( true === retrieve_password( $user->user_login ) ) { ++$reset_count; } } $redirect = add_query_arg( array( 'reset_count' => $reset_count, 'update' => 'resetpassword', ), $redirect ); wp_redirect( $redirect ); exit; case 'delete': if ( is_multisite() ) { wp_die( __( 'User deletion is not allowed from this screen.' ), 400 ); } check_admin_referer( 'bulk-users' ); if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) { wp_redirect( $redirect ); exit; } if ( ! current_user_can( 'delete_users' ) ) { $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to delete users.' ) ); } if ( empty( $_REQUEST['users'] ) ) { $user_ids = array( (int) $_REQUEST['user'] ); } else { $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); } $all_user_ids = $user_ids; if ( in_array( $current_user->ID, $user_ids, true ) ) { $user_ids = array_diff( $user_ids, array( $current_user->ID ) ); } /** * Filters whether the users being deleted have additional content * associated with them outside of the `post_author` and `link_owner` relationships. * * @since 5.2.0 * * @param bool $users_have_additional_content Whether the users have additional content. Default false. * @param int[] $user_ids Array of IDs for users being deleted. */ $users_have_content = (bool) apply_filters( 'users_have_additional_content', false, $user_ids ); if ( $user_ids && ! $users_have_content ) { if ( $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE post_author IN( " . implode( ',', $user_ids ) . ' ) LIMIT 1' ) ) { $users_have_content = true; } elseif ( $wpdb->get_var( "SELECT link_id FROM {$wpdb->links} WHERE link_owner IN( " . implode( ',', $user_ids ) . ' ) LIMIT 1' ) ) { $users_have_content = true; } } if ( $users_have_content ) { add_action( 'admin_head', 'delete_users_add_js' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <form method="post" name="updateusers" id="updateusers"> <?php wp_nonce_field( 'delete-users' ); ?> <?php echo $referer; ?> <div class="wrap"> <h1><?php _e( 'Delete Users' ); ?></h1> <?php if ( isset( $_REQUEST['error'] ) ) : wp_admin_notice( '<strong>' . __( 'Error:' ) . '</strong> ' . __( 'Please select an option.' ), array( 'additional_classes' => array( 'error' ), ) ); endif; ?> <?php if ( 1 === count( $all_user_ids ) ) : ?> <p><?php _e( 'You have specified this user for deletion:' ); ?></p> <?php else : ?> <p><?php _e( 'You have specified these users for deletion:' ); ?></p> <?php endif; ?> <ul> <?php $go_delete = 0; foreach ( $all_user_ids as $id ) { $user = get_userdata( $id ); if ( $id === $current_user->ID ) { echo '<li>'; printf( /* translators: 1: User ID, 2: User login. */ __( 'ID #%1$s: %2$s <strong>The current user will not be deleted.</strong>' ), $id, $user->user_login ); echo "</li>\n"; } else { echo '<li>'; printf( '<input type="hidden" name="users[]" value="%s" />', esc_attr( $id ) ); printf( /* translators: 1: User ID, 2: User login. */ __( 'ID #%1$s: %2$s' ), $id, $user->user_login ); echo "</li>\n"; ++$go_delete; } } ?> </ul> <?php if ( $go_delete ) : if ( ! $users_have_content ) : ?> <input type="hidden" name="delete_option" value="delete" /> <?php else : ?> <fieldset> <?php if ( 1 === $go_delete ) : ?> <p><legend><?php _e( 'What should be done with content owned by this user?' ); ?></legend></p> <?php else : ?> <p><legend><?php _e( 'What should be done with content owned by these users?' ); ?></legend></p> <?php endif; ?> <ul style="list-style:none;"> <li> <input type="radio" id="delete_option0" name="delete_option" value="delete" /> <label for="delete_option0"><?php _e( 'Delete all content.' ); ?></label> </li> <li> <input type="radio" id="delete_option1" name="delete_option" value="reassign" /> <label for="delete_option1"><?php _e( 'Attribute all content to:' ); ?></label> <?php wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => $user_ids, 'show' => 'display_name_with_login', ) ); ?> </li> </ul> </fieldset> <?php endif; /** * Fires at the end of the delete users form prior to the confirm button. * * @since 4.0.0 * @since 4.5.0 The `$user_ids` parameter was added. * * @param WP_User $current_user WP_User object for the current user. * @param int[] $user_ids Array of IDs for users being deleted. */ do_action( 'delete_user_form', $current_user, $user_ids ); ?> <input type="hidden" name="action" value="dodelete" /> <?php submit_button( __( 'Confirm Deletion' ), 'primary' ); ?> <?php else : ?> <p><?php _e( 'There are no valid users selected for deletion.' ); ?></p> <?php endif; ?> </div><!-- .wrap --> </form><!-- #updateusers --> <?php break; case 'doremove': check_admin_referer( 'remove-users' ); if ( ! is_multisite() ) { wp_die( __( 'You cannot remove users.' ), 400 ); } if ( empty( $_REQUEST['users'] ) ) { wp_redirect( $redirect ); exit; } if ( ! current_user_can( 'remove_users' ) ) { wp_die( __( 'Sorry, you are not allowed to remove users.' ), 403 ); } $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); $update = 'remove'; foreach ( $user_ids as $id ) { if ( ! current_user_can( 'remove_user', $id ) ) { $update = 'err_admin_remove'; continue; } remove_user_from_blog( $id, $blog_id ); } $redirect = add_query_arg( array( 'update' => $update ), $redirect ); wp_redirect( $redirect ); exit; case 'remove': check_admin_referer( 'bulk-users' ); if ( ! is_multisite() ) { wp_die( __( 'You cannot remove users.' ), 400 ); } if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) { wp_redirect( $redirect ); exit; } if ( ! current_user_can( 'remove_users' ) ) { $error = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to remove users.' ) ); } if ( empty( $_REQUEST['users'] ) ) { $user_ids = array( (int) $_REQUEST['user'] ); } else { $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <form method="post" name="updateusers" id="updateusers"> <?php wp_nonce_field( 'remove-users' ); ?> <?php echo $referer; ?> <div class="wrap"> <h1><?php _e( 'Remove Users from Site' ); ?></h1> <?php if ( 1 === count( $user_ids ) ) : ?> <p><?php _e( 'You have specified this user for removal:' ); ?></p> <?php else : ?> <p><?php _e( 'You have specified these users for removal:' ); ?></p> <?php endif; ?> <ul> <?php $go_remove = false; foreach ( $user_ids as $id ) { $user = get_userdata( $id ); if ( ! current_user_can( 'remove_user', $id ) ) { echo '<li>'; printf( /* translators: 1: User ID, 2: User login. */ __( 'ID #%1$s: %2$s <strong>Sorry, you are not allowed to remove this user.</strong>' ), $id, $user->user_login ); echo "</li>\n"; } else { echo '<li>'; printf( '<input type="hidden" name="users[]" value="%s" />', esc_attr( $id ) ); printf( /* translators: 1: User ID, 2: User login. */ __( 'ID #%1$s: %2$s' ), $id, $user->user_login ); echo "</li>\n"; $go_remove = true; } } ?> </ul> <?php if ( $go_remove ) : ?> <input type="hidden" name="action" value="doremove" /> <?php submit_button( __( 'Confirm Removal' ), 'primary' ); ?> <?php else : ?> <p><?php _e( 'There are no valid users selected for removal.' ); ?></p> <?php endif; ?> </div><!-- .wrap --> </form><!-- #updateusers --> <?php break; default: if ( ! empty( $_GET['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } if ( $wp_list_table->current_action() && ! empty( $_REQUEST['users'] ) ) { $screen = get_current_screen()->id; $sendback = wp_get_referer(); $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); /** This action is documented in wp-admin/edit.php */ $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $wp_list_table->current_action(), $user_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $sendback ); exit; } $wp_list_table->prepare_items(); $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); if ( $pagenum > $total_pages && $total_pages > 0 ) { wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } require_once ABSPATH . 'wp-admin/admin-header.php'; $messages = array(); if ( isset( $_GET['update'] ) ) : switch ( $_GET['update'] ) { case 'del': case 'del_many': $delete_count = isset( $_GET['delete_count'] ) ? (int) $_GET['delete_count'] : 0; if ( 1 === $delete_count ) { $message = __( 'User deleted.' ); } else { /* translators: %s: Number of users. */ $message = _n( '%s user deleted.', '%s users deleted.', $delete_count ); } $message = sprintf( $message, number_format_i18n( $delete_count ) ); $messages[] = wp_get_admin_notice( $message, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'add': $message = __( 'New user created.' ); $user_id = isset( $_GET['id'] ) ? $_GET['id'] : false; if ( $user_id && current_user_can( 'edit_user', $user_id ) ) { $message .= sprintf( ' <a href="%1$s">%2$s</a>', esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ), __( 'Edit user' ) ); } $messages[] = wp_get_admin_notice( $message, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'resetpassword': $reset_count = isset( $_GET['reset_count'] ) ? (int) $_GET['reset_count'] : 0; if ( 1 === $reset_count ) { $message = __( 'Password reset link sent.' ); } else { /* translators: %s: Number of users. */ $message = _n( 'Password reset links sent to %s user.', 'Password reset links sent to %s users.', $reset_count ); } $message = sprintf( $message, number_format_i18n( $reset_count ) ); $messages[] = wp_get_admin_notice( $message, array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'promote': $messages[] = wp_get_admin_notice( __( 'Changed roles.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'err_admin_role': $messages[] = wp_get_admin_notice( __( 'The current user’s role must have user editing capabilities.' ), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); $messages[] = wp_get_admin_notice( __( 'Other user roles have been changed.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'err_admin_del': $messages[] = wp_get_admin_notice( __( 'You cannot delete the current user.' ), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); $messages[] = wp_get_admin_notice( __( 'Other users have been deleted.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); break; case 'remove': $messages[] = wp_get_admin_notice( __( 'User removed from this site.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated', 'fade' ), 'dismissible' => true, ) ); break; case 'err_admin_remove': $messages[] = wp_get_admin_notice( __( 'You cannot remove the current user.' ), array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); $messages[] = wp_get_admin_notice( __( 'Other users have been removed.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated', 'fade' ), 'dismissible' => true, ) ); break; } endif; ?> <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : $error_message = ''; foreach ( $errors->get_error_messages() as $err ) { $error_message .= "<li>$err</li>\n"; } wp_admin_notice( '<ul>' . $error_message . '</ul>', array( 'additional_classes' => array( 'error' ), ) ); endif; if ( ! empty( $messages ) ) { foreach ( $messages as $msg ) { echo $msg; } } ?> <div class="wrap"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <?php if ( current_user_can( 'create_users' ) ) { printf( '<a href="%1$s" class="page-title-action">%2$s</a>', esc_url( admin_url( 'user-new.php' ) ), esc_html__( 'Add User' ) ); } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { printf( '<a href="%1$s" class="page-title-action">%2$s</a>', esc_url( admin_url( 'user-new.php' ) ), esc_html__( 'Add Existing User' ) ); } if ( strlen( $usersearch ) ) { echo '<span class="subtitle">'; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '<strong>' . esc_html( $usersearch ) . '</strong>' ); echo '</span>'; } ?> <hr class="wp-header-end"> <?php $wp_list_table->views(); ?> <form method="get"> <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> <?php if ( ! empty( $_REQUEST['role'] ) ) { ?> <input type="hidden" name="role" value="<?php echo esc_attr( $_REQUEST['role'] ); ?>" /> <?php } ?> <?php $wp_list_table->display(); ?> </form> <div class="clear"></div> </div><!-- .wrap --> <?php break; } // End of the $doaction switch. require_once ABSPATH . 'wp-admin/admin-footer.php'; media.php 0000644 00000001463 15013565477 0006355 0 ustar 00 <?php /** * Media management action handler. * * This file is deprecated, use 'wp-admin/upload.php' instead. * * @deprecated 6.3.0 * @package WordPress * @subpackage Administration */ /** Load WordPress Administration Bootstrap. */ require_once __DIR__ . '/admin.php'; $parent_file = 'upload.php'; $submenu_file = 'upload.php'; $action = ! empty( $_REQUEST['action'] ) ? sanitize_text_field( $_REQUEST['action'] ) : ''; switch ( $action ) { case 'editattachment': case 'edit': if ( empty( $_GET['attachment_id'] ) ) { wp_redirect( admin_url( 'upload.php?error=deprecated' ) ); exit; } $att_id = (int) $_GET['attachment_id']; wp_redirect( admin_url( "upload.php?item={$att_id}&error=deprecated" ) ); exit; default: wp_redirect( admin_url( 'upload.php?error=deprecated' ) ); exit; } update.php 0000644 00000031444 15013565477 0006562 0 ustar 00 <?php /** * Update/Install Plugin/Theme administration panel. * * @package WordPress * @subpackage Administration */ if ( ! defined( 'IFRAME_REQUEST' ) && isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ), true ) ) { define( 'IFRAME_REQUEST', true ); } /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; wp_enqueue_script( 'wp-a11y' ); if ( isset( $_GET['action'] ) ) { $plugin = isset( $_REQUEST['plugin'] ) ? trim( $_REQUEST['plugin'] ) : ''; $theme = isset( $_REQUEST['theme'] ) ? urldecode( $_REQUEST['theme'] ) : ''; $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : ''; if ( 'update-selected' === $action ) { if ( ! current_user_can( 'update_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) ); } check_admin_referer( 'bulk-update-plugins' ); if ( isset( $_GET['plugins'] ) ) { $plugins = explode( ',', stripslashes( $_GET['plugins'] ) ); } elseif ( isset( $_POST['checked'] ) ) { $plugins = (array) $_POST['checked']; } else { $plugins = array(); } $plugins = array_map( 'urldecode', $plugins ); $url = 'update.php?action=update-selected&plugins=' . urlencode( implode( ',', $plugins ) ); $nonce = 'bulk-update-plugins'; wp_enqueue_script( 'updates' ); iframe_header(); $upgrader = new Plugin_Upgrader( new Bulk_Plugin_Upgrader_Skin( compact( 'nonce', 'url' ) ) ); $upgrader->bulk_upgrade( $plugins ); iframe_footer(); } elseif ( 'upgrade-plugin' === $action ) { if ( ! current_user_can( 'update_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) ); } check_admin_referer( 'upgrade-plugin_' . $plugin ); // Used in the HTML title tag. $title = __( 'Update Plugin' ); $parent_file = 'plugins.php'; $submenu_file = 'plugins.php'; wp_enqueue_script( 'updates' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $nonce = 'upgrade-plugin_' . $plugin; $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin ); $upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) ) ); $upgrader->upgrade( $plugin ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'activate-plugin' === $action ) { if ( ! current_user_can( 'update_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to update plugins for this site.' ) ); } check_admin_referer( 'activate-plugin_' . $plugin ); if ( ! isset( $_GET['failure'] ) && ! isset( $_GET['success'] ) ) { wp_redirect( admin_url( 'update.php?action=activate-plugin&failure=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce'] ) ); activate_plugin( $plugin, '', ! empty( $_GET['networkwide'] ), true ); wp_redirect( admin_url( 'update.php?action=activate-plugin&success=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce'] ) ); die(); } iframe_header( __( 'Plugin Reactivation' ), true ); if ( isset( $_GET['success'] ) ) { echo '<p>' . __( 'Plugin reactivated successfully.' ) . '</p>'; } if ( isset( $_GET['failure'] ) ) { echo '<p>' . __( 'Plugin failed to reactivate due to a fatal error.' ) . '</p>'; error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); ini_set( 'display_errors', true ); // Ensure that fatal errors are displayed. wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); include WP_PLUGIN_DIR . '/' . $plugin; } iframe_footer(); } elseif ( 'install-plugin' === $action ) { if ( ! current_user_can( 'install_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) ); } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // For plugins_api(). check_admin_referer( 'install-plugin_' . $plugin ); $api = plugins_api( 'plugin_information', array( 'slug' => $plugin, 'fields' => array( 'sections' => false, ), ) ); if ( is_wp_error( $api ) ) { wp_die( $api ); } // Used in the HTML title tag. $title = __( 'Plugin Installation' ); $parent_file = 'plugins.php'; $submenu_file = 'plugin-install.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; /* translators: %s: Plugin name and version. */ $title = sprintf( __( 'Installing Plugin: %s' ), $api->name . ' ' . $api->version ); $nonce = 'install-plugin_' . $plugin; $url = 'update.php?action=install-plugin&plugin=' . urlencode( $plugin ); if ( isset( $_GET['from'] ) ) { $url .= '&from=' . urlencode( stripslashes( $_GET['from'] ) ); } $type = 'web'; // Install plugin type, From Web or an Upload. $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) ); $upgrader->install( $api->download_link ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'upload-plugin' === $action ) { if ( ! current_user_can( 'upload_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) ); } check_admin_referer( 'plugin-upload' ); if ( isset( $_FILES['pluginzip']['name'] ) && ! str_ends_with( strtolower( $_FILES['pluginzip']['name'] ), '.zip' ) ) { wp_die( __( 'Only .zip archives may be uploaded.' ) ); } $file_upload = new File_Upload_Upgrader( 'pluginzip', 'package' ); // Used in the HTML title tag. $title = __( 'Upload Plugin' ); $parent_file = 'plugins.php'; $submenu_file = 'plugin-install.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; /* translators: %s: File name. */ $title = sprintf( __( 'Installing plugin from uploaded file: %s' ), esc_html( basename( $file_upload->filename ) ) ); $nonce = 'plugin-upload'; $url = add_query_arg( array( 'package' => $file_upload->id ), 'update.php?action=upload-plugin' ); $type = 'upload'; // Install plugin type, From Web or an Upload. $overwrite = isset( $_GET['overwrite'] ) ? sanitize_text_field( $_GET['overwrite'] ) : ''; $overwrite = in_array( $overwrite, array( 'update-plugin', 'downgrade-plugin' ), true ) ? $overwrite : ''; $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact( 'type', 'title', 'nonce', 'url', 'overwrite' ) ) ); $result = $upgrader->install( $file_upload->package, array( 'overwrite_package' => $overwrite ) ); if ( $result || is_wp_error( $result ) ) { $file_upload->cleanup(); } require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'upload-plugin-cancel-overwrite' === $action ) { if ( ! current_user_can( 'upload_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to install plugins on this site.' ) ); } check_admin_referer( 'plugin-upload-cancel-overwrite' ); // Make sure the attachment still exists, or File_Upload_Upgrader will call wp_die() // that shows a generic "Please select a file" error. if ( ! empty( $_GET['package'] ) ) { $attachment_id = (int) $_GET['package']; if ( get_post( $attachment_id ) ) { $file_upload = new File_Upload_Upgrader( 'pluginzip', 'package' ); $file_upload->cleanup(); } } wp_redirect( self_admin_url( 'plugin-install.php' ) ); exit; } elseif ( 'upgrade-theme' === $action ) { if ( ! current_user_can( 'update_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to update themes for this site.' ) ); } check_admin_referer( 'upgrade-theme_' . $theme ); wp_enqueue_script( 'updates' ); // Used in the HTML title tag. $title = __( 'Update Theme' ); $parent_file = 'themes.php'; $submenu_file = 'themes.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; $nonce = 'upgrade-theme_' . $theme; $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme ); $upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) ); $upgrader->upgrade( $theme ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'update-selected-themes' === $action ) { if ( ! current_user_can( 'update_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to update themes for this site.' ) ); } check_admin_referer( 'bulk-update-themes' ); if ( isset( $_GET['themes'] ) ) { $themes = explode( ',', stripslashes( $_GET['themes'] ) ); } elseif ( isset( $_POST['checked'] ) ) { $themes = (array) $_POST['checked']; } else { $themes = array(); } $themes = array_map( 'urldecode', $themes ); $url = 'update.php?action=update-selected-themes&themes=' . urlencode( implode( ',', $themes ) ); $nonce = 'bulk-update-themes'; wp_enqueue_script( 'updates' ); iframe_header(); $upgrader = new Theme_Upgrader( new Bulk_Theme_Upgrader_Skin( compact( 'nonce', 'url' ) ) ); $upgrader->bulk_upgrade( $themes ); iframe_footer(); } elseif ( 'install-theme' === $action ) { if ( ! current_user_can( 'install_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) ); } require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // For themes_api(). check_admin_referer( 'install-theme_' . $theme ); $api = themes_api( 'theme_information', array( 'slug' => $theme, 'fields' => array( 'sections' => false, 'tags' => false, ), ) ); // Save on a bit of bandwidth. if ( is_wp_error( $api ) ) { wp_die( $api ); } // Used in the HTML title tag. $title = __( 'Install Themes' ); $parent_file = 'themes.php'; $submenu_file = 'themes.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; /* translators: %s: Theme name and version. */ $title = sprintf( __( 'Installing Theme: %s' ), $api->name . ' ' . $api->version ); $nonce = 'install-theme_' . $theme; $url = 'update.php?action=install-theme&theme=' . urlencode( $theme ); $type = 'web'; // Install theme type, From Web or an Upload. $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) ); $upgrader->install( $api->download_link ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'upload-theme' === $action ) { if ( ! current_user_can( 'upload_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) ); } check_admin_referer( 'theme-upload' ); if ( isset( $_FILES['themezip']['name'] ) && ! str_ends_with( strtolower( $_FILES['themezip']['name'] ), '.zip' ) ) { wp_die( __( 'Only .zip archives may be uploaded.' ) ); } $file_upload = new File_Upload_Upgrader( 'themezip', 'package' ); // Used in the HTML title tag. $title = __( 'Upload Theme' ); $parent_file = 'themes.php'; $submenu_file = 'theme-install.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; /* translators: %s: File name. */ $title = sprintf( __( 'Installing theme from uploaded file: %s' ), esc_html( basename( $file_upload->filename ) ) ); $nonce = 'theme-upload'; $url = add_query_arg( array( 'package' => $file_upload->id ), 'update.php?action=upload-theme' ); $type = 'upload'; // Install theme type, From Web or an Upload. $overwrite = isset( $_GET['overwrite'] ) ? sanitize_text_field( $_GET['overwrite'] ) : ''; $overwrite = in_array( $overwrite, array( 'update-theme', 'downgrade-theme' ), true ) ? $overwrite : ''; $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact( 'type', 'title', 'nonce', 'url', 'overwrite' ) ) ); $result = $upgrader->install( $file_upload->package, array( 'overwrite_package' => $overwrite ) ); if ( $result || is_wp_error( $result ) ) { $file_upload->cleanup(); } require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'upload-theme-cancel-overwrite' === $action ) { if ( ! current_user_can( 'upload_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) ); } check_admin_referer( 'theme-upload-cancel-overwrite' ); // Make sure the attachment still exists, or File_Upload_Upgrader will call wp_die() // that shows a generic "Please select a file" error. if ( ! empty( $_GET['package'] ) ) { $attachment_id = (int) $_GET['package']; if ( get_post( $attachment_id ) ) { $file_upload = new File_Upload_Upgrader( 'themezip', 'package' ); $file_upload->cleanup(); } } wp_redirect( self_admin_url( 'theme-install.php' ) ); exit; } else { /** * Fires when a custom plugin or theme update request is received. * * The dynamic portion of the hook name, `$action`, refers to the action * provided in the request for wp-admin/update.php. Can be used to * provide custom update functionality for themes and plugins. * * @since 2.8.0 */ do_action( "update-custom_{$action}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } } moderation.php 0000644 00000000463 15013565477 0007436 0 ustar 00 <?php /** * Comment Moderation Administration Screen. * * Redirects to edit-comments.php?comment_status=moderated. * * @package WordPress * @subpackage Administration */ require_once dirname( __DIR__ ) . '/wp-load.php'; wp_redirect( admin_url( 'edit-comments.php?comment_status=moderated' ) ); exit; profile.php 0000644 00000000433 15013565477 0006732 0 ustar 00 <?php /** * User Profile Administration Screen. * * @package WordPress * @subpackage Administration */ /** * This is a profile page. * * @since 2.5.0 * @var bool */ define( 'IS_PROFILE_PAGE', true ); /** Load User Editing Page */ require_once __DIR__ . '/user-edit.php'; ms-edit.php 0000644 00000000330 15013565477 0006630 0 ustar 00 <?php /** * Action handler for Multisite administration panels. * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ require_once __DIR__ . '/admin.php'; wp_redirect( network_admin_url() ); exit; customize.php 0000644 00000025646 15013565477 0007331 0 ustar 00 <?php /** * Theme Customize Screen. * * @package WordPress * @subpackage Customize * @since 3.4.0 */ define( 'IFRAME_REQUEST', true ); /** Load WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'customize' ) ) { wp_die( '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' . '<p>' . __( 'Sorry, you are not allowed to customize this site.' ) . '</p>', 403 ); } /** * @global WP_Scripts $wp_scripts * @global WP_Customize_Manager $wp_customize */ global $wp_scripts, $wp_customize; if ( $wp_customize->changeset_post_id() ) { $changeset_post = get_post( $wp_customize->changeset_post_id() ); if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $changeset_post->ID ) ) { wp_die( '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' . '<p>' . __( 'Sorry, you are not allowed to edit this changeset.' ) . '</p>', 403 ); } $missed_schedule = ( 'future' === $changeset_post->post_status && get_post_time( 'G', true, $changeset_post ) < time() ); if ( $missed_schedule ) { /* * Note that an Ajax request spawns here instead of just calling `wp_publish_post( $changeset_post->ID )`. * * Because WP_Customize_Manager is not instantiated for customize.php with the `settings_previewed=false` * argument, settings cannot be reliably saved. Some logic short-circuits if the current value is the * same as the value being saved. This is particularly true for options via `update_option()`. * * By opening an Ajax request, this is avoided and the changeset is published. See #39221. */ $nonces = $wp_customize->get_nonces(); $request_args = array( 'nonce' => $nonces['save'], 'customize_changeset_uuid' => $wp_customize->changeset_uuid(), 'wp_customize' => 'on', 'customize_changeset_status' => 'publish', ); ob_start(); ?> <?php wp_print_scripts( array( 'wp-util' ) ); ?> <script> wp.ajax.post( 'customize_save', <?php echo wp_json_encode( $request_args ); ?> ); </script> <?php $script = ob_get_clean(); wp_die( '<h1>' . __( 'Your scheduled changes just published' ) . '</h1>' . '<p><a href="' . esc_url( remove_query_arg( 'changeset_uuid' ) ) . '">' . __( 'Customize New Changes' ) . '</a></p>' . $script, 200 ); } if ( in_array( get_post_status( $changeset_post->ID ), array( 'publish', 'trash' ), true ) ) { wp_die( '<h1>' . __( 'An error occurred while saving your changeset.' ) . '</h1>' . '<p>' . __( 'Please try again or start a new changeset. This changeset cannot be further modified.' ) . '</p>' . '<p><a href="' . esc_url( remove_query_arg( 'changeset_uuid' ) ) . '">' . __( 'Customize New Changes' ) . '</a></p>', 403 ); } } $url = ! empty( $_REQUEST['url'] ) ? esc_url_raw( wp_unslash( $_REQUEST['url'] ) ) : ''; $return = ! empty( $_REQUEST['return'] ) ? esc_url_raw( wp_unslash( $_REQUEST['return'] ) ) : ''; $autofocus = ! empty( $_REQUEST['autofocus'] ) && is_array( $_REQUEST['autofocus'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_REQUEST['autofocus'] ) ) : array(); if ( ! empty( $url ) ) { $wp_customize->set_preview_url( $url ); } if ( ! empty( $return ) ) { $wp_customize->set_return_url( $return ); } if ( ! empty( $autofocus ) ) { $wp_customize->set_autofocus( $autofocus ); } // Let's roll. header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); wp_user_settings(); _wp_admin_html_begin(); $registered = $wp_scripts->registered; $wp_scripts = new WP_Scripts(); $wp_scripts->registered = $registered; add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 ); add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' ); add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 ); /** * Fires when Customizer controls are initialized, before scripts are enqueued. * * @since 3.4.0 */ do_action( 'customize_controls_init' ); wp_enqueue_script( 'heartbeat' ); wp_enqueue_script( 'customize-controls' ); wp_enqueue_style( 'customize-controls' ); /** * Fires when enqueuing Customizer control scripts. * * @since 3.4.0 */ do_action( 'customize_controls_enqueue_scripts' ); $body_class = 'wp-core-ui wp-customizer js'; if ( wp_is_mobile() ) : $body_class .= ' mobile'; add_filter( 'admin_viewport_meta', '_customizer_mobile_viewport_meta' ); endif; if ( $wp_customize->is_ios() ) { $body_class .= ' ios'; } if ( is_rtl() ) { $body_class .= ' rtl'; } $body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); if ( wp_use_widgets_block_editor() ) { $body_class .= ' wp-embed-responsive'; } $admin_title = sprintf( $wp_customize->get_document_title_template(), __( 'Loading…' ) ); ?> <title><?php echo esc_html( $admin_title ); ?></title> <script type="text/javascript"> var ajaxurl = <?php echo wp_json_encode( admin_url( 'admin-ajax.php', 'relative' ) ); ?>, pagenow = 'customize'; </script> <?php /** * Fires when Customizer control styles are printed. * * @since 3.4.0 */ do_action( 'customize_controls_print_styles' ); /** * Fires when Customizer control scripts are printed. * * @since 3.4.0 */ do_action( 'customize_controls_print_scripts' ); /** * Fires in head section of Customizer controls. * * @since 5.5.0 */ do_action( 'customize_controls_head' ); ?> </head> <body class="<?php echo esc_attr( $body_class ); ?>"> <div class="wp-full-overlay expanded"> <form id="customize-controls" class="wrap wp-full-overlay-sidebar"> <div id="customize-header-actions" class="wp-full-overlay-header"> <?php $compatible_wp = is_wp_version_compatible( $wp_customize->theme()->get( 'RequiresWP' ) ); $compatible_php = is_php_version_compatible( $wp_customize->theme()->get( 'RequiresPHP' ) ); ?> <?php if ( $compatible_wp && $compatible_php ) : ?> <?php $save_text = $wp_customize->is_theme_active() ? __( 'Publish' ) : __( 'Activate & Publish' ); ?> <div id="customize-save-button-wrapper" class="customize-save-button-wrapper" > <?php submit_button( $save_text, 'primary save', 'save', false ); ?> <button id="publish-settings" class="publish-settings button-primary button dashicons dashicons-admin-generic" aria-label="<?php esc_attr_e( 'Publish Settings' ); ?>" aria-expanded="false" disabled></button> </div> <?php else : ?> <?php $save_text = _x( 'Cannot Activate', 'theme' ); ?> <div id="customize-save-button-wrapper" class="customize-save-button-wrapper disabled" > <button class="button button-primary disabled" aria-label="<?php esc_attr_e( 'Publish Settings' ); ?>" aria-expanded="false" disabled><?php echo $save_text; ?></button> </div> <?php endif; ?> <span class="spinner"></span> <button type="button" class="customize-controls-preview-toggle"> <span class="controls"><?php _e( 'Customize' ); ?></span> <span class="preview"><?php _e( 'Preview' ); ?></span> </button> <a class="customize-controls-close" href="<?php echo esc_url( $wp_customize->get_return_url() ); ?>"> <span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Close the Customizer and go back to the previous page' ); ?> </span> </a> </div> <div id="customize-sidebar-outer-content"> <div id="customize-outer-theme-controls"> <ul class="customize-outer-pane-parent"><?php // Outer panel and sections are not implemented, but its here as a placeholder to avoid any side-effect in api.Section. ?></ul> </div> </div> <div id="widgets-right" class="wp-clearfix"><!-- For Widget Customizer, many widgets try to look for instances under div#widgets-right, so we have to add that ID to a container div in the Customizer for compat --> <div id="customize-notifications-area" class="customize-control-notifications-container"> <ul></ul> </div> <div class="wp-full-overlay-sidebar-content" tabindex="-1"> <div id="customize-info" class="accordion-section customize-info" data-block-theme="<?php echo (int) wp_is_block_theme(); ?>"> <div class="accordion-section-title"> <h2 class="preview-notice"> <?php /* translators: %s: The site/panel title in the Customizer. */ printf( __( 'You are customizing %s' ), '<strong class="panel-title site-title">' . get_bloginfo( 'name', 'display' ) . '</strong>' ); ?> </h2> <button type="button" class="customize-help-toggle dashicons dashicons-editor-help" aria-expanded="false"><span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Help' ); ?> </span></button> </div> <div class="customize-panel-description"> <p> <?php _e( 'The Customizer allows you to preview changes to your site before publishing them. You can navigate to different pages on your site within the preview. Edit shortcuts are shown for some editable elements. The Customizer is intended for use with non-block themes.' ); ?> </p> <p> <?php _e( '<a href="https://wordpress.org/documentation/article/customizer/">Documentation on Customizer</a>' ); ?> </p> </div> </div> <div id="customize-theme-controls"> <ul class="customize-pane-parent"><?php // Panels and sections are managed here via JavaScript ?></ul> </div> </div> </div> <div id="customize-footer-actions" class="wp-full-overlay-footer"> <button type="button" class="collapse-sidebar button" aria-expanded="true" aria-label="<?php echo esc_attr_x( 'Hide Controls', 'label for hide controls button without length constraints' ); ?>"> <span class="collapse-sidebar-arrow"></span> <span class="collapse-sidebar-label"><?php _ex( 'Hide Controls', 'short (~12 characters) label for hide controls button' ); ?></span> </button> <?php $previewable_devices = $wp_customize->get_previewable_devices(); ?> <?php if ( ! empty( $previewable_devices ) ) : ?> <div class="devices-wrapper"> <div class="devices"> <?php foreach ( (array) $previewable_devices as $device => $settings ) : ?> <?php if ( empty( $settings['label'] ) ) { continue; } $active = ! empty( $settings['default'] ); $class = 'preview-' . $device; if ( $active ) { $class .= ' active'; } ?> <button type="button" class="<?php echo esc_attr( $class ); ?>" aria-pressed="<?php echo esc_attr( $active ); ?>" data-device="<?php echo esc_attr( $device ); ?>"> <span class="screen-reader-text"><?php echo esc_html( $settings['label'] ); ?></span> </button> <?php endforeach; ?> </div> </div> <?php endif; ?> </div> </form> <div id="customize-preview" class="wp-full-overlay-main"></div> <?php /** * Prints templates, control scripts, and settings in the footer. * * @since 3.4.0 */ do_action( 'customize_controls_print_footer_scripts' ); ?> </div> </body> </html> edit-form-blocks.php 0000644 00000034571 15013565477 0010445 0 ustar 00 <?php /** * The block editor page. * * @since 5.0.0 * * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } /** * @global string $post_type Global post type. * @global WP_Post_Type $post_type_object Global post type object. * @global WP_Post $post Global post object. * @global string $title The title of the current screen. * @global array $wp_meta_boxes Global meta box state. */ global $post_type, $post_type_object, $post, $title, $wp_meta_boxes; $block_editor_context = new WP_Block_Editor_Context( array( 'post' => $post ) ); // Flag that we're loading the block editor. $current_screen = get_current_screen(); $current_screen->is_block_editor( true ); // Default to is-fullscreen-mode to avoid jumps in the UI. add_filter( 'admin_body_class', static function ( $classes ) { return "$classes is-fullscreen-mode"; } ); /* * Emoji replacement is disabled for now, until it plays nicely with React. */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); /* * Block editor implements its own Options menu for toggling Document Panels. */ add_filter( 'screen_options_show_screen', '__return_false' ); wp_enqueue_script( 'heartbeat' ); wp_enqueue_script( 'wp-edit-post' ); $rest_path = rest_get_route_for_post( $post ); $active_theme = get_stylesheet(); $global_styles_endpoint_context = current_user_can( 'edit_theme_options' ) ? 'edit' : 'view'; $template_lookup_slug = 'page' === $post->post_type ? 'page' : 'single-' . $post->post_type; if ( ! empty( $post->post_name ) ) { $template_lookup_slug .= '-' . $post->post_name; } // Preload common data. $preload_paths = array( '/wp/v2/types?context=view', '/wp/v2/taxonomies?context=view', add_query_arg( 'context', 'edit', $rest_path ), sprintf( '/wp/v2/types/%s?context=edit', $post_type ), '/wp/v2/users/me', array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'page' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_block' ), 'OPTIONS' ), array( rest_get_route_for_post_type_items( 'wp_template' ), 'OPTIONS' ), sprintf( '%s/autosaves?context=edit', $rest_path ), '/wp/v2/settings', array( '/wp/v2/settings', 'OPTIONS' ), '/wp/v2/global-styles/themes/' . $active_theme . '?context=view', '/wp/v2/global-styles/themes/' . $active_theme . '/variations?context=view', '/wp/v2/themes?context=edit&status=active', array( '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id(), 'OPTIONS' ), /* * Preload the global styles path with the correct context based on user caps. * NOTE: There is an equivalent conditional check in the client-side code to fetch * the global styles entity using the appropriate context value. * See the call to `canUser()`, under `useGlobalStylesUserConfig()` in `packages/edit-site/src/components/use-global-styles-user-config/index.js`. * Please ensure that the equivalent check is kept in sync with this preload path. */ '/wp/v2/global-styles/' . WP_Theme_JSON_Resolver::get_user_global_styles_post_id() . '?context=' . $global_styles_endpoint_context, // Used by getBlockPatternCategories in useBlockEditorSettings. '/wp/v2/block-patterns/categories', // @see packages/core-data/src/entities.js '/?_fields=' . implode( ',', array( 'description', 'gmt_offset', 'home', 'name', 'site_icon', 'site_icon_url', 'site_logo', 'timezone_string', 'url', 'page_for_posts', 'page_on_front', 'show_on_front', ) ), $paths[] = add_query_arg( 'slug', // @see https://github.com/WordPress/gutenberg/blob/e093fefd041eb6cc4a4e7f67b92ab54fd75c8858/packages/core-data/src/private-selectors.ts#L244-L254 $template_lookup_slug, '/wp/v2/templates/lookup' ), ); block_editor_rest_api_preload( $preload_paths, $block_editor_context ); wp_add_inline_script( 'wp-blocks', sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), 'after' ); /* * Assign initial edits, if applicable. These are not initially assigned to the persisted post, * but should be included in its save payload. */ $initial_edits = array(); $is_new_post = false; if ( 'auto-draft' === $post->post_status ) { $is_new_post = true; // Override "(Auto Draft)" new post default title with empty string, or filtered value. if ( post_type_supports( $post->post_type, 'title' ) ) { $initial_edits['title'] = $post->post_title; } if ( post_type_supports( $post->post_type, 'editor' ) ) { $initial_edits['content'] = $post->post_content; } if ( post_type_supports( $post->post_type, 'excerpt' ) ) { $initial_edits['excerpt'] = $post->post_excerpt; } } // Preload server-registered block schemas. wp_add_inline_script( 'wp-blocks', 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');' ); // Preload server-registered block bindings sources. $registered_sources = get_all_registered_block_bindings_sources(); if ( ! empty( $registered_sources ) ) { $filtered_sources = array(); foreach ( $registered_sources as $source ) { $filtered_sources[] = array( 'name' => $source->name, 'label' => $source->label, 'usesContext' => $source->uses_context, ); } $script = sprintf( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }', wp_json_encode( $filtered_sources ) ); wp_add_inline_script( 'wp-blocks', $script ); } // Get admin url for handling meta boxes. $meta_box_url = admin_url( 'post.php' ); $meta_box_url = add_query_arg( array( 'post' => $post->ID, 'action' => 'edit', 'meta-box-loader' => true, 'meta-box-loader-nonce' => wp_create_nonce( 'meta-box-loader' ), ), $meta_box_url ); wp_add_inline_script( 'wp-editor', sprintf( 'var _wpMetaBoxUrl = %s;', wp_json_encode( $meta_box_url ) ), 'before' ); // Set Heartbeat interval to 10 seconds, used to refresh post locks. wp_add_inline_script( 'heartbeat', 'jQuery( function() { wp.heartbeat.interval( 10 ); } );', 'after' ); /* * Get all available templates for the post/page attributes meta-box. * The "Default template" array element should only be added if the array is * not empty so we do not trigger the template select element without any options * besides the default value. */ $available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); $available_templates = ! empty( $available_templates ) ? array_replace( array( /** This filter is documented in wp-admin/includes/meta-boxes.php */ '' => apply_filters( 'default_page_template_title', __( 'Default template' ), 'rest-api' ), ), $available_templates ) : $available_templates; // Lock settings. $user_id = wp_check_post_lock( $post->ID ); if ( $user_id ) { $locked = false; /** This filter is documented in wp-admin/includes/post.php */ if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { $locked = true; } $user_details = null; if ( $locked ) { $user = get_userdata( $user_id ); $user_details = array( 'name' => $user->display_name, ); if ( get_option( 'show_avatars' ) ) { $user_details['avatar'] = get_avatar_url( $user_id, array( 'size' => 128 ) ); } } $lock_details = array( 'isLocked' => $locked, 'user' => $user_details, ); } else { // Lock the post. $active_post_lock = wp_set_post_lock( $post->ID ); if ( $active_post_lock ) { $active_post_lock = esc_attr( implode( ':', $active_post_lock ) ); } $lock_details = array( 'isLocked' => false, 'activePostLock' => $active_post_lock, ); } /** * Filters the body placeholder text. * * @since 5.0.0 * @since 5.8.0 Changed the default placeholder text. * * @param string $text Placeholder text. Default 'Type / to choose a block'. * @param WP_Post $post Post object. */ $body_placeholder = apply_filters( 'write_your_story', __( 'Type / to choose a block' ), $post ); $editor_settings = array( 'availableTemplates' => $available_templates, 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), /** This filter is documented in wp-admin/edit-form-advanced.php */ 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title' ), $post ), 'bodyPlaceholder' => $body_placeholder, 'autosaveInterval' => AUTOSAVE_INTERVAL, 'richEditingEnabled' => user_can_richedit(), 'postLock' => $lock_details, 'postLockUtils' => array( 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), ), 'supportsLayout' => wp_theme_has_theme_json(), 'supportsTemplateMode' => current_theme_supports( 'block-templates' ), // Whether or not to load the 'postcustom' meta box is stored as a user meta // field so that we're not always loading its assets. 'enableCustomFields' => (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), ); // Add additional back-compat patterns registered by `current_screen` et al. $editor_settings['__experimentalAdditionalBlockPatterns'] = WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ); $editor_settings['__experimentalAdditionalBlockPatternCategories'] = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ); $autosave = wp_get_post_autosave( $post->ID ); if ( $autosave ) { if ( mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { $editor_settings['autosave'] = array( 'editLink' => get_edit_post_link( $autosave->ID ), ); } else { wp_delete_post_revision( $autosave->ID ); } } if ( ! empty( $post_type_object->template ) ) { $editor_settings['template'] = $post_type_object->template; $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; } // If there's no template set on a new post, use the post format, instead. if ( $is_new_post && ! isset( $editor_settings['template'] ) && 'post' === $post->post_type ) { $post_format = get_post_format( $post ); if ( in_array( $post_format, array( 'audio', 'gallery', 'image', 'quote', 'video' ), true ) ) { $editor_settings['template'] = array( array( "core/$post_format" ) ); } } if ( wp_is_block_theme() && $editor_settings['supportsTemplateMode'] ) { $editor_settings['defaultTemplatePartAreas'] = get_allowed_block_template_part_areas(); } /** * Scripts */ wp_enqueue_media( array( 'post' => $post->ID, ) ); wp_tinymce_inline_scripts(); wp_enqueue_editor(); /** * Styles */ wp_enqueue_style( 'wp-edit-post' ); /** * Fires after block assets have been enqueued for the editing interface. * * Call `add_action` on any hook before 'admin_enqueue_scripts'. * * In the function call you supply, simply use `wp_enqueue_script` and * `wp_enqueue_style` to add your functionality to the block editor. * * @since 5.0.0 */ do_action( 'enqueue_block_editor_assets' ); // In order to duplicate classic meta box behavior, we need to run the classic meta box actions. require_once ABSPATH . 'wp-admin/includes/meta-boxes.php'; register_and_do_post_meta_boxes( $post ); // Check if the Custom Fields meta box has been removed at some point. $core_meta_boxes = $wp_meta_boxes[ $current_screen->id ]['normal']['core']; if ( ! isset( $core_meta_boxes['postcustom'] ) || ! $core_meta_boxes['postcustom'] ) { unset( $editor_settings['enableCustomFields'] ); } $editor_settings = get_block_editor_settings( $editor_settings, $block_editor_context ); $init_script = <<<JS ( function() { window._wpLoadBlockEditor = new Promise( function( resolve ) { wp.domReady( function() { resolve( wp.editPost.initializeEditor( 'editor', "%s", %d, %s, %s ) ); } ); } ); } )(); JS; $script = sprintf( $init_script, $post->post_type, $post->ID, wp_json_encode( $editor_settings ), wp_json_encode( $initial_edits ) ); wp_add_inline_script( 'wp-edit-post', $script ); if ( (int) get_option( 'page_for_posts' ) === $post->ID ) { add_action( 'admin_enqueue_scripts', '_wp_block_editor_posts_page_notice' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="block-editor"> <h1 class="screen-reader-text hide-if-no-js"><?php echo esc_html( $title ); ?></h1> <div id="editor" class="block-editor__container hide-if-no-js"></div> <div id="metaboxes" class="hidden"> <?php the_block_editor_meta_boxes(); ?> </div> <?php // JavaScript is disabled. ?> <div class="wrap hide-if-js block-editor-no-js"> <h1 class="wp-heading-inline"><?php echo esc_html( $title ); ?></h1> <?php if ( file_exists( WP_PLUGIN_DIR . '/classic-editor/classic-editor.php' ) ) { // If Classic Editor is already installed, provide a link to activate the plugin. $installed = true; $plugin_activate_url = wp_nonce_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php', 'activate-plugin_classic-editor/classic-editor.php' ); $message = sprintf( /* translators: %s: Link to activate the Classic Editor plugin. */ __( 'The block editor requires JavaScript. Please enable JavaScript in your browser settings, or activate the <a href="%s">Classic Editor plugin</a>.' ), esc_url( $plugin_activate_url ) ); } else { // If Classic Editor is not installed, provide a link to install it. $installed = false; $plugin_install_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' ); $message = sprintf( /* translators: %s: Link to install the Classic Editor plugin. */ __( 'The block editor requires JavaScript. Please enable JavaScript in your browser settings, or install the <a href="%s">Classic Editor plugin</a>.' ), esc_url( $plugin_install_url ) ); } /** * Filters the message displayed in the block editor interface when JavaScript is * not enabled in the browser. * * @since 5.0.3 * @since 6.4.0 Added `$installed` parameter. * * @param string $message The message being displayed. * @param WP_Post $post The post being edited. * @param bool $installed Whether the classic editor is installed. */ $message = apply_filters( 'block_editor_no_javascript_message', $message, $post, $installed ); wp_admin_notice( $message, array( 'type' => 'error', ) ); ?> </div> </div> tools.php 0000644 00000006672 15013565477 0006445 0 ustar 00 <?php /** * Tools Administration Screen. * * @package WordPress * @subpackage Administration */ if ( isset( $_GET['page'] ) && ! empty( $_POST ) ) { // Ensure POST-ing to `tools.php?page=export_personal_data` and `tools.php?page=remove_personal_data` // continues to work after creating the new files for exporting and erasing of personal data. if ( 'export_personal_data' === $_GET['page'] ) { require_once ABSPATH . 'wp-admin/export-personal-data.php'; return; } elseif ( 'remove_personal_data' === $_GET['page'] ) { require_once ABSPATH . 'wp-admin/erase-personal-data.php'; return; } } // The privacy policy guide used to be outputted from here. Since WP 5.3 it is in wp-admin/privacy-policy-guide.php. if ( isset( $_GET['wp-privacy-policy-guide'] ) ) { require_once dirname( __DIR__ ) . '/wp-load.php'; wp_redirect( admin_url( 'options-privacy.php?tab=policyguide' ), 301 ); exit; } elseif ( isset( $_GET['page'] ) ) { // These were also moved to files in WP 5.3. if ( 'export_personal_data' === $_GET['page'] ) { require_once dirname( __DIR__ ) . '/wp-load.php'; wp_redirect( admin_url( 'export-personal-data.php' ), 301 ); exit; } elseif ( 'remove_personal_data' === $_GET['page'] ) { require_once dirname( __DIR__ ) . '/wp-load.php'; wp_redirect( admin_url( 'erase-personal-data.php' ), 301 ); exit; } } /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; // Used in the HTML title tag. $title = __( 'Tools' ); get_current_screen()->add_help_tab( array( 'id' => 'converter', 'title' => __( 'Categories and Tags Converter' ), 'content' => '<p>' . __( 'Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' . '<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/tools-screen/">Documentation on Tools</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <?php if ( current_user_can( 'import' ) ) : $cats = get_taxonomy( 'category' ); $tags = get_taxonomy( 'post_tag' ); if ( current_user_can( $cats->cap->manage_terms ) || current_user_can( $tags->cap->manage_terms ) ) : ?> <div class="card"> <h2 class="title"><?php _e( 'Categories and Tags Converter' ); ?></h2> <p> <?php printf( /* translators: %s: URL to Import screen. */ __( 'If you want to convert your categories to tags (or vice versa), use the <a href="%s">Categories and Tags Converter</a> available from the Import screen.' ), 'import.php' ); ?> </p> </div> <?php endif; endif; /** * Fires at the end of the Tools Administration screen. * * @since 2.8.0 */ do_action( 'tool_box' ); ?> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ms-delete-site.php 0000644 00000010306 15013565477 0010113 0 ustar 00 <?php /** * Multisite delete site panel. * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ require_once __DIR__ . '/admin.php'; if ( ! is_multisite() ) { wp_die( __( 'Multisite support is not enabled.' ) ); } if ( ! current_user_can( 'delete_site' ) ) { wp_die( __( 'Sorry, you are not allowed to delete this site.' ) ); } if ( isset( $_GET['h'] ) && '' !== $_GET['h'] && false !== get_option( 'delete_blog_hash' ) ) { if ( hash_equals( get_option( 'delete_blog_hash' ), $_GET['h'] ) ) { wpmu_delete_blog( get_current_blog_id() ); wp_die( sprintf( /* translators: %s: Network title. */ __( 'Thank you for using %s, your site has been deleted. Happy trails to you until we meet again.' ), get_network()->site_name ) ); } else { wp_die( __( 'Sorry, the link you clicked is stale. Please select another option.' ) ); } } $blog = get_site(); $user = wp_get_current_user(); // Used in the HTML title tag. $title = __( 'Delete Site' ); $parent_file = 'tools.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; echo '<div class="wrap">'; echo '<h1>' . esc_html( $title ) . '</h1>'; if ( isset( $_POST['action'] ) && 'deleteblog' === $_POST['action'] && isset( $_POST['confirmdelete'] ) && '1' === $_POST['confirmdelete'] ) { check_admin_referer( 'delete-blog' ); $hash = wp_generate_password( 20, false ); update_option( 'delete_blog_hash', $hash, false ); $url_delete = esc_url( admin_url( 'ms-delete-site.php?h=' . $hash ) ); $switched_locale = switch_to_locale( get_locale() ); /* translators: Do not translate USERNAME, URL_DELETE, SITENAME, SITEURL: those are placeholders. */ $content = __( "Howdy ###USERNAME###, You recently clicked the 'Delete Site' link on your site and filled in a form on that page. If you really want to delete your site, click the link below. You will not be asked to confirm again so only click this link if you are absolutely certain: ###URL_DELETE### If you delete your site, please consider opening a new site here some time in the future! (But remember that your current site and username are gone forever.) Thank you for using the site, All at ###SITENAME### ###SITEURL###" ); /** * Filters the text for the email sent to the site admin when a request to delete a site in a Multisite network is submitted. * * @since 3.0.0 * * @param string $content The email text. */ $content = apply_filters( 'delete_site_email_content', $content ); $content = str_replace( '###USERNAME###', $user->user_login, $content ); $content = str_replace( '###URL_DELETE###', $url_delete, $content ); $content = str_replace( '###SITENAME###', get_network()->site_name, $content ); $content = str_replace( '###SITEURL###', network_home_url(), $content ); wp_mail( get_option( 'admin_email' ), sprintf( /* translators: %s: Site title. */ __( '[%s] Delete My Site' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), $content ); if ( $switched_locale ) { restore_previous_locale(); } ?> <p><?php _e( 'Thank you. Please check your email for a link to confirm your action. Your site will not be deleted until this link is clicked.' ); ?></p> <?php } else { ?> <p> <?php printf( /* translators: %s: Network title. */ __( 'If you do not want to use your %s site any more, you can delete it using the form below. When you click <strong>Delete My Site Permanently</strong> you will be sent an email with a link in it. Click on this link to delete your site.' ), get_network()->site_name ); ?> </p> <p><?php _e( 'Remember, once deleted your site cannot be restored.' ); ?></p> <form method="post" name="deletedirect"> <?php wp_nonce_field( 'delete-blog' ); ?> <input type="hidden" name="action" value="deleteblog" /> <p><input id="confirmdelete" type="checkbox" name="confirmdelete" value="1" /> <label for="confirmdelete"><strong> <?php printf( /* translators: %s: Site address. */ __( "I'm sure I want to permanently delete my site, and I am aware I can never get it back or use %s again." ), $blog->domain . $blog->path ); ?> </strong></label></p> <?php submit_button( __( 'Delete My Site Permanently' ) ); ?> </form> <?php } echo '</div>'; require_once ABSPATH . 'wp-admin/admin-footer.php'; widgets-form.php 0000644 00000046251 15013565477 0007711 0 ustar 00 <?php /** * The classic widget administration screen, for use in widgets.php. * * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } $widgets_access = get_user_setting( 'widgets_access' ); if ( isset( $_GET['widgets-access'] ) ) { check_admin_referer( 'widgets-access' ); $widgets_access = 'on' === $_GET['widgets-access'] ? 'on' : 'off'; set_user_setting( 'widgets_access', $widgets_access ); } if ( 'on' === $widgets_access ) { add_filter( 'admin_body_class', 'wp_widgets_access_body_class' ); } else { wp_enqueue_script( 'admin-widgets' ); if ( wp_is_mobile() ) { wp_enqueue_script( 'jquery-touch-punch' ); } } /** * Fires early before the Widgets administration screen loads, * after scripts are enqueued. * * @since 2.2.0 */ do_action( 'sidebar_admin_setup' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them.' ) . '</p> <p>' . __( 'The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'removing-reusing', 'title' => __( 'Removing and Reusing' ), 'content' => '<p>' . __( 'If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas.' ) . '</p> <p>' . __( 'Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required.' ) . '</p> <p>' . __( 'Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'missing-widgets', 'title' => __( 'Missing Widgets' ), 'content' => '<p>' . __( 'Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area.' ) . '</p>' . '<p>' . __( 'When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/appearance-widgets-screen-classic-editor/">Documentation on Widgets</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); // These are the widgets grouped by sidebar. $sidebars_widgets = wp_get_sidebars_widgets(); if ( empty( $sidebars_widgets ) ) { $sidebars_widgets = wp_get_widget_defaults(); } foreach ( $sidebars_widgets as $sidebar_id => $widgets ) { if ( 'wp_inactive_widgets' === $sidebar_id ) { continue; } if ( ! is_registered_sidebar( $sidebar_id ) ) { if ( ! empty( $widgets ) ) { // Register the inactive_widgets area as sidebar. register_sidebar( array( 'name' => __( 'Inactive Sidebar (not used)' ), 'id' => $sidebar_id, 'class' => 'inactive-sidebar orphan-sidebar', 'description' => __( 'This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar.' ), 'before_widget' => '', 'after_widget' => '', 'before_title' => '', 'after_title' => '', ) ); } else { unset( $sidebars_widgets[ $sidebar_id ] ); } } } // Register the inactive_widgets area as sidebar. register_sidebar( array( 'name' => __( 'Inactive Widgets' ), 'id' => 'wp_inactive_widgets', 'class' => 'inactive-sidebar', 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ), 'before_widget' => '', 'after_widget' => '', 'before_title' => '', 'after_title' => '', ) ); retrieve_widgets(); // We're saving a widget without JS. if ( isset( $_POST['savewidget'] ) || isset( $_POST['removewidget'] ) ) { $widget_id = $_POST['widget-id']; check_admin_referer( "save-delete-widget-$widget_id" ); $number = isset( $_POST['multi_number'] ) ? (int) $_POST['multi_number'] : ''; if ( $number ) { foreach ( $_POST as $key => $val ) { if ( is_array( $val ) && preg_match( '/__i__|%i%/', key( $val ) ) ) { $_POST[ $key ] = array( $number => array_shift( $val ) ); break; } } } $sidebar_id = $_POST['sidebar']; $position = isset( $_POST[ $sidebar_id . '_position' ] ) ? (int) $_POST[ $sidebar_id . '_position' ] - 1 : 0; $id_base = $_POST['id_base']; $sidebar = isset( $sidebars_widgets[ $sidebar_id ] ) ? $sidebars_widgets[ $sidebar_id ] : array(); // Delete. if ( isset( $_POST['removewidget'] ) && $_POST['removewidget'] ) { if ( ! in_array( $widget_id, $sidebar, true ) ) { wp_redirect( admin_url( 'widgets.php?error=0' ) ); exit; } $sidebar = array_diff( $sidebar, array( $widget_id ) ); $_POST = array( 'sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1', ); /** * Fires immediately after a widget has been marked for deletion. * * @since 4.4.0 * * @param string $widget_id ID of the widget marked for deletion. * @param string $sidebar_id ID of the sidebar the widget was deleted from. * @param string $id_base ID base for the widget. */ do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base ); } $_POST['widget-id'] = $sidebar; foreach ( (array) $wp_registered_widget_updates as $name => $control ) { if ( $name !== $id_base || ! is_callable( $control['callback'] ) ) { continue; } ob_start(); call_user_func_array( $control['callback'], $control['params'] ); ob_end_clean(); break; } $sidebars_widgets[ $sidebar_id ] = $sidebar; // Remove old position. if ( ! isset( $_POST['delete_widget'] ) ) { foreach ( $sidebars_widgets as $key => $sb ) { if ( is_array( $sb ) ) { $sidebars_widgets[ $key ] = array_diff( $sb, array( $widget_id ) ); } } array_splice( $sidebars_widgets[ $sidebar_id ], $position, 0, $widget_id ); } wp_set_sidebars_widgets( $sidebars_widgets ); wp_redirect( admin_url( 'widgets.php?message=0' ) ); exit; } // Remove inactive widgets without JS. if ( isset( $_POST['removeinactivewidgets'] ) ) { check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); if ( $_POST['removeinactivewidgets'] ) { foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) { $pieces = explode( '-', $widget_id ); $multi_number = array_pop( $pieces ); $id_base = implode( '-', $pieces ); $widget = get_option( 'widget_' . $id_base ); unset( $widget[ $multi_number ] ); update_option( 'widget_' . $id_base, $widget ); unset( $sidebars_widgets['wp_inactive_widgets'][ $key ] ); } wp_set_sidebars_widgets( $sidebars_widgets ); } wp_redirect( admin_url( 'widgets.php?message=0' ) ); exit; } // Output the widget form without JS. if ( isset( $_GET['editwidget'] ) && $_GET['editwidget'] ) { $widget_id = $_GET['editwidget']; if ( isset( $_GET['addnew'] ) ) { // Default to the first sidebar. $keys = array_keys( $wp_registered_sidebars ); $sidebar = reset( $keys ); if ( isset( $_GET['base'] ) && isset( $_GET['num'] ) ) { // Multi-widget. // Copy minimal info from an existing instance of this widget to a new instance. foreach ( $wp_registered_widget_controls as $control ) { if ( $_GET['base'] === $control['id_base'] ) { $control_callback = $control['callback']; $multi_number = (int) $_GET['num']; $control['params'][0]['number'] = -1; $control['id'] = $control['id_base'] . '-' . $multi_number; $widget_id = $control['id']; $wp_registered_widget_controls[ $control['id'] ] = $control; break; } } } } if ( isset( $wp_registered_widget_controls[ $widget_id ] ) && ! isset( $control ) ) { $control = $wp_registered_widget_controls[ $widget_id ]; $control_callback = $control['callback']; } elseif ( ! isset( $wp_registered_widget_controls[ $widget_id ] ) && isset( $wp_registered_widgets[ $widget_id ] ) ) { $name = esc_html( strip_tags( $wp_registered_widgets[ $widget_id ]['name'] ) ); } if ( ! isset( $name ) ) { $name = esc_html( strip_tags( $control['name'] ) ); } if ( ! isset( $sidebar ) ) { $sidebar = isset( $_GET['sidebar'] ) ? $_GET['sidebar'] : 'wp_inactive_widgets'; } if ( ! isset( $multi_number ) ) { $multi_number = isset( $control['params'][0]['number'] ) ? $control['params'][0]['number'] : ''; } $id_base = isset( $control['id_base'] ) ? $control['id_base'] : $control['id']; // Show the widget form. $width = ' style="width:' . max( $control['width'], 350 ) . 'px"'; $key = isset( $_GET['key'] ) ? (int) $_GET['key'] : 0; require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <div class="editwidget"<?php echo $width; ?>> <h2> <?php /* translators: %s: Widget name. */ printf( __( 'Widget %s' ), $name ); ?> </h2> <form action="widgets.php" method="post"> <div class="widget-inside"> <?php if ( is_callable( $control_callback ) ) { call_user_func_array( $control_callback, $control['params'] ); } else { echo '<p>' . __( 'There are no options for this widget.' ) . "</p>\n"; } ?> </div> <p class="describe"><?php _e( 'Select both the sidebar for this widget and the position of the widget in that sidebar.' ); ?></p> <div class="widget-position"> <table class="widefat"><thead><tr><th><?php _e( 'Sidebar' ); ?></th><th><?php _e( 'Position' ); ?></th></tr></thead><tbody> <?php foreach ( $wp_registered_sidebars as $sbname => $sbvalue ) { echo "\t\t<tr><td><label><input type='radio' name='sidebar' value='" . esc_attr( $sbname ) . "'" . checked( $sbname, $sidebar, false ) . " /> $sbvalue[name]</label></td><td>"; if ( 'wp_inactive_widgets' === $sbname || str_starts_with( $sbname, 'orphaned_widgets' ) ) { echo ' '; } else { if ( ! isset( $sidebars_widgets[ $sbname ] ) || ! is_array( $sidebars_widgets[ $sbname ] ) ) { $j = 1; $sidebars_widgets[ $sbname ] = array(); } else { $j = count( $sidebars_widgets[ $sbname ] ); if ( isset( $_GET['addnew'] ) || ! in_array( $widget_id, $sidebars_widgets[ $sbname ], true ) ) { ++$j; } } $selected = ''; echo "\t\t<select name='{$sbname}_position'>\n"; echo "\t\t<option value=''>" . __( '— Select —' ) . "</option>\n"; for ( $i = 1; $i <= $j; $i++ ) { if ( in_array( $widget_id, $sidebars_widgets[ $sbname ], true ) ) { $selected = selected( $i, $key + 1, false ); } echo "\t\t<option value='$i'$selected> $i </option>\n"; } echo "\t\t</select>\n"; } echo "</td></tr>\n"; } ?> </tbody></table> </div> <div class="widget-control-actions"> <div class="alignleft"> <?php if ( ! isset( $_GET['addnew'] ) ) : ?> <input type="submit" name="removewidget" id="removewidget" class="button-link button-link-delete widget-control-remove" value="<?php esc_attr_e( 'Delete' ); ?>" /> <span class="widget-control-close-wrapper"> | <a href="widgets.php" class="button-link widget-control-close"><?php _e( 'Cancel' ); ?></a> </span> <?php else : ?> <a href="widgets.php" class="button-link widget-control-close"><?php _e( 'Cancel' ); ?></a> <?php endif; ?> </div> <div class="alignright"> <?php submit_button( __( 'Save Widget' ), 'primary alignright', 'savewidget', false ); ?> <input type="hidden" name="widget-id" class="widget-id" value="<?php echo esc_attr( $widget_id ); ?>" /> <input type="hidden" name="id_base" class="id_base" value="<?php echo esc_attr( $id_base ); ?>" /> <input type="hidden" name="multi_number" class="multi_number" value="<?php echo esc_attr( $multi_number ); ?>" /> <?php wp_nonce_field( "save-delete-widget-$widget_id" ); ?> </div> <br class="clear" /> </div> </form> </div> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } $messages = array( __( 'Changes saved.' ), ); $errors = array( __( 'Error while saving.' ), __( 'Error in displaying the widget settings form.' ), ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <?php if ( current_user_can( 'customize' ) ) { printf( ' <a class="page-title-action hide-if-no-customize" href="%1$s">%2$s</a>', esc_url( add_query_arg( array( array( 'autofocus' => array( 'panel' => 'widgets' ) ), 'return' => urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), ), admin_url( 'customize.php' ) ) ), __( 'Manage with Live Preview' ) ); } $nonce = wp_create_nonce( 'widgets-access' ); ?> <div class="widget-access-link"> <a id="access-on" href="widgets.php?widgets-access=on&_wpnonce=<?php echo urlencode( $nonce ); ?>"><?php _e( 'Enable accessibility mode' ); ?></a><a id="access-off" href="widgets.php?widgets-access=off&_wpnonce=<?php echo urlencode( $nonce ); ?>"><?php _e( 'Disable accessibility mode' ); ?></a> </div> <hr class="wp-header-end"> <?php if ( isset( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) { wp_admin_notice( $messages[ $_GET['message'] ], array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } if ( isset( $_GET['error'] ) && isset( $errors[ $_GET['error'] ] ) ) { wp_admin_notice( $errors[ $_GET['error'] ], array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } /** * Fires before the Widgets administration page content loads. * * @since 3.0.0 */ do_action( 'widgets_admin_page' ); ?> <div class="widget-liquid-left"> <div id="widgets-left"> <div id="available-widgets" class="widgets-holder-wrap"> <div class="sidebar-name"> <button type="button" class="handlediv hide-if-no-js" aria-expanded="true"> <span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. */ _e( 'Available Widgets' ); ?> </span> <span class="toggle-indicator" aria-hidden="true"></span> </button> <h2><?php _e( 'Available Widgets' ); ?> <span id="removing-widget"><?php _ex( 'Deactivate', 'removing-widget' ); ?> <span></span></span></h2> </div> <div class="widget-holder"> <div class="sidebar-description"> <p class="description"><?php _e( 'To activate a widget drag it to a sidebar or click on it. To deactivate a widget and delete its settings, drag it back.' ); ?></p> </div> <div id="widget-list"> <?php wp_list_widgets(); ?> </div> <br class='clear' /> </div> <br class="clear" /> </div> <?php $theme_sidebars = array(); foreach ( $wp_registered_sidebars as $sidebar => $registered_sidebar ) { if ( str_contains( $registered_sidebar['class'], 'inactive-sidebar' ) || str_starts_with( $sidebar, 'orphaned_widgets' ) ) { $wrap_class = 'widgets-holder-wrap'; if ( ! empty( $registered_sidebar['class'] ) ) { $wrap_class .= ' ' . $registered_sidebar['class']; } $is_inactive_widgets = 'wp_inactive_widgets' === $registered_sidebar['id']; ?> <div class="<?php echo esc_attr( $wrap_class ); ?>"> <div class="widget-holder inactive"> <?php wp_list_widget_controls( $registered_sidebar['id'], $registered_sidebar['name'] ); ?> <?php if ( $is_inactive_widgets ) { ?> <div class="remove-inactive-widgets"> <form method="post"> <p> <?php $attributes = array( 'id' => 'inactive-widgets-control-remove' ); if ( empty( $sidebars_widgets['wp_inactive_widgets'] ) ) { $attributes['disabled'] = ''; } submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes ); ?> <span class="spinner"></span> </p> <?php wp_nonce_field( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); ?> </form> </div> <?php } ?> </div> <?php if ( $is_inactive_widgets ) { ?> <p class="description"><?php _e( 'This will clear all items from the inactive widgets list. You will not be able to restore any customizations.' ); ?></p> <?php } ?> </div> <?php } else { $theme_sidebars[ $sidebar ] = $registered_sidebar; } } ?> </div> </div> <?php $i = 0; $split = 0; $single_sidebar_class = ''; $sidebars_count = count( $theme_sidebars ); if ( $sidebars_count > 1 ) { $split = (int) ceil( $sidebars_count / 2 ); } else { $single_sidebar_class = ' single-sidebar'; } ?> <div class="widget-liquid-right"> <div id="widgets-right" class="wp-clearfix<?php echo $single_sidebar_class; ?>"> <div class="sidebars-column-1"> <?php foreach ( $theme_sidebars as $sidebar => $registered_sidebar ) { $wrap_class = 'widgets-holder-wrap'; if ( ! empty( $registered_sidebar['class'] ) ) { $wrap_class .= ' sidebar-' . $registered_sidebar['class']; } if ( $i > 0 ) { $wrap_class .= ' closed'; } if ( $split && $i === $split ) { ?> </div><div class="sidebars-column-2"> <?php } ?> <div class="<?php echo esc_attr( $wrap_class ); ?>"> <?php // Show the control forms for each of the widgets in this sidebar. wp_list_widget_controls( $sidebar, $registered_sidebar['name'] ); ?> </div> <?php ++$i; } ?> </div> </div> </div> <form method="post"> <?php wp_nonce_field( 'save-sidebar-widgets', '_wpnonce_widgets', false ); ?> </form> <br class="clear" /> </div> <div class="widgets-chooser"> <ul class="widgets-chooser-sidebars"></ul> <div class="widgets-chooser-actions"> <button class="button widgets-chooser-cancel"><?php _e( 'Cancel' ); ?></button> <button class="button button-primary widgets-chooser-add"><?php _e( 'Add Widget' ); ?></button> </div> </div> <?php /** * Fires after the available widgets and sidebars have loaded, before the admin footer. * * @since 2.2.0 */ do_action( 'sidebar_admin_page' ); require_once ABSPATH . 'wp-admin/admin-footer.php'; options-writing.php 0000644 00000022145 15013565477 0010452 0 ustar 00 <?php /** * Writing settings administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'manage_options' ) ) { wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) ); } // Used in the HTML title tag. $title = __( 'Writing Settings' ); $parent_file = 'options-general.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links.' ) . '</p>' . '<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>', ) ); /** This filter is documented in wp-admin/options.php */ if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { get_current_screen()->add_help_tab( array( 'id' => 'options-postemail', 'title' => __( 'Post Via Email' ), 'content' => '<p>' . __( 'Post via email settings allow you to send your WordPress installation an email with the content of your post. You must set up a secret email account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.' ) . '</p>', ) ); } /** This filter is documented in wp-admin/options-writing.php */ if ( apply_filters( 'enable_update_services_configuration', true ) ) { get_current_screen()->add_help_tab( array( 'id' => 'options-services', 'title' => __( 'Update Services' ), 'content' => '<p>' . __( 'If desired, WordPress will automatically alert various services of your new posts.' ) . '</p>', ) ); } get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/settings-writing-screen/">Documentation on Writing Settings</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); wp_enqueue_script( 'user-profile' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <form method="post" action="options.php"> <?php settings_fields( 'writing' ); ?> <table class="form-table" role="presentation"> <?php if ( get_site_option( 'initial_db_version' ) < 32453 ) : ?> <tr> <th scope="row"><?php _e( 'Formatting' ); ?></th> <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: Hidden accessibility text. */ _e( 'Formatting' ); ?> </span></legend> <label for="use_smilies"> <input name="use_smilies" type="checkbox" id="use_smilies" value="1" <?php checked( '1', get_option( 'use_smilies' ) ); ?> /> <?php _e( 'Convert emoticons like <code>:-)</code> and <code>:-P</code> to graphics on display' ); ?></label><br /> <label for="use_balanceTags"><input name="use_balanceTags" type="checkbox" id="use_balanceTags" value="1" <?php checked( '1', get_option( 'use_balanceTags' ) ); ?> /> <?php _e( 'WordPress should correct invalidly nested XHTML automatically' ); ?></label> </fieldset></td> </tr> <?php endif; ?> <tr> <th scope="row"><label for="default_category"><?php _e( 'Default Post Category' ); ?></label></th> <td> <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'default_category', 'orderby' => 'name', 'selected' => get_option( 'default_category' ), 'hierarchical' => true, ) ); ?> </td> </tr> <?php $post_formats = get_post_format_strings(); unset( $post_formats['standard'] ); ?> <tr> <th scope="row"><label for="default_post_format"><?php _e( 'Default Post Format' ); ?></label></th> <td> <select name="default_post_format" id="default_post_format"> <option value="0"><?php echo get_post_format_string( 'standard' ); ?></option> <?php foreach ( $post_formats as $format_slug => $format_name ) : ?> <option<?php selected( get_option( 'default_post_format' ), $format_slug ); ?> value="<?php echo esc_attr( $format_slug ); ?>"><?php echo esc_html( $format_name ); ?></option> <?php endforeach; ?> </select> </td> </tr> <?php if ( get_option( 'link_manager_enabled' ) ) : ?> <tr> <th scope="row"><label for="default_link_category"><?php _e( 'Default Link Category' ); ?></label></th> <td> <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'default_link_category', 'orderby' => 'name', 'selected' => get_option( 'default_link_category' ), 'hierarchical' => true, 'taxonomy' => 'link_category', ) ); ?> </td> </tr> <?php endif; ?> <?php do_settings_fields( 'writing', 'default' ); do_settings_fields( 'writing', 'remote_publishing' ); // A deprecated section. ?> </table> <?php /** This filter is documented in wp-admin/options.php */ if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { ?> <h2 class="title"><?php _e( 'Post via email' ); ?></h2> <p> <?php printf( /* translators: 1, 2, 3: Examples of random email addresses. */ __( 'To post to WordPress by email, you must set up a secret email account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: %1$s, %2$s, %3$s.' ), sprintf( '<kbd>%s</kbd>', wp_generate_password( 8, false ) ), sprintf( '<kbd>%s</kbd>', wp_generate_password( 8, false ) ), sprintf( '<kbd>%s</kbd>', wp_generate_password( 8, false ) ) ); ?> </p> <table class="form-table" role="presentation"> <tr> <th scope="row"><label for="mailserver_url"><?php _e( 'Mail Server' ); ?></label></th> <td><input name="mailserver_url" type="text" id="mailserver_url" value="<?php form_option( 'mailserver_url' ); ?>" class="regular-text code" /> <label for="mailserver_port"><?php _e( 'Port' ); ?></label> <input name="mailserver_port" type="text" id="mailserver_port" value="<?php form_option( 'mailserver_port' ); ?>" class="small-text" /> </td> </tr> <tr> <th scope="row"><label for="mailserver_login"><?php _e( 'Login Name' ); ?></label></th> <td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option( 'mailserver_login' ); ?>" class="regular-text ltr" /></td> </tr> <tr class="mailserver-pass-wrap"> <th scope="row"> <label for="mailserver_pass"> <?php _e( 'Password' ); ?> </label> </th> <td> <input type="hidden" value=" " /><!-- #24364 workaround --> <span class="wp-pwd"> <input type="text" name="mailserver_pass" id="mailserver_pass" class="regular-text ltr" autocomplete="off" data-reveal="1" data-pw="<?php echo esc_attr( get_option( 'mailserver_pass' ) ); ?>" /> <button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" data-start-masked="1" aria-label="<?php esc_attr_e( 'Hide password' ); ?>"> <span class="dashicons dashicons-visibility" aria-hidden="true"></span> </button> </span> </td> </tr> <tr> <th scope="row"><label for="default_email_category"><?php _e( 'Default Mail Category' ); ?></label></th> <td> <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option( 'default_email_category' ), 'hierarchical' => true, ) ); ?> </td> </tr> <?php do_settings_fields( 'writing', 'post_via_email' ); ?> </table> <?php } ?> <?php /** * Filters whether to enable the Update Services section in the Writing settings screen. * * @since 3.0.0 * * @param bool $enable Whether to enable the Update Services settings area. Default true. */ if ( apply_filters( 'enable_update_services_configuration', true ) ) { ?> <h2 class="title"><?php _e( 'Update Services' ); ?></h2> <?php if ( '1' === get_option( 'blog_public' ) ) : ?> <p><label for="ping_sites"> <?php printf( /* translators: %s: Documentation URL. */ __( 'When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see the <a href="%s">Update Services</a> documentation article. Separate multiple service URLs with line breaks.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/update-services/' ) ); ?> </label></p> <textarea name="ping_sites" id="ping_sites" class="large-text code" rows="3"><?php echo esc_textarea( get_option( 'ping_sites' ) ); ?></textarea> <?php else : ?> <p> <?php printf( /* translators: 1: Documentation URL, 2: URL to Reading Settings screen. */ __( 'WordPress is not notifying any <a href="%1$s">Update Services</a> because of your site’s <a href="%2$s">visibility settings</a>.' ), __( 'https://developer.wordpress.org/advanced-administration/wordpress/update-services/' ), 'options-reading.php' ); ?> </p> <?php endif; ?> <?php } // enable_update_services_configuration ?> <?php do_settings_sections( 'writing' ); ?> <?php submit_button(); ?> </form> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> network.php 0000644 00000012622 15013565477 0006766 0 ustar 00 <?php /** * Network installation administration panel. * * A multi-step process allowing the user to enable a network of WordPress sites. * * @since 3.0.0 * * @package WordPress * @subpackage Administration */ define( 'WP_INSTALLING_NETWORK', true ); /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'setup_network' ) ) { wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) ); } if ( is_multisite() ) { if ( ! is_network_admin() ) { wp_redirect( network_admin_url( 'setup.php' ) ); exit; } if ( ! defined( 'MULTISITE' ) ) { wp_die( __( 'The Network creation panel is not for WordPress MU networks.' ) ); } } require_once __DIR__ . '/includes/network.php'; // We need to create references to ms global tables to enable Network. foreach ( $wpdb->tables( 'ms_global' ) as $table => $prefixed_table ) { $wpdb->$table = $prefixed_table; } if ( ! network_domain_check() && ( ! defined( 'WP_ALLOW_MULTISITE' ) || ! WP_ALLOW_MULTISITE ) ) { wp_die( printf( /* translators: 1: WP_ALLOW_MULTISITE, 2: wp-config.php */ __( 'You must define the %1$s constant as true in your %2$s file to allow creation of a Network.' ), '<code>WP_ALLOW_MULTISITE</code>', '<code>wp-config.php</code>' ) ); } if ( is_network_admin() ) { // Used in the HTML title tag. $title = __( 'Network Setup' ); $parent_file = 'settings.php'; } else { // Used in the HTML title tag. $title = __( 'Create a Network of WordPress Sites' ); $parent_file = 'tools.php'; } $network_help = '<p>' . __( 'This screen allows you to configure a network as having subdomains (<code>site1.example.com</code>) or subdirectories (<code>example.com/site1</code>). Subdomains require wildcard subdomains to be enabled in Apache and DNS records, if your host allows it.' ) . '</p>' . '<p>' . __( 'Choose subdomains or subdirectories; this can only be switched afterwards by reconfiguring your installation. Fill out the network details, and click Install. If this does not work, you may have to add a wildcard DNS record (for subdomains) or change to another setting in Permalinks (for subdirectories).' ) . '</p>' . '<p>' . __( 'The next screen for Network Setup will give you individually-generated lines of code to add to your wp-config.php and .htaccess files. Make sure the settings of your FTP client make files starting with a dot visible, so that you can find .htaccess; you may have to create this file if it really is not there. Make backup copies of those two files.' ) . '</p>' . '<p>' . __( 'Add the designated lines of code to wp-config.php (just before <code>/*...stop editing...*/</code>) and <code>.htaccess</code> (replacing the existing WordPress rules).' ) . '</p>' . '<p>' . __( 'Once you add this code and refresh your browser, multisite should be enabled. This screen, now in the Network Admin navigation menu, will keep an archive of the added code. You can toggle between Network Admin and Site Admin by clicking on the Network Admin or an individual site name under the My Sites dropdown in the Toolbar.' ) . '</p>' . '<p>' . __( 'The choice of subdirectory sites is disabled if this setup is more than a month old because of permalink problems with “/blog/” from the main site. This disabling will be addressed in a future version.' ) . '</p>' . '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/create-network/">Documentation on Creating a Network</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/tools-network-screen/">Documentation on the Network Screen</a>' ) . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'network', 'title' => __( 'Network' ), 'content' => $network_help, ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/create-network/">Documentation on Creating a Network</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/tools-network-screen/">Documentation on the Network Screen</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <?php if ( $_POST ) { check_admin_referer( 'install-network-1' ); require_once ABSPATH . 'wp-admin/includes/upgrade.php'; // Create network tables. install_network(); $base = parse_url( trailingslashit( get_option( 'home' ) ), PHP_URL_PATH ); $subdomain_install = allow_subdomain_install() ? ! empty( $_POST['subdomain_install'] ) : false; if ( ! network_domain_check() ) { $result = populate_network( 1, get_clean_basedomain(), sanitize_email( $_POST['email'] ), wp_unslash( $_POST['sitename'] ), $base, $subdomain_install ); if ( is_wp_error( $result ) ) { if ( 1 === count( $result->get_error_codes() ) && 'no_wildcard_dns' === $result->get_error_code() ) { network_step2( $result ); } else { network_step1( $result ); } } else { network_step2(); } } else { network_step2(); } } elseif ( is_multisite() || network_domain_check() ) { network_step2(); } else { network_step1(); } ?> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> admin-ajax.php 0000644 00000012032 15013565477 0007301 0 ustar 00 <?php /** * WordPress Ajax Process Execution * * @package WordPress * @subpackage Administration * * @link https://developer.wordpress.org/plugins/javascript/ajax */ /** * Executing Ajax process. * * @since 2.1.0 */ define( 'DOING_AJAX', true ); if ( ! defined( 'WP_ADMIN' ) ) { define( 'WP_ADMIN', true ); } /** Load WordPress Bootstrap */ require_once dirname( __DIR__ ) . '/wp-load.php'; /** Allow for cross-domain requests (from the front end). */ send_origin_headers(); header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); header( 'X-Robots-Tag: noindex' ); // Require a valid action parameter. if ( empty( $_REQUEST['action'] ) || ! is_scalar( $_REQUEST['action'] ) ) { wp_die( '0', 400 ); } /** Load WordPress Administration APIs */ require_once ABSPATH . 'wp-admin/includes/admin.php'; /** Load Ajax Handlers for WordPress Core */ require_once ABSPATH . 'wp-admin/includes/ajax-actions.php'; send_nosniff_header(); nocache_headers(); /** This action is documented in wp-admin/admin.php */ do_action( 'admin_init' ); $core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', 'autocomplete-user', 'dashboard-widgets', 'logged-in', 'rest-nonce', ); $core_actions_post = array( 'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', 'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment', 'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment', 'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes', 'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax', 'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink', 'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order', 'save-widget', 'delete-inactive-widgets', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor', 'send-attachment-to-editor', 'save-attachment-order', 'media-create-image-subsizes', 'heartbeat', 'get-revision-diffs', 'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail', 'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'activate-plugin', 'update-plugin', 'crop-image', 'generate-password', 'save-wporg-username', 'delete-plugin', 'search-plugins', 'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme', 'install-theme', 'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file', 'wp-privacy-export-personal-data', 'wp-privacy-erase-personal-data', 'health-check-site-status-result', 'health-check-dotorg-communication', 'health-check-is-in-debug-mode', 'health-check-background-updates', 'health-check-loopback-requests', 'health-check-get-sizes', 'toggle-auto-updates', 'send-password-reset', ); // Deprecated. $core_actions_post_deprecated = array( 'wp-fullscreen-save-post', 'press-this-save-post', 'press-this-add-category', 'health-check-dotorg-communication', 'health-check-is-in-debug-mode', 'health-check-background-updates', 'health-check-loopback-requests', ); $core_actions_post = array_merge( $core_actions_post, $core_actions_post_deprecated ); // Register core Ajax calls. if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get, true ) ) { add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 ); } if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $core_actions_post, true ) ) { add_action( 'wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '_', $_POST['action'] ), 1 ); } add_action( 'wp_ajax_nopriv_generate-password', 'wp_ajax_nopriv_generate_password' ); add_action( 'wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat', 1 ); // Register Plugin Dependencies Ajax calls. add_action( 'wp_ajax_check_plugin_dependencies', array( 'WP_Plugin_Dependencies', 'check_plugin_dependencies_during_ajax' ) ); $action = $_REQUEST['action']; if ( is_user_logged_in() ) { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_{$action}" ) ) { wp_die( '0', 400 ); } /** * Fires authenticated Ajax actions for logged-in users. * * The dynamic portion of the hook name, `$action`, refers * to the name of the Ajax action callback being fired. * * @since 2.1.0 */ do_action( "wp_ajax_{$action}" ); } else { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_nopriv_{$action}" ) ) { wp_die( '0', 400 ); } /** * Fires non-authenticated Ajax actions for logged-out users. * * The dynamic portion of the hook name, `$action`, refers * to the name of the Ajax action callback being fired. * * @since 2.8.0 */ do_action( "wp_ajax_nopriv_{$action}" ); } // Default status. wp_die( '0' ); options-media.php 0000644 00000014551 15013565477 0010050 0 ustar 00 <?php /** * Media settings administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'manage_options' ) ) { wp_die( __( 'Sorry, you are not allowed to manage options for this site.' ) ); } // Used in the HTML title tag. $title = __( 'Media Settings' ); $parent_file = 'options-general.php'; $media_options_help = '<p>' . __( 'You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size.' ) . '</p>'; if ( ! is_multisite() && ( get_option( 'upload_url_path' ) || get_option( 'upload_path' ) && 'wp-content/uploads' !== get_option( 'upload_path' ) ) ) { $media_options_help .= '<p>' . __( 'Uploading Files allows you to choose the folder and path for storing your uploaded files.' ) . '</p>'; } $media_options_help .= '<p>' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $media_options_help, ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/settings-media-screen/">Documentation on Media Settings</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <form action="options.php" method="post"> <?php settings_fields( 'media' ); ?> <h2 class="title"><?php _e( 'Image sizes' ); ?></h2> <p><?php _e( 'The sizes listed below determine the maximum dimensions in pixels to use when adding an image to the Media Library.' ); ?></p> <table class="form-table" role="presentation"> <tr> <th scope="row"><?php _e( 'Thumbnail size' ); ?></th> <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: Hidden accessibility text. */ _e( 'Thumbnail size' ); ?> </span></legend> <label for="thumbnail_size_w"><?php _e( 'Width' ); ?></label> <input name="thumbnail_size_w" type="number" step="1" min="0" id="thumbnail_size_w" value="<?php form_option( 'thumbnail_size_w' ); ?>" class="small-text" /> <br /> <label for="thumbnail_size_h"><?php _e( 'Height' ); ?></label> <input name="thumbnail_size_h" type="number" step="1" min="0" id="thumbnail_size_h" value="<?php form_option( 'thumbnail_size_h' ); ?>" class="small-text" /> </fieldset> <input name="thumbnail_crop" type="checkbox" id="thumbnail_crop" value="1"<?php checked( '1', get_option( 'thumbnail_crop' ) ); ?> /> <label for="thumbnail_crop"><?php _e( 'Crop thumbnail to exact dimensions (normally thumbnails are proportional)' ); ?></label> </td> </tr> <tr> <th scope="row"><?php _e( 'Medium size' ); ?></th> <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: Hidden accessibility text. */ _e( 'Medium size' ); ?> </span></legend> <label for="medium_size_w"><?php _e( 'Max Width' ); ?></label> <input name="medium_size_w" type="number" step="1" min="0" id="medium_size_w" value="<?php form_option( 'medium_size_w' ); ?>" class="small-text" /> <br /> <label for="medium_size_h"><?php _e( 'Max Height' ); ?></label> <input name="medium_size_h" type="number" step="1" min="0" id="medium_size_h" value="<?php form_option( 'medium_size_h' ); ?>" class="small-text" /> </fieldset></td> </tr> <tr> <th scope="row"><?php _e( 'Large size' ); ?></th> <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: Hidden accessibility text. */ _e( 'Large size' ); ?> </span></legend> <label for="large_size_w"><?php _e( 'Max Width' ); ?></label> <input name="large_size_w" type="number" step="1" min="0" id="large_size_w" value="<?php form_option( 'large_size_w' ); ?>" class="small-text" /> <br /> <label for="large_size_h"><?php _e( 'Max Height' ); ?></label> <input name="large_size_h" type="number" step="1" min="0" id="large_size_h" value="<?php form_option( 'large_size_h' ); ?>" class="small-text" /> </fieldset></td> </tr> <?php do_settings_fields( 'media', 'default' ); ?> </table> <?php /** * @global array $wp_settings */ if ( isset( $GLOBALS['wp_settings']['media']['embeds'] ) ) : ?> <h2 class="title"><?php _e( 'Embeds' ); ?></h2> <table class="form-table" role="presentation"> <?php do_settings_fields( 'media', 'embeds' ); ?> </table> <?php endif; ?> <?php if ( ! is_multisite() ) : ?> <h2 class="title"><?php _e( 'Uploading Files' ); ?></h2> <table class="form-table" role="presentation"> <?php /* * If upload_url_path is not the default (empty), * or upload_path is not the default ('wp-content/uploads' or empty), * they can be edited, otherwise they're locked. */ if ( get_option( 'upload_url_path' ) || get_option( 'upload_path' ) && 'wp-content/uploads' !== get_option( 'upload_path' ) ) : ?> <tr> <th scope="row"><label for="upload_path"><?php _e( 'Store uploads in this folder' ); ?></label></th> <td><input name="upload_path" type="text" id="upload_path" value="<?php echo esc_attr( get_option( 'upload_path' ) ); ?>" class="regular-text code" /> <p class="description"> <?php /* translators: %s: wp-content/uploads */ printf( __( 'Default is %s' ), '<code>wp-content/uploads</code>' ); ?> </p> </td> </tr> <tr> <th scope="row"><label for="upload_url_path"><?php _e( 'Full URL path to files' ); ?></label></th> <td><input name="upload_url_path" type="text" id="upload_url_path" value="<?php echo esc_attr( get_option( 'upload_url_path' ) ); ?>" class="regular-text code" /> <p class="description"><?php _e( 'Configuring this is optional. By default, it should be blank.' ); ?></p> </td> </tr> <tr> <td colspan="2" class="td-full"> <?php else : ?> <tr> <td class="td-full"> <?php endif; ?> <label for="uploads_use_yearmonth_folders"> <input name="uploads_use_yearmonth_folders" type="checkbox" id="uploads_use_yearmonth_folders" value="1"<?php checked( '1', get_option( 'uploads_use_yearmonth_folders' ) ); ?> /> <?php _e( 'Organize my uploads into month- and year-based folders' ); ?> </label> </td> </tr> <?php do_settings_fields( 'media', 'uploads' ); ?> </table> <?php endif; ?> <?php do_settings_sections( 'media' ); ?> <?php submit_button(); ?> </form> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> images/browser.png 0000644 00000117262 15013565477 0010230 0 ustar 00 �PNG IHDR l � ,�Qo �yIDATx�콋�%�]&�`'6&vwfc��ag�,b���o0��`���-�,���^��l���ղ%[~�����ec#�z�e=��֣�9�̬�s����61��=�ܖԒZ�{�e�:"�>�*+++���~��g<���������������mmm�S��T�2�[��g\p�?QU�� �Ǎ��q�Z���r]�a��T�2����B�w�?���~@�/c�cb�S��T�2��P!`'�~#���S��T��l���S��T��= �SGLe*S��`�m;Ne*S��T��e�Le*S� {*S��T�2�T�2��L�=��Le*SyJv�4�T�2��L�]&���T�2� ��2��Le*`Oe*S������2��Le*O�2�T�2��L�=��Le*S� {*S��T�����23Ne*S��T��e�Le*S� {*S��T�2�T�v�,˩L�i_�SGL�V��X��b1~��_������.�=���c���}h*SyZ� ���k ����;^r�%�y�7~�K_��8��qk�ָu�x������x�n����L�����9p�����P��u��>�o��ld��x�qhK������|���n��C8��!���\�A�[�;��p,�������O�϶�^��m��й����:��u-֙���^�֖�r����~�}�����\�u�辷�n��¹[�Z�C:6��6m֮C��j��:�v�����@�C����u�{j�g3S�ʉ, �|>�۷o���+Ǐ�?���75�<�X����7��O�S������l���SI�o�����͍�t��qsc�����Ld?�۟~߿�:�o��[�3}����E������[����z��[��u�v�cS{�ؠ>֑�ڿ�����-�}ks?��=��M�?յ���n��[�����&�a{�}s����=�m��/�q����&����t�V�}}�~u�ln�~6ԏ[�_����w���;>o���-?��>������3���l�am�B�nl��f~���ז������n���8:q�}��b�q~���~����|�w� ǜ(��q~�[�٧^6>�g����X���7s��w�?\3����_�����e?7��>�;��c����/��r��re6��� �T��O��7RY���O���~5v�qխ8��~\v�t�0.S��}��K�.�X�Ϩk�J��7���?��t�jX��l~[.�t�0v�tl:c�1.Q~Km������~�舘�!�mX���n�O��O��x��:�u���7T�ܥ���{�o����#�aHu C�zy>�!]�K��V��2�k,� �q���q�G�ľ��f�o�u���GhG�D�ϫ%�4t�����ѣ^�>�u�n���{�m�R]8w5��{<���y+ׇ�q��ϹgC�?�����|�tސ�q#}^�/��t,���=:��;`/n�i���2>�ܟ�^��q|ٯ����8��o��s����s�P��q�ٓ�>����K��8~����j��|N��7�cq��j��n|��h��/�������g�?t�ώ����3��o8������fkf���}n�\%6����'��qI �ȉ� �Z�o�$�8�c�.������x&i��&@�I��u)�MЉ��H�&}`a�:�T�8&�2���<� ߧku����G�qS]���s��^xN���@E�͊���='5� � h�� � ��=�� �n�k�.�?�%����u��{�sp]�+�߯���hÐ�c�6�>�@>vz�->��&\��u���ᢐ����~�'=/�}��6�|ohے�hI������B��]�/��+�/�3��(�7CT����� ؋�}d|�E??~��^2����q<���G)�-�cq��u�������w.���r�3�����戅��cp,���ݾ3�8{��O>s������w�4��{~a��w����~�18�����;�^ 6=q��&Y��\p�bHd)`3�L�� ���"}���p��`8'"� �&�ձN��`P"���Ť.f[dFK�(��#�\�0� �����o (�UQ�^�y?1M���y�t>��=$Pb� =���"��О��-� q��` F�"�����^��ɞ�A�@ �����چ�g�k������X�z����K���q �.YX8�hɅ�w���x~q���-JX��F�+1����8"`c��v����q������P�~�o�����:v�}�k�2./�o���~(P_�(�0��98u�V����3�W����o�߷�:���X���98u�g���Ej0k� �ַƏ~�t<��]�l�+�(ufL�'m�I�iB��a���� ��2�m=�t>&��#��l˞&/�`A���[ibF|���x�s₅��W ��Y�6�A�m�Yg'6�#��l'Ydo`�=�1�_O&�s:�E6މ� ��5[�A��[�G/�- 8G ;�i�(�7�ytf����a���u�K�%U0M�Pb} �hpb�Wd�����@�%e`1�����. \:��,�����'�� �<�c�5$�#�o=��ӹ�T��-g ���q8P��>S�{h��t.A;յ���{����K�~(P��8�0�ƹ�u=� ����/�W]u5=�p��|8!hZ��i2��u��լ)�tb/˕e �K��A�$sX�/@�2�RrDgPc]���^����i-� �8�;i�>���5N2�N��`Y���,nEs�,s%�!PaR��j2�= , ����צ�=��4Y���3ekϽ���Bѓ! ,,��s�`��KN�t`2c����`vM�)ː�wY��;�,��!��w%�J���-�,�t|��� H������cQb}�G�h�{~��t&�Y?�8����Á;���@]�s��k�љ���~8P�کԅ:w�}�|�z:ɬ��_��#�#�6�@]��Ʈ���a��?��dJ�Rm�̎�(}���z�<�d � $�R1i��FN��%&e#+� �$+�dp�fL�M$[� � eR��F9��Ҁk� � K�� ��E� p� � Ƙ�4�� �.:{�� m'��ҟ%��ԌW�Ni�қWb�1�v&��Ț��byЙ%+t]�C���k�=$���g�@&9h�~XJ�E]���R5����r-��o.\�|ݥ�#Zj�FLV)3�%��3�ؘ8�Uf�����x[9"X��a�Q@;Ձ�P�N�o�g^=��l� �S��a��#�6�@]�s���W���]��I9X�~����)���@]�s7��Q� �����?^w�u�\�x\�V�����?���v��Y��i�1'�۳̒�ɋ��ɿ���P���&<'���U륀���3x��ħC���@�&�J�����4��Z�j�F�I��80WE�b�W,`��J� �٭Y?A3F3s?�e��W�n�,T�#��j���r>R��le')�$$��+0{ � F���3*J*�fX�G���b����������yQ��BK��=�u�"��ue��NSY<����KX��b�.`�xø����>X���Z��Q'�>f���5��o�<|L�����c�6�B���X�w�7���?(�ݏַ>����@�n9"Q'�>р���o��t4~�+_ebÝ̦8��r2�mx2),M�Dv�;r����q��`I9:���_i��e���_�AN���i�>J� �: b�4�ma3���&<f��'+ZA�5x�Cn�h:�N�#: #\��rH�=3�3��2|�@���� ���#l���"&.�g���(��_/l�W p�H '����'4��Yl�0E�;�5s,��#(1\r`�s�"�#�ϐ#p���i�Y��C���8�]�NNB��=�]?X?h�e�N�}̀}��gv��`}�3U�ͲQ'�>��I��5�>�~��,u�� ��뮻�s�9g\�D��)9�w�%�A���K��U�f���S�Q�˴V,������R9%��.�js^��J�/)����K����"�� ��u�V�7�R�QL�,}p��JNN8�6�apԟm0��fͶ*.;�f]���0TL��h�6�^�:X��p���L ���̶!������(-Z�ƈ� }���� �#�[��5�(��ћ�G.l�8���ˑ,Ð���(�~��t��9�E���l�ƣGp�<�R^{��g�G�G��Xv�uk����S�v}8Xg�~xy8h.��:Q����>�r�T?�] X?h�e�NԽk�h��`��$�\y��N�`K�)��).=X��n��6QQy�HId)���g�n�;; �-�)��9�Ԧ�̵�9�E9���m�h#R�s8'2�٥�Ȩ���H k��JL����ȩ���+�����qW��i�[~ v۱͌��K��H�x�{�e`�v�n-q�NRJ�gK GL(o�w��ҡs�B� CV:(,� ��5��rJ��� �NN�n�P�І��q�j�H��a{�^�X�1+im�y�ˡ��3�v����D�G�뇁uN���H�}8�Nu��cm����̖�Ĭ���}��S�̈<�!k�0쇃��G��� u��B ��w���}|���O'$�l�0< �ˉdi��u��J'�aw�cx h�[��kK���A@�r��8ff�u�3��*GA8<���Z ����U9{e�&"V���Qi����K'�8Rb���L�~p�b����[ҐTCK!�}���IAҼ��Gk�Kg� �9�^y]:�V�8}����bD�S� �-tu�g�'<��-9H����g�d2�()�����NB�5Ho���r��)E�0r�r�$2�/G3�v��C�v��1��X����w$�~4�~8�~8`�:-r��CD��l<V�Nu�N�}"��5�\3���k8��$�dV�C�CN��$�N��)�I}�6��P\n'bpB3�#���4o����$�Q+��QK����/S�]i�����;%��N�X)�|X)��}ٛ�RO^9x�04�*�R� �##V�f/G\o�!�+�ct3�~�fӎY�!.��G.R�tkKd��Ƌw���QVҭ�?S{w�)�\�I���h%<�q�;q��� �l����P9|�ϗ��ԣ{?#m=�LP'u�h"�w�|�R��8��ڍ�ۀ}���m�>��6`��s�1��uv4~��H�;}|���{���Pt㖙� -�,��oO��n��z�[)ܽӲer��^�(Yae��)�1��a%Ӽ��L@�*�T�%�>氻���n;E|��N���W��+�htB �(ӧWb�Y2e�n��ŒI3T99��b����z�Й�w��^ �Z9�b)��� e*sR!x�/�öT3XnY:U~iЌ�Tb�}�Gd�uW �}�u�e�P���y?rwf�y-x��#�Y����}'��h������t�$�}̀���5Iuk��y���$��OXg)�5�K=�쳹��{��Me�i���@DƆ���1�h�'�a�:C�3�D�[�02j�Lv�~�B阍�̲����>3�ޱ�N�����7D\�<>�o�-f�A��(���n�JKZ�P0�z�m����s��`e��OȾ��G�ѫ�VY����Z?�κ�@�gr� ��*o��v�3A�W�\�=S"���8R6��q�K&�(i%�����;4ٯ��g�c�4u,z��HN��FW����)2�q�y�q�����N�c�]v:k�v��x��5 ���&_Fp��=�J��X��UtB��&��c���7��r��p���9� dS bh�1��<(���L[�cpX�38%@m�+�9h����&�N�<���,��Ȁ�k����u!jc�(˾�P�OQ�(���2��[����&ILQ�\�k���:���� g�)G[ ���x�e��2�[о���.��c�;���f�QQ��Ov�Xi�Kԟ�WN`��S̃�@�7��g�{v��Y�D�`�E?� S��5o�.h[�����#��|v��{��v-�us���]�C��ھ�x�[v-�u��s���Y�_��WƳ�:kܗ4mD�h'��N� �[:܋�ihx/�� � �?���Zd���о^�p �&��)}$Ĭ����FH ��vCf�;�Z/�Fc�Opbr��)mw �. ~�㋃"b�`���^�(*8z'�, d��0㚳�<� ��b��r���ͭR����Î �0���vqp�3�YG�,�@��'9���;P�g�sî��)]���s�J��=U���Q�"M���+�O�e�ώb�*`?xݵ��8���@��%ΰ�cl����]K�A������UW]5���rlJ�M�E���4�c����"��Ɖd^�h��D�c���̔;m� כU� H!���(�xå5����f��ӹ 9�Ȟ���+`��%��V��� ��� �%���av ��wٱ6��~�F�<8]�5��z �b�����T�ߠ>��^ d�ArN윅h�S<x0���1�]� C� -i&��i�9�y_�;`)Pr�%d_���`�d�z��"�� ��(�<z���ILd�G1�v�����k�S�Q玵��W�xj:�ܩ���^����D��}�kܕ�;��&O+���m�\��H�(6�=�JP���?2�('�3��g�5�mqs��]���k��;�q�� �ɨ �� K�4��2�5B.Q�H6�X^ۖ�!���$0s��1�K�YZ3�&�Kg�l�+zH���~�,'�����:���]ܖ��$?����7\r�5�t)�\��ɏ#������C��jG�����|��(?O,���d�(a��1��H ����8��i�����O�s��w��W��O�s��w�W���͟P�>�qb�9Iq�z��������l1d}qI���wrq;��Ἇ�2oH�ۦ?ج��TT�� \9sp)��l�8�/:3BE���`�8o�IW����/��*}��&;m�I��4�^�L��'�Yo���^2 ��W ˥�i�ŀY� �t�>�P ��`8t�`ly�#���:-�a��qCtT�� ���&5t�yt��:��3%��R$o,iԝ�`p��_3;h� )�Np�#�r��k�(� ��|U��ь���T��wl{UԵ�m����^u�t��}�{wl{U�u<��p)�o?�Ku?��$�N{^o,���$��G��`��e~��s����'>q��F)�l�kS��/� �ߒ�S���p�a�㐑�}��ZzӦ�,�/F�@pc��@�� ֦:��A{S��潗���Ԫ����[e䌄�O��L@ZK�� Gco�]0 3�� ����q�:���2�����5Zѽ��d!gdPt��͛��!�8#��9Hɞ��"�~�&�.�eX����k�4�R?+&9�/o��<�8:.��'᱾� u�ڢr�_�P�n�N�c}��8�`���=��Cv=KQ#�� ��^�!v��̉#6/{y���̼�\|*H"rJ)~د��{w\9�h���0�cwr� �0�������潘���re� ��N>q� ����)ʃ�y!�7g ��N��x�XR{b�R ��@�Ґ5� ���w!t�5�y�������yW�� �5J6�SU��㈱� $A���Fm`�����s�{�W�e}�X0�.:�R��\�(٧S��::�q�\6Yw�<�s�^x�~E�������}�_<�W������{�-{��}¯�98�x=��t�̮r�W���f��6�eT"�&���lrR_dZs�uKg���vޜp��[:�:�W�7����^ hiGGz� �SIbct0.�S��XAfk͘�{�!t�K����S]�O��PB�� r�GH��d�3�M�[��=�*Hcp���iE�8��)�x~|�R�%���3��__6�)JCN7&�DI��_����nwd ��*�J���wp�a�5�E`�u�R�0ȥ��sL9���/U�`�-5}D�p�A�ь�� �mDw��9>�~ܗ����9nmL�|��?���%�8�Ǧs�W�����W\q�O.���} /���8�D�u�]�{��Xߑf$9��ۡ1홧4�k�M�!� +�������v�x(n'T���s�n��� ��߁9�+:=�qr��C&�2+V�Gd�� ��A�����3Y�݆��v�Q�lA�'�18l�4-&�)XOn��̳�k�2 z/eޅ�{Nc��щ:���(����-�&tm[r��Ȧ�^���H:���}�X�/�l[֍_��O9�%�pA�����t�v��%K�1Li�{��8:��w��^�f->�g�0�ߥ�p� �����M)��2k�� >�;��cNT�>��+ƿ����/�d-����,�����9Q��`�#C�]�t�M�={����P� �foV�֓1'xa�,:�Y ��O�8lK�N9��++.��]gɀیvJ� އ@��z�6�X�Y6�`:ݷ��~���G%��Ү 2K;c�m#�g�%r|v��.Gq���L�'����ɹG�=*�� ����A�Ԯ�}o=W ?�}��.AuS#v�Q����!;�⎍#J3�r�{$qAo��FX!*i�g$JP(��H_@�LQ�j�/5p�"C&��KCwz��G3�8��Ě�Tv�d)$��.�h�T�n�Dfcb��!�-�($�F+��L3䗦���@��v�[2�0��W&_01B����Mfg.��9�$8�@��)���$��!��aX��K'��~��}�/:��J�Y:#/Ĝ�>��}�N��\T(9(#o�î�Ki�\�7�'s��.w:O�U�| Woia�7�Rϋ�#�pG�<8(B�7�9��(�c��e��o�鴠)�P�{�6��@9\ ڽv�S4��Ԧ��8,���� �[���wK�8� {*��`�w�y�w������Rھ�>痩�L��%��v�&TX�!x����� ر0m���U�\K�dtF7�#$Z�� v2��[|ߊ]�]�N�*��Ҧ>j;%�N�2�b��G�͘h���.i�>LmhIёȃ⬕(�5��K: Q�8��E�%4�;�0��ݶז���N�U)僞�6t�{@���A��N�G@O6=��Nکq��z��P����������(���B���gN7�m���/E�i1u9�3h�`�<�;�q4�Tv �?��ϧ��~(�!)Q&9{�����^}�� ���usi9 <i1;G<�'�� �J�$P�Gj؎*��D�V� �q�8�5�)k�:[�}<�b��N4�'�OL��@zW�k�2n�%P���zy�vw����C`[�p�)�'pQi b�M���Y�I3�:]�U|v�E �N�f� � )�}�;��S�X��w1(z��f��G};�����6lLJG��7�zml-�X�;?,J�d.��-/����䮖����q�x�v@s�arMe*;Y ��� �!xވ~�m�2�;���&'C�;��J[픾�]'(�2��_z��ۧ�n}���ھ��P�'��d��o�,$�}�Jَf�� P�ȲZ��Dg�Yw�U��^�j�!�ˁ�Na��̶(��@j6ۙ���9ʹ�QK`%0��z��DX�u�P�E�r �>��Z�\7�tn[�v���/������Y:کqԱ.'�[��G��|6�w�m�I��E"�=�����9ϲ����m��o.u�q$�_�^��'���N�5��]�]�p� ���ߒU�O����G�h !'zO��ֻ�EG(�6�y�S �OiՎ;n�(�0�luH0��H6��; !H� ���v��ŭu�6����B� �%�t��1���7�mއ�'�� m�u�3�#�aȼ�� ���ή��ϡ��B)�Ux��Z�7���Ba ��Ժ{-�_�>��)�+�ģ��� vv�����(�����mEޏ��w8����eɠ��d������D�����%�uO�=�]c�Ю��/���x鸙�zc��$�/mX��� �ͨ3���WG���M8�N��18�$d�3���C��'��Km+�=@B\;�! �m( |� `6�e���� ��,�`Ӌ�����d�2��{=.]p8���ZJ2�4 W���B�c1/,��,d��?\OZm �0��1�y�.z���N�L紝�g���8RZ�JAt���.8 �{�x�ض�3�s�B����!�ɷz��;V@k-<8����t�q$KD�"��0��2��* �]�v�m�����ם�6V�����ї�'bR�Q{!���$�����aG)�8N�N�.�'~�N&v�4���j����Z�m����@o��:B�(� ��@�wF$�x���AdKp�.�*�BK�ͦ t /� >�%�ޡh�QZ6�&�,�]zV���Y��,�V�B�^)Ը��)��ԋ��g7t��C�f�;=����,��i��j�i��6j�@��6���~n� �t�9��V�J?�2#��}�q4�Tv�@ 9�]cϐ���}���2e7f�ZL��AL��iO3߷�z��xb�A��3�Zx v� QK �;�u9�P�>��Q�]�_�j�G"�e���Wmo&'�w�&�f}/�Hׯ�"�9Ra����E{���R+�d�b ��W�$�J6�)�0Rc0�|��7ifh@e��� ܼ ���V�G�Q�4_�@���� �����b������9�F��xX�n�@�ót�KK�b�����.���4|�{�b��|�fM�=�g�Y������s�9g���[R�'X��k3�L�zo�OM��d������p����-'>��F,Z�+�t���M�:�̍!kvL�{�MA'[��0PW�f��O�?R��F����Mh���z�:o�7�r��l�Z�Aψ�ޗ����=0N0aJ9�X'5�~����%pZʉ� Z�߸C��:|1dǜ�"���a��Ώ�6(B �~�M��[KY�1��$|�ț�{���G�tr$��� XMm�>�u�:"���X�T�r�%K!�A�5ވ��w���q3�� 6 u�H�iK,gNK�T�X �jN�6}n���� 6�������6��H�nZ��`]mj_c�m&�m fr`�o#��@�]���b�������,6�����+� 34��l �M�ԯ`q�6y���S�ȭ�m���k�XC��so�mH����|f�7E�sn��bAB{x��!w������5�f��&�9��8�d�:*�U�Mc���C��o+b�ѧMۯ_�B��-��i�=��إu�(Z����9�6�8� {*;�`�x���;^z�)�zS{A0������5��Q���P��Cj���%05�1�N(� ح# P ��s��95���pJ�h�E��[�Eӹ�n��ڰo� ,�;:; G��7J ��N�7�f�8 �qͮ�>t*���� /6�ؙ(`n��"pk�L:�ƭ�;G<��M#0��TC��Q�L�X8)($��o�{h�Ժu�Lصq���i� wnIm�bӦ{j�4���2U��vZfc*ه~ <?>_1��6kݚ�Q�� ���c` )��w�=�r�-�ޕ��MI4`�4I1�Z�٣S�S�&HV� �- P��A�c}6}�N�4����V�A��c�p]�/��4��.������Dgv�����:�l������g�#� ���v <p��e��$��5]��Z��2 %8dN�e �k�[h�ڛ(�;H�UBJcMV��WH ���1ݭ_H@ �b�pq"��m��*Q�mî�#��A[S4�i�S��F�l��6��<��u����)]vT{���_���A��G3�8�0٦2�c) k���]C�����dz�:{\&G�*�L�6�c`��̶^,Rb? 5��9�U 0 |mȦN|Xo��k�P˼����ͻ� ��Uk��;b�7���F��D��tD�rp�:;� �`���lm��~�ڹE�\ Ӷ�SfJ<h-E!��1304�]����k��{�$��Jh �d�-��xm�2�d�-��%@o�,��q���~7�Q˾T(_OII@�j�#8(��q:~��m�t����][O���Uk56�H���G3�&��ʎH!92� Cd��7ߔ� ��X�f��)r�CO ���x]�O�]: %`J;ӏ��v��J4�[�(� ,b�a0�8��@�x��Yubo�����`�MB�I=X2@�K2�.JY���A&O�)!�k�T˛-��g�����Z9�X�@�kz'V��ҩ��?ވ������N$i�`�#�����x�^\����#9 �0�DK\h,Gq�c���6:S�b���]NTZ'�8�P�8���%�������S�1v��/��5ވ����m�uŗ��vP��5�PGq�QTƙ����0� ��~�I fIv�Y�Ťo���b9*�&t��6��vށ�W�2��9�ֺsT[�5�`m������@�n�;7�gK���1�a[ˌfS �S�Ulpp6�1�!�n\��{�����.7f؍��뺢��ʠӽq_ ^�Z�U�uٜ�8m ��^�Z�{�'�q�~l���q���n;���?*�H�=% �1�#6&�T��dK�����K����^�Rؚ�a�i 7Q`V"�JTtMgi}�$h��B����tbY7�7�h5��q�@�h�6_�7p�d������:j�̇ Ӯ��l8)[m��t8�I�f��B� �+tK{�t��8��Xo#�OZ:����7�UL�xC����i{�7>w�Mh�Ǎ��u�F*؊yva�� ^�����Z*��z9��6%i4�0��Ԧ�s���aFI��1�k |�A,U�︿I���~�>����S9v���Ȑ;�c�����FD�p��Y�:�u+���V�%@������ip 5� *�d��5�uGS��'&H[k��T_��\�Z� GR����ϵ ��C+��6"r��n�5Φ��_kҥ�ibvr �Z��~g�q���76��ĭ��X��E_t�@mVm�5�5��5�VK{�y�Q:�4�� E�Ķ&h5��$���v�k��������{g�-�4Q�l���$q�t�v�Fr�A�h�mY������o�jji�!��M���8j�Δ�L�X�!HC����;?2�_mh�5L���)uǨ�Z5r�p�z� ��$p����P3� ��������(]-�E�f�V-p���njO�19k��J�ٙ�8&�i�c�R���ŘȜ�A�4�#���DQk�4�e�ט�vb�8<[�)!GcM��['�2����ȴ� �[��:`\��y���lj�?�"֖Kj�doK/Yk[�xm�i�qd ���F�s��f<S�m]�b�m�WF��cj�6�'��_Kf�Ƒ�'`c�Me*O�@�X#2���^;����_&Fg���z����t��C��� �$��a��o�̪QDA��G�<X_C�� Ȭx��8qrbZ ��Q�v��Z�ƱН� 9ʂ��e@2�@ӭA�ў�m� �I��Ս�Y�@0E%xP�l[\$� ��F�k0���,�1�5Mz��:���b9>��� �k��( �q"�Q�ٶf�z6� ����y��A/*�%[]W{�県ҨO�w -�o�B��ȣ�u�~�7�#�� �����Fh�7�|�x�YgQ��\�A�\2+��5�LM��v�Mp}'���)3'}cS]�,� k퐓��IJ\P�[�I �=��5N>���H Di�6Ҍ�F��R��uk�-��� ��j9�.&9@L2o�/9 � @E�6�I� T�E����Q�f���v�\��6Gn�F�� ��)��5(X%tt9�����P9�u��.��7��&8B%p Ѝ#$:3Y2e?X��P�X8���Sk�P�F=����� ����5��B ���FOx�L�ćV��(1� %y���i~ :Z�+<��I�&Ӥ�����ڟB�&74Jm����N �PTEtA�I'dH2G1ٛ(3VQ��&$+�a� ��7�G��F�2�t�dn�� `k�NZ1XS���5Q��@��T�6�d���G�Oh������-�tf�]�Z�l���6�j����9�����(�_���ڱW����C��z�@�I3L�01�R�Sڶ��]�:bƋ��{G�㈀��7��m�NF�� �5d�����d;��GKݵ68�d`t��a`�Nk�I��]��u��aց��J�,@�W�np�� �c0�F��h<��a�wΆks��I�t�p�F!f�@A�҇�c�)��-�&sM�����M�jݳ��P�� ��B��l��y(����ӭ���h�\-�]��1: ��{\� �Q��x(0�#K� x/���2�k�3�&_;~��vk0k�mF�ʦ��Gk��W�<vG�G��=�T��x��3�d��t�8�~��<���S�j��t<P:��ԊM!.��� U�耶&hT!{у�����f����CZa���TQC��J��L[XVv�AS��Jo��!xL��)�m��I��l']�[l�4!+j�X��A���}�T�P;Ceַց%MP�u��"�V�ǖ}�:J$;��"Ȁk�_ݨ�hKp������Ҧ�V�u�Y���$�e�6�'M�FRDU�uT�H�NJ�D��Ux�A�ό _�I ��-S��d=T���4�}��ڦ����=��w���������F�~�k�}cc��������Dp�& �Ik����s�ol���ұ��:���T��ֆ��g��c�f���{�~ճ?����ڰ��X�~Ս6�MՇ{�گ���������7}.��6l��7��\�~��m���t���m�6|=�kj�Vꃭ ս}�>o��mm�>x�i�������un��9��-��~?��s�wHnQ�}�]���m��7x ֝���A��q�h��:K��d!�D�pb-�40�@����¤��3� �J���'X�������b2 ����O��uT� �v���Pg�# ���5+� m-&Kf��j�W3\�1tZ}W��[S�0�5�ൣ쨫��Ull�&��>�ʓ=ȩG�u�^�{�*k��B� ��RDB�(~�I���Z�R@�>Fd ��**k�d��SQ��dۡ F А��e��9䰿J�Ukq`��Q��P��YBP�2,hA���c�#�6�hխ�R*#+4�B�8H� h�)n�pj��0]*����*A�/.�z�� _5�z+G�� d �̞蕩b�j��6��`��`k�i�j;Aj^+���� R�u��V��&UˁN�W+�:/he�SF!7|8�:�+lTŨ���U{���̃�v��I�wL�:T��Q�\m}�Z�C+�N����!�WbL���rL.ʹ��]HL$����,�Z&:�#d�̤�瞃>�{嶁�a����=�iM�hG�:��yM���;�|1�� Ws�i�V�F&0�����ʋ;��1��馦�S�Z�3�eUk���P����T�1����Y� ��v|���-��3���z(6�pN���S���$s��9�j�� j�{S�ŴN+�ox�u���#��v�DN���zQm�x�/�o�8ݸ�c�j�̢�=+�pA�m-G%`ֵ��Z�#Ï�/�N��p�u�cx9���U>h��1�5��l�)�`C���iM�hG�;��@���+jS��g��rZd3��տ�`��{���h��ë�VR�J+ �6�"Q�����"�����3?\�<U�9!�n{%�C�Z^�^��J*��`O+�-�r�u��$Ӡ徹Qf'�>�����`vǕbծ8I̔'���IRi�n�KU�t���ՊY;����Y]v05vЄ�� �_�.��*�ve����yֶ�����f8q���Dk��&a]E1��i�e�ʙiA ��q4��i��8"`7��y�-*u@Y˔+˖M�RYf�*}�˱J��J�W�ӠG�Ff�3��� �J&X]ʌ��H�7�W\jU M8(��y�+��au�n�ڄ��M4%����ͶTY'�6���8��)uN�[��N/����X���'�r�/� G��'�^����g���j�R�!��z��P+��8���Y�:�RN��*�7M��m�dV�@'H��72��V�i�*�< �gN�R+�R����:k�A0�R�fS6r�/�q4��i��8"`��쌲��+���2#蹶���g�4Hjw�VŒD��f_�S�jH#'VƲ�ki�h�)K��L�1�K{J�2p�R7Zr@����)�u�6Ѱ"⺸'N�FNJ 4t͗��W��j�ԕVT��6b1ԧjM nx�>)�����h�3���̼J���;^5%�·��T���::��ګ~U�A6� �����R}��W���[1�&���X��'!���g�A� �I�gS����*"Nd�#m�i�qG�8����#1l�9h\�T�t�\a� �����u�'VW�8neOw�`@`5��`|0�����JK�Cm�80�K�A��߫SD}����Squ����mO�<�枮_z�Iw�@��VHI����:W+%�}�Kfk�U��!@��'F-v fP���B�A�^��0�����T��Z߯u�Z�G�t�� �>d_h⑉�͚�dO�8t�iP`��Qd �0��p��u�Z��I�k�fn��W+4jG'f�����Wo��y3��Wq�z�9w ċe�X�c�b^�uoU����_v�K}��^�v��/��j2��|�����)�/�������� ��� z9s�ց/$�r���{�,/�zc����66�_��w8�Q�Sѹ}n��a��X��c�ިޫ}�_W����v�{�}x�"u~���c� ^�����wΗ?�{�ޮ��_�淥w~�%_���~�x^)���Z��p�Ȥ�6�U�?H�i��Xć�� V��&4��N�;� 4��4`´� .P��5�MmF�sa�2}j�N�+*�VRk*�(�T�٢�N��^�U��QWJ�_�T�U+s����|�u<,�)��N�[ee gܫXA��3��FY�M���2 0 �J�*��m�eF�1��J�gQU�*�!E�M� �����1 ��A�T�nYˉD�%s+=J��Lm�=V��qt��QN���[�/�`|oz�Ϟ={�={����g<3�̟y���={R}��'�П�7�=3}�~�q��'�=c�^}������?�g��:w�����3Rl��3U/����{�p�o{��;��{ۿGu�y�^֍X�=8���n/�����s/۲7�e��=�L�}��g�{�9�&��Wmڣ띹G��v�=���}��=��~ث����h�to��=n��C��o�_xV�~T�_c�����Z�D�#�ĸ�~�%6�)-�W��J�C���d���I�: �5p�4 �Cm=��Đ�&���i#q:�Yd�6E�b3ZM�JZ�X�� &[�VkF��'�w�=�A��rL)M0�J&)�2ob#�c�V[okl�Ս�Ѱ�*{�K�e �R��&�]�ޥs� �L�6��Yl�U&c��\fS��*�y��=��J�CfvM]�Ei�Vcvr<nc�؊�W�s ��v�8���qG �|>^���S�=m�u߷��w��b*߇EQ"��Y.MafU8�% ��+�ٜ��iX��$3t��)]�(�2���a����&2K:�(��UE�^-����US�j�MI+*���e.�)�� Ӣ�%fE�k��J:D4�N;�%�m(h�6֧J9K�Υ��][��%�K�+Z�+H-��� �L�~.09��@���O�U��SHj��Wd�@̫$2���*2���� V8�*�s!0��O :��FX��� �H�~�E����Q�8:����\r��/\1>��lאLk�8���"�#uS�Z���w��*��#�9���6�Y�~JH��W$P��,0�q=��iPR-�,��Z�&(�4@� �J�ز6�s�lk=��l�d�3���Ą�YbR�6mK1�� �6a�K�i�XO:DȾ��� @� ���ՙE�r6��/4�ˇ�� Yyk��f3� ڀ�,��x��uv� -�=�e-�'|!�YtQ��F� ���3"�fo�=��W��"j����|G�mA��'��O}j��>f�N������h� '��7��#�F�����Qx�&[É\��4#� '�I���^�I�Sg���ǜ������R��&?X&'jQ�=���i��&o��X����c\�d�u+� � V�7bh���V��U�{j������ǜ&mQ�?0Q1)�R,�m�������.v��X����U�f�eQLV��&\����'@Ϣ����]^w�72����{�)^I���<�yE-�$�l*;sUͱR��?�i�q���>����J�%�yM��F�]W���m�� �Dv���*��^� � [8D�4{#;��OAe�!�)��,Ld1���7�N��V�0�8�S+@a�4br��� !�(�S:l ׆I^�e��dl�2[ڼ�Y_�����my/8N�Vf�A�v�����}7d��6x=:�*J�A�nx�3�ȸ 뻩�i�C>i�Qf�]�0��d� �t����N�uЌo��V�a��M�Z�؏��e��D̛�SH*��Z��cL�����i�q��+^|�I�������8!�ӊag��`%��V��0wX�,��WJ{U�������2kE/�b}u#���^�B�]c'[����X�1�������,���@-�Ur���L� ��v氭:�1���_fL�>�Z�@���V+�g0"���`�Ȭ.r��Ӎuo����������Z�@C�G��`G]��)��d�@"�θ�@a��,�3�!p�"N�+���[���M�x�2�t�2(���8:^�!b�^r1�8�{�v��t�Tr~�fr�$��;r�aU�dp|e�Q����O����f�A��Ӿ����&8o%�ؘ�@FhQ�hld]�@�k:�Z��6Ki�v܈Ѷ���*qM;�*;�jk����������~�9��n x�%(k�f&��V̔N�B`@�7�a�k��U�@��ʎ��u��ZӖ+i��N8�;�P+�\�����ш�۹�zqm�Z Z�2S��Rϝ��v�5b͐T�qt��R�?������=� ��"��8`N.����&�&)&�B����'�Ll��X���j���Ť.��+��(*3���K�5u]�̨�ZH"0[,j���_.��A�v����N�ZQhߢ�i�-h�* ��AF(�C�b5��*����'.���Me�FT,p ԓBr�B� �/���Bmez-��B�6�E�@I��((+6����=R��BЎҚpU�?�4���GxP)�[��R�k�Q�V,d��o�L��q��L��q��ߌ�(�3O�����:.�� �������X`bi�D i�,Ҁ� �P�k B�Y�A��v�0�����&�9�|^���E)�i�1� l �\�{D�"���� hd�t6�i���R�PK�\��� ���}Wdx�4����jQ�ޅ�Ϙ�\;�h�&0@_��=�e<h��p?��Z�[\qM�T`[ ,>�Bߣ�hW�x��ځ{�ݑ���eJ.���l ����B�`��z���Ԟ%1�&�)�:->W�i�q�7�\r�E)��P�i'�����0Y�di��|� S��^���0;c���i�Ҵ_�3���XI��/2��Fc⤶ι�Dj2���`M��p���9\���ap�<Lc��$j��[,4��^�@� h Kt&-���j佧�^��G�4fa��i,�&i�7bv`�nɸ�E����R �*� �J��^ �*��X�4+��|%���j�*�7�Q[�H�-���ƚ�B�|�����\)�:ym��W�1��S�v�tS ̦qt|�6���O��tl1g�5v��4Y�e��Q�ð����2���a��ݕ�g�v��%�Q����scș���dJMVz�1�m��$��Zx��\����ILs��jA&X�]� 3W�/�W쵰�Y�JJ�ڌń�q�Y1�p0D�o�nJ�l��}i�e�51Pܗ@Sl��-���?G5 �̄�|@iÑX����;[��D��Ch-66�E���R(�L��2�R� �ȌKI �&���qt�����a?m5l�A� �[P��`��$[}Z8�� kZT6����_�4U��P.�IV��8���{���I#UMVFsx!���f2Y]�H�-�8+'EJ�.�I� 1G2�J���`�z.L�B,�`q�4&�B���ȴj鰜p�D;��+��G��:m�k���]dN�(EP��҄���\}[D[�� ,�m3��Qhق�#nL9�����S���I&�^��告̎l���/9@;�1�i��S� ���}U�k�4�d� J!����5�*�i��lPR�c�wsa��/����~���9�|�I����D2lƺ�ݕfI��-��ЅjG1Ќ/���M:�iot�p�/���(�͗��r��ަ�W1L���QU�f /LbMx�?C��;�5$��fc6GT�,�r�̾ZYm���g!ଶ��j:�J�(픪��G�vVd��k*�IY�F0����P� 'caǡ'3��#N�>�ZNDi��|�٦�1�]-�{Q)�]q��yٮ��A�(����l'r4֓st���G��ڣ�֑u֢6� �s#T���|�9T� �#Z��o�3(Kg<z?�G5%����z���[E�(�e7��: *�S�w�'?���?dF|�迏}�c�{��)��D6=�)+�,:;� G(�&�l�� ����)��9X��9)���[ol�2��7��y�sƟ�����g6>����+2�y��s���t��a^�t|IX�Ԗy*�Xm�����(�MSu��y:n.O|I]W}A�7���'7����%���Wd��.�V[��ք#SL�_�ū�nj��]x�x��I)�[0�d��tM8����f�������Ĩ!����be�<|�u��XJ������d�?w��/��y��믿)�^v���O���?_���O~���� o?���_��7aὗ��S9��1�o��7˺��'4��wx69+��$'=S��G��HU��~��JX��O���g=�)�����#-</>麉Y_|�EO�����?#��hJ��|�h�h�ƀ��&���s���&Z�P�V�&2 b!֚�?���@ ,u�kM�2�v( �?��?����/{��Ɨ����^��� o�3�U#��q!�&j�A$]sPZ�=е��ɈdF�#t�6�y���GM̂��$����'�˼P��6p��#�=O�m#k��:��J�� �N�\}���?=^w�u��5�.��x��(R!��=6 -�S�b�eji���%���oիt�d��� �Wb��c$�B!ll�\� ��~��&����_:��O���g?{|��?��%�8��/_�������gv�ɟ���U�z���+��b�m%�~�[O����@}��h^x���� s�@*����O�kq��\[a���}|w�*�vv�2;K��t߯|�+y�M^�vxi�Q;��F?y��;� �)���'2���N���⤝�4OK靥�Nk�;M��N�|�f�:��ci�p,o�������^�4�_5��S�SNy�����~�q���b1`�s���;�ދͰ,�f�`��nnVB��ta��Ī �9���9��sy^8|m!��7^b�B�8��g�[8�aa�U옿������o����;��L�[�4^~�g�k��Z`�H� ��$+k���B����٢ub^��-�s8��C�TO�8���i� h;9��2 X�5W_����i�ʯ������|��y�k���,����Abܿ�[�E �����������:���o}�x�I'����iUY�8*�"d�����@;����}�^���Qe H�;����}����~䣒��A�����SO�_m ��8��,fj}�/���K�O������sTe����@��D�8�c��*Τ�RLe!����%����@.�F�8�9L���.r���ؿ�˿_���'�|�~<�SS9-��������f�ހ"�,�Z��W�Ȧ��,�Ug��v8�S�� s�X2_�'0�6�cbaoa�?-�+��k2Y��;�Y�0s���^q���;�k�+�v�]����u�x�-�������믹a��7/| g�̮1��y���, $�R������-(����ϵ00R�Z5�J�3�ڡ-��Կ�K�4�����n<��S�Sӳ;��S��q�7}������{���_����o}k�璑���cś�GJ�ј��dRxC�S�tvV�I)Ofq��J/nx�5��/`{_�WТ���KĤ+�N�O3`W�qp7��_���/�� ����χ}�J�?�����=a����� -s�I �:"@��)�� �S�.�જA����~Kb�/$�����4���/��z�ʬ�:/5P���'Zp��;,K M'�xs��Y, ĕ� j�.� dA�:��J�/��B���na�&]X?-3\�+E��>��r�x��7%��g���{�|�xg�|�m7������u7ܨ�]JR������+#�!ss��sE�T�� �0����당" Ih@�^q>���v�U +D?��N^��X|��N`�lJW�M |ꩯH��Ƴ{x9�S�8Q�0�;XP ������k��1�})�&� ��!'�Kv�7�����E���,"n������~�~�cmh����n�P�>���L��n�;9���[��.N{��`:�� ؏�m��)���,�S�g�l�̺���>�T���q6'{�Ӕ����g�u@��c|�^HS������ ���?(�z�M3���$��3�. m"+J���f86]wn��X�x/�B @��:��c���8匓w6+�l[8���鸙�um�4��P,( e��י�Ѣ�X(�-7�p�x�M7�w�s�x��w�wޛ�;�oJ`��O]6ޘ~�"W�<���rj�\�6�)��l�>���l�9������B;���1�ڇ>A�X�"9��s��lr?w����¯����3{M������:���қNn��p�u�w~�G��V�k�ka>�� �9���U��]�Ŭ�6��hk�1:עD6�7��y� @sJ+x�OtQ�=�$�<?3����"����K^���䏀c2 �v����G�~�����v�(9�����������CGU2`?��h/���4q�j>��X����L�V3����3h�3{�Ɍ�ΰ�.kg��o�S�����K�����_��7�X0əY�Bz�,���5�3�j��g��Y ������AO�cf���QY�J[�BNT ��`4̂�'���s���O;���K�WbJʼn���lA���o�q���hߛ��{��}�x�w��n/������j�v����vL`^k.'of���Һ�~y�>��r63s��O���̬����J<���v��ځ#�a<��Ȟ|��7��M�W���qɗ����p*��}r�-�KT���@g����j� � �@:�H�H�����_*����L.*E�p�㈖W��thְ֧H�;5߃A��������ԏ��������ݍqD�1W�HL1��L�c��,���*�P~�rc����a�fb,�3�:���P��\&d�A5/�7���Yp"��g���#�m���7M|Ű6�s��!M�Lļ�i���� ��@6�"�8����&(�v��� �T�L�B��ys9�J-h�*��>,h ��L��<�AG����ֈ��7�_�x�M��w�}'e�{��ڟoM�I��B�(lc���^0bG�`/���4�BMV�>�)*b^Z�� ��)�oFVW��w��ÿy����ud� ,�f���M;�q�J�w�f(Sx7²�[��~�S1j=�,��j��������l�.� t���T��Ȋ�Y)&^9Y扌�E�ߴS&�~���`-��v�5��ϰ и��|����~��>��k߭q�Et`؟|�// `��=���u����P��]l:f��i��L�$LyLnL�y%�aAv-@�y4�4�rH�9�sX��6)���P�w�}��j�7��.tb����^����+��7t���j���B�Q3J2Cs��sG��+�;�MP�`z�'�b^�� .)�#9�� . s��9����d�I�X̔6��Ĵo��@�rϽw�w$�!iٗ\���ۿ�LL��9���x������b��Q�Q���C�_�7�(@a����;g8� x�����f~f� ��O?=���͘(�� �0lm!ƚ38�sƙ��`>m ا�������Q���$S-$i0" @[I��NP.��;�i�%$�b���Z� �� q��\ ���;�q�^� ��М�f�X���_�{xy����7��@;jk����q�1�'��'/:6�>�����ց)��:�����w����o�,�#���{ ��-S����ŷǯ��fu`l�9�Z��}��>�1��y���+m���6&�3�fr,rPcuDŽq�'������K`ӱ��G8�!p ��)|��Uw�H ��Z�xR�]�=�NA�jW;����%���S7~����ƎDžz�������%#_�rJBک������]�Ր�)[Wyq����w��������!f�`j�u7�H �δhݛ��{�#�K�y�xYzOߗ�2༘�oޤ�N)o Z�!8r82�������`A �Q3�.EN�V��#8���:���' �� us�, �S�R\��o{k��C��sώ��aB��c��8Z@�B���2)X�)i�g���R�gQ��'�/Wh* s��0�����J�E�X�#h�/8�<L���ާm�;��h�� �ݟXf���Ƒ���q�s�\ Z�����[��27A�����a�X8/J��� �֎���+�� &�7]{�#������7�f<��cκ���:�����#d�/���?�k�pLw훶�y�Y�w���n<`�X�Y�e�s��������i.��f��+<��X���y�C��]bp#��?��?�,�'SN���Ʒ��IFNԵ�%��\����13ܫ"0���JgrP.,�x���{8�夺��kS��E���r����w�x��o���矟�n玟�D�|n������=ǥ��/X�g?�����O��1���]����λ�I�;1�ko/��:'�P9��p�P`\K#�i R�[�I.)Q�1KF<�['�+gb��F4]�o|#�!2�>�}g+��x31���)���������� 8���I��{y� ��ksm��n����aMem���gDKQ�F�,���2f֑g^ıc�_D�����5 ���i��|�A���7���3�b�0M���8��3s��Z�56ל;�g63a��Yʉ)2��D.Lcicc�I�g����)��:���kO��}Ӹx����gp�8���#҇�+Ǔ�ǤL���>i��7]��Z�;^���<��1�~�#����ֿ���إ�>�$��o��@����ٌ��|���Yi���7��@�� s|.Ɂ1�ip�qV�;��;�� ��z���r��N!`B?ق�\oϞwk��R,s�>��"�5����Yž2����(�_���=X&�{��tH��l&pK`t�ͷ&����ꫮ�O���AxCb�7&���`�oJ�7]��Oz��7�Tp� 7��S�m��1�A��4�{�&۾�}�L��.-_|��/�`=�K{���5��LZ,3R 2��U,n��R�?��NF1m ��J��r7�_�����y�>�Gw!6HGo�b��4j�ƿ9�oR��s�l�X�����w�v蟿#`{� JW �����.�5挜ا�n�>�s���ܧʼnLz�c�(��ςv��>���>���t�=i�k�>̹z��e=~ʹ�C^�`���������+;�!�S �E�߂� ��A�Ʋ�Q` �8� cy�$>�3�f���XN,R�#���h~�`K�{���M�l�%�!G\�k�}���_���`�j�P�U��{ι��������ŇzH�gx(�U�O�������I���'��➭�uj�Z� � ^�yc�?��S��?����˗�iG^�C��,��nur��}z|e��[�����*6<>�����>qό�>|d;��|��Ol)�Ϋ��1wN~�����*�^�@S� <�:�aj�fdtM{�/�+wN�%$�)#�3������-�Y�g���wﶠ�/� x�ܰ������=� _�N��<��s� VfYl�SF����^��7����|�9�9y��3��Ƃ�����S � �;�U���)�nǝ��l�!K�ص ҧ���n篼vj�^�}���2��U���fԻz>3�>���aRF�4 �oW庯��ɿ��l�G�2���ׄ+\��tC_�M�,c���U�^テ�w���u�~��e�����0���i_�6�T�&|L'v���q��ȉ��#2֪���@�����5�Z`�wf{{�����Þ�7�Ϳl�~��S��kі���}2�d�����+� �u�I RI7� ���.�~�C�؏?��l�yˀml�g�r��"�lc�d����r��}�c��H6��ϝ��0��d���Oώٳry�zc���>�)��*0�\X�� �1g��>��y���_}`������{�h�l l��4�m�>K�ұ�����t�z�� R�O�A�`��ڰ���uh�� k�W� �S����J��#�L^=��W ��S�0V<\=i�}F��}X#� ^=����3�������h�,������_{eer��G�9Iz ��r@'7��P�u��{ ��ߙ�0d��� �u�y�}:��~m�����}�7�LA���*�-�6Bg=�c|Vۤ�[��k��>5f��1έ�dOb�)��+��)� 6�d�JZe���9��^އ}��l�N��p��W�ԇ��{������9�d|��Kxp�L�}����~�R�^x�< �㹩��̕�8��L���y� V���r|�ոcfT����ԡ�9#���c����^ޑ�P������i�� α�O~r �w>2�L��ɾ)@q��,z�}oV�����d��L����� ��&��Cb+�䬓uӠ0H�@�@P�G�Vݙq�۷�2@��e��̀�W��ޫX�[��!�3�! ��N�St��T�ug��|:�^L�_��-'oA�n�1b`�IZ?�~)/����W^�̖�a7��_ �e0�S�O��!J���y�8c����� ,e��?|��_~�B�D��b�H��������>&^�����t�k���������q� ���a� J��ݚ�q��t�o͎ƾ*P��U`6��{"�$d��ʵt�� VM�dMr�i;V��n{q\���y����y&�Ư��<�o?����xa�c{p?��6�r�I����qI{�0�Pv�I L���@cea�>)Mj2��X} �$Ik�Oe{���� ��G��w��(s'