My Private Site - Version 2.4.2

Version Description

  • Reveal BuddyPress /activate/ Activation page when Reveal Registration selected
Download this release

Release Info

Developer dgewirtz
Plugin Icon 128x128 My Private Site
Version 2.4.2
Comparing to
See all releases

Version 2.4.2

includes/admin-settings.php ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Initiated when in the Admin panels.
4
+ Used to create the Settings page for the plugin.
5
+ */
6
+
7
+ // Exit if .php file accessed directly
8
+ if ( !defined( 'ABSPATH' ) ) exit;
9
+
10
+ require_once( jr_ps_path() . 'includes/functions-admin.php' );
11
+
12
+ add_action( 'admin_menu', 'jr_ps_admin_hook' );
13
+ // Runs just before admin_init (below)
14
+
15
+ /**
16
+ * Add Admin Menu item for plugin
17
+ *
18
+ * Plugin needs its own Page in the Settings section of the Admin menu.
19
+ *
20
+ */
21
+ function jr_ps_admin_hook() {
22
+ // Add Settings Page for this Plugin
23
+ global $jr_ps_plugin_data;
24
+ add_users_page( $jr_ps_plugin_data['Name'], 'Private Site', 'add_users', 'jr_ps_settings', 'jr_ps_settings_page' );
25
+ add_options_page( $jr_ps_plugin_data['Name'], 'Private Site', 'manage_options', 'jr_ps_settings', 'jr_ps_settings_page' );
26
+ }
27
+
28
+ /**
29
+ * Settings page for plugin
30
+ *
31
+ * Display and Process Settings page for this plugin.
32
+ *
33
+ */
34
+ function jr_ps_settings_page() {
35
+ global $jr_ps_plugin_data;
36
+ add_thickbox();
37
+ echo '<div class="wrap">';
38
+ screen_icon( 'plugins' );
39
+ echo '<h2>' . $jr_ps_plugin_data['Name'] . '</h2>';
40
+
41
+ // Required because it is only called automatically for Admin Pages in the Settings section
42
+ settings_errors( 'jr_ps_settings' );
43
+
44
+ echo '<h3>Overview</h3><p>';
45
+ $settings = get_option( 'jr_ps_settings' );
46
+ if ( $settings['private_site'] ) {
47
+ echo 'This';
48
+ } else {
49
+ echo 'If you click the <b>Private Site</b> checkbox below, this';
50
+ }
51
+ ?>
52
+ Plugin creates a Private Site,
53
+ by ensuring that site visitors login
54
+ before viewing your web site.
55
+ The only things visible to anyone not logged in, including Search Engines, are:
56
+ <ul>
57
+ <li> &raquo; Your site's WordPress Login page;</li>
58
+ <li> &raquo; Any non-WordPress components of your web site, such as HTML, PHP, ASP or other non-WordPress web page files;</li>
59
+ <li> &raquo; Images and other media and text files, but only when accessed directly by their URL,
60
+ or from a browser's directory view, if available.</li>
61
+ </ul>
62
+ Other means are available to hide most, if not all, of the files mentioned above.
63
+ </p>
64
+ <p>
65
+ To see your site, each visitor will need to be registered as a User on your WordPress site.
66
+ They will also have to enter their Username and Password on the WordPress login screen.
67
+ </p>
68
+ <p>
69
+ You can choose what they see after they login by selecting a <b>Landing Location</b> in the section below.
70
+ </p>
71
+ <form action="options.php" method="POST">
72
+ <?php
73
+ // Plugin Settings are displayed and entered here:
74
+ settings_fields( 'jr_ps_settings' );
75
+ do_settings_sections( 'jr_ps_settings_page' );
76
+ echo '<p><input name="save" type="submit" value="Save Changes" class="button-primary" /></p></form>';
77
+
78
+ /* Turn off Warning about Private Site defaulting to OFF
79
+ once Admin has seen Settings page.
80
+ */
81
+ $internal_settings = get_option( 'jr_ps_internal_settings' );
82
+ if ( isset( $internal_settings['warning_privacy'] ) ) {
83
+ unset( $internal_settings['warning_privacy'] );
84
+ update_option( 'jr_ps_internal_settings', $internal_settings );
85
+ }
86
+ }
87
+
88
+ add_action( 'admin_init', 'jr_ps_admin_init' );
89
+
90
+ /**
91
+ * Register and define the settings
92
+ *
93
+ * Everything to be stored and/or can be set by the user
94
+ *
95
+ */
96
+ function jr_ps_admin_init() {
97
+ register_setting( 'jr_ps_settings', 'jr_ps_settings', 'jr_ps_validate_settings' );
98
+ add_settings_section( 'jr_ps_private_settings_section',
99
+ 'Make Site Private',
100
+ 'jr_ps_private_settings_expl',
101
+ 'jr_ps_settings_page'
102
+ );
103
+ add_settings_field( 'private_site',
104
+ 'Private Site',
105
+ 'jr_ps_echo_private_site',
106
+ 'jr_ps_settings_page',
107
+ 'jr_ps_private_settings_section'
108
+ );
109
+ add_settings_section( 'jr_ps_self_registration_section',
110
+ 'Allow Self-Registration',
111
+ 'jr_ps_self_registration_expl',
112
+ 'jr_ps_settings_page'
113
+ );
114
+ if ( is_multisite() ) {
115
+ /* Clone Network Admin panels: Settings-Network Settings-Registration Settings-Allow new registrations.
116
+ It will be Read-Only except for Super Administrators.
117
+ */
118
+ add_settings_field( 'registrations',
119
+ 'Allow new registrations',
120
+ 'jr_ps_echo_registrations',
121
+ 'jr_ps_settings_page',
122
+ 'jr_ps_self_registration_section'
123
+ );
124
+ } else {
125
+ /* Clone Site Admin panels: Settings-General Settings-Membership
126
+ */
127
+ add_settings_field( 'membership',
128
+ 'Membership',
129
+ 'jr_ps_echo_membership',
130
+ 'jr_ps_settings_page',
131
+ 'jr_ps_self_registration_section'
132
+ );
133
+ }
134
+ add_settings_field( 'reveal_registration',
135
+ 'Reveal User Registration Page',
136
+ 'jr_ps_echo_reveal_registration',
137
+ 'jr_ps_settings_page',
138
+ 'jr_ps_self_registration_section'
139
+ );
140
+ add_settings_section( 'jr_ps_landing_settings_section',
141
+ 'Landing Location',
142
+ 'jr_ps_landing_settings_expl',
143
+ 'jr_ps_settings_page'
144
+ );
145
+ add_settings_field( 'landing',
146
+ 'Where to after Login?',
147
+ 'jr_ps_echo_landing',
148
+ 'jr_ps_settings_page',
149
+ 'jr_ps_landing_settings_section'
150
+ );
151
+ add_settings_field( 'specific_url',
152
+ 'Specific URL',
153
+ 'jr_ps_echo_specific_url',
154
+ 'jr_ps_settings_page',
155
+ 'jr_ps_landing_settings_section'
156
+ );
157
+ add_settings_section( 'jr_ps_exclusions_section',
158
+ 'Visible Exclusions',
159
+ 'jr_ps_exclusions_expl',
160
+ 'jr_ps_settings_page'
161
+ );
162
+ add_settings_field( 'excl_home',
163
+ 'Site Home Always Visible?',
164
+ 'jr_ps_echo_excl_home',
165
+ 'jr_ps_settings_page',
166
+ 'jr_ps_exclusions_section'
167
+ );
168
+ }
169
+
170
+ /**
171
+ * Section text for Section1
172
+ *
173
+ * Display an explanation of this Section
174
+ *
175
+ */
176
+ function jr_ps_private_settings_expl() {
177
+ ?>
178
+ <p>
179
+ You will only have a Private Site if the checkbox just below is checked.
180
+ This allows you to disable the Private Site functionality
181
+ without deactivating the Plugin.
182
+ </p>
183
+ <?php
184
+ }
185
+
186
+ function jr_ps_echo_private_site() {
187
+ $settings = get_option( 'jr_ps_settings' );
188
+ echo '<input type="checkbox" id="private_site" name="jr_ps_settings[private_site]" value="true"'
189
+ . checked( TRUE, $settings['private_site'], FALSE ) . ' />';
190
+ }
191
+
192
+ /**
193
+ * Section text for Section2
194
+ *
195
+ * Display an explanation of this Section
196
+ *
197
+ */
198
+ function jr_ps_self_registration_expl() {
199
+ echo '
200
+ <p>
201
+ If you want Users to be able to Register themselves on a Private Site,
202
+ there are two Settings involved.
203
+ First
204
+ is the WordPress Setting that actually allows new Users to self-register.
205
+ It is shown here as a convenience,
206
+ but:
207
+ <ol>
208
+ <li>This is the same
209
+ ';
210
+ if ( is_multisite() ) {
211
+ echo '<b>Allow New Registrations</b> field displayed on the <b>Network Settings</b> Admin panel;</li>';
212
+ } else {
213
+ echo '<b>Membership</b> field displayed on the <b>General Settings</b> Admin panel;</li>';
214
+ }
215
+ if ( is_multisite() && !is_super_admin() ) {
216
+ echo '<li>The field is greyed out below because only Super Administrators can change this field.';
217
+ } else {
218
+ echo '<li>Clicking the Save Changes button will update its value.';
219
+ }
220
+ echo '
221
+ </li>
222
+ </ol>
223
+ </p>
224
+ <p>
225
+ Second, is a Setting
226
+ (Reveal User Registration Page)
227
+ for this plugin,
228
+ to make the WordPress Registration page visible to Visitors who are not logged on.
229
+ Since Users cannot log on until they are Registered,
230
+ this Setting must be selected (check mark) for Self-Registration.
231
+ </p>
232
+ ';
233
+ }
234
+
235
+ function jr_ps_echo_reveal_registration() {
236
+ $settings = get_option( 'jr_ps_settings' );
237
+ echo '<input type="checkbox" id="reveal_registration" name="jr_ps_settings[reveal_registration]" value="true"'
238
+ . checked( TRUE, $settings['reveal_registration'], FALSE ) . ' />';
239
+ }
240
+
241
+ function jr_ps_echo_registrations() {
242
+ $setting = get_site_option( 'registration' );
243
+ foreach ( array(
244
+ 'none' => 'Registration is disabled.',
245
+ 'user' => 'User accounts may be registered.',
246
+ 'blog' => 'Logged in users may register new sites.',
247
+ 'all' => 'Both sites and user accounts can be registered.'
248
+ ) as $value => $description ) {
249
+ echo '<input type="radio" id="registrations" name="jr_ps_settings[registrations]" '
250
+ . checked( $value, $setting, FALSE )
251
+ . ' value="' . $value . '" '
252
+ . disabled( is_super_admin(), FALSE, FALSE )
253
+ . ' /> ' . $description . '<br />';
254
+ }
255
+ }
256
+
257
+ function jr_ps_echo_membership() {
258
+ echo '<input type="checkbox" id="membership" name="jr_ps_settings[membership]" value="1"'
259
+ . checked( '1', get_option( 'users_can_register' ), FALSE ) . ' /> Anyone can register';
260
+ }
261
+
262
+ /**
263
+ * Section text for Section3
264
+ *
265
+ * Display an explanation of this Section
266
+ *
267
+ */
268
+ function jr_ps_landing_settings_expl() {
269
+ ?>
270
+ <p>
271
+ What do you want your visitors to see immediately after they login?
272
+ For most Private Sites, the default
273
+ <b>Return to same URL</b>
274
+ setting works best,
275
+ as it takes visitors to where they would have been had they already been logged on when they clicked a link or entered a URL,
276
+ just as if they hit the browser's Back button twice and then the Refresh button after logging in.
277
+ </p>
278
+ <p>
279
+ <b>Specific URL</b> only applies when <b>Go to specific URL</b> is selected.
280
+ </p>
281
+ <?php
282
+ }
283
+
284
+ function jr_ps_echo_landing() {
285
+ $settings = get_option( 'jr_ps_settings' );
286
+ $first = TRUE;
287
+ foreach ( array(
288
+ 'return' => 'Return to same URL',
289
+ 'home' => 'Go to Site Home',
290
+ 'admin' => 'Go to WordPress Admin Dashboard',
291
+ 'url' => 'Go to Specific URL'
292
+ ) as $val => $desc ) {
293
+ if ( $first ) {
294
+ $first = FALSE;
295
+ } else {
296
+ echo '<br />';
297
+ }
298
+ echo '<input type="radio" id="landing" name="jr_ps_settings[landing]" '
299
+ . checked( $val, $settings['landing'], FALSE )
300
+ . ' value="' . $val . '" /> ' . $desc;
301
+ }
302
+ }
303
+
304
+ function jr_ps_echo_specific_url() {
305
+ $settings = get_option( 'jr_ps_settings' );
306
+ echo '<input type="text" id="specific_url" name="jr_ps_settings[specific_url]" size="100" maxlength="256" value="';
307
+ echo esc_url( $settings['specific_url'] ) . '" />';
308
+ }
309
+
310
+ function jr_ps_exclusions_expl() {
311
+ ?>
312
+ <p>
313
+ If you want to use your Site Home to interest visitors in registering for your site so they can see the rest of your site,
314
+ you obviously need Site Home visible to everyone.
315
+ </p>
316
+ <?php
317
+ }
318
+
319
+ function jr_ps_echo_excl_home() {
320
+ $settings = get_option( 'jr_ps_settings' );
321
+ echo '<input type="checkbox" id="excl_home" name="jr_ps_settings[excl_home]" value="true"'
322
+ . checked( TRUE, $settings['excl_home'], FALSE ) . ' /> Site Home is visible to everyone?';
323
+ echo '<br />(' . get_home_url() . ')';
324
+ }
325
+
326
+ function jr_ps_validate_settings( $input ) {
327
+ $valid = array();
328
+ $settings = get_option( 'jr_ps_settings' );
329
+
330
+ if ( isset( $input['private_site'] ) && ( $input['private_site'] === 'true' ) ) {
331
+ $valid['private_site'] = TRUE;
332
+ } else {
333
+ $valid['private_site'] = FALSE;
334
+ }
335
+
336
+ if ( isset( $input['reveal_registration'] ) && ( $input['reveal_registration'] === 'true' ) ) {
337
+ $valid['reveal_registration'] = TRUE;
338
+ } else {
339
+ $valid['reveal_registration'] = FALSE;
340
+ }
341
+
342
+ if ( trim( $input['specific_url'] ) ) {
343
+ if ( jr_ps_site_url( $input['specific_url'] ) ) {
344
+ /* If URL is input without http:// or https://, then add it based on the Site URL.
345
+ */
346
+ $parse_url = parse_url( $input['specific_url'] );
347
+ if ( isset( $parse_url['scheme'] ) && in_array( strtolower( $parse_url['scheme'] ), array( 'http', 'https' ) ) ) {
348
+ $url = $input['specific_url'];
349
+ } else {
350
+ $parse_url = parse_url( get_home_url() );
351
+ $url = $parse_url['scheme'] . '://' . $input['specific_url'];
352
+ }
353
+ $valid['specific_url'] = esc_url_raw( $url, array( 'http', 'https' ) );
354
+ } else {
355
+ /* Reset to previous URL value and generate an error message.
356
+ */
357
+ $valid['specific_url'] = $settings['specific_url'];
358
+ add_settings_error(
359
+ 'jr_ps_settings',
360
+ 'jr_ps_urlerror',
361
+ 'Error in URL. It must point to someplace on this WordPress web site<br /><code>'
362
+ . sanitize_text_field( $input['specific_url'] ) . '</code>',
363
+ 'error'
364
+ );
365
+ }
366
+ } else {
367
+ $valid['specific_url'] = '';
368
+ }
369
+
370
+ if ( 'url' === $input['landing'] ) {
371
+ if ( '' === $valid['specific_url'] ) {
372
+ add_settings_error(
373
+ 'jr_ps_settings',
374
+ 'jr_ps_nourlerror',
375
+ 'Error in Landing Location: <i>Go to Specific URL</i> selected but no URL specified. Set to default <i>Return to same URL</i>.',
376
+ 'error'
377
+ );
378
+ $valid['landing'] = 'return';
379
+ } else {
380
+ $valid['landing'] = 'url';
381
+ }
382
+ } else {
383
+ if ( '' !== $valid['specific_url'] ) {
384
+ add_settings_error(
385
+ 'jr_ps_settings',
386
+ 'jr_ps_nourlerror',
387
+ 'Error in Landing Location: URL specified when not valid. URL deleted.',
388
+ 'error'
389
+ );
390
+ $valid['specific_url'] = '';
391
+ }
392
+ $valid['landing'] = $input['landing'];
393
+ }
394
+
395
+
396
+ if ( isset( $input['excl_home'] ) && ( $input['excl_home'] === 'true' ) ) {
397
+ $valid['excl_home'] = TRUE;
398
+ } else {
399
+ $valid['excl_home'] = FALSE;
400
+ }
401
+
402
+ if ( is_multisite() ) {
403
+ if ( is_super_admin() ) {
404
+ if ( isset( $input['registrations'] ) ) {
405
+ update_site_option( 'registration', $input['registrations'] );
406
+ }
407
+ }
408
+ } else {
409
+ if ( isset( $input['membership'] ) ) {
410
+ $mem = $input['membership'];
411
+ } else {
412
+ $mem = '0';
413
+ }
414
+ update_option( 'users_can_register', $mem );
415
+ }
416
+
417
+ $errors = get_settings_errors();
418
+ if ( empty( $errors ) ) {
419
+ add_settings_error(
420
+ 'jr_ps_settings',
421
+ 'jr_ps_saved',
422
+ 'Settings Saved',
423
+ 'updated'
424
+ );
425
+ }
426
+
427
+ return $valid;
428
+ }
429
+
430
+ ?>
includes/all-admin.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Loaded for all Admin panels.
4
+ */
5
+
6
+ // Exit if .php file accessed directly
7
+ if ( !defined( 'ABSPATH' ) ) exit;
8
+
9
+ $internal_settings = get_option( 'jr_ps_internal_settings' );
10
+ if ( isset( $internal_settings['warning_privacy'] ) ) {
11
+ add_action( 'all_admin_notices', 'jr_ps_warning_privacy' );
12
+ /**
13
+ * Warn that Private Site is turned OFF by default
14
+ *
15
+ * Put Warning on top of every Admin page (visible to Admins only)
16
+ * until Admin visits plugin's Settings page.
17
+ *
18
+ */
19
+ function jr_ps_warning_privacy() {
20
+ global $jr_ps_plugin_data;
21
+ if ( current_user_can( 'manage_options' ) ) {
22
+ echo '<div class="updated"><p><b>Private Site is currently turned off on ' . $jr_ps_plugin_data['Name'] . ' plugin <a href="'
23
+ . admin_url( 'options-general.php?page=jr_ps_settings' )
24
+ . '">Settings page</a>.</b></p></div>';
25
+ }
26
+ }
27
+ }
28
+
29
+ ?>
includes/common-functions.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* jonradio Common Functions,
3
+ intended for use in more than one jonradio plugin,
4
+ and others are encouraged to use for their own purposes.
5
+ See details below license.
6
+ */
7
+
8
+ /* Copyright 2013 jonradio (email : info@zatz.com)
9
+
10
+ This program is free software; you can redistribute it and/or modify
11
+ it under the terms of the GNU General Public License as published by
12
+ the Free Software Foundation; either version 2 of the License, or
13
+ (at your option) any later version.
14
+
15
+ This program is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU General Public License for more details.
19
+
20
+ You should have received a copy of the GNU General Public License
21
+ along with this program; if not, write to the Free Software
22
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
+ */
24
+
25
+ /* Concept and Usage
26
+ Each function name is prefixed with jr_v followed by a Version Number (integer) then another underscore
27
+ then the function name.
28
+ Each function is preceded by a check for previous existence,
29
+ so that multiple plugins can use the same function without generating duplicate function definition errors.
30
+ By incorporating the Version Number into the function name, there is no danger of a plugin using the wrong version.
31
+ Standard usage is to have all these functions stored in each plugin's folder as /includes/common-functions.php
32
+ Each function has its own Version Number, which only increases when the function actually changes;
33
+ which means that common-functions.php will normally include many different version numbers in its functions;
34
+ i.e. - the version number applies independently to each function, not to the common-functions.php file as a whole.
35
+ */
36
+
37
+ // Exit if .php file accessed directly
38
+ if ( !defined( 'ABSPATH' ) ) exit;
39
+
40
+ /**
41
+ * Do two URLs point at the same location on a web site?
42
+ *
43
+ * Preps URL, if string
44
+ *
45
+ * @param string/array $url1 URL to compare, a string, or an array in special format created by companion function
46
+ * @param string/array $url2 URL to compare, a string, or an array in special format created by companion function
47
+ * @return bool bool TRUE if both URLs point to the same place (page, etc.); FALSE otherwise
48
+ */
49
+ if ( !function_exists( 'jr_v1_same_url' ) ) {
50
+ function jr_v1_same_url( $url1, $url2 ) {
51
+ if ( !is_array( $url1 ) ) {
52
+ $url1 = jr_v1_prep_url( $url1 );
53
+ }
54
+ if ( !is_array( $url2 ) ) {
55
+ $url2 = jr_v1_prep_url( $url2 );
56
+ }
57
+ return ( $url1 == $url2 );
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Standardize a URL into an array of values that can be accurately compared with another
63
+ *
64
+ * Preps URL, by removing any UTF Left-to-right Mark (LRM), usually found as a suffix,
65
+ * translating the URL to lower-case, removing prefix http[s]//:[www.],
66
+ * any embedded index.php and any trailing slash or #bookmark,
67
+ * and breaks up ?keyword=value queries into array elements.
68
+ *
69
+ * @param string $url URL to create an array from, in special format for accurate comparison
70
+ * @return array array of standardized attributes of the URL
71
+ */
72
+ if ( !function_exists( 'jr_v1_prep_url' ) ) {
73
+ function jr_v1_prep_url( $url ) {
74
+ /* Handle troublesome %E2%80%8E UTF Left-to-right Mark (LRM) suffix first.
75
+ */
76
+ if ( FALSE === stripos( $url, '%E2%80%8E' ) ) {
77
+ if ( FALSE === stripos( rawurlencode( $url ), '%E2%80%8E' ) ) {
78
+ $url_clean = $url;
79
+ } else {
80
+ $url_clean = rawurldecode( str_ireplace( '%E2%80%8E', '', rawurlencode( $url ) ) );
81
+ }
82
+ } else {
83
+ $url_clean = str_ireplace( '%E2%80%8E', '', $url );
84
+ }
85
+ $url_clean = trim( $url_clean );
86
+
87
+ /* parse_url(), especially before php Version 5.4.7,
88
+ has a history of problems when Scheme is not present,
89
+ especially for LocalHost as a Host,
90
+ so add a prefix of http:// if :// is not found
91
+ */
92
+ if ( FALSE === strpos( $url_clean, '://' ) ) {
93
+ $url_clean = "http://$url_clean";
94
+ }
95
+
96
+ $parse_array = parse_url( mb_strtolower( $url_clean ) );
97
+ /* Get rid of URL components that do not matter to us in our comparison of URLs
98
+ */
99
+ foreach ( array( 'scheme', 'port', 'user', 'pass', 'fragment' ) as $component ) {
100
+ unset ( $parse_array[$component] );
101
+ }
102
+ /* Remove www. from host
103
+ */
104
+ if ( 'www.' === substr( $parse_array['host'], 0, 4 ) ) {
105
+ $parse_array['host'] = substr( $parse_array['host'], 4 );
106
+ }
107
+ if ( isset( $parse_array['path'] ) ) {
108
+ /* Remove any index.php occurences in path, since these can be spurious in IIS
109
+ and perhaps other environments.
110
+ */
111
+ $parse_array['path'] = str_replace( 'index.php', '', $parse_array['path'] );
112
+ /* Remove leading and trailing slashes from path
113
+ */
114
+ $parse_array['path'] = trim( $parse_array['path'], "/\\" );
115
+ /* Remove an empty Path component, or it won't array-match
116
+ */
117
+ if ( empty( $parse_array['path'] ) ) {
118
+ unset( $parse_array['path'] );
119
+ }
120
+ }
121
+ /* Take /?keyword=value&keyword=value URL query parameters
122
+ and break them up into array( keyword => value, keyword => value )
123
+ */
124
+ if ( isset( $parse_array['query'] ) ) {
125
+ $parms = explode( '&', $parse_array['query'] );
126
+ $parse_array['query'] = array();
127
+ foreach( $parms as $parm ) {
128
+ $split = explode( '=', $parm );
129
+ $parse_array['query'][$split[0]] = $split[1];
130
+ }
131
+ }
132
+ return $parse_array;
133
+ }
134
+ }
135
+
136
+ ?>
includes/functions-admin.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Is the URL on the current WordPress web site?
5
+ *
6
+ * Checks if URL begins with Site Home URL.
7
+ * Strip http[s]://[www.] and leading and trailing blanks and convert to lower-case before comparing,
8
+ * to allow http, etc. to be omitted on entry
9
+ *
10
+ * @param string $url URL to be checked to be sure it is "on" the current WordPress web site
11
+ * @return bool bool TRUE if URL is on current WordPress web site; FALSE otherwise
12
+ */
13
+ function jr_ps_site_url( $url ) {
14
+ $site_home = jr_ps_urlcompare_prep( get_home_url() );
15
+ return ( substr( jr_ps_urlcompare_prep( $url ), 0, strlen( $site_home ) ) === $site_home );
16
+ }
17
+
18
+ /**
19
+ * Prepare a URL for comparison with another URL
20
+ *
21
+ * Strip [http[s]://][www.] and leading and trailing blanks, and convert to lower-case,
22
+ * to:
23
+ * (1) permit comparison of "synonym" URLs; and
24
+ * (2) allow http to be omitted when inputting a URL
25
+ *
26
+ * @param string $url URL to be prepped for comparison
27
+ * @return string URL prepped for comparison
28
+ */
29
+ function jr_ps_urlcompare_prep( $url ) {
30
+ $prep_url = strtolower( trim( $url ) );
31
+ if ( 'http' === substr( $prep_url, 0, 4 ) ) {
32
+ if ( 's' === substr( $prep_url, 4, 1 ) ) {
33
+ $cursor = 5; // Next character to look at in URL
34
+ } else {
35
+ $cursor = 4;
36
+ }
37
+ if ( '://' === substr( $prep_url, $cursor, 3 ) ) {
38
+ $cursor = $cursor + 3;
39
+ }
40
+ } else {
41
+ $cursor = 0;
42
+ }
43
+ if ( 'www.' === substr( $prep_url, $cursor, 4 ) ) {
44
+ $cursor = $cursor + 4;
45
+ }
46
+ return substr( $prep_url, $cursor );
47
+ }
48
+
49
+ ?>
includes/index.html ADDED
File without changes
includes/installed-plugins.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Initiated when in the Admin panels.
4
+ Used to handle the plugin's entry on the Install Plugins page.
5
+ */
6
+
7
+ /* Support WordPress Version 3.0.x before is_network_admin() existed
8
+ */
9
+ if ( function_exists( 'is_network_admin' ) && is_network_admin() ) {
10
+ // Add Link to the plugin's entry on the Network Admin "Plugins" Page, for easy access
11
+ add_filter( 'network_admin_plugin_action_links_' . jr_ps_plugin_basename(), 'jr_ps_plugin_network_action_links', 10, 1 );
12
+
13
+ /**
14
+ * Creates Settings link right on the Network Plugins Page entry.
15
+ *
16
+ * Helps the user understand where to go immediately upon Activation of the Plugin
17
+ * by creating entries on the Plugins page, right beside Deactivate and Edit.
18
+ *
19
+ * @param array $links Existing links for our Plugin, supplied by WordPress
20
+ * @param string $file Name of Plugin currently being processed
21
+ * @return string $links Updated set of links for our Plugin
22
+ */
23
+ function jr_ps_plugin_network_action_links( $links ) {
24
+ // The "page=" query string value must be equal to the slug
25
+ // of the Settings admin page.
26
+ array_push( $links, '<a href="' . get_bloginfo('wpurl') . '/wp-admin/network/settings.php?page=jr_ps_network_settings' . '">Settings</a>' );
27
+ return $links;
28
+ }
29
+ } else {
30
+ // Add Link to the plugin's entry on the Admin "Plugins" Page, for easy access
31
+ add_filter( 'plugin_action_links_' . jr_ps_plugin_basename(), 'jr_ps_plugin_action_links', 10, 1 );
32
+
33
+ if ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( jr_ps_plugin_basename() ) ) {
34
+ // Add entry for the plugin on the each site's Admin "Plugins" Page, when Network Activated and not normally shown
35
+ add_action( 'pre_current_active_plugins', 'jr_ps_show_plugin' );
36
+
37
+ function jr_ps_show_plugin() {
38
+ global $wp_list_table;
39
+ global $jr_ps_path;
40
+ $wp_list_table->items[jr_ps_plugin_basename()] = get_plugin_data( $jr_ps_path . basename( jr_ps_plugin_basename() ) );
41
+ uasort( $wp_list_table->items, 'jr_ps_sort_plugins' );
42
+ return;
43
+ }
44
+
45
+ function jr_ps_sort_plugins( $a, $b ) {
46
+ return strcasecmp( $a['Name'], $b['Name'] );
47
+ }
48
+
49
+ /**
50
+ * Creates Settings entry right on the Plugins Page entry.
51
+ *
52
+ * Helps the user understand where to go immediately upon Activation of the Plugin
53
+ * by creating entries on the Plugins page, right beside Deactivate and Edit.
54
+ *
55
+ * @param array $links Existing links for our Plugin, supplied by WordPress
56
+ * @param string $file Name of Plugin currently being processed
57
+ * @return string $links Updated set of links for our Plugin
58
+ */
59
+ function jr_ps_plugin_action_links( $links ) {
60
+ /* Delete existing Links and replace with "Network Activated" (not a link)
61
+ and "Settings" as a link to Plugin Settings page.
62
+ The "page=" query string value must be equal to the slug
63
+ of the Settings admin page.
64
+ */
65
+ return array( 'Network Activated',
66
+ '<a href="' . get_bloginfo('wpurl') . '/wp-admin/admin.php?page=jr_ps_settings' . '">Settings</a>'
67
+ );
68
+ }
69
+ } else {
70
+ /**
71
+ * Creates Settings entry right on the Plugins Page entry.
72
+ *
73
+ * Helps the user understand where to go immediately upon Activation of the Plugin
74
+ * by creating entries on the Plugins page, right beside Deactivate and Edit.
75
+ *
76
+ * @param array $links Existing links for our Plugin, supplied by WordPress
77
+ * @param string $file Name of Plugin currently being processed
78
+ * @return string $links Updated set of links for our Plugin
79
+ */
80
+ function jr_ps_plugin_action_links( $links ) {
81
+ /* Add "Settings" to the end of existing Links
82
+ The "page=" query string value must be equal to the slug
83
+ of the Settings admin page.
84
+ */
85
+ array_push( $links, '<a href="' . get_bloginfo('wpurl') . '/wp-admin/admin.php?page=jr_ps_settings' . '">Settings</a>' );
86
+ return $links;
87
+ }
88
+ }
89
+ }
90
+
91
+ ?>
includes/net-settings.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Initiated when in the Network Admin panels.
4
+ Used to create the Settings page for the plugin.
5
+ */
6
+
7
+ add_action( 'network_admin_menu', 'jr_ps_network_admin_hook' );
8
+ // Runs just after admin_init
9
+
10
+ /**
11
+ * Add Network Admin Menu item for plugin
12
+ *
13
+ * Plugin needs its own Page in the Settings section of the Network Admin menu.
14
+ *
15
+ */
16
+ function jr_ps_network_admin_hook() {
17
+ // Add Network Settings Page for this Plugin
18
+ global $jr_ps_plugin_data;
19
+ add_submenu_page( 'settings.php', $jr_ps_plugin_data['Name'], 'Private Sites', 'manage_network_options', 'jr_ps_network_settings', 'jr_ps_network_settings_page' );
20
+ }
21
+
22
+ /**
23
+ * Network Settings page for plugin
24
+ *
25
+ * Display and Process Settings page for this plugin.
26
+ *
27
+ */
28
+ function jr_ps_network_settings_page() {
29
+ global $jr_ps_plugin_data;
30
+ add_thickbox();
31
+ echo '<div class="wrap">';
32
+ screen_icon( 'plugins' );
33
+ echo '<h2>' . $jr_ps_plugin_data['Name'] . '</h2>';
34
+ ?>
35
+ <p>
36
+ This Plugin has been <b>Network Activated</b> in a WordPress Multisite ("Network") installation.
37
+ Since all of this plugin's Settings can be specified separately for each individual WordPress site,
38
+ you will need to go to the Admin pages for each Site,
39
+ and review the plugin's Settings page,
40
+ making changes appropriate for that Site.
41
+ The plugin's Settings page can be found by opening the <b>Settings</b> submenu on the left sidebar of each Admin page for the Site
42
+ and selecting <b>Private Site</b>.
43
+ Or from the <b>Settings</b> link in the plugin's entry on the <b>Installed Plugins</b> page for the Site
44
+ <i>(WordPress does not list Network Activated plugins on each Site's Installed Plugins page,
45
+ but this plugin has added its own entry for your convenience)</i>.
46
+ </p>
47
+ <p>
48
+ Alternatively, you can <b>Network Deactivate</b> this plugin
49
+ and <b>Activate</b> it individually on each Site where you wish to use it.
50
+ </p>
51
+ <p>
52
+ If you would prefer, when this plugin is Network Activated,
53
+ to have a single set of Settings that would apply to all Sites in a WordPress network,
54
+ and/or be able to view and change all of the Settings for all Sites from this one Network Settings page that you are now viewing,
55
+ <a href="http://zatzlabs.com/contact-us/">please contact the Plugin author</a>
56
+ and this will be added to a future version of this plugin if there is enough interest expressed by webmasters such as you.
57
+ </p>
58
+ <?php
59
+ }
60
+
61
+ ?>
includes/public.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Initiated when on the "public" web site,
4
+ i.e. - not an Admin panel.
5
+ */
6
+
7
+ // Exit if .php file accessed directly
8
+ if ( !defined( 'ABSPATH' ) ) exit;
9
+
10
+ add_action( 'login_init', 'jr_ps_login' );
11
+ add_action( 'wp', 'jr_ps_force_login' );
12
+
13
+ /**
14
+ * Login Detection
15
+ *
16
+ * Set a global variable, $jr_ps_is_login, whenever a login occurs
17
+ *
18
+ * @return NULL Nothing is returned
19
+ */
20
+ function jr_ps_login() {
21
+ global $jr_ps_is_login;
22
+ $jr_ps_is_login = TRUE;
23
+ }
24
+
25
+ /**
26
+ * Present a login screen to anyone not logged in
27
+ *
28
+ * Check for already logged in or just logged in.
29
+ * Only called when is_admin() is FALSE
30
+ *
31
+ * @return NULL Nothing is returned
32
+ */
33
+ function jr_ps_force_login() {
34
+ global $jr_ps_is_login;
35
+ if ( is_user_logged_in() || isset( $jr_ps_is_login ) ) {
36
+ return;
37
+ }
38
+
39
+ $settings = get_option( 'jr_ps_settings' );
40
+ /* URL of current page without http://, i.e. - starting with domain
41
+ */
42
+ $current_url = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
43
+ if ( $settings['excl_home'] && jr_v1_same_url( get_home_url(), $current_url ) ) {
44
+ return;
45
+ }
46
+
47
+ if ( $settings['reveal_registration'] ) {
48
+ $buddypress_path = 'buddypress/bp-loader.php';
49
+ $buddypress_active = is_plugin_active( $buddypress_path );
50
+ /* URL of Registration Page varies between Multisite (Network)
51
+ and Single Site WordPress.
52
+ Plus, wp_registration_url function was introduced in
53
+ WordPress Version 3.6.
54
+ */
55
+ if ( is_multisite() ) {
56
+ $reg_url = get_site_url( 0, 'wp-signup.php' );
57
+ $buddypress_active = $buddypress_active || is_plugin_active_for_network( $buddypress_path );
58
+ } else {
59
+ if ( function_exists( 'wp_registration_url' ) ) {
60
+ $reg_url = wp_registration_url();
61
+ } else {
62
+ $reg_url = get_site_url( 0, 'wp-login.php?action=register' );
63
+ }
64
+ }
65
+ if ( jr_v1_same_url( $reg_url, $current_url )
66
+ || ( $buddypress_active
67
+ && ( jr_v1_same_url( get_site_url( 0, 'register' ), $current_url )
68
+ || jr_v1_same_url( get_site_url( 0, 'activate' ),
69
+ parse_url( $current_url, PHP_URL_HOST )
70
+ . parse_url( $current_url, PHP_URL_PATH ) ) ) ) ) {
71
+ /* BuddyPress plugin redirects Registration URL to
72
+ either {current site}/register/ or {main site}/register/
73
+ and has its own Activation at /activate/?key=...
74
+ */
75
+ return;
76
+ }
77
+ }
78
+
79
+ switch ( $settings['landing'] ) {
80
+ case 'return':
81
+ // $_SERVER['HTTPS'] can be off in IIS
82
+ if ( empty( $_SERVER['HTTPS'] ) || ( $_SERVER['HTTPS'] == 'off' ) ) {
83
+ $http = 'http://';
84
+ } else {
85
+ $http = 'https://';
86
+ }
87
+ $after_login_url = $http . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
88
+ break;
89
+ case 'home':
90
+ $after_login_url = get_home_url();
91
+ break;
92
+ case 'admin':
93
+ $after_login_url = get_admin_url();
94
+ break;
95
+ case 'url':
96
+ $after_login_url = trim( $settings['specific_url'] );
97
+ break;
98
+ }
99
+ // Avoid situations where specific URL is requested, but URL is blank
100
+ if ( !empty( $after_login_url ) ) {
101
+ wp_redirect( wp_login_url( $after_login_url ) );
102
+ exit;
103
+ }
104
+ }
105
+
106
+ ?>
index.html ADDED
File without changes
jonradio-private-site.php ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: jonradio Private Site
4
+ Plugin URI: http://zatzlabs.com/plugins/
5
+ Description: Creates a Private Site by allowing only those logged on to view the WordPress web site. Settings select the initial destination after login.
6
+ Version: 2.4.1
7
+ Author: David Gewirtz
8
+ Author URI: http://zatzlabs.com/plugins/
9
+ License: GPLv2
10
+ */
11
+
12
+ /* Copyright 2013 jonradio (email : info@zatz.com)
13
+
14
+ This program is free software; you can redistribute it and/or modify
15
+ it under the terms of the GNU General Public License as published by
16
+ the Free Software Foundation; either version 2 of the License, or
17
+ (at your option) any later version.
18
+
19
+ This program is distributed in the hope that it will be useful,
20
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ GNU General Public License for more details.
23
+
24
+ You should have received a copy of the GNU General Public License
25
+ along with this program; if not, write to the Free Software
26
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27
+ */
28
+
29
+ /* Exit if .php file accessed directly
30
+ */
31
+ if ( !defined( 'ABSPATH' ) ) exit;
32
+
33
+ global $jr_ps_path;
34
+ $jr_ps_path = plugin_dir_path( __FILE__ );
35
+ /**
36
+ * Return Plugin's full directory path with trailing slash
37
+ *
38
+ * Local XAMPP install might return:
39
+ * C:\xampp\htdocs\wpbeta\wp-content\plugins\jonradio-private-site/
40
+ *
41
+ */
42
+ function jr_ps_path() {
43
+ global $jr_ps_path;
44
+ return $jr_ps_path;
45
+ }
46
+
47
+ global $jr_ps_plugin_basename;
48
+ $jr_ps_plugin_basename = plugin_basename( __FILE__ );
49
+ /**
50
+ * Return Plugin's Basename
51
+ *
52
+ * For this plugin, it would be:
53
+ * jonradio-multiple-themes/jonradio-multiple-themes.php
54
+ *
55
+ */
56
+ function jr_ps_plugin_basename() {
57
+ global $jr_ps_plugin_basename;
58
+ return $jr_ps_plugin_basename;
59
+ }
60
+
61
+ if ( !function_exists( 'get_plugin_data' ) ) {
62
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
63
+ }
64
+
65
+ global $jr_ps_plugin_data;
66
+ $jr_ps_plugin_data = get_plugin_data( __FILE__ );
67
+ $jr_ps_plugin_data['slug'] = basename( dirname( __FILE__ ) );
68
+
69
+ /* Detect initial activation or a change in plugin's Version number
70
+
71
+ Sometimes special processing is required when the plugin is updated to a new version of the plugin.
72
+ Also used in place of standard activation and new site creation exits provided by WordPress.
73
+ Once that is complete, update the Version number in the plugin's Network-wide settings.
74
+ */
75
+
76
+ if ( ( FALSE === ( $internal_settings = get_option( 'jr_ps_internal_settings' ) ) )
77
+ || empty( $internal_settings['version'] ) )
78
+ {
79
+ /* Plugin is either:
80
+ - updated from a version so old that Version was not yet stored in the plugin's settings, or
81
+ - first use after install:
82
+ - first time ever installed, or
83
+ - installed previously and properly uninstalled (data deleted)
84
+ */
85
+
86
+ $old_version = '0.1';
87
+ } else {
88
+ $old_version = $internal_settings['version'];
89
+ }
90
+
91
+ $settings = get_option( 'jr_ps_settings' );
92
+ if ( empty( $settings ) ) {
93
+ $settings = array(
94
+ 'private_site' => FALSE,
95
+ 'reveal_registration' => FALSE,
96
+ 'landing' => 'return',
97
+ 'specific_url' => '',
98
+ 'excl_home' => FALSE
99
+ );
100
+ /* Add if Settings don't exist, re-initialize if they were empty.
101
+ */
102
+ update_option( 'jr_ps_settings', $settings );
103
+ /* New install on this site, old version or corrupt settings
104
+ */
105
+ $old_version = $jr_ps_plugin_data['Version'];
106
+ }
107
+
108
+ if ( version_compare( $old_version, $jr_ps_plugin_data['Version'], '!=' ) ) {
109
+ /* Create, if internal settings do not exist; update if they do exist
110
+ */
111
+ $internal_settings['version'] = $jr_ps_plugin_data['Version'];
112
+ if ( version_compare( $old_version, '2', '<' ) ) {
113
+ /* Previous versions turned Privacy on at Activation;
114
+ Now it is a Setting on the Settings page,
115
+ so warn Admin.
116
+ */
117
+ $internal_settings['warning_privacy'] = TRUE;
118
+ }
119
+ update_option( 'jr_ps_internal_settings', $internal_settings );
120
+
121
+ /* Handle all Settings changes made in old plugin versions
122
+ */
123
+ if ( version_compare( $old_version, '2.1', '<' ) ) {
124
+ $settings['reveal_registration'] = FALSE;
125
+ }
126
+ if ( version_compare( $old_version, '2.3', '<' ) ) {
127
+ $settings['excl_home'] = FALSE;
128
+ }
129
+ update_option( 'jr_ps_settings', $settings );
130
+ }
131
+
132
+ require_once( jr_ps_path() . 'includes/common-functions.php' );
133
+ if ( is_admin() ) {
134
+ require_once( jr_ps_path() . 'includes/all-admin.php' );
135
+ /* Support WordPress Version 3.0.x before is_network_admin() existed
136
+ */
137
+ if ( function_exists( 'is_network_admin' ) && is_network_admin() ) {
138
+ // Network Admin pages in Network/Multisite install
139
+ if ( function_exists( 'is_plugin_active_for_network' ) && is_plugin_active_for_network( jr_ps_plugin_basename() ) ) {
140
+ // Network Admin Settings page for Plugin
141
+ require_once( jr_ps_path() . 'includes/net-settings.php' );
142
+ }
143
+ } else {
144
+ // Regular (non-Network) Admin pages
145
+ // Settings page for Plugin
146
+ require_once( jr_ps_path() . 'includes/admin-settings.php' );
147
+ }
148
+ // All changes to all Admin-Installed Plugins pages
149
+ require_once( jr_ps_path() . 'includes/installed-plugins.php' );
150
+ } else {
151
+ /* Public WordPress content, i.e. - not Admin pages
152
+ Do nothing if Private Site setting not set by Administrator
153
+ */
154
+ if ( $settings['private_site'] ) {
155
+ // Private Site code
156
+ require_once( jr_ps_path() . 'includes/public.php' );
157
+ }
158
+ }
159
+
160
+ /* Documentation of Research Done for this Plugin:
161
+ Registration URL (based on a root install in http://localhost):
162
+ WordPress 3.6.1 without jonradio Private Site installed
163
+ Single Site - not a network
164
+ http://localhost/wp-login.php?action=register
165
+ Primary Site of a Network
166
+ http://localhost/wp-signup.php
167
+ Secondary Site of a Network
168
+ http://localhost/wp-signup.php
169
+ This last URL needs a lot of thought because it means that what begins on one site ends up on another.
170
+
171
+ WordPress 3.7-beta without jonradio Private Site installed
172
+ Single Site - not a network
173
+ http://localhost/wp-login.php?action=register
174
+ Primary Site of a Network
175
+ http://localhost/wp-signup.php
176
+ Secondary Site of a Network
177
+ http://localhost/wp-signup.php
178
+
179
+ WordPress 3.0.0 without jonradio Private Site installed
180
+ Single Site - not a network
181
+ http://localhost/wp-login.php?action=register
182
+ Primary Site of a Network
183
+ http://localhost/wp-signup.php
184
+ Secondary Site of a Network
185
+ http://localhost/wp-signup.php
186
+
187
+ wp_registration_url() was not available prior to WordPress Version 3.6.0
188
+
189
+ Self-Registration allows potential Users to Register their own ID and Password without Administrator intervention or knowledge.
190
+ It is controlled by:
191
+ get_option( 'users_can_register' ) - non-Network
192
+ '1' - allows Self-Registration
193
+ '0' - no Self-Registration
194
+ get_site_option( 'registration' ) - Network (Multisite)
195
+ 'user' - allows Self-Registration
196
+ 'none' - no Self-Registration
197
+ 'blog' - Users can create new Sites in a Network
198
+ 'all' - allows Self-Registration and the creation of new Sites in a Network
199
+ */
200
+
201
+ ?>
readme.txt ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === jonradio Private Site ===
2
+ Contributors: dgewirtz
3
+ Donate link: http://zatzlabs.com/plugins/
4
+ Tags: login, visibility, private, security, plugin, pages, page, posts, post
5
+ Requires at least: 3.0
6
+ Tested up to: 3.7.1
7
+ Stable tag: 2.4.2
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Create a Private Site visible only to your registered users.
12
+
13
+ == Description ==
14
+
15
+ Allows the Administrator to restrict a WordPress-based web site to viewing only by registered users who are logged on.
16
+
17
+ Any attempt to view any Page, Post or other part of the site will see anyone not logged on greeted by a WordPress login screen. A Settings Page allows the Administrator to determine where Users will be automatically directed to each time that they login, a "Landing Location".
18
+
19
+ If you allow Self-Registration, where new Users can Register themselves, you will need to select the "Reveal User Registration Page" setting or new Users will be blocked from seeing the WordPress Registration screen (on WordPress Networks, turning off the Reveal User Registration Page setting on the "Main Site" will prevent Registration from all Sites). For convenience, the WordPress Setting that controls Self-Registration of Users has been added to the Plugin's Settings page.
20
+
21
+ Another Setting allows the Private Site feature to be turned off. When the plugin is installed and activated, the Private Site feature is set off by default, to allow the Administrator an opportunity to become familiarized with the plugin's features and to set the desired settings. A warning that the site is not private appears after first activation of the plugin until the Administrator visits the plugin's Settings page.
22
+
23
+ There is also a Setting to make the Home Page visible on a Private Site.
24
+
25
+ If a WordPress Network is defined, the plugin can be activated individually for select sites. Or Network Activated. In either case, each site will have its own Settings page where the Private Site feature can be turned off (default) or on for just the one site, and a Landing Location defined for each site.
26
+
27
+ Login prompts are provided whenever a non-logged in user ("site visitor") attempts to access any URL controlled by WordPress on the web site. This plugin does not control non-WordPress web pages, such as .html and .php files created by hand or by other software products. Or images and other media and text files directly accessed by their URL, or from a browser's directory view, if available.
28
+
29
+ Yes, there are other plugins that hide some or all WordPress content for any site visitor who is not logged on. But when I was searching for a solution for one of the web sites I support, I decided to "write my own" because I knew how it worked and felt comfortable that there would be no way for anyone not logged in to view the site, including Search Engines.
30
+
31
+ == Installation ==
32
+
33
+ This section describes how to install the *jonradio Private Site* plugin and get it working.
34
+
35
+ 1. Use **Add Plugin** within the WordPress Admin panel to download and install this *jonradio Private Site* plugin from the WordPress.org plugin repository (preferred method). Or download and unzip this plugin, then upload the `/jonradio-private-site/` directory to your WordPress web site's `/wp-content/plugins/` directory
36
+ 1. Activate the *jonradio Private Site* plugin through the **Installed Plugins** Admin panel in WordPress. If you have a WordPress Network ("Multisite"), you can either **Network Activate** this plugin, or Activate it individually on the sites where you wish to use it.
37
+ 1. Go to the plugin's Settings page to make the Site **Private**, and set where the user ends up after logging in: the **Landing Location**.
38
+ 1. If you allow Self-Registration, where new Users can set up their own User Name on your WordPress site or Network, you will want to select **Reveal User Registration Page** on the plugin's Settings page.
39
+
40
+ == Changelog ==
41
+
42
+ = 2.4.2 =
43
+ * Reveal BuddyPress /activate/ Activation page when Reveal Registration selected
44
+
45
+ = 2.4.1 =
46
+ * Fix bug in URL matching for Root, where one URL has a trailing slash and the other does not
47
+
48
+ = 2.4 =
49
+ * Handle BuddyPress' redirection of Register URL in Reveal Registration
50
+
51
+ = 2.3 =
52
+ * Add Setting to Reveal Home Page on a Private Site
53
+ * Fixed Problems with wp_registration_url function in WordPress prior to Version 3.6
54
+
55
+ = 2.2 =
56
+ * Add the WordPress User Self-Registration field to the plugin's Settings page
57
+ * Add the Settings page to the User submenu of Admin panel, too
58
+
59
+ = 2.1 =
60
+ * Add a settings checkbox to reveal the Register page for User Self-Registration
61
+
62
+ = 2.0 =
63
+ * Add Settings page, specifying Landing Location and turning Private Site off and on
64
+ * Warning for new default of OFF for Private Site until Settings are first viewed
65
+ * Add Networking Settings information page
66
+ * Track plugin version number in internal settings
67
+ * Replace WordPress Activation/Deactivation hooks with Version checking code from jonradio Multiple Themes
68
+ * Add Plugin entry on individual sites when plugin is Network Activated, and Settings link on all Plugin entries
69
+
70
+ = 1.1 =
71
+ * Change Action Hook to 'wp' from 'wp_head' to avoid Modify Header errors when certain other plugins are present
72
+
73
+ = 1.0 =
74
+ * Add readme.txt and screenshots
75
+ * Add in-line documentation for php functions
76
+
77
+ == Upgrade Notice ==
78
+
79
+ = 2.4 =
80
+ Reveal BuddyPress Activation page
81
+
82
+ = 2.4.1 =
83
+ Home Page better URL matching for Root Home Pages
84
+
85
+ = 2.4 =
86
+ Support BuddyPress
87
+
88
+ = 2.3 =
89
+ New Setting to display Home Page on a Private Site.
90
+
91
+ = 2.2 =
92
+ Display WordPress Self-Registration field on plugin Settings page.
93
+
94
+ = 2.1 =
95
+ Allow User Self-Registration by "revealing" the Register page to those not logged in.
96
+
97
+ = 2.0 =
98
+ Create a Settings page that defines where the user ends up after logging in
99
+
100
+ = 1.1 =
101
+ Should eliminate Modify Header errors due to conflict with other plugins
102
+
103
+ = 1.0 =
104
+ Production version, updated to meet WordPress Repository standards
uninstall.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Ensure call comes from WordPress, not a hacker or anyone else trying direct access.
3
+ if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
4
+ exit ();
5
+
6
+
7
+ /* Remove any tables, options, and such created by this Plugin */
8
+ if ( function_exists('is_multisite') && is_multisite() ) {
9
+ global $wpdb, $site_id;
10
+ $blogs = $wpdb->get_results( "SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = $site_id" );
11
+ foreach ($blogs as $blog_obj) {
12
+ delete_blog_option( $blog_obj->blog_id, 'jr_ps_settings' );
13
+ delete_blog_option( $blog_obj->blog_id, 'jr_ps_internal_settings' );
14
+ }
15
+ } else {
16
+ delete_option( 'jr_ps_settings' );
17
+ delete_option( 'jr_ps_internal_settings' );
18
+ }
19
+ ?>