| @@ 713-794 (lines=82) @@ | ||
| 710 | $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 711 | } |
|
| 712 | ||
| 713 | if ( ! empty( $metadata ) ) { |
|
| 714 | foreach ( (array) $metadata as $meta ) { |
|
| 715 | ||
| 716 | $meta = (object) $meta; |
|
| 717 | ||
| 718 | // Custom meta description can only be set on sites that have a business subscription. |
|
| 719 | if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) { |
|
| 720 | return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 ); |
|
| 721 | } |
|
| 722 | ||
| 723 | $existing_meta_item = new stdClass; |
|
| 724 | ||
| 725 | if ( empty( $meta->operation ) ) |
|
| 726 | $meta->operation = 'update'; |
|
| 727 | ||
| 728 | if ( ! empty( $meta->value ) ) { |
|
| 729 | if ( 'true' == $meta->value ) |
|
| 730 | $meta->value = true; |
|
| 731 | if ( 'false' == $meta->value ) |
|
| 732 | $meta->value = false; |
|
| 733 | } |
|
| 734 | ||
| 735 | if ( ! empty( $meta->id ) ) { |
|
| 736 | $meta->id = absint( $meta->id ); |
|
| 737 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 738 | if ( $post_id !== (int) $existing_meta_item->post_id ) { |
|
| 739 | // Only allow updates for metadata on this post |
|
| 740 | continue; |
|
| 741 | } |
|
| 742 | } |
|
| 743 | ||
| 744 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 745 | $meta->key = wp_slash( $meta->key ); |
|
| 746 | $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key ); |
|
| 747 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 748 | ||
| 749 | // make sure that the meta id passed matches the existing meta key |
|
| 750 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 751 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 752 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 753 | continue; // skip this meta |
|
| 754 | } |
|
| 755 | } |
|
| 756 | ||
| 757 | switch ( $meta->operation ) { |
|
| 758 | case 'delete': |
|
| 759 | ||
| 760 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 761 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 762 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 763 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 764 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 765 | delete_post_meta( $post_id, $meta->key ); |
|
| 766 | } |
|
| 767 | ||
| 768 | break; |
|
| 769 | case 'add': |
|
| 770 | ||
| 771 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 772 | break; |
|
| 773 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) { |
|
| 774 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 775 | } |
|
| 776 | ||
| 777 | break; |
|
| 778 | case 'update': |
|
| 779 | ||
| 780 | if ( ! isset( $meta->value ) ) { |
|
| 781 | break; |
|
| 782 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 783 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 784 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 785 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 786 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 787 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 788 | } |
|
| 789 | ||
| 790 | break; |
|
| 791 | } |
|
| 792 | ||
| 793 | } |
|
| 794 | } |
|
| 795 | ||
| 796 | /** |
|
| 797 | * Fires when a post is created via the REST API. |
|
| @@ 787-864 (lines=78) @@ | ||
| 784 | $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 785 | } |
|
| 786 | ||
| 787 | if ( ! empty( $metadata ) ) { |
|
| 788 | foreach ( (array) $metadata as $meta ) { |
|
| 789 | ||
| 790 | $meta = (object) $meta; |
|
| 791 | ||
| 792 | // Custom meta description can only be set on sites that have a business subscription. |
|
| 793 | if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) { |
|
| 794 | return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 ); |
|
| 795 | } |
|
| 796 | ||
| 797 | $existing_meta_item = new stdClass; |
|
| 798 | ||
| 799 | if ( empty( $meta->operation ) ) |
|
| 800 | $meta->operation = 'update'; |
|
| 801 | ||
| 802 | if ( ! empty( $meta->value ) ) { |
|
| 803 | if ( 'true' == $meta->value ) |
|
| 804 | $meta->value = true; |
|
| 805 | if ( 'false' == $meta->value ) |
|
| 806 | $meta->value = false; |
|
| 807 | } |
|
| 808 | ||
| 809 | if ( ! empty( $meta->id ) ) { |
|
| 810 | $meta->id = absint( $meta->id ); |
|
| 811 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 812 | if ( $post_id !== (int) $existing_meta_item->post_id ) { |
|
| 813 | // Only allow updates for metadata on this post |
|
| 814 | continue; |
|
| 815 | } |
|
| 816 | } |
|
| 817 | ||
| 818 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 819 | $meta->key = wp_slash( $meta->key ); |
|
| 820 | $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key ); |
|
| 821 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 822 | ||
| 823 | // make sure that the meta id passed matches the existing meta key |
|
| 824 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 825 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 826 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 827 | continue; // skip this meta |
|
| 828 | } |
|
| 829 | } |
|
| 830 | ||
| 831 | switch ( $meta->operation ) { |
|
| 832 | case 'delete': |
|
| 833 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 834 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 835 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 836 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 837 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 838 | delete_post_meta( $post_id, $meta->key ); |
|
| 839 | } |
|
| 840 | ||
| 841 | break; |
|
| 842 | case 'add': |
|
| 843 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 844 | break; |
|
| 845 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) { |
|
| 846 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 847 | } |
|
| 848 | ||
| 849 | break; |
|
| 850 | case 'update': |
|
| 851 | if ( ! isset( $meta->value ) ) { |
|
| 852 | break; |
|
| 853 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 854 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 855 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 856 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 857 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 858 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 859 | } |
|
| 860 | ||
| 861 | break; |
|
| 862 | } |
|
| 863 | } |
|
| 864 | } |
|
| 865 | ||
| 866 | /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */ |
|
| 867 | do_action( 'rest_api_inserted_post', $post_id, $insert, $new ); |
|
| @@ 758-835 (lines=78) @@ | ||
| 755 | parent::parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ); |
|
| 756 | } |
|
| 757 | ||
| 758 | if ( ! empty( $metadata ) ) { |
|
| 759 | foreach ( (array) $metadata as $meta ) { |
|
| 760 | ||
| 761 | $meta = (object) $meta; |
|
| 762 | ||
| 763 | // Custom meta description can only be set on sites that have a business subscription. |
|
| 764 | if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) { |
|
| 765 | return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 ); |
|
| 766 | } |
|
| 767 | ||
| 768 | $existing_meta_item = new stdClass; |
|
| 769 | ||
| 770 | if ( empty( $meta->operation ) ) |
|
| 771 | $meta->operation = 'update'; |
|
| 772 | ||
| 773 | if ( ! empty( $meta->value ) ) { |
|
| 774 | if ( 'true' == $meta->value ) |
|
| 775 | $meta->value = true; |
|
| 776 | if ( 'false' == $meta->value ) |
|
| 777 | $meta->value = false; |
|
| 778 | } |
|
| 779 | ||
| 780 | if ( ! empty( $meta->id ) ) { |
|
| 781 | $meta->id = absint( $meta->id ); |
|
| 782 | $existing_meta_item = get_metadata_by_mid( 'post', $meta->id ); |
|
| 783 | if ( $post_id !== (int) $existing_meta_item->post_id ) { |
|
| 784 | // Only allow updates for metadata on this post |
|
| 785 | continue; |
|
| 786 | } |
|
| 787 | } |
|
| 788 | ||
| 789 | $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be |
|
| 790 | $meta->key = wp_slash( $meta->key ); |
|
| 791 | $unslashed_existing_meta_key = isset( $existing_meta_item->meta_key ) ? wp_unslash( $existing_meta_item->meta_key ) : ''; |
|
| 792 | $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key ); |
|
| 793 | ||
| 794 | // make sure that the meta id passed matches the existing meta key |
|
| 795 | if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) { |
|
| 796 | $meta_by_id = get_metadata_by_mid( 'post', $meta->id ); |
|
| 797 | if ( $meta_by_id->meta_key !== $meta->key ) { |
|
| 798 | continue; // skip this meta |
|
| 799 | } |
|
| 800 | } |
|
| 801 | ||
| 802 | switch ( $meta->operation ) { |
|
| 803 | case 'delete': |
|
| 804 | if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) { |
|
| 805 | delete_metadata_by_mid( 'post', $meta->id ); |
|
| 806 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 807 | delete_post_meta( $post_id, $meta->key, $meta->previous_value ); |
|
| 808 | } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) { |
|
| 809 | delete_post_meta( $post_id, $meta->key ); |
|
| 810 | } |
|
| 811 | ||
| 812 | break; |
|
| 813 | case 'add': |
|
| 814 | if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) { |
|
| 815 | break; |
|
| 816 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) { |
|
| 817 | add_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 818 | } |
|
| 819 | ||
| 820 | break; |
|
| 821 | case 'update': |
|
| 822 | if ( ! isset( $meta->value ) ) { |
|
| 823 | break; |
|
| 824 | } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 825 | update_metadata_by_mid( 'post', $meta->id, $meta->value ); |
|
| 826 | } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 827 | update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value ); |
|
| 828 | } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) { |
|
| 829 | update_post_meta( $post_id, $meta->key, $meta->value ); |
|
| 830 | } |
|
| 831 | ||
| 832 | break; |
|
| 833 | } |
|
| 834 | } |
|
| 835 | } |
|
| 836 | ||
| 837 | /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */ |
|
| 838 | do_action( 'rest_api_inserted_post', $post_id, $insert, $new ); |
|