Make WordPress Core

Ticket #49602: #49602_(3).patch

File #49602_(3).patch, 14.0 KB (added by arena, 4 years ago)

almost done !

  • wp-admin/options-privacy.php

     
    1313        wp_die( __( 'Sorry, you are not allowed to manage privacy on this site.' ) );
    1414}
    1515
    16 $action = isset( $_POST['action'] ) ? $_POST['action'] : '';
     16$title       = __( 'Privacy Settings' );
     17$parent_file = 'options-general.php';
    1718
     19$action      = isset( $_POST['action'] )      ? $_POST['action']      : '';
     20$option_page = isset( $_POST['option_page'] ) ? $_POST['option_page'] : '';
     21
     22global $wpdb;
     23
    1824if ( ! empty( $action ) ) {
    19         check_admin_referer( $action );
     25        check_admin_referer( $option_page . '-options' );
    2026
    21         if ( 'set-privacy-page' === $action ) {
    22                 $privacy_policy_page_id = isset( $_POST['page_for_privacy_policy'] ) ? (int) $_POST['page_for_privacy_policy'] : 0;
     27        $update_page = ( isset( $_POST['page_for_privacy_policy'] ) && ( $_POST['page_for_privacy_policy'] != get_option( 'wp_page_for_privacy_policy' ) ) );
     28        $create_page = isset( $_POST['create_privacy_page'] );
     29
     30        if ( $update_page ) {
     31                $privacy_policy_page_id = (int) $_POST['page_for_privacy_policy'];
    2332                update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
    2433
    2534                $privacy_page_updated_message = __( 'Privacy Policy page updated successfully.' );
    2635
    2736                if ( $privacy_policy_page_id ) {
    28                         /*
    29                         * Don't always link to the menu customizer:
    30                         *
    31                         * - Unpublished pages can't be selected by default.
    32                         * - `WP_Customize_Nav_Menus::__construct()` checks the user's capabilities.
    33                         * - Themes might not "officially" support menus.
    34                         */
     37                /*
     38                * Don't always link to the menu customizer:
     39                *
     40                * - Unpublished pages can't be selected by default.
     41                * - `WP_Customize_Nav_Menus::__construct()` checks the user's capabilities.
     42                * - Themes might not "officially" support menus.
     43                */
    3544                        if (
    3645                                'publish' === get_post_status( $privacy_policy_page_id )
    3746                                && current_user_can( 'edit_theme_options' )
     
    4352                                        esc_url( add_query_arg( 'autofocus[panel]', 'nav_menus', admin_url( 'customize.php' ) ) )
    4453                                );
    4554                        }
    46                 }
     55                }
     56                if ( !$create_page ) add_settings_error( 'page_for_privacy_policy', 'page_for_privacy_policy', $privacy_page_updated_message, 'success' );
     57        }
    4758
    48                 add_settings_error( 'page_for_privacy_policy', 'page_for_privacy_policy', $privacy_page_updated_message, 'success' );
    49         } elseif ( 'create-privacy-page' === $action ) {
     59        if ( $create_page ) {
    5060
    5161                if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
    5262                        require_once ABSPATH . 'wp-admin/includes/class-wp-privacy-policy-content.php';
    5363                }
    5464
     65                $has_pages_with_default_title = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s AND post_status IN ( 'publish', 'draft' ) AND post_title = %s;", 'page', __( 'Privacy Policy' ) ) );
     66
    5567                $privacy_policy_page_content = WP_Privacy_Policy_Content::get_default_content();
    5668                $privacy_policy_page_id      = wp_insert_post(
    5769                        array(
     
    6375                        true
    6476                );
    6577
     78                if ( $has_pages_with_default_title )
     79                {
     80                        wp_update_post(
     81                                array(
     82                                        'ID'            => $privacy_policy_page_id,
     83                                        'post_title'    => sprintf( __( 'Privacy Policy (%1$d)' ), $privacy_policy_page_id ),
     84                                )
     85                        );
     86                }
     87
    6688                if ( is_wp_error( $privacy_policy_page_id ) ) {
    6789                        add_settings_error(
    6890                                'page_for_privacy_policy',
     
    7092                                __( 'Unable to create a Privacy Policy page.' ),
    7193                                'error'
    7294                        );
     95                        $privacy_policy_page_id = false;
    7396                } else {
    7497                        update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
    75 
    76                         wp_redirect( admin_url( 'post.php?post=' . $privacy_policy_page_id . '&action=edit' ) );
    77                         exit;
     98                        add_settings_error( 'page_for_privacy_policy', 'page_for_privacy_policy', __( 'Privacy Policy page created successfully.' ), 'success' );
    7899                }
    79100        }
    80101}
    81102
    82103// If a Privacy Policy page ID is available, make sure the page actually exists. If not, display an error.
    83 $privacy_policy_page_exists = false;
    84 $privacy_policy_page_id     = (int) get_option( 'wp_page_for_privacy_policy' );
    85104
     105$privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
     106
     107$tools_privacy_edit = '';
     108
    86109if ( ! empty( $privacy_policy_page_id ) ) {
    87110
    88111        $privacy_policy_page = get_post( $privacy_policy_page_id );
     
    94117                        __( 'The currently selected Privacy Policy page does not exist. Please create or select a new page.' ),
    95118                        'error'
    96119                );
    97         } else {
    98                 if ( 'trash' === $privacy_policy_page->post_status ) {
     120        } elseif ( 'trash' === $privacy_policy_page->post_status ) {
    99121                        add_settings_error(
    100122                                'page_for_privacy_policy',
    101123                                'page_for_privacy_policy',
     
    106128                                ),
    107129                                'error'
    108130                        );
    109                 } else {
    110                         $privacy_policy_page_exists = true;
    111                 }
    112         }
    113 }
     131        } else {        /* $privacy_policy_page_exists = true; */
    114132
    115 $title       = __( 'Privacy Settings' );
    116 $parent_file = 'options-general.php';
    117 
    118 require_once ABSPATH . 'wp-admin/admin-header.php';
    119 
    120 ?>
    121 <div class="wrap">
    122         <h1><?php echo $title; ?></h1>
    123         <h2><?php _e( 'Privacy Policy Page' ); ?></h2>
    124         <p>
    125                 <?php _e( 'As a website owner, you may need to follow national or international privacy laws. For example, you may need to create and display a Privacy Policy.' ); ?>
    126                 <?php _e( 'If you already have a Privacy Policy page, please select it below. If not, please create one.' ); ?>
    127         </p>
    128         <p>
    129                 <?php _e( 'The new page will include help and suggestions for your Privacy Policy.' ); ?>
    130                 <?php _e( 'However, it is your responsibility to use those resources correctly, to provide the information that your Privacy Policy requires, and to keep that information current and accurate.' ); ?>
    131         </p>
    132         <p>
    133                 <?php _e( 'After your Privacy Policy page is set, we suggest that you edit it.' ); ?>
    134                 <?php _e( 'We would also suggest reviewing your Privacy Policy from time to time, especially after installing or updating any themes or plugins. There may be changes or new suggested information for you to consider adding to your policy.' ); ?>
    135         </p>
    136         <?php
    137 
    138         if ( $privacy_policy_page_exists ) {
    139133                $edit_href = add_query_arg(
    140134                        array(
    141135                                'post'   => $privacy_policy_page_id,
     
    145139                );
    146140
    147141                $view_href = get_permalink( $privacy_policy_page_id );
    148                 ?>
    149                 <p class="tools-privacy-edit"><strong>
    150                         <?php
    151                         if ( 'publish' === get_post_status( $privacy_policy_page_id ) ) {
    152                                 printf(
    153                                         /* translators: 1: URL to edit Privacy Policy page, 2: URL to view Privacy Policy page. */
    154                                         __( '<a href="%1$s">Edit</a> or <a href="%2$s">view</a> your Privacy Policy page content.' ),
     142
     143                if ( $create_page ) {
     144                        $privacy_page_create_message = sprintf(
     145                                        /* translators: 1: URL to edit Privacy Policy page, 2: URL to preview Privacy Policy page, 3: URL to Customizer -> Menus */
     146                                        __( 'You can already <a href="%1$s">edit</a> or <a href="%2$s">preview</a> your Privacy Policy page content. Remember to <a href="%3$s">update your menus</a>!' ),
    155147                                        esc_url( $edit_href ),
     148                                        esc_url( $view_href ),
     149                                        esc_url( add_query_arg( 'autofocus[panel]', 'nav_menus', admin_url( 'customize.php' ) ) )
     150                        );
     151                        add_settings_error( 'page_for_privacy_policy', 'page_for_privacy_policy', $privacy_page_create_message, 'success' );
     152
     153                } else {
     154                        $tools_privacy_edit = ( 'publish' === get_post_status( $privacy_policy_page_id ) )
     155                        ? sprintf(
     156                                /* translators: 1: URL to edit Privacy Policy page, 2: URL to view Privacy Policy page. */
     157                                __( 'You can already <a href="%1$s">edit</a> or <a href="%2$s">view</a> your Privacy Policy page content.' ),
     158                                esc_url( $edit_href ),
    156159                                        esc_url( $view_href )
    157                                 );
    158                         } else {
    159                                 printf(
    160                                         /* translators: 1: URL to edit Privacy Policy page, 2: URL to preview Privacy Policy page. */
    161                                         __( '<a href="%1$s">Edit</a> or <a href="%2$s">preview</a> your Privacy Policy page content.' ),
    162                                         esc_url( $edit_href ),
    163                                         esc_url( $view_href )
    164                                 );
    165                         }
    166                         ?>
    167                 </strong></p>
    168                 <?php
     160                        )
     161                        : sprintf(
     162                                /* translators: 1: URL to edit Privacy Policy page, 2: URL to preview Privacy Policy page. */
     163                                __( 'You can already <a href="%1$s">edit</a> or <a href="%2$s">preview</a> your Privacy Policy page content.' ),
     164                                esc_url( $edit_href ),
     165                                esc_url( $view_href )
     166                        );
     167                }
    169168        }
    170         ?>
    171         <p>
    172                 <?php
    173                 printf(
    174                         /* translators: 1: Privacy Policy guide URL, 2: Additional link attributes, 3: Accessibility text. */
    175                         __( 'Need help putting together your new Privacy Policy page? <a href="%1$s" %2$s>Check out our guide%3$s</a> for recommendations on what content to include, along with policies suggested by your plugins and theme.' ),
    176                         esc_url( admin_url( 'privacy-policy-guide.php' ) ),
    177                         '',
    178                         ''
    179                 );
    180                 ?>
    181         </p>
     169}
    182170
    183         <hr>
    184         <table class="form-table tools-privacy-policy-page" role="presentation">
    185                 <tr>
    186                         <th scope="row">
    187                                 <label for="page_for_privacy_policy">
    188                                         <?php
    189                                         if ( $privacy_policy_page_exists ) {
    190                                                 _e( 'Change your Privacy Policy page' );
    191                                         } else {
    192                                                 _e( 'Select a Privacy Policy page' );
    193                                         }
    194                                         ?>
    195                                 </label>
    196                         </th>
    197                         <td>
    198                                 <?php
    199                                 $has_pages = (bool) get_posts(
    200                                         array(
    201                                                 'post_type'      => 'page',
    202                                                 'posts_per_page' => 1,
    203                                                 'post_status'    => array(
    204                                                         'publish',
    205                                                         'draft',
    206                                                 ),
    207                                         )
    208                                 );
     171get_current_screen()->add_help_tab(
     172        array(
     173                'id'      => 'overview',
     174                'title'   => __( 'Overview' ),
     175                'content' => '<p>' . __( 'This screen contains the settings that help you to set up or affect your privacy policy.' ) . '</p>' .
     176                        '<p>' . __( 'As a website owner, you may need to follow national or international privacy laws. For example, you may need to create and display a Privacy Policy.' ) . '</p>',
     177        )
     178);
    209179
    210                                 if ( $has_pages ) :
    211                                         ?>
    212                                         <form method="post" action="">
    213                                                 <input type="hidden" name="action" value="set-privacy-page" />
    214                                                 <?php
    215                                                 wp_dropdown_pages(
    216                                                         array(
    217                                                                 'name'              => 'page_for_privacy_policy',
    218                                                                 'show_option_none'  => __( '&mdash; Select &mdash;' ),
    219                                                                 'option_none_value' => '0',
    220                                                                 'selected'          => $privacy_policy_page_id,
    221                                                                 'post_status'       => array( 'draft', 'publish' ),
    222                                                         )
    223                                                 );
     180get_current_screen()->add_help_tab(
     181        array(
     182                'id'      => 'privacy-policy-page',
     183                'title'   => __( 'Policy Page' ),
     184                'content' => '<p>' . __( 'If you already have a Privacy Policy page, please select it. If not, please create one.' ) . '</p>' .
     185                        '<p>' . __( 'The new page will include help and suggestions for your Privacy Policy.' ) . '</p>' .
     186                        '<p>' . __( 'However, it is your responsibility to use those resources correctly, to provide the information that your Privacy Policy requires, and to keep that information current and accurate.' ) . '</p>' .
     187                        '<p>' . __( 'After your Privacy Policy page is set, we suggest that you edit it.' ) . '</p>' .
     188                        '<p>' . __( 'We would also suggest reviewing your Privacy Policy from time to time, especially after installing or updating any themes or plugins. There may be changes or new suggested information for you to consider adding to your policy.' ) . '</p>',
     189        )
     190);
    224191
    225                                                 wp_nonce_field( 'set-privacy-page' );
     192get_current_screen()->set_help_sidebar(
     193        '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
     194        /* translators: 1: Privacy Policy guide URL */
     195        '<p>' . sprintf( __( '<a href="%1$s">Privacy Policy guide</a>' ), esc_url( admin_url( 'privacy-policy-guide.php' ) ) ) . '</p>' .
     196        '<p>' . __( '<a href="https://wordpress.org/support/article/settings-privacy-screen/">Documentation on Privacy Settings</a>' ) . '</p>' .
     197        '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
     198);
    226199
    227                                                 submit_button( __( 'Use This Page' ), 'primary', 'submit', false, array( 'id' => 'set-page' ) );
    228                                                 ?>
    229                                         </form>
    230                                 <?php endif; ?>
     200require_once ABSPATH . 'wp-admin/admin-header.php';
    231201
    232                                 <form class="wp-create-privacy-page" method="post" action="">
    233                                         <input type="hidden" name="action" value="create-privacy-page" />
    234                                         <span>
    235                                                 <?php
    236                                                 if ( $has_pages ) {
    237                                                         _e( 'Or:' );
    238                                                 } else {
    239                                                         _e( 'There are no pages.' );
    240                                                 }
    241                                                 ?>
    242                                         </span>
    243                                         <?php
    244                                         wp_nonce_field( 'create-privacy-page' );
     202?>
     203<style>span#create_privacy_page {margin-left: 6px;}</style>
     204<div class="wrap">
     205<h1><?php echo $title; ?></h1>
    245206
    246                                         submit_button( __( 'Create New Page' ), 'primary', 'submit', false, array( 'id' => 'create-page' ) );
    247                                         ?>
    248                                 </form>
    249                         </td>
    250                 </tr>
    251         </table>
     207<form method="post" action="">
     208<?php settings_fields( 'privacy' ); ?>
     209
     210<h2><?php _e( 'Policy Page' ); ?></h2>
     211<p class="tools-privacy-edit"><?php echo $tools_privacy_edit; ?></p>
     212
     213<table class="form-table tools-privacy-policy-page" role="presentation">
     214<tr>
     215<th scope="row"><label for="page_for_privacy_policy"><?php _e( 'Your Privacy Policy page' ); ?></label></th>
     216<td>
     217<?php
     218
     219$has_pages = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s AND post_status IN ( 'publish', 'draft' );", 'page' ) );
     220
     221if ( $has_pages ) {
     222        wp_dropdown_pages(
     223                array(
     224                        'name'              => 'page_for_privacy_policy',
     225                        'show_option_none'  => __( '&mdash; Select &mdash;' ),
     226                        'option_none_value' => '0',
     227                        'selected'          => $privacy_policy_page_id,
     228                        'post_status'       => array( 'draft', 'publish' ),
     229                )
     230        );
     231        echo '<br /><br />';
     232        // Allegedly, the admin has already been through the privacy page creation process !       
     233 
     234        $create_privacy_page_text  = __( 'Or create a new one : ' );
     235        $create_privacy_page_text2 = '';
     236}
     237else
     238{
     239        $create_privacy_page_text  = __( 'Create page : ' );
     240        $create_privacy_page_text2 = __( 'Once saved, you will have a link to modify (and publish) your new privacy page' );
     241}
     242?>
     243<span id="create_privacy_page">
     244<?php echo $create_privacy_page_text; ?>
     245<input name="create_privacy_page" type="checkbox" value="on" />
     246</span>
     247<?php if ( !empty( $create_privacy_page_text2 ) ) echo '<br />' . $create_privacy_page_text2; ?>
     248</td>
     249</tr>
     250
     251<?php do_settings_fields( 'privacy', 'default' ); ?>
     252</table>
     253
     254<?php do_settings_sections( 'privacy' ); ?>
     255
     256<?php submit_button(); ?>
     257
     258</form>
     259
    252260</div>
    253261<?php
    254262