Completed
Push — develop ( 45137e...afa03d )
by Naveen
02:50
created
src/includes/class-wordlift-entity-service.php 2 patches
Indentation   +598 added lines, -598 removed lines patch added patch discarded remove patch
@@ -18,522 +18,522 @@  discard block
 block discarded – undo
18 18
  */
19 19
 class Wordlift_Entity_Service {
20 20
 
21
-	/**
22
-	 * The Log service.
23
-	 *
24
-	 * @since  3.2.0
25
-	 * @access private
26
-	 * @var \Wordlift_Log_Service $log The Log service.
27
-	 */
28
-	private $log;
29
-
30
-	/**
31
-	 * The UI service.
32
-	 *
33
-	 * @since  3.2.0
34
-	 * @access private
35
-	 * @var \Wordlift_UI_Service $ui_service The UI service.
36
-	 */
37
-	private $ui_service;
38
-
39
-	/**
40
-	 * The {@link Wordlift_Relation_Service} instance.
41
-	 *
42
-	 * @since  3.15.0
43
-	 * @access private
44
-	 * @var \Wordlift_Relation_Service $relation_service The {@link Wordlift_Relation_Service} instance.
45
-	 */
46
-	private $relation_service;
47
-
48
-	/**
49
-	 * The {@link Wordlift_Entity_Uri_Service} instance.
50
-	 *
51
-	 * @since  3.16.3
52
-	 * @access private
53
-	 * @var \Wordlift_Entity_Uri_Service $entity_uri_service The {@link Wordlift_Entity_Uri_Service} instance.
54
-	 */
55
-	private $entity_uri_service;
56
-
57
-	/**
58
-	 * The entity post type name.
59
-	 *
60
-	 * @since 3.1.0
61
-	 */
62
-	const TYPE_NAME = 'entity';
63
-
64
-	/**
65
-	 * The alternative label meta key.
66
-	 *
67
-	 * @since 3.2.0
68
-	 */
69
-	const ALTERNATIVE_LABEL_META_KEY = '_wl_alt_label';
70
-
71
-	/**
72
-	 * The alternative label input template.
73
-	 *
74
-	 * @since 3.2.0
75
-	 */
76
-	// TODO: this should be moved to a class that deals with HTML code.
77
-	const ALTERNATIVE_LABEL_INPUT_TEMPLATE = '<div class="wl-alternative-label">
21
+    /**
22
+     * The Log service.
23
+     *
24
+     * @since  3.2.0
25
+     * @access private
26
+     * @var \Wordlift_Log_Service $log The Log service.
27
+     */
28
+    private $log;
29
+
30
+    /**
31
+     * The UI service.
32
+     *
33
+     * @since  3.2.0
34
+     * @access private
35
+     * @var \Wordlift_UI_Service $ui_service The UI service.
36
+     */
37
+    private $ui_service;
38
+
39
+    /**
40
+     * The {@link Wordlift_Relation_Service} instance.
41
+     *
42
+     * @since  3.15.0
43
+     * @access private
44
+     * @var \Wordlift_Relation_Service $relation_service The {@link Wordlift_Relation_Service} instance.
45
+     */
46
+    private $relation_service;
47
+
48
+    /**
49
+     * The {@link Wordlift_Entity_Uri_Service} instance.
50
+     *
51
+     * @since  3.16.3
52
+     * @access private
53
+     * @var \Wordlift_Entity_Uri_Service $entity_uri_service The {@link Wordlift_Entity_Uri_Service} instance.
54
+     */
55
+    private $entity_uri_service;
56
+
57
+    /**
58
+     * The entity post type name.
59
+     *
60
+     * @since 3.1.0
61
+     */
62
+    const TYPE_NAME = 'entity';
63
+
64
+    /**
65
+     * The alternative label meta key.
66
+     *
67
+     * @since 3.2.0
68
+     */
69
+    const ALTERNATIVE_LABEL_META_KEY = '_wl_alt_label';
70
+
71
+    /**
72
+     * The alternative label input template.
73
+     *
74
+     * @since 3.2.0
75
+     */
76
+    // TODO: this should be moved to a class that deals with HTML code.
77
+    const ALTERNATIVE_LABEL_INPUT_TEMPLATE = '<div class="wl-alternative-label">
78 78
                 <label class="screen-reader-text" id="wl-alternative-label-prompt-text" for="wl-alternative-label">Enter alternative label here</label>
79 79
                 <input name="wl_alternative_label[]" size="30" value="%s" id="wl-alternative-label" type="text">
80 80
                 <button class="button wl-delete-button">%s</button>
81 81
                 </div>';
82 82
 
83
-	/**
84
-	 * A singleton instance of the Entity service.
85
-	 *
86
-	 * @since  3.2.0
87
-	 * @access private
88
-	 * @var \Wordlift_Entity_Service $instance A singleton instance of the Entity service.
89
-	 */
90
-	private static $instance;
91
-
92
-	/**
93
-	 * Create a Wordlift_Entity_Service instance.
94
-	 *
95
-	 * @param \Wordlift_UI_Service $ui_service The UI service.
96
-	 * @param \Wordlift_Relation_Service $relation_service The {@link Wordlift_Relation_Service} instance.
97
-	 * @param \Wordlift_Entity_Uri_Service $entity_uri_service The {@link Wordlift_Entity_Uri_Service} instance.
98
-	 *
99
-	 * @since 3.2.0
100
-	 *
101
-	 */
102
-	public function __construct( $ui_service, $relation_service, $entity_uri_service ) {
103
-
104
-		$this->log = Wordlift_Log_Service::get_logger( 'Wordlift_Entity_Service' );
105
-
106
-		$this->ui_service         = $ui_service;
107
-		$this->relation_service   = $relation_service;
108
-		$this->entity_uri_service = $entity_uri_service;
109
-
110
-		// Set the singleton instance.
111
-		self::$instance = $this;
112
-	}
113
-
114
-	/**
115
-	 * Get the singleton instance of the Entity service.
116
-	 *
117
-	 * @return \Wordlift_Entity_Service The singleton instance of the Entity service.
118
-	 * @since 3.2.0
119
-	 */
120
-	public static function get_instance() {
121
-
122
-		return self::$instance;
123
-	}
124
-
125
-	/**
126
-	 * Determines whether a post is an entity or not. Entity is in this context
127
-	 * something which is not an article.
128
-	 *
129
-	 * @param int $post_id A post id.
130
-	 *
131
-	 * @return bool Return true if the post is an entity otherwise false.
132
-	 * @since 3.1.0
133
-	 *
134
-	 */
135
-	public function is_entity( $post_id ) {
136
-
137
-		$terms = wp_get_object_terms( $post_id, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME );
138
-
139
-		if ( is_wp_error( $terms ) ) {
140
-			$this->log->error( "Cannot get the terms for post $post_id: " . $terms->get_error_message() );
141
-
142
-			return false;
143
-		}
144
-
145
-		if ( empty( $terms ) ) {
146
-			return false;
147
-		}
148
-
149
-		/*
83
+    /**
84
+     * A singleton instance of the Entity service.
85
+     *
86
+     * @since  3.2.0
87
+     * @access private
88
+     * @var \Wordlift_Entity_Service $instance A singleton instance of the Entity service.
89
+     */
90
+    private static $instance;
91
+
92
+    /**
93
+     * Create a Wordlift_Entity_Service instance.
94
+     *
95
+     * @param \Wordlift_UI_Service $ui_service The UI service.
96
+     * @param \Wordlift_Relation_Service $relation_service The {@link Wordlift_Relation_Service} instance.
97
+     * @param \Wordlift_Entity_Uri_Service $entity_uri_service The {@link Wordlift_Entity_Uri_Service} instance.
98
+     *
99
+     * @since 3.2.0
100
+     *
101
+     */
102
+    public function __construct( $ui_service, $relation_service, $entity_uri_service ) {
103
+
104
+        $this->log = Wordlift_Log_Service::get_logger( 'Wordlift_Entity_Service' );
105
+
106
+        $this->ui_service         = $ui_service;
107
+        $this->relation_service   = $relation_service;
108
+        $this->entity_uri_service = $entity_uri_service;
109
+
110
+        // Set the singleton instance.
111
+        self::$instance = $this;
112
+    }
113
+
114
+    /**
115
+     * Get the singleton instance of the Entity service.
116
+     *
117
+     * @return \Wordlift_Entity_Service The singleton instance of the Entity service.
118
+     * @since 3.2.0
119
+     */
120
+    public static function get_instance() {
121
+
122
+        return self::$instance;
123
+    }
124
+
125
+    /**
126
+     * Determines whether a post is an entity or not. Entity is in this context
127
+     * something which is not an article.
128
+     *
129
+     * @param int $post_id A post id.
130
+     *
131
+     * @return bool Return true if the post is an entity otherwise false.
132
+     * @since 3.1.0
133
+     *
134
+     */
135
+    public function is_entity( $post_id ) {
136
+
137
+        $terms = wp_get_object_terms( $post_id, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME );
138
+
139
+        if ( is_wp_error( $terms ) ) {
140
+            $this->log->error( "Cannot get the terms for post $post_id: " . $terms->get_error_message() );
141
+
142
+            return false;
143
+        }
144
+
145
+        if ( empty( $terms ) ) {
146
+            return false;
147
+        }
148
+
149
+        /*
150 150
 		 * We don't consider an `article` to be an entity.
151 151
 		 *
152 152
 		 * @since 3.20.0 At least one associated mustn't be an `article`.
153 153
 		 *
154 154
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/835
155 155
 		 */
156
-		foreach ( $terms as $term ) {
157
-			if ( 1 !== preg_match( '~(^|-)article$~', $term->slug ) ) {
158
-				return true;
159
-			}
160
-		}
161
-
162
-		return false;
163
-	}
164
-
165
-	/**
166
-	 * Get the proper classification scope for a given entity post
167
-	 *
168
-	 * @param integer $post_id An entity post id.
169
-	 *
170
-	 * @param string $default The default classification scope, `what` if not
171
-	 *                         provided.
172
-	 *
173
-	 * @return string Returns a classification scope (e.g. 'what').
174
-	 * @since 3.5.0
175
-	 *
176
-	 */
177
-	public function get_classification_scope_for( $post_id, $default = WL_WHAT_RELATION ) {
178
-
179
-		if ( false === $this->is_entity( $post_id ) ) {
180
-			return $default;
181
-		}
182
-
183
-		// Retrieve the entity type
184
-		$entity_type_arr = Wordlift_Entity_Type_Service::get_instance()->get( $post_id );
185
-		$entity_type     = str_replace( 'wl-', '', $entity_type_arr['css_class'] );
186
-		// Retrieve classification boxes configuration
187
-		$classification_boxes = unserialize( WL_CORE_POST_CLASSIFICATION_BOXES );
188
-		foreach ( $classification_boxes as $cb ) {
189
-			if ( in_array( $entity_type, $cb['registeredTypes'] ) ) {
190
-				return $cb['id'];
191
-			}
192
-		}
193
-
194
-		return $default;
195
-	}
196
-
197
-	/**
198
-	 * Check whether a {@link WP_Post} is used.
199
-	 *
200
-	 * @param int $post_id The {@link WP_Post}'s id.
201
-	 *
202
-	 * @return bool|null Null if it's not an entity, otherwise true if it's used.
203
-	 */
204
-	public function is_used( $post_id ) {
205
-
206
-		if ( false === $this->is_entity( $post_id ) ) {
207
-			return null;
208
-		}
209
-		// Retrieve the post
210
-		$entity = get_post( $post_id );
211
-
212
-		global $wpdb;
213
-		// Retrieve Wordlift relation instances table name
214
-		$table_name = wl_core_get_relation_instances_table_name();
215
-
216
-		// Check is it's referenced / related to another post / entity
217
-		$stmt = $wpdb->prepare(
218
-			"SELECT COUNT(*) FROM $table_name WHERE  object_id = %d",
219
-			$entity->ID
220
-		);
221
-
222
-		// Perform the query
223
-		$relation_instances = (int) $wpdb->get_var( $stmt );
224
-		// If there is at least one relation instance for the current entity, then it's used
225
-		if ( 0 < $relation_instances ) {
226
-			return true;
227
-		}
228
-
229
-		// Check if the entity uri is used as meta_value
230
-		$stmt = $wpdb->prepare(
231
-			"SELECT COUNT(*) FROM $wpdb->postmeta WHERE post_id != %d AND meta_value = %s",
232
-			$entity->ID,
233
-			wl_get_entity_uri( $entity->ID )
234
-		);
235
-		// Perform the query
236
-		$meta_instances = (int) $wpdb->get_var( $stmt );
237
-
238
-		// If there is at least one meta that refers the current entity uri, then current entity is used
239
-		if ( 0 < $meta_instances ) {
240
-			return true;
241
-		}
242
-
243
-		// If we are here, it means the current entity is not used at the moment
244
-		return false;
245
-	}
246
-
247
-	/**
248
-	 * Find entity posts by the entity URI. Entity as searched by their entity URI or same as.
249
-	 *
250
-	 * @param string $uri The entity URI.
251
-	 *
252
-	 * @return WP_Post|null A WP_Post instance or null if not found.
253
-	 * @deprecated in favor of Wordlift_Entity_Uri_Service->get_entity( $uri );
254
-	 *
255
-	 * @since      3.16.3 deprecated in favor of Wordlift_Entity_Uri_Service->get_entity( $uri );
256
-	 * @since      3.2.0
257
-	 *
258
-	 */
259
-	public function get_entity_post_by_uri( $uri ) {
260
-
261
-		return $this->entity_uri_service->get_entity( $uri );
262
-	}
263
-
264
-	/**
265
-	 * Fires once a post has been saved. This function uses the $_REQUEST, therefore
266
-	 * we check that the post we're saving is the current post.
267
-	 *
268
-	 * @see   https://github.com/insideout10/wordlift-plugin/issues/363
269
-	 *
270
-	 * @since 3.2.0
271
-	 *
272
-	 * @param int $post_id Post ID.
273
-	 * @param WP_Post $post Post object.
274
-	 * @param bool $update Whether this is an existing post being updated or not.
275
-	 */
276
-	public function save_post( $post_id, $post, $update ) {
277
-
278
-		// Avoid doing anything if post is autosave or a revision.
279
-		if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
280
-			return;
281
-		}
282
-
283
-		// We're setting the alternative label that have been provided via the UI
284
-		// (in fact we're using $_REQUEST), while save_post may be also called
285
-		// programmatically by some other function: we need to check therefore if
286
-		// the $post_id in the save_post call matches the post id set in the request.
287
-		//
288
-		// If this is not the current post being saved or if it's not an entity, return.
289
-		if ( ! isset( $_REQUEST['post_ID'] ) || $_REQUEST['post_ID'] != $post_id || ! $this->is_entity( $post_id ) ) {
290
-			return;
291
-		}
292
-
293
-		// Get the alt labels from the request (or empty array).
294
-		$alt_labels = isset( $_REQUEST['wl_alternative_label'] ) ? $_REQUEST['wl_alternative_label'] : array();
295
-
296
-		if ( ( ! empty( $_POST['content'] ) && ! empty( $_POST['post_content'] ) ) || isset( $_REQUEST['wl_alternative_label'] ) ) {
297
-			// This is via classic editor, so set the alternative labels.
298
-			$this->set_alternative_labels( $post_id, $alt_labels );
299
-		}
300
-
301
-
302
-	}
303
-
304
-	/**
305
-	 * Set the alternative labels.
306
-	 *
307
-	 * @param int $post_id The post id.
308
-	 * @param array $alt_labels An array of labels.
309
-	 *
310
-	 * @since 3.2.0
311
-	 *
312
-	 */
313
-	public function set_alternative_labels( $post_id, $alt_labels ) {
314
-
315
-		// Bail out if post id is not numeric. We add this check as we found a WP install that was sending a WP_Error
316
-		// instead of post id.
317
-		if ( ! is_numeric( $post_id ) ) {
318
-			return;
319
-		}
320
-
321
-		// Force $alt_labels to be an array
322
-		if ( ! is_array( $alt_labels ) ) {
323
-			$alt_labels = array( $alt_labels );
324
-		}
325
-
326
-		$this->log->debug( "Setting alternative labels [ post id :: $post_id ][ alt labels :: " . implode( ',', $alt_labels ) . " ]" );
327
-
328
-		// Delete all the existing alternate labels.
329
-		delete_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
330
-
331
-		// Set the alternative labels.
332
-		foreach ( $alt_labels as $alt_label ) {
333
-			if ( ! empty( $alt_label ) ) {
334
-				add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, $alt_label );
335
-			}
336
-		}
337
-
338
-	}
339
-
340
-	/**
341
-	 * Retrieve the alternate labels.
342
-	 *
343
-	 * @param int $post_id Post id.
344
-	 *
345
-	 * @return mixed An array  of alternative labels.
346
-	 * @since 3.2.0
347
-	 *
348
-	 */
349
-	public function get_alternative_labels( $post_id ) {
350
-
351
-		return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
352
-	}
353
-
354
-	/**
355
-	 * Retrieve the labels for an entity, i.e. the title + the synonyms.
356
-	 *
357
-	 * @param int $post_id The entity {@link WP_Post} id.
358
-	 *
359
-	 * @return array An array with the entity title and labels.
360
-	 * @since 3.12.0
361
-	 *
362
-	 */
363
-	public function get_labels( $post_id ) {
364
-
365
-		return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
366
-	}
367
-
368
-	/**
369
-	 * Fires before the permalink field in the edit form (this event is available in WP from 4.1.0).
370
-	 *
371
-	 * @param WP_Post $post Post object.
372
-	 *
373
-	 * @since 3.2.0
374
-	 *
375
-	 */
376
-	public function edit_form_before_permalink( $post ) {
377
-
378
-		// If it's not an entity, return.
379
-		if ( ! $this->is_entity( $post->ID ) ) {
380
-			return;
381
-		}
382
-
383
-		// Print the input template.
384
-		$this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
385
-
386
-		// Print all the currently set alternative labels.
387
-		foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
388
-
389
-			echo $this->get_alternative_label_input( $alt_label );
390
-
391
-		};
392
-
393
-		// Print the button.
394
-		$this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
395
-
396
-	}
397
-
398
-	/**
399
-	 * Get the URI for the entity with the specified post id.
400
-	 *
401
-	 * @param int $post_id The entity post id.
402
-	 *
403
-	 * @return null|string The entity URI or NULL if not found or the dataset URI is not configured.
404
-	 * @since 3.6.0
405
-	 *
406
-	 */
407
-	private function get_uri_for_post( $post_id ) {
408
-
409
-		$log = Wordlift_Log_Service::get_logger( get_class() );
410
-
411
-		// If a null is given, nothing to do
412
-		if ( is_null( $post_id ) ) {
413
-			return null;
414
-		}
415
-
416
-		$dataset_uri = wl_configuration_get_redlink_dataset_uri();
417
-
418
-		if ( empty( $dataset_uri ) ) {
419
-			// Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
420
-			$log->debug( 'Continuing, dataset uri not configured...' );
421
-		}
422
-
423
-		$uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
424
-
425
-		/*
156
+        foreach ( $terms as $term ) {
157
+            if ( 1 !== preg_match( '~(^|-)article$~', $term->slug ) ) {
158
+                return true;
159
+            }
160
+        }
161
+
162
+        return false;
163
+    }
164
+
165
+    /**
166
+     * Get the proper classification scope for a given entity post
167
+     *
168
+     * @param integer $post_id An entity post id.
169
+     *
170
+     * @param string $default The default classification scope, `what` if not
171
+     *                         provided.
172
+     *
173
+     * @return string Returns a classification scope (e.g. 'what').
174
+     * @since 3.5.0
175
+     *
176
+     */
177
+    public function get_classification_scope_for( $post_id, $default = WL_WHAT_RELATION ) {
178
+
179
+        if ( false === $this->is_entity( $post_id ) ) {
180
+            return $default;
181
+        }
182
+
183
+        // Retrieve the entity type
184
+        $entity_type_arr = Wordlift_Entity_Type_Service::get_instance()->get( $post_id );
185
+        $entity_type     = str_replace( 'wl-', '', $entity_type_arr['css_class'] );
186
+        // Retrieve classification boxes configuration
187
+        $classification_boxes = unserialize( WL_CORE_POST_CLASSIFICATION_BOXES );
188
+        foreach ( $classification_boxes as $cb ) {
189
+            if ( in_array( $entity_type, $cb['registeredTypes'] ) ) {
190
+                return $cb['id'];
191
+            }
192
+        }
193
+
194
+        return $default;
195
+    }
196
+
197
+    /**
198
+     * Check whether a {@link WP_Post} is used.
199
+     *
200
+     * @param int $post_id The {@link WP_Post}'s id.
201
+     *
202
+     * @return bool|null Null if it's not an entity, otherwise true if it's used.
203
+     */
204
+    public function is_used( $post_id ) {
205
+
206
+        if ( false === $this->is_entity( $post_id ) ) {
207
+            return null;
208
+        }
209
+        // Retrieve the post
210
+        $entity = get_post( $post_id );
211
+
212
+        global $wpdb;
213
+        // Retrieve Wordlift relation instances table name
214
+        $table_name = wl_core_get_relation_instances_table_name();
215
+
216
+        // Check is it's referenced / related to another post / entity
217
+        $stmt = $wpdb->prepare(
218
+            "SELECT COUNT(*) FROM $table_name WHERE  object_id = %d",
219
+            $entity->ID
220
+        );
221
+
222
+        // Perform the query
223
+        $relation_instances = (int) $wpdb->get_var( $stmt );
224
+        // If there is at least one relation instance for the current entity, then it's used
225
+        if ( 0 < $relation_instances ) {
226
+            return true;
227
+        }
228
+
229
+        // Check if the entity uri is used as meta_value
230
+        $stmt = $wpdb->prepare(
231
+            "SELECT COUNT(*) FROM $wpdb->postmeta WHERE post_id != %d AND meta_value = %s",
232
+            $entity->ID,
233
+            wl_get_entity_uri( $entity->ID )
234
+        );
235
+        // Perform the query
236
+        $meta_instances = (int) $wpdb->get_var( $stmt );
237
+
238
+        // If there is at least one meta that refers the current entity uri, then current entity is used
239
+        if ( 0 < $meta_instances ) {
240
+            return true;
241
+        }
242
+
243
+        // If we are here, it means the current entity is not used at the moment
244
+        return false;
245
+    }
246
+
247
+    /**
248
+     * Find entity posts by the entity URI. Entity as searched by their entity URI or same as.
249
+     *
250
+     * @param string $uri The entity URI.
251
+     *
252
+     * @return WP_Post|null A WP_Post instance or null if not found.
253
+     * @deprecated in favor of Wordlift_Entity_Uri_Service->get_entity( $uri );
254
+     *
255
+     * @since      3.16.3 deprecated in favor of Wordlift_Entity_Uri_Service->get_entity( $uri );
256
+     * @since      3.2.0
257
+     *
258
+     */
259
+    public function get_entity_post_by_uri( $uri ) {
260
+
261
+        return $this->entity_uri_service->get_entity( $uri );
262
+    }
263
+
264
+    /**
265
+     * Fires once a post has been saved. This function uses the $_REQUEST, therefore
266
+     * we check that the post we're saving is the current post.
267
+     *
268
+     * @see   https://github.com/insideout10/wordlift-plugin/issues/363
269
+     *
270
+     * @since 3.2.0
271
+     *
272
+     * @param int $post_id Post ID.
273
+     * @param WP_Post $post Post object.
274
+     * @param bool $update Whether this is an existing post being updated or not.
275
+     */
276
+    public function save_post( $post_id, $post, $update ) {
277
+
278
+        // Avoid doing anything if post is autosave or a revision.
279
+        if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
280
+            return;
281
+        }
282
+
283
+        // We're setting the alternative label that have been provided via the UI
284
+        // (in fact we're using $_REQUEST), while save_post may be also called
285
+        // programmatically by some other function: we need to check therefore if
286
+        // the $post_id in the save_post call matches the post id set in the request.
287
+        //
288
+        // If this is not the current post being saved or if it's not an entity, return.
289
+        if ( ! isset( $_REQUEST['post_ID'] ) || $_REQUEST['post_ID'] != $post_id || ! $this->is_entity( $post_id ) ) {
290
+            return;
291
+        }
292
+
293
+        // Get the alt labels from the request (or empty array).
294
+        $alt_labels = isset( $_REQUEST['wl_alternative_label'] ) ? $_REQUEST['wl_alternative_label'] : array();
295
+
296
+        if ( ( ! empty( $_POST['content'] ) && ! empty( $_POST['post_content'] ) ) || isset( $_REQUEST['wl_alternative_label'] ) ) {
297
+            // This is via classic editor, so set the alternative labels.
298
+            $this->set_alternative_labels( $post_id, $alt_labels );
299
+        }
300
+
301
+
302
+    }
303
+
304
+    /**
305
+     * Set the alternative labels.
306
+     *
307
+     * @param int $post_id The post id.
308
+     * @param array $alt_labels An array of labels.
309
+     *
310
+     * @since 3.2.0
311
+     *
312
+     */
313
+    public function set_alternative_labels( $post_id, $alt_labels ) {
314
+
315
+        // Bail out if post id is not numeric. We add this check as we found a WP install that was sending a WP_Error
316
+        // instead of post id.
317
+        if ( ! is_numeric( $post_id ) ) {
318
+            return;
319
+        }
320
+
321
+        // Force $alt_labels to be an array
322
+        if ( ! is_array( $alt_labels ) ) {
323
+            $alt_labels = array( $alt_labels );
324
+        }
325
+
326
+        $this->log->debug( "Setting alternative labels [ post id :: $post_id ][ alt labels :: " . implode( ',', $alt_labels ) . " ]" );
327
+
328
+        // Delete all the existing alternate labels.
329
+        delete_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
330
+
331
+        // Set the alternative labels.
332
+        foreach ( $alt_labels as $alt_label ) {
333
+            if ( ! empty( $alt_label ) ) {
334
+                add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, $alt_label );
335
+            }
336
+        }
337
+
338
+    }
339
+
340
+    /**
341
+     * Retrieve the alternate labels.
342
+     *
343
+     * @param int $post_id Post id.
344
+     *
345
+     * @return mixed An array  of alternative labels.
346
+     * @since 3.2.0
347
+     *
348
+     */
349
+    public function get_alternative_labels( $post_id ) {
350
+
351
+        return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
352
+    }
353
+
354
+    /**
355
+     * Retrieve the labels for an entity, i.e. the title + the synonyms.
356
+     *
357
+     * @param int $post_id The entity {@link WP_Post} id.
358
+     *
359
+     * @return array An array with the entity title and labels.
360
+     * @since 3.12.0
361
+     *
362
+     */
363
+    public function get_labels( $post_id ) {
364
+
365
+        return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
366
+    }
367
+
368
+    /**
369
+     * Fires before the permalink field in the edit form (this event is available in WP from 4.1.0).
370
+     *
371
+     * @param WP_Post $post Post object.
372
+     *
373
+     * @since 3.2.0
374
+     *
375
+     */
376
+    public function edit_form_before_permalink( $post ) {
377
+
378
+        // If it's not an entity, return.
379
+        if ( ! $this->is_entity( $post->ID ) ) {
380
+            return;
381
+        }
382
+
383
+        // Print the input template.
384
+        $this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
385
+
386
+        // Print all the currently set alternative labels.
387
+        foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
388
+
389
+            echo $this->get_alternative_label_input( $alt_label );
390
+
391
+        };
392
+
393
+        // Print the button.
394
+        $this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
395
+
396
+    }
397
+
398
+    /**
399
+     * Get the URI for the entity with the specified post id.
400
+     *
401
+     * @param int $post_id The entity post id.
402
+     *
403
+     * @return null|string The entity URI or NULL if not found or the dataset URI is not configured.
404
+     * @since 3.6.0
405
+     *
406
+     */
407
+    private function get_uri_for_post( $post_id ) {
408
+
409
+        $log = Wordlift_Log_Service::get_logger( get_class() );
410
+
411
+        // If a null is given, nothing to do
412
+        if ( is_null( $post_id ) ) {
413
+            return null;
414
+        }
415
+
416
+        $dataset_uri = wl_configuration_get_redlink_dataset_uri();
417
+
418
+        if ( empty( $dataset_uri ) ) {
419
+            // Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
420
+            $log->debug( 'Continuing, dataset uri not configured...' );
421
+        }
422
+
423
+        $uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
424
+
425
+        /*
426 426
 		 * Consider the URI invalid if it doesn't start with the dataset URI.
427 427
 		 *
428 428
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/996
429 429
 		 */
430
-		if ( null === $dataset_uri || 0 !== strpos( $uri, $dataset_uri ) ) {
431
-			$uri = null;
432
-		}
433
-
434
-		// Set the URI if it isn't set yet.
435
-		$post_status = get_post_status( $post_id );
436
-		if ( empty( $uri ) && 'auto-draft' !== $post_status && 'revision' !== $post_status && 'inherit' !== $post_status ) {
437
-			$uri = wl_build_entity_uri( $post_id );
438
-			wl_set_entity_uri( $post_id, $uri );
439
-		}
440
-
441
-		return $uri;
442
-	}
443
-
444
-	public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
445
-
446
-		if ( Object_Type_Enum::POST === $type ) {
447
-			return $this->get_uri_for_post( $object_id );
448
-		}
449
-
450
-		if ( Object_Type_Enum::USER === $type ) {
451
-			$uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
452
-
453
-			return ( false === $uri ? null : $uri );
454
-		}
455
-
456
-		return null;
457
-	}
458
-
459
-	/**
460
-	 * Get the alternative label input HTML code.
461
-	 *
462
-	 * @param string $value The input value.
463
-	 *
464
-	 * @return string The input HTML code.
465
-	 * @since 3.2.0
466
-	 *
467
-	 */
468
-	private function get_alternative_label_input( $value = '' ) {
469
-
470
-		return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
471
-	}
472
-
473
-	/**
474
-	 * Get the number of entity posts published in this blog.
475
-	 *
476
-	 * @return int The number of published entity posts.
477
-	 * @since 3.6.0
478
-	 *
479
-	 */
480
-	public function count() {
481
-		global $wpdb;
482
-
483
-		// Try to get the count from the transient.
484
-		$count = get_transient( '_wl_entity_service__count' );
485
-		if ( false !== $count ) {
486
-			return $count;
487
-		}
488
-
489
-		// Query the count.
490
-		$count = $wpdb->get_var( $wpdb->prepare(
491
-			"SELECT COUNT( DISTINCT( tr.object_id ) )"
492
-			. " FROM {$wpdb->term_relationships} tr"
493
-			. " INNER JOIN {$wpdb->term_taxonomy} tt"
494
-			. "  ON tt.taxonomy = %s AND tt.term_taxonomy_id = tr.term_taxonomy_id"
495
-			. " INNER JOIN {$wpdb->terms} t"
496
-			. "  ON t.term_id = tt.term_id AND t.name != %s",
497
-			Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
498
-			'article'
499
-		) );
500
-
501
-		// Store the count in cache.
502
-		set_transient( '_wl_entity_service__count', $count, 900 );
503
-
504
-		return $count;
505
-	}
506
-
507
-	/**
508
-	 * Add the entity filtering criterias to the arguments for a `get_posts`
509
-	 * call.
510
-	 *
511
-	 * @param array $args The arguments for a `get_posts` call.
512
-	 *
513
-	 * @return array The arguments for a `get_posts` call.
514
-	 * @since 3.15.0
515
-	 *
516
-	 */
517
-	public static function add_criterias( $args ) {
518
-
519
-		// Build an optimal tax-query.
520
-		$tax_query = array(
521
-			'relation' => 'AND',
522
-			array(
523
-				'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
524
-				'operator' => 'EXISTS',
525
-			),
526
-			array(
527
-				'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
528
-				'field'    => 'slug',
529
-				'terms'    => 'article',
530
-				'operator' => 'NOT IN',
531
-			),
532
-		);
533
-
534
-		return $args + array(
535
-				'post_type' => Wordlift_Entity_Service::valid_entity_post_types(),
536
-				/*
430
+        if ( null === $dataset_uri || 0 !== strpos( $uri, $dataset_uri ) ) {
431
+            $uri = null;
432
+        }
433
+
434
+        // Set the URI if it isn't set yet.
435
+        $post_status = get_post_status( $post_id );
436
+        if ( empty( $uri ) && 'auto-draft' !== $post_status && 'revision' !== $post_status && 'inherit' !== $post_status ) {
437
+            $uri = wl_build_entity_uri( $post_id );
438
+            wl_set_entity_uri( $post_id, $uri );
439
+        }
440
+
441
+        return $uri;
442
+    }
443
+
444
+    public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
445
+
446
+        if ( Object_Type_Enum::POST === $type ) {
447
+            return $this->get_uri_for_post( $object_id );
448
+        }
449
+
450
+        if ( Object_Type_Enum::USER === $type ) {
451
+            $uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
452
+
453
+            return ( false === $uri ? null : $uri );
454
+        }
455
+
456
+        return null;
457
+    }
458
+
459
+    /**
460
+     * Get the alternative label input HTML code.
461
+     *
462
+     * @param string $value The input value.
463
+     *
464
+     * @return string The input HTML code.
465
+     * @since 3.2.0
466
+     *
467
+     */
468
+    private function get_alternative_label_input( $value = '' ) {
469
+
470
+        return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
471
+    }
472
+
473
+    /**
474
+     * Get the number of entity posts published in this blog.
475
+     *
476
+     * @return int The number of published entity posts.
477
+     * @since 3.6.0
478
+     *
479
+     */
480
+    public function count() {
481
+        global $wpdb;
482
+
483
+        // Try to get the count from the transient.
484
+        $count = get_transient( '_wl_entity_service__count' );
485
+        if ( false !== $count ) {
486
+            return $count;
487
+        }
488
+
489
+        // Query the count.
490
+        $count = $wpdb->get_var( $wpdb->prepare(
491
+            "SELECT COUNT( DISTINCT( tr.object_id ) )"
492
+            . " FROM {$wpdb->term_relationships} tr"
493
+            . " INNER JOIN {$wpdb->term_taxonomy} tt"
494
+            . "  ON tt.taxonomy = %s AND tt.term_taxonomy_id = tr.term_taxonomy_id"
495
+            . " INNER JOIN {$wpdb->terms} t"
496
+            . "  ON t.term_id = tt.term_id AND t.name != %s",
497
+            Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
498
+            'article'
499
+        ) );
500
+
501
+        // Store the count in cache.
502
+        set_transient( '_wl_entity_service__count', $count, 900 );
503
+
504
+        return $count;
505
+    }
506
+
507
+    /**
508
+     * Add the entity filtering criterias to the arguments for a `get_posts`
509
+     * call.
510
+     *
511
+     * @param array $args The arguments for a `get_posts` call.
512
+     *
513
+     * @return array The arguments for a `get_posts` call.
514
+     * @since 3.15.0
515
+     *
516
+     */
517
+    public static function add_criterias( $args ) {
518
+
519
+        // Build an optimal tax-query.
520
+        $tax_query = array(
521
+            'relation' => 'AND',
522
+            array(
523
+                'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
524
+                'operator' => 'EXISTS',
525
+            ),
526
+            array(
527
+                'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
528
+                'field'    => 'slug',
529
+                'terms'    => 'article',
530
+                'operator' => 'NOT IN',
531
+            ),
532
+        );
533
+
534
+        return $args + array(
535
+                'post_type' => Wordlift_Entity_Service::valid_entity_post_types(),
536
+                /*
537 537
 				 * Ensure compatibility with Polylang.
538 538
 				 *
539 539
 				 * @see https://github.com/insideout10/wordlift-plugin/issues/855.
@@ -541,102 +541,102 @@  discard block
 block discarded – undo
541 541
 				 *
542 542
 				 * @since 3.19.5
543 543
 				 */
544
-				'lang'      => '',
545
-				'tax_query' => $tax_query,
546
-			);
547
-	}
548
-
549
-	/**
550
-	 * Create a new entity.
551
-	 *
552
-	 * @param string $name The entity name.
553
-	 * @param string $type_uri The entity's type URI.
554
-	 * @param null $logo The entity logo id (or NULL if none).
555
-	 * @param string $status The post status, by default 'publish'.
556
-	 *
557
-	 * @return int|WP_Error The entity post id or a {@link WP_Error} in case the `wp_insert_post` call fails.
558
-	 * @since 3.9.0
559
-	 *
560
-	 */
561
-	public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
562
-
563
-		// Create an entity for the publisher.
564
-		$post_id = @wp_insert_post( array(
565
-			'post_type'    => self::TYPE_NAME,
566
-			'post_title'   => $name,
567
-			'post_status'  => $status,
568
-			'post_content' => '',
569
-		) );
570
-
571
-		// Return the error if any.
572
-		if ( is_wp_error( $post_id ) ) {
573
-			return $post_id;
574
-		}
575
-
576
-		// Set the entity logo.
577
-		if ( $logo && is_numeric( $logo ) ) {
578
-			set_post_thumbnail( $post_id, $logo );
579
-		}
580
-
581
-		// Set the entity type.
582
-		Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
583
-
584
-		return $post_id;
585
-	}
586
-
587
-	/**
588
-	 * Get the entities related to the one with the specified id. By default only
589
-	 * published entities will be returned.
590
-	 *
591
-	 * @param int $id The post id.
592
-	 * @param string $post_status The target post status (default = publish).
593
-	 *
594
-	 * @return array An array of post ids.
595
-	 * @since 3.10.0
596
-	 *
597
-	 */
598
-	public function get_related_entities( $id, $post_status = 'publish' ) {
599
-
600
-		return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
601
-	}
602
-
603
-	/**
604
-	 * Get the list of entities.
605
-	 *
606
-	 * @param array $params Custom parameters for WordPress' own {@link get_posts} function.
607
-	 *
608
-	 * @return array An array of entity posts.
609
-	 * @since 3.12.2
610
-	 *
611
-	 */
612
-	public function get( $params = array() ) {
613
-
614
-		// Set the defaults.
615
-		$defaults = array( 'post_type' => 'entity' );
616
-
617
-		// Merge the defaults with the provided parameters.
618
-		$args = wp_parse_args( $params, $defaults );
619
-
620
-		// Call the `get_posts` function.
621
-		return get_posts( $args );
622
-	}
623
-
624
-	/**
625
-	 * The list of post type names which can be used for entities
626
-	 *
627
-	 * Criteria is that the post type is public. The list of valid post types
628
-	 * can be overridden with a filter.
629
-	 *
630
-	 * @return array Array containing the names of the valid post types.
631
-	 * @since 3.15.0
632
-	 *
633
-	 */
634
-	static function valid_entity_post_types() {
635
-
636
-		// Ignore builtins in the call to avoid getting attachments.
637
-		$post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
638
-
639
-		return apply_filters( 'wl_valid_entity_post_types', $post_types );
640
-	}
544
+                'lang'      => '',
545
+                'tax_query' => $tax_query,
546
+            );
547
+    }
548
+
549
+    /**
550
+     * Create a new entity.
551
+     *
552
+     * @param string $name The entity name.
553
+     * @param string $type_uri The entity's type URI.
554
+     * @param null $logo The entity logo id (or NULL if none).
555
+     * @param string $status The post status, by default 'publish'.
556
+     *
557
+     * @return int|WP_Error The entity post id or a {@link WP_Error} in case the `wp_insert_post` call fails.
558
+     * @since 3.9.0
559
+     *
560
+     */
561
+    public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
562
+
563
+        // Create an entity for the publisher.
564
+        $post_id = @wp_insert_post( array(
565
+            'post_type'    => self::TYPE_NAME,
566
+            'post_title'   => $name,
567
+            'post_status'  => $status,
568
+            'post_content' => '',
569
+        ) );
570
+
571
+        // Return the error if any.
572
+        if ( is_wp_error( $post_id ) ) {
573
+            return $post_id;
574
+        }
575
+
576
+        // Set the entity logo.
577
+        if ( $logo && is_numeric( $logo ) ) {
578
+            set_post_thumbnail( $post_id, $logo );
579
+        }
580
+
581
+        // Set the entity type.
582
+        Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
583
+
584
+        return $post_id;
585
+    }
586
+
587
+    /**
588
+     * Get the entities related to the one with the specified id. By default only
589
+     * published entities will be returned.
590
+     *
591
+     * @param int $id The post id.
592
+     * @param string $post_status The target post status (default = publish).
593
+     *
594
+     * @return array An array of post ids.
595
+     * @since 3.10.0
596
+     *
597
+     */
598
+    public function get_related_entities( $id, $post_status = 'publish' ) {
599
+
600
+        return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
601
+    }
602
+
603
+    /**
604
+     * Get the list of entities.
605
+     *
606
+     * @param array $params Custom parameters for WordPress' own {@link get_posts} function.
607
+     *
608
+     * @return array An array of entity posts.
609
+     * @since 3.12.2
610
+     *
611
+     */
612
+    public function get( $params = array() ) {
613
+
614
+        // Set the defaults.
615
+        $defaults = array( 'post_type' => 'entity' );
616
+
617
+        // Merge the defaults with the provided parameters.
618
+        $args = wp_parse_args( $params, $defaults );
619
+
620
+        // Call the `get_posts` function.
621
+        return get_posts( $args );
622
+    }
623
+
624
+    /**
625
+     * The list of post type names which can be used for entities
626
+     *
627
+     * Criteria is that the post type is public. The list of valid post types
628
+     * can be overridden with a filter.
629
+     *
630
+     * @return array Array containing the names of the valid post types.
631
+     * @since 3.15.0
632
+     *
633
+     */
634
+    static function valid_entity_post_types() {
635
+
636
+        // Ignore builtins in the call to avoid getting attachments.
637
+        $post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
638
+
639
+        return apply_filters( 'wl_valid_entity_post_types', $post_types );
640
+    }
641 641
 
642 642
 }
Please login to merge, or discard this patch.
Spacing   +91 added lines, -91 removed lines patch added patch discarded remove patch
@@ -99,9 +99,9 @@  discard block
 block discarded – undo
99 99
 	 * @since 3.2.0
100 100
 	 *
101 101
 	 */
102
-	public function __construct( $ui_service, $relation_service, $entity_uri_service ) {
102
+	public function __construct($ui_service, $relation_service, $entity_uri_service) {
103 103
 
104
-		$this->log = Wordlift_Log_Service::get_logger( 'Wordlift_Entity_Service' );
104
+		$this->log = Wordlift_Log_Service::get_logger('Wordlift_Entity_Service');
105 105
 
106 106
 		$this->ui_service         = $ui_service;
107 107
 		$this->relation_service   = $relation_service;
@@ -132,17 +132,17 @@  discard block
 block discarded – undo
132 132
 	 * @since 3.1.0
133 133
 	 *
134 134
 	 */
135
-	public function is_entity( $post_id ) {
135
+	public function is_entity($post_id) {
136 136
 
137
-		$terms = wp_get_object_terms( $post_id, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME );
137
+		$terms = wp_get_object_terms($post_id, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME);
138 138
 
139
-		if ( is_wp_error( $terms ) ) {
140
-			$this->log->error( "Cannot get the terms for post $post_id: " . $terms->get_error_message() );
139
+		if (is_wp_error($terms)) {
140
+			$this->log->error("Cannot get the terms for post $post_id: ".$terms->get_error_message());
141 141
 
142 142
 			return false;
143 143
 		}
144 144
 
145
-		if ( empty( $terms ) ) {
145
+		if (empty($terms)) {
146 146
 			return false;
147 147
 		}
148 148
 
@@ -153,8 +153,8 @@  discard block
 block discarded – undo
153 153
 		 *
154 154
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/835
155 155
 		 */
156
-		foreach ( $terms as $term ) {
157
-			if ( 1 !== preg_match( '~(^|-)article$~', $term->slug ) ) {
156
+		foreach ($terms as $term) {
157
+			if (1 !== preg_match('~(^|-)article$~', $term->slug)) {
158 158
 				return true;
159 159
 			}
160 160
 		}
@@ -174,19 +174,19 @@  discard block
 block discarded – undo
174 174
 	 * @since 3.5.0
175 175
 	 *
176 176
 	 */
177
-	public function get_classification_scope_for( $post_id, $default = WL_WHAT_RELATION ) {
177
+	public function get_classification_scope_for($post_id, $default = WL_WHAT_RELATION) {
178 178
 
179
-		if ( false === $this->is_entity( $post_id ) ) {
179
+		if (false === $this->is_entity($post_id)) {
180 180
 			return $default;
181 181
 		}
182 182
 
183 183
 		// Retrieve the entity type
184
-		$entity_type_arr = Wordlift_Entity_Type_Service::get_instance()->get( $post_id );
185
-		$entity_type     = str_replace( 'wl-', '', $entity_type_arr['css_class'] );
184
+		$entity_type_arr = Wordlift_Entity_Type_Service::get_instance()->get($post_id);
185
+		$entity_type     = str_replace('wl-', '', $entity_type_arr['css_class']);
186 186
 		// Retrieve classification boxes configuration
187
-		$classification_boxes = unserialize( WL_CORE_POST_CLASSIFICATION_BOXES );
188
-		foreach ( $classification_boxes as $cb ) {
189
-			if ( in_array( $entity_type, $cb['registeredTypes'] ) ) {
187
+		$classification_boxes = unserialize(WL_CORE_POST_CLASSIFICATION_BOXES);
188
+		foreach ($classification_boxes as $cb) {
189
+			if (in_array($entity_type, $cb['registeredTypes'])) {
190 190
 				return $cb['id'];
191 191
 			}
192 192
 		}
@@ -201,13 +201,13 @@  discard block
 block discarded – undo
201 201
 	 *
202 202
 	 * @return bool|null Null if it's not an entity, otherwise true if it's used.
203 203
 	 */
204
-	public function is_used( $post_id ) {
204
+	public function is_used($post_id) {
205 205
 
206
-		if ( false === $this->is_entity( $post_id ) ) {
206
+		if (false === $this->is_entity($post_id)) {
207 207
 			return null;
208 208
 		}
209 209
 		// Retrieve the post
210
-		$entity = get_post( $post_id );
210
+		$entity = get_post($post_id);
211 211
 
212 212
 		global $wpdb;
213 213
 		// Retrieve Wordlift relation instances table name
@@ -220,9 +220,9 @@  discard block
 block discarded – undo
220 220
 		);
221 221
 
222 222
 		// Perform the query
223
-		$relation_instances = (int) $wpdb->get_var( $stmt );
223
+		$relation_instances = (int) $wpdb->get_var($stmt);
224 224
 		// If there is at least one relation instance for the current entity, then it's used
225
-		if ( 0 < $relation_instances ) {
225
+		if (0 < $relation_instances) {
226 226
 			return true;
227 227
 		}
228 228
 
@@ -230,13 +230,13 @@  discard block
 block discarded – undo
230 230
 		$stmt = $wpdb->prepare(
231 231
 			"SELECT COUNT(*) FROM $wpdb->postmeta WHERE post_id != %d AND meta_value = %s",
232 232
 			$entity->ID,
233
-			wl_get_entity_uri( $entity->ID )
233
+			wl_get_entity_uri($entity->ID)
234 234
 		);
235 235
 		// Perform the query
236
-		$meta_instances = (int) $wpdb->get_var( $stmt );
236
+		$meta_instances = (int) $wpdb->get_var($stmt);
237 237
 
238 238
 		// If there is at least one meta that refers the current entity uri, then current entity is used
239
-		if ( 0 < $meta_instances ) {
239
+		if (0 < $meta_instances) {
240 240
 			return true;
241 241
 		}
242 242
 
@@ -256,9 +256,9 @@  discard block
 block discarded – undo
256 256
 	 * @since      3.2.0
257 257
 	 *
258 258
 	 */
259
-	public function get_entity_post_by_uri( $uri ) {
259
+	public function get_entity_post_by_uri($uri) {
260 260
 
261
-		return $this->entity_uri_service->get_entity( $uri );
261
+		return $this->entity_uri_service->get_entity($uri);
262 262
 	}
263 263
 
264 264
 	/**
@@ -273,10 +273,10 @@  discard block
 block discarded – undo
273 273
 	 * @param WP_Post $post Post object.
274 274
 	 * @param bool $update Whether this is an existing post being updated or not.
275 275
 	 */
276
-	public function save_post( $post_id, $post, $update ) {
276
+	public function save_post($post_id, $post, $update) {
277 277
 
278 278
 		// Avoid doing anything if post is autosave or a revision.
279
-		if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
279
+		if (wp_is_post_autosave($post) || wp_is_post_revision($post)) {
280 280
 			return;
281 281
 		}
282 282
 
@@ -286,16 +286,16 @@  discard block
 block discarded – undo
286 286
 		// the $post_id in the save_post call matches the post id set in the request.
287 287
 		//
288 288
 		// If this is not the current post being saved or if it's not an entity, return.
289
-		if ( ! isset( $_REQUEST['post_ID'] ) || $_REQUEST['post_ID'] != $post_id || ! $this->is_entity( $post_id ) ) {
289
+		if ( ! isset($_REQUEST['post_ID']) || $_REQUEST['post_ID'] != $post_id || ! $this->is_entity($post_id)) {
290 290
 			return;
291 291
 		}
292 292
 
293 293
 		// Get the alt labels from the request (or empty array).
294
-		$alt_labels = isset( $_REQUEST['wl_alternative_label'] ) ? $_REQUEST['wl_alternative_label'] : array();
294
+		$alt_labels = isset($_REQUEST['wl_alternative_label']) ? $_REQUEST['wl_alternative_label'] : array();
295 295
 
296
-		if ( ( ! empty( $_POST['content'] ) && ! empty( $_POST['post_content'] ) ) || isset( $_REQUEST['wl_alternative_label'] ) ) {
296
+		if (( ! empty($_POST['content']) && ! empty($_POST['post_content'])) || isset($_REQUEST['wl_alternative_label'])) {
297 297
 			// This is via classic editor, so set the alternative labels.
298
-			$this->set_alternative_labels( $post_id, $alt_labels );
298
+			$this->set_alternative_labels($post_id, $alt_labels);
299 299
 		}
300 300
 
301 301
 
@@ -310,28 +310,28 @@  discard block
 block discarded – undo
310 310
 	 * @since 3.2.0
311 311
 	 *
312 312
 	 */
313
-	public function set_alternative_labels( $post_id, $alt_labels ) {
313
+	public function set_alternative_labels($post_id, $alt_labels) {
314 314
 
315 315
 		// Bail out if post id is not numeric. We add this check as we found a WP install that was sending a WP_Error
316 316
 		// instead of post id.
317
-		if ( ! is_numeric( $post_id ) ) {
317
+		if ( ! is_numeric($post_id)) {
318 318
 			return;
319 319
 		}
320 320
 
321 321
 		// Force $alt_labels to be an array
322
-		if ( ! is_array( $alt_labels ) ) {
323
-			$alt_labels = array( $alt_labels );
322
+		if ( ! is_array($alt_labels)) {
323
+			$alt_labels = array($alt_labels);
324 324
 		}
325 325
 
326
-		$this->log->debug( "Setting alternative labels [ post id :: $post_id ][ alt labels :: " . implode( ',', $alt_labels ) . " ]" );
326
+		$this->log->debug("Setting alternative labels [ post id :: $post_id ][ alt labels :: ".implode(',', $alt_labels)." ]");
327 327
 
328 328
 		// Delete all the existing alternate labels.
329
-		delete_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
329
+		delete_post_meta($post_id, self::ALTERNATIVE_LABEL_META_KEY);
330 330
 
331 331
 		// Set the alternative labels.
332
-		foreach ( $alt_labels as $alt_label ) {
333
-			if ( ! empty( $alt_label ) ) {
334
-				add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, $alt_label );
332
+		foreach ($alt_labels as $alt_label) {
333
+			if ( ! empty($alt_label)) {
334
+				add_post_meta($post_id, self::ALTERNATIVE_LABEL_META_KEY, $alt_label);
335 335
 			}
336 336
 		}
337 337
 
@@ -346,9 +346,9 @@  discard block
 block discarded – undo
346 346
 	 * @since 3.2.0
347 347
 	 *
348 348
 	 */
349
-	public function get_alternative_labels( $post_id ) {
349
+	public function get_alternative_labels($post_id) {
350 350
 
351
-		return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
351
+		return get_post_meta($post_id, self::ALTERNATIVE_LABEL_META_KEY);
352 352
 	}
353 353
 
354 354
 	/**
@@ -360,9 +360,9 @@  discard block
 block discarded – undo
360 360
 	 * @since 3.12.0
361 361
 	 *
362 362
 	 */
363
-	public function get_labels( $post_id ) {
363
+	public function get_labels($post_id) {
364 364
 
365
-		return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
365
+		return array_merge((array) get_the_title($post_id), $this->get_alternative_labels($post_id));
366 366
 	}
367 367
 
368 368
 	/**
@@ -373,25 +373,25 @@  discard block
 block discarded – undo
373 373
 	 * @since 3.2.0
374 374
 	 *
375 375
 	 */
376
-	public function edit_form_before_permalink( $post ) {
376
+	public function edit_form_before_permalink($post) {
377 377
 
378 378
 		// If it's not an entity, return.
379
-		if ( ! $this->is_entity( $post->ID ) ) {
379
+		if ( ! $this->is_entity($post->ID)) {
380 380
 			return;
381 381
 		}
382 382
 
383 383
 		// Print the input template.
384
-		$this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
384
+		$this->ui_service->print_template('wl-tmpl-alternative-label-input', $this->get_alternative_label_input());
385 385
 
386 386
 		// Print all the currently set alternative labels.
387
-		foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
387
+		foreach ($this->get_alternative_labels($post->ID) as $alt_label) {
388 388
 
389
-			echo $this->get_alternative_label_input( $alt_label );
389
+			echo $this->get_alternative_label_input($alt_label);
390 390
 
391 391
 		};
392 392
 
393 393
 		// Print the button.
394
-		$this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
394
+		$this->ui_service->print_button('wl-add-alternative-labels-button', __('Add more titles', 'wordlift'));
395 395
 
396 396
 	}
397 397
 
@@ -404,53 +404,53 @@  discard block
 block discarded – undo
404 404
 	 * @since 3.6.0
405 405
 	 *
406 406
 	 */
407
-	private function get_uri_for_post( $post_id ) {
407
+	private function get_uri_for_post($post_id) {
408 408
 
409
-		$log = Wordlift_Log_Service::get_logger( get_class() );
409
+		$log = Wordlift_Log_Service::get_logger(get_class());
410 410
 
411 411
 		// If a null is given, nothing to do
412
-		if ( is_null( $post_id ) ) {
412
+		if (is_null($post_id)) {
413 413
 			return null;
414 414
 		}
415 415
 
416 416
 		$dataset_uri = wl_configuration_get_redlink_dataset_uri();
417 417
 
418
-		if ( empty( $dataset_uri ) ) {
418
+		if (empty($dataset_uri)) {
419 419
 			// Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
420
-			$log->debug( 'Continuing, dataset uri not configured...' );
420
+			$log->debug('Continuing, dataset uri not configured...');
421 421
 		}
422 422
 
423
-		$uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
423
+		$uri = get_post_meta($post_id, WL_ENTITY_URL_META_NAME, true);
424 424
 
425 425
 		/*
426 426
 		 * Consider the URI invalid if it doesn't start with the dataset URI.
427 427
 		 *
428 428
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/996
429 429
 		 */
430
-		if ( null === $dataset_uri || 0 !== strpos( $uri, $dataset_uri ) ) {
430
+		if (null === $dataset_uri || 0 !== strpos($uri, $dataset_uri)) {
431 431
 			$uri = null;
432 432
 		}
433 433
 
434 434
 		// Set the URI if it isn't set yet.
435
-		$post_status = get_post_status( $post_id );
436
-		if ( empty( $uri ) && 'auto-draft' !== $post_status && 'revision' !== $post_status && 'inherit' !== $post_status ) {
437
-			$uri = wl_build_entity_uri( $post_id );
438
-			wl_set_entity_uri( $post_id, $uri );
435
+		$post_status = get_post_status($post_id);
436
+		if (empty($uri) && 'auto-draft' !== $post_status && 'revision' !== $post_status && 'inherit' !== $post_status) {
437
+			$uri = wl_build_entity_uri($post_id);
438
+			wl_set_entity_uri($post_id, $uri);
439 439
 		}
440 440
 
441 441
 		return $uri;
442 442
 	}
443 443
 
444
-	public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
444
+	public function get_uri($object_id, $type = Object_Type_Enum::POST) {
445 445
 
446
-		if ( Object_Type_Enum::POST === $type ) {
447
-			return $this->get_uri_for_post( $object_id );
446
+		if (Object_Type_Enum::POST === $type) {
447
+			return $this->get_uri_for_post($object_id);
448 448
 		}
449 449
 
450
-		if ( Object_Type_Enum::USER === $type ) {
451
-			$uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
450
+		if (Object_Type_Enum::USER === $type) {
451
+			$uri = Wordlift_User_Service::get_instance()->get_uri($object_id);
452 452
 
453
-			return ( false === $uri ? null : $uri );
453
+			return (false === $uri ? null : $uri);
454 454
 		}
455 455
 
456 456
 		return null;
@@ -465,9 +465,9 @@  discard block
 block discarded – undo
465 465
 	 * @since 3.2.0
466 466
 	 *
467 467
 	 */
468
-	private function get_alternative_label_input( $value = '' ) {
468
+	private function get_alternative_label_input($value = '') {
469 469
 
470
-		return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
470
+		return sprintf(self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr($value), __('Delete', 'wordlift'));
471 471
 	}
472 472
 
473 473
 	/**
@@ -481,13 +481,13 @@  discard block
 block discarded – undo
481 481
 		global $wpdb;
482 482
 
483 483
 		// Try to get the count from the transient.
484
-		$count = get_transient( '_wl_entity_service__count' );
485
-		if ( false !== $count ) {
484
+		$count = get_transient('_wl_entity_service__count');
485
+		if (false !== $count) {
486 486
 			return $count;
487 487
 		}
488 488
 
489 489
 		// Query the count.
490
-		$count = $wpdb->get_var( $wpdb->prepare(
490
+		$count = $wpdb->get_var($wpdb->prepare(
491 491
 			"SELECT COUNT( DISTINCT( tr.object_id ) )"
492 492
 			. " FROM {$wpdb->term_relationships} tr"
493 493
 			. " INNER JOIN {$wpdb->term_taxonomy} tt"
@@ -496,10 +496,10 @@  discard block
 block discarded – undo
496 496
 			. "  ON t.term_id = tt.term_id AND t.name != %s",
497 497
 			Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
498 498
 			'article'
499
-		) );
499
+		));
500 500
 
501 501
 		// Store the count in cache.
502
-		set_transient( '_wl_entity_service__count', $count, 900 );
502
+		set_transient('_wl_entity_service__count', $count, 900);
503 503
 
504 504
 		return $count;
505 505
 	}
@@ -514,7 +514,7 @@  discard block
 block discarded – undo
514 514
 	 * @since 3.15.0
515 515
 	 *
516 516
 	 */
517
-	public static function add_criterias( $args ) {
517
+	public static function add_criterias($args) {
518 518
 
519 519
 		// Build an optimal tax-query.
520 520
 		$tax_query = array(
@@ -558,28 +558,28 @@  discard block
 block discarded – undo
558 558
 	 * @since 3.9.0
559 559
 	 *
560 560
 	 */
561
-	public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
561
+	public function create($name, $type_uri, $logo = null, $status = 'publish') {
562 562
 
563 563
 		// Create an entity for the publisher.
564
-		$post_id = @wp_insert_post( array(
564
+		$post_id = @wp_insert_post(array(
565 565
 			'post_type'    => self::TYPE_NAME,
566 566
 			'post_title'   => $name,
567 567
 			'post_status'  => $status,
568 568
 			'post_content' => '',
569
-		) );
569
+		));
570 570
 
571 571
 		// Return the error if any.
572
-		if ( is_wp_error( $post_id ) ) {
572
+		if (is_wp_error($post_id)) {
573 573
 			return $post_id;
574 574
 		}
575 575
 
576 576
 		// Set the entity logo.
577
-		if ( $logo && is_numeric( $logo ) ) {
578
-			set_post_thumbnail( $post_id, $logo );
577
+		if ($logo && is_numeric($logo)) {
578
+			set_post_thumbnail($post_id, $logo);
579 579
 		}
580 580
 
581 581
 		// Set the entity type.
582
-		Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
582
+		Wordlift_Entity_Type_Service::get_instance()->set($post_id, $type_uri);
583 583
 
584 584
 		return $post_id;
585 585
 	}
@@ -595,9 +595,9 @@  discard block
 block discarded – undo
595 595
 	 * @since 3.10.0
596 596
 	 *
597 597
 	 */
598
-	public function get_related_entities( $id, $post_status = 'publish' ) {
598
+	public function get_related_entities($id, $post_status = 'publish') {
599 599
 
600
-		return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
600
+		return $this->relation_service->get_objects($id, 'ids', null, $post_status);
601 601
 	}
602 602
 
603 603
 	/**
@@ -609,16 +609,16 @@  discard block
 block discarded – undo
609 609
 	 * @since 3.12.2
610 610
 	 *
611 611
 	 */
612
-	public function get( $params = array() ) {
612
+	public function get($params = array()) {
613 613
 
614 614
 		// Set the defaults.
615
-		$defaults = array( 'post_type' => 'entity' );
615
+		$defaults = array('post_type' => 'entity');
616 616
 
617 617
 		// Merge the defaults with the provided parameters.
618
-		$args = wp_parse_args( $params, $defaults );
618
+		$args = wp_parse_args($params, $defaults);
619 619
 
620 620
 		// Call the `get_posts` function.
621
-		return get_posts( $args );
621
+		return get_posts($args);
622 622
 	}
623 623
 
624 624
 	/**
@@ -634,9 +634,9 @@  discard block
 block discarded – undo
634 634
 	static function valid_entity_post_types() {
635 635
 
636 636
 		// Ignore builtins in the call to avoid getting attachments.
637
-		$post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
637
+		$post_types = array('post', 'page', self::TYPE_NAME, 'product');
638 638
 
639
-		return apply_filters( 'wl_valid_entity_post_types', $post_types );
639
+		return apply_filters('wl_valid_entity_post_types', $post_types);
640 640
 	}
641 641
 
642 642
 }
Please login to merge, or discard this patch.