Changeset 2633
- Timestamp:
- 02/26/2016 12:57:40 AM (9 years ago)
- Location:
- sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments
- Files:
-
- 1 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments
-
Property
svn:mergeinfo
set to
/sites/branches/wcb-payment-request-statuses/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments merged eligible
-
Property
svn:mergeinfo
set to
-
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments/css/wordcamp-budgets.css
r2605 r2633 12 12 #submitpost.wcb .misc-pub-section input { 13 13 width: 100%; 14 } 15 16 #submitpost.wcb .misc-pub-section select { 17 font-weight: normal; 18 } 19 20 #wcb-save-draft { 21 float: left; 14 22 } 15 23 -
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments/includes/payment-request.php
r2628 r2633 8 8 9 9 const POST_TYPE = 'wcp_payment_request'; 10 11 // @see https://core.trac.wordpress.org/ticket/19074 12 public static $transition_post_status = array(); 10 13 11 14 public function __construct() { … … 20 23 21 24 // Saving posts 22 add_filter( 'wp_insert_post_data', array( $this, 'update_request_status' ), 10, 2 ); 23 add_filter( 'wp_insert_post_data', array( $this, 'ensure_post_date_gmt_set' ), 10, 2 ); 25 add_filter( 'wp_insert_post_data', array( $this, 'wp_insert_post_data' ), 10, 2 ); 24 26 add_action( 'save_post', array( $this, 'save_payment' ), 10, 2 ); 25 27 add_filter( 'map_meta_cap', array( $this, 'modify_capabilities' ), 10, 4 ); … … 75 77 */ 76 78 public static function register_post_statuses() { 79 // Uses core's draft status. 80 81 register_post_status( 'wcb-incomplete', array ( 82 'label' => _x( 'Incomplete', 'payment request', 'wordcamporg' ), 83 'public' => false, 84 'protected' => true, 85 'label_count' => _nx_noop( 86 'Incomplete <span class="count">(%s)</span>', 87 'Incomplete <span class="count">(%s)</span>', 88 'wordcamporg' 89 ), 90 ) ); 91 92 register_post_status( 'wcb-pending-approval', array ( 93 'label' => _x( 'Pending Approval', 'payment request', 'wordcamporg' ), 94 'public' => false, 95 'protected' => true, 96 'label_count' => _nx_noop( 97 'Pending Approval <span class="count">(%s)</span>', 98 'Pending Approval <span class="count">(%s)</span>', 99 'wordcamporg' 100 ), 101 ) ); 102 103 register_post_status( 'wcb-approved', array ( 104 'label' => _x( 'Approved', 'payment request', 'wordcamporg' ), 105 'public' => false, 106 'protected' => true, 107 'label_count' => _nx_noop( 108 'Approved <span class="count">(%s)</span>', 109 'Approved <span class="count">(%s)</span>', 110 'wordcamporg' 111 ), 112 ) ); 113 114 register_post_status( 'wcb-pending-payment', array ( 115 'label' => _x( 'Pending Payment', 'payment request', 'wordcamporg' ), 116 'public' => false, 117 'protected' => true, 118 'label_count' => _nx_noop( 119 'Pending Payment <span class="count">(%s)</span>', 120 'Pending Payment <span class="count">(%s)</span>', 121 'wordcamporg' 122 ), 123 ) ); 124 125 register_post_status( 'wcb-paid', array ( 126 'label' => _x( 'Paid', 'payment request', 'wordcamporg' ), 127 'public' => false, 128 'protected' => true, 129 'label_count' => _nx_noop( 130 'Paid <span class="count">(%s)</span>', 131 'Paid <span class="count">(%s)</span>', 132 'wordcamporg' 133 ), 134 ) ); 135 136 register_post_status( 'wcb-failed', array ( 137 'label' => _x( 'Failed', 'payment request', 'wordcamporg' ), 138 'public' => false, 139 'protected' => true, 140 'label_count' => _nx_noop( 141 'Failed <span class="count">(%s)</span>', 142 'Failed <span class="count">(%s)</span>', 143 'wordcamporg' 144 ), 145 ) ); 146 147 register_post_status( 'wcb-cancelled', array ( 148 'label' => _x( 'Cancelled', 'payment request', 'wordcamporg' ), 149 'public' => false, 150 'protected' => true, 151 'label_count' => _nx_noop( 152 'Cancelled <span class="count">(%s)</span>', 153 'Cancelled <span class="count">(%s)</span>', 154 'wordcamporg' 155 ), 156 ) ); 157 158 // Legacy statuses 77 159 register_post_status( 78 160 'paid', … … 125 207 ); 126 208 127 if ( 'incomplete' != $post->post_status && current_user_can( 'manage_network' ) ) {128 add_meta_box(129 'wcp_mark_incomplete',130 __( 'Mark as Incomplete', 'wordcamporg' ),131 array( $this, 'render_mark_incomplete_metabox' ),132 self::POST_TYPE,133 'side',134 'high'135 );136 }137 138 209 add_meta_box( 139 210 'wcp_general_info', … … 206 277 wp_nonce_field( 'status', 'status_nonce' ); 207 278 208 $delete_text = EMPTY_TRASH_DAYS ? __( 'Move to Trash' ) : __( 'Delete Permanently' ); 209 $submit_text = 'auto-draft' == $post->post_status ? __( 'Submit Request', 'wordcamporg' ) : __( 'Update Request', 'wordcamporg' ); 210 $current_user_can_edit_request = 'paid' != $post->post_status || current_user_can( 'manage_network' ); 279 $back_compat_statuses = array( 280 'unpaid' => 'draft', 281 'incomplete' => 'wcb-incomplete', 282 'paid' => 'wcb-paid', 283 ); 284 285 // Map old statuses to new statuses. 286 if ( array_key_exists( $post->post_status, $back_compat_statuses ) ) { 287 $post->post_status = $back_compat_statuses[ $post->post_status ]; 288 } 289 290 $editable_statuses = array( 'auto-draft', 'draft', 'wcb-incomplete' ); 291 $current_user_can_edit_request = false; 292 $submit_text = _x( 'Update', 'payment request', 'wordcamporg' ); 293 294 if ( current_user_can( 'manage_network' ) ) { 295 $current_user_can_edit_request = true; 296 } elseif ( in_array( $post->post_status, $editable_statuses ) ) { 297 $submit_text = __( 'Submit for Review', 'wordcamporg' ); 298 $current_user_can_edit_request = true; 299 } 211 300 212 301 $date_vendor_paid = get_post_meta( $post->ID, '_camppayments_date_vendor_paid', true ); … … 217 306 } 218 307 308 $incomplete_notes = get_post_meta( $post->ID, '_wcp_incomplete_notes', true ); 309 $incomplete_readonly = ! current_user_can( 'manage_network' ) ? 'readonly' : ''; 310 219 311 require_once( dirname( __DIR__ ) . '/views/payment-request/metabox-status.php' ); 220 312 } 221 313 222 /** 223 * Render the Mark as Incomplete metabox 224 * 225 * @param WP_Post $post 226 */ 227 public function render_mark_incomplete_metabox( $post ) { 228 wp_nonce_field( 'mark_incomplete', 'mark_incomplete_nonce' ); 229 230 require_once( dirname( __DIR__ ) . '/views/payment-request/metabox-mark-incomplete.php' ); 314 public static function get_post_statuses() { 315 return array( 316 'draft', 317 'wcb-incomplete', 318 'wcb-pending-approval', 319 'wcb-approved', 320 'wcb-pending-payment', 321 'wcb-paid', 322 'wcb-failed', 323 'wcb-cancelled', 324 ); 231 325 } 232 326 … … 476 570 global $post; 477 571 478 if ( 'paid' == $post->post_status && 'paid' != get_query_var( 'post_status' ) ) { 479 $states['paid'] = __( 'Paid', 'wordcamporg' ); 480 } 481 482 if ( 'unpaid' == $post->post_status && 'unpaid' != get_query_var( 'post_status' ) ) { 483 $states['unpaid'] = __( 'Unpaid', 'wordcamporg' ); 484 } 485 486 if ( 'incomplete' == $post->post_status && 'incomplete' != get_query_var( 'post_status' ) ) { 487 $states['incomplete'] = __( 'Incomplete', 'wordcamporg' ); 572 if ( $post->post_type != self::POST_TYPE ) 573 return $states; 574 575 // Back-compat 576 $back_compat_statuses = array( 577 'unpaid' => 'draft', 578 'incomplete' => 'wcb-incomplete', 579 'paid' => 'wcb-paid', 580 ); 581 582 // Map old statuses to new statuses. 583 if ( array_key_exists( $post->post_status, $back_compat_statuses ) ) { 584 $post->post_status = $back_compat_statuses[ $post->post_status ]; 585 } 586 587 $status = get_post_status_object( $post->post_status ); 588 if ( get_query_var( 'post_status' ) != $post->post_status ) { 589 $states[ $status->name ] = $status->label; 488 590 } 489 591 … … 492 594 493 595 /** 494 * Set the request's status based on whether the vendor has been paid.495 596 * 496 597 * @param array $post_data 497 598 * @param array $post_data_raw 599 * 498 600 * @return array 499 601 */ 500 public function update_request_status( $post_data, $post_data_raw ) { 501 if ( WordCamp_Budgets::post_edit_is_actionable( $post_data, self::POST_TYPE ) ) { 502 if ( $this->should_mark_request_incomplete() ) { 503 $post_data['post_status'] = 'incomplete'; 504 $this->notify_requester_request_incomplete( $post_data_raw['ID'], $post_data, $post_data_raw ); 505 506 update_post_meta( $post_data_raw['ID'], '_wcp_incomplete_notes', sanitize_text_field( $post_data_raw['wcp_mark_incomplete_notes'] ) ); 507 } else { 508 $previous_status = $post_data['post_status']; 509 $valid_paid_date = false !== strtotime( sanitize_text_field( $_POST['date_vendor_paid'] ) ); 510 // todo realign 511 512 if ( current_user_can( 'manage_network' ) && $valid_paid_date ) { 513 $post_data['post_status'] = 'paid'; 514 } else { 515 $post_data['post_status'] = 'unpaid'; 516 } 517 518 if ( 'paid' != $previous_status && 'paid' == $post_data['post_status'] ) { 519 $this->notify_requester_payment_made( $post_data_raw['ID'], $post_data ); 520 } 521 } 522 } 523 524 return $post_data; 525 } 526 527 /** 528 * Ensure that new posts have the `post_date_gmt` field populated. 529 * 530 * Core only handles this for post types that use the `draft` status (see r8636). 531 * 532 * @param array $post_data 533 * @param array $post_data_raw 534 * 535 * @return array 536 */ 537 public function ensure_post_date_gmt_set( $post_data, $post_data_raw ) { 602 public function wp_insert_post_data( $post_data, $post_data_raw ) { 603 if ( $post_data['post_type'] != self::POST_TYPE ) 604 return $post_data; 605 606 // Ensure that new posts have the `post_date_gmt` field populated. 538 607 if ( 'auto-draft' !== $post_data['post_status'] ) { 539 608 if ( '0000-00-00 00:00:00' === $post_data['post_date_gmt'] ) { … … 542 611 } 543 612 613 // Save Draft button was clicked. 614 if ( ! empty( $post_data_raw['wcb-save-draft'] ) ) { 615 $post_data['post_status'] = 'draft'; 616 } 617 618 // Submit for Review button was clicked. 619 if ( ! current_user_can( 'manage_network' ) ) { 620 $editable_statuses = array( 'auto-draft', 'draft', 'wcb-incomplete' ); 621 if ( ! empty( $post_data_raw['wcb-update'] ) && in_array( $post_data['post_status'], $editable_statuses ) ) { 622 $post_data['post_status'] = 'wcb-pending-approval'; 623 } 624 } 625 544 626 return $post_data; 545 627 } 546 628 547 629 /** 548 * Determine if the user wants to mark a vendor payment as incomplete, and if that is valid 549 * 550 * @return bool 551 */ 552 protected function should_mark_request_incomplete() { 553 $mark_incomplete = false; 554 555 if ( isset( $_POST['wcp_mark_incomplete_checkbox'] ) && 'on' == $_POST['wcp_mark_incomplete_checkbox'] && ! empty( $_POST['wcp_mark_incomplete_notes'] ) ) { 556 if ( isset( $_POST['mark_incomplete_nonce'] ) && wp_verify_nonce( $_POST['mark_incomplete_nonce'], 'mark_incomplete' ) ) { 557 if ( current_user_can( 'manage_network' ) ) { 558 $mark_incomplete = true; 630 * Notify the payment requester that it has been marked as paid. 631 * 632 * @param int|WP_Post $post 633 */ 634 protected function notify_requester_payment_made( $post ) { 635 $post = get_post( $post ); 636 637 if ( ! $to = WordCamp_Budgets::get_requester_formatted_email( $post->post_author ) ) { 638 return; 639 } 640 641 $subject = sprintf( '"%s" has been paid', $post->post_title ); 642 $headers = array( 'Reply-To: support@wordcamp.org' ); 643 644 $message = sprintf( 645 "The request for \"%s\" has been marked as paid by WordCamp Central. 646 647 You can view the request at: 648 649 %s 650 651 If you have any questions, please reply to let us know.", 652 $post->post_title, 653 admin_url( sprintf( 'post.php?post=%s&action=edit', $post->ID ) ) 654 ); 655 $message = str_replace( "\t", '', $message ); 656 657 wp_mail( $to, $subject, $message, $headers ); 658 } 659 660 /** 661 * Notify the payment requester that it has been marked as paid. 662 * 663 * @param int|WP_Post $post 664 */ 665 protected function notify_requester_request_incomplete( $post ) { 666 $post = get_post( $post ); 667 668 if ( ! $to = WordCamp_Budgets::get_requester_formatted_email( $post->post_author ) ) { 669 return; 670 } 671 672 $subject = sprintf( '"%s" is incomplete', $post->post_title ); 673 $headers = array( 'Reply-To: support@wordcamp.org' ); 674 $notes = get_post_meta( $post->ID, '_wcp_incomplete_notes', true ); 675 676 $message = sprintf( 677 "The request for \"%s\" has been marked as incomplete by WordCamp Central. 678 679 The reason for this is: %s 680 681 You can complete the request at: 682 683 %s 684 685 If you have any questions, please reply to let us know.", 686 $post->post_title, 687 esc_html( $notes ), 688 admin_url( sprintf( 'post.php?post=%s&action=edit', $post->ID ) ) 689 ); 690 $message = str_replace( "\t", '', $message ); 691 692 wp_mail( $to, $subject, $message, $headers ); 693 } 694 695 /** 696 * Save the post's data 697 * 698 * @param int $post_id 699 * @param WP_Post $post 700 */ 701 public function save_payment( $post_id, $post ) { 702 703 // Update the timestamp and logs either way. 704 if ( $post->post_type == self::POST_TYPE && $post_id ) { 705 update_post_meta( $post_id, '_wcb_updated_timestamp', time() ); 706 707 $user = get_user_by( 'id', get_current_user_id() ); 708 709 // Look at post status transitions. 710 foreach ( self::$transition_post_status as $data ) { 711 list( $new, $old, $transition_post ) = $data; 712 713 // Transitioning a different post. 714 if ( $transition_post->ID != $post->ID ) 715 continue; 716 717 if ( $new == 'incomplete' || $new == 'wcb-incomplete' ) { 718 $incomplete_text = get_post_meta( $post->ID, '_wcp_incomplete_notes', true ); 719 $incomplete_text = preg_replace( '#\.$#', '', $incomplete_text ); // trailing-undot-it. 720 WordCamp_Budgets::log( $post->ID, $user->ID, sprintf( 'Marked as incomplete: %s', $incomplete_text ), array( 721 'action' => 'marked-incomplete', 722 'reason' => 'maybe notes', 723 ) ); 724 725 $this->notify_requester_request_incomplete( $post->ID ); 726 WordCamp_Budgets::log( $post->ID, $user->ID, 'Incomplete notification e-mail sent.', array( 727 'action' => 'incomplete-notification-sent', 728 ) ); 729 730 } elseif ( $new == 'paid' || $new == 'wcb-paid' ) { 731 WordCamp_Budgets::log( $post->ID, $user->ID, 'Marked as paid', array( 732 'action' => 'marked-paid', 733 ) ); 734 735 $this->notify_requester_payment_made( $post->ID ); 736 WordCamp_Budgets::log( $post->ID, $user->ID, 'Paid notification e-mail sent.', array( 737 'action' => 'paid-notification-sent', 738 ) ); 739 740 } elseif ( $old == 'auto-draft' ) { 741 WordCamp_Budgets::log( $post->ID, $user->ID, 'Request created', array( 742 'action' => 'updated', 743 ) ); 559 744 } 560 745 } 561 } 562 563 return $mark_incomplete; 564 } 565 566 /** 567 * Notify the payment requester that it has been marked as paid. 568 * 569 * @param int $request_id 570 * @param array $post_data 571 */ 572 protected function notify_requester_payment_made( $request_id, $post_data ) { 573 if ( ! $to = WordCamp_Budgets::get_requester_formatted_email( $post_data['post_author'] ) ) { 574 return; 575 } 576 577 $subject = sprintf( '`%s` has been paid', $post_data['post_title'] ); 578 $headers = array( 'Reply-To: support@wordcamp.org' ); 579 580 $message = sprintf( 581 "The request for `%s` has been marked as paid by WordCamp Central. 582 583 You can view the request at: 584 585 %s 586 587 If you have any questions, please reply to let us know.", 588 $post_data['post_title'], 589 admin_url( sprintf( 'post.php?post=%s&action=edit', $request_id ) ) 590 ); 591 $message = str_replace( "\t", '', $message ); 592 593 wp_mail( $to, $subject, $message, $headers ); 594 } 595 596 /** 597 * Notify the payment requester that it has been marked as paid. 598 * 599 * @param int $request_id 600 * @param array $post_data 601 * @param array $post_data_raw 602 */ 603 protected function notify_requester_request_incomplete( $request_id, $post_data, $post_data_raw ) { 604 if ( ! $to = WordCamp_Budgets::get_requester_formatted_email( $post_data['post_author'] ) ) { 605 return; 606 } 607 608 $subject = sprintf( '`%s` is incomplete', $post_data['post_title'] ); 609 $headers = array( 'Reply-To: support@wordcamp.org' ); 610 611 $message = sprintf( 612 "The request for `%s` has been marked as incomplete by WordCamp Central. 613 614 The reason for this is: %s 615 616 You can complete the request at: 617 618 %s 619 620 If you have any questions, please reply to let us know.", 621 $post_data['post_title'], 622 sanitize_text_field( stripslashes( $post_data_raw['wcp_mark_incomplete_notes'] ) ), 623 admin_url( sprintf( 'post.php?post=%s&action=edit', $request_id ) ) 624 ); 625 $message = str_replace( "\t", '', $message ); 626 627 wp_mail( $to, $subject, $message, $headers ); 628 } 629 630 /** 631 * Save the post's data 632 * 633 * @param int $post_id 634 * @param WP_Post $post 635 */ 636 public function save_payment( $post_id, $post ) { 746 747 WordCamp_Budgets::log( $post->ID, $user->ID, 'Request updated', array( 748 'action' => 'updated', 749 ) ); 750 } 751 752 // The rest only if triggered by a user submitting a form. 637 753 if ( ! WordCamp_Budgets::post_edit_is_actionable( $post, self::POST_TYPE ) ) { 638 754 return; … … 651 767 $this->sanitize_save_normal_fields( $post_id ); 652 768 WordCamp_Budgets::validate_save_payment_method_fields( $post_id, 'camppayments' ); 653 $this->sanitize_save_misc_fields( 769 $this->sanitize_save_misc_fields( $post_id ); 654 770 } 655 771 … … 716 832 */ 717 833 protected function sanitize_save_misc_fields( $post_id ) { 834 $post = get_post( $post_id ); 835 718 836 // Status 719 837 if ( current_user_can( 'manage_network' ) ) { … … 722 840 } 723 841 842 if ( isset( $_POST['wcp_mark_incomplete_notes'] ) ) { 843 $safe_value = ''; 844 if ( $post->post_status == 'wcb-incomplete' ) { 845 $safe_value = wp_kses( $_POST['wcp_mark_incomplete_notes'], wp_kses_allowed_html( 'strip' ) ); 846 } 847 848 update_post_meta( $post_id, '_wcp_incomplete_notes', $safe_value ); 849 } 850 724 851 // Attach existing files 725 852 remove_action( 'save_post', array( $this, 'save_payment' ), 10 ); // avoid infinite recursion … … 739 866 return; 740 867 741 $user = get_user_by( 'id', get_current_user_id() ); 742 if ( $new == 'auto-draft' ) 868 if ( $new == 'auto-draft' || $new == $old ) 743 869 return; 744 870 745 if ( $new == 'incomplete' && $old != 'incomplete' ) { 746 $incomplete_text = get_post_meta( $post->ID, '_wcp_incomplete_notes', true ); 747 $incomplete_text = preg_replace( '#\.$#', '', $incomplete_text ); // trailing-undot-it. 748 WordCamp_Budgets::log( $post->ID, $user->ID, sprintf( 'Marked as incomplete: %s', $incomplete_text ), array( 749 'action' => 'marked-incomplete', 750 'reason' => 'maybe notes', 751 ) ); 752 } elseif ( $new == 'paid' && $old != 'paid' ) { 753 WordCamp_Budgets::log( $post->ID, $user->ID, 'Marked as paid', array( 754 'action' => 'marked-paid', 755 ) ); 756 } elseif ( $old == 'auto-draft' && $new != 'auto-draft' ) { 757 WordCamp_Budgets::log( $post->ID, $user->ID, 'Request created', array( 758 'action' => 'updated', 759 ) ); 760 } else { 761 WordCamp_Budgets::log( $post->ID, $user->ID, 'Request updated', array( 762 'action' => 'updated', 763 ) ); 764 } 871 // Move logging to save_post because transitions are fired before save_post. 872 self::$transition_post_status[] = array( $new, $old, $post ); 765 873 } 766 874 -
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments/javascript/payment-requests.js
r2427 r2633 4 4 var wcb = window.WordCampBudgets; 5 5 var app = wcb.PaymentRequests = { 6 6 7 7 /** 8 8 * Main entry point … … 32 32 currency.trigger( 'change' ); // Set the initial state 33 33 $( '#row-files' ).find( 'a.wcb-insert-media' ).click( wcb.showUploadModal ); 34 $( '#wcp_mark_incomplete_checkbox' ).click( app.requireNotes ); 34 35 $('[name="post_status"]').on('change', function() { 36 var $notes = $('.wcb-mark-incomplete-notes'), 37 state = $(this).val() == 'wcb-incomplete'; 38 39 $notes.toggle(state); 40 $notes.find('textarea').attr('required', state); 41 }).trigger('change'); 35 42 }, 36 43 … … 54 61 wcb.log( exception ); 55 62 } 56 },57 58 /**59 * Require notes when the request is being marked as incomplete60 *61 * @param {object} event62 */63 requireNotes : function( event ) {64 try {65 var notes = $( '#wcp_mark_incomplete_notes' );66 67 if ( 'checked' === $( '#wcp_mark_incomplete_checkbox' ).attr( 'checked' ) ) {68 notes.attr( 'required', true );69 } else {70 notes.attr( 'required', false );71 }72 } catch ( exception ) {73 wcb.log( exception );74 }75 63 } 76 64 }; -
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments/views/payment-request/metabox-status.php
r2397 r2633 1 1 <div id="submitpost" class="wcb submitbox"> 2 2 <div id="minor-publishing"> 3 4 <?php if ( $current_user_can_edit_request && ! current_user_can( 'manage_network' ) ) : ?> 5 <div id="minor-publishing-actions"> 6 <div id="save-action"> 7 <?php submit_button( __( 'Save Draft', 'wordcamporg' ), 'button', 'wcb-save-draft', false ); ?> 8 <span class="spinner"></span> 9 </div> 10 <div class="clear"></div> 11 </div> 12 <?php endif; ?> 13 3 14 <div id="misc-publishing-actions"> 4 5 15 <div class="misc-pub-section"> 6 16 <?php _e( 'ID:', 'wordcamporg' ); ?> … … 17 27 </div> 18 28 29 <?php if ( $post->post_status != 'auto-draft' ) : ?> 19 30 <div class="misc-pub-section"> 20 31 <?php $this->render_text_input( $post, 'Date Vendor was Paid', 'date_vendor_paid', '', 'date', array(), $date_vendor_paid_readonly ); ?> … … 22 33 23 34 <div class="misc-pub-section misc-pub-post-status"> 24 <label for="post_status"><?php _e( 'Status:' ) ?></label> 35 <label> 36 <?php _e( 'Status:' ) ?> 25 37 26 <span id="post-status-display"> 27 <?php if ( 'incomplete' == $post->post_status ) : ?> 28 <?php _e( 'Incomplete', 'wordcamporg' ); ?> 29 <?php elseif ( 'paid' == $post->post_status ) : ?> 30 <?php _e( 'Paid' ); ?> 31 <?php else : ?> 32 <?php _e( 'Not Paid' ); ?> 33 <?php endif; ?> 34 </span> 35 </div> <!-- .misc-pub-section --> 38 <span id="post-status-display"> 39 <?php if ( current_user_can( 'manage_network' ) ) : ?> 40 41 <select name="post_status"> 42 <?php foreach ( self::get_post_statuses() as $status ) : ?> 43 <?php $status = get_post_status_object( $status ); ?> 44 <option value="<?php echo esc_attr( $status->name ); ?>" <?php selected( $post->post_status, $status->name ); ?> > 45 <?php echo esc_html( $status->label ); ?> 46 </option> 47 <?php endforeach; ?> 48 </select> 49 50 <?php else : ?> 51 52 <?php $status = get_post_status_object( $post->post_status ); ?> 53 <?php echo esc_html( $status->label ); ?> 54 <input type="hidden" name="post_status" value="<?php echo esc_attr( $post->post_status ); ?>" /> 55 56 <?php endif; ?> 57 </span> 58 </label> 59 </div> 60 <?php endif; ?> 61 62 <div class="misc-pub-section hide-if-js wcb-mark-incomplete-notes"> 63 <label for="wcp_mark_incomplete_notes">What information is needed?</label> 64 <textarea id="wcp_mark_incomplete_notes" name="wcp_mark_incomplete_notes" class="large-text" rows="5" 65 placeholder="Need to attach receipt, etc" <?php echo $incomplete_readonly; ?>><?php echo esc_textarea( $incomplete_notes ); ?></textarea> 66 </div> 36 67 37 68 <div class="clear"></div> … … 48 79 <?php if ( current_user_can( 'delete_post', $post->ID ) ) : ?> 49 80 <a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>"> 50 <?php echo $delete_text; ?>81 <?php _e( 'Delete', 'wordcamporg' ); ?> 51 82 </a> 52 83 <?php endif; ?> … … 55 86 <div id="publishing-action"> 56 87 <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr( $submit_text ) ?>" /> 57 <?php submit_button( $submit_text, 'primary button-large', ' save', false, array( 'accesskey' => 'p' ) ); ?>88 <?php submit_button( $submit_text, 'primary button-large', 'wcb-update', false, array( 'accesskey' => 'p' ) ); ?> 58 89 </div> 59 90 … … 62 93 <?php else : ?> 63 94 64 < p><?php _e( 'Paid requests are closed and cannot be edited.', 'wordcamporg' ); ?></p>95 <?php _e( 'This request can not be edited.', 'wordcamporg' ); ?> 65 96 66 97 <?php endif; ?>
Note: See TracChangeset
for help on using the changeset viewer.