Completed
Pull Request — master (#1484)
by Naveen
01:02
created
src/includes/class-wordlift-entity-service.php 2 patches
Indentation   +615 added lines, -615 removed lines patch added patch discarded remove patch
@@ -18,539 +18,539 @@  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'] ) ? (array) $_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
-
334
-			if ( ! preg_match('/^[\w\-, ]+$/', $alt_label )  ) {
335
-				continue;
336
-			}
337
-
338
-			if ( ! empty( $alt_label ) ) {
339
-				add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, (string) $alt_label );
340
-			}
341
-		}
342
-
343
-	}
344
-
345
-	/**
346
-	 * Retrieve the alternate labels.
347
-	 *
348
-	 * @param int $post_id Post id.
349
-	 *
350
-	 * @return mixed An array  of alternative labels.
351
-	 * @since 3.2.0
352
-	 *
353
-	 */
354
-	public function get_alternative_labels( $post_id ) {
355
-
356
-		return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
357
-	}
358
-
359
-	/**
360
-	 * Retrieve the labels for an entity, i.e. the title + the synonyms.
361
-	 *
362
-	 * @param int $post_id The entity {@link WP_Post} id.
363
-	 * @param int $object_type The object type {@link Object_Type_Enum}
364
-	 *
365
-	 * @return array An array with the entity title and labels.
366
-	 * @since 3.12.0
367
-	 */
368
-	public function get_labels( $post_id, $object_type = Object_Type_Enum::POST ) {
369
-		if ( $object_type === Object_Type_Enum::POST ) {
370
-			return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
371
-		}
372
-		// Term Reference dont have synonyms yet.
373
-		return array();
374
-	}
375
-
376
-	/**
377
-	 * Fires before the permalink field in the edit form (this event is available in WP from 4.1.0).
378
-	 *
379
-	 * @param WP_Post $post Post object.
380
-	 *
381
-	 * @since 3.2.0
382
-	 *
383
-	 */
384
-	public function edit_form_before_permalink( $post ) {
385
-
386
-		// If it's not an entity, return.
387
-		if ( ! $this->is_entity( $post->ID ) ) {
388
-			return;
389
-		}
390
-
391
-		// If disabled by filter, return.
392
-		if ( ! apply_filters( 'wl_feature__enable__add-synonyms', true ) ) {
393
-			return;
394
-		}
395
-
396
-		// Print the input template.
397
-		$this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
398
-
399
-		// Print all the currently set alternative labels.
400
-		foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
401
-
402
-			echo $this->get_alternative_label_input( $alt_label );
403
-
404
-		};
405
-
406
-		// Print the button.
407
-		$this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
408
-
409
-	}
410
-
411
-	/**
412
-	 * Get the URI for the entity with the specified post id.
413
-	 *
414
-	 * @param int $post_id The entity post id.
415
-	 *
416
-	 * @return null|string The entity URI or NULL if not found or the dataset URI is not configured.
417
-	 * @since 3.6.0
418
-	 *
419
-	 */
420
-	private function get_uri_for_post( $post_id ) {
421
-
422
-		$log = Wordlift_Log_Service::get_logger( get_class() );
423
-
424
-		// If a null is given, nothing to do
425
-		if ( is_null( $post_id ) ) {
426
-			return null;
427
-		}
428
-
429
-		$dataset_uri = wl_configuration_get_redlink_dataset_uri();
430
-
431
-		if ( empty( $dataset_uri ) ) {
432
-			// Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
433
-			$log->debug( 'Continuing, dataset uri not configured...' );
434
-		}
435
-
436
-		$uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
437
-
438
-		/*
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'] ) ? (array) $_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
+
334
+            if ( ! preg_match('/^[\w\-, ]+$/', $alt_label )  ) {
335
+                continue;
336
+            }
337
+
338
+            if ( ! empty( $alt_label ) ) {
339
+                add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, (string) $alt_label );
340
+            }
341
+        }
342
+
343
+    }
344
+
345
+    /**
346
+     * Retrieve the alternate labels.
347
+     *
348
+     * @param int $post_id Post id.
349
+     *
350
+     * @return mixed An array  of alternative labels.
351
+     * @since 3.2.0
352
+     *
353
+     */
354
+    public function get_alternative_labels( $post_id ) {
355
+
356
+        return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
357
+    }
358
+
359
+    /**
360
+     * Retrieve the labels for an entity, i.e. the title + the synonyms.
361
+     *
362
+     * @param int $post_id The entity {@link WP_Post} id.
363
+     * @param int $object_type The object type {@link Object_Type_Enum}
364
+     *
365
+     * @return array An array with the entity title and labels.
366
+     * @since 3.12.0
367
+     */
368
+    public function get_labels( $post_id, $object_type = Object_Type_Enum::POST ) {
369
+        if ( $object_type === Object_Type_Enum::POST ) {
370
+            return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
371
+        }
372
+        // Term Reference dont have synonyms yet.
373
+        return array();
374
+    }
375
+
376
+    /**
377
+     * Fires before the permalink field in the edit form (this event is available in WP from 4.1.0).
378
+     *
379
+     * @param WP_Post $post Post object.
380
+     *
381
+     * @since 3.2.0
382
+     *
383
+     */
384
+    public function edit_form_before_permalink( $post ) {
385
+
386
+        // If it's not an entity, return.
387
+        if ( ! $this->is_entity( $post->ID ) ) {
388
+            return;
389
+        }
390
+
391
+        // If disabled by filter, return.
392
+        if ( ! apply_filters( 'wl_feature__enable__add-synonyms', true ) ) {
393
+            return;
394
+        }
395
+
396
+        // Print the input template.
397
+        $this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
398
+
399
+        // Print all the currently set alternative labels.
400
+        foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
401
+
402
+            echo $this->get_alternative_label_input( $alt_label );
403
+
404
+        };
405
+
406
+        // Print the button.
407
+        $this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
408
+
409
+    }
410
+
411
+    /**
412
+     * Get the URI for the entity with the specified post id.
413
+     *
414
+     * @param int $post_id The entity post id.
415
+     *
416
+     * @return null|string The entity URI or NULL if not found or the dataset URI is not configured.
417
+     * @since 3.6.0
418
+     *
419
+     */
420
+    private function get_uri_for_post( $post_id ) {
421
+
422
+        $log = Wordlift_Log_Service::get_logger( get_class() );
423
+
424
+        // If a null is given, nothing to do
425
+        if ( is_null( $post_id ) ) {
426
+            return null;
427
+        }
428
+
429
+        $dataset_uri = wl_configuration_get_redlink_dataset_uri();
430
+
431
+        if ( empty( $dataset_uri ) ) {
432
+            // Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
433
+            $log->debug( 'Continuing, dataset uri not configured...' );
434
+        }
435
+
436
+        $uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
437
+
438
+        /*
439 439
 		 * Consider the URI invalid if it doesn't start with the dataset URI.
440 440
 		 *
441 441
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/996
442 442
 		 */
443
-		if ( empty( $dataset_uri ) || 0 !== strpos( $uri, $dataset_uri ) ) {
444
-			$uri = null;
445
-		}
446
-
447
-		// Set the URI if it isn't set yet.
448
-		$post_status = get_post_status( $post_id );
449
-		if ( empty( $uri ) && 'auto-draft' !== $post_status && 'inherit' !== $post_status ) {
450
-			$uri = wl_build_entity_uri( $post_id );
451
-			wl_set_entity_uri( $post_id, $uri );
452
-		}
453
-
454
-		return $uri;
455
-	}
456
-
457
-	public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
458
-
459
-		if ( Object_Type_Enum::POST === $type ) {
460
-			return $this->get_uri_for_post( $object_id );
461
-		}
462
-
463
-		if ( Object_Type_Enum::USER === $type ) {
464
-			$uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
465
-
466
-			return ( false === $uri ? null : $uri );
467
-		}
468
-
469
-		if ( Object_Type_Enum::TERM === $type ) {
470
-			return wl_get_term_entity_uri( $object_id );
471
-		}
472
-
473
-		return null;
474
-	}
475
-
476
-	/**
477
-	 * Get the alternative label input HTML code.
478
-	 *
479
-	 * @param string $value The input value.
480
-	 *
481
-	 * @return string The input HTML code.
482
-	 * @since 3.2.0
483
-	 *
484
-	 */
485
-	private function get_alternative_label_input( $value = '' ) {
486
-
487
-		return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
488
-	}
489
-
490
-	/**
491
-	 * Get the number of entity posts published in this blog.
492
-	 *
493
-	 * @return int The number of published entity posts.
494
-	 * @since 3.6.0
495
-	 *
496
-	 */
497
-	public function count() {
498
-		global $wpdb;
499
-
500
-		// Try to get the count from the transient.
501
-		$count = get_transient( '_wl_entity_service__count' );
502
-		if ( false !== $count ) {
503
-			return $count;
504
-		}
505
-
506
-		// Query the count.
507
-		$count = $wpdb->get_var( $wpdb->prepare(
508
-			"SELECT COUNT( DISTINCT( tr.object_id ) )"
509
-			. " FROM {$wpdb->term_relationships} tr"
510
-			. " INNER JOIN {$wpdb->term_taxonomy} tt"
511
-			. "  ON tt.taxonomy = %s AND tt.term_taxonomy_id = tr.term_taxonomy_id"
512
-			. " INNER JOIN {$wpdb->terms} t"
513
-			. "  ON t.term_id = tt.term_id AND t.name != %s",
514
-			Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
515
-			'article'
516
-		) );
517
-
518
-		// Store the count in cache.
519
-		set_transient( '_wl_entity_service__count', $count, 900 );
520
-
521
-		return $count;
522
-	}
523
-
524
-	/**
525
-	 * Add the entity filtering criterias to the arguments for a `get_posts`
526
-	 * call.
527
-	 *
528
-	 * @param array $args The arguments for a `get_posts` call.
529
-	 *
530
-	 * @return array The arguments for a `get_posts` call.
531
-	 * @since 3.15.0
532
-	 *
533
-	 */
534
-	public static function add_criterias( $args ) {
535
-
536
-		// Build an optimal tax-query.
537
-		$tax_query = array(
538
-			'relation' => 'AND',
539
-			array(
540
-				'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
541
-				'operator' => 'EXISTS',
542
-			),
543
-			array(
544
-				'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
545
-				'field'    => 'slug',
546
-				'terms'    => 'article',
547
-				'operator' => 'NOT IN',
548
-			),
549
-		);
550
-
551
-		return $args + array(
552
-				'post_type' => Wordlift_Entity_Service::valid_entity_post_types(),
553
-				/*
443
+        if ( empty( $dataset_uri ) || 0 !== strpos( $uri, $dataset_uri ) ) {
444
+            $uri = null;
445
+        }
446
+
447
+        // Set the URI if it isn't set yet.
448
+        $post_status = get_post_status( $post_id );
449
+        if ( empty( $uri ) && 'auto-draft' !== $post_status && 'inherit' !== $post_status ) {
450
+            $uri = wl_build_entity_uri( $post_id );
451
+            wl_set_entity_uri( $post_id, $uri );
452
+        }
453
+
454
+        return $uri;
455
+    }
456
+
457
+    public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
458
+
459
+        if ( Object_Type_Enum::POST === $type ) {
460
+            return $this->get_uri_for_post( $object_id );
461
+        }
462
+
463
+        if ( Object_Type_Enum::USER === $type ) {
464
+            $uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
465
+
466
+            return ( false === $uri ? null : $uri );
467
+        }
468
+
469
+        if ( Object_Type_Enum::TERM === $type ) {
470
+            return wl_get_term_entity_uri( $object_id );
471
+        }
472
+
473
+        return null;
474
+    }
475
+
476
+    /**
477
+     * Get the alternative label input HTML code.
478
+     *
479
+     * @param string $value The input value.
480
+     *
481
+     * @return string The input HTML code.
482
+     * @since 3.2.0
483
+     *
484
+     */
485
+    private function get_alternative_label_input( $value = '' ) {
486
+
487
+        return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
488
+    }
489
+
490
+    /**
491
+     * Get the number of entity posts published in this blog.
492
+     *
493
+     * @return int The number of published entity posts.
494
+     * @since 3.6.0
495
+     *
496
+     */
497
+    public function count() {
498
+        global $wpdb;
499
+
500
+        // Try to get the count from the transient.
501
+        $count = get_transient( '_wl_entity_service__count' );
502
+        if ( false !== $count ) {
503
+            return $count;
504
+        }
505
+
506
+        // Query the count.
507
+        $count = $wpdb->get_var( $wpdb->prepare(
508
+            "SELECT COUNT( DISTINCT( tr.object_id ) )"
509
+            . " FROM {$wpdb->term_relationships} tr"
510
+            . " INNER JOIN {$wpdb->term_taxonomy} tt"
511
+            . "  ON tt.taxonomy = %s AND tt.term_taxonomy_id = tr.term_taxonomy_id"
512
+            . " INNER JOIN {$wpdb->terms} t"
513
+            . "  ON t.term_id = tt.term_id AND t.name != %s",
514
+            Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
515
+            'article'
516
+        ) );
517
+
518
+        // Store the count in cache.
519
+        set_transient( '_wl_entity_service__count', $count, 900 );
520
+
521
+        return $count;
522
+    }
523
+
524
+    /**
525
+     * Add the entity filtering criterias to the arguments for a `get_posts`
526
+     * call.
527
+     *
528
+     * @param array $args The arguments for a `get_posts` call.
529
+     *
530
+     * @return array The arguments for a `get_posts` call.
531
+     * @since 3.15.0
532
+     *
533
+     */
534
+    public static function add_criterias( $args ) {
535
+
536
+        // Build an optimal tax-query.
537
+        $tax_query = array(
538
+            'relation' => 'AND',
539
+            array(
540
+                'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
541
+                'operator' => 'EXISTS',
542
+            ),
543
+            array(
544
+                'taxonomy' => Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
545
+                'field'    => 'slug',
546
+                'terms'    => 'article',
547
+                'operator' => 'NOT IN',
548
+            ),
549
+        );
550
+
551
+        return $args + array(
552
+                'post_type' => Wordlift_Entity_Service::valid_entity_post_types(),
553
+                /*
554 554
 				 * Ensure compatibility with Polylang.
555 555
 				 *
556 556
 				 * @see https://github.com/insideout10/wordlift-plugin/issues/855.
@@ -558,102 +558,102 @@  discard block
 block discarded – undo
558 558
 				 *
559 559
 				 * @since 3.19.5
560 560
 				 */
561
-				'lang'      => '',
562
-				'tax_query' => $tax_query,
563
-			);
564
-	}
565
-
566
-	/**
567
-	 * Create a new entity.
568
-	 *
569
-	 * @param string $name The entity name.
570
-	 * @param string $type_uri The entity's type URI.
571
-	 * @param null $logo The entity logo id (or NULL if none).
572
-	 * @param string $status The post status, by default 'publish'.
573
-	 *
574
-	 * @return int|WP_Error The entity post id or a {@link WP_Error} in case the `wp_insert_post` call fails.
575
-	 * @since 3.9.0
576
-	 *
577
-	 */
578
-	public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
579
-
580
-		// Create an entity for the publisher.
581
-		$post_id = @wp_insert_post( array(
582
-			'post_type'    => self::TYPE_NAME,
583
-			'post_title'   => $name,
584
-			'post_status'  => $status,
585
-			'post_content' => '',
586
-		) );
587
-
588
-		// Return the error if any.
589
-		if ( is_wp_error( $post_id ) ) {
590
-			return $post_id;
591
-		}
592
-
593
-		// Set the entity logo.
594
-		if ( $logo && is_numeric( $logo ) ) {
595
-			set_post_thumbnail( $post_id, $logo );
596
-		}
597
-
598
-		// Set the entity type.
599
-		Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
600
-
601
-		return $post_id;
602
-	}
603
-
604
-	/**
605
-	 * Get the entities related to the one with the specified id. By default only
606
-	 * published entities will be returned.
607
-	 *
608
-	 * @param int $id The post id.
609
-	 * @param string $post_status The target post status (default = publish).
610
-	 *
611
-	 * @return array An array of post ids.
612
-	 * @since 3.10.0
613
-	 *
614
-	 */
615
-	public function get_related_entities( $id, $post_status = 'publish' ) {
616
-
617
-		return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
618
-	}
619
-
620
-	/**
621
-	 * Get the list of entities.
622
-	 *
623
-	 * @param array $params Custom parameters for WordPress' own {@link get_posts} function.
624
-	 *
625
-	 * @return array An array of entity posts.
626
-	 * @since 3.12.2
627
-	 *
628
-	 */
629
-	public function get( $params = array() ) {
630
-
631
-		// Set the defaults.
632
-		$defaults = array( 'post_type' => 'entity' );
633
-
634
-		// Merge the defaults with the provided parameters.
635
-		$args = wp_parse_args( $params, $defaults );
636
-
637
-		// Call the `get_posts` function.
638
-		return get_posts( $args );
639
-	}
640
-
641
-	/**
642
-	 * The list of post type names which can be used for entities
643
-	 *
644
-	 * Criteria is that the post type is public. The list of valid post types
645
-	 * can be overridden with a filter.
646
-	 *
647
-	 * @return array Array containing the names of the valid post types.
648
-	 * @since 3.15.0
649
-	 *
650
-	 */
651
-	static function valid_entity_post_types() {
652
-
653
-		// Ignore builtins in the call to avoid getting attachments.
654
-		$post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
655
-
656
-		return apply_filters( 'wl_valid_entity_post_types', $post_types );
657
-	}
561
+                'lang'      => '',
562
+                'tax_query' => $tax_query,
563
+            );
564
+    }
565
+
566
+    /**
567
+     * Create a new entity.
568
+     *
569
+     * @param string $name The entity name.
570
+     * @param string $type_uri The entity's type URI.
571
+     * @param null $logo The entity logo id (or NULL if none).
572
+     * @param string $status The post status, by default 'publish'.
573
+     *
574
+     * @return int|WP_Error The entity post id or a {@link WP_Error} in case the `wp_insert_post` call fails.
575
+     * @since 3.9.0
576
+     *
577
+     */
578
+    public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
579
+
580
+        // Create an entity for the publisher.
581
+        $post_id = @wp_insert_post( array(
582
+            'post_type'    => self::TYPE_NAME,
583
+            'post_title'   => $name,
584
+            'post_status'  => $status,
585
+            'post_content' => '',
586
+        ) );
587
+
588
+        // Return the error if any.
589
+        if ( is_wp_error( $post_id ) ) {
590
+            return $post_id;
591
+        }
592
+
593
+        // Set the entity logo.
594
+        if ( $logo && is_numeric( $logo ) ) {
595
+            set_post_thumbnail( $post_id, $logo );
596
+        }
597
+
598
+        // Set the entity type.
599
+        Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
600
+
601
+        return $post_id;
602
+    }
603
+
604
+    /**
605
+     * Get the entities related to the one with the specified id. By default only
606
+     * published entities will be returned.
607
+     *
608
+     * @param int $id The post id.
609
+     * @param string $post_status The target post status (default = publish).
610
+     *
611
+     * @return array An array of post ids.
612
+     * @since 3.10.0
613
+     *
614
+     */
615
+    public function get_related_entities( $id, $post_status = 'publish' ) {
616
+
617
+        return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
618
+    }
619
+
620
+    /**
621
+     * Get the list of entities.
622
+     *
623
+     * @param array $params Custom parameters for WordPress' own {@link get_posts} function.
624
+     *
625
+     * @return array An array of entity posts.
626
+     * @since 3.12.2
627
+     *
628
+     */
629
+    public function get( $params = array() ) {
630
+
631
+        // Set the defaults.
632
+        $defaults = array( 'post_type' => 'entity' );
633
+
634
+        // Merge the defaults with the provided parameters.
635
+        $args = wp_parse_args( $params, $defaults );
636
+
637
+        // Call the `get_posts` function.
638
+        return get_posts( $args );
639
+    }
640
+
641
+    /**
642
+     * The list of post type names which can be used for entities
643
+     *
644
+     * Criteria is that the post type is public. The list of valid post types
645
+     * can be overridden with a filter.
646
+     *
647
+     * @return array Array containing the names of the valid post types.
648
+     * @since 3.15.0
649
+     *
650
+     */
651
+    static function valid_entity_post_types() {
652
+
653
+        // Ignore builtins in the call to avoid getting attachments.
654
+        $post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
655
+
656
+        return apply_filters( 'wl_valid_entity_post_types', $post_types );
657
+    }
658 658
 
659 659
 }
Please login to merge, or discard this patch.
Spacing   +96 added lines, -96 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'] ) ? (array) $_REQUEST['wl_alternative_label'] : array();
294
+		$alt_labels = isset($_REQUEST['wl_alternative_label']) ? (array) $_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,33 +310,33 @@  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 ) {
332
+		foreach ($alt_labels as $alt_label) {
333 333
 
334
-			if ( ! preg_match('/^[\w\-, ]+$/', $alt_label )  ) {
334
+			if ( ! preg_match('/^[\w\-, ]+$/', $alt_label)) {
335 335
 				continue;
336 336
 			}
337 337
 
338
-			if ( ! empty( $alt_label ) ) {
339
-				add_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY, (string) $alt_label );
338
+			if ( ! empty($alt_label)) {
339
+				add_post_meta($post_id, self::ALTERNATIVE_LABEL_META_KEY, (string) $alt_label);
340 340
 			}
341 341
 		}
342 342
 
@@ -351,9 +351,9 @@  discard block
 block discarded – undo
351 351
 	 * @since 3.2.0
352 352
 	 *
353 353
 	 */
354
-	public function get_alternative_labels( $post_id ) {
354
+	public function get_alternative_labels($post_id) {
355 355
 
356
-		return get_post_meta( $post_id, self::ALTERNATIVE_LABEL_META_KEY );
356
+		return get_post_meta($post_id, self::ALTERNATIVE_LABEL_META_KEY);
357 357
 	}
358 358
 
359 359
 	/**
@@ -365,9 +365,9 @@  discard block
 block discarded – undo
365 365
 	 * @return array An array with the entity title and labels.
366 366
 	 * @since 3.12.0
367 367
 	 */
368
-	public function get_labels( $post_id, $object_type = Object_Type_Enum::POST ) {
369
-		if ( $object_type === Object_Type_Enum::POST ) {
370
-			return array_merge( (array) get_the_title( $post_id ), $this->get_alternative_labels( $post_id ) );
368
+	public function get_labels($post_id, $object_type = Object_Type_Enum::POST) {
369
+		if ($object_type === Object_Type_Enum::POST) {
370
+			return array_merge((array) get_the_title($post_id), $this->get_alternative_labels($post_id));
371 371
 		}
372 372
 		// Term Reference dont have synonyms yet.
373 373
 		return array();
@@ -381,30 +381,30 @@  discard block
 block discarded – undo
381 381
 	 * @since 3.2.0
382 382
 	 *
383 383
 	 */
384
-	public function edit_form_before_permalink( $post ) {
384
+	public function edit_form_before_permalink($post) {
385 385
 
386 386
 		// If it's not an entity, return.
387
-		if ( ! $this->is_entity( $post->ID ) ) {
387
+		if ( ! $this->is_entity($post->ID)) {
388 388
 			return;
389 389
 		}
390 390
 
391 391
 		// If disabled by filter, return.
392
-		if ( ! apply_filters( 'wl_feature__enable__add-synonyms', true ) ) {
392
+		if ( ! apply_filters('wl_feature__enable__add-synonyms', true)) {
393 393
 			return;
394 394
 		}
395 395
 
396 396
 		// Print the input template.
397
-		$this->ui_service->print_template( 'wl-tmpl-alternative-label-input', $this->get_alternative_label_input() );
397
+		$this->ui_service->print_template('wl-tmpl-alternative-label-input', $this->get_alternative_label_input());
398 398
 
399 399
 		// Print all the currently set alternative labels.
400
-		foreach ( $this->get_alternative_labels( $post->ID ) as $alt_label ) {
400
+		foreach ($this->get_alternative_labels($post->ID) as $alt_label) {
401 401
 
402
-			echo $this->get_alternative_label_input( $alt_label );
402
+			echo $this->get_alternative_label_input($alt_label);
403 403
 
404 404
 		};
405 405
 
406 406
 		// Print the button.
407
-		$this->ui_service->print_button( 'wl-add-alternative-labels-button', __( 'Add more titles', 'wordlift' ) );
407
+		$this->ui_service->print_button('wl-add-alternative-labels-button', __('Add more titles', 'wordlift'));
408 408
 
409 409
 	}
410 410
 
@@ -417,57 +417,57 @@  discard block
 block discarded – undo
417 417
 	 * @since 3.6.0
418 418
 	 *
419 419
 	 */
420
-	private function get_uri_for_post( $post_id ) {
420
+	private function get_uri_for_post($post_id) {
421 421
 
422
-		$log = Wordlift_Log_Service::get_logger( get_class() );
422
+		$log = Wordlift_Log_Service::get_logger(get_class());
423 423
 
424 424
 		// If a null is given, nothing to do
425
-		if ( is_null( $post_id ) ) {
425
+		if (is_null($post_id)) {
426 426
 			return null;
427 427
 		}
428 428
 
429 429
 		$dataset_uri = wl_configuration_get_redlink_dataset_uri();
430 430
 
431
-		if ( empty( $dataset_uri ) ) {
431
+		if (empty($dataset_uri)) {
432 432
 			// Continue even if the dataset uri is not properly configured. It is handled in function wl_build_entity_uri()
433
-			$log->debug( 'Continuing, dataset uri not configured...' );
433
+			$log->debug('Continuing, dataset uri not configured...');
434 434
 		}
435 435
 
436
-		$uri = get_post_meta( $post_id, WL_ENTITY_URL_META_NAME, true );
436
+		$uri = get_post_meta($post_id, WL_ENTITY_URL_META_NAME, true);
437 437
 
438 438
 		/*
439 439
 		 * Consider the URI invalid if it doesn't start with the dataset URI.
440 440
 		 *
441 441
 		 * @see https://github.com/insideout10/wordlift-plugin/issues/996
442 442
 		 */
443
-		if ( empty( $dataset_uri ) || 0 !== strpos( $uri, $dataset_uri ) ) {
443
+		if (empty($dataset_uri) || 0 !== strpos($uri, $dataset_uri)) {
444 444
 			$uri = null;
445 445
 		}
446 446
 
447 447
 		// Set the URI if it isn't set yet.
448
-		$post_status = get_post_status( $post_id );
449
-		if ( empty( $uri ) && 'auto-draft' !== $post_status && 'inherit' !== $post_status ) {
450
-			$uri = wl_build_entity_uri( $post_id );
451
-			wl_set_entity_uri( $post_id, $uri );
448
+		$post_status = get_post_status($post_id);
449
+		if (empty($uri) && 'auto-draft' !== $post_status && 'inherit' !== $post_status) {
450
+			$uri = wl_build_entity_uri($post_id);
451
+			wl_set_entity_uri($post_id, $uri);
452 452
 		}
453 453
 
454 454
 		return $uri;
455 455
 	}
456 456
 
457
-	public function get_uri( $object_id, $type = Object_Type_Enum::POST ) {
457
+	public function get_uri($object_id, $type = Object_Type_Enum::POST) {
458 458
 
459
-		if ( Object_Type_Enum::POST === $type ) {
460
-			return $this->get_uri_for_post( $object_id );
459
+		if (Object_Type_Enum::POST === $type) {
460
+			return $this->get_uri_for_post($object_id);
461 461
 		}
462 462
 
463
-		if ( Object_Type_Enum::USER === $type ) {
464
-			$uri = Wordlift_User_Service::get_instance()->get_uri( $object_id );
463
+		if (Object_Type_Enum::USER === $type) {
464
+			$uri = Wordlift_User_Service::get_instance()->get_uri($object_id);
465 465
 
466
-			return ( false === $uri ? null : $uri );
466
+			return (false === $uri ? null : $uri);
467 467
 		}
468 468
 
469
-		if ( Object_Type_Enum::TERM === $type ) {
470
-			return wl_get_term_entity_uri( $object_id );
469
+		if (Object_Type_Enum::TERM === $type) {
470
+			return wl_get_term_entity_uri($object_id);
471 471
 		}
472 472
 
473 473
 		return null;
@@ -482,9 +482,9 @@  discard block
 block discarded – undo
482 482
 	 * @since 3.2.0
483 483
 	 *
484 484
 	 */
485
-	private function get_alternative_label_input( $value = '' ) {
485
+	private function get_alternative_label_input($value = '') {
486 486
 
487
-		return sprintf( self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr( $value ), __( 'Delete', 'wordlift' ) );
487
+		return sprintf(self::ALTERNATIVE_LABEL_INPUT_TEMPLATE, esc_attr($value), __('Delete', 'wordlift'));
488 488
 	}
489 489
 
490 490
 	/**
@@ -498,13 +498,13 @@  discard block
 block discarded – undo
498 498
 		global $wpdb;
499 499
 
500 500
 		// Try to get the count from the transient.
501
-		$count = get_transient( '_wl_entity_service__count' );
502
-		if ( false !== $count ) {
501
+		$count = get_transient('_wl_entity_service__count');
502
+		if (false !== $count) {
503 503
 			return $count;
504 504
 		}
505 505
 
506 506
 		// Query the count.
507
-		$count = $wpdb->get_var( $wpdb->prepare(
507
+		$count = $wpdb->get_var($wpdb->prepare(
508 508
 			"SELECT COUNT( DISTINCT( tr.object_id ) )"
509 509
 			. " FROM {$wpdb->term_relationships} tr"
510 510
 			. " INNER JOIN {$wpdb->term_taxonomy} tt"
@@ -513,10 +513,10 @@  discard block
 block discarded – undo
513 513
 			. "  ON t.term_id = tt.term_id AND t.name != %s",
514 514
 			Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME,
515 515
 			'article'
516
-		) );
516
+		));
517 517
 
518 518
 		// Store the count in cache.
519
-		set_transient( '_wl_entity_service__count', $count, 900 );
519
+		set_transient('_wl_entity_service__count', $count, 900);
520 520
 
521 521
 		return $count;
522 522
 	}
@@ -531,7 +531,7 @@  discard block
 block discarded – undo
531 531
 	 * @since 3.15.0
532 532
 	 *
533 533
 	 */
534
-	public static function add_criterias( $args ) {
534
+	public static function add_criterias($args) {
535 535
 
536 536
 		// Build an optimal tax-query.
537 537
 		$tax_query = array(
@@ -575,28 +575,28 @@  discard block
 block discarded – undo
575 575
 	 * @since 3.9.0
576 576
 	 *
577 577
 	 */
578
-	public function create( $name, $type_uri, $logo = null, $status = 'publish' ) {
578
+	public function create($name, $type_uri, $logo = null, $status = 'publish') {
579 579
 
580 580
 		// Create an entity for the publisher.
581
-		$post_id = @wp_insert_post( array(
581
+		$post_id = @wp_insert_post(array(
582 582
 			'post_type'    => self::TYPE_NAME,
583 583
 			'post_title'   => $name,
584 584
 			'post_status'  => $status,
585 585
 			'post_content' => '',
586
-		) );
586
+		));
587 587
 
588 588
 		// Return the error if any.
589
-		if ( is_wp_error( $post_id ) ) {
589
+		if (is_wp_error($post_id)) {
590 590
 			return $post_id;
591 591
 		}
592 592
 
593 593
 		// Set the entity logo.
594
-		if ( $logo && is_numeric( $logo ) ) {
595
-			set_post_thumbnail( $post_id, $logo );
594
+		if ($logo && is_numeric($logo)) {
595
+			set_post_thumbnail($post_id, $logo);
596 596
 		}
597 597
 
598 598
 		// Set the entity type.
599
-		Wordlift_Entity_Type_Service::get_instance()->set( $post_id, $type_uri );
599
+		Wordlift_Entity_Type_Service::get_instance()->set($post_id, $type_uri);
600 600
 
601 601
 		return $post_id;
602 602
 	}
@@ -612,9 +612,9 @@  discard block
 block discarded – undo
612 612
 	 * @since 3.10.0
613 613
 	 *
614 614
 	 */
615
-	public function get_related_entities( $id, $post_status = 'publish' ) {
615
+	public function get_related_entities($id, $post_status = 'publish') {
616 616
 
617
-		return $this->relation_service->get_objects( $id, 'ids', null, $post_status );
617
+		return $this->relation_service->get_objects($id, 'ids', null, $post_status);
618 618
 	}
619 619
 
620 620
 	/**
@@ -626,16 +626,16 @@  discard block
 block discarded – undo
626 626
 	 * @since 3.12.2
627 627
 	 *
628 628
 	 */
629
-	public function get( $params = array() ) {
629
+	public function get($params = array()) {
630 630
 
631 631
 		// Set the defaults.
632
-		$defaults = array( 'post_type' => 'entity' );
632
+		$defaults = array('post_type' => 'entity');
633 633
 
634 634
 		// Merge the defaults with the provided parameters.
635
-		$args = wp_parse_args( $params, $defaults );
635
+		$args = wp_parse_args($params, $defaults);
636 636
 
637 637
 		// Call the `get_posts` function.
638
-		return get_posts( $args );
638
+		return get_posts($args);
639 639
 	}
640 640
 
641 641
 	/**
@@ -651,9 +651,9 @@  discard block
 block discarded – undo
651 651
 	static function valid_entity_post_types() {
652 652
 
653 653
 		// Ignore builtins in the call to avoid getting attachments.
654
-		$post_types = array( 'post', 'page', self::TYPE_NAME, 'product' );
654
+		$post_types = array('post', 'page', self::TYPE_NAME, 'product');
655 655
 
656
-		return apply_filters( 'wl_valid_entity_post_types', $post_types );
656
+		return apply_filters('wl_valid_entity_post_types', $post_types);
657 657
 	}
658 658
 
659 659
 }
Please login to merge, or discard this patch.