| 1 |
var animation_speed = 300; |
| 2 |
var shake_speed = 600; |
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
// Switch between option tabs. |
| 7 |
function choose_tab( list_name, delay ) { |
| 8 |
var $ = jQuery; |
| 9 |
|
| 10 |
// default delay is 0 |
| 11 |
delay = typeof delay !== 'undefined' ? delay : 0; |
| 12 |
|
| 13 |
// default to the access list tab |
| 14 |
list_name = typeof list_name !== 'undefined' ? list_name : 'access_lists'; |
| 15 |
|
| 16 |
// Hide all tab content, then show selected tab content |
| 17 |
$( 'div.section_info, div.section_info + table' ).hide(); |
| 18 |
$( '#section_info_' + list_name + ', #section_info_' + list_name + ' + table' ).show(); |
| 19 |
|
| 20 |
// Set active tab |
| 21 |
$( '.nav-tab-wrapper a' ).removeClass( 'nav-tab-active' ); |
| 22 |
$( 'a.nav-tab-' + list_name ).addClass( 'nav-tab-active' ); |
| 23 |
|
| 24 |
// Hide site options if they are overridden by a multisite setting. |
| 25 |
setTimeout( hide_multisite_overridden_options, delay ); |
| 26 |
|
| 27 |
// Hide Save Changes button if we're on the access lists page (changing |
| 28 |
// access lists saves automatically via AJAX). |
| 29 |
$( 'body:not(.network-admin) #submit' ).toggle( list_name !== 'access_lists' ); |
| 30 |
|
| 31 |
// Save user's active tab to sessionStorage (so we can restore it on reload). |
| 32 |
// Note: session storage persists until the browser tab is closed. |
| 33 |
sessionStorage.setItem( 'tab', list_name ); |
| 34 |
} |
| 35 |
|
| 36 |
// Update user's usermeta field. |
| 37 |
function auth_update_usermeta( caller ) { |
| 38 |
var $ = jQuery, |
| 39 |
$caller = $( caller ), |
| 40 |
$usermeta = $caller.parent().children( '.auth-usermeta' ), |
| 41 |
email = $caller.siblings( '.auth-email' ).val(), |
| 42 |
usermeta = $usermeta.val(), |
| 43 |
nonce_save_auth_settings = $( '#nonce_save_auth_settings' ).val(); |
| 44 |
|
| 45 |
// Remove reference to caller if it's the usermeta field itself (not a button triggering the save). |
| 46 |
if ( $caller.hasClass( 'auth-usermeta' ) ) { |
| 47 |
$caller = $(); |
| 48 |
} |
| 49 |
|
| 50 |
// Disable inputs, show spinner. |
| 51 |
$caller.attr( 'disabled', 'disabled' ); |
| 52 |
$usermeta.attr( 'disabled', 'disabled' ); |
| 53 |
$usermeta.after( '<span class="spinner is-active"></span>' ); |
| 54 |
$( 'html' ).addClass( 'busy' ); |
| 55 |
|
| 56 |
// Call ajax save function. |
| 57 |
$.post( ajaxurl, { |
| 58 |
'action': 'update_auth_usermeta', |
| 59 |
'email': email, |
| 60 |
'usermeta': usermeta, |
| 61 |
'nonce_save_auth_settings': nonce_save_auth_settings, |
| 62 |
}, function ( response ) { |
| 63 |
var succeeded = response === 'success'; |
| 64 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 65 |
var spinner_wait = succeeded ? 500 : 2000; |
| 66 |
|
| 67 |
// Enable inputs, remove spinner. |
| 68 |
$caller.removeAttr( 'disabled' ); |
| 69 |
$usermeta.removeAttr( 'disabled' ); |
| 70 |
$caller.css( 'display', 'none' ); |
| 71 |
$( 'form .spinner:not(:has(.spinner-text))' ).animate( { width: '60px' }, 'fast' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 72 |
$( this ).remove(); |
| 73 |
}); |
| 74 |
$( 'html' ).removeClass( 'busy' ); |
| 75 |
|
| 76 |
}).fail( function ( response ) { |
| 77 |
var succeeded = false; |
| 78 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 79 |
var spinner_wait = succeeded ? 500 : 2000; |
| 80 |
|
| 81 |
// Enable inputs, remove spinner. |
| 82 |
$caller.removeAttr( 'disabled' ); |
| 83 |
$usermeta.removeAttr( 'disabled' ); |
| 84 |
$caller.css( 'display', 'none' ); |
| 85 |
$( 'form .spinner:not(:has(.spinner-text))' ).animate( { width: '60px' }, 'fast' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 86 |
$( this ).remove(); |
| 87 |
}); |
| 88 |
$( 'html' ).removeClass( 'busy' ); |
| 89 |
|
| 90 |
}); |
| 91 |
|
| 92 |
} |
| 93 |
|
| 94 |
// Update user's role (multisite options page). |
| 95 |
function auth_multisite_change_role( caller ) { |
| 96 |
var is_multisite = true; |
| 97 |
auth_change_role( caller, is_multisite ); |
| 98 |
} |
| 99 |
|
| 100 |
// Update user's role. |
| 101 |
function auth_change_role( caller, is_multisite ) { |
| 102 |
var $ = jQuery; |
| 103 |
|
| 104 |
// Set default for multisite flag (run different save routine if multisite) |
| 105 |
is_multisite = typeof is_multisite !== 'undefined' ? is_multisite : false; |
| 106 |
|
| 107 |
var email = $( caller ).parent().find( '.auth-email' ); |
| 108 |
var role = $( caller ).parent().find( '.auth-role' ); |
| 109 |
var date_added = $( caller ).parent().find( '.auth-date-added' ); |
| 110 |
|
| 111 |
var user = { |
| 112 |
'email': email.val(), |
| 113 |
'role': role.val(), |
| 114 |
'date_added': date_added.val(), |
| 115 |
'edit_action': 'change_role', |
| 116 |
'multisite_user': is_multisite, |
| 117 |
}; |
| 118 |
|
| 119 |
// Update the options in the database with this change. |
| 120 |
update_auth_user( caller, 'access_users_approved', user ); |
| 121 |
|
| 122 |
return true; |
| 123 |
} |
| 124 |
|
| 125 |
// Add user to list (multisite options page). |
| 126 |
function auth_multisite_add_user( caller, list, create_local_account ) { |
| 127 |
var is_multisite = true; |
| 128 |
|
| 129 |
// Default to the approved list. |
| 130 |
list = typeof list !== 'undefined' ? list : 'approved'; |
| 131 |
|
| 132 |
// Default to not creating a local account. |
| 133 |
create_local_account = typeof create_local_account !== 'undefined' ? create_local_account : false; |
| 134 |
|
| 135 |
// There currently is no multisite blocked list, so do nothing. |
| 136 |
if ( list === 'blocked' ) { |
| 137 |
return; |
| 138 |
} |
| 139 |
|
| 140 |
auth_add_user( caller, list, create_local_account, is_multisite ); |
| 141 |
} |
| 142 |
// Add user to list (list = blocked or approved). |
| 143 |
function auth_add_user( caller, list, create_local_account, is_multisite ) { |
| 144 |
var $ = jQuery; |
| 145 |
|
| 146 |
// Skip email address validation if adding from pending list (not user-editable). |
| 147 |
var skip_validation = $( caller ).parent().parent().attr( 'id' ) === 'list_auth_settings_access_users_pending'; |
| 148 |
|
| 149 |
// Skip email address validation if we're banning an existing user (since they're already in a list). |
| 150 |
skip_validation = skip_validation || $( caller ).attr( 'id' ).indexOf( 'block_user' ) > -1; |
| 151 |
|
| 152 |
// Set default for multisite flag (run different save routine if multisite) |
| 153 |
is_multisite = typeof is_multisite !== 'undefined' ? is_multisite : false; |
| 154 |
|
| 155 |
// Default to the approved list. |
| 156 |
list = typeof list !== 'undefined' ? list : 'approved'; |
| 157 |
|
| 158 |
// Default to not creating a local account. |
| 159 |
create_local_account = typeof create_local_account !== 'undefined' ? create_local_account : false; |
| 160 |
|
| 161 |
var email = $( caller ).parent().find( '.auth-email' ); |
| 162 |
var role = $( caller ).parent().find( '.auth-role' ); |
| 163 |
var date_added = $( caller ).parent().find( '.auth-date-added' ); |
| 164 |
|
| 165 |
// Helper variable for disabling buttons while processing. This will be |
| 166 |
// set differently if our clicked button is nested in a div (below). |
| 167 |
var buttons = caller; |
| 168 |
|
| 169 |
// Button (caller) might be nested in a div, so we need to walk up one more level |
| 170 |
if ( email.length === 0 || role.length === 0 ) { |
| 171 |
email = $( caller ).parent().parent().find( '.auth-email' ); |
| 172 |
role = $( caller ).parent().parent().find( '.auth-role' ); |
| 173 |
date_added = $( caller ).parent().parent().find( '.auth-date-added' ); |
| 174 |
buttons = $( caller ).parent().children(); |
| 175 |
} |
| 176 |
|
| 177 |
var user = { |
| 178 |
'email': $.trim( email.val() ).replace( 'mailto:', '' ), |
| 179 |
'role': role.val(), |
| 180 |
'date_added': date_added.val(), |
| 181 |
'edit_action': 'add', |
| 182 |
'local_user': create_local_account, |
| 183 |
'multisite_user': is_multisite, |
| 184 |
}; |
| 185 |
|
| 186 |
// Get next highest user ID. |
| 187 |
var next_id = 1 + Math.max.apply( |
| 188 |
null, |
| 189 |
$( '#list_auth_settings_access_users_' + list + ' li .auth-email' ).map( function ( el, index ) { |
| 190 |
return parseInt( this.id.replace( 'auth_multisite_settings_access_users_' + list + '_', '' ).replace( 'auth_settings_access_users_' + list + '_', '' ) ); |
| 191 |
}) |
| 192 |
); |
| 193 |
|
| 194 |
var validated = true; |
| 195 |
|
| 196 |
if ( user.email === '' ) { |
| 197 |
return false; |
| 198 |
} |
| 199 |
|
| 200 |
$( buttons ).attr( 'disabled', 'disabled' ); |
| 201 |
|
| 202 |
// Check if the name being added already exists in any list. |
| 203 |
if ( ! skip_validation && validated ) { |
| 204 |
$( 'li > input.auth-email' ).each( function() { |
| 205 |
if ( this.value == user.email ) { |
| 206 |
validated = false; |
| 207 |
email.parent().effect( 'shake', shake_speed ); |
| 208 |
$( this ).parent().effect( 'shake', shake_speed ); |
| 209 |
$( buttons ).removeAttr( 'disabled' ); |
| 210 |
return false; |
| 211 |
} |
| 212 |
}); |
| 213 |
} |
| 214 |
|
| 215 |
// Check if the user being added has a valid email address. |
| 216 |
if ( ! skip_validation && validated ) { |
| 217 |
if ( ! valid_email( user.email ) ) { |
| 218 |
validated = false; |
| 219 |
$( '#new_' + list + '_user_email' ).parent().effect( 'shake', shake_speed ); |
| 220 |
$( buttons ).removeAttr( 'disabled' ); |
| 221 |
} |
| 222 |
} |
| 223 |
|
| 224 |
if ( validated ) { |
| 225 |
// Add the new item. |
| 226 |
var auth_js_prefix = is_multisite ? 'auth_multisite_' : 'auth_'; |
| 227 |
var local_icon = create_local_account ? ' <a title="' + auth_L10n.local_wordpress_user + '" class="auth-local-user"><span class="glyphicon glyphicon-user"></span></a>' : ''; |
| 228 |
var ban_button = list === 'approved' && ! is_multisite ? '<a class="button" id="block_user_' + next_id + '" onclick="' + auth_js_prefix + 'add_user( this, \'blocked\', false ); ' + auth_js_prefix + 'ignore_user( this, \'approved\' );" title="' + auth_L10n.block_ban_user + '"><span class="glyphicon glyphicon-ban-circle"></span></a>' : ''; |
| 229 |
$( ' \ |
| 230 |
<li id="new_user_' + next_id + '" style="display: none;"> \ |
| 231 |
<input type="text" id="auth_settings_access_users_' + list + '_' + next_id + '" name="auth_settings[access_users_' + list + '][' + next_id + '][email]" value="' + user.email + '" readonly="true" class="auth-email" /> \ |
| 232 |
<select name="auth_settings[access_users_' + list + '][' + next_id + '][role]" class="auth-role" onchange="' + auth_js_prefix + 'change_role( this );"> \ |
| 233 |
</select> \ |
| 234 |
<input type="text" name="auth_settings[access_users_' + list + '][' + next_id + '][date_added]" value="' + getShortDate() + '" readonly="true" class="auth-date-added" /> \ |
| 235 |
' + ban_button + ' \ |
| 236 |
<a class="button" id="ignore_user_' + next_id + '" onclick="' + auth_js_prefix + 'ignore_user( this, \'' + list + '\' );" title="' + auth_L10n.remove_user + '"><span class="glyphicon glyphicon-remove"></span></a> \ |
| 237 |
' + local_icon + ' \ |
| 238 |
<span class="spinner is-active"></span> \ |
| 239 |
</li> \ |
| 240 |
' ).appendTo( '#list_auth_settings_access_users_' + list + '' ).slideDown( 250 ); |
| 241 |
|
| 242 |
// Populate the role dropdown in the new element. Because clone() doesn't |
| 243 |
// save selected state on select elements, set that too. |
| 244 |
$( 'option', role ).clone().appendTo( '#new_user_' + next_id + ' .auth-role' ); |
| 245 |
$( '#new_user_' + next_id + ' .auth-role' ).val( role.val() ); |
| 246 |
|
| 247 |
// Remove the 'empty list' item if it exists. |
| 248 |
$( '#list_auth_settings_access_users_' + list + ' li.auth-empty' ).remove(); |
| 249 |
|
| 250 |
// Update the options in the database with this change. |
| 251 |
update_auth_user( buttons, 'access_users_' + list, user ); |
| 252 |
|
| 253 |
// Reset the new user textboxes |
| 254 |
if ( email.hasClass( 'new' ) ) { |
| 255 |
email.val( '' ); |
| 256 |
} |
| 257 |
|
| 258 |
// Re-enable the action buttons now that we're done saving. |
| 259 |
$( buttons ).removeAttr( 'disabled' ); |
| 260 |
|
| 261 |
return true; |
| 262 |
} |
| 263 |
} |
| 264 |
|
| 265 |
// Remove user from list (multisite options page). |
| 266 |
function auth_multisite_ignore_user( caller, list_name ) { |
| 267 |
var is_multisite = true; |
| 268 |
|
| 269 |
// Set default list if not provided. |
| 270 |
list_name = typeof list_name !== 'undefined' ? list_name : ''; |
| 271 |
|
| 272 |
auth_ignore_user( caller, list_name, is_multisite ); |
| 273 |
} |
| 274 |
// Remove user from list. |
| 275 |
function auth_ignore_user( caller, list_name, is_multisite ) { |
| 276 |
var $ = jQuery; |
| 277 |
|
| 278 |
// Set default for multisite flag (run different save routine if multisite) |
| 279 |
is_multisite = typeof is_multisite !== 'undefined' ? is_multisite : false; |
| 280 |
|
| 281 |
// Set default list if not provided. |
| 282 |
list_name = typeof list_name !== 'undefined' ? list_name : 'approved'; |
| 283 |
|
| 284 |
var email = $( caller ).parent().find( '.auth-email' ); |
| 285 |
|
| 286 |
var user = { |
| 287 |
'email': email.val(), |
| 288 |
'role': '', |
| 289 |
'date_added': '', |
| 290 |
'edit_action': 'remove', |
| 291 |
'multisite_user': is_multisite, |
| 292 |
}; |
| 293 |
|
| 294 |
// Show an 'empty list' message if we're deleting the last item |
| 295 |
var list = $( caller ).closest( 'ul' ); |
| 296 |
if ( $( 'li', list ).length <= 1 ) { |
| 297 |
$( list ).append( '<li class="auth-empty"><em>' + auth_L10n.no_users_in + ' ' + list_name + '</em></li>' ); |
| 298 |
} |
| 299 |
|
| 300 |
$( caller ).parent().slideUp( 250, function() { |
| 301 |
// Remove the list item. |
| 302 |
$( this ).remove(); |
| 303 |
|
| 304 |
// Update the options in the database with this change. |
| 305 |
update_auth_user( caller, 'access_users_' + list_name, user ); |
| 306 |
}); |
| 307 |
} |
| 308 |
|
| 309 |
|
| 310 |
// Make changes to one of the user lists (pending, approved, blocked) via ajax. |
| 311 |
function update_auth_user( caller, setting, user_to_edit ) { |
| 312 |
var $ = jQuery, |
| 313 |
access_users_pending = [], |
| 314 |
access_users_approved = [], |
| 315 |
access_users_blocked = [], |
| 316 |
nonce_save_auth_settings = $( '#nonce_save_auth_settings' ).val(); |
| 317 |
|
| 318 |
// Defaults: |
| 319 |
// setting = 'access_users_pending' or 'access_users_approved' or 'access_users_blocked', |
| 320 |
// user_to_edit = { |
| 321 |
// email: 'johndoe@example.com', |
| 322 |
// role: 'subscriber', |
| 323 |
// date_added: 'Jun 2014', |
| 324 |
// edit_action: 'add' or 'remove' or 'change_role', |
| 325 |
// local_user: true or false, |
| 326 |
// multisite_user: true or false, |
| 327 |
// } |
| 328 |
setting = typeof setting !== 'undefined' ? setting : 'none'; |
| 329 |
user_to_edit = typeof user_to_edit !== 'undefined' ? user_to_edit : {}; |
| 330 |
|
| 331 |
// Enable wait cursor. |
| 332 |
$( 'html' ).addClass( 'busy' ); |
| 333 |
|
| 334 |
// Enable spinner by element that triggered this event (caller). |
| 335 |
$( caller ).attr( 'disabled', 'disabled' ); |
| 336 |
if ( $( caller ).val() === auth_L10n.save_changes ) { |
| 337 |
$( caller ).last().after( '<span class="spinner is-active"></span>' ); |
| 338 |
} else if ( $( caller ).hasClass( 'auth-role' ) ) { |
| 339 |
$( caller ).last().next().next().after( '<span class="spinner is-active"></span>' ); |
| 340 |
} else { |
| 341 |
$( caller ).last().next().after( '<span class="spinner is-active"></span>' ); |
| 342 |
} |
| 343 |
$( 'form .spinner' ).show(); |
| 344 |
|
| 345 |
// Grab the value of the setting we are saving. |
| 346 |
if ( setting === 'access_users_pending' ) { |
| 347 |
access_users_pending.push( user_to_edit ); |
| 348 |
} else if ( setting === 'access_users_approved' ) { |
| 349 |
access_users_approved.push( user_to_edit ); |
| 350 |
} else if ( setting === 'access_users_blocked' ) { |
| 351 |
access_users_blocked.push( user_to_edit ); |
| 352 |
} |
| 353 |
|
| 354 |
$.post( ajaxurl, { |
| 355 |
'action': 'update_auth_user', |
| 356 |
'setting': setting, |
| 357 |
'access_users_pending': access_users_pending, |
| 358 |
'access_users_approved': access_users_approved, |
| 359 |
'access_users_blocked': access_users_blocked, |
| 360 |
'nonce_save_auth_settings': nonce_save_auth_settings, |
| 361 |
}, function( response ) { |
| 362 |
// Server responded, but if response isn't 'success' it failed to save. |
| 363 |
var succeeded = response === 'success'; |
| 364 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 365 |
var spinner_wait = succeeded ? 500 : 2000; |
| 366 |
$( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 367 |
$( this ).remove(); |
| 368 |
}); |
| 369 |
$( caller ).removeAttr( 'disabled' ); |
| 370 |
|
| 371 |
// Disable wait cursor. |
| 372 |
$( 'html' ).removeClass( 'busy' ); |
| 373 |
}).fail( function() { |
| 374 |
// Fail fires if the server doesn't respond or responds with 500 codes |
| 375 |
var succeeded = false; |
| 376 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 377 |
var spinner_wait = succeeded ? 500 : 2000; |
| 378 |
$( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 379 |
$( this ).remove(); |
| 380 |
}); |
| 381 |
$( caller ).removeAttr( 'disabled' ); |
| 382 |
|
| 383 |
// Disable wait cursor. |
| 384 |
$( 'html' ).removeClass( 'busy' ); |
| 385 |
}); |
| 386 |
} |
| 387 |
|
| 388 |
|
| 389 |
// Multisite functions |
| 390 |
function save_auth_multisite_settings( caller ) { |
| 391 |
var $ = jQuery; |
| 392 |
|
| 393 |
// Enable wait cursor. |
| 394 |
$( 'html' ).addClass( 'busy' ); |
| 395 |
|
| 396 |
$( caller ).attr( 'disabled', 'disabled' ); |
| 397 |
if ( $( caller ).val() === auth_L10n.save_changes ) { |
| 398 |
$( caller ).last().after( '<span class="spinner is-active"></span>' ); |
| 399 |
} else if ( $( caller ).hasClass( 'auth-role' ) ) { |
| 400 |
$( caller ).last().next().next().after( '<span class="spinner is-active"></span>' ); |
| 401 |
} else { |
| 402 |
$( caller ).last().next().after( '<span class="spinner is-active"></span>' ); |
| 403 |
} |
| 404 |
$( 'form .spinner' ).show(); |
| 405 |
|
| 406 |
// Get form elements to save |
| 407 |
|
| 408 |
var nonce_save_auth_settings = $( '#nonce_save_auth_settings' ).val(); |
| 409 |
|
| 410 |
var multisite_override = $( '#auth_settings_multisite_override' ).is( ':checked' ) ? '1' : ''; |
| 411 |
|
| 412 |
var access_who_can_login = $( 'form input[name="auth_settings[access_who_can_login]"]:checked' ).val(); |
| 413 |
|
| 414 |
var access_who_can_view = $( 'form input[name="auth_settings[access_who_can_view]"]:checked' ).val(); |
| 415 |
|
| 416 |
var access_users_approved = {}; |
| 417 |
$( '#list_auth_settings_access_users_approved li' ).each( function( index ) { |
| 418 |
var user = {}; |
| 419 |
user.email = $( '.auth-email', this ).val(); |
| 420 |
user.role = $( '.auth-role', this ).val(); |
| 421 |
user.date_added = $( '.auth-date-added', this ).val(); |
| 422 |
user.local_user = $( '.auth-local-user', this ).length !== 0; |
| 423 |
access_users_approved[index] = user; |
| 424 |
}); |
| 425 |
|
| 426 |
var access_default_role = $( '#auth_settings_access_default_role' ).val(); |
| 427 |
|
| 428 |
var google = $( '#auth_settings_google' ).is( ':checked' ) ? '1' : ''; |
| 429 |
var google_clientid = $( '#auth_settings_google_clientid' ).val(); |
| 430 |
var google_clientsecret = $( '#auth_settings_google_clientsecret' ).val(); |
| 431 |
var google_hosteddomain = $( '#auth_settings_google_hosteddomain' ).val(); |
| 432 |
|
| 433 |
var cas = $( '#auth_settings_cas' ).is( ':checked' ) ? '1' : ''; |
| 434 |
var cas_custom_label = $( '#auth_settings_cas_custom_label' ).val(); |
| 435 |
var cas_host = $( '#auth_settings_cas_host' ).val(); |
| 436 |
var cas_port = $( '#auth_settings_cas_port' ).val(); |
| 437 |
var cas_path = $( '#auth_settings_cas_path' ).val(); |
| 438 |
var cas_version = $( '#auth_settings_cas_version' ).val(); |
| 439 |
var cas_attr_email = $( '#auth_settings_cas_attr_email' ).val(); |
| 440 |
var cas_attr_first_name = $( '#auth_settings_cas_attr_first_name' ).val(); |
| 441 |
var cas_attr_last_name = $( '#auth_settings_cas_attr_last_name' ).val(); |
| 442 |
var cas_attr_update_on_login = $( '#auth_settings_cas_attr_update_on_login' ).is( ':checked' ) ? '1' : ''; |
| 443 |
var cas_auto_login = $( '#auth_settings_cas_auto_login' ).is( ':checked' ) ? '1' : ''; |
| 444 |
|
| 445 |
var ldap = $( '#auth_settings_ldap' ).is( ':checked' ) ? '1' : ''; |
| 446 |
var ldap_host = $( '#auth_settings_ldap_host' ).val(); |
| 447 |
var ldap_port = $( '#auth_settings_ldap_port' ).val(); |
| 448 |
var ldap_search_base = $( '#auth_settings_ldap_search_base' ).val(); |
| 449 |
var ldap_uid = $( '#auth_settings_ldap_uid' ).val(); |
| 450 |
var ldap_attr_email = $( '#auth_settings_ldap_attr_email' ).val(); |
| 451 |
var ldap_user = $( '#auth_settings_ldap_user' ).val(); |
| 452 |
var ldap_password = $( '#auth_settings_ldap_password' ).val(); |
| 453 |
var ldap_tls = $( '#auth_settings_ldap_tls' ).is( ':checked' ) ? '1' : ''; |
| 454 |
var ldap_lostpassword_url = $( '#auth_settings_ldap_lostpassword_url' ).val(); |
| 455 |
var ldap_attr_first_name = $( '#auth_settings_ldap_attr_first_name' ).val(); |
| 456 |
var ldap_attr_last_name = $( '#auth_settings_ldap_attr_last_name' ).val(); |
| 457 |
var ldap_attr_update_on_login = $( '#auth_settings_ldap_attr_update_on_login' ).is( ':checked' ) ? '1' : ''; |
| 458 |
|
| 459 |
var advanced_lockouts = { |
| 460 |
'attempts_1': $( '#auth_settings_advanced_lockouts_attempts_1' ).val(), |
| 461 |
'duration_1': $( '#auth_settings_advanced_lockouts_duration_1' ).val(), |
| 462 |
'attempts_2': $( '#auth_settings_advanced_lockouts_attempts_2' ).val(), |
| 463 |
'duration_2': $( '#auth_settings_advanced_lockouts_duration_2' ).val(), |
| 464 |
'reset_duration': $( '#auth_settings_advanced_lockouts_reset_duration' ).val() |
| 465 |
}; |
| 466 |
var advanced_hide_wp_login = $( '#auth_settings_advanced_hide_wp_login' ).is( ':checked' ) ? '1' : ''; |
| 467 |
|
| 468 |
$.post( ajaxurl, { |
| 469 |
action: 'save_auth_multisite_settings', |
| 470 |
'nonce_save_auth_settings': nonce_save_auth_settings, |
| 471 |
'multisite_override': multisite_override, |
| 472 |
'access_who_can_login': access_who_can_login, |
| 473 |
'access_who_can_view': access_who_can_view, |
| 474 |
'access_users_approved': access_users_approved, |
| 475 |
'access_default_role': access_default_role, |
| 476 |
'google': google, |
| 477 |
'google_clientid': google_clientid, |
| 478 |
'google_clientsecret': google_clientsecret, |
| 479 |
'google_hosteddomain': google_hosteddomain, |
| 480 |
'cas': cas, |
| 481 |
'cas_custom_label': cas_custom_label, |
| 482 |
'cas_host': cas_host, |
| 483 |
'cas_port': cas_port, |
| 484 |
'cas_path': cas_path, |
| 485 |
'cas_version': cas_version, |
| 486 |
'cas_attr_email': cas_attr_email, |
| 487 |
'cas_attr_first_name': cas_attr_first_name, |
| 488 |
'cas_attr_last_name': cas_attr_last_name, |
| 489 |
'cas_attr_update_on_login': cas_attr_update_on_login, |
| 490 |
'cas_auto_login': cas_auto_login, |
| 491 |
'ldap': ldap, |
| 492 |
'ldap_host': ldap_host, |
| 493 |
'ldap_port': ldap_port, |
| 494 |
'ldap_search_base': ldap_search_base, |
| 495 |
'ldap_uid': ldap_uid, |
| 496 |
'ldap_attr_email': ldap_attr_email, |
| 497 |
'ldap_user': ldap_user, |
| 498 |
'ldap_password': ldap_password, |
| 499 |
'ldap_tls': ldap_tls, |
| 500 |
'ldap_lostpassword_url': ldap_lostpassword_url, |
| 501 |
'ldap_attr_first_name': ldap_attr_first_name, |
| 502 |
'ldap_attr_last_name': ldap_attr_last_name, |
| 503 |
'ldap_attr_update_on_login': ldap_attr_update_on_login, |
| 504 |
'advanced_lockouts': advanced_lockouts, |
| 505 |
'advanced_hide_wp_login': advanced_hide_wp_login, |
| 506 |
}, function( response ) { |
| 507 |
var succeeded = response === 'success'; |
| 508 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 509 |
var spinner_wait = succeeded ? 500 : 2000; |
| 510 |
$( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 511 |
$( this ).remove(); |
| 512 |
}); |
| 513 |
$( caller ).removeAttr( 'disabled' ); |
| 514 |
|
| 515 |
// Disable wait cursor. |
| 516 |
$( 'html' ).removeClass( 'busy' ); |
| 517 |
}).fail( function() { |
| 518 |
// Fail fires if the server doesn't respond |
| 519 |
var succeeded = false; |
| 520 |
var spinner_text = succeeded ? auth_L10n.saved + '.' : '<span style="color: red;">' + auth_L10n.failed + '.</span>'; |
| 521 |
var spinner_wait = succeeded ? 500 : 2000; |
| 522 |
$( 'form .spinner:not(:has(.spinner-text))' ).append( '<span class="spinner-text">' + spinner_text + '</span>' ).delay( spinner_wait ).hide( animation_speed, function() { |
| 523 |
$( this ).remove(); |
| 524 |
}); |
| 525 |
$( caller ).removeAttr( 'disabled' ); |
| 526 |
|
| 527 |
// Disable wait cursor. |
| 528 |
$( 'html' ).removeClass( 'busy' ); |
| 529 |
}); |
| 530 |
} |
| 531 |
|
| 532 |
// Hide or show (with overlay) the multisite settings based on the "multisite override" setting. |
| 533 |
function hide_multisite_settings_if_disabled() { |
| 534 |
var $ = jQuery; |
| 535 |
|
| 536 |
if ( $( '#auth_settings_multisite_override' ).length === 0 ) |
| 537 |
return; |
| 538 |
|
| 539 |
var settings = $( '#auth_multisite_settings' ); |
| 540 |
var overlay = $( '#auth_multisite_settings_disabled_overlay' ); |
| 541 |
|
| 542 |
if ( $( '#auth_settings_multisite_override' ).is( ':checked' ) ) { |
| 543 |
overlay.hide( animation_speed ); |
| 544 |
} else { |
| 545 |
overlay.css({ |
| 546 |
'background-color': '#f1f1f1', |
| 547 |
'z-index': 1, |
| 548 |
'opacity': 0.8, |
| 549 |
'position': 'absolute', |
| 550 |
'top': settings.position().top, |
| 551 |
'left': settings.position().left - 20, |
| 552 |
'width': '100%', |
| 553 |
'height': settings.height(), |
| 554 |
'padding-left': 20, |
| 555 |
}); |
| 556 |
overlay.show(); |
| 557 |
} |
| 558 |
} |
| 559 |
|
| 560 |
// Hide (with overlay) site options if overridden by a multisite option. |
| 561 |
function hide_multisite_overridden_options() { |
| 562 |
var $ = jQuery; |
| 563 |
|
| 564 |
$( '.auth_multisite_override_overlay' ).each( function() { |
| 565 |
// Option to hide is stored in the overlay's id with 'overlay-hide-' prefix. |
| 566 |
var option_container_to_hide = $( this ).closest( 'tr' ); |
| 567 |
if ( option_container_to_hide.length > 0 ) { |
| 568 |
$( this ).css({ |
| 569 |
'background-color': '#f1f1f1', |
| 570 |
'z-index': 1, |
| 571 |
'opacity': 0.8, |
| 572 |
'position': 'absolute', |
| 573 |
'top': option_container_to_hide.position().top, |
| 574 |
'left': option_container_to_hide.position().left, |
| 575 |
'width': '100%', |
| 576 |
'height': option_container_to_hide.height(), |
| 577 |
}); |
| 578 |
$( this ).show(); |
| 579 |
} |
| 580 |
}); |
| 581 |
} |
| 582 |
|
| 583 |
|
| 584 |
|
| 585 |
// Helper function to hide/show wordpress option |
| 586 |
function animate_option( action, option ) { |
| 587 |
var $ = jQuery; |
| 588 |
if ( action === 'show' ) { |
| 589 |
$( 'div.animated_wrapper', option ).slideDown( animation_speed ); |
| 590 |
$( 'th', option ).animate({ padding: '20px 10px 20px 0' }, { duration: animation_speed }); |
| 591 |
$( 'td', option ).animate({ padding: '15px 10px' }, { duration: animation_speed }); |
| 592 |
} else if ( action === 'hide' ) { |
| 593 |
$( 'div.animated_wrapper', option ).slideUp( animation_speed ); |
| 594 |
$( 'td, th', option ).animate({ padding: '0px' }, { duration: animation_speed }); |
| 595 |
} else if ( action === 'hide_immediately' ) { |
| 596 |
$( 'div.animated_wrapper', option ).hide(); |
| 597 |
$( 'td, th', option ).css({ padding: '0px' }); |
| 598 |
} |
| 599 |
} |
| 600 |
|
| 601 |
// Helper function to grab a querystring param value by name |
| 602 |
function getParameterByName( needle, haystack ) { |
| 603 |
needle = needle.replace( /[\[]/, "\\\[").replace(/[\]]/, "\\\]" ); |
| 604 |
var regex = new RegExp( "[\\?&]" + needle + "=([^&#]*)" ); |
| 605 |
var results = regex.exec( haystack ); |
| 606 |
if( results === null ) |
| 607 |
return ''; |
| 608 |
else |
| 609 |
return decodeURIComponent( results[1].replace( /\+/g, " " ) ); |
| 610 |
} |
| 611 |
|
| 612 |
// Helper function to generate a random string |
| 613 |
function getRandomId() { |
| 614 |
var text = ""; |
| 615 |
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
| 616 |
for ( var i=0; i < 5; i++ ) |
| 617 |
text += possible.charAt( Math.floor( Math.random() * possible.length ) ); |
| 618 |
return text; |
| 619 |
} |
| 620 |
|
| 621 |
// Helper function to return a short date (e.g., Jul 2013) for today's date |
| 622 |
function getShortDate( date ) { |
| 623 |
date = typeof date !== 'undefined' ? date : new Date(); |
| 624 |
var month = ''; |
| 625 |
switch ( date.getMonth() ) { |
| 626 |
case 0: month = 'Jan'; break; |
| 627 |
case 1: month = 'Feb'; break; |
| 628 |
case 2: month = 'Mar'; break; |
| 629 |
case 3: month = 'Apr'; break; |
| 630 |
case 4: month = 'May'; break; |
| 631 |
case 5: month = 'Jun'; break; |
| 632 |
case 6: month = 'Jul'; break; |
| 633 |
case 7: month = 'Aug'; break; |
| 634 |
case 8: month = 'Sep'; break; |
| 635 |
case 9: month = 'Oct'; break; |
| 636 |
case 10: month = 'Nov'; break; |
| 637 |
case 11: month = 'Dec'; break; |
| 638 |
} |
| 639 |
return month + ' ' + date.getFullYear(); |
| 640 |
} |
| 641 |
|
| 642 |
// Helper function to grab a querystring value |
| 643 |
function querystring( key ) { |
| 644 |
var re = new RegExp( '(?:\\?|&)'+key+'=(.*?)(?=&|$)', 'gi' ); |
| 645 |
var r = [], m; |
| 646 |
while ( ( m = re.exec( document.location.search ) ) !== null ) |
| 647 |
r.push( m[1] ); |
| 648 |
return r; |
| 649 |
} |
| 650 |
|
| 651 |
// Helper function to check if an email address is valid. |
| 652 |
function valid_email( email ) { |
| 653 |
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; |
| 654 |
return re.test( email ); |
| 655 |
} |
| 656 |
|
| 657 |
|
| 658 |
jQuery( document ).ready( function( $ ) { |
| 659 |
// Grab references to form elements that we will show/hide on page load |
| 660 |
var auth_settings_access_users_pending = $( '#list_auth_settings_access_users_pending' ).closest( 'tr' ); |
| 661 |
var auth_settings_access_users_approved = $( '#list_auth_settings_access_users_approved' ).closest( 'tr' ); |
| 662 |
var auth_settings_access_users_blocked = $( '#list_auth_settings_access_users_blocked' ).closest( 'tr' ); |
| 663 |
var auth_settings_access_role_receive_pending_emails = $( '#auth_settings_access_role_receive_pending_emails' ).closest( 'tr' ); |
| 664 |
var auth_settings_access_pending_redirect_to_message = $( '#wp-auth_settings_access_pending_redirect_to_message-wrap' ).closest( 'tr' ); |
| 665 |
var auth_settings_access_blocked_redirect_to_message = $( '#wp-auth_settings_access_blocked_redirect_to_message-wrap' ).closest( 'tr' ); |
| 666 |
var auth_settings_access_should_email_approved_users = $( '#auth_settings_access_should_email_approved_users' ).closest( 'tr' ); |
| 667 |
var auth_settings_access_email_approved_users_subject = $( '#auth_settings_access_email_approved_users_subject' ).closest( 'tr' ); |
| 668 |
var auth_settings_access_email_approved_users_body = $( '#wp-auth_settings_access_email_approved_users_body-wrap' ).closest( 'tr' ); |
| 669 |
var auth_settings_access_public_pages = $( '#auth_settings_access_public_pages' ).closest( 'tr' ); |
| 670 |
var auth_settings_access_redirect_to_login = $( '#radio_auth_settings_access_redirect_to_login' ).closest( 'tr' ); |
| 671 |
var auth_settings_access_public_warning = $( '#radio_auth_settings_access_public_warning' ).closest( 'tr' ); |
| 672 |
var auth_settings_access_redirect_to_message = $( '#wp-auth_settings_access_redirect_to_message-wrap' ).closest( 'tr' ); |
| 673 |
var auth_settings_external_settings_table = $( '#auth_settings_google' ).closest( 'table' ); |
| 674 |
var auth_settings_external_google = $( '#auth_settings_google' ).closest( 'tr' ); |
| 675 |
var auth_settings_external_google_clientid = $( '#auth_settings_google_clientid' ).closest( 'tr' ); |
| 676 |
var auth_settings_external_google_clientsecret = $( '#auth_settings_google_clientsecret' ).closest( 'tr' ); |
| 677 |
var auth_settings_external_google_hosteddomain = $( '#auth_settings_google_hosteddomain' ).closest( 'tr' ); |
| 678 |
var auth_settings_external_cas = $( '#auth_settings_cas' ).closest( 'tr' ); |
| 679 |
var auth_settings_external_cas_custom_label = $( '#auth_settings_cas_custom_label' ).closest( 'tr' ); |
| 680 |
var auth_settings_external_cas_host = $( '#auth_settings_cas_host' ).closest( 'tr' ); |
| 681 |
var auth_settings_external_cas_port = $( '#auth_settings_cas_port' ).closest( 'tr' ); |
| 682 |
var auth_settings_external_cas_path = $( '#auth_settings_cas_path' ).closest( 'tr' ); |
| 683 |
var auth_settings_external_cas_version = $( '#auth_settings_cas_version' ).closest( 'tr' ); |
| 684 |
var auth_settings_external_cas_attr_email = $( '#auth_settings_cas_attr_email' ).closest( 'tr' ); |
| 685 |
var auth_settings_external_cas_attr_first_name = $( '#auth_settings_cas_attr_first_name' ).closest( 'tr' ); |
| 686 |
var auth_settings_external_cas_attr_last_name = $( '#auth_settings_cas_attr_last_name' ).closest( 'tr' ); |
| 687 |
var auth_settings_external_cas_attr_update_on_login = $( '#auth_settings_cas_attr_update_on_login' ).closest( 'tr' ); |
| 688 |
var auth_settings_external_cas_auto_login = $( '#auth_settings_cas_auto_login' ).closest( 'tr' ); |
| 689 |
var auth_settings_external_ldap = $( '#auth_settings_ldap' ).closest( 'tr' ); |
| 690 |
var auth_settings_external_ldap_host = $( '#auth_settings_ldap_host' ).closest( 'tr' ); |
| 691 |
var auth_settings_external_ldap_port = $( '#auth_settings_ldap_port' ).closest( 'tr' ); |
| 692 |
var auth_settings_external_ldap_search_base = $( '#auth_settings_ldap_search_base' ).closest( 'tr' ); |
| 693 |
var auth_settings_external_ldap_uid = $( '#auth_settings_ldap_uid' ).closest( 'tr' ); |
| 694 |
var auth_settings_external_ldap_attr_email = $( '#auth_settings_ldap_attr_email' ).closest( 'tr' ); |
| 695 |
var auth_settings_external_ldap_user = $( '#auth_settings_ldap_user' ).closest( 'tr' ); |
| 696 |
var auth_settings_external_ldap_password = $( '#auth_settings_ldap_password' ).closest( 'tr' ); |
| 697 |
var auth_settings_external_ldap_tls = $( '#auth_settings_ldap_tls' ).closest( 'tr' ); |
| 698 |
var auth_settings_external_ldap_lostpassword_url = $( '#auth_settings_ldap_lostpassword_url' ).closest( 'tr' ); |
| 699 |
var auth_settings_external_ldap_attr_first_name = $( '#auth_settings_ldap_attr_first_name' ).closest( 'tr' ); |
| 700 |
var auth_settings_external_ldap_attr_last_name = $( '#auth_settings_ldap_attr_last_name' ).closest( 'tr' ); |
| 701 |
var auth_settings_external_ldap_attr_update_on_login = $( '#auth_settings_ldap_attr_update_on_login' ).closest( 'tr' ); |
| 702 |
|
| 703 |
// Wrap the th and td in the rows above so we can animate their heights (can't animate tr heights with jquery) |
| 704 |
$( 'th, td', auth_settings_access_users_pending ).wrapInner( '<div class="animated_wrapper" />' ); |
| 705 |
$( 'th, td', auth_settings_access_users_approved ).wrapInner( '<div class="animated_wrapper" />' ); |
| 706 |
$( 'th, td', auth_settings_access_users_blocked ).wrapInner( '<div class="animated_wrapper" />' ); |
| 707 |
$( 'th, td', auth_settings_access_role_receive_pending_emails ).wrapInner( '<div class="animated_wrapper" />' ); |
| 708 |
$( 'th, td', auth_settings_access_pending_redirect_to_message ).wrapInner( '<div class="animated_wrapper" />' ); |
| 709 |
$( 'th, td', auth_settings_access_blocked_redirect_to_message ).wrapInner( '<div class="animated_wrapper" />' ); |
| 710 |
$( 'th, td', auth_settings_access_should_email_approved_users ).wrapInner( '<div class="animated_wrapper" />' ); |
| 711 |
$( 'th, td', auth_settings_access_email_approved_users_subject ).wrapInner( '<div class="animated_wrapper" />' ); |
| 712 |
$( 'th, td', auth_settings_access_email_approved_users_body ).wrapInner( '<div class="animated_wrapper" />' ); |
| 713 |
$( 'th, td', auth_settings_access_public_pages ).wrapInner( '<div class="animated_wrapper" />' ); |
| 714 |
$( 'th, td', auth_settings_access_redirect_to_login ).wrapInner( '<div class="animated_wrapper" />' ); |
| 715 |
$( 'th, td', auth_settings_access_public_warning ).wrapInner( '<div class="animated_wrapper" />' ); |
| 716 |
$( 'th, td', auth_settings_access_redirect_to_message ).wrapInner( '<div class="animated_wrapper" />' ); |
| 717 |
$( 'th, td', auth_settings_external_google_clientid ).wrapInner( '<div class="animated_wrapper" />' ); |
| 718 |
$( 'th, td', auth_settings_external_google_clientsecret ).wrapInner( '<div class="animated_wrapper" />' ); |
| 719 |
$( 'th, td', auth_settings_external_google_hosteddomain ).wrapInner( '<div class="animated_wrapper" />' ); |
| 720 |
$( 'th, td', auth_settings_external_cas_custom_label ).wrapInner( '<div class="animated_wrapper" />' ); |
| 721 |
$( 'th, td', auth_settings_external_cas_host ).wrapInner( '<div class="animated_wrapper" />' ); |
| 722 |
$( 'th, td', auth_settings_external_cas_port ).wrapInner( '<div class="animated_wrapper" />' ); |
| 723 |
$( 'th, td', auth_settings_external_cas_path ).wrapInner( '<div class="animated_wrapper" />' ); |
| 724 |
$( 'th, td', auth_settings_external_cas_version ).wrapInner( '<div class="animated_wrapper" />' ); |
| 725 |
$( 'th, td', auth_settings_external_cas_attr_email ).wrapInner( '<div class="animated_wrapper" />' ); |
| 726 |
$( 'th, td', auth_settings_external_cas_attr_first_name ).wrapInner( '<div class="animated_wrapper" />' ); |
| 727 |
$( 'th, td', auth_settings_external_cas_attr_last_name ).wrapInner( '<div class="animated_wrapper" />' ); |
| 728 |
$( 'th, td', auth_settings_external_cas_attr_update_on_login ).wrapInner( '<div class="animated_wrapper" />' ); |
| 729 |
$( 'th, td', auth_settings_external_cas_auto_login ).wrapInner( '<div class="animated_wrapper" />' ); |
| 730 |
$( 'th, td', auth_settings_external_ldap_host ).wrapInner( '<div class="animated_wrapper" />' ); |
| 731 |
$( 'th, td', auth_settings_external_ldap_port ).wrapInner( '<div class="animated_wrapper" />' ); |
| 732 |
$( 'th, td', auth_settings_external_ldap_search_base ).wrapInner( '<div class="animated_wrapper" />' ); |
| 733 |
$( 'th, td', auth_settings_external_ldap_uid ).wrapInner( '<div class="animated_wrapper" />' ); |
| 734 |
$( 'th, td', auth_settings_external_ldap_attr_email ).wrapInner( '<div class="animated_wrapper" />' ); |
| 735 |
$( 'th, td', auth_settings_external_ldap_user ).wrapInner( '<div class="animated_wrapper" />' ); |
| 736 |
$( 'th, td', auth_settings_external_ldap_password ).wrapInner( '<div class="animated_wrapper" />' ); |
| 737 |
$( 'th, td', auth_settings_external_ldap_tls ).wrapInner( '<div class="animated_wrapper" />' ); |
| 738 |
$( 'th, td', auth_settings_external_ldap_lostpassword_url ).wrapInner( '<div class="animated_wrapper" />' ); |
| 739 |
$( 'th, td', auth_settings_external_ldap_attr_first_name ).wrapInner( '<div class="animated_wrapper" />' ); |
| 740 |
$( 'th, td', auth_settings_external_ldap_attr_last_name ).wrapInner( '<div class="animated_wrapper" />' ); |
| 741 |
$( 'th, td', auth_settings_external_ldap_attr_update_on_login ).wrapInner( '<div class="animated_wrapper" />' ); |
| 742 |
|
| 743 |
// If we're viewing the dashboard widget, reset a couple of the relevant |
| 744 |
// option variables (since they're aren't nested in table rows). |
| 745 |
if ( $( '#auth_dashboard_widget' ).length ) { |
| 746 |
auth_settings_access_users_pending = $( '#list_auth_settings_access_users_pending' ).closest( 'div' ); |
| 747 |
auth_settings_access_users_approved = $( '#list_auth_settings_access_users_approved' ).closest( 'div' ); |
| 748 |
auth_settings_access_users_blocked = $( '#list_auth_settings_access_users_blocked' ).closest( 'div' ); |
| 749 |
$( auth_settings_access_users_pending ).wrapInner( '<div class="animated_wrapper" />' ); |
| 750 |
$( auth_settings_access_users_approved ).wrapInner( '<div class="animated_wrapper" />' ); |
| 751 |
$( auth_settings_access_users_blocked ).wrapInner( '<div class="animated_wrapper" />' ); |
| 752 |
|
| 753 |
// Remove the helper link, since there are no tabs on the dashboard widget |
| 754 |
$( '#dashboard_link_approved_users' ).contents().unwrap(); |
| 755 |
} |
| 756 |
|
| 757 |
// Hide Welcome email body/subject options if "Send welcome email" is off. |
| 758 |
if ( ! $( '#auth_settings_access_should_email_approved_users' ).is( ':checked' ) ) { |
| 759 |
animate_option( 'hide_immediately', auth_settings_access_email_approved_users_subject ); |
| 760 |
animate_option( 'hide_immediately', auth_settings_access_email_approved_users_body ); |
| 761 |
} |
| 762 |
|
| 763 |
// On load: Show/hide public access options if everyone can see site |
| 764 |
if ( ! $( '#radio_auth_settings_access_who_can_view_logged_in_users' ).is( ':checked' ) ) { |
| 765 |
animate_option( 'hide_immediately', auth_settings_access_public_pages ); |
| 766 |
animate_option( 'hide_immediately', auth_settings_access_redirect_to_login ); |
| 767 |
animate_option( 'hide_immediately', auth_settings_access_public_warning ); |
| 768 |
animate_option( 'hide_immediately', auth_settings_access_redirect_to_message ); |
| 769 |
} |
| 770 |
|
| 771 |
// Hide Google options if unchecked |
| 772 |
if ( ! $( '#auth_settings_google' ).is( ':checked' ) ) { |
| 773 |
animate_option( 'hide_immediately', auth_settings_external_google_clientid ); |
| 774 |
animate_option( 'hide_immediately', auth_settings_external_google_clientsecret ); |
| 775 |
animate_option( 'hide_immediately', auth_settings_external_google_hosteddomain ); |
| 776 |
} |
| 777 |
|
| 778 |
// Hide CAS options if unchecked |
| 779 |
if ( ! $( '#auth_settings_cas' ).is( ':checked' ) ) { |
| 780 |
animate_option( 'hide_immediately', auth_settings_external_cas_custom_label ); |
| 781 |
animate_option( 'hide_immediately', auth_settings_external_cas_host ); |
| 782 |
animate_option( 'hide_immediately', auth_settings_external_cas_port ); |
| 783 |
animate_option( 'hide_immediately', auth_settings_external_cas_path ); |
| 784 |
animate_option( 'hide_immediately', auth_settings_external_cas_version ); |
| 785 |
animate_option( 'hide_immediately', auth_settings_external_cas_attr_email ); |
| 786 |
animate_option( 'hide_immediately', auth_settings_external_cas_attr_first_name ); |
| 787 |
animate_option( 'hide_immediately', auth_settings_external_cas_attr_last_name ); |
| 788 |
animate_option( 'hide_immediately', auth_settings_external_cas_attr_update_on_login ); |
| 789 |
animate_option( 'hide_immediately', auth_settings_external_cas_auto_login ); |
| 790 |
} |
| 791 |
|
| 792 |
// Hide LDAP options if unchecked |
| 793 |
if ( ! $( '#auth_settings_ldap' ).is( ':checked' ) ) { |
| 794 |
animate_option( 'hide_immediately', auth_settings_external_ldap_host ); |
| 795 |
animate_option( 'hide_immediately', auth_settings_external_ldap_port ); |
| 796 |
animate_option( 'hide_immediately', auth_settings_external_ldap_search_base ); |
| 797 |
animate_option( 'hide_immediately', auth_settings_external_ldap_uid ); |
| 798 |
animate_option( 'hide_immediately', auth_settings_external_ldap_attr_email ); |
| 799 |
animate_option( 'hide_immediately', auth_settings_external_ldap_user ); |
| 800 |
animate_option( 'hide_immediately', auth_settings_external_ldap_password ); |
| 801 |
animate_option( 'hide_immediately', auth_settings_external_ldap_tls ); |
| 802 |
animate_option( 'hide_immediately', auth_settings_external_ldap_lostpassword_url ); |
| 803 |
animate_option( 'hide_immediately', auth_settings_external_ldap_attr_first_name ); |
| 804 |
animate_option( 'hide_immediately', auth_settings_external_ldap_attr_last_name ); |
| 805 |
animate_option( 'hide_immediately', auth_settings_external_ldap_attr_update_on_login ); |
| 806 |
} |
| 807 |
|
| 808 |
// Event handler: Hide "Handle unauthorized visitors" option if access is granted to "Everyone" |
| 809 |
$( 'input[name="auth_settings[access_who_can_login]"]' ).change( function() { |
| 810 |
// Hide user whitelist unless "Only specific students below" is checked |
| 811 |
var action = $( '#radio_auth_settings_access_who_can_login_approved_users' ).is( ':checked' ) ? 'show' : 'hide'; |
| 812 |
animate_option( action, auth_settings_access_role_receive_pending_emails ); |
| 813 |
animate_option( action, auth_settings_access_pending_redirect_to_message ); |
| 814 |
animate_option( action, auth_settings_access_blocked_redirect_to_message ); |
| 815 |
animate_option( action, auth_settings_access_should_email_approved_users ); |
| 816 |
animate_option( action, auth_settings_access_email_approved_users_subject ); |
| 817 |
animate_option( action, auth_settings_access_email_approved_users_body ); |
| 818 |
}); |
| 819 |
|
| 820 |
// Event handler: Hide Welcome email body/subject options if "Send welcome email" is off. |
| 821 |
$( 'input[name="auth_settings[access_should_email_approved_users]"]' ).change( function() { |
| 822 |
var action = $( this ).is( ':checked' ) ? 'show' : 'hide'; |
| 823 |
animate_option( action, auth_settings_access_email_approved_users_subject ); |
| 824 |
animate_option( action, auth_settings_access_email_approved_users_body ); |
| 825 |
}); |
| 826 |
|
| 827 |
// Event handler: Hide "Handle unauthorized visitors" option if access is granted to "Everyone" |
| 828 |
$( 'input[name="auth_settings[access_who_can_view]"]' ).change( function() { |
| 829 |
var action = $( '#radio_auth_settings_access_who_can_view_everyone' ).is( ':checked' ) ? 'hide' : 'show'; |
| 830 |
animate_option( action, auth_settings_access_redirect_to_login ); |
| 831 |
animate_option( action, auth_settings_access_redirect_to_message ); |
| 832 |
animate_option( action, auth_settings_access_public_pages ); |
| 833 |
animate_option( action, auth_settings_access_public_warning ); |
| 834 |
}); |
| 835 |
|
| 836 |
// Event handler: Show/hide Google options based on checkbox |
| 837 |
$( 'input[name="auth_settings[google]"]' ).change( function() { |
| 838 |
var action = $( this ).is( ':checked' ) ? 'show' : 'hide'; |
| 839 |
animate_option( action, auth_settings_external_google_clientid ); |
| 840 |
animate_option( action, auth_settings_external_google_clientsecret ); |
| 841 |
animate_option( action, auth_settings_external_google_hosteddomain ); |
| 842 |
}); |
| 843 |
|
| 844 |
// Event handler: Show/hide CAS options based on checkbox |
| 845 |
$( 'input[name="auth_settings[cas]"]' ).change( function() { |
| 846 |
var action = $( this ).is( ':checked' ) ? 'show' : 'hide'; |
| 847 |
animate_option( action, auth_settings_external_cas_custom_label ); |
| 848 |
animate_option( action, auth_settings_external_cas_host ); |
| 849 |
animate_option( action, auth_settings_external_cas_port ); |
| 850 |
animate_option( action, auth_settings_external_cas_path ); |
| 851 |
animate_option( action, auth_settings_external_cas_version ); |
| 852 |
animate_option( action, auth_settings_external_cas_attr_email ); |
| 853 |
animate_option( action, auth_settings_external_cas_attr_first_name ); |
| 854 |
animate_option( action, auth_settings_external_cas_attr_last_name ); |
| 855 |
animate_option( action, auth_settings_external_cas_attr_update_on_login ); |
| 856 |
animate_option( action, auth_settings_external_cas_auto_login ); |
| 857 |
}); |
| 858 |
|
| 859 |
// Event handler: Show/hide LDAP options based on checkbox |
| 860 |
$( 'input[name="auth_settings[ldap]"]' ).change( function() { |
| 861 |
var action = $( this ).is( ':checked' ) ? 'show' : 'hide'; |
| 862 |
animate_option( action, auth_settings_external_ldap_host ); |
| 863 |
animate_option( action, auth_settings_external_ldap_port ); |
| 864 |
animate_option( action, auth_settings_external_ldap_search_base ); |
| 865 |
animate_option( action, auth_settings_external_ldap_uid ); |
| 866 |
animate_option( action, auth_settings_external_ldap_attr_email ); |
| 867 |
animate_option( action, auth_settings_external_ldap_user ); |
| 868 |
animate_option( action, auth_settings_external_ldap_password ); |
| 869 |
animate_option( action, auth_settings_external_ldap_tls ); |
| 870 |
animate_option( action, auth_settings_external_ldap_lostpassword_url ); |
| 871 |
animate_option( action, auth_settings_external_ldap_attr_first_name ); |
| 872 |
animate_option( action, auth_settings_external_ldap_attr_last_name ); |
| 873 |
animate_option( action, auth_settings_external_ldap_attr_update_on_login ); |
| 874 |
}); |
| 875 |
|
| 876 |
// Show save button if usermeta field is modified. |
| 877 |
$( 'form input.auth-usermeta' ).bind( 'keyup', function ( event ) { |
| 878 |
// Don't do anything if tab or arrow keys were pressed. |
| 879 |
if ( event.which === 9 || event.which === 37 || event.which === 38 || event.which === 39 || event.which === 40 ) { |
| 880 |
return; |
| 881 |
} |
| 882 |
$( this ).siblings( '.button' ).css( 'display', 'inline-block' ); |
| 883 |
}); |
| 884 |
|
| 885 |
// List management function: pressing enter in the new approved or new |
| 886 |
// blocked user (email or role field) adds the user to the list. |
| 887 |
$( '#new_approved_user_email, #new_approved_user_role, #new_blocked_user_email' ).bind( 'keyup', function( e ) { |
| 888 |
if ( e.which == 13 ) { // Enter key |
| 889 |
$( this ).parent().find( 'a' ).trigger( 'click' ); |
| 890 |
return false; |
| 891 |
} |
| 892 |
}); |
| 893 |
|
| 894 |
// Don't submit form (i.e., save options) when hitting enter in any user list field. |
| 895 |
$( 'input.auth-email, select.auth-role, input.auth-date-added, input.auth-usermeta' ).bind( 'keydown', function( e ) { |
| 896 |
if ( e.which == 13 ) { // Enter key |
| 897 |
e.preventDefault(); |
| 898 |
return false; |
| 899 |
} |
| 900 |
}); |
| 901 |
|
| 902 |
// Enable the user-friendly multiselect form element on the options page. |
| 903 |
$( '#auth_settings_access_public_pages' ).multiSelect({ |
| 904 |
selectableOptgroup: true, |
| 905 |
selectableHeader: '<div class="custom-header">' + auth_L10n.private_pages + '</div>', |
| 906 |
selectionHeader: '<div class="custom-header">' + auth_L10n.public_pages + '</div>', |
| 907 |
}); |
| 908 |
|
| 909 |
// Switch to the first tab (or the tab indicated in sessionStorage, or the querystring). |
| 910 |
var tab = ''; |
| 911 |
if ( querystring( 'tab' ).length > 0 ) { |
| 912 |
tab = querystring( 'tab' )[0]; |
| 913 |
} else if ( sessionStorage.getItem( 'tab' ) ) { |
| 914 |
tab = sessionStorage.getItem( 'tab' ); |
| 915 |
} |
| 916 |
if ( $.inArray( tab, [ 'access_lists', 'access_login', 'access_public', 'external', 'advanced' ] ) < 0 ) { |
| 917 |
tab = 'access_lists'; |
| 918 |
} |
| 919 |
choose_tab( tab, animation_speed ); |
| 920 |
|
| 921 |
// Hide/show multisite settings based on override checkbox. |
| 922 |
$( 'input[name="auth_settings[multisite_override]"]' ).change( function() { |
| 923 |
hide_multisite_settings_if_disabled(); |
| 924 |
}); |
| 925 |
hide_multisite_settings_if_disabled(); |
| 926 |
|
| 927 |
}); |
| 928 |
|
| 929 |
|
| 930 |
/** |
| 931 |
* Portions below from Bootstrap |
| 932 |
* http://getbootstrap.com/getting-started/#download |
| 933 |
*/ |
| 934 |
|
| 935 |
|
| 936 |
/*! |
| 937 |
* Bootstrap v3.1.1 (http://getbootstrap.com) |
| 938 |
* Copyright 2011-2014 Twitter, Inc. |
| 939 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
| 940 |
*/ |
| 941 |
|
| 942 |
if ( typeof jQuery === 'undefined' ) { throw new Error( 'Bootstrap\'s JavaScript requires jQuery' ) } |
| 943 |
|
| 944 |
/* ======================================================================== |
| 945 |
* Bootstrap: dropdown.js v3.1.1 |
| 946 |
* http://getbootstrap.com/javascript/#dropdowns |
| 947 |
* ======================================================================== |
| 948 |
* Copyright 2011-2014 Twitter, Inc. |
| 949 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
| 950 |
* ======================================================================== */ |
| 951 |
|
| 952 |
|
| 953 |
+function ($) { |
| 954 |
'use strict'; |
| 955 |
|
| 956 |
// DROPDOWN CLASS DEFINITION |
| 957 |
// ========================= |
| 958 |
|
| 959 |
var backdrop = '.dropdown-backdrop' |
| 960 |
var toggle = '[data-toggle=dropdown]' |
| 961 |
var Dropdown = function ( element ) { |
| 962 |
$( element ).on( 'click.bs.dropdown', this.toggle) |
| 963 |
} |
| 964 |
|
| 965 |
Dropdown.prototype.toggle = function ( e ) { |
| 966 |
var $this = $( this ) |
| 967 |
|
| 968 |
if ($this.is( '.disabled, :disabled' )) return |
| 969 |
|
| 970 |
var $parent = getParent($this) |
| 971 |
var isActive = $parent.hasClass( 'open' ) |
| 972 |
|
| 973 |
clearMenus() |
| 974 |
|
| 975 |
if (!isActive) { |
| 976 |
if ( 'ontouchstart' in document.documentElement && !$parent.closest( '.navbar-nav' ).length) { |
| 977 |
// if mobile we use a backdrop because click events don't delegate |
| 978 |
$( '<div class="dropdown-backdrop"/>' ).insertAfter($( this )).on( 'click', clearMenus) |
| 979 |
} |
| 980 |
|
| 981 |
var relatedTarget = { relatedTarget: this } |
| 982 |
$parent.trigger( e = $.Event( 'show.bs.dropdown', relatedTarget ) ) |
| 983 |
|
| 984 |
if (e.isDefaultPrevented()) return |
| 985 |
|
| 986 |
$parent |
| 987 |
.toggleClass( 'open' ) |
| 988 |
.trigger( 'shown.bs.dropdown', relatedTarget) |
| 989 |
|
| 990 |
$this.focus() |
| 991 |
} |
| 992 |
|
| 993 |
return false |
| 994 |
} |
| 995 |
|
| 996 |
Dropdown.prototype.keydown = function (e) { |
| 997 |
if (!/(38|40|27)/.test(e.keyCode)) return |
| 998 |
|
| 999 |
var $this = $( this ) |
| 1000 |
|
| 1001 |
e.preventDefault() |
| 1002 |
e.stopPropagation() |
| 1003 |
|
| 1004 |
if ($this.is( '.disabled, :disabled' )) return |
| 1005 |
|
| 1006 |
var $parent = getParent($this) |
| 1007 |
var isActive = $parent.hasClass( 'open' ) |
| 1008 |
|
| 1009 |
if (!isActive || (isActive && e.keyCode == 27)) { |
| 1010 |
if (e.which == 27) $parent.find(toggle).focus() |
| 1011 |
return $this.click() |
| 1012 |
} |
| 1013 |
|
| 1014 |
var desc = ' li:not(.divider):visible a' |
| 1015 |
var $items = $parent.find( '[role=menu]' + desc + ', [role=listbox]' + desc) |
| 1016 |
|
| 1017 |
if (!$items.length) return |
| 1018 |
|
| 1019 |
var index = $items.index($items.filter( ':focus' )) |
| 1020 |
|
| 1021 |
if (e.keyCode == 38 && index > 0) index-- // up |
| 1022 |
if (e.keyCode == 40 && index < $items.length - 1) index++ // down |
| 1023 |
if (!~index) index = 0 |
| 1024 |
|
| 1025 |
$items.eq(index).focus() |
| 1026 |
} |
| 1027 |
|
| 1028 |
function clearMenus(e) { |
| 1029 |
$(backdrop).remove() |
| 1030 |
$(toggle).each(function () { |
| 1031 |
var $parent = getParent($( this )) |
| 1032 |
var relatedTarget = { relatedTarget: this } |
| 1033 |
if (!$parent.hasClass( 'open' )) return |
| 1034 |
$parent.trigger(e = $.Event( 'hide.bs.dropdown', relatedTarget)) |
| 1035 |
if (e.isDefaultPrevented()) return |
| 1036 |
$parent.removeClass( 'open' ).trigger( 'hidden.bs.dropdown', relatedTarget) |
| 1037 |
}) |
| 1038 |
} |
| 1039 |
|
| 1040 |
function getParent($this) { |
| 1041 |
var selector = $this.attr( 'data-target' ) |
| 1042 |
|
| 1043 |
if (!selector) { |
| 1044 |
selector = $this.attr( 'href' ) |
| 1045 |
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '' ) //strip for ie7 |
| 1046 |
} |
| 1047 |
|
| 1048 |
var $parent = selector && $(selector) |
| 1049 |
|
| 1050 |
return $parent && $parent.length ? $parent : $this.parent() |
| 1051 |
} |
| 1052 |
|
| 1053 |
|
| 1054 |
// DROPDOWN PLUGIN DEFINITION |
| 1055 |
// ========================== |
| 1056 |
|
| 1057 |
var old = $.fn.dropdown |
| 1058 |
|
| 1059 |
$.fn.dropdown = function (option) { |
| 1060 |
return this.each(function () { |
| 1061 |
var $this = $( this ) |
| 1062 |
var data = $this.data( 'bs.dropdown' ) |
| 1063 |
|
| 1064 |
if (!data) $this.data( 'bs.dropdown', (data = new Dropdown( this ))) |
| 1065 |
if (typeof option == 'string' ) data[option].call($this) |
| 1066 |
}) |
| 1067 |
} |
| 1068 |
|
| 1069 |
$.fn.dropdown.Constructor = Dropdown |
| 1070 |
|
| 1071 |
|
| 1072 |
// DROPDOWN NO CONFLICT |
| 1073 |
// ==================== |
| 1074 |
|
| 1075 |
$.fn.dropdown.noConflict = function () { |
| 1076 |
$.fn.dropdown = old |
| 1077 |
return this |
| 1078 |
} |
| 1079 |
|
| 1080 |
|
| 1081 |
// APPLY TO STANDARD DROPDOWN ELEMENTS |
| 1082 |
// =================================== |
| 1083 |
|
| 1084 |
$(document) |
| 1085 |
.on( 'click.bs.dropdown.data-api', clearMenus) |
| 1086 |
.on( 'click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) |
| 1087 |
.on( 'click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) |
| 1088 |
.on( 'keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown) |
| 1089 |
|
| 1090 |
}(jQuery); |
| 1091 |
|