author | ymh <ymh.work@gmail.com> |
Fri, 05 Sep 2025 18:40:08 +0200 | |
changeset 21 | 48c4eec2b7e6 |
parent 18 | be944660c56a |
permissions | -rw-r--r-- |
0 | 1 |
<?php |
2 |
/** |
|
3 |
* Confirms that the activation key that is sent in an email after a user signs |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
4 |
* up for a new site matches the key for that user and then displays confirmation. |
0 | 5 |
* |
6 |
* @package WordPress |
|
7 |
*/ |
|
8 |
||
9 |
define( 'WP_INSTALLING', true ); |
|
10 |
||
11 |
/** Sets up the WordPress Environment. */ |
|
16 | 12 |
require __DIR__ . '/wp-load.php'; |
0 | 13 |
|
16 | 14 |
require __DIR__ . '/wp-blog-header.php'; |
0 | 15 |
|
9 | 16 |
if ( ! is_multisite() ) { |
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
17 |
wp_redirect( wp_registration_url() ); |
0 | 18 |
die(); |
19 |
} |
|
20 |
||
9 | 21 |
$valid_error_codes = array( 'already_active', 'blog_taken' ); |
22 |
||
23 |
list( $activate_path ) = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) ); |
|
24 |
$activate_cookie = 'wp-activate-' . COOKIEHASH; |
|
25 |
||
26 |
$key = ''; |
|
27 |
$result = null; |
|
28 |
||
29 |
if ( isset( $_GET['key'] ) && isset( $_POST['key'] ) && $_GET['key'] !== $_POST['key'] ) { |
|
30 |
wp_die( __( 'A key value mismatch has been detected. Please follow the link provided in your activation email.' ), __( 'An error occurred during the activation' ), 400 ); |
|
31 |
} elseif ( ! empty( $_GET['key'] ) ) { |
|
32 |
$key = $_GET['key']; |
|
33 |
} elseif ( ! empty( $_POST['key'] ) ) { |
|
34 |
$key = $_POST['key']; |
|
35 |
} |
|
36 |
||
37 |
if ( $key ) { |
|
38 |
$redirect_url = remove_query_arg( 'key' ); |
|
39 |
||
16 | 40 |
if ( remove_query_arg( false ) !== $redirect_url ) { |
9 | 41 |
setcookie( $activate_cookie, $key, 0, $activate_path, COOKIE_DOMAIN, is_ssl(), true ); |
42 |
wp_safe_redirect( $redirect_url ); |
|
43 |
exit; |
|
44 |
} else { |
|
45 |
$result = wpmu_activate_signup( $key ); |
|
46 |
} |
|
47 |
} |
|
48 |
||
16 | 49 |
if ( null === $result && isset( $_COOKIE[ $activate_cookie ] ) ) { |
9 | 50 |
$key = $_COOKIE[ $activate_cookie ]; |
51 |
$result = wpmu_activate_signup( $key ); |
|
52 |
setcookie( $activate_cookie, ' ', time() - YEAR_IN_SECONDS, $activate_path, COOKIE_DOMAIN, is_ssl(), true ); |
|
53 |
} |
|
54 |
||
16 | 55 |
if ( null === $result || ( is_wp_error( $result ) && 'invalid_key' === $result->get_error_code() ) ) { |
9 | 56 |
status_header( 404 ); |
57 |
} elseif ( is_wp_error( $result ) ) { |
|
58 |
$error_code = $result->get_error_code(); |
|
59 |
||
16 | 60 |
if ( ! in_array( $error_code, $valid_error_codes, true ) ) { |
9 | 61 |
status_header( 400 ); |
62 |
} |
|
63 |
} |
|
64 |
||
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
65 |
nocache_headers(); |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
66 |
|
9 | 67 |
if ( is_object( $wp_object_cache ) ) { |
0 | 68 |
$wp_object_cache->cache_enabled = false; |
9 | 69 |
} |
0 | 70 |
|
16 | 71 |
// Fix for page title. |
0 | 72 |
$wp_query->is_404 = false; |
73 |
||
74 |
/** |
|
75 |
* Fires before the Site Activation page is loaded. |
|
76 |
* |
|
5 | 77 |
* @since 3.0.0 |
0 | 78 |
*/ |
79 |
do_action( 'activate_header' ); |
|
80 |
||
81 |
/** |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
82 |
* Adds an action hook specific to this page. |
0 | 83 |
* |
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
84 |
* Fires on {@see 'wp_head'}. |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
85 |
* |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
86 |
* @since MU (3.0.0) |
0 | 87 |
*/ |
88 |
function do_activate_header() { |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
89 |
/** |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
90 |
* Fires within the `<head>` section of the Site Activation page. |
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
91 |
* |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
92 |
* Fires on the {@see 'wp_head'} action. |
9 | 93 |
* |
94 |
* @since 3.0.0 |
|
95 |
*/ |
|
96 |
do_action( 'activate_wp_head' ); |
|
0 | 97 |
} |
98 |
add_action( 'wp_head', 'do_activate_header' ); |
|
99 |
||
100 |
/** |
|
101 |
* Loads styles specific to this page. |
|
102 |
* |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
103 |
* @since MU (3.0.0) |
0 | 104 |
*/ |
105 |
function wpmu_activate_stylesheet() { |
|
106 |
?> |
|
107 |
<style type="text/css"> |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
108 |
.wp-activate-container { width: 90%; margin: 0 auto; } |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
109 |
.wp-activate-container form { margin-top: 2em; } |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
110 |
#submit, #key { width: 100%; font-size: 24px; box-sizing: border-box; } |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
111 |
#language { margin-top: 0.5em; } |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
112 |
.wp-activate-container .error { background: #f66; color: #333; } |
9 | 113 |
span.h3 { padding: 0 8px; font-size: 1.3em; font-weight: 600; } |
0 | 114 |
</style> |
115 |
<?php |
|
116 |
} |
|
117 |
add_action( 'wp_head', 'wpmu_activate_stylesheet' ); |
|
18 | 118 |
add_action( 'wp_head', 'wp_strict_cross_origin_referrer' ); |
119 |
add_filter( 'wp_robots', 'wp_robots_sensitive_page' ); |
|
0 | 120 |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
121 |
get_header( 'wp-activate' ); |
16 | 122 |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
123 |
$blog_details = get_site(); |
0 | 124 |
?> |
125 |
||
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
126 |
<div id="signup-content" class="widecolumn"> |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
127 |
<div class="wp-activate-container"> |
9 | 128 |
<?php if ( ! $key ) { ?> |
0 | 129 |
|
9 | 130 |
<h2><?php _e( 'Activation Key Required' ); ?></h2> |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
131 |
<form name="activateform" id="activateform" method="post" action="<?php echo esc_url( network_site_url( $blog_details->path . 'wp-activate.php' ) ); ?>"> |
0 | 132 |
<p> |
9 | 133 |
<label for="key"><?php _e( 'Activation Key:' ); ?></label> |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
134 |
<br /><input type="text" name="key" id="key" value="" size="50" autofocus="autofocus" /> |
0 | 135 |
</p> |
136 |
<p class="submit"> |
|
9 | 137 |
<input id="submit" type="submit" name="Submit" class="submit" value="<?php esc_attr_e( 'Activate' ); ?>" /> |
0 | 138 |
</p> |
139 |
</form> |
|
140 |
||
9 | 141 |
<?php |
142 |
} else { |
|
16 | 143 |
if ( is_wp_error( $result ) && in_array( $result->get_error_code(), $valid_error_codes, true ) ) { |
9 | 144 |
$signup = $result->get_error_data(); |
145 |
?> |
|
146 |
<h2><?php _e( 'Your account is now active!' ); ?></h2> |
|
147 |
<?php |
|
148 |
echo '<p class="lead-in">'; |
|
16 | 149 |
if ( '' === $signup->domain . $signup->path ) { |
9 | 150 |
printf( |
16 | 151 |
/* translators: 1: Login URL, 2: Username, 3: User email address, 4: Lost password URL. */ |
9 | 152 |
__( 'Your account has been activated. You may now <a href="%1$s">log in</a> to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.' ), |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
153 |
esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
154 |
esc_html( $signup->user_login ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
155 |
esc_html( $signup->user_email ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
156 |
esc_url( wp_lostpassword_url() ) |
9 | 157 |
); |
0 | 158 |
} else { |
9 | 159 |
printf( |
16 | 160 |
/* translators: 1: Site URL, 2: Username, 3: User email address, 4: Lost password URL. */ |
9 | 161 |
__( 'Your site at %1$s is active. You may now log in to your site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.' ), |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
162 |
sprintf( '<a href="http://%1$s">%1$s</a>', esc_url( $signup->domain . $blog_details->path ) ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
163 |
esc_html( $signup->user_login ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
164 |
esc_html( $signup->user_email ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
165 |
esc_url( wp_lostpassword_url() ) |
9 | 166 |
); |
167 |
} |
|
168 |
echo '</p>'; |
|
16 | 169 |
} elseif ( null === $result || is_wp_error( $result ) ) { |
9 | 170 |
?> |
171 |
<h2><?php _e( 'An error occurred during the activation' ); ?></h2> |
|
172 |
<?php if ( is_wp_error( $result ) ) : ?> |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
173 |
<p><?php echo esc_html( $result->get_error_message() ); ?></p> |
9 | 174 |
<?php endif; ?> |
175 |
<?php |
|
0 | 176 |
} else { |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
177 |
$url = isset( $result['blog_id'] ) ? esc_url( get_home_url( (int) $result['blog_id'] ) ) : ''; |
5 | 178 |
$user = get_userdata( (int) $result['user_id'] ); |
0 | 179 |
?> |
9 | 180 |
<h2><?php _e( 'Your account is now active!' ); ?></h2> |
0 | 181 |
|
182 |
<div id="signup-welcome"> |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
183 |
<p><span class="h3"><?php _e( 'Username:' ); ?></span> <?php echo esc_html( $user->user_login ); ?></p> |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
184 |
<p><span class="h3"><?php _e( 'Password:' ); ?></span> <?php echo esc_html( $result['password'] ); ?></p> |
0 | 185 |
</div> |
186 |
||
9 | 187 |
<?php |
16 | 188 |
if ( $url && network_home_url( '', 'http' ) !== $url ) : |
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
189 |
switch_to_blog( (int) $result['blog_id'] ); |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
190 |
$login_url = wp_login_url(); |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
191 |
restore_current_blog(); |
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
192 |
?> |
9 | 193 |
<p class="view"> |
194 |
<?php |
|
16 | 195 |
/* translators: 1: Site URL, 2: Login URL. */ |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
196 |
printf( __( 'Your account is now activated. <a href="%1$s">View your site</a> or <a href="%2$s">Log in</a>' ), esc_url( $url ), esc_url( $login_url ) ); |
9 | 197 |
?> |
198 |
</p> |
|
199 |
<?php else : ?> |
|
200 |
<p class="view"> |
|
201 |
<?php |
|
16 | 202 |
printf( |
203 |
/* translators: 1: Login URL, 2: Network home URL. */ |
|
204 |
__( 'Your account is now activated. <a href="%1$s">Log in</a> or go back to the <a href="%2$s">homepage</a>.' ), |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
205 |
esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
18
diff
changeset
|
206 |
esc_url( network_home_url( $blog_details->path ) ) |
16 | 207 |
); |
9 | 208 |
?> |
209 |
</p> |
|
210 |
<?php |
|
211 |
endif; |
|
0 | 212 |
} |
213 |
} |
|
214 |
?> |
|
7
cf61fcea0001
resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents:
5
diff
changeset
|
215 |
</div> |
0 | 216 |
</div> |
9 | 217 |
<?php |
218 |
get_footer( 'wp-activate' ); |