LSX_Schema_Utils   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 208
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 26
eloc 67
dl 0
loc 208
rs 10
c 0
b 0
f 0

11 Methods

Rating   Name   Duplication   Size   Complexity  
A get_subtrip_schema_id() 0 3 1
A add_terms() 0 14 4
A get_review_schema_id() 0 9 2
A is_type() 0 14 3
A add_place() 0 17 2
A add_image() 0 7 2
A get_author_schema_id() 0 2 1
A get_offer_schema_id() 0 9 2
A get_item_reviewed() 0 16 6
A get_article_schema_id() 0 7 2
A get_places_schema_id() 0 3 1
1
<?php
2
/**
3
 * Helper functions for the Schema class.
4
 *
5
 * @package lsx
6
 */
0 ignored issues
show
Coding Style introduced by
There must be exactly one blank line after the file comment
Loading history...
7
/**
8
 * Schema utility functions.
9
 *
10
 * @since 11.6
11
 */
12
class LSX_Schema_Utils {
13
	/**
14
	 * Determines whether a given post type should have Review schema.
15
	 *
16
	 * @param string $post_type       Post type to check.
17
	 * @param string $comparison_type Post type to check against.
18
	 *
19
	 * @return bool True if it has schema, false if not.
20
	 */
21
	public static function is_type( $post_type = null, $comparison_type = null ) {
22
		if ( is_null( $comparison_type ) ) {
23
			return false;
24
		}
25
		if ( is_null( $post_type ) ) {
26
			$post_type = get_post_type();
27
		}
28
		/**
29
		 * Filter: 'wpseo_schema_$this->post_type_post_types' - Allow changing for which post types we output Review schema.
30
		 *
31
		 * @api string[] $post_types The post types for which we output Review.
32
		 */
33
		$post_types = apply_filters( 'wpseo_schema_' . $comparison_type . '_post_types', array( $comparison_type ) );
34
		return in_array( $post_type, $post_types );
0 ignored issues
show
introduced by
Not using strict comparison for in_array; supply true for third argument.
Loading history...
35
	}
36
	/**
37
	 * Retrieve a users Schema ID.
38
	 *
39
	 * @param string               $place_id The Name of the Reviewer you need a for.
40
	 * @param string               $type the type of the place.
41
	 * @param WPSEO_Schema_Context $context A value object with context variables.
42
	 *
43
	 * @return string The user's schema ID.
44
	 */
45
	public static function get_places_schema_id( $place_id, $type, $context ) {
46
		$url = $context->site_url . '#/schema/' . strtolower( $type ) . '/' . wp_hash( $place_id . get_the_title( $place_id ) );
0 ignored issues
show
Bug introduced by
$place_id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_title(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

46
		$url = $context->site_url . '#/schema/' . strtolower( $type ) . '/' . wp_hash( $place_id . get_the_title( /** @scrutinizer ignore-type */ $place_id ) );
Loading history...
47
		return trailingslashit( $url );
48
	}
49
	/**
50
	 * Retrieve a users Schema ID.
51
	 *
52
	 * @param string               $name The Name of the Reviewer you need a for.
53
	 * @param WPSEO_Schema_Context $context A value object with context variables.
54
	 *
55
	 * @return string The user's schema ID.
56
	 */
57
	public static function get_subtrip_schema_id( $name, $context ) {
58
		$url = $context->site_url . '#/subtrip/' . wp_hash( $name . $context->id );
59
		return trailingslashit( $url );
60
	}
61
	/**
62
	 * Retrieve an offer Schema ID.
63
	 *
64
	 * @param string               $id      post ID of the place being added.
65
	 * @param WPSEO_Schema_Context $context A value object with context variables.
66
	 * @param string               $local   if the Schema is local true / false.
67
	 *
68
	 * @return string The user's schema ID.
69
	 */
70
	public static function get_offer_schema_id( $id, $context, $local = false ) {
71
		if ( false === $local ) {
72
			$url = $context->site_url;
73
		} else {
74
			$url = get_permalink( $context->id );
0 ignored issues
show
Bug introduced by
$context->id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_permalink(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

74
			$url = get_permalink( /** @scrutinizer ignore-type */ $context->id );
Loading history...
75
		}
76
		$url .= '#/schema/offer/';
77
		$url .= wp_hash( $id . get_the_title( $id ) );
0 ignored issues
show
Bug introduced by
$id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_title(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

77
		$url .= wp_hash( $id . get_the_title( /** @scrutinizer ignore-type */ $id ) );
Loading history...
78
		return trailingslashit( $url );
79
	}
80
	/**
81
	 * Retrieve an review Schema ID.
82
	 *
83
	 * @param string               $id      post ID of the place being added.
84
	 * @param WPSEO_Schema_Context $context A value object with context variables.
85
	 * @param string               $local   if the Schema is local true / false.
86
	 *
87
	 * @return string The user's schema ID.
88
	 */
89
	public static function get_review_schema_id( $id, $context, $local = false ) {
90
		if ( false === $local ) {
91
			$url = $context->site_url;
92
		} else {
93
			$url = get_permalink( $context->id );
0 ignored issues
show
Bug introduced by
$context->id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_permalink(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

93
			$url = get_permalink( /** @scrutinizer ignore-type */ $context->id );
Loading history...
94
		}
95
		$url .= '#/schema/review/';
96
		$url .= wp_hash( $id . get_the_title( $id ) );
0 ignored issues
show
Bug introduced by
$id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_title(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

96
		$url .= wp_hash( $id . get_the_title( /** @scrutinizer ignore-type */ $id ) );
Loading history...
97
		return trailingslashit( $url );
98
	}
99
	/**
100
	 * Retrieve an Article Schema ID.
101
	 *
102
	 * @param string               $id      post ID of the place being added.
103
	 * @param WPSEO_Schema_Context $context A value object with context variables.
104
	 * @param string               $local   if the Schema is local true / false.
105
	 *
106
	 * @return string The user's schema ID.
107
	 */
108
	public static function get_article_schema_id( $id, $context, $local = false ) {
109
		if ( false === $local ) {
110
			$url = get_permalink( $id ) . \Schema_IDs::ARTICLE_HASH;
0 ignored issues
show
Bug introduced by
Are you sure get_permalink($id) of type false|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

110
			$url = /** @scrutinizer ignore-type */ get_permalink( $id ) . \Schema_IDs::ARTICLE_HASH;
Loading history...
Bug introduced by
$id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_permalink(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

110
			$url = get_permalink( /** @scrutinizer ignore-type */ $id ) . \Schema_IDs::ARTICLE_HASH;
Loading history...
Bug introduced by
The type Schema_IDs was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
111
		} else {
112
			$url = get_permalink( $context->id ) . '#/schema/article/' . wp_hash( $id . get_the_title( $id ) );
0 ignored issues
show
Bug introduced by
Are you sure get_permalink($context->id) of type false|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

112
			$url = /** @scrutinizer ignore-type */ get_permalink( $context->id ) . '#/schema/article/' . wp_hash( $id . get_the_title( $id ) );
Loading history...
Bug introduced by
$id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_title(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

112
			$url = get_permalink( $context->id ) . '#/schema/article/' . wp_hash( $id . get_the_title( /** @scrutinizer ignore-type */ $id ) );
Loading history...
113
		}
114
		return trailingslashit( $url );
115
	}
116
	/**
0 ignored issues
show
Coding Style Documentation introduced by
Doc comment for parameter "$email" missing
Loading history...
117
	 * Retrieve a users Schema ID.
118
	 *
119
	 * @param string               $name The Name of the Reviewer you need a for.
120
	 * @param WPSEO_Schema_Context $context A value object with context variables.
0 ignored issues
show
Coding Style introduced by
Doc comment for parameter $context does not match actual variable name $email
Loading history...
121
	 *
122
	 * @return string The user's schema ID.
123
	 */
124
	public static function get_author_schema_id( $name, $email, $context ) {
125
		return $context->site_url . \Schema_IDs::PERSON_HASH . wp_hash( $name . $email );
126
	}
127
	/**
128
	 * Generates the place graph piece for the subtrip / Itinerary arrays.
129
	 *
130
	 * @param array                $data         subTrip / itinerary data.
131
	 * @param string               $type         The type in data to save the terms in.
132
	 * @param string               $post_id      The post ID of the current Place to add.
133
	 * @param WPSEO_Schema_Context $context      The post ID of the current Place to add.
134
	 * @param string               $contained_in The @id of the containedIn place.
135
	 *
136
	 * @return mixed array $data Place data.
137
	 */
138
	public static function add_place( $data, $type, $post_id, $context, $contained_in = false ) {
139
		$at_id = self::get_places_schema_id( $post_id, $type, $context );
140
		$place = array(
141
			'@type'       => $type,
142
			'@id'         => $at_id,
143
			'name'        => get_the_title( $post_id ),
0 ignored issues
show
Bug introduced by
$post_id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_title(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

143
			'name'        => get_the_title( /** @scrutinizer ignore-type */ $post_id ),
Loading history...
144
			'description' => get_the_excerpt( $post_id ),
0 ignored issues
show
Bug introduced by
$post_id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_excerpt(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

144
			'description' => get_the_excerpt( /** @scrutinizer ignore-type */ $post_id ),
Loading history...
145
			'url'         => get_permalink( $post_id ),
0 ignored issues
show
Bug introduced by
$post_id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_permalink(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

145
			'url'         => get_permalink( /** @scrutinizer ignore-type */ $post_id ),
Loading history...
146
		);
147
		if ( false !== $contained_in ) {
148
			$place['containedInPlace'] = array(
149
				'@type' => 'Country',
150
				'@id'   => $contained_in,
151
			);
152
		}
153
		$data[] = $place;
154
		return $data;
155
	}
156
	/**
157
	 * Adds an image node if the post has a featured image.
158
	 *
159
	 * @param array                $data         The Review data.
160
	 * @param WPSEO_Schema_Context $context      The post ID of the current Place to add.
161
	 *
162
	 * @return array $data The Review data.
163
	 */
164
	public static function add_image( $data, $context ) {
165
		if ( $context->has_image ) {
166
			$data['image'] = array(
167
				'@id' => $context->canonical . \Schema_IDs::PRIMARY_IMAGE_HASH,
168
			);
169
		}
170
		return $data;
171
	}
172
	/**
173
	 * Generates the itemReviewed schema
174
	 *
175
	 * @param  array  $items The array of IDS.
176
	 * @param  string $type The schema type.
177
	 * @return array $schema An array of the schema markup.
178
	 */
179
	public static function get_item_reviewed( $items = array(), $type = '' ) {
180
		$schema = array();
181
		if ( false !== $items && ! empty( $items ) && '' !== $type ) {
182
			array_unique( $items );
183
			foreach ( $items as $item ) {
184
				$title = get_the_title( $item );
185
				if ( '' !== $title ) {
186
					$item_schema = array(
187
						'@type' => $type,
188
						'name'  => $title,
189
					);
190
					$schema[]    = $item_schema;
191
				}
192
			}
193
		}
194
		return $schema;
195
	}
196
	/**
197
	 * Adds a term or multiple terms, comma separated, to a field.
198
	 *
199
	 * @param array  $data     Review data.
200
	 * @param string $post_id  The ID of the item to fetch terms.
201
	 * @param string $key      The key in data to save the terms in.
202
	 * @param string $taxonomy The taxonomy to retrieve the terms from.
203
	 *
204
	 * @return mixed array $data Review data.
205
	 */
206
	public static function add_terms( $data, $post_id, $key, $taxonomy ) {
207
		$terms = get_the_terms( $post_id, $taxonomy );
0 ignored issues
show
Bug introduced by
$post_id of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_the_terms(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

207
		$terms = get_the_terms( /** @scrutinizer ignore-type */ $post_id, $taxonomy );
Loading history...
208
		if ( is_array( $terms ) ) {
209
			$keywords = array();
210
			foreach ( $terms as $term ) {
211
				// We are checking against the WordPress internal translation.
212
				// @codingStandardsIgnoreLine
213
				if ( __( 'Uncategorized', 'lsx' ) !== $term->name ) {
214
					$keywords[] = $term->name;
215
				}
216
			}
217
			$data[ $key ] = implode( ',', $keywords );
218
		}
219
		return $data;
220
	}
221
}
222