Code Duplication    Length = 78-82 lines in 3 locations

json-endpoints/class.wpcom-json-api-update-post-endpoint.php 1 location

@@ 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.

json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php 1 location

@@ 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 );

json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php 1 location

@@ 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 );