Changeset 3650
- Timestamp:
- 01/04/2011 12:33:48 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bp-xprofile.php
r3643 r3650 226 226 if ( !isset( $_POST['field_' . $field_id] ) ) { 227 227 228 if ( is_numeric( $_POST['field_' . $field_id . '_day'] ) ) {228 if ( !empty( $_POST['field_' . $field_id . '_day'] ) && is_numeric( $_POST['field_' . $field_id . '_day'] ) ) { 229 229 /* Concatenate the values. */ 230 230 $date_value = $_POST['field_' . $field_id . '_day'] . ' ' . … … 251 251 /* Now we've checked for required fields, lets save the values. */ 252 252 foreach ( (array)$posted_field_ids as $field_id ) { 253 if ( !xprofile_set_field_data( $field_id, $bp->displayed_user->id, $_POST['field_' . $field_id], $is_required[$field_id] ) ) 253 254 // Certain types of fields (checkboxes, multiselects) may come through empty. Save them as an empty array so that they don't get overwritten by the default on the next edit. 255 if ( empty( $_POST['field_' . $field_id] ) ) 256 $value = array(); 257 else 258 $value = $_POST['field_' . $field_id]; 259 260 if ( !xprofile_set_field_data( $field_id, $bp->displayed_user->id, $value, $is_required[$field_id] ) ) 254 261 $errors = true; 255 262 else 256 do_action( 'xprofile_profile_field_data_updated', $field_id, $ _POST['field_' . $field_id]);263 do_action( 'xprofile_profile_field_data_updated', $field_id, $value ); 257 264 } 258 265 … … 668 675 return false; 669 676 670 /* If the value is empty, then delete any field data that exists */ 671 if ( empty( $value ) ) { 677 $field = new BP_XProfile_Field( $field_id ); 678 679 // If the value is empty, then delete any field data that exists, unless the field is of a 680 // type where null values are semantically meaningful 681 if ( empty( $value ) && 'checkbox' != $field->type && 'multiselectbox' != $field->type ) { 672 682 xprofile_delete_field_data( $field_id, $user_id ); 673 683 return true; 674 684 } 675 676 $field = new BP_XProfile_Field( $field_id );677 685 678 686 /* Check the value is an acceptable value */ … … 688 696 unset( $value[$i] ); 689 697 } 690 691 if ( empty( $value ) )692 return false;693 698 694 699 /* Reset the keys by merging with an empty array */ -
trunk/bp-xprofile/bp-xprofile-templatetags.php
r3560 r3650 129 129 $field = $this->next_field(); 130 130 131 if ( !empty( $field->data->value ) ) { 131 $value = !empty( $field->data ) && !empty( $field->data->value ) ? maybe_unserialize( $field->data->value ) : false; 132 133 if ( !empty( $value ) ) { 132 134 $this->field_has_data = true; 133 } 134 else { 135 } else { 135 136 $this->field_has_data = false; 136 137 } … … 188 189 $css_classes[] = sanitize_title( esc_attr( $class ) ); 189 190 190 / * Set a class with the field ID */191 // Set a class with the field ID 191 192 $css_classes[] = 'field_' . $profile_template->field->id; 192 193 193 / * Set a class with the field name (sanitized) */194 // Set a class with the field name (sanitized) 194 195 $css_classes[] = 'field_' . sanitize_title( $profile_template->field->name ); 195 196 … … 360 361 } 361 362 363 /** 364 * bp_the_profile_field_options() 365 * 366 * Displays field options HTML for field types of 'selectbox', 'multiselectbox', 367 * 'radio', 'checkbox', and 'datebox'. 368 * 369 * @package BuddyPress Xprofile 370 * @since 1.1 371 * 372 * @uses bp_get_the_profile_field_options() 373 * 374 * @param array $args Specify type for datebox. Allowed 'day', 'month', 'year'. 375 */ 362 376 function bp_the_profile_field_options( $args = '' ) { 363 377 echo bp_get_the_profile_field_options( $args ); 364 378 } 379 /** 380 * bp_get_the_profile_field_options() 381 * 382 * Retrieves field options HTML for field types of 'selectbox', 'multiselectbox', 383 * 'radio', 'checkbox', and 'datebox'. 384 * 385 * @package BuddyPress Xprofile 386 * @since 1.1 387 * 388 * @uses BP_XProfile_Field::get_children() 389 * @uses BP_XProfile_ProfileData::get_value_byid() 390 * 391 * @param array $args Specify type for datebox. Allowed 'day', 'month', 'year'. 392 */ 365 393 function bp_get_the_profile_field_options( $args = '' ) { 366 394 global $field; … … 378 406 $options = $field->get_children(); 379 407 408 // Setup some defaults 409 $html = ''; 410 $selected = ''; 411 380 412 switch ( $field->type ) { 381 413 … … 385 417 386 418 for ( $k = 0; $k < count($options); $k++ ) { 387 $o ption_values = maybe_unserialize( BP_XProfile_ProfileData::get_value_byid( $options[$k]->parent_id ) );388 $option_values = (array) $option_values;389 390 / * Check for updated posted values, but errors preventing them from being saved first time */391 foreach( (array)$option_values as $i => $option_value ) {419 $original_option_values = maybe_unserialize( BP_XProfile_ProfileData::get_value_byid( $options[$k]->parent_id ) ); 420 $option_values = (array) $original_option_values; 421 422 // Check for updated posted values, but errors preventing them from being saved first time 423 foreach( $option_values as $i => $option_value ) { 392 424 if ( isset( $_POST['field_' . $field->id] ) && $_POST['field_' . $field->id] != $option_value ) { 393 425 if ( !empty( $_POST['field_' . $field->id] ) ) … … 396 428 } 397 429 398 if ( in_array( $options[$k]->name, (array)$option_values ) || $options[$k]->is_default_option ) { 430 $selected = ''; 431 432 // First, check to see whether the user-entered value 433 // matches 434 if ( in_array( $options[$k]->name, (array) $option_values ) ) 399 435 $selected = ' selected="selected"'; 400 } else { 401 $selected = ''; 402 } 403 404 $html .= apply_filters( 'bp_get_the_profile_field_options_select', '<option' . $selected . ' value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '">' . stripslashes( esc_attr( $options[$k]->name ) ) . '</option>', $options[$k] ); 436 437 // Then, if the user has not provided a value, check for 438 // defaults 439 if ( !is_array( $original_option_values ) && empty( $option_values ) & $options[$k]->is_default_option ) 440 $selected = ' selected="selected"'; 441 442 $html .= apply_filters( 'bp_get_the_profile_field_options_select', '<option' . $selected . ' value="' . esc_attr( stripslashes( $options[$k]->name ) ) . '">' . esc_attr( stripslashes( $options[$k]->name ) ) . '</option>', $options[$k] ); 405 443 } 406 444 break; 407 445 408 446 case 'radio': 409 $html = '<div id="field_' . $field->id . '">';447 $html .= '<div id="field_' . $field->id . '">'; 410 448 411 449 for ( $k = 0; $k < count($options); $k++ ) { 412 450 $option_value = BP_XProfile_ProfileData::get_value_byid($options[$k]->parent_id); 413 451 414 / * Check for updated posted values, but errors preventing them from being saved first time */452 // Check for updated posted values, but errors preventing them from being saved first time 415 453 if ( isset( $_POST['field_' . $field->id] ) && $option_value != $_POST['field_' . $field->id] ) { 416 454 if ( !empty( $_POST['field_' . $field->id] ) ) 417 455 $option_value = $_POST['field_' . $field->id]; 418 456 } 419 420 if ( $option_value == $options[$k]->name || $value == $options[$k]->name || ( empty( $option_value ) && $options[$k]->is_default_option ) ) { 457 458 $selected = ''; 459 if ( $option_value == $options[$k]->name || !empty( $value ) && $value == $options[$k]->name || ( empty( $option_value ) && $options[$k]->is_default_option ) ) 421 460 $selected = ' checked="checked"'; 422 } else { 423 $selected = ''; 424 } 425 426 $html .= apply_filters( 'bp_get_the_profile_field_options_radio', '<label><input' . $selected . ' type="radio" name="field_' . $field->id . '" id="option_' . $options[$k]->id . '" value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '"> ' . stripslashes( esc_attr( $options[$k]->name ) ) . '</label>', $options[$k] ); 461 462 $html .= apply_filters( 'bp_get_the_profile_field_options_radio', '<label><input' . $selected . ' type="radio" name="field_' . $field->id . '" id="option_' . $options[$k]->id . '" value="' . esc_attr( stripslashes( $options[$k]->name ) ) . '"> ' . esc_attr( stripslashes( $options[$k]->name ) ) . '</label>', $options[$k] ); 427 463 } 428 464 … … 433 469 $option_values = BP_XProfile_ProfileData::get_value_byid($options[0]->parent_id); 434 470 435 / * Check for updated posted values, but errors preventing them from being saved first time */471 // Check for updated posted values, but errors preventing them from being saved first time 436 472 if ( isset( $_POST['field_' . $field->id] ) && $option_values != maybe_serialize( $_POST['field_' . $field->id] ) ) { 437 473 if ( !empty( $_POST['field_' . $field->id] ) ) … … 440 476 441 477 $option_values = maybe_unserialize($option_values); 442 443 $html = ''; 478 444 479 for ( $k = 0; $k < count($options); $k++ ) { 445 480 $selected = ''; 481 482 // First, check to see whether the user's saved values 483 // match the option 446 484 for ( $j = 0; $j < count($option_values); $j++ ) { 447 if ( $option_values[$j] == $options[$k]->name || @in_array( $options[$k]->name, $value ) || $options[$k]->is_default_option) {485 if ( $option_values[$j] == $options[$k]->name || @in_array( $options[$k]->name, $value ) ) { 448 486 $selected = ' checked="checked"'; 449 487 break; 450 488 } 451 489 } 452 453 $html .= apply_filters( 'bp_get_the_profile_field_options_checkbox', '<label><input' . $selected . ' type="checkbox" name="field_' . $field->id . '[]" id="field_' . $options[$k]->id . '_' . $k . '" value="' . stripslashes( esc_attr( $options[$k]->name ) ) . '"> ' . stripslashes( esc_attr( $options[$k]->name ) ) . '</label>', $options[$k] ); 454 $selected = ''; 490 491 // If the user has not yet supplied a value for this field, 492 // check to see whether there is a default value available 493 if ( !is_array( $option_values ) && empty( $option_values ) && !$selected && $options[$k]->is_default_option) { 494 $selected = ' checked="checked"'; 495 } 496 497 $html .= apply_filters( 'bp_get_the_profile_field_options_checkbox', '<label><input' . $selected . ' type="checkbox" name="field_' . $field->id . '[]" id="field_' . $options[$k]->id . '_' . $k . '" value="' . esc_attr( stripslashes( $options[$k]->name ) ) . '"> ' . esc_attr( stripslashes( $options[$k]->name ) ) . '</label>', $options[$k] ); 455 498 } 456 499 break; 457 500 458 501 case 'datebox': 459 460 if ( !empty( $field->data->value ) ) { 461 $day = date("j", $field->data->value); 462 $month = date("F", $field->data->value); 463 $year = date("Y", $field->data->value); 464 $default_select = ' selected="selected"'; 465 } 466 467 /* Check for updated posted values, but errors preventing them from being saved first time */ 502 $date = BP_XProfile_ProfileData::get_value_byid( $field->id ); 503 504 // Set day, month, year defaults 505 $day = ''; 506 $month = ''; 507 $year = ''; 508 509 if ( !empty( $date ) ) { 510 $day = date( 'j', $date ); 511 $month = date( 'F', $date ); 512 $year = date( 'Y', $date ); 513 } 514 515 // Check for updated posted values, but errors preventing them from being saved first time 468 516 if ( !empty( $_POST['field_' . $field->id . '_day'] ) ) { 469 517 if ( $day != $_POST['field_' . $field->id . '_day'] ) … … 483 531 switch ( $type ) { 484 532 case 'day': 485 $html .= '<option value=""' . esc_attr( $default_select) . '>--</option>';533 $html .= '<option value=""' . selected( $day, '', false ) . '>--</option>'; 486 534 487 535 for ( $i = 1; $i < 32; $i++ ) { 488 if ( $day == $i ) { 489 $selected = ' selected = "selected"'; 490 } else { 491 $selected = ''; 492 } 493 $html .= '<option value="' . $i .'"' . $selected . '>' . $i . '</option>'; 536 $html .= '<option value="' . $i .'"' . selected( $day, $i, false ) . '>' . $i . '</option>'; 494 537 } 495 538 break; … … 504 547 ); 505 548 506 $html .= '<option value=""' . esc_attr( $default_select) . '>------</option>';549 $html .= '<option value=""' . selected( $month, '', false ) . '>------</option>'; 507 550 508 551 for ( $i = 0; $i < 12; $i++ ) { 509 if ( $month == $eng_months[$i] ) { 510 $selected = ' selected = "selected"'; 511 } else { 512 $selected = ''; 513 } 514 515 $html .= '<option value="' . $eng_months[$i] . '"' . $selected . '>' . $months[$i] . '</option>'; 552 $html .= '<option value="' . $eng_months[$i] . '"' . selected( $month, $eng_months[$i], false ) . '>' . $months[$i] . '</option>'; 516 553 } 517 554 break; 518 555 519 556 case 'year': 520 $html .= '<option value=""' . esc_attr( $default_select ) . '>----</option>'; 521 522 for ( $i = date( 'Y', time() ); $i > 1899; $i-- ) { 523 if ( $year == $i ) { 524 $selected = ' selected = "selected"'; 525 } else { 526 $selected = ''; 527 } 528 529 $html .= '<option value="' . $i .'"' . $selected . '>' . $i . '</option>'; 557 $html .= '<option value=""' . selected( $year, '', false ) . '>----</option>'; 558 559 for ( $i = date( 'Y' ); $i > 1899; $i-- ) { 560 $html .= '<option value="' . $i .'"' . selected( $year, $i, false ) . '>' . $i . '</option>'; 530 561 } 531 562 break; 532 563 } 533 564 534 apply_filters( 'bp_get_the_profile_field_datebox', $html, $day, $month, $year, $default_select);565 $html = apply_filters( 'bp_get_the_profile_field_datebox', $html, $type, $day, $month, $year ); 535 566 536 567 break;
Note: See TracChangeset
for help on using the changeset viewer.