Changeset 5789 for trunk/bp-xprofile/bp-xprofile-classes.php
- Timestamp:
- 02/15/2012 08:33:09 PM (14 years ago)
- File:
-
- 1 edited
-
trunk/bp-xprofile/bp-xprofile-classes.php (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-xprofile/bp-xprofile-classes.php
r5750 r5789 115 115 116 116 $defaults = array( 117 'profile_group_id' => false, 118 'user_id' => bp_displayed_user_id(), 119 'hide_empty_groups' => false, 120 'hide_empty_fields' => false, 121 'fetch_fields' => false, 122 'fetch_field_data' => false, 123 'exclude_groups' => false, 124 'exclude_fields' => false 117 'profile_group_id' => false, 118 'user_id' => bp_displayed_user_id(), 119 'hide_empty_groups' => false, 120 'hide_empty_fields' => false, 121 'fetch_fields' => false, 122 'fetch_field_data' => false, 123 'fetch_privacy_level' => false, 124 'exclude_groups' => false, 125 'exclude_fields' => false 125 126 ); 126 127 … … 152 153 if ( empty( $group_ids ) ) 153 154 return $groups; 154 155 $exclude_fields_sql = ''; 156 if ( !empty( $exclude_fields ) ) 157 $exclude_fields_sql = $wpdb->prepare( "AND id NOT IN ({$exclude_fields})" ); 155 156 // Support arrays and comma-separated strings 157 if ( !empty( $exclude_fields ) && !is_array( $exclude_fields ) ) { 158 $exclude_fields = explode( ',', $exclude_fields ); 159 } 160 161 // Sanitization - ensure that each field_id passed is an integer 162 $exclude_fields_cs = array(); 163 foreach( (array)$exclude_fields as $exclude_field ) { 164 $efint = (int)$exclude_field; 165 if ( !empty( $efint ) ) { 166 $exclude_fields_cs[] = $efint; 167 } 168 } 169 170 // Privacy - Handled here so as not to be overridden by sloppy use of the 171 // exclude_fields parameter. See bp_xprofile_get_hidden_fields_for_user() 172 $exclude_fields_cs = array_merge( $exclude_fields_cs, bp_xprofile_get_hidden_fields_for_user( $user_id ) ); 173 174 $exclude_fields_cs = implode( ',', $exclude_fields_cs ); 175 176 if ( !empty( $exclude_fields_cs ) ) { 177 $exclude_fields_sql = $wpdb->prepare( "AND id NOT IN ({$exclude_fields_cs})" ); 178 } else { 179 $exclude_fields_sql = ''; 180 } 158 181 159 182 // Fetch the fields … … 173 196 174 197 if ( !empty( $field_ids ) ) 175 $field_data = $wpdb->get_results( $wpdb->prepare( "SELECT field_id, value FROM {$bp->profile->table_name_data} WHERE field_id IN ( {$field_ids_sql} ) AND user_id = %d", $user_id ) );198 $field_data = $wpdb->get_results( $wpdb->prepare( "SELECT id, field_id, value FROM {$bp->profile->table_name_data} WHERE field_id IN ( {$field_ids_sql} ) AND user_id = %d", $user_id ) ); 176 199 177 200 // Remove data-less fields, if necessary … … 211 234 212 235 // Assign correct data value to the field 213 if ( $field->id == $data->field_id ) 236 if ( $field->id == $data->field_id ) { 214 237 $fields[$field_key]->data->value = $data->value; 238 $fields[$field_key]->data->id = $data->id; 239 } 215 240 } 241 } 242 243 if ( $fetch_privacy_level ) { 244 $fields = self::fetch_privacy_level( $user_id, $fields ); 216 245 } 217 246 } … … 264 293 return $wpdb->query( $wpdb->prepare( "UPDATE {$bp->profile->table_name_groups} SET group_order = %d WHERE id = %d", $position, $field_group_id ) ); 265 294 } 266 295 296 /** 297 * Fetch the field privacy level for the returned fielddata 298 */ 299 function fetch_privacy_level( $user_id, $fields ) { 300 global $wpdb, $bp; 301 302 // Get the user's privacy level preferences 303 $privacy_levels = get_user_meta( $user_id, 'bp_xprofile_privacy_levels', true ); 304 305 foreach( (array)$fields as $key => $field ) { 306 // Look to see if the user has set the privacy for this field 307 if ( isset( $privacy_levels[$field->id] ) ) { 308 $field_privacy = $privacy_levels[$field->id]; 309 } else { 310 // If not, bring up the admin-set defaults 311 if ( !isset( $default_privacy_levels ) ) { 312 $default_privacy_levels = self::fetch_default_privacy_levels(); 313 } 314 315 // If no admin-set default is saved, fall back on a global default 316 $field_privacy = !empty( $default_privacy_levels[$field->id] ) ? $default_privacy_levels[$field->id] : apply_filters( 'bp_xprofile_default_privacy_level', 'public' ); 317 } 318 319 $fields[$key]->privacy_level = $field_privacy; 320 } 321 322 return $fields; 323 } 324 325 /** 326 * Fetch the admin-set default privacy levels for all fields 327 */ 328 function fetch_default_privacy_levels() { 329 global $wpdb, $bp; 330 331 $levels = $wpdb->get_results( $wpdb->prepare( "SELECT object_id, meta_value FROM {$bp->profile->table_name_meta} WHERE object_type = 'field' AND meta_key = 'default_privacy'" ) ); 332 333 // Arrange so that the field id is the key and the privacy level the value 334 $default_privacy_levels = array(); 335 foreach( $levels as $level ) { 336 $default_privacy_levels[$level->object_id] = $level->meta_value; 337 } 338 339 return $default_privacy_levels; 340 } 341 267 342 /* ADMIN AREA HTML. 268 343 * TODO: Get this out of here and replace with standard loops … … 344 419 var $order_by; 345 420 var $is_default_option; 421 var $default_privacy; 346 422 347 423 var $data; … … 381 457 $this->data = $this->get_field_data( $user_id ); 382 458 } 459 460 $this->default_privacy = bp_xprofile_get_meta( $id, 'field', 'default_privacy' ); 461 462 if ( empty( $this->default_privacy ) ) { 463 $this->default_privacy = 'public'; 464 } 383 465 } 384 466 } … … 639 721 if ( $this->type != $type ) { 640 722 $class = 'display: none;'; 723 } 724 725 if ( empty( $this->default_privacy ) ) { 726 $this->default_privacy = 'public'; 641 727 } 642 728 … … 788 874 <?php } ?> 789 875 876 <?php /* The fullname field cannot be hidden */ ?> 877 <?php if ( 1 != $this->id ) : ?> 878 879 <div id="titlediv"> 880 <h3><label for="default-privacy"><?php _e( "Default Privacy Level", 'buddypress' ); ?></label></h3> 881 <div id="titlewrap"> 882 <ul> 883 <?php foreach( bp_xprofile_get_privacy_levels() as $level ) : ?> 884 <li><input type="radio" name="default-privacy" value="<?php echo esc_attr( $level['id'] ) ?>" <?php checked( $this->default_privacy, $level['id'] ) ?>> <?php echo esc_html( $level['label'] ) ?></li> 885 <?php endforeach ?> 886 </ul> 887 </div> 888 </div> 889 890 <?php endif ?> 891 790 892 <p class="submit"> 791 893 <input type="hidden" name="field_order" id="field_order" value="<?php echo esc_attr( $this->field_order ); ?>" /> … … 968 1070 return $profile_data; 969 1071 } 1072 1073 /** 1074 * Get the user's field data id by the id of the xprofile field 1075 * 1076 * @param int $field_id 1077 * @param int $user_id 1078 * @return int $fielddata_id 1079 */ 1080 function get_fielddataid_byid( $field_id, $user_id ) { 1081 global $wpdb, $bp; 1082 1083 if ( empty( $field_id ) || empty( $user_id ) ) { 1084 $fielddata_id = 0; 1085 } else { 1086 $fielddata_id = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->profile->table_name_data} WHERE field_id = %d AND user_id = %d", $field_id, $user_id ) ); 1087 } 1088 1089 return $fielddata_id; 1090 } 970 1091 971 1092 function get_value_byid( $field_id, $user_ids = null ) {
Note: See TracChangeset
for help on using the changeset viewer.