Changeset 10332
- Timestamp:
- 11/11/2015 03:35:47 AM (11 years ago)
- Location:
- branches/2.2
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/src/bp-settings/bp-settings-actions.php
r9355 r10332 295 295 check_admin_referer( 'bp_settings_notifications' ); 296 296 297 if ( isset( $_POST['notifications'] ) ) { 298 foreach ( (array) $_POST['notifications'] as $key => $value ) { 299 bp_update_user_meta( (int) bp_displayed_user_id(), $key, $value ); 300 } 301 } 297 bp_settings_update_notification_settings( bp_displayed_user_id(), (array) $_POST['notifications'] ); 302 298 303 299 // Switch feedback for super admins -
branches/2.2/src/bp-settings/bp-settings-functions.php
r9351 r10332 10 10 // Exit if accessed directly 11 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Update email notification settings for a specific user. 15 * 16 * @since 2.2.4 17 * 18 * @param int $user_id ID of the user whose settings are being updated. 19 * @param array $settings Settings array. 20 */ 21 function bp_settings_update_notification_settings( $user_id, $settings ) { 22 $user_id = (int) $user_id; 23 24 $settings = bp_settings_sanitize_notification_settings( $settings ); 25 foreach ( $settings as $setting_key => $setting_value ) { 26 bp_update_user_meta( $user_id, $setting_key, $setting_value ); 27 } 28 } 29 30 /** 31 * Sanitize email notification settings as submitted by a user. 32 * 33 * @since 2.2.4 34 * 35 * @param array $settings Array of settings. 36 * @return array Sanitized settings. 37 */ 38 function bp_settings_sanitize_notification_settings( $settings = array() ) { 39 $sanitized_settings = array(); 40 41 if ( empty( $settings ) ) { 42 return $sanitized_settings; 43 } 44 45 // Get registered notification keys. 46 $registered_notification_settings = bp_settings_get_registered_notification_keys(); 47 48 /* 49 * We sanitize values for core notification keys. 50 * 51 * @todo use register_meta() 52 */ 53 $core_notification_settings = array( 54 'notification_messages_new_message', 55 'notification_activity_new_mention', 56 'notification_activity_new_reply', 57 'notification_groups_invite', 58 'notification_groups_group_updated', 59 'notification_groups_admin_promotion', 60 'notification_groups_membership_request', 61 'notification_membership_request_completed', 62 'notification_friends_friendship_request', 63 'notification_friends_friendship_accepted', 64 ); 65 66 foreach ( (array) $settings as $key => $value ) { 67 // Skip if not a registered setting. 68 if ( ! in_array( $key, $registered_notification_settings, true ) ) { 69 continue; 70 } 71 72 // Force core keys to 'yes' or 'no' values. 73 if ( in_array( $key, $core_notification_settings, true ) ) { 74 $value = 'yes' === $value ? 'yes' : 'no'; 75 } 76 77 $sanitized_settings[ $key ] = $value; 78 } 79 80 return $sanitized_settings; 81 } 82 83 /** 84 * Build a dynamic whitelist of notification keys, based on what's hooked to 'bp_notification_settings'. 85 * 86 * @since 2.2.4 87 * 88 * @return array 89 */ 90 function bp_settings_get_registered_notification_keys() { 91 92 ob_start(); 93 do_action( 'bp_notification_settings' ); 94 $screen = ob_get_clean(); 95 96 $matched = preg_match_all( '/<input[^>]+name="notifications\[([^\]]+)\]/', $screen, $matches ); 97 98 if ( $matched && isset( $matches[1] ) ) { 99 $key_whitelist = $matches[1]; 100 } else { 101 $key_whitelist = array(); 102 } 103 104 return $key_whitelist; 105 }
Note: See TracChangeset
for help on using the changeset viewer.