Файловый менеджер - Редактировать - /home/bean7936/perfect-community.com/442aa3/wp-admin.zip
Назад
PK {��\�v0)V V import.phpnu �Iw�� <?php /** * Import WordPress Administration Screen * * @package WordPress * @subpackage Administration */ define( 'WP_LOAD_IMPORTERS', true ); /** Load WordPress Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'import' ) ) { wp_die( __( 'Sorry, you are not allowed to import content into this site.' ) ); } // Used in the HTML title tag. $title = __( 'Import' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'This screen lists links to plugins to import data from blogging/content management platforms. Choose the platform you want to import from, and click Install Now when you are prompted in the popup window. If your platform is not listed, click the link to search the plugin directory for other importer plugins to see if there is one for your platform.' ) . '</p>' . '<p>' . __( 'In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/tools-import-screen/">Documentation on Import</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); if ( current_user_can( 'install_plugins' ) ) { // List of popular importer plugins from the WordPress.org API. $popular_importers = wp_get_popular_importers(); } else { $popular_importers = array(); } // Detect and redirect invalid importers like 'movabletype', which is registered as 'mt'. if ( ! empty( $_GET['invalid'] ) && isset( $popular_importers[ $_GET['invalid'] ] ) ) { $importer_id = $popular_importers[ $_GET['invalid'] ]['importer-id']; if ( $importer_id !== $_GET['invalid'] ) { // Prevent redirect loops. wp_redirect( admin_url( 'admin.php?import=' . $importer_id ) ); exit; } unset( $importer_id ); } add_thickbox(); wp_enqueue_script( 'plugin-install' ); wp_enqueue_script( 'updates' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $parent_file = 'tools.php'; ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <?php if ( ! empty( $_GET['invalid'] ) ) : $importer_not_installed = '<strong>' . __( 'Error:' ) . '</strong> ' . sprintf( /* translators: %s: Importer slug. */ __( 'The %s importer is invalid or is not installed.' ), '<strong>' . esc_html( $_GET['invalid'] ) . '</strong>' ); wp_admin_notice( $importer_not_installed, array( 'additional_classes' => array( 'error' ), ) ); endif; ?> <p><?php _e( 'If you have posts or comments in another system, WordPress can import those into this site. To get started, choose a system to import from below:' ); ?></p> <?php // Registered (already installed) importers. They're stored in the global $wp_importers. $importers = get_importers(); // If a popular importer is not registered, create a dummy registration that links to the plugin installer. foreach ( $popular_importers as $pop_importer => $pop_data ) { if ( isset( $importers[ $pop_importer ] ) ) { continue; } if ( isset( $importers[ $pop_data['importer-id'] ] ) ) { continue; } // Fill the array of registered (already installed) importers with data of the popular importers from the WordPress.org API. $importers[ $pop_data['importer-id'] ] = array( $pop_data['name'], $pop_data['description'], 'install' => $pop_data['plugin-slug'], ); } if ( empty( $importers ) ) { echo '<p>' . __( 'No importers are available.' ) . '</p>'; // TODO: Make more helpful. } else { uasort( $importers, '_usort_by_first_member' ); ?> <table class="widefat importers striped"> <?php foreach ( $importers as $importer_id => $data ) { $plugin_slug = ''; $action = ''; $is_plugin_installed = false; if ( isset( $data['install'] ) ) { $plugin_slug = $data['install']; if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) { // Looks like an importer is installed, but not active. $plugins = get_plugins( '/' . $plugin_slug ); if ( ! empty( $plugins ) ) { $keys = array_keys( $plugins ); $plugin_file = $plugin_slug . '/' . $keys[0]; $url = wp_nonce_url( add_query_arg( array( 'action' => 'activate', 'plugin' => $plugin_file, 'from' => 'import', ), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_file ); $action = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), /* translators: %s: Importer name. */ esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ), __( 'Run Importer' ) ); $is_plugin_installed = true; } } if ( empty( $action ) ) { if ( is_main_site() ) { $url = wp_nonce_url( add_query_arg( array( 'action' => 'install-plugin', 'plugin' => $plugin_slug, 'from' => 'import', ), self_admin_url( 'update.php' ) ), 'install-plugin_' . $plugin_slug ); $action = sprintf( '<a href="%1$s" class="install-now" data-slug="%2$s" data-name="%3$s" aria-label="%4$s">%5$s</a>', esc_url( $url ), esc_attr( $plugin_slug ), esc_attr( $data[0] ), /* translators: %s: Importer name. */ esc_attr( sprintf( _x( 'Install %s now', 'plugin' ), $data[0] ) ), _x( 'Install Now', 'plugin' ) ); } else { $action = sprintf( /* translators: %s: URL to Import screen on the main site. */ __( 'This importer is not installed. Please install importers from <a href="%s">the main site</a>.' ), get_admin_url( get_current_network_id(), 'import.php' ) ); } } } else { $url = add_query_arg( array( 'import' => $importer_id, ), self_admin_url( 'admin.php' ) ); $action = sprintf( '<a href="%1$s" aria-label="%2$s">%3$s</a>', esc_url( $url ), /* translators: %s: Importer name. */ esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ), __( 'Run Importer' ) ); $is_plugin_installed = true; } if ( ! $is_plugin_installed && is_main_site() ) { $url = add_query_arg( array( 'tab' => 'plugin-information', 'plugin' => $plugin_slug, 'from' => 'import', 'TB_iframe' => 'true', 'width' => 600, 'height' => 550, ), network_admin_url( 'plugin-install.php' ) ); $action .= sprintf( ' | <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">%3$s</a>', esc_url( $url ), /* translators: %s: Importer name. */ esc_attr( sprintf( __( 'More information about %s' ), $data[0] ) ), __( 'Details' ) ); } echo " <tr class='importer-item'> <td class='import-system'> <span class='importer-title'>{$data[0]}</span> <span class='importer-action'>{$action}</span> </td> <td class='desc'> <span class='importer-desc'>{$data[1]}</span> </td> </tr>"; } ?> </table> <?php } if ( current_user_can( 'install_plugins' ) ) { echo '<p>' . sprintf( /* translators: %s: URL to Add Plugins screen. */ __( 'If the importer you need is not listed, <a href="%s">search the plugin directory</a> to see if an importer is available.' ), esc_url( network_admin_url( 'plugin-install.php?tab=search&type=tag&s=importer' ) ) ) . '</p>'; } /** * Fires at the end of the Import screen. * * @since 6.8.0 */ do_action( 'import_filters' ); ?> </div> <?php wp_print_request_filesystem_credentials_modal(); wp_print_admin_notice_templates(); require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\�\��9 �9 edit-comments.phpnu �Iw�� <?php /** * Edit Comments Administration Screen. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'edit_posts' ) ) { wp_die( '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' . '<p>' . __( 'Sorry, you are not allowed to edit comments.' ) . '</p>', 403 ); } $wp_list_table = _get_list_table( 'WP_Comments_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $doaction = $wp_list_table->current_action(); if ( $doaction ) { check_admin_referer( 'bulk-comments' ); if ( 'delete_all' === $doaction && ! empty( $_REQUEST['pagegen_timestamp'] ) ) { /** * @global wpdb $wpdb WordPress database abstraction object. */ global $wpdb; $comment_status = wp_unslash( $_REQUEST['comment_status'] ); $delete_time = wp_unslash( $_REQUEST['pagegen_timestamp'] ); $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $comment_status, $delete_time ) ); $doaction = 'delete'; } elseif ( isset( $_REQUEST['delete_comments'] ) ) { $comment_ids = $_REQUEST['delete_comments']; $doaction = $_REQUEST['action']; } elseif ( isset( $_REQUEST['ids'] ) ) { $comment_ids = array_map( 'absint', explode( ',', $_REQUEST['ids'] ) ); } elseif ( wp_get_referer() ) { wp_safe_redirect( wp_get_referer() ); exit; } $approved = 0; $unapproved = 0; $spammed = 0; $unspammed = 0; $trashed = 0; $untrashed = 0; $deleted = 0; $redirect_to = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'spammed', 'unspammed', 'approved', 'unapproved', 'ids', ), wp_get_referer() ); $redirect_to = add_query_arg( 'paged', $pagenum, $redirect_to ); wp_defer_comment_counting( true ); foreach ( $comment_ids as $comment_id ) { // Check the permissions on each. if ( ! current_user_can( 'edit_comment', $comment_id ) ) { continue; } switch ( $doaction ) { case 'approve': wp_set_comment_status( $comment_id, 'approve' ); ++$approved; break; case 'unapprove': wp_set_comment_status( $comment_id, 'hold' ); ++$unapproved; break; case 'spam': wp_spam_comment( $comment_id ); ++$spammed; break; case 'unspam': wp_unspam_comment( $comment_id ); ++$unspammed; break; case 'trash': wp_trash_comment( $comment_id ); ++$trashed; break; case 'untrash': wp_untrash_comment( $comment_id ); ++$untrashed; break; case 'delete': wp_delete_comment( $comment_id ); ++$deleted; break; } } if ( ! in_array( $doaction, array( 'approve', 'unapprove', 'spam', 'unspam', 'trash', 'delete' ), true ) ) { $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, $comment_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } wp_defer_comment_counting( false ); if ( $approved ) { $redirect_to = add_query_arg( 'approved', $approved, $redirect_to ); } if ( $unapproved ) { $redirect_to = add_query_arg( 'unapproved', $unapproved, $redirect_to ); } if ( $spammed ) { $redirect_to = add_query_arg( 'spammed', $spammed, $redirect_to ); } if ( $unspammed ) { $redirect_to = add_query_arg( 'unspammed', $unspammed, $redirect_to ); } if ( $trashed ) { $redirect_to = add_query_arg( 'trashed', $trashed, $redirect_to ); } if ( $untrashed ) { $redirect_to = add_query_arg( 'untrashed', $untrashed, $redirect_to ); } if ( $deleted ) { $redirect_to = add_query_arg( 'deleted', $deleted, $redirect_to ); } if ( $trashed || $spammed ) { $redirect_to = add_query_arg( 'ids', implode( ',', $comment_ids ), $redirect_to ); } wp_safe_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(); wp_enqueue_script( 'admin-comments' ); enqueue_comment_hotkeys_js(); /** * @global int $post_id */ global $post_id; if ( $post_id ) { $comments_count = wp_count_comments( $post_id ); $draft_or_post_title = wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: 1: Comments count, 2: Post title. */ __( 'Comments (%1$s) on “%2$s”' ), number_format_i18n( $comments_count->moderated ), $draft_or_post_title ); } else { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Post title. */ __( 'Comments on “%s”' ), $draft_or_post_title ); } } else { $comments_count = wp_count_comments(); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Comments count. */ __( 'Comments (%s)' ), number_format_i18n( $comments_count->moderated ) ); } else { // Used in the HTML title tag. $title = __( 'Comments' ); } } add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the bulk actions.' ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'moderating-comments', 'title' => __( 'Moderating Comments' ), 'content' => '<p>' . __( 'A red bar on the left means the comment is waiting for you to moderate it.' ) . '</p>' . '<p>' . __( 'In the <strong>Author</strong> column, in addition to the author’s name, email address, and site URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '</p>' . '<p>' . __( 'In the <strong>Comment</strong> column, hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '</p>' . '<p>' . __( 'In the <strong>In response to</strong> column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows the number of approved comments that post has received. If there are pending comments, a red notification circle with the number of pending comments is displayed. Clicking the notification circle will filter the comments screen to show only pending comments on that post.' ) . '</p>' . '<p>' . __( 'In the <strong>Submitted on</strong> column, the date and time the comment was left on your site appears. Clicking on the date/time link will take you to that comment on your live site.' ) . '</p>' . '<p>' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/comments-screen/">Documentation on Comments</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/understand-comment-spam/">Documentation on Comment Spam</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/keyboard-shortcuts-classic-editor/#keyboard-shortcuts-for-comments">Documentation on Keyboard Shortcuts</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 comments list' ), 'heading_pagination' => __( 'Comments list navigation' ), 'heading_list' => __( 'Comments list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1 class="wp-heading-inline"> <?php if ( $post_id ) { printf( /* translators: %s: Link to post. */ __( 'Comments on “%s”' ), sprintf( '<a href="%1$s">%2$s</a>', get_edit_post_link( $post_id ), wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) ) ); } else { _e( 'Comments' ); } ?> </h1> <?php if ( $post_id ) { $post_type_object = get_post_type_object( get_post_type( $post_id ) ); if ( $post_type_object ) { printf( '<a href="%1$s" class="comments-view-item-link">%2$s</a>', get_permalink( $post_id ), $post_type_object->labels->view_item ); } } 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['error'] ) ) { $error = (int) $_REQUEST['error']; $error_msg = ''; switch ( $error ) { case 1: $error_msg = __( 'Invalid comment ID.' ); break; case 2: $error_msg = __( 'Sorry, you are not allowed to edit comments on this post.' ); break; } if ( $error_msg ) { wp_admin_notice( $error_msg, array( 'id' => 'moderated', 'additional_classes' => array( 'error' ), ) ); } } if ( isset( $_REQUEST['approved'] ) || isset( $_REQUEST['deleted'] ) || isset( $_REQUEST['trashed'] ) || isset( $_REQUEST['untrashed'] ) || isset( $_REQUEST['spammed'] ) || isset( $_REQUEST['unspammed'] ) || isset( $_REQUEST['same'] ) ) { $approved = isset( $_REQUEST['approved'] ) ? (int) $_REQUEST['approved'] : 0; $deleted = isset( $_REQUEST['deleted'] ) ? (int) $_REQUEST['deleted'] : 0; $trashed = isset( $_REQUEST['trashed'] ) ? (int) $_REQUEST['trashed'] : 0; $untrashed = isset( $_REQUEST['untrashed'] ) ? (int) $_REQUEST['untrashed'] : 0; $spammed = isset( $_REQUEST['spammed'] ) ? (int) $_REQUEST['spammed'] : 0; $unspammed = isset( $_REQUEST['unspammed'] ) ? (int) $_REQUEST['unspammed'] : 0; $same = isset( $_REQUEST['same'] ) ? (int) $_REQUEST['same'] : 0; if ( $approved > 0 || $deleted > 0 || $trashed > 0 || $untrashed > 0 || $spammed > 0 || $unspammed > 0 || $same > 0 ) { if ( $approved > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment approved.', '%s comments approved.', $approved ), $approved ); } if ( $spammed > 0 ) { $ids = isset( $_REQUEST['ids'] ) ? $_REQUEST['ids'] : 0; $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment marked as spam.', '%s comments marked as spam.', $spammed ), $spammed ) . sprintf( ' <a href="%1$s">%2$s</a><br />', esc_url( wp_nonce_url( "edit-comments.php?doaction=undo&action=unspam&ids=$ids", 'bulk-comments' ) ), __( 'Undo' ) ); } if ( $unspammed > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment restored from the spam.', '%s comments restored from the spam.', $unspammed ), $unspammed ); } if ( $trashed > 0 ) { $ids = isset( $_REQUEST['ids'] ) ? $_REQUEST['ids'] : 0; $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment moved to the Trash.', '%s comments moved to the Trash.', $trashed ), $trashed ) . sprintf( ' <a href="%1$s">%2$s</a><br />', esc_url( wp_nonce_url( "edit-comments.php?doaction=undo&action=untrash&ids=$ids", 'bulk-comments' ) ), __( 'Undo' ) ); } if ( $untrashed > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment restored from the Trash.', '%s comments restored from the Trash.', $untrashed ), $untrashed ); } if ( $deleted > 0 ) { $messages[] = sprintf( /* translators: %s: Number of comments. */ _n( '%s comment permanently deleted.', '%s comments permanently deleted.', $deleted ), $deleted ); } if ( $same > 0 ) { $comment = get_comment( $same ); if ( $comment ) { switch ( $comment->comment_approved ) { case '1': $messages[] = __( 'This comment is already approved.' ) . sprintf( ' <a href="%1$s">%2$s</a>', esc_url( admin_url( "comment.php?action=editcomment&c=$same" ) ), __( 'Edit comment' ) ); break; case 'trash': $messages[] = __( 'This comment is already in the Trash.' ) . sprintf( ' <a href="%1$s">%2$s</a>', esc_url( admin_url( 'edit-comments.php?comment_status=trash' ) ), __( 'View Trash' ) ); break; case 'spam': $messages[] = __( 'This comment is already marked as spam.' ) . sprintf( ' <a href="%1$s">%2$s</a>', esc_url( admin_url( "comment.php?action=editcomment&c=$same" ) ), __( 'Edit comment' ) ); break; } } } wp_admin_notice( implode( "<br />\n", $messages ), array( 'id' => 'moderated', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } } ?> <?php $wp_list_table->views(); ?> <form id="comments-form" method="get"> <?php $wp_list_table->search_box( __( 'Search Comments' ), 'comment' ); ?> <?php if ( $post_id ) : ?> <input type="hidden" name="p" value="<?php echo esc_attr( (int) $post_id ); ?>" /> <?php endif; ?> <input type="hidden" name="comment_status" value="<?php echo esc_attr( $comment_status ); ?>" /> <input type="hidden" name="pagegen_timestamp" value="<?php echo esc_attr( current_time( 'mysql', true ) ); ?>" /> <input type="hidden" name="_total" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg( 'total_items' ) ); ?>" /> <input type="hidden" name="_per_page" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg( 'per_page' ) ); ?>" /> <input type="hidden" name="_page" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg( 'page' ) ); ?>" /> <?php if ( isset( $_REQUEST['paged'] ) ) { ?> <input type="hidden" name="paged" value="<?php echo esc_attr( absint( $_REQUEST['paged'] ) ); ?>" /> <?php } ?> <?php $wp_list_table->display(); ?> </form> </div> <div id="ajax-response"></div> <?php wp_comment_reply( '-1', true, 'detail' ); wp_comment_trashnotice(); require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> PK {��\U�f1 1 install-helper.phpnu �Iw�� <?php /** * Plugins may load this file to gain access to special helper functions * for plugin installation. This file is not included by WordPress and it is * recommended, to prevent fatal errors, that this file is included using * require_once. * * These functions are not optimized for speed, but they should only be used * once in a while, so speed shouldn't be a concern. If it is and you are * needing to use these functions a lot, you might experience timeouts. * If you do, then it is advised to just write the SQL code yourself. * * check_column( 'wp_links', 'link_description', 'mediumtext' ); * * if ( check_column( $wpdb->comments, 'comment_author', 'tinytext' ) ) { * echo "ok\n"; * } * * // Check the column. * if ( ! check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { * $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' "; * $q = $wpdb->query( $ddl ); * } * * $error_count = 0; * $tablename = $wpdb->links; * * if ( check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) { * $res .= $tablename . ' - ok <br />'; * } else { * $res .= 'There was a problem with ' . $tablename . '<br />'; * ++$error_count; * } * * @package WordPress * @subpackage Plugin */ /** Load WordPress Bootstrap */ require_once dirname( __DIR__ ) . '/wp-load.php'; if ( ! function_exists( 'maybe_create_table' ) ) : /** * Creates a table in the database if it doesn't already exist. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $create_ddl SQL statement to create table. * @return bool True on success or if the table already exists. False on failure. */ function maybe_create_table( $table_name, $create_ddl ) { global $wpdb; foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { if ( $table === $table_name ) { return true; } } // Didn't find it, so try to create it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $create_ddl ); // We cannot directly tell whether this succeeded! foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) { if ( $table === $table_name ) { return true; } } return false; } endif; if ( ! function_exists( 'maybe_add_column' ) ) : /** * Adds column to database table, if it doesn't already exist. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $column_name Table column name. * @param string $create_ddl SQL statement to add column. * @return bool True on success or if the column already exists. False on failure. */ function maybe_add_column( $table_name, $column_name, $create_ddl ) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return true; } } // Didn't find it, so try to create it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $create_ddl ); // We cannot directly tell whether this succeeded! // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return true; } } return false; } endif; /** * Drops column from database table, if it exists. * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $column_name Table column name. * @param string $drop_ddl SQL statement to drop column. * @return bool True on success or if the column doesn't exist. False on failure. */ function maybe_drop_column( $table_name, $column_name, $drop_ddl ) { global $wpdb; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { // Found it, so try to drop it. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query. $wpdb->query( $drop_ddl ); // We cannot directly tell whether this succeeded! // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) { if ( $column === $column_name ) { return false; } } } } // Else didn't find it. return true; } /** * Checks that database table column matches the criteria. * * Uses the SQL DESC for retrieving the table info for the column. It will help * understand the parameters, if you do more research on what column information * is returned by the SQL statement. Pass in null to skip checking that criteria. * * Column names returned from DESC table are case sensitive and are as listed: * * - Field * - Type * - Null * - Key * - Default * - Extra * * @since 1.0.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $table_name Database table name. * @param string $col_name Table column name. * @param string $col_type Table column type. * @param bool $is_null Optional. Check is null. * @param mixed $key Optional. Key info. * @param mixed $default_value Optional. Default value. * @param mixed $extra Optional. Extra value. * @return bool True, if matches. False, if not matching. */ function check_column( $table_name, $col_name, $col_type, $is_null = null, $key = null, $default_value = null, $extra = null ) { global $wpdb; $diffs = 0; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names. $results = $wpdb->get_results( "DESC $table_name" ); foreach ( $results as $row ) { if ( $row->Field === $col_name ) { // Got our column, check the params. if ( ( null !== $col_type ) && ( $row->Type !== $col_type ) ) { ++$diffs; } if ( ( null !== $is_null ) && ( $row->Null !== $is_null ) ) { ++$diffs; } if ( ( null !== $key ) && ( $row->Key !== $key ) ) { ++$diffs; } if ( ( null !== $default_value ) && ( $row->Default !== $default_value ) ) { ++$diffs; } if ( ( null !== $extra ) && ( $row->Extra !== $extra ) ) { ++$diffs; } if ( $diffs > 0 ) { return false; } return true; } // End if found our column. } return false; } PK {��\=�W� � custom-background.phpnu �Iw�� <?php /** * Custom background script. * * This file is deprecated, use 'wp-admin/includes/class-custom-background.php' instead. * * @deprecated 5.3.0 * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } _deprecated_file( basename( __FILE__ ), '5.3.0', 'wp-admin/includes/class-custom-background.php' ); /** Custom_Background class */ require_once ABSPATH . 'wp-admin/includes/class-custom-background.php'; PK {��\�ܨ� � term.phpnu �Iw�� <?php /** * Edit Term Administration Screen. * * @package WordPress * @subpackage Administration * @since 4.5.0 */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( empty( $_REQUEST['tag_ID'] ) ) { $sendback = admin_url( 'edit-tags.php' ); if ( ! empty( $taxnow ) ) { $sendback = add_query_arg( array( 'taxonomy' => $taxnow ), $sendback ); } if ( 'post' !== get_current_screen()->post_type ) { $sendback = add_query_arg( 'post_type', get_current_screen()->post_type, $sendback ); } wp_redirect( sanitize_url( $sendback ) ); exit; } $tag_ID = absint( $_REQUEST['tag_ID'] ); $tag = get_term( $tag_ID, $taxnow, OBJECT, 'edit' ); if ( ! $tag instanceof WP_Term ) { wp_die( __( 'You attempted to edit an item that does not exist. Perhaps it was deleted?' ) ); } $tax = get_taxonomy( $tag->taxonomy ); $taxonomy = $tax->name; $title = $tax->labels->edit_item; if ( ! in_array( $taxonomy, get_taxonomies( array( 'show_ui' => true ) ), true ) || ! current_user_can( 'edit_term', $tag->term_id ) ) { wp_die( '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' . '<p>' . __( 'Sorry, you are not allowed to edit this item.' ) . '</p>', 403 ); } $post_type = get_current_screen()->post_type; // Default to the first object_type associated with the taxonomy if no post type was passed. if ( empty( $post_type ) ) { $post_type = reset( $tax->object_type ); } if ( 'post' !== $post_type ) { $parent_file = ( 'attachment' === $post_type ) ? 'upload.php' : "edit.php?post_type=$post_type"; $submenu_file = "edit-tags.php?taxonomy=$taxonomy&post_type=$post_type"; } elseif ( 'link_category' === $taxonomy ) { $parent_file = 'link-manager.php'; $submenu_file = 'edit-tags.php?taxonomy=link_category'; } else { $parent_file = 'edit.php'; $submenu_file = "edit-tags.php?taxonomy=$taxonomy"; } get_current_screen()->set_screen_reader_content( array( 'heading_pagination' => $tax->labels->items_list_navigation, 'heading_list' => $tax->labels->items_list, ) ); wp_enqueue_script( 'admin-tags' ); require_once ABSPATH . 'wp-admin/admin-header.php'; require ABSPATH . 'wp-admin/edit-tag-form.php'; require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\U�RE profile.phpnu �Iw�� <?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'; PK {��\N{w� � edit-link-form.phpnu �Iw�� <?php /** * Edit links form for inclusion in administration panels. * * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } if ( ! empty( $link_id ) ) { /* translators: %s: URL to Links screen. */ $heading = sprintf( __( '<a href="%s">Links</a> / Edit Link' ), 'link-manager.php' ); $submit_text = __( 'Update Link' ); $form_name = 'editlink'; $nonce_action = 'update-bookmark_' . $link_id; } else { /* translators: %s: URL to Links screen. */ $heading = sprintf( __( '<a href="%s">Links</a> / Add Link' ), 'link-manager.php' ); $submit_text = __( 'Add Link' ); $form_name = 'addlink'; $nonce_action = 'add-bookmark'; } require_once ABSPATH . 'wp-admin/includes/meta-boxes.php'; add_meta_box( 'linksubmitdiv', __( 'Save' ), 'link_submit_meta_box', null, 'side', 'core' ); add_meta_box( 'linkcategorydiv', __( 'Categories' ), 'link_categories_meta_box', null, 'normal', 'core' ); add_meta_box( 'linktargetdiv', __( 'Target' ), 'link_target_meta_box', null, 'normal', 'core' ); add_meta_box( 'linkxfndiv', __( 'Link Relationship (XFN)' ), 'link_xfn_meta_box', null, 'normal', 'core' ); add_meta_box( 'linkadvanceddiv', __( 'Advanced' ), 'link_advanced_meta_box', null, 'normal', 'core' ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'add_meta_boxes', 'link', $link ); /** * Fires when link-specific meta boxes are added. * * @since 3.0.0 * * @param object $link Link object. */ do_action( 'add_meta_boxes_link', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'normal', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'advanced', $link ); /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', 'link', 'side', $link ); add_screen_option( 'layout_columns', array( 'max' => 2, 'default' => 2, ) ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'You can add or edit links on this screen by entering information in each of the boxes. Only the link’s web address and name (the text you want to display on your site as the link) are required fields.' ) . '</p>' . '<p>' . __( 'The boxes for link name, web address, and description have fixed positions, while the others may be repositioned using drag and drop. You can also hide boxes you do not use in the Screen Options tab, or minimize boxes by clicking on the title bar of the box.' ) . '</p>' . '<p>' . __( 'XFN stands for <a href="https://gmpg.org/xfn/">XHTML Friends Network</a>, which is optional. WordPress allows the generation of XFN attributes to show how you are related to the authors/owners of the site to which you are linking.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://codex.wordpress.org/Links_Add_New_Screen">Documentation on Creating Links</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 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> <hr class="wp-header-end"> <?php if ( isset( $_GET['added'] ) ) { wp_admin_notice( __( 'Link added.' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); } ?> <form name="<?php echo esc_attr( $form_name ); ?>" id="<?php echo esc_attr( $form_name ); ?>" method="post" action="link.php"> <?php if ( ! empty( $link_added ) ) { echo $link_added; } wp_nonce_field( $nonce_action ); wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?> <div id="poststuff"> <div id="post-body" class="metabox-holder columns-<?php echo ( 1 === get_current_screen()->get_columns() ) ? '1' : '2'; ?>"> <div id="post-body-content"> <div id="namediv" class="postbox"> <h2 class="postbox-header"><label for="link_name"><?php _ex( 'Name', 'link name' ); ?></label></h2> <div class="inside"> <input type="text" name="link_name" size="30" maxlength="255" value="<?php echo esc_attr( $link->link_name ); ?>" id="link_name" /> <p><?php _e( 'Example: Nifty blogging software' ); ?></p> </div> </div> <div id="addressdiv" class="postbox"> <h2 class="postbox-header"><label for="link_url"><?php _e( 'Web Address' ); ?></label></h2> <div class="inside"> <input type="text" name="link_url" size="30" maxlength="255" class="code" value="<?php echo esc_url( $link->link_url ); ?>" id="link_url" /> <p><?php _e( 'Example: <code>https://wordpress.org/</code> — do not forget the <code>https://</code>' ); ?></p> </div> </div> <div id="descriptiondiv" class="postbox"> <h2 class="postbox-header"><label for="link_description"><?php _e( 'Description' ); ?></label></h2> <div class="inside"> <input type="text" name="link_description" size="30" maxlength="255" value="<?php echo isset( $link->link_description ) ? esc_attr( $link->link_description ) : ''; ?>" id="link_description" /> <p><?php _e( 'This will be shown when someone hovers over the link in the blogroll, or optionally below the link.' ); ?></p> </div> </div> </div><!-- /post-body-content --> <div id="postbox-container-1" class="postbox-container"> <?php /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'submitlink_box' ); $side_meta_boxes = do_meta_boxes( 'link', 'side', $link ); ?> </div> <div id="postbox-container-2" class="postbox-container"> <?php do_meta_boxes( null, 'normal', $link ); do_meta_boxes( null, 'advanced', $link ); ?> </div> <?php if ( $link_id ) : ?> <input type="hidden" name="action" value="save" /> <input type="hidden" name="link_id" value="<?php echo (int) $link_id; ?>" /> <input type="hidden" name="cat_id" value="<?php echo (int) $cat_id; ?>" /> <?php else : ?> <input type="hidden" name="action" value="add" /> <?php endif; ?> </div> </div> </form> </div> PK {��\��L� � ms-users.phpnu �Iw�� <?php /** * Multisite users administration panel. * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ require_once __DIR__ . '/admin.php'; wp_redirect( network_admin_url( 'users.php' ) ); exit; PK {��\�eQd� � media-new.phpnu �Iw�� <?php /** * Manage media uploaded file. * * There are many filters in here for media. Plugins can extend functionality * by hooking into the filters. * * @package WordPress * @subpackage Administration */ /** Load WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'upload_files' ) ) { wp_die( __( 'Sorry, you are not allowed to upload files.' ) ); } wp_enqueue_script( 'plupload-handlers' ); $post_id = 0; if ( isset( $_REQUEST['post_id'] ) ) { $post_id = absint( $_REQUEST['post_id'] ); if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) { $post_id = 0; } } if ( $_POST ) { if ( isset( $_POST['html-upload'] ) && ! empty( $_FILES ) ) { check_admin_referer( 'media-form' ); // Upload File button was clicked. $upload_id = media_handle_upload( 'async-upload', $post_id ); if ( is_wp_error( $upload_id ) ) { wp_die( $upload_id ); } } wp_redirect( admin_url( 'upload.php' ) ); exit; } // Used in the HTML title tag. $title = __( 'Upload New Media' ); $parent_file = 'upload.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:' ) . '</p>' . '<ul>' . '<li>' . __( '<strong>Drag and drop</strong> your files into the area below. Multiple files are allowed.' ) . '</li>' . '<li>' . __( 'Clicking <strong>Select Files</strong> opens a navigation window showing you files in your operating system. Selecting <strong>Open</strong> after clicking on the file you want activates a progress bar on the uploader screen.' ) . '</li>' . '<li>' . __( 'Revert to the <strong>Browser Uploader</strong> by clicking the link below the drag and drop box.' ) . '</li>' . '</ul>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/media-add-new-screen/">Documentation on Uploading Media Files</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); require_once ABSPATH . 'wp-admin/admin-header.php'; $form_class = 'wp-upload-form media-upload-form type-form validate'; if ( get_user_setting( 'uploader' ) || isset( $_GET['browser-uploader'] ) ) { $form_class .= ' html-uploader'; } ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <form enctype="multipart/form-data" method="post" action="<?php echo esc_url( admin_url( 'media-new.php' ) ); ?>" class="<?php echo esc_attr( $form_class ); ?>" id="file-form"> <?php media_upload_form(); ?> <script type="text/javascript"> var post_id = <?php echo absint( $post_id ); ?>, shortform = 3; </script> <input type="hidden" name="post_id" id="post_id" value="<?php echo absint( $post_id ); ?>" /> <?php wp_nonce_field( 'media-form' ); ?> <div id="media-items" class="hide-if-no-js"></div> </form> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\��Õ� � custom-header.phpnu �Iw�� <?php /** * Custom header image script. * * This file is deprecated, use 'wp-admin/includes/class-custom-image-header.php' instead. * * @deprecated 5.3.0 * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } _deprecated_file( basename( __FILE__ ), '5.3.0', 'wp-admin/includes/class-custom-image-header.php' ); /** Custom_Image_Header class */ require_once ABSPATH . 'wp-admin/includes/class-custom-image-header.php'; PK {��\W6@r admin-footer.phpnu �Iw�� <?php /** * WordPress Administration Template Footer * * @package WordPress * @subpackage Administration */ // Don't load directly. if ( ! defined( 'ABSPATH' ) ) { die( '-1' ); } /** * @global string $hook_suffix */ global $hook_suffix; ?> <div class="clear"></div></div><!-- wpbody-content --> <div class="clear"></div></div><!-- wpbody --> <div class="clear"></div></div><!-- wpcontent --> <div id="wpfooter" role="contentinfo"> <?php /** * Fires after the opening tag for the admin footer. * * @since 2.5.0 */ do_action( 'in_admin_footer' ); ?> <p id="footer-left" class="alignleft"> <?php $text = sprintf( /* translators: %s: https://wordpress.org/ */ __( 'Thank you for creating with <a href="%s">WordPress</a>.' ), esc_url( __( 'https://wordpress.org/' ) ) ); /** * Filters the "Thank you" text displayed in the admin footer. * * @since 2.8.0 * * @param string $text The content that will be printed. */ echo apply_filters( 'admin_footer_text', '<span id="footer-thankyou">' . $text . '</span>' ); ?> </p> <p id="footer-upgrade" class="alignright"> <?php /** * Filters the version/update text displayed in the admin footer. * * WordPress prints the current version and update information, * using core_update_footer() at priority 10. * * @since 2.3.0 * * @see core_update_footer() * * @param string $content The content that will be printed. */ echo apply_filters( 'update_footer', '' ); ?> </p> <div class="clear"></div> </div> <?php /** * Prints scripts or data before the default footer scripts. * * @since 1.2.0 * * @param string $data The data to print. */ do_action( 'admin_footer', '' ); /** * Prints scripts and data queued for the footer. * * The dynamic portion of the hook name, `$hook_suffix`, * refers to the global hook suffix of the current page. * * @since 4.6.0 */ do_action( "admin_print_footer_scripts-{$hook_suffix}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores /** * Prints any scripts and data queued for the footer. * * @since 2.8.0 */ do_action( 'admin_print_footer_scripts' ); /** * Prints scripts or data after the default footer scripts. * * The dynamic portion of the hook name, `$hook_suffix`, * refers to the global hook suffix of the current page. * * @since 2.8.0 */ do_action( "admin_footer-{$hook_suffix}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores // get_site_option() won't exist when auto upgrading from <= 2.7. if ( function_exists( 'get_site_option' ) && false === get_site_option( 'can_compress_scripts' ) ) { compression_test(); } ?> <div class="clear"></div></div><!-- wpwrap --> <script type="text/javascript">if(typeof wpOnload==='function')wpOnload();</script> </body> </html> PK {��\�QH_, , customize.phpnu �Iw�� <?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, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?> ); </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' ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?>, 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" aria-hidden="true"></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> PK {��\� �*�F �F about.phpnu �Iw�� <?php /** * About This Version administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; // Used in the HTML title tag. /* translators: Page title of the About WordPress page in the admin. */ $title = _x( 'About', 'page title' ); list( $display_version ) = explode( '-', wp_get_wp_version() ); $display_major_version = '6.9'; $release_notes_url = sprintf( /* translators: %s: WordPress version number. */ __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ), sanitize_title( $display_major_version ) ); $field_guide_url = sprintf( /* translators: %s: WordPress version number. */ __( 'https://make.wordpress.org/core/wordpress-%s-field-guide/' ), sanitize_title( $display_major_version ) ); $release_page_url = sprintf( /* translators: %s: WordPress version number. */ __( 'https://wordpress.org/download/releases/%s/' ), sanitize_title( $display_major_version ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap about__container"> <div class="about__header"> <div class="about__header-title"> <h1> <?php printf( /* translators: %s: Version number. */ __( 'WordPress %s' ), $display_version ); ?> </h1> </div> </div> <nav class="about__header-navigation nav-tab-wrapper wp-clearfix" aria-label="<?php esc_attr_e( 'Secondary menu' ); ?>"> <a href="about.php" class="nav-tab nav-tab-active" aria-current="page"><?php _e( 'What’s New' ); ?></a> <a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a> <a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a> <a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a> <a href="contribute.php" class="nav-tab"><?php _e( 'Get Involved' ); ?></a> </nav> <div class="about__section changelog has-subtle-background-color"> <div class="column"> <h2><?php _e( 'Maintenance and Security Releases' ); ?></h2> <p> <?php printf( /* translators: %s: WordPress version. */ __( '<strong>Version %s</strong> addressed some security issues.' ), '6.9.4' ); ?> <?php printf( /* translators: %s: HelpHub URL. */ __( 'For more information, see <a href="%s">the release notes</a>.' ), sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), sanitize_title( '6.9.4' ) ) ); ?> </p> <p> <?php printf( /* translators: %s: WordPress version. */ _n( '<strong>Version %1$s</strong> addressed %2$s bug.', '<strong>Version %1$s</strong> addressed %2$s bugs.', 1 ), '6.9.3', 1 ); ?> <?php printf( /* translators: %s: HelpHub URL. */ __( 'For more information, see <a href="%s">the release notes</a>.' ), sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), sanitize_title( '6.9.3' ) ) ); ?> </p> <p> <?php printf( /* translators: %s: WordPress version. */ __( '<strong>Version %s</strong> addressed some security issues.' ), '6.9.2' ); ?> <?php printf( /* translators: %s: HelpHub URL. */ __( 'For more information, see <a href="%s">the release notes</a>.' ), sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), sanitize_title( '6.9.2' ) ) ); ?> </p> <p> <?php printf( /* translators: 1: WordPress version number, 2: Plural number of bugs. */ _n( '<strong>Version %1$s</strong> addressed %2$s bug.', '<strong>Version %1$s</strong> addressed %2$s bugs.', 49 ), '6.9.1', 49 ); ?> <?php printf( /* translators: %s: HelpHub URL. */ __( 'For more information, see <a href="%s">the release notes</a>.' ), sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ), sanitize_title( '6.9.1' ) ) ); ?> </p> </div> </div> <div class="about__section"> <div class="column"> <h2><?php _e( 'Welcome to WordPress 6.9' ); ?></h2> <p class="is-subheading"><?php _e( 'WordPress 6.9 introduces a more intuitive way to create content, together. Every detail is designed to fit your creative flow, from Notes that let you collaborate directly in the editor to a powerful Command Palette that helps you reach every part of your site.' ); ?></p> </div> </div> <div class="about__section has-2-columns"> <div class="column is-vertically-aligned-center"> <h3><?php _ex( 'Notes', 'about page section title' ); ?></h3> <p> <strong><?php _e( 'Leave feedback right where you’re working.' ); ?></strong><br /> <?php _e( 'With notes attached directly to blocks, your team can stay aligned, track changes, and turn feedback into action all in one place. Whether you’re working on copy or refining design, collaboration happens seamlessly on the canvas itself.' ); ?> </p> </div> <div class="column is-vertically-aligned-center"> <div class="about__image"> <img src="https://s.w.org/images/core/6.9/01-notes.webp" alt="" height="436" width="436" /> </div> </div> </div> <div class="about__section has-2-columns"> <div class="column is-vertically-aligned-center"> <div class="about__image"> <img src="https://s.w.org/images/core/6.9/02-visual-drag-drop.webp" alt="" height="436" width="436" /> </div> </div> <div class="column is-vertically-aligned-center"> <h3><?php _e( 'Visual drag and drop' ); ?></h3> <p> <strong><?php _e( 'Design flows naturally.' ); ?></strong><br /> <?php _e( 'Building layouts is now more intuitive and flexible with clear drag handles and a live preview that shows exactly what you’re moving—a faster way to build pages.' ); ?> </p> </div> </div> <div class="about__section has-2-columns"> <div class="column is-vertically-aligned-center"> <h3><?php _e( 'Command Palette, everywhere' ); ?></h3> <p> <strong><?php _e( 'Your tools are always at hand.' ); ?></strong><br /> <?php _e( 'Access the Command Palette from any part of your site, whether you’re writing your latest post, deep in design in the Site Editor, or browsing your plugins. Everything you need, just a few keystrokes away.' ); ?> </p> </div> <div class="column is-vertically-aligned-center"> <div class="about__image"> <img src="https://s.w.org/images/core/6.9/03-command-palette-everywhere.webp" alt="" height="436" width="436" /> </div> </div> </div> <div class="about__section has-2-columns"> <div class="column is-vertically-aligned-center"> <div class="about__image"> <img src="https://s.w.org/images/core/6.9/04-fit-text.webp" alt="" height="436" width="436" /> </div> </div> <div class="column is-vertically-aligned-center"> <h3><?php _e( 'Fit text to container' ); ?></h3> <p> <strong><?php _e( 'Content that adapts.' ); ?></strong><br /> <?php _e( 'A new typography option for text-based blocks, starting with the Paragraph and Heading blocks, that automatically adjusts font size to fill its container perfectly. Ideal for banners, callouts, and standout moments in your design. No manual tweaks, just an instant clean design.' ); ?> </p> </div> </div> <hr class="is-invisible is-large" /> <div class="about__section has-2-columns"> <div class="column"> <div class="about__image"> <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> <path fill="#1e1e1e" d="M32.455 17.72a1.592 1.592 0 0 1 .599 2.195l-7.637 12.99a1.653 1.653 0 0 1-2.235.589 1.592 1.592 0 0 1-.599-2.195l7.637-12.99a1.653 1.653 0 0 1 2.235-.589ZM13.774 23.21a1.653 1.653 0 0 0-2.236.589 1.592 1.592 0 0 0 .6 2.195l.944.536c.783.444 1.783.18 2.235-.588a1.592 1.592 0 0 0-.599-2.196l-.944-.535ZM16.432 17.72a1.653 1.653 0 0 1 2.236.588l.545.928a1.592 1.592 0 0 1-.599 2.196 1.653 1.653 0 0 1-2.235-.588l-.546-.928a1.592 1.592 0 0 1 .6-2.196ZM25.637 16.5c0-.888-.733-1.607-1.637-1.607s-1.636.72-1.636 1.607v1.071c0 .888.732 1.608 1.636 1.608.904 0 1.637-.72 1.637-1.608V16.5Z"/> <path fill="#1e1e1e" fill-rule="evenodd" d="M4.91 27.75C4.91 17.395 13.455 9 24 9s19.091 8.395 19.091 18.75c0 3.909-1.22 7.542-3.305 10.548l-.488.702H8.702l-.488-.702A18.438 18.438 0 0 1 4.91 27.75ZM24 12.214c-8.736 0-15.818 6.956-15.818 15.536 0 2.943.832 5.692 2.277 8.036h27.082a15.25 15.25 0 0 0 2.277-8.036c0-8.58-7.082-15.536-15.818-15.536Z" clip-rule="evenodd"/> </svg> </div> <h3><?php _e( 'Performance updates' ); ?></h3> <p><?php _e( 'WordPress 6.9 includes a broad set of performance enhancements. A better <abbr>LCP</abbr> (Largest Contentful Paint) metric is achieved through improved loading of conditional and inlined stylesheets, script loading with fetchpriority support, and additional core optimizations. Editor advances include fixes for layout shifts caused by the Video block and faster loading of the terms selector.' ); ?></p> </div> <div class="column"> <div class="about__image"> <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> <path fill="#1e1e1e" d="M24 13.84c-.752 0-1.397-.287-1.936-.86a2.902 2.902 0 0 1-.809-2.06c0-.8.27-1.487.809-2.06S23.248 8 24 8c.753 0 1.398.287 1.937.86.54.573.809 1.26.809 2.06s-.27 1.487-.809 2.06-1.184.86-1.937.86ZM19.976 40V18.68a69.562 69.562 0 0 1-4.945-.56 45.877 45.877 0 0 1-4.57-.92l.565-2.4a46.79 46.79 0 0 0 6.356 1.14c2.106.227 4.312.34 6.618.34 2.307 0 4.513-.113 6.62-.34a46.786 46.786 0 0 0 6.355-1.14l.564 2.4c-1.454.373-2.977.68-4.57.92a69.55 69.55 0 0 1-4.945.56V40h-2.256V29.6h-3.535V40h-2.257Z"/> </svg> </div> <h3><?php _e( 'Accessibility improvements' ); ?></h3> <p><?php _e( '70+ accessibility fixes and enhancements focus on central areas of the WordPress experience. From globally hiding CSS-generated content from assistive technology and improvements to screen reader announcements and user experience, to fixing cursor position and keeping typing focus when clicking on an autocomplete suggestion item.' ); ?></p> </div> </div> <hr class="is-invisible is-large" style="margin-bottom:calc(2 * var(--gap));" /> <div class="about__section has-2-columns is-wider-left is-feature" style="background-color:var(--background);border-radius:var(--border-radius);"> <h3 class="is-section-header"><?php _e( 'And much more' ); ?></h3> <div class="column"> <p> <?php printf( /* translators: %s: Version number. */ __( 'For a comprehensive overview of all the new features and enhancements in WordPress %s, please visit the feature-showcase website.' ), $display_major_version ); ?> </p> </div> <div class="column aligncenter"> <div class="about__image"> <a href="<?php echo esc_url( $release_page_url ); ?>" class="button button-primary button-hero"><?php _e( 'See everything new' ); ?></a> </div> </div> </div> <hr class="is-large" style="margin-top:calc(2 * var(--gap));" /> <div class="about__section has-3-columns"> <div class="column about__image is-vertically-aligned-top"> <img src="<?php echo esc_url( admin_url( 'images/about-release-badge.svg?ver=6.9' ) ); ?>" alt="" height="280" width="280" /> </div> <div class="column is-vertically-aligned-center" style="grid-column-end:span 2"> <h3> <?php printf( /* translators: %s: Version number. */ __( 'Learn more about WordPress %s' ), $display_major_version ); ?> </h3> <p> <?php printf( /* translators: 1: Learn WordPress link, 2: Workshops link. */ __( '<a href="%1$s">Learn WordPress</a> is a free resource for new and experienced WordPress users. Learn is stocked with how-to videos on using various features in WordPress, <a href="%2$s">interactive workshops</a> for exploring topics in-depth, and lesson plans for diving deep into specific areas of WordPress.' ), 'https://learn.wordpress.org/', 'https://learn.wordpress.org/online-workshops/' ); ?> </p> </div> </div> <div class="about__section has-2-columns"> <div class="column"> <div class="about__image"> <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> <path fill="#1e1e1e" d="M32 15.5H16v3h16v-3ZM16 22h16v3H16v-3ZM28 28.5H16v3h12v-3Z"/> <path fill="#1e1e1e" fill-rule="evenodd" d="M34 8H14a4 4 0 0 0-4 4v24a4 4 0 0 0 4 4h20a4 4 0 0 0 4-4V12a4 4 0 0 0-4-4Zm-20 3h20a1 1 0 0 1 1 1v24a1 1 0 0 1-1 1H14a1 1 0 0 1-1-1V12a1 1 0 0 1 1-1Z" clip-rule="evenodd"/> </svg> </div> <h4 style="margin-top: calc(var(--gap) / 2); margin-bottom: calc(var(--gap) / 2);"> <a href="<?php echo esc_url( $release_notes_url ); ?>"> <?php printf( /* translators: %s: WordPress version number. */ __( 'WordPress %s Release Notes' ), $display_major_version ); ?> </a> </h4> <p> <?php printf( /* translators: %s: WordPress version number. */ __( 'Read the WordPress %s Release Notes for information on installation, enhancements, fixed issues, release contributors, learning resources, and the list of file changes.' ), $display_major_version ); ?> </p> </div> <div class="column"> <div class="about__image"> <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> <path fill="#1e1e1e" stroke="#fff" stroke-width=".5" d="M26.5 24.25h13.75v11.5h-14v8h-3.5v-8H12.604L8.09 31.237a1.75 1.75 0 0 1 0-2.474l4.513-4.513H22.75v-4.5h-14V8.25h14v-4h3.5v4h10.146l4.513 4.513a1.75 1.75 0 0 1 0 2.474l-4.513 4.513H26.25v4.5h.25ZM12.25 16v.25h22.704l.073-.073 1.293-1.293a1.25 1.25 0 0 0 0-1.768l-1.293-1.293-.073-.073H12.25V16Zm1.723 16.177.073.073H36.75v-4.5H14.046l-.073.073-1.293 1.293a1.25 1.25 0 0 0 0 1.768l1.293 1.293Z"/> </svg> </div> <h4 style="margin-top: calc(var(--gap) / 2); margin-bottom: calc(var(--gap) / 2);"> <a href="<?php echo esc_url( $field_guide_url ); ?>"> <?php printf( /* translators: %s: WordPress version number. */ __( 'WordPress %s Field Guide' ), $display_major_version ); ?> </a> </h4> <p> <?php printf( /* translators: %s: WordPress version number. */ __( 'Explore the WordPress %s Field Guide. Learn about the changes in this release with detailed developer notes to help you build with WordPress.' ), $display_major_version ); ?> </p> </div> </div> <hr class="is-large" /> <div class="return-to-dashboard"> <?php if ( isset( $_GET['updated'] ) && current_user_can( 'update_core' ) ) { printf( '<a href="%1$s">%2$s</a> | ', esc_url( self_admin_url( 'update-core.php' ) ), is_multisite() ? __( 'Go to Updates' ) : __( 'Go to Dashboard → Updates' ) ); } printf( '<a href="%1$s">%2$s</a>', esc_url( self_admin_url() ), is_blog_admin() ? __( 'Go to Dashboard → Home' ) : __( 'Go to Dashboard' ) ); ?> </div> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; ?> <?php // These are strings we may use to describe maintenance/security releases, where we aim for no new strings. return; __( 'Maintenance Release' ); __( 'Maintenance Releases' ); __( 'Security Release' ); __( 'Security Releases' ); __( 'Maintenance and Security Release' ); __( 'Maintenance and Security Releases' ); /* translators: %s: WordPress version number. */ __( '<strong>Version %s</strong> addressed one security issue.' ); /* translators: %s: WordPress version number. */ __( '<strong>Version %s</strong> addressed some security issues.' ); /* translators: 1: WordPress version number, 2: Plural number of bugs. */ _n_noop( '<strong>Version %1$s</strong> addressed %2$s bug.', '<strong>Version %1$s</strong> addressed %2$s bugs.' ); /* translators: 1: WordPress version number, 2: Plural number of bugs. Singular security issue. */ _n_noop( '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bug.', '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bugs.' ); /* translators: 1: WordPress version number, 2: Plural number of bugs. More than one security issue. */ _n_noop( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.', '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.' ); /* translators: %s: Documentation URL. */ __( 'For more information, see <a href="%s">the release notes</a>.' ); /* translators: 1: WordPress version number, 2: Link to update WordPress */ __( 'Important! Your version of WordPress (%1$s) is no longer supported, you will not receive any security updates for your website. To keep your site secure, please <a href="%2$s">update to the latest version of WordPress</a>.' ); /* translators: 1: WordPress version number, 2: Link to update WordPress */ __( 'Important! Your version of WordPress (%1$s) will stop receiving security updates in the near future. To keep your site secure, please <a href="%2$s">update to the latest version of WordPress</a>.' ); /* translators: %s: The major version of WordPress for this branch. */ __( 'This is the final release of WordPress %s' ); /* translators: The localized WordPress download URL. */ __( 'https://wordpress.org/download/' ); PK {��\�U�� � plugin-install.phpnu �Iw�� <?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'; PK {��\a�"Z� � my-sites.phpnu �Iw�� <?php /** * My Sites dashboard. * * @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( 'read' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ) ); } $action = isset( $_POST['action'] ) ? $_POST['action'] : 'splash'; $blogs = get_blogs_of_user( $current_user->ID ); $updated = false; if ( 'updateblogsettings' === $action && isset( $_POST['primary_blog'] ) ) { check_admin_referer( 'update-my-sites' ); $blog = get_site( (int) $_POST['primary_blog'] ); if ( $blog && isset( $blog->domain ) ) { update_user_meta( $current_user->ID, 'primary_blog', (int) $_POST['primary_blog'] ); $updated = true; } else { wp_die( __( 'The primary site you chose does not exist.' ) ); } } // Used in the HTML title tag. $title = __( 'My Sites' ); $parent_file = 'index.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'This screen shows an individual user all of their sites in this network, and also allows that user to set a primary site. They can use the links under each site to visit either the front end or the dashboard for that site.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://codex.wordpress.org/Dashboard_My_Sites_Screen">Documentation on My Sites</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( $updated ) { wp_admin_notice( '<strong>' . __( 'Settings saved.' ) . '</strong>', array( 'type' => 'success', 'dismissible' => true, 'id' => 'message', ) ); } ?> <div class="wrap"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <?php if ( in_array( get_site_option( 'registration' ), array( 'all', 'blog' ), true ) ) { /** This filter is documented in wp-login.php */ $sign_up_url = apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ); printf( ' <a href="%s" class="page-title-action">%s</a>', esc_url( $sign_up_url ), esc_html__( 'Add New Site' ) ); } if ( empty( $blogs ) ) : wp_admin_notice( '<strong>' . __( 'You must be a member of at least one site to use this page.' ) . '</strong>', array( 'type' => 'error', 'dismissible' => true, ) ); ?> <?php else : ?> <hr class="wp-header-end"> <form id="myblogs" method="post"> <?php choose_primary_blog(); /** * Fires before the sites list on the My Sites screen. * * @since 3.0.0 */ do_action( 'myblogs_allblogs_options' ); ?> <br clear="all" /> <ul class="my-sites striped"> <?php /** * Filters the settings HTML markup in the Global Settings section on the My Sites screen. * * By default, the Global Settings section is hidden. Passing a non-empty * string to this filter will enable the section, and allow new settings * to be added, either globally or for specific sites. * * @since MU (3.0.0) * * @param string $settings_html The settings HTML markup. Default empty. * @param string $context Context of the setting (global or site-specific). Default 'global'. */ $settings_html = apply_filters( 'myblogs_options', '', 'global' ); if ( $settings_html ) { echo '<h3>' . __( 'Global Settings' ) . '</h3>'; echo $settings_html; } reset( $blogs ); foreach ( $blogs as $user_blog ) { switch_to_blog( $user_blog->userblog_id ); echo '<li>'; echo "<h3>{$user_blog->blogname}</h3>"; $actions = "<a href='" . esc_url( home_url() ) . "'>" . __( 'Visit' ) . '</a>'; if ( current_user_can( 'read' ) ) { $actions .= " | <a href='" . esc_url( admin_url() ) . "'>" . __( 'Dashboard' ) . '</a>'; } /** * Filters the row links displayed for each site on the My Sites screen. * * @since MU (3.0.0) * * @param string $actions The HTML site link markup. * @param object $user_blog An object containing the site data. */ $actions = apply_filters( 'myblogs_blog_actions', $actions, $user_blog ); echo "<p class='my-sites-actions'>" . $actions . '</p>'; /** This filter is documented in wp-admin/my-sites.php */ echo apply_filters( 'myblogs_options', '', $user_blog ); echo '</li>'; restore_current_blog(); } ?> </ul> <?php if ( count( $blogs ) > 1 || has_action( 'myblogs_allblogs_options' ) || has_filter( 'myblogs_options' ) ) { ?> <input type="hidden" name="action" value="updateblogsettings" /> <?php wp_nonce_field( 'update-my-sites' ); submit_button(); } ?> </form> <?php endif; ?> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\ޣQx x plugins.phpnu �Iw�� <?php /** * Plugins administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( ! current_user_can( 'activate_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to manage plugins for this site.' ) ); } $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $action = $wp_list_table->current_action(); $plugin = isset( $_REQUEST['plugin'] ) ? wp_unslash( $_REQUEST['plugin'] ) : ''; $s = isset( $_REQUEST['s'] ) ? urlencode( wp_unslash( $_REQUEST['s'] ) ) : ''; // Clean up request URI from temporary args for screen options/paging uri's to work as expected. $query_args_to_remove = array( 'error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', 'enabled-auto-update', 'disabled-auto-update', 'enabled-auto-update-multi', 'disabled-auto-update-multi', '_error_nonce', ); $_SERVER['REQUEST_URI'] = remove_query_arg( $query_args_to_remove, $_SERVER['REQUEST_URI'] ); wp_enqueue_script( 'updates' ); WP_Plugin_Dependencies::initialize(); if ( $action ) { switch ( $action ) { case 'activate': if ( ! current_user_can( 'activate_plugin', $plugin ) ) { wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) ); } if ( is_multisite() && ! is_network_admin() && is_network_only_plugin( $plugin ) ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } check_admin_referer( 'activate-plugin_' . $plugin ); $result = activate_plugin( $plugin, self_admin_url( 'plugins.php?error=true&plugin=' . urlencode( $plugin ) ), is_network_admin() ); if ( is_wp_error( $result ) ) { if ( 'unexpected_output' === $result->get_error_code() ) { $redirect = self_admin_url( 'plugins.php?error=true&charsout=' . strlen( $result->get_error_data() ) . '&plugin=' . urlencode( $plugin ) . "&plugin_status=$status&paged=$page&s=$s" ); wp_redirect( add_query_arg( '_error_nonce', wp_create_nonce( 'plugin-activation-error_' . $plugin ), $redirect ) ); exit; } else { wp_die( $result ); } } if ( ! is_network_admin() ) { $recent = (array) get_option( 'recently_activated' ); unset( $recent[ $plugin ] ); update_option( 'recently_activated', $recent, false ); } else { $recent = (array) get_site_option( 'recently_activated' ); unset( $recent[ $plugin ] ); update_site_option( 'recently_activated', $recent ); } if ( isset( $_GET['from'] ) && 'import' === $_GET['from'] ) { // Overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix. wp_redirect( self_admin_url( 'import.php?import=' . str_replace( '-importer', '', dirname( $plugin ) ) ) ); } elseif ( isset( $_GET['from'] ) && 'press-this' === $_GET['from'] ) { wp_redirect( self_admin_url( 'press-this.php' ) ); } else { // Overrides the ?error=true one above. wp_redirect( self_admin_url( "plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s" ) ); } exit; case 'activate-selected': if ( ! current_user_can( 'activate_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to activate plugins for this site.' ) ); } check_admin_referer( 'bulk-plugins' ); $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array(); if ( is_network_admin() ) { foreach ( $plugins as $i => $plugin ) { // Only activate plugins which are not already network activated. if ( is_plugin_active_for_network( $plugin ) ) { unset( $plugins[ $i ] ); } } } else { foreach ( $plugins as $i => $plugin ) { // Only activate plugins which are not already active and are not network-only when on Multisite. if ( is_plugin_active( $plugin ) || ( is_multisite() && is_network_only_plugin( $plugin ) ) ) { unset( $plugins[ $i ] ); } // Only activate plugins which the user can activate. if ( ! current_user_can( 'activate_plugin', $plugin ) ) { unset( $plugins[ $i ] ); } } } if ( empty( $plugins ) ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } activate_plugins( $plugins, self_admin_url( 'plugins.php?error=true' ), is_network_admin() ); if ( ! is_network_admin() ) { $recent = (array) get_option( 'recently_activated' ); } else { $recent = (array) get_site_option( 'recently_activated' ); } foreach ( $plugins as $plugin ) { unset( $recent[ $plugin ] ); } if ( ! is_network_admin() ) { update_option( 'recently_activated', $recent, false ); } else { update_site_option( 'recently_activated', $recent ); } wp_redirect( self_admin_url( "plugins.php?activate-multi=true&plugin_status=$status&paged=$page&s=$s" ) ); exit; case 'update-selected': check_admin_referer( 'bulk-plugins' ); if ( isset( $_GET['plugins'] ) ) { $plugins = explode( ',', wp_unslash( $_GET['plugins'] ) ); } elseif ( isset( $_POST['checked'] ) ) { $plugins = (array) wp_unslash( $_POST['checked'] ); } else { $plugins = array(); } // Used in the HTML title tag. $title = __( 'Update Plugins' ); $parent_file = 'plugins.php'; wp_enqueue_script( 'updates' ); require_once ABSPATH . 'wp-admin/admin-header.php'; echo '<div class="wrap">'; echo '<h1>' . esc_html( $title ) . '</h1>'; $url = self_admin_url( 'update.php?action=update-selected&plugins=' . urlencode( implode( ',', $plugins ) ) ); $url = wp_nonce_url( $url, 'bulk-update-plugins' ); echo "<iframe src='$url' style='width: 100%; height:100%; min-height:850px;'></iframe>"; echo '</div>'; require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; case 'error_scrape': if ( ! current_user_can( 'activate_plugin', $plugin ) ) { wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) ); } check_admin_referer( 'plugin-activation-error_' . $plugin ); $valid = validate_plugin( $plugin ); if ( is_wp_error( $valid ) ) { wp_die( $valid ); } if ( ! WP_DEBUG ) { 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. // Go back to "sandbox" scope so we get the same errors as before. plugin_sandbox_scrape( $plugin ); /** This action is documented in wp-admin/includes/plugin.php */ do_action( "activate_{$plugin}" ); exit; case 'deactivate': if ( ! current_user_can( 'deactivate_plugin', $plugin ) ) { wp_die( __( 'Sorry, you are not allowed to deactivate this plugin.' ) ); } check_admin_referer( 'deactivate-plugin_' . $plugin ); if ( ! is_network_admin() && is_plugin_active_for_network( $plugin ) ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } deactivate_plugins( $plugin, false, is_network_admin() ); if ( ! is_network_admin() ) { update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ), false ); } else { update_site_option( 'recently_activated', array( $plugin => time() ) + (array) get_site_option( 'recently_activated' ) ); } if ( headers_sent() ) { echo "<meta http-equiv='refresh' content='" . esc_attr( "0;url=plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s" ) . "' />"; } else { wp_redirect( self_admin_url( "plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s" ) ); } exit; case 'deactivate-selected': if ( ! current_user_can( 'deactivate_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to deactivate plugins for this site.' ) ); } check_admin_referer( 'bulk-plugins' ); $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array(); // Do not deactivate plugins which are already deactivated. if ( is_network_admin() ) { $plugins = array_filter( $plugins, 'is_plugin_active_for_network' ); } else { $plugins = array_filter( $plugins, 'is_plugin_active' ); $plugins = array_diff( $plugins, array_filter( $plugins, 'is_plugin_active_for_network' ) ); foreach ( $plugins as $i => $plugin ) { // Only deactivate plugins which the user can deactivate. if ( ! current_user_can( 'deactivate_plugin', $plugin ) ) { unset( $plugins[ $i ] ); } } } if ( empty( $plugins ) ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } deactivate_plugins( $plugins, false, is_network_admin() ); $deactivated = array(); foreach ( $plugins as $plugin ) { $deactivated[ $plugin ] = time(); } if ( ! is_network_admin() ) { update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ), false ); } else { update_site_option( 'recently_activated', $deactivated + (array) get_site_option( 'recently_activated' ) ); } wp_redirect( self_admin_url( "plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s" ) ); exit; case 'delete-selected': if ( ! current_user_can( 'delete_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to delete plugins for this site.' ) ); } check_admin_referer( 'bulk-plugins' ); // $_POST = from the plugin form; $_GET = from the FTP details screen. $plugins = isset( $_REQUEST['checked'] ) ? (array) wp_unslash( $_REQUEST['checked'] ) : array(); if ( empty( $plugins ) ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } $plugins = array_filter( $plugins, 'is_plugin_inactive' ); // Do not allow to delete activated plugins. if ( empty( $plugins ) ) { wp_redirect( self_admin_url( "plugins.php?error=true&main=true&plugin_status=$status&paged=$page&s=$s" ) ); exit; } // Bail on all if any paths are invalid. // validate_file() returns truthy for invalid files. $invalid_plugin_files = array_filter( $plugins, 'validate_file' ); if ( $invalid_plugin_files ) { wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) ); exit; } require ABSPATH . 'wp-admin/update.php'; $parent_file = 'plugins.php'; if ( ! isset( $_REQUEST['verify-delete'] ) ) { wp_enqueue_script( 'jquery' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <?php $plugin_info = array(); $have_non_network_plugins = false; foreach ( (array) $plugins as $plugin ) { $plugin_slug = dirname( $plugin ); if ( '.' === $plugin_slug ) { $data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); if ( $data ) { $plugin_info[ $plugin ] = $data; $plugin_info[ $plugin ]['is_uninstallable'] = is_uninstallable_plugin( $plugin ); if ( ! $plugin_info[ $plugin ]['Network'] ) { $have_non_network_plugins = true; } } } else { // Get plugins list from that folder. $folder_plugins = get_plugins( '/' . $plugin_slug ); if ( $folder_plugins ) { foreach ( $folder_plugins as $plugin_file => $data ) { $plugin_info[ $plugin_file ] = _get_plugin_data_markup_translate( $plugin_file, $data ); $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin ); if ( ! $plugin_info[ $plugin_file ]['Network'] ) { $have_non_network_plugins = true; } } } } } $plugins_to_delete = count( $plugin_info ); ?> <?php if ( 1 === $plugins_to_delete ) : ?> <h1><?php _e( 'Delete Plugin' ); ?></h1> <?php if ( $have_non_network_plugins && is_network_admin() ) : $maybe_active_plugin = '<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'This plugin may be active on other sites in the network.' ); wp_admin_notice( $maybe_active_plugin, array( 'additional_classes' => array( 'error' ), ) ); endif; ?> <p><?php _e( 'You are about to remove the following plugin:' ); ?></p> <?php else : ?> <h1><?php _e( 'Delete Plugins' ); ?></h1> <?php if ( $have_non_network_plugins && is_network_admin() ) : $maybe_active_plugins = '<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'These plugins may be active on other sites in the network.' ); wp_admin_notice( $maybe_active_plugins, array( 'additional_classes' => array( 'error' ), ) ); endif; ?> <p><?php _e( 'You are about to remove the following plugins:' ); ?></p> <?php endif; ?> <ul class="ul-disc"> <?php $data_to_delete = false; foreach ( $plugin_info as $plugin ) { if ( $plugin['is_uninstallable'] ) { /* translators: 1: Plugin name, 2: Plugin author. */ echo '<li>', sprintf( __( '%1$s by %2$s (will also <strong>delete its data</strong>)' ), '<strong>' . $plugin['Name'] . '</strong>', '<em>' . $plugin['AuthorName'] . '</em>' ), '</li>'; $data_to_delete = true; } else { /* translators: 1: Plugin name, 2: Plugin author. */ echo '<li>', sprintf( _x( '%1$s by %2$s', 'plugin' ), '<strong>' . $plugin['Name'] . '</strong>', '<em>' . $plugin['AuthorName'] ) . '</em>', '</li>'; } } ?> </ul> <p> <?php if ( $data_to_delete ) { _e( 'Are you sure you want to delete these files and data?' ); } else { _e( 'Are you sure you want to delete these files?' ); } ?> </p> <form method="post" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?>" style="display:inline;"> <input type="hidden" name="verify-delete" value="1" /> <input type="hidden" name="action" value="delete-selected" /> <?php foreach ( (array) $plugins as $plugin ) { echo '<input type="hidden" name="checked[]" value="' . esc_attr( $plugin ) . '" />'; } ?> <?php wp_nonce_field( 'bulk-plugins' ); ?> <?php submit_button( $data_to_delete ? __( 'Yes, delete these files and data' ) : __( 'Yes, delete these files' ), '', 'submit', false ); ?> </form> <?php $referer = wp_get_referer(); ?> <form method="post" action="<?php echo $referer ? esc_url( $referer ) : ''; ?>" style="display:inline;"> <?php submit_button( __( 'No, return me to the plugin list' ), '', 'submit', false ); ?> </form> </div> <?php require_once ABSPATH . 'wp-admin/admin-footer.php'; exit; } else { $plugins_to_delete = count( $plugins ); } // End if verify-delete. $delete_result = delete_plugins( $plugins ); // Store the result in an option rather than a URL param due to object type & length. // Cannot use transient/cache, as that could get flushed if any plugin flushes data on uninstall/delete. update_option( 'plugins_delete_result_' . $user_ID, $delete_result, false ); wp_redirect( self_admin_url( "plugins.php?deleted=$plugins_to_delete&plugin_status=$status&paged=$page&s=$s" ) ); exit; case 'clear-recent-list': if ( ! is_network_admin() ) { update_option( 'recently_activated', array(), false ); } else { update_site_option( 'recently_activated', array() ); } break; case 'resume': if ( is_multisite() ) { return; } if ( ! current_user_can( 'resume_plugin', $plugin ) ) { wp_die( __( 'Sorry, you are not allowed to resume this plugin.' ) ); } check_admin_referer( 'resume-plugin_' . $plugin ); $result = resume_plugin( $plugin, self_admin_url( "plugins.php?error=resuming&plugin_status=$status&paged=$page&s=$s" ) ); if ( is_wp_error( $result ) ) { wp_die( $result ); } wp_redirect( self_admin_url( "plugins.php?resume=true&plugin_status=$status&paged=$page&s=$s" ) ); exit; case 'enable-auto-update': case 'disable-auto-update': case 'enable-auto-update-selected': case 'disable-auto-update-selected': if ( ! current_user_can( 'update_plugins' ) || ! wp_is_auto_update_enabled_for_type( 'plugin' ) ) { wp_die( __( 'Sorry, you are not allowed to manage plugins automatic updates.' ) ); } if ( is_multisite() && ! is_network_admin() ) { wp_die( __( 'Please connect to your network admin to manage plugins automatic updates.' ) ); } $redirect = self_admin_url( "plugins.php?plugin_status={$status}&paged={$page}&s={$s}" ); if ( 'enable-auto-update' === $action || 'disable-auto-update' === $action ) { if ( empty( $plugin ) ) { wp_redirect( $redirect ); exit; } check_admin_referer( 'updates' ); } else { if ( empty( $_POST['checked'] ) ) { wp_redirect( $redirect ); exit; } check_admin_referer( 'bulk-plugins' ); } $auto_updates = (array) get_site_option( 'auto_update_plugins', array() ); if ( 'enable-auto-update' === $action ) { $auto_updates[] = $plugin; $auto_updates = array_unique( $auto_updates ); $redirect = add_query_arg( array( 'enabled-auto-update' => 'true' ), $redirect ); } elseif ( 'disable-auto-update' === $action ) { $auto_updates = array_diff( $auto_updates, array( $plugin ) ); $redirect = add_query_arg( array( 'disabled-auto-update' => 'true' ), $redirect ); } else { $plugins = (array) wp_unslash( $_POST['checked'] ); if ( 'enable-auto-update-selected' === $action ) { $new_auto_updates = array_merge( $auto_updates, $plugins ); $new_auto_updates = array_unique( $new_auto_updates ); $query_args = array( 'enabled-auto-update-multi' => 'true' ); } else { $new_auto_updates = array_diff( $auto_updates, $plugins ); $query_args = array( 'disabled-auto-update-multi' => 'true' ); } // Return early if all selected plugins already have auto-updates enabled or disabled. // Must use non-strict comparison, so that array order is not treated as significant. if ( $new_auto_updates == $auto_updates ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual wp_redirect( $redirect ); exit; } $auto_updates = $new_auto_updates; $redirect = add_query_arg( $query_args, $redirect ); } /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */ $all_items = apply_filters( 'all_plugins', get_plugins() ); // Remove plugins that don't exist or have been deleted since the option was last updated. $auto_updates = array_intersect( $auto_updates, array_keys( $all_items ) ); update_site_option( 'auto_update_plugins', $auto_updates ); wp_redirect( $redirect ); exit; default: if ( isset( $_POST['checked'] ) ) { check_admin_referer( 'bulk-plugins' ); $screen = get_current_screen()->id; $sendback = wp_get_referer(); $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array(); /** This action is documented in wp-admin/edit.php */ $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $action, $plugins ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $sendback ); exit; } break; } } $wp_list_table->prepare_items(); wp_enqueue_script( 'plugin-install' ); add_thickbox(); add_screen_option( 'per_page', array( 'default' => 999 ) ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.' ) . '</p>' . '<p>' . __( 'The search for installed plugins will search for terms in their name, description, or author.' ) . ' <span id="live-search-desc" class="hide-if-no-js">' . __( 'The search results will be updated as you type.' ) . '</span></p>' . '<p>' . sprintf( /* translators: %s: WordPress Plugin Directory URL. */ __( 'If you would like to see more plugins to choose from, click on the “Add Plugin” button and you will be able to browse or search for additional plugins from the <a href="%s">WordPress Plugin Directory</a>. Plugins in the WordPress Plugin Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they are free!' ), __( 'https://wordpress.org/plugins/' ) ) . '</p>', ) ); get_current_screen()->add_help_tab( array( 'id' => 'compatibility-problems', 'title' => __( 'Troubleshooting' ), 'content' => '<p>' . __( 'Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue.' ) . '</p>' . '<p>' . sprintf( /* translators: %s: WP_PLUGIN_DIR constant value. */ __( 'If something goes wrong with a plugin and you cannot use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated.' ), '<code>' . WP_PLUGIN_DIR . '</code>' ) . '</p>', ) ); $help_sidebar_autoupdates = ''; if ( current_user_can( 'update_plugins' ) && wp_is_auto_update_enabled_for_type( 'plugin' ) ) { get_current_screen()->add_help_tab( array( 'id' => 'plugins-themes-auto-updates', 'title' => __( 'Auto-updates' ), 'content' => '<p>' . __( 'Auto-updates can be enabled or disabled for each individual plugin. Plugins with auto-updates enabled will display the estimated date of the next auto-update. Auto-updates depends on the WP-Cron task scheduling system.' ) . '</p>' . '<p>' . __( 'Auto-updates are only available for plugins recognized by WordPress.org, or that include a compatible update system.' ) . '</p>' . '<p>' . __( 'Please note: Third-party themes and plugins, or custom code, may override WordPress scheduling.' ) . '</p>', ) ); $help_sidebar_autoupdates = '<p>' . __( '<a href="https://wordpress.org/documentation/article/plugins-themes-auto-updates/">Documentation on Auto-updates</a>' ) . '</p>'; } if ( current_user_can( 'install_plugins' ) ) { get_current_screen()->add_help_tab( array( 'id' => 'plugins-dependencies', 'title' => __( 'Dependencies' ), 'content' => '<p>' . __( 'Plugin Dependencies aims to make the process of installing and activating add-ons (dependents) and the plugins they rely on (dependencies) consistent and easy.' ) . '</p>' . '<p>' . __( 'If a required plugin is deleted, a notice will be displayed on the Plugin administration screen informing the user that there is some missing dependencies to install and/or activate. Additionally, each plugin whose dependencies are not met will have an error notice on their plugin row.' ) . '</p>' . '<p>' . __( 'If a dependent plugin is missing some dependencies, its activation button will be disabled until the required dependencies are activated.' ) . '</p>', ) ); } get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/manage-plugins/">Documentation on Managing Plugins</a>' ) . '</p>' . $help_sidebar_autoupdates . '<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' ), ) ); // Used in the HTML title tag. $title = __( 'Plugins' ); $parent_file = 'plugins.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; $invalid = validate_active_plugins(); if ( ! empty( $invalid ) ) { foreach ( $invalid as $plugin_file => $error ) { $deactivated_message = sprintf( /* translators: 1: Plugin file, 2: Error message. */ __( 'The plugin %1$s has been deactivated due to an error: %2$s' ), '<code>' . esc_html( $plugin_file ) . '</code>', esc_html( $error->get_error_message() ) ); wp_admin_notice( $deactivated_message, array( 'id' => 'message', 'additional_classes' => array( 'error' ), ) ); } } // Used by wp_admin_notice() updated notices. $updated_notice_args = array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ); if ( isset( $_GET['error'] ) ) { if ( isset( $_GET['main'] ) ) { $errmsg = __( 'You cannot delete a plugin while it is active on the main site.' ); } elseif ( isset( $_GET['charsout'] ) ) { $errmsg = sprintf( /* translators: %d: Number of characters. */ _n( 'The plugin generated %d character of <strong>unexpected output</strong> during activation.', 'The plugin generated %d characters of <strong>unexpected output</strong> during activation.', $_GET['charsout'] ), $_GET['charsout'] ); $errmsg .= ' ' . __( 'If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.' ); } elseif ( 'resuming' === $_GET['error'] ) { $errmsg = __( 'Plugin could not be resumed because it triggered a <strong>fatal error</strong>.' ); } else { $errmsg = __( 'Plugin could not be activated because it triggered a <strong>fatal error</strong>.' ); } if ( ! isset( $_GET['main'] ) && ! isset( $_GET['charsout'] ) && isset( $_GET['_error_nonce'] ) && wp_verify_nonce( $_GET['_error_nonce'], 'plugin-activation-error_' . $plugin ) ) { $iframe_url = add_query_arg( array( 'action' => 'error_scrape', 'plugin' => urlencode( $plugin ), '_wpnonce' => urlencode( $_GET['_error_nonce'] ), ), admin_url( 'plugins.php' ) ); $errmsg .= '<iframe style="border:0" width="100%" height="70px" src="' . esc_url( $iframe_url ) . '"></iframe>'; } wp_admin_notice( $errmsg, array( 'id' => 'message', 'additional_classes' => array( 'error' ), ) ); } elseif ( isset( $_GET['deleted'] ) ) { $delete_result = get_option( 'plugins_delete_result_' . $user_ID ); // Delete it once we're done. delete_option( 'plugins_delete_result_' . $user_ID ); if ( is_wp_error( $delete_result ) ) { $plugin_not_deleted_message = sprintf( /* translators: %s: Error message. */ __( 'Plugin could not be deleted due to an error: %s' ), esc_html( $delete_result->get_error_message() ) ); wp_admin_notice( $plugin_not_deleted_message, array( 'id' => 'message', 'additional_classes' => array( 'error' ), 'dismissible' => true, ) ); } else { if ( 1 === (int) $_GET['deleted'] ) { $plugins_deleted_message = __( 'The selected plugin has been deleted.' ); } else { $plugins_deleted_message = __( 'The selected plugins have been deleted.' ); } wp_admin_notice( $plugins_deleted_message, $updated_notice_args ); } } elseif ( isset( $_GET['activate'] ) ) { wp_admin_notice( __( 'Plugin activated.' ), $updated_notice_args ); } elseif ( isset( $_GET['activate-multi'] ) ) { wp_admin_notice( __( 'Selected plugins activated.' ), $updated_notice_args ); } elseif ( isset( $_GET['deactivate'] ) ) { wp_admin_notice( __( 'Plugin deactivated.' ), $updated_notice_args ); } elseif ( isset( $_GET['deactivate-multi'] ) ) { wp_admin_notice( __( 'Selected plugins deactivated.' ), $updated_notice_args ); } elseif ( 'update-selected' === $action ) { wp_admin_notice( __( 'All selected plugins are up to date.' ), $updated_notice_args ); } elseif ( isset( $_GET['resume'] ) ) { wp_admin_notice( __( 'Plugin resumed.' ), $updated_notice_args ); } elseif ( isset( $_GET['enabled-auto-update'] ) ) { wp_admin_notice( __( 'Plugin will be auto-updated.' ), $updated_notice_args ); } elseif ( isset( $_GET['disabled-auto-update'] ) ) { wp_admin_notice( __( 'Plugin will no longer be auto-updated.' ), $updated_notice_args ); } elseif ( isset( $_GET['enabled-auto-update-multi'] ) ) { wp_admin_notice( __( 'Selected plugins will be auto-updated.' ), $updated_notice_args ); } elseif ( isset( $_GET['disabled-auto-update-multi'] ) ) { wp_admin_notice( __( 'Selected plugins will no longer be auto-updated.' ), $updated_notice_args ); } ?> <?php WP_Plugin_Dependencies::display_admin_notice_for_unmet_dependencies(); ?> <?php WP_Plugin_Dependencies::display_admin_notice_for_circular_dependencies(); ?> <div class="wrap"> <h1 class="wp-heading-inline"> <?php echo esc_html( $title ); ?> </h1> <?php if ( ( ! is_multisite() || is_network_admin() ) && current_user_can( 'install_plugins' ) ) { ?> <a href="<?php echo esc_url( self_admin_url( 'plugin-install.php' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Add Plugin' ); ?></a> <?php } if ( strlen( $s ) ) { echo '<span class="subtitle">'; printf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '<strong>' . esc_html( urldecode( $s ) ) . '</strong>' ); echo '</span>'; } ?> <hr class="wp-header-end"> <?php /** * Fires before the plugins list table is rendered. * * This hook also fires before the plugins list table is rendered in the Network Admin. * * Please note: The 'active' portion of the hook name does not refer to whether the current * view is for active plugins, but rather all plugins actively-installed. * * @since 3.0.0 * * @param array[] $plugins_all An array of arrays containing information on all installed plugins. */ do_action( 'pre_current_active_plugins', $plugins['all'] ); ?> <?php $wp_list_table->views(); ?> <form class="search-form search-plugins" method="get"> <?php $wp_list_table->search_box( __( 'Search installed plugins' ), 'plugin' ); ?> </form> <form method="post" id="bulk-action-form"> <input type="hidden" name="plugin_status" value="<?php echo esc_attr( $status ); ?>" /> <input type="hidden" name="paged" value="<?php echo esc_attr( $page ); ?>" /> <?php $wp_list_table->display(); ?> </form> <span class="spinner"></span> </div> <?php wp_print_request_filesystem_credentials_modal(); wp_print_admin_notice_templates(); wp_print_update_row_templates(); require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\���� � ms-upgrade-network.phpnu �Iw�� <?php /** * Multisite upgrade administration panel. * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ require_once __DIR__ . '/admin.php'; wp_redirect( network_admin_url( 'upgrade.php' ) ); exit; PK {��\"[�C C theme-editor.phpnu �Iw�� <?php /** * Theme file editor administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; if ( is_multisite() && ! is_network_admin() ) { wp_redirect( network_admin_url( 'theme-editor.php' ) ); exit; } if ( ! current_user_can( 'edit_themes' ) ) { wp_die( '<p>' . __( 'Sorry, you are not allowed to edit templates for this site.' ) . '</p>' ); } // Used in the HTML title tag. $title = __( 'Edit Themes' ); $parent_file = 'themes.php'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '<p>' . __( 'You can use the theme file editor to edit the individual CSS and PHP files which make up your theme.' ) . '</p>' . '<p>' . __( 'Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme’s template files. Clicking once on any file name causes the file to appear in the large Editor box.' ) . '</p>' . '<p>' . __( 'For PHP files, you can use the documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.' ) . '</p>' . '<p id="editor-keyboard-trap-help-1">' . __( 'When using a keyboard to navigate:' ) . '</p>' . '<ul>' . '<li id="editor-keyboard-trap-help-2">' . __( 'In the editing area, the Tab key enters a tab character.' ) . '</li>' . '<li id="editor-keyboard-trap-help-3">' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '</li>' . '<li id="editor-keyboard-trap-help-4">' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '</li>' . '</ul>' . '<p>' . __( 'After typing in your edits, click Update File.' ) . '</p>' . '<p>' . __( '<strong>Advice:</strong> Think very carefully about your site crashing if you are live-editing the theme currently in use.' ) . '</p>' . '<p>' . sprintf( /* translators: %s: Link to documentation on child themes. */ __( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a <a href="%s">child theme</a> instead.' ), __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) ) . '</p>' . ( is_network_admin() ? '<p>' . __( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '</p>' : '' ), ) ); get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://developer.wordpress.org/themes/">Documentation on Theme Development</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/appearance-theme-file-editor-screen/">Documentation on Editing Themes</a>' ) . '</p>' . '<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/wordpress/edit-files/">Documentation on Editing Files</a>' ) . '</p>' . '<p>' . __( '<a href="https://developer.wordpress.org/themes/basics/template-tags/">Documentation on Template Tags</a>' ) . '</p>' . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' ); $action = ! empty( $_REQUEST['action'] ) ? sanitize_text_field( $_REQUEST['action'] ) : ''; $theme = ! empty( $_REQUEST['theme'] ) ? sanitize_text_field( $_REQUEST['theme'] ) : ''; $file = ! empty( $_REQUEST['file'] ) ? sanitize_text_field( $_REQUEST['file'] ) : ''; $error = ! empty( $_REQUEST['error'] ); if ( $theme ) { $stylesheet = $theme; } else { $stylesheet = get_stylesheet(); } $theme = wp_get_theme( $stylesheet ); if ( ! $theme->exists() ) { wp_die( __( 'The requested theme does not exist.' ) ); } if ( $theme->errors() && 'theme_no_stylesheet' === $theme->errors()->get_error_code() ) { wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); } $allowed_files = array(); $style_files = array(); $file_types = wp_get_theme_file_editable_extensions( $theme ); foreach ( $file_types as $type ) { switch ( $type ) { case 'php': $allowed_files += $theme->get_files( 'php', -1 ); break; case 'css': $style_files = $theme->get_files( 'css', -1 ); $allowed_files['style.css'] = $style_files['style.css']; $allowed_files += $style_files; break; default: $allowed_files += $theme->get_files( $type, -1 ); break; } } // Move functions.php and style.css to the top. if ( isset( $allowed_files['functions.php'] ) ) { $allowed_files = array( 'functions.php' => $allowed_files['functions.php'] ) + $allowed_files; } if ( isset( $allowed_files['style.css'] ) ) { $allowed_files = array( 'style.css' => $allowed_files['style.css'] ) + $allowed_files; } if ( empty( $file ) ) { $relative_file = 'style.css'; $file = $allowed_files['style.css']; } else { $relative_file = wp_unslash( $file ); $file = $theme->get_stylesheet_directory() . '/' . $relative_file; } validate_file_to_edit( $file, $allowed_files ); // Handle fallback editing of file when JavaScript is not available. $edit_error = null; $posted_content = null; if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) { $edit_result = wp_edit_theme_plugin_file( wp_unslash( $_POST ) ); if ( is_wp_error( $edit_result ) ) { $edit_error = $edit_result; if ( check_ajax_referer( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce', false ) && isset( $_POST['newcontent'] ) ) { $posted_content = wp_unslash( $_POST['newcontent'] ); } } else { wp_redirect( add_query_arg( array( 'a' => 1, // This means "success" for some reason. 'theme' => $stylesheet, 'file' => $relative_file, ), admin_url( 'theme-editor.php' ) ) ); exit; } } $settings = array( 'codeEditor' => wp_enqueue_code_editor( compact( 'file' ) ), ); wp_enqueue_script( 'wp-theme-plugin-editor' ); wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )', wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); wp_add_inline_script( 'wp-theme-plugin-editor', 'wp.themePluginEditor.themeOrPlugin = "theme";' ); require_once ABSPATH . 'wp-admin/admin-header.php'; update_recently_edited( $file ); if ( ! is_file( $file ) ) { $error = true; } $content = ''; if ( ! empty( $posted_content ) ) { $content = $posted_content; } elseif ( ! $error && filesize( $file ) > 0 ) { $f = fopen( $file, 'r' ); $content = fread( $f, filesize( $file ) ); if ( str_ends_with( $file, '.php' ) ) { $functions = wp_doc_link_parse( $content ); if ( ! empty( $functions ) ) { $docs_select = '<select name="docs-list" id="docs-list">'; $docs_select .= '<option value="">' . esc_html__( 'Function Name…' ) . '</option>'; foreach ( $functions as $function ) { $docs_select .= '<option value="' . esc_attr( $function ) . '">' . esc_html( $function ) . '()</option>'; } $docs_select .= '</select>'; } } $content = esc_textarea( $content ); } $file_show = array_search( $file, array_filter( $allowed_files ), true ); ?> <div class="wrap"> <h1><?php echo esc_html( $title ); ?></h1> <?php if ( isset( $_GET['a'] ) ) { wp_admin_notice( __( 'File edited successfully.' ), array( 'id' => 'message', 'dismissible' => true, 'additional_classes' => array( 'updated' ), ) ); } elseif ( is_wp_error( $edit_error ) ) { $error_code = esc_html( $edit_error->get_error_message() ? $edit_error->get_error_message() : $edit_error->get_error_code() ); $message = '<p>' . __( 'There was an error while trying to update the file. You may need to fix something and try updating again.' ) . '</p> <pre>' . $error_code . '</pre>'; wp_admin_notice( $message, array( 'type' => 'error', 'id' => 'message', ) ); } if ( preg_match( '/\.css$/', $file ) ) { if ( ! wp_is_block_theme() && current_user_can( 'customize' ) ) { $message = '<p><strong>' . __( 'Did you know?' ) . '</strong></p><p>' . sprintf( /* translators: %s: Link to add custom CSS section in either the Customizer (classic themes) or Site Editor (block themes). */ __( 'There is no need to change your CSS here — you can edit and live preview CSS changes in the <a href="%s">built-in CSS editor</a>.' ), esc_url( add_query_arg( 'autofocus[section]', 'custom_css', admin_url( 'customize.php' ) ) ) ) . '</p>'; wp_admin_notice( $message, array( 'type' => 'info', 'id' => 'message', ) ); } elseif ( wp_is_block_theme() && current_user_can( 'edit_theme_options' ) ) { $site_editor_url = admin_url( add_query_arg( urlencode_deep( array( 'p' => '/styles', 'section' => '/css', ) ), 'site-editor.php' ) ); $message = '<p><strong>' . __( 'Did you know?' ) . '</strong></p><p>' . sprintf( /* translators: %s: Link to add custom CSS section in either the Customizer (classic themes) or Site Editor (block themes). */ __( 'There is no need to change your CSS here — you can edit and live preview CSS changes in the <a href="%s">built-in CSS editor</a>.' ), esc_url( $site_editor_url ) ) . '</p>'; wp_admin_notice( $message, array( 'type' => 'info', 'id' => 'message', ) ); } if ( file_exists( preg_replace( '/\.css$/', '.min.css', $file ) ) ) { $message = '<p><strong>' . __( 'There is a minified version of this stylesheet.' ) . '</strong></p><p>' . __( 'It is likely that this unminified stylesheet will not be served to visitors.' ) . '</p>'; wp_admin_notice( $message, array( 'type' => 'warning', 'id' => 'wp-css-min-warning', ) ); } } ?> <div class="fileedit-sub"> <div class="alignleft"> <h2> <?php if ( wp_get_theme()->get( 'Name' ) === $theme->display( 'Name' ) ) { /* translators: %s: Theme name. */ printf( __( 'Editing %s (active)' ), '<strong>' . $theme->display( 'Name' ) . '</strong>' ); } else { /* translators: %s: Theme name. */ printf( __( 'Editing %s (inactive)' ), '<strong>' . $theme->display( 'Name' ) . '</strong>' ); } ?> </h2> <?php printf( /* translators: %s: File path. */ ' <span><strong>' . __( 'File: %s' ) . '</strong></span>', esc_html( $file_show ) ); ?> </div> <div class="alignright"> <form action="theme-editor.php" method="get"> <label for="theme" id="theme-plugin-editor-selector"><?php _e( 'Select theme to edit:' ); ?> </label> <select name="theme" id="theme"> <?php foreach ( wp_get_themes( array( 'errors' => null ) ) as $a_stylesheet => $a_theme ) { if ( $a_theme->errors() && 'theme_no_stylesheet' === $a_theme->errors()->get_error_code() ) { continue; } $selected = ( $a_stylesheet === $stylesheet ) ? ' selected="selected"' : ''; echo "\n\t" . '<option value="' . esc_attr( $a_stylesheet ) . '"' . $selected . '>' . $a_theme->display( 'Name' ) . '</option>'; } ?> </select> <?php submit_button( __( 'Select' ), '', 'Submit', false ); ?> </form> </div> <br class="clear" /> </div> <?php if ( $theme->errors() ) { wp_admin_notice( '<strong>' . __( 'This theme is broken.' ) . '</strong> ' . $theme->errors()->get_error_message(), array( 'additional_classes' => array( 'error' ), ) ); } ?> <div id="templateside"> <h2 id="theme-files-label"><?php _e( 'Theme Files' ); ?></h2> <ul role="tree" aria-labelledby="theme-files-label"> <?php if ( $theme->parent() ) : ?> <li class="howto"> <?php printf( /* translators: %s: Link to edit parent theme. */ __( 'This child theme inherits templates from a parent theme, %s.' ), sprintf( '<a href="%s">%s</a>', self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ), $theme->parent()->display( 'Name' ) ) ); ?> </li> <?php endif; ?> <li role="treeitem" tabindex="-1" aria-expanded="true" aria-level="1" aria-posinset="1" aria-setsize="1"> <ul role="group"> <?php wp_print_theme_file_tree( wp_make_theme_file_tree( $allowed_files ) ); ?> </ul> </li> </ul> </div> <?php if ( $error ) : wp_admin_notice( __( 'File does not exist! Please double check the name and try again.' ), array( 'additional_classes' => array( 'error' ), ) ); else : ?> <form name="template" id="template" action="theme-editor.php" method="post"> <?php wp_nonce_field( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce' ); ?> <div> <label for="newcontent" id="theme-plugin-editor-label"><?php _e( 'Selected file content:' ); ?></label> <textarea cols="70" rows="30" name="newcontent" id="newcontent" aria-describedby="editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"><?php echo $content; ?></textarea> <input type="hidden" name="action" value="update" /> <input type="hidden" name="file" value="<?php echo esc_attr( $relative_file ); ?>" /> <input type="hidden" name="theme" value="<?php echo esc_attr( $theme->get_stylesheet() ); ?>" /> </div> <?php if ( ! empty( $functions ) ) : ?> <div id="documentation" class="hide-if-no-js"> <label for="docs-list"><?php _e( 'Documentation:' ); ?></label> <?php echo $docs_select; ?> <input disabled id="docs-lookup" type="button" class="button" value="<?php esc_attr_e( 'Look Up' ); ?>" onclick="if ( '' !== jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&locale=<?php echo urlencode( get_user_locale() ); ?>&version=<?php echo urlencode( get_bloginfo( 'version' ) ); ?>&redirect=true'); }" /> </div> <?php endif; ?> <div> <div class="editor-notices"> <?php if ( is_child_theme() && $theme->get_stylesheet() === get_template() ) : $message = ( is_writable( $file ) ) ? '<strong>' . __( 'Caution:' ) . '</strong> ' : ''; $message .= __( 'This is a file in your current parent theme.' ); wp_admin_notice( $message, array( 'type' => 'warning', 'additional_classes' => array( 'inline' ), ) ); endif; ?> </div> <?php if ( is_writable( $file ) ) { ?> <p class="submit"> <?php submit_button( __( 'Update File' ), 'primary', 'submit', false ); ?> <span class="spinner"></span> </p> <?php } else { ?> <p> <?php printf( /* translators: %s: Documentation URL. */ __( 'You need to make this file writable before you can save your changes. See <a href="%s">Changing File Permissions</a> for more information.' ), __( 'https://developer.wordpress.org/advanced-administration/server/file-permissions/' ) ); ?> </p> <?php } ?> </div> <?php wp_print_file_editor_templates(); ?> </form> <?php endif; // End if $error. ?> <br class="clear" /> </div> <?php $dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); if ( ! in_array( 'theme_editor_notice', $dismissed_pointers, true ) ) { // Get a back URL. $referer = wp_get_referer(); $excluded_referer_basenames = array( 'theme-editor.php', 'wp-login.php' ); $return_url = admin_url( '/' ); if ( $referer ) { $referer_path = parse_url( $referer, PHP_URL_PATH ); if ( is_string( $referer_path ) && ! in_array( basename( $referer_path ), $excluded_referer_basenames, true ) ) { $return_url = $referer; } } ?> <div id="file-editor-warning" class="notification-dialog-wrap file-editor-warning hide-if-no-js hidden"> <div class="notification-dialog-background"></div> <div class="notification-dialog"> <div class="file-editor-warning-content"> <div class="file-editor-warning-message"> <h1><?php _e( 'Heads up!' ); ?></h1> <p> <?php _e( 'You appear to be making direct edits to your theme in the WordPress dashboard. It is not recommended! Editing your theme directly could break your site and your changes may be lost in future updates.' ); ?> </p> <?php if ( ! $theme->parent() ) { echo '<p>'; printf( /* translators: %s: Link to documentation on child themes. */ __( 'If you need to tweak more than your theme’s CSS, you might want to try <a href="%s">making a child theme</a>.' ), esc_url( __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) ) ); echo '</p>'; } ?> <p><?php _e( 'If you decide to go ahead with direct edits anyway, use a file manager to create a copy with a new name and hang on to the original. That way, you can re-enable a functional version if something goes wrong.' ); ?></p> </div> <p> <a class="button file-editor-warning-go-back" href="<?php echo esc_url( $return_url ); ?>"><?php _e( 'Go back' ); ?></a> <button type="button" class="file-editor-warning-dismiss button button-primary"><?php _e( 'I understand' ); ?></button> </p> </div> </div> </div> <?php } // Editor warning notice. require_once ABSPATH . 'wp-admin/admin-footer.php'; PK {��\_A�� � async-upload.phpnu �Iw�� <?php /** * Server-side file upload handler from wp-plupload or other asynchronous upload methods. * * @package WordPress * @subpackage Administration */ if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) { define( 'DOING_AJAX', true ); } if ( ! defined( 'WP_ADMIN' ) ) { define( 'WP_ADMIN', true ); } /** Load WordPress Bootstrap */ require_once dirname( __DIR__ ) . '/wp-load.php'; require_once ABSPATH . 'wp-admin/admin.php'; header( 'Content-Type: text/plain; charset=' . get_option( 'blog_charset' ) ); if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) { require ABSPATH . 'wp-admin/includes/ajax-actions.php'; send_nosniff_header(); nocache_headers(); wp_ajax_upload_attachment(); die( '0' ); } if ( ! current_user_can( 'upload_files' ) ) { wp_die( __( 'Sorry, you are not allowed to upload files.' ) ); } // Just fetch the detail form for that attachment. if ( isset( $_REQUEST['attachment_id'] ) && (int) $_REQUEST['attachment_id'] && $_REQUEST['fetch'] ) { $id = (int) $_REQUEST['attachment_id']; $post = get_post( $id ); if ( 'attachment' !== $post->post_type ) { wp_die( __( 'Invalid post type.' ) ); } switch ( $_REQUEST['fetch'] ) { case 3: ?> <div class="media-item-wrapper"> <div class="attachment-details"> <?php $thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true ); if ( $thumb_url ) { echo '<img class="pinkynail" src="' . esc_url( $thumb_url[0] ) . '" alt="" />'; } // Title shouldn't ever be empty, but use filename just in case. $file = get_attached_file( $post->ID ); $file_url = wp_get_attachment_url( $post->ID ); $title = $post->post_title ? $post->post_title : wp_basename( $file ); ?> <div class="filename new"> <span class="media-list-title word-wrap-break-word"><strong><?php echo esc_html( wp_html_excerpt( $title, 60, '…' ) ); ?></strong></span> <span class="media-list-subtitle word-wrap-break-word"><?php echo esc_html( wp_basename( $file ) ); ?></span> <div class="attachment-tools"> <?php if ( current_user_can( 'edit_post', $id ) ) { echo '<a class="edit-attachment" href="' . esc_url( get_edit_post_link( $id ) ) . '">' . _x( 'Edit', 'media item' ) . '</a>'; } else { echo '<span class="edit-attachment">' . _x( 'Success', 'media item' ) . '</span>'; } ?> <span class="media-item-copy-container copy-to-clipboard-container edit-attachment"> <button type="button" class="button button-small copy-attachment-url" data-clipboard-text="<?php echo esc_url( $file_url ); ?>" ><?php _e( 'Copy URL to clipboard' ); ?></button> <span class="success hidden" aria-hidden="true"><?php _e( 'Copied!' ); ?></span> </span> </div> </div> </div> </div> <?php break; case 2: add_filter( 'attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2 ); echo get_media_item( $id, array( 'send' => false, 'delete' => true, ) ); break; default: add_filter( 'attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2 ); echo get_media_item( $id ); break; } exit; } check_admin_referer( 'media-form' ); $post_id = 0; if ( isset( $_REQUEST['post_id'] ) ) { $post_id = absint( $_REQUEST['post_id'] ); if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) { $post_id = 0; } } $id = media_handle_upload( 'async-upload', $post_id ); if ( is_wp_error( $id ) ) { $button_unique_id = uniqid( 'dismiss-' ); $error_description_id = uniqid( 'error-description-' ); $message = sprintf( '%s <strong>%s</strong><br />%s', sprintf( '<button type="button" id="%1$s" class="dismiss button-link" aria-describedby="%2$s">%3$s</button>', esc_attr( $button_unique_id ), esc_attr( $error_description_id ), __( 'Dismiss' ) ), sprintf( /* translators: %s: Name of the file that failed to upload. */ __( '“%s” has failed to upload.' ), esc_html( $_FILES['async-upload']['name'] ) ), esc_html( $id->get_error_message() ) ); wp_admin_notice( $message, array( 'id' => $error_description_id, 'additional_classes' => array( 'error-div', 'error' ), 'paragraph_wrap' => false, ) ); $speak_message = sprintf( /* translators: %s: Name of the file that failed to upload. */ __( '%s has failed to upload.' ), $_FILES['async-upload']['name'] ); echo '<script>_.delay(function() {wp.a11y.speak(' . wp_json_encode( $speak_message, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ");}, 1500);jQuery( 'button#{$button_unique_id}' ).on( 'click', function() {jQuery(this).parents('div.media-item').slideUp(200, function(){jQuery(this).remove();wp.a11y.speak( wp.i18n.__( 'Error dismissed.' ) );jQuery( '#plupload-browse-button' ).trigger( 'focus' );})});</script>\n"; exit; } if ( $_REQUEST['short'] ) { // Short form response - attachment ID only. echo $id; } else { // Long form response - big chunk of HTML. $type = $_REQUEST['type']; /** * Filters the returned ID of an uploaded attachment. * * The dynamic portion of the hook name, `$type`, refers to the attachment type. * * Possible hook names include: * * - `async_upload_audio` * - `async_upload_file` * - `async_upload_image` * - `async_upload_video` * * @since 2.5.0 * * @param int $id Uploaded attachment ID. */ echo apply_filters( "async_upload_{$type}", $id ); } PK {��\��fj� � ms-sites.phpnu �Iw�� <?php /** * Multisite sites administration panel. * * @package WordPress * @subpackage Multisite * @since 3.0.0 */ require_once __DIR__ . '/admin.php'; wp_redirect( network_admin_url( 'sites.php' ) ); exit; PK {��\���˵ ˵ update-core.phpnu �Iw�� <?php /** * Update Core administration panel. * * @package WordPress * @subpackage Administration */ /** WordPress Administration Bootstrap */ require_once __DIR__ . '/admin.php'; wp_enqueue_style( 'plugin-install' ); wp_enqueue_script( 'plugin-install' ); wp_enqueue_script( 'updates' ); add_thickbox(); if ( is_multisite() && ! is_network_admin() ) { wp_redirect( network_admin_url( 'update-core.php' ) ); exit; } if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_themes' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_languages' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } /** * Lists available core updates. * * @since 2.7.0 * * @global string $wp_local_package Locale code of the package. * @global wpdb $wpdb WordPress database abstraction object. * * @param object $update */ function list_core_update( $update ) { global $wp_local_package, $wpdb; static $first_pass = true; $wp_version = wp_get_wp_version(); $version_string = sprintf( '%s–%s', $update->current, get_locale() ); if ( 'en_US' === $update->locale && 'en_US' === get_locale() ) { $version_string = $update->current; } elseif ( 'en_US' === $update->locale && $update->packages->partial && $wp_version === $update->partial_version ) { $updates = get_core_updates(); if ( $updates && 1 === count( $updates ) ) { // If the only available update is a partial builds, it doesn't need a language-specific version string. $version_string = $update->current; } } elseif ( 'en_US' === $update->locale && 'en_US' !== get_locale() ) { $version_string = sprintf( '%s–%s', $update->current, $update->locale ); } $current = false; if ( ! isset( $update->response ) || 'latest' === $update->response ) { $current = true; } $message = ''; $form_action = 'update-core.php?action=do-core-upgrade'; $php_version = PHP_VERSION; $mysql_version = $wpdb->db_version(); $show_buttons = true; // Nightly build versions have two hyphens and a commit number. if ( preg_match( '/-\w+-\d+/', $update->current ) ) { // Retrieve the major version number. preg_match( '/^\d+.\d+/', $update->current, $update_major ); /* translators: %s: WordPress version. */ $submit = sprintf( __( 'Update to latest %s nightly' ), $update_major[0] ); } else { /* translators: %s: WordPress version. */ $submit = sprintf( __( 'Update to version %s' ), $version_string ); } if ( 'development' === $update->response ) { $message = __( 'You can update to the latest nightly build manually:' ); } else { if ( $current ) { /* translators: %s: WordPress version. */ $submit = sprintf( __( 'Re-install version %s' ), $version_string ); $form_action = 'update-core.php?action=do-core-reinstall'; } else { $php_compat = version_compare( $php_version, $update->php_version, '>=' ); if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) { $mysql_compat = true; } else { $mysql_compat = version_compare( $mysql_version, $update->mysql_version, '>=' ); } $version_url = sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ) ), sanitize_title( $update->current ) ); $php_update_message = '</p><p>' . sprintf( /* translators: %s: URL to Update PHP page. */ __( '<a href="%s">Learn more about updating PHP</a>.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $php_update_message .= '</p><p><em>' . $annotation . '</em>'; } if ( ! $mysql_compat && ! $php_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Minimum required MySQL version number, 5: Current PHP version number, 6: Current MySQL version number. */ __( 'You cannot update because <a href="%1$s">WordPress %2$s</a> requires PHP version %3$s or higher and MySQL version %4$s or higher. You are running PHP version %5$s and MySQL version %6$s.' ), $version_url, $update->current, $update->php_version, $update->mysql_version, $php_version, $mysql_version ) . $php_update_message; } elseif ( ! $php_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required PHP version number, 4: Current PHP version number. */ __( 'You cannot update because <a href="%1$s">WordPress %2$s</a> requires PHP version %3$s or higher. You are running version %4$s.' ), $version_url, $update->current, $update->php_version, $php_version ) . $php_update_message; } elseif ( ! $mysql_compat ) { $message = sprintf( /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: Minimum required MySQL version number, 4: Current MySQL version number. */ __( 'You cannot update because <a href="%1$s">WordPress %2$s</a> requires MySQL version %3$s or higher. You are running version %4$s.' ), $version_url, $update->current, $update->mysql_version, $mysql_version ); } else { $message = sprintf( /* translators: 1: Installed WordPress version number, 2: URL to WordPress release notes, 3: New WordPress version number, including locale if necessary. */ __( 'You can update from WordPress %1$s to <a href="%2$s">WordPress %3$s</a> manually:' ), $wp_version, $version_url, $version_string ); } if ( ! $mysql_compat || ! $php_compat ) { $show_buttons = false; } } } echo '<p>'; echo $message; echo '</p>'; echo '<form method="post" action="' . esc_url( $form_action ) . '" name="upgrade" class="upgrade">'; wp_nonce_field( 'upgrade-core' ); echo '<p>'; echo '<input name="version" value="' . esc_attr( $update->current ) . '" type="hidden" />'; echo '<input name="locale" value="' . esc_attr( $update->locale ) . '" type="hidden" />'; if ( $show_buttons ) { if ( $first_pass ) { submit_button( $submit, $current ? '' : 'primary regular', 'upgrade', false ); $first_pass = false; } else { submit_button( $submit, '', 'upgrade', false ); } } if ( 'en_US' !== $update->locale ) { if ( ! isset( $update->dismissed ) || ! $update->dismissed ) { submit_button( __( 'Hide this update' ), '', 'dismiss', false ); } else { submit_button( __( 'Bring back this update' ), '', 'undismiss', false ); } } echo '</p>'; if ( 'en_US' !== $update->locale && ( ! isset( $wp_local_package ) || $wp_local_package !== $update->locale ) ) { echo '<p class="hint">' . __( 'This localized version contains both the translation and various other localization fixes.' ) . '</p>'; } elseif ( 'en_US' === $update->locale && 'en_US' !== get_locale() && ( ! $update->packages->partial && $wp_version === $update->partial_version ) ) { // Partial builds don't need language-specific warnings. echo '<p class="hint">' . sprintf( /* translators: %s: WordPress version. */ __( 'You are about to install WordPress %s <strong>in English (US)</strong>. There is a chance this update will break your translation. You may prefer to wait for the localized version to be released.' ), 'development' !== $update->response ? $update->current : '' ) . '</p>'; } echo '</form>'; } /** * Display dismissed updates. * * @since 2.7.0 */ function dismissed_updates() { $dismissed = get_core_updates( array( 'dismissed' => true, 'available' => false, ) ); if ( $dismissed ) { $show_text = esc_js( __( 'Show hidden updates' ) ); $hide_text = esc_js( __( 'Hide hidden updates' ) ); ?> <script type="text/javascript"> jQuery( function( $ ) { $( '#show-dismissed' ).on( 'click', function() { var isExpanded = ( 'true' === $( this ).attr( 'aria-expanded' ) ); if ( isExpanded ) { $( this ).text( '<?php echo $show_text; ?>' ).attr( 'aria-expanded', 'false' ); } else { $( this ).text( '<?php echo $hide_text; ?>' ).attr( 'aria-expanded', 'true' ); } $( '#dismissed-updates' ).toggle( 'fast' ); }); }); </script> <?php echo '<p class="hide-if-no-js"><button type="button" class="button" id="show-dismissed" aria-expanded="false">' . __( 'Show hidden updates' ) . '</button></p>'; echo '<ul id="dismissed-updates" class="core-updates dismissed">'; foreach ( (array) $dismissed as $update ) { echo '<li>'; list_core_update( $update ); echo '</li>'; } echo '</ul>'; } } /** * Display upgrade WordPress for downloading latest or upgrading automatically form. * * @since 2.7.0 */ function core_upgrade_preamble() { $updates = get_core_updates(); // Include an unmodified $wp_version. require ABSPATH . WPINC . '/version.php'; $is_development_version = preg_match( '/alpha|beta|RC/', $wp_version ); if ( isset( $updates[0]->version ) && version_compare( $updates[0]->version, $wp_version, '>' ) ) { echo '<h2 class="response">'; _e( 'An updated version of WordPress is available.' ); echo '</h2>'; $message = sprintf( /* translators: 1: Documentation on WordPress backups, 2: Documentation on updating WordPress. */ __( '<strong>Important:</strong> Before updating, please <a href="%1$s">back up your database and files</a>. For help with updates, visit the <a href="%2$s">Updating WordPress</a> documentation page.' ), __( 'https://developer.wordpress.org/advanced-administration/security/backup/' ), __( 'https://wordpress.org/documentation/article/updating-wordpress/' ) ); wp_admin_notice( $message, array( 'type' => 'warning', 'additional_classes' => array( 'inline' ), ) ); } elseif ( $is_development_version ) { echo '<h2 class="response">' . __( 'You are using a development version of WordPress.' ) . '</h2>'; } else { echo '<h2 class="response">' . __( 'You have the latest version of WordPress.' ) . '</h2>'; } echo '<ul class="core-updates">'; foreach ( (array) $updates as $update ) { echo '<li>'; list_core_update( $update ); echo '</li>'; } echo '</ul>'; // Don't show the maintenance mode notice when we are only showing a single re-install option. if ( $updates && ( count( $updates ) > 1 || 'latest' !== $updates[0]->response ) ) { echo '<p>' . __( 'While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, this mode will be deactivated.' ) . '</p>'; } elseif ( ! $updates ) { list( $normalized_version ) = explode( '-', $wp_version ); echo '<p>' . sprintf( /* translators: 1: URL to About screen, 2: WordPress version. */ __( '<a href="%1$s">Learn more about WordPress %2$s</a>.' ), esc_url( self_admin_url( 'about.php' ) ), $normalized_version ) . '</p>'; } dismissed_updates(); } /** * Display WordPress auto-updates settings. * * @since 5.6.0 */ function core_auto_updates_settings() { if ( isset( $_GET['core-major-auto-updates-saved'] ) ) { if ( 'enabled' === $_GET['core-major-auto-updates-saved'] ) { $notice_text = __( 'Automatic updates for all WordPress versions have been enabled. Thank you!' ); wp_admin_notice( $notice_text, array( 'type' => 'success', 'dismissible' => true, ) ); } elseif ( 'disabled' === $_GET['core-major-auto-updates-saved'] ) { $notice_text = __( 'WordPress will only receive automatic security and maintenance releases from now on.' ); wp_admin_notice( $notice_text, array( 'type' => 'success', 'dismissible' => true, ) ); } } require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $updater = new WP_Automatic_Updater(); // Defaults: $upgrade_dev = get_site_option( 'auto_update_core_dev', 'enabled' ) === 'enabled'; $upgrade_minor = get_site_option( 'auto_update_core_minor', 'enabled' ) === 'enabled'; $upgrade_major = get_site_option( 'auto_update_core_major', 'unset' ) === 'enabled'; $can_set_update_option = true; // WP_AUTO_UPDATE_CORE = true (all), 'beta', 'rc', 'development', 'branch-development', 'minor', false. if ( defined( 'WP_AUTO_UPDATE_CORE' ) ) { if ( false === WP_AUTO_UPDATE_CORE ) { // Defaults to turned off, unless a filter allows it. $upgrade_dev = false; $upgrade_minor = false; $upgrade_major = false; } elseif ( true === WP_AUTO_UPDATE_CORE || in_array( WP_AUTO_UPDATE_CORE, array( 'beta', 'rc', 'development', 'branch-development' ), true ) ) { // ALL updates for core. $upgrade_dev = true; $upgrade_minor = true; $upgrade_major = true; } elseif ( 'minor' === WP_AUTO_UPDATE_CORE ) { // Only minor updates for core. $upgrade_dev = false; $upgrade_minor = true; $upgrade_major = false; } // The UI is overridden by the `WP_AUTO_UPDATE_CORE` constant. $can_set_update_option = false; } if ( $updater->is_disabled() ) { $upgrade_dev = false; $upgrade_minor = false; $upgrade_major = false; /* * The UI is overridden by the `AUTOMATIC_UPDATER_DISABLED` constant * or the `automatic_updater_disabled` filter, * or by `wp_is_file_mod_allowed( 'automatic_updater' )`. * See `WP_Automatic_Updater::is_disabled()`. */ $can_set_update_option = false; } // Is the UI overridden by a plugin using the `allow_major_auto_core_updates` filter? if ( has_filter( 'allow_major_auto_core_updates' ) ) { $can_set_update_option = false; } /** This filter is documented in wp-admin/includes/class-core-upgrader.php */ $upgrade_dev = apply_filters( 'allow_dev_auto_core_updates', $upgrade_dev ); /** This filter is documented in wp-admin/includes/class-core-upgrader.php */ $upgrade_minor = apply_filters( 'allow_minor_auto_core_updates', $upgrade_minor ); /** This filter is documented in wp-admin/includes/class-core-upgrader.php */ $upgrade_major = apply_filters( 'allow_major_auto_core_updates', $upgrade_major ); $auto_update_settings = array( 'dev' => $upgrade_dev, 'minor' => $upgrade_minor, 'major' => $upgrade_major, ); if ( $upgrade_major ) { $wp_version = wp_get_wp_version(); $updates = get_core_updates(); if ( isset( $updates[0]->version ) && version_compare( $updates[0]->version, $wp_version, '>' ) ) { echo '<p>' . wp_get_auto_update_message() . '</p>'; } } $action_url = self_admin_url( 'update-core.php?action=core-major-auto-updates-settings' ); ?> <p class="auto-update-status"> <?php if ( $updater->is_vcs_checkout( ABSPATH ) ) { _e( 'This site appears to be under version control. Automatic updates are disabled.' ); } elseif ( $upgrade_major ) { _e( 'This site is automatically kept up to date with each new version of WordPress.' ); if ( $can_set_update_option ) { echo '<br />'; printf( '<a href="%s" class="core-auto-update-settings-link core-auto-update-settings-link-disable">%s</a>', wp_nonce_url( add_query_arg( 'value', 'disable', $action_url ), 'core-major-auto-updates-nonce' ), __( 'Switch to automatic updates for maintenance and security releases only.' ) ); } } elseif ( $upgrade_minor ) { _e( 'This site is automatically kept up to date with maintenance and security releases of WordPress only.' ); if ( $can_set_update_option ) { echo '<br />'; printf( '<a href="%s" class="core-auto-update-settings-link core-auto-update-settings-link-enable">%s</a>', wp_nonce_url( add_query_arg( 'value', 'enable', $action_url ), 'core-major-auto-updates-nonce' ), __( 'Enable automatic updates for all new versions of WordPress.' ) ); } } else { _e( 'This site will not receive automatic updates for new versions of WordPress.' ); } ?> </p> <?php /** * Fires after the major core auto-update settings. * * @since 5.6.0 * * @param array $auto_update_settings { * Array of core auto-update settings. * * @type bool $dev Whether to enable automatic updates for development versions. * @type bool $minor Whether to enable minor automatic core updates. * @type bool $major Whether to enable major automatic core updates. * } */ do_action( 'after_core_auto_updates_settings', $auto_update_settings ); } /** * Display the upgrade plugins form. * * @since 2.9.0 */ function list_plugin_updates() { $wp_version = wp_get_wp_version(); $cur_wp_version = preg_replace( '/-.*$/', '', $wp_version ); require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; $plugins = get_plugin_updates(); if ( empty( $plugins ) ) { echo '<h2>' . __( 'Plugins' ) . '</h2>'; echo '<p>' . __( 'Your plugins are all up to date.' ) . '</p>'; return; } $form_action = 'update-core.php?action=do-plugin-upgrade'; $core_updates = get_core_updates(); if ( ! isset( $core_updates[0]->response ) || 'latest' === $core_updates[0]->response || 'development' === $core_updates[0]->response || version_compare( $core_updates[0]->current, $cur_wp_version, '=' ) ) { $core_update_version = false; } else { $core_update_version = $core_updates[0]->current; } $plugins_count = count( $plugins ); ?> <h2> <?php printf( '%s <span class="count">(%d)</span>', __( 'Plugins' ), number_format_i18n( $plugins_count ) ); ?> </h2> <p><?php _e( 'The following plugins have new versions available. Check the ones you want to update and then click “Update Plugins”.' ); ?></p> <form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-plugins" class="upgrade"> <?php wp_nonce_field( 'upgrade-core' ); ?> <p><input id="upgrade-plugins" class="button" type="submit" value="<?php esc_attr_e( 'Update Plugins' ); ?>" name="upgrade" /></p> <table class="widefat updates-table" id="update-plugins-table"> <thead> <tr> <td class="manage-column check-column"><input type="checkbox" id="plugins-select-all" /></td> <td class="manage-column"><label for="plugins-select-all"><?php _e( 'Select All' ); ?></label></td> </tr> </thead> <tbody class="plugins"> <?php $auto_updates = array(); if ( wp_is_auto_update_enabled_for_type( 'plugin' ) ) { $auto_updates = (array) get_site_option( 'auto_update_plugins', array() ); $auto_update_notice = ' | ' . wp_get_auto_update_message(); } foreach ( (array) $plugins as $plugin_file => $plugin_data ) { $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true ); $icon = '<span class="dashicons dashicons-admin-plugins"></span>'; $preferred_icons = array( 'svg', '2x', '1x', 'default' ); foreach ( $preferred_icons as $preferred_icon ) { if ( ! empty( $plugin_data->update->icons[ $preferred_icon ] ) ) { $icon = '<img src="' . esc_url( $plugin_data->update->icons[ $preferred_icon ] ) . '" alt="" class="plugin-icon" />'; break; } } // Get plugin compat for running version of WordPress. if ( isset( $plugin_data->update->tested ) && version_compare( $plugin_data->update->tested, $cur_wp_version, '>=' ) ) { /* translators: %s: WordPress version. */ $compat = '<br />' . sprintf( __( 'Compatibility with WordPress %s: 100%% (according to its author)' ), $cur_wp_version ); } else { /* translators: %s: WordPress version. */ $compat = '<br />' . sprintf( __( 'Compatibility with WordPress %s: Unknown' ), $cur_wp_version ); } // Get plugin compat for updated version of WordPress. if ( $core_update_version ) { if ( isset( $plugin_data->update->tested ) && version_compare( $plugin_data->update->tested, $core_update_version, '>=' ) ) { /* translators: %s: WordPress version. */ $compat .= '<br />' . sprintf( __( 'Compatibility with WordPress %s: 100%% (according to its author)' ), $core_update_version ); } else { /* translators: %s: WordPress version. */ $compat .= '<br />' . sprintf( __( 'Compatibility with WordPress %s: Unknown' ), $core_update_version ); } } $requires_php = isset( $plugin_data->update->requires_php ) ? $plugin_data->update->requires_php : null; $compatible_php = is_php_version_compatible( $requires_php ); if ( ! $compatible_php && current_user_can( 'update_php' ) ) { $compat .= '<br />' . __( 'This update does not work with your version of PHP.' ) . ' '; $compat .= sprintf( /* translators: %s: URL to Update PHP page. */ __( '<a href="%s">Learn more about updating PHP</a>.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $compat .= '</p><p><em>' . $annotation . '</em>'; } } // Get the upgrade notice for the new plugin version. if ( isset( $plugin_data->update->upgrade_notice ) ) { $upgrade_notice = '<br />' . strip_tags( $plugin_data->update->upgrade_notice ); } else { $upgrade_notice = ''; } $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '§ion=changelog&TB_iframe=true&width=640&height=662' ); $details = sprintf( '<a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">%3$s</a>', esc_url( $details_url ), /* translators: 1: Plugin name, 2: Version number. */ esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $plugin_data->Name, $plugin_data->update->new_version ) ), /* translators: %s: Plugin version. */ sprintf( __( 'View version %s details.' ), $plugin_data->update->new_version ) ); $checkbox_id = 'checkbox_' . md5( $plugin_file ); ?> <tr> <td class="check-column"> <?php if ( $compatible_php ) : ?> <input type="checkbox" name="checked[]" id="<?php echo $checkbox_id; ?>" value="<?php echo esc_attr( $plugin_file ); ?>" /> <label for="<?php echo $checkbox_id; ?>"> <span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. %s: Plugin name. */ printf( __( 'Select %s' ), $plugin_data->Name ); ?> </span> </label> <?php endif; ?> </td> <td class="plugin-title"><p> <?php echo $icon; ?> <strong><?php echo $plugin_data->Name; ?></strong> <?php printf( /* translators: 1: Plugin version, 2: New version. */ __( 'You have version %1$s installed. Update to %2$s.' ), $plugin_data->Version, $plugin_data->update->new_version ); echo ' ' . $details . $compat; if ( in_array( $plugin_file, $auto_updates, true ) ) { echo $auto_update_notice; } echo $upgrade_notice; ?> </p></td> </tr> <?php } ?> </tbody> <tfoot> <tr> <td class="manage-column check-column"><input type="checkbox" id="plugins-select-all-2" /></td> <td class="manage-column"><label for="plugins-select-all-2"><?php _e( 'Select All' ); ?></label></td> </tr> </tfoot> </table> <p><input id="upgrade-plugins-2" class="button" type="submit" value="<?php esc_attr_e( 'Update Plugins' ); ?>" name="upgrade" /></p> </form> <?php } /** * Display the upgrade themes form. * * @since 2.9.0 */ function list_theme_updates() { $themes = get_theme_updates(); if ( empty( $themes ) ) { echo '<h2>' . __( 'Themes' ) . '</h2>'; echo '<p>' . __( 'Your themes are all up to date.' ) . '</p>'; return; } $form_action = 'update-core.php?action=do-theme-upgrade'; $themes_count = count( $themes ); ?> <h2> <?php printf( '%s <span class="count">(%d)</span>', __( 'Themes' ), number_format_i18n( $themes_count ) ); ?> </h2> <p><?php _e( 'The following themes have new versions available. Check the ones you want to update and then click “Update Themes”.' ); ?></p> <p> <?php printf( /* translators: %s: Link to documentation on child themes. */ __( '<strong>Please Note:</strong> Any customizations you have made to theme files will be lost. Please consider using <a href="%s">child themes</a> for modifications.' ), __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) ); ?> </p> <form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-themes" class="upgrade"> <?php wp_nonce_field( 'upgrade-core' ); ?> <p><input id="upgrade-themes" class="button" type="submit" value="<?php esc_attr_e( 'Update Themes' ); ?>" name="upgrade" /></p> <table class="widefat updates-table" id="update-themes-table"> <thead> <tr> <td class="manage-column check-column"><input type="checkbox" id="themes-select-all" /></td> <td class="manage-column"><label for="themes-select-all"><?php _e( 'Select All' ); ?></label></td> </tr> </thead> <tbody class="plugins"> <?php $auto_updates = array(); if ( wp_is_auto_update_enabled_for_type( 'theme' ) ) { $auto_updates = (array) get_site_option( 'auto_update_themes', array() ); $auto_update_notice = ' | ' . wp_get_auto_update_message(); } foreach ( $themes as $stylesheet => $theme ) { $requires_wp = isset( $theme->update['requires'] ) ? $theme->update['requires'] : null; $requires_php = isset( $theme->update['requires_php'] ) ? $theme->update['requires_php'] : null; $compatible_wp = is_wp_version_compatible( $requires_wp ); $compatible_php = is_php_version_compatible( $requires_php ); $compat = ''; if ( ! $compatible_wp && ! $compatible_php ) { $compat .= '<br />' . __( 'This update does not work with your versions of WordPress and PHP.' ) . ' '; if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) { $compat .= sprintf( /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */ __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ), esc_url( self_admin_url( 'update-core.php' ) ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $compat .= '</p><p><em>' . $annotation . '</em>'; } } elseif ( current_user_can( 'update_core' ) ) { $compat .= sprintf( /* translators: %s: URL to WordPress Updates screen. */ __( '<a href="%s">Please update WordPress</a>.' ), esc_url( self_admin_url( 'update-core.php' ) ) ); } elseif ( current_user_can( 'update_php' ) ) { $compat .= sprintf( /* translators: %s: URL to Update PHP page. */ __( '<a href="%s">Learn more about updating PHP</a>.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $compat .= '</p><p><em>' . $annotation . '</em>'; } } } elseif ( ! $compatible_wp ) { $compat .= '<br />' . __( 'This update does not work with your version of WordPress.' ) . ' '; if ( current_user_can( 'update_core' ) ) { $compat .= sprintf( /* translators: %s: URL to WordPress Updates screen. */ __( '<a href="%s">Please update WordPress</a>.' ), esc_url( self_admin_url( 'update-core.php' ) ) ); } } elseif ( ! $compatible_php ) { $compat .= '<br />' . __( 'This update does not work with your version of PHP.' ) . ' '; if ( current_user_can( 'update_php' ) ) { $compat .= sprintf( /* translators: %s: URL to Update PHP page. */ __( '<a href="%s">Learn more about updating PHP</a>.' ), esc_url( wp_get_update_php_url() ) ); $annotation = wp_get_update_php_annotation(); if ( $annotation ) { $compat .= '</p><p><em>' . $annotation . '</em>'; } } } $checkbox_id = 'checkbox_' . md5( $theme->get( 'Name' ) ); ?> <tr> <td class="check-column"> <?php if ( $compatible_wp && $compatible_php ) : ?> <input type="checkbox" name="checked[]" id="<?php echo $checkbox_id; ?>" value="<?php echo esc_attr( $stylesheet ); ?>" /> <label for="<?php echo $checkbox_id; ?>"> <span class="screen-reader-text"> <?php /* translators: Hidden accessibility text. %s: Theme name. */ printf( __( 'Select %s' ), $theme->display( 'Name' ) ); ?> </span> </label> <?php endif; ?> </td> <td class="plugin-title"><p> <img src="<?php echo esc_url( $theme->get_screenshot() . '?ver=' . $theme->version ); ?>" width="85" height="64" class="updates-table-screenshot" alt="" /> <strong><?php echo $theme->display( 'Name' ); ?></strong> <?php printf( /* translators: 1: Theme version, 2: New version. */ __( 'You have version %1$s installed. Update to %2$s.' ), $theme->display( 'Version' ), $theme->update['new_version'] ); echo ' ' . $compat; if ( in_array( $stylesheet, $auto_updates, true ) ) { echo $auto_update_notice; } ?> </p></td> </tr> <?php } ?> </tbody> <tfoot> <tr> <td class="manage-column check-column"><input type="checkbox" id="themes-select-all-2" /></td> <td class="manage-column"><label for="themes-select-all-2"><?php _e( 'Select All' ); ?></label></td> </tr> </tfoot> </table> <p><input id="upgrade-themes-2" class="button" type="submit" value="<?php esc_attr_e( 'Update Themes' ); ?>" name="upgrade" /></p> </form> <?php } /** * Display the update translations form. * * @since 3.7.0 */ function list_translation_updates() { $updates = wp_get_translation_updates(); if ( ! $updates ) { if ( 'en_US' !== get_locale() ) { echo '<h2>' . __( 'Translations' ) . '</h2>'; echo '<p>' . __( 'Your translations are all up to date.' ) . '</p>'; } return; } $form_action = 'update-core.php?action=do-translation-upgrade'; ?> <h2><?php _e( 'Translations' ); ?></h2> <form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-translations" class="upgrade"> <p><?php _e( 'New translations are available.' ); ?></p> <?php wp_nonce_field( 'upgrade-translations' ); ?> <p><input class="button" type="submit" value="<?php esc_attr_e( 'Update Translations' ); ?>" name="upgrade" /></p> </form> <?php } /** * Upgrades WordPress core display. * * @since 2.7.0 * * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. * * @param bool $reinstall */ function do_core_upgrade( $reinstall = false ) { global $wp_filesystem; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; if ( $reinstall ) { $url = 'update-core.php?action=do-core-reinstall'; } else { $url = 'update-core.php?action=do-core-upgrade'; } $url = wp_nonce_url( $url, 'upgrade-core' ); $version = isset( $_POST['version'] ) ? $_POST['version'] : false; $locale = isset( $_POST['locale'] ) ? $_POST['locale'] : 'en_US'; $update = find_core_update( $version, $locale ); if ( ! $update ) { return; } /* * Allow relaxed file ownership writes for User-initiated upgrades when the API specifies * that it's safe to do so. This only happens when there are no new files to create. */ $allow_relaxed_file_ownership = ! $reinstall && isset( $update->new_files ) && ! $update->new_files; ?> <div class="wrap"> <h1><?php _e( 'Update WordPress' ); ?></h1> <?php $credentials = request_filesystem_credentials( $url, '', false, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership ); if ( false === $credentials ) { echo '</div>'; return; } if ( ! WP_Filesystem( $credentials, ABSPATH, $allow_relaxed_file_ownership ) ) { // Failed to connect. Error and request again. request_filesystem_credentials( $url, '', true, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership ); echo '</div>'; return; } if ( $wp_filesystem->errors->has_errors() ) { foreach ( $wp_filesystem->errors->get_error_messages() as $message ) { show_message( $message ); } echo '</div>'; return; } if ( $reinstall ) { $update->response = 'reinstall'; } add_filter( 'update_feedback', 'show_message' ); $upgrader = new Core_Upgrader(); $result = $upgrader->upgrade( $update, array( 'allow_relaxed_file_ownership' => $allow_relaxed_file_ownership, ) ); if ( is_wp_error( $result ) ) { show_message( $result ); if ( 'up_to_date' !== $result->get_error_code() && 'locked' !== $result->get_error_code() ) { show_message( __( 'Installation failed.' ) ); } echo '</div>'; return; } show_message( __( 'WordPress updated successfully.' ) ); show_message( '<span class="hide-if-no-js">' . sprintf( /* translators: 1: WordPress version, 2: URL to About screen. */ __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%2$s">here</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); show_message( '<span class="hide-if-js">' . sprintf( /* translators: 1: WordPress version, 2: URL to About screen. */ __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); ?> </div> <script type="text/javascript"> window.location = '<?php echo esc_url( self_admin_url( 'about.php?updated' ) ); ?>'; </script> <?php } /** * Dismiss a core update. * * @since 2.7.0 */ function do_dismiss_core_update() { $version = isset( $_POST['version'] ) ? $_POST['version'] : false; $locale = isset( $_POST['locale'] ) ? $_POST['locale'] : 'en_US'; $update = find_core_update( $version, $locale ); if ( ! $update ) { return; } dismiss_core_update( $update ); wp_redirect( wp_nonce_url( 'update-core.php?action=upgrade-core', 'upgrade-core' ) ); exit; } /** * Undismiss a core update. * * @since 2.7.0 */ function do_undismiss_core_update() { $version = isset( $_POST['version'] ) ? $_POST['version'] : false; $locale = isset( $_POST['locale'] ) ? $_POST['locale'] : 'en_US'; $update = find_core_update( $version, $locale ); if ( ! $update ) { return; } undismiss_core_update( $version, $locale ); wp_redirect( wp_nonce_url( 'update-core.php?action=upgrade-core', 'upgrade-core' ) ); exit; } $action = isset( $_GET['action'] ) ? $_GET['action'] : 'upgrade-core'; $upgrade_error = false; if ( ( 'do-theme-upgrade' === $action || ( 'do-plugin-upgrade' === $action && ! isset( $_GET['plugins'] ) ) ) && ! isset( $_POST['checked'] ) ) { $upgrade_error = ( 'do-theme-upgrade' === $action ) ? 'themes' : 'plugins'; $action = 'upgrade-core'; } $title = __( 'WordPress Updates' ); $parent_file = 'index.php'; $updates_overview = '<p>' . __( 'On this screen, you can update to the latest version of WordPress, as well as update your themes, plugins, and translations from the WordPress.org repositories.' ) . '</p>'; $updates_overview .= '<p>' . __( 'If an update is available, you᾿ll see a notification appear in the Toolbar and navigation menu.' ) . ' ' . __( 'Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers.' ) . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $updates_overview, ) ); $updates_howto = '<p>' . __( '<strong>WordPress</strong> — Updating your WordPress installation is a simple one-click procedure: just <strong>click on the “Update now” button</strong> when you are notified that a new version is available.' ) . ' ' . __( 'In most cases, WordPress will automatically apply maintenance and security updates in the background for you.' ) . '</p>'; $updates_howto .= '<p>' . __( '<strong>Themes and Plugins</strong> — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then <strong>click on the appropriate “Update” button</strong>. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button.' ) . '</p>'; if ( 'en_US' !== get_locale() ) { $updates_howto .= '<p>' . __( '<strong>Translations</strong> — The files translating WordPress into your language are updated for you whenever any other updates occur. But if these files are out of date, you can <strong>click the “Update Translations”</strong> button.' ) . '</p>'; } get_current_screen()->add_help_tab( array( 'id' => 'how-to-update', 'title' => __( 'How to Update' ), 'content' => $updates_howto, ) ); $help_sidebar_autoupdates = ''; if ( ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) || ( current_user_can( 'update_plugins' ) && wp_is_auto_update_enabled_for_type( 'plugin' ) ) ) { $help_tab_autoupdates = '<p>' . __( 'Auto-updates can be enabled or disabled for WordPress major versions and for each individual theme or plugin. Themes or plugins with auto-updates enabled will display the estimated date of the next auto-update. Auto-updates depends on the WP-Cron task scheduling system.' ) . '</p>'; $help_tab_autoupdates .= '<p>' . __( 'Please note: Third-party themes and plugins, or custom code, may override WordPress scheduling.' ) . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'plugins-themes-auto-updates', 'title' => __( 'Auto-updates' ), 'content' => $help_tab_autoupdates, ) ); $help_sidebar_autoupdates = '<p>' . __( '<a href="https://wordpress.org/documentation/article/plugins-themes-auto-updates/">Documentation on Auto-updates</a>' ) . '</p>'; } $help_sidebar_rollback = ''; if ( current_user_can( 'update_themes' ) || current_user_can( 'update_plugins' ) ) { $rollback_help = '<p>' . __( 'This feature will create a temporary backup of a plugin or theme before it is upgraded. This backup is used to restore the plugin or theme back to its previous state if there is an error during the update process.' ) . '</p>'; $rollback_help .= '<p>' . __( 'On systems with fewer resources, this may lead to server timeouts or resource limits being reached. If you encounter an issue during the update process, please create a support forum topic and reference <strong>Rollback</strong> in the issue title.' ) . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'rollback-plugins-themes', 'title' => __( 'Restore Plugin or Theme' ), 'content' => $rollback_help, ) ); $help_sidebar_rollback = '<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/wordpress/common-errors/">Common Errors</a>' ) . '</p>'; } get_current_screen()->set_help_sidebar( '<p><strong>' . __( 'For more information:' ) . '</strong></p>' . '<p>' . __( '<a href="https://wordpress.org/documentation/article/dashboard-updates-screen/">Documentation on Updating WordPress</a>' ) . '</p>' . $help_sidebar_autoupdates . '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>' . $help_sidebar_rollback ); if ( 'upgrade-core' === $action ) { // Force an update check when requested. $force_check = ! empty( $_GET['force-check'] ); wp_version_check( array(), $force_check ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php _e( 'WordPress Updates' ); ?></h1> <p><?php _e( 'Updates may take several minutes to complete. If there is no feedback after 5 minutes, or if there are errors please refer to the Help section above.' ); ?></p> <?php if ( $upgrade_error ) { if ( 'themes' === $upgrade_error ) { $theme_updates = get_theme_updates(); if ( ! empty( $theme_updates ) ) { wp_admin_notice( __( 'Please select one or more themes to update.' ), array( 'additional_classes' => array( 'error' ), ) ); } } else { $plugin_updates = get_plugin_updates(); if ( ! empty( $plugin_updates ) ) { wp_admin_notice( __( 'Please select one or more plugins to update.' ), array( 'additional_classes' => array( 'error' ), ) ); } } } $last_update_check = false; $current = get_site_transient( 'update_core' ); if ( $current && isset( $current->last_checked ) ) { $last_update_check = $current->last_checked + (int) ( (float) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); } echo '<h2 class="wp-current-version">'; /* translators: Current version of WordPress. */ printf( __( 'Current version: %s' ), esc_html( wp_get_wp_version() ) ); echo '</h2>'; echo '<p class="update-last-checked">'; printf( /* translators: 1: Date, 2: Time. */ __( 'Last checked on %1$s at %2$s.' ), /* translators: Last update date format. See https://www.php.net/manual/datetime.format.php */ date_i18n( __( 'F j, Y' ), $last_update_check ), /* translators: Last update time format. See https://www.php.net/manual/datetime.format.php */ date_i18n( __( 'g:i a T' ), $last_update_check ) ); echo ' <a href="' . esc_url( self_admin_url( 'update-core.php?force-check=1' ) ) . '">' . __( 'Check again.' ) . '</a>'; echo '</p>'; if ( current_user_can( 'update_core' ) ) { core_auto_updates_settings(); core_upgrade_preamble(); } if ( current_user_can( 'update_plugins' ) ) { list_plugin_updates(); } if ( current_user_can( 'update_themes' ) ) { list_theme_updates(); } if ( current_user_can( 'update_languages' ) ) { list_translation_updates(); } /** * Fires after the core, plugin, and theme update tables. * * @since 2.9.0 */ do_action( 'core_upgrade_preamble' ); echo '</div>'; wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( 'totals' => wp_get_update_data(), ) ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'do-core-upgrade' === $action || 'do-core-reinstall' === $action ) { if ( ! current_user_can( 'update_core' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } check_admin_referer( 'upgrade-core' ); // Do the (un)dismiss actions before headers, so that they can redirect. if ( isset( $_POST['dismiss'] ) ) { do_dismiss_core_update(); } elseif ( isset( $_POST['undismiss'] ) ) { do_undismiss_core_update(); } require_once ABSPATH . 'wp-admin/admin-header.php'; if ( 'do-core-reinstall' === $action ) { $reinstall = true; } else { $reinstall = false; } if ( isset( $_POST['upgrade'] ) ) { do_core_upgrade( $reinstall ); } wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( 'totals' => wp_get_update_data(), ) ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'do-plugin-upgrade' === $action ) { if ( ! current_user_can( 'update_plugins' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } check_admin_referer( 'upgrade-core' ); if ( isset( $_GET['plugins'] ) ) { $plugins = explode( ',', $_GET['plugins'] ); } elseif ( isset( $_POST['checked'] ) ) { $plugins = (array) $_POST['checked']; } else { wp_redirect( admin_url( 'update-core.php' ) ); exit; } $url = 'update.php?action=update-selected&plugins=' . urlencode( implode( ',', $plugins ) ); $url = wp_nonce_url( $url, 'bulk-update-plugins' ); // Used in the HTML title tag. $title = __( 'Update Plugins' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php _e( 'Update Plugins' ); ?></h1> <iframe src="<?php echo $url; ?>" style="width: 100%; height: 100%; min-height: 750px;" frameborder="0" title="<?php esc_attr_e( 'Update progress' ); ?>"></iframe> </div> <?php wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( 'totals' => wp_get_update_data(), ) ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'do-theme-upgrade' === $action ) { if ( ! current_user_can( 'update_themes' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } check_admin_referer( 'upgrade-core' ); if ( isset( $_GET['themes'] ) ) { $themes = explode( ',', $_GET['themes'] ); } elseif ( isset( $_POST['checked'] ) ) { $themes = (array) $_POST['checked']; } else { wp_redirect( admin_url( 'update-core.php' ) ); exit; } $url = 'update.php?action=update-selected-themes&themes=' . urlencode( implode( ',', $themes ) ); $url = wp_nonce_url( $url, 'bulk-update-themes' ); // Used in the HTML title tag. $title = __( 'Update Themes' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?> <div class="wrap"> <h1><?php _e( 'Update Themes' ); ?></h1> <iframe src="<?php echo $url; ?>" style="width: 100%; height: 100%; min-height: 750px;" frameborder="0" title="<?php esc_attr_e( 'Update progress' ); ?>"></iframe> </div> <?php wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( 'totals' => wp_get_update_data(), ) ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'do-translation-upgrade' === $action ) { if ( ! current_user_can( 'update_languages' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } check_admin_referer( 'upgrade-translations' ); require_once ABSPATH . 'wp-admin/admin-header.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $url = 'update-core.php?action=do-translation-upgrade'; $nonce = 'upgrade-translations'; $title = __( 'Update Translations' ); $context = WP_LANG_DIR; $upgrader = new Language_Pack_Upgrader( new Language_Pack_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context' ) ) ); $result = $upgrader->bulk_upgrade(); wp_localize_script( 'updates', '_wpUpdatesItemCounts', array( 'totals' => wp_get_update_data(), ) ); require_once ABSPATH . 'wp-admin/admin-footer.php'; } elseif ( 'core-major-auto-updates-settings' === $action ) { if ( ! current_user_can( 'update_core' ) ) { wp_die( __( 'Sorry, you are not allowed to update this site.' ) ); } $redirect_url = self_admin_url( 'update-core.php' ); if ( isset( $_GET['value'] ) ) { check_admin_referer( 'core-major-auto-updates-nonce' ); if ( 'enable' === $_GET['value'] ) { update_site_option( 'auto_update_core_major', 'enabled' ); $redirect_url = add_query_arg( 'core-major-auto-updates-saved', 'enabled', $redirect_url ); } elseif ( 'disable' === $_GET['value'] ) { update_site_option( 'auto_update_core_major', 'disabled' ); $redirect_url = add_query_arg( 'core-major-auto-updates-saved', 'disabled', $redirect_url ); } } wp_redirect( $redirect_url ); exit; } else { /** * Fires for each custom update action on the WordPress Updates screen. * * The dynamic portion of the hook name, `$action`, refers to the * passed update action. The hook fires in lieu of all available * default update actions. * * @since 3.2.0 */ do_action( "update-core-custom_{$action}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } PK {��\7�դ�� �� '