@@ -13,41 +13,41 @@ |
||
13 | 13 | |
14 | 14 | class Faq_Tinymce_Adapter { |
15 | 15 | |
16 | - const FAQ_TINYMCE_PLUGIN_NAME = 'wl_faq_tinymce'; |
|
17 | - |
|
18 | - const FAQ_TINYMCE_ADD_BUTTON_ID = 'wl-faq-toolbar-button'; |
|
19 | - |
|
20 | - /** |
|
21 | - * Add a list of custom tags which is to be used by our highlighting program. |
|
22 | - * |
|
23 | - * @param $init_array |
|
24 | - * |
|
25 | - * @return array |
|
26 | - */ |
|
27 | - public function register_custom_tags( $init_array ) { |
|
28 | - $opts = '~wl-faq-question,~wl-faq-answer'; |
|
29 | - $init_array['custom_elements'] .= ( empty( $init_array['custom_elements'] ) ? '' : ',' ) . $opts; |
|
30 | - $init_array['extended_valid_elements'] .= ( empty( $init_array['extended_valid_elements'] ) ? '' : ',' ) . $opts; |
|
31 | - |
|
32 | - return $init_array; |
|
33 | - } |
|
34 | - |
|
35 | - public function register_faq_tinymce_plugin( $plugins ) { |
|
36 | - /** |
|
37 | - * Registering the tinymce plugin for FAQ here. |
|
38 | - * |
|
39 | - * @since 3.26.0 |
|
40 | - */ |
|
41 | - $version = Wordlift::get_instance()->get_version(); |
|
42 | - $plugins[ self::FAQ_TINYMCE_PLUGIN_NAME ] = plugin_dir_url( dirname( __DIR__ ) ) . 'js/dist/tinymce-faq-plugin.full.js?ver=' . $version; |
|
43 | - |
|
44 | - return $plugins; |
|
45 | - } |
|
46 | - |
|
47 | - public function register_faq_toolbar_button( $buttons ) { |
|
48 | - array_push( $buttons, self::FAQ_TINYMCE_ADD_BUTTON_ID ); |
|
49 | - |
|
50 | - return $buttons; |
|
51 | - } |
|
16 | + const FAQ_TINYMCE_PLUGIN_NAME = 'wl_faq_tinymce'; |
|
17 | + |
|
18 | + const FAQ_TINYMCE_ADD_BUTTON_ID = 'wl-faq-toolbar-button'; |
|
19 | + |
|
20 | + /** |
|
21 | + * Add a list of custom tags which is to be used by our highlighting program. |
|
22 | + * |
|
23 | + * @param $init_array |
|
24 | + * |
|
25 | + * @return array |
|
26 | + */ |
|
27 | + public function register_custom_tags( $init_array ) { |
|
28 | + $opts = '~wl-faq-question,~wl-faq-answer'; |
|
29 | + $init_array['custom_elements'] .= ( empty( $init_array['custom_elements'] ) ? '' : ',' ) . $opts; |
|
30 | + $init_array['extended_valid_elements'] .= ( empty( $init_array['extended_valid_elements'] ) ? '' : ',' ) . $opts; |
|
31 | + |
|
32 | + return $init_array; |
|
33 | + } |
|
34 | + |
|
35 | + public function register_faq_tinymce_plugin( $plugins ) { |
|
36 | + /** |
|
37 | + * Registering the tinymce plugin for FAQ here. |
|
38 | + * |
|
39 | + * @since 3.26.0 |
|
40 | + */ |
|
41 | + $version = Wordlift::get_instance()->get_version(); |
|
42 | + $plugins[ self::FAQ_TINYMCE_PLUGIN_NAME ] = plugin_dir_url( dirname( __DIR__ ) ) . 'js/dist/tinymce-faq-plugin.full.js?ver=' . $version; |
|
43 | + |
|
44 | + return $plugins; |
|
45 | + } |
|
46 | + |
|
47 | + public function register_faq_toolbar_button( $buttons ) { |
|
48 | + array_push( $buttons, self::FAQ_TINYMCE_ADD_BUTTON_ID ); |
|
49 | + |
|
50 | + return $buttons; |
|
51 | + } |
|
52 | 52 | |
53 | 53 | } |
@@ -24,28 +24,28 @@ |
||
24 | 24 | * |
25 | 25 | * @return array |
26 | 26 | */ |
27 | - public function register_custom_tags( $init_array ) { |
|
27 | + public function register_custom_tags($init_array) { |
|
28 | 28 | $opts = '~wl-faq-question,~wl-faq-answer'; |
29 | - $init_array['custom_elements'] .= ( empty( $init_array['custom_elements'] ) ? '' : ',' ) . $opts; |
|
30 | - $init_array['extended_valid_elements'] .= ( empty( $init_array['extended_valid_elements'] ) ? '' : ',' ) . $opts; |
|
29 | + $init_array['custom_elements'] .= (empty($init_array['custom_elements']) ? '' : ',').$opts; |
|
30 | + $init_array['extended_valid_elements'] .= (empty($init_array['extended_valid_elements']) ? '' : ',').$opts; |
|
31 | 31 | |
32 | 32 | return $init_array; |
33 | 33 | } |
34 | 34 | |
35 | - public function register_faq_tinymce_plugin( $plugins ) { |
|
35 | + public function register_faq_tinymce_plugin($plugins) { |
|
36 | 36 | /** |
37 | 37 | * Registering the tinymce plugin for FAQ here. |
38 | 38 | * |
39 | 39 | * @since 3.26.0 |
40 | 40 | */ |
41 | 41 | $version = Wordlift::get_instance()->get_version(); |
42 | - $plugins[ self::FAQ_TINYMCE_PLUGIN_NAME ] = plugin_dir_url( dirname( __DIR__ ) ) . 'js/dist/tinymce-faq-plugin.full.js?ver=' . $version; |
|
42 | + $plugins[self::FAQ_TINYMCE_PLUGIN_NAME] = plugin_dir_url(dirname(__DIR__)).'js/dist/tinymce-faq-plugin.full.js?ver='.$version; |
|
43 | 43 | |
44 | 44 | return $plugins; |
45 | 45 | } |
46 | 46 | |
47 | - public function register_faq_toolbar_button( $buttons ) { |
|
48 | - array_push( $buttons, self::FAQ_TINYMCE_ADD_BUTTON_ID ); |
|
47 | + public function register_faq_toolbar_button($buttons) { |
|
48 | + array_push($buttons, self::FAQ_TINYMCE_ADD_BUTTON_ID); |
|
49 | 49 | |
50 | 50 | return $buttons; |
51 | 51 | } |
@@ -14,70 +14,70 @@ |
||
14 | 14 | |
15 | 15 | class Post_Handler { |
16 | 16 | |
17 | - /** |
|
18 | - * Process post. |
|
19 | - * |
|
20 | - * @param int $post_id |
|
21 | - */ |
|
22 | - public static function fix( $post_id ) { |
|
23 | - // 3 cases: |
|
24 | - // 1. item id w/o the base URI: itemid="/entity/marketing" |
|
25 | - // 2. item id w/ domain outside the scope of dataset URI: itemid="https://data.wordlift.io/wl95583/entity/emailing" |
|
26 | - // 3. item id w/ domain within the scope of the dataset URI, but non existent. |
|
27 | - // 4. should we manipulate also the `wp:wordlift/classification` block? |
|
28 | - |
|
29 | - $post = get_post( $post_id ); |
|
30 | - $new_post_content = preg_replace_callback( |
|
31 | - '@<(\w+)[^<]*class="([^"]*)"\sitemid="([^"]+)"[^>]*>(.*?)</\1>@i', |
|
32 | - array( get_class(), 'fix_annotations' ), |
|
33 | - $post->post_content, |
|
34 | - - 1, |
|
35 | - $count |
|
36 | - ); |
|
37 | - |
|
38 | - if ( 0 === $count || $new_post_content === $post->post_content ) { |
|
39 | - // Bail out if the regex doesn't match or if the post content didn't change. |
|
40 | - return; |
|
41 | - } |
|
42 | - |
|
43 | - wp_update_post( |
|
44 | - array( |
|
45 | - 'ID' => $post_id, |
|
46 | - 'post_content' => $new_post_content, |
|
47 | - ) |
|
48 | - ); |
|
49 | - |
|
50 | - } |
|
51 | - |
|
52 | - public static function fix_annotations( $args ) { |
|
53 | - // Make the item id relative. |
|
54 | - if ( 0 === preg_match( '@(?:https?://[^/]+/[^/]+)?/?(.*)@', $args[3], $matches ) ) { |
|
55 | - return $args[4]; |
|
56 | - } |
|
57 | - |
|
58 | - $item_id = $matches[1]; |
|
59 | - |
|
60 | - // Bail out if the item id is empty. |
|
61 | - if ( empty( $item_id ) ) { |
|
62 | - return $args[4]; |
|
63 | - } |
|
64 | - |
|
65 | - // Find a matching content. |
|
66 | - $content_service = Wordpress_Content_Service::get_instance(); |
|
67 | - $content = $content_service->get_by_entity_id_or_same_as( $item_id ); |
|
68 | - |
|
69 | - if ( ! isset( $content ) ) { |
|
70 | - // No content found return only label. |
|
71 | - return $args[4]; |
|
72 | - } else { |
|
73 | - // Get the actual entity id. |
|
74 | - $new_item_id = $content_service->get_entity_id( |
|
75 | - new Wordpress_Content_Id( $content->get_id(), $content->get_object_type_enum() ) |
|
76 | - ); |
|
77 | - |
|
78 | - // Replace the incoming entity id with the actual entity id. |
|
79 | - return str_replace( $args[3], $new_item_id, $args[0] ); |
|
80 | - } |
|
81 | - } |
|
17 | + /** |
|
18 | + * Process post. |
|
19 | + * |
|
20 | + * @param int $post_id |
|
21 | + */ |
|
22 | + public static function fix( $post_id ) { |
|
23 | + // 3 cases: |
|
24 | + // 1. item id w/o the base URI: itemid="/entity/marketing" |
|
25 | + // 2. item id w/ domain outside the scope of dataset URI: itemid="https://data.wordlift.io/wl95583/entity/emailing" |
|
26 | + // 3. item id w/ domain within the scope of the dataset URI, but non existent. |
|
27 | + // 4. should we manipulate also the `wp:wordlift/classification` block? |
|
28 | + |
|
29 | + $post = get_post( $post_id ); |
|
30 | + $new_post_content = preg_replace_callback( |
|
31 | + '@<(\w+)[^<]*class="([^"]*)"\sitemid="([^"]+)"[^>]*>(.*?)</\1>@i', |
|
32 | + array( get_class(), 'fix_annotations' ), |
|
33 | + $post->post_content, |
|
34 | + - 1, |
|
35 | + $count |
|
36 | + ); |
|
37 | + |
|
38 | + if ( 0 === $count || $new_post_content === $post->post_content ) { |
|
39 | + // Bail out if the regex doesn't match or if the post content didn't change. |
|
40 | + return; |
|
41 | + } |
|
42 | + |
|
43 | + wp_update_post( |
|
44 | + array( |
|
45 | + 'ID' => $post_id, |
|
46 | + 'post_content' => $new_post_content, |
|
47 | + ) |
|
48 | + ); |
|
49 | + |
|
50 | + } |
|
51 | + |
|
52 | + public static function fix_annotations( $args ) { |
|
53 | + // Make the item id relative. |
|
54 | + if ( 0 === preg_match( '@(?:https?://[^/]+/[^/]+)?/?(.*)@', $args[3], $matches ) ) { |
|
55 | + return $args[4]; |
|
56 | + } |
|
57 | + |
|
58 | + $item_id = $matches[1]; |
|
59 | + |
|
60 | + // Bail out if the item id is empty. |
|
61 | + if ( empty( $item_id ) ) { |
|
62 | + return $args[4]; |
|
63 | + } |
|
64 | + |
|
65 | + // Find a matching content. |
|
66 | + $content_service = Wordpress_Content_Service::get_instance(); |
|
67 | + $content = $content_service->get_by_entity_id_or_same_as( $item_id ); |
|
68 | + |
|
69 | + if ( ! isset( $content ) ) { |
|
70 | + // No content found return only label. |
|
71 | + return $args[4]; |
|
72 | + } else { |
|
73 | + // Get the actual entity id. |
|
74 | + $new_item_id = $content_service->get_entity_id( |
|
75 | + new Wordpress_Content_Id( $content->get_id(), $content->get_object_type_enum() ) |
|
76 | + ); |
|
77 | + |
|
78 | + // Replace the incoming entity id with the actual entity id. |
|
79 | + return str_replace( $args[3], $new_item_id, $args[0] ); |
|
80 | + } |
|
81 | + } |
|
82 | 82 | |
83 | 83 | } |
@@ -19,23 +19,23 @@ discard block |
||
19 | 19 | * |
20 | 20 | * @param int $post_id |
21 | 21 | */ |
22 | - public static function fix( $post_id ) { |
|
22 | + public static function fix($post_id) { |
|
23 | 23 | // 3 cases: |
24 | 24 | // 1. item id w/o the base URI: itemid="/entity/marketing" |
25 | 25 | // 2. item id w/ domain outside the scope of dataset URI: itemid="https://data.wordlift.io/wl95583/entity/emailing" |
26 | 26 | // 3. item id w/ domain within the scope of the dataset URI, but non existent. |
27 | 27 | // 4. should we manipulate also the `wp:wordlift/classification` block? |
28 | 28 | |
29 | - $post = get_post( $post_id ); |
|
29 | + $post = get_post($post_id); |
|
30 | 30 | $new_post_content = preg_replace_callback( |
31 | 31 | '@<(\w+)[^<]*class="([^"]*)"\sitemid="([^"]+)"[^>]*>(.*?)</\1>@i', |
32 | - array( get_class(), 'fix_annotations' ), |
|
32 | + array(get_class(), 'fix_annotations'), |
|
33 | 33 | $post->post_content, |
34 | 34 | - 1, |
35 | 35 | $count |
36 | 36 | ); |
37 | 37 | |
38 | - if ( 0 === $count || $new_post_content === $post->post_content ) { |
|
38 | + if (0 === $count || $new_post_content === $post->post_content) { |
|
39 | 39 | // Bail out if the regex doesn't match or if the post content didn't change. |
40 | 40 | return; |
41 | 41 | } |
@@ -49,34 +49,34 @@ discard block |
||
49 | 49 | |
50 | 50 | } |
51 | 51 | |
52 | - public static function fix_annotations( $args ) { |
|
52 | + public static function fix_annotations($args) { |
|
53 | 53 | // Make the item id relative. |
54 | - if ( 0 === preg_match( '@(?:https?://[^/]+/[^/]+)?/?(.*)@', $args[3], $matches ) ) { |
|
54 | + if (0 === preg_match('@(?:https?://[^/]+/[^/]+)?/?(.*)@', $args[3], $matches)) { |
|
55 | 55 | return $args[4]; |
56 | 56 | } |
57 | 57 | |
58 | 58 | $item_id = $matches[1]; |
59 | 59 | |
60 | 60 | // Bail out if the item id is empty. |
61 | - if ( empty( $item_id ) ) { |
|
61 | + if (empty($item_id)) { |
|
62 | 62 | return $args[4]; |
63 | 63 | } |
64 | 64 | |
65 | 65 | // Find a matching content. |
66 | 66 | $content_service = Wordpress_Content_Service::get_instance(); |
67 | - $content = $content_service->get_by_entity_id_or_same_as( $item_id ); |
|
67 | + $content = $content_service->get_by_entity_id_or_same_as($item_id); |
|
68 | 68 | |
69 | - if ( ! isset( $content ) ) { |
|
69 | + if ( ! isset($content)) { |
|
70 | 70 | // No content found return only label. |
71 | 71 | return $args[4]; |
72 | 72 | } else { |
73 | 73 | // Get the actual entity id. |
74 | 74 | $new_item_id = $content_service->get_entity_id( |
75 | - new Wordpress_Content_Id( $content->get_id(), $content->get_object_type_enum() ) |
|
75 | + new Wordpress_Content_Id($content->get_id(), $content->get_object_type_enum()) |
|
76 | 76 | ); |
77 | 77 | |
78 | 78 | // Replace the incoming entity id with the actual entity id. |
79 | - return str_replace( $args[3], $new_item_id, $args[0] ); |
|
79 | + return str_replace($args[3], $new_item_id, $args[0]); |
|
80 | 80 | } |
81 | 81 | } |
82 | 82 |
@@ -15,112 +15,112 @@ |
||
15 | 15 | // @@todo: add a hook to clear the cached files now and then. |
16 | 16 | class Cacheable_Http_Client extends Simple_Http_Client { |
17 | 17 | |
18 | - /** |
|
19 | - * The TTL of cached responses in seconds. |
|
20 | - * |
|
21 | - * @var int $ttl The TTL in seconds. |
|
22 | - * @access private |
|
23 | - * @since 1.0.0 |
|
24 | - */ |
|
25 | - private $ttl; |
|
26 | - |
|
27 | - /** |
|
28 | - * The cache dir where the cached responses are written. |
|
29 | - * |
|
30 | - * @since 1.0.0 |
|
31 | - * @access private |
|
32 | - * @var string $cache_dir The cache dir where the cached responses are written. |
|
33 | - */ |
|
34 | - private $cache_dir; |
|
35 | - |
|
36 | - /** |
|
37 | - * A {@link Wordlift_Log_Service} instance. |
|
38 | - * |
|
39 | - * @var \Wordlift_Log_Service $log A {@link Wordlift_Log_Service} instance. |
|
40 | - * @access private |
|
41 | - * @since 1.0.0 |
|
42 | - */ |
|
43 | - private $log; |
|
44 | - |
|
45 | - /** |
|
46 | - * Create a {@link Cacheable_Http_Client} with the specified TTL, default 900 secs. |
|
47 | - * |
|
48 | - * @param int $ttl The cache TTL, default 900 secs. |
|
49 | - * |
|
50 | - * @since 1.0.0 |
|
51 | - */ |
|
52 | - public function __construct( $ttl = 900 ) { |
|
53 | - |
|
54 | - $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
55 | - |
|
56 | - $this->ttl = $ttl; |
|
57 | - |
|
58 | - // Get the temp dir and add the directory separator if missing. |
|
59 | - $temp_dir = get_temp_dir(); |
|
60 | - if ( DIRECTORY_SEPARATOR !== substr( $temp_dir, - strlen( DIRECTORY_SEPARATOR ) ) ) { |
|
61 | - $temp_dir .= DIRECTORY_SEPARATOR; |
|
62 | - } |
|
63 | - $this->cache_dir = $temp_dir . 'wlfb-http-cache'; |
|
64 | - |
|
65 | - $this->log->trace( "Creating the cache folder {$this->cache_dir}..." ); |
|
66 | - wp_mkdir_p( $this->cache_dir ); |
|
67 | - |
|
68 | - } |
|
69 | - |
|
70 | - /** |
|
71 | - * @inheritDoc |
|
72 | - */ |
|
73 | - public function request( $url, $options = array() ) { |
|
74 | - |
|
75 | - // Create a hash and a path to the cache file. |
|
76 | - // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize |
|
77 | - $hash = md5( $url ) . '-' . md5( serialize( $options ) ); |
|
78 | - $filename = $this->get_path( $hash ); |
|
79 | - |
|
80 | - // If the cache file exists and it's not too old, then return it. |
|
81 | - if ( file_exists( $filename ) && $this->ttl >= time() - filemtime( $filename ) ) { |
|
82 | - $this->log->trace( "Cache HIT.\n" ); |
|
83 | - |
|
84 | - // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents |
|
85 | - return json_decode( file_get_contents( $filename ), true ); |
|
86 | - } |
|
87 | - |
|
88 | - $this->log->trace( "Cache MISS for URL $url, hash $hash.\n" ); |
|
89 | - |
|
90 | - // Get a fresh response and return it. |
|
91 | - $response = parent::request( $url, $options ); |
|
92 | - |
|
93 | - // Return immediately, do not cache. |
|
94 | - if ( is_wp_error( $response ) ) { |
|
95 | - return $response; |
|
96 | - } |
|
97 | - |
|
98 | - // Do not cache response with invalid status codes or status code different from 2xx. |
|
99 | - $code = wp_remote_retrieve_response_code( $response ); |
|
100 | - if ( ! is_numeric( $code ) || 2 !== intval( $code ) / 100 ) { |
|
101 | - return $response; |
|
102 | - } |
|
103 | - |
|
104 | - // Cache. |
|
105 | - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
|
106 | - @unlink( $filename ); |
|
107 | - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.WP.AlternativeFunctions.json_encode_json_encode,WordPress.WP.AlternativeFunctions.file_system_read_file_put_contents |
|
108 | - @file_put_contents( $filename, json_encode( $response ) ); |
|
109 | - |
|
110 | - return $response; |
|
111 | - } |
|
112 | - |
|
113 | - /** |
|
114 | - * Get the full path for the given `$hash`. The file is not checked for its existence. |
|
115 | - * |
|
116 | - * @param string $hash A file hash. |
|
117 | - * |
|
118 | - * @return string The full path to the file. |
|
119 | - * @since 1.0.0 |
|
120 | - */ |
|
121 | - private function get_path( $hash ) { |
|
122 | - |
|
123 | - return $this->cache_dir . DIRECTORY_SEPARATOR . $hash; |
|
124 | - } |
|
18 | + /** |
|
19 | + * The TTL of cached responses in seconds. |
|
20 | + * |
|
21 | + * @var int $ttl The TTL in seconds. |
|
22 | + * @access private |
|
23 | + * @since 1.0.0 |
|
24 | + */ |
|
25 | + private $ttl; |
|
26 | + |
|
27 | + /** |
|
28 | + * The cache dir where the cached responses are written. |
|
29 | + * |
|
30 | + * @since 1.0.0 |
|
31 | + * @access private |
|
32 | + * @var string $cache_dir The cache dir where the cached responses are written. |
|
33 | + */ |
|
34 | + private $cache_dir; |
|
35 | + |
|
36 | + /** |
|
37 | + * A {@link Wordlift_Log_Service} instance. |
|
38 | + * |
|
39 | + * @var \Wordlift_Log_Service $log A {@link Wordlift_Log_Service} instance. |
|
40 | + * @access private |
|
41 | + * @since 1.0.0 |
|
42 | + */ |
|
43 | + private $log; |
|
44 | + |
|
45 | + /** |
|
46 | + * Create a {@link Cacheable_Http_Client} with the specified TTL, default 900 secs. |
|
47 | + * |
|
48 | + * @param int $ttl The cache TTL, default 900 secs. |
|
49 | + * |
|
50 | + * @since 1.0.0 |
|
51 | + */ |
|
52 | + public function __construct( $ttl = 900 ) { |
|
53 | + |
|
54 | + $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
55 | + |
|
56 | + $this->ttl = $ttl; |
|
57 | + |
|
58 | + // Get the temp dir and add the directory separator if missing. |
|
59 | + $temp_dir = get_temp_dir(); |
|
60 | + if ( DIRECTORY_SEPARATOR !== substr( $temp_dir, - strlen( DIRECTORY_SEPARATOR ) ) ) { |
|
61 | + $temp_dir .= DIRECTORY_SEPARATOR; |
|
62 | + } |
|
63 | + $this->cache_dir = $temp_dir . 'wlfb-http-cache'; |
|
64 | + |
|
65 | + $this->log->trace( "Creating the cache folder {$this->cache_dir}..." ); |
|
66 | + wp_mkdir_p( $this->cache_dir ); |
|
67 | + |
|
68 | + } |
|
69 | + |
|
70 | + /** |
|
71 | + * @inheritDoc |
|
72 | + */ |
|
73 | + public function request( $url, $options = array() ) { |
|
74 | + |
|
75 | + // Create a hash and a path to the cache file. |
|
76 | + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize |
|
77 | + $hash = md5( $url ) . '-' . md5( serialize( $options ) ); |
|
78 | + $filename = $this->get_path( $hash ); |
|
79 | + |
|
80 | + // If the cache file exists and it's not too old, then return it. |
|
81 | + if ( file_exists( $filename ) && $this->ttl >= time() - filemtime( $filename ) ) { |
|
82 | + $this->log->trace( "Cache HIT.\n" ); |
|
83 | + |
|
84 | + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents |
|
85 | + return json_decode( file_get_contents( $filename ), true ); |
|
86 | + } |
|
87 | + |
|
88 | + $this->log->trace( "Cache MISS for URL $url, hash $hash.\n" ); |
|
89 | + |
|
90 | + // Get a fresh response and return it. |
|
91 | + $response = parent::request( $url, $options ); |
|
92 | + |
|
93 | + // Return immediately, do not cache. |
|
94 | + if ( is_wp_error( $response ) ) { |
|
95 | + return $response; |
|
96 | + } |
|
97 | + |
|
98 | + // Do not cache response with invalid status codes or status code different from 2xx. |
|
99 | + $code = wp_remote_retrieve_response_code( $response ); |
|
100 | + if ( ! is_numeric( $code ) || 2 !== intval( $code ) / 100 ) { |
|
101 | + return $response; |
|
102 | + } |
|
103 | + |
|
104 | + // Cache. |
|
105 | + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
|
106 | + @unlink( $filename ); |
|
107 | + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.WP.AlternativeFunctions.json_encode_json_encode,WordPress.WP.AlternativeFunctions.file_system_read_file_put_contents |
|
108 | + @file_put_contents( $filename, json_encode( $response ) ); |
|
109 | + |
|
110 | + return $response; |
|
111 | + } |
|
112 | + |
|
113 | + /** |
|
114 | + * Get the full path for the given `$hash`. The file is not checked for its existence. |
|
115 | + * |
|
116 | + * @param string $hash A file hash. |
|
117 | + * |
|
118 | + * @return string The full path to the file. |
|
119 | + * @since 1.0.0 |
|
120 | + */ |
|
121 | + private function get_path( $hash ) { |
|
122 | + |
|
123 | + return $this->cache_dir . DIRECTORY_SEPARATOR . $hash; |
|
124 | + } |
|
125 | 125 | |
126 | 126 | } |
@@ -49,63 +49,63 @@ discard block |
||
49 | 49 | * |
50 | 50 | * @since 1.0.0 |
51 | 51 | */ |
52 | - public function __construct( $ttl = 900 ) { |
|
52 | + public function __construct($ttl = 900) { |
|
53 | 53 | |
54 | - $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
54 | + $this->log = \Wordlift_Log_Service::get_logger(get_class()); |
|
55 | 55 | |
56 | 56 | $this->ttl = $ttl; |
57 | 57 | |
58 | 58 | // Get the temp dir and add the directory separator if missing. |
59 | 59 | $temp_dir = get_temp_dir(); |
60 | - if ( DIRECTORY_SEPARATOR !== substr( $temp_dir, - strlen( DIRECTORY_SEPARATOR ) ) ) { |
|
60 | + if (DIRECTORY_SEPARATOR !== substr($temp_dir, - strlen(DIRECTORY_SEPARATOR))) { |
|
61 | 61 | $temp_dir .= DIRECTORY_SEPARATOR; |
62 | 62 | } |
63 | - $this->cache_dir = $temp_dir . 'wlfb-http-cache'; |
|
63 | + $this->cache_dir = $temp_dir.'wlfb-http-cache'; |
|
64 | 64 | |
65 | - $this->log->trace( "Creating the cache folder {$this->cache_dir}..." ); |
|
66 | - wp_mkdir_p( $this->cache_dir ); |
|
65 | + $this->log->trace("Creating the cache folder {$this->cache_dir}..."); |
|
66 | + wp_mkdir_p($this->cache_dir); |
|
67 | 67 | |
68 | 68 | } |
69 | 69 | |
70 | 70 | /** |
71 | 71 | * @inheritDoc |
72 | 72 | */ |
73 | - public function request( $url, $options = array() ) { |
|
73 | + public function request($url, $options = array()) { |
|
74 | 74 | |
75 | 75 | // Create a hash and a path to the cache file. |
76 | 76 | // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize |
77 | - $hash = md5( $url ) . '-' . md5( serialize( $options ) ); |
|
78 | - $filename = $this->get_path( $hash ); |
|
77 | + $hash = md5($url).'-'.md5(serialize($options)); |
|
78 | + $filename = $this->get_path($hash); |
|
79 | 79 | |
80 | 80 | // If the cache file exists and it's not too old, then return it. |
81 | - if ( file_exists( $filename ) && $this->ttl >= time() - filemtime( $filename ) ) { |
|
82 | - $this->log->trace( "Cache HIT.\n" ); |
|
81 | + if (file_exists($filename) && $this->ttl >= time() - filemtime($filename)) { |
|
82 | + $this->log->trace("Cache HIT.\n"); |
|
83 | 83 | |
84 | 84 | // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents |
85 | - return json_decode( file_get_contents( $filename ), true ); |
|
85 | + return json_decode(file_get_contents($filename), true); |
|
86 | 86 | } |
87 | 87 | |
88 | - $this->log->trace( "Cache MISS for URL $url, hash $hash.\n" ); |
|
88 | + $this->log->trace("Cache MISS for URL $url, hash $hash.\n"); |
|
89 | 89 | |
90 | 90 | // Get a fresh response and return it. |
91 | - $response = parent::request( $url, $options ); |
|
91 | + $response = parent::request($url, $options); |
|
92 | 92 | |
93 | 93 | // Return immediately, do not cache. |
94 | - if ( is_wp_error( $response ) ) { |
|
94 | + if (is_wp_error($response)) { |
|
95 | 95 | return $response; |
96 | 96 | } |
97 | 97 | |
98 | 98 | // Do not cache response with invalid status codes or status code different from 2xx. |
99 | - $code = wp_remote_retrieve_response_code( $response ); |
|
100 | - if ( ! is_numeric( $code ) || 2 !== intval( $code ) / 100 ) { |
|
99 | + $code = wp_remote_retrieve_response_code($response); |
|
100 | + if ( ! is_numeric($code) || 2 !== intval($code) / 100) { |
|
101 | 101 | return $response; |
102 | 102 | } |
103 | 103 | |
104 | 104 | // Cache. |
105 | 105 | // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
106 | - @unlink( $filename ); |
|
106 | + @unlink($filename); |
|
107 | 107 | // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.WP.AlternativeFunctions.json_encode_json_encode,WordPress.WP.AlternativeFunctions.file_system_read_file_put_contents |
108 | - @file_put_contents( $filename, json_encode( $response ) ); |
|
108 | + @file_put_contents($filename, json_encode($response)); |
|
109 | 109 | |
110 | 110 | return $response; |
111 | 111 | } |
@@ -118,9 +118,9 @@ discard block |
||
118 | 118 | * @return string The full path to the file. |
119 | 119 | * @since 1.0.0 |
120 | 120 | */ |
121 | - private function get_path( $hash ) { |
|
121 | + private function get_path($hash) { |
|
122 | 122 | |
123 | - return $this->cache_dir . DIRECTORY_SEPARATOR . $hash; |
|
123 | + return $this->cache_dir.DIRECTORY_SEPARATOR.$hash; |
|
124 | 124 | } |
125 | 125 | |
126 | 126 | } |
@@ -15,26 +15,26 @@ |
||
15 | 15 | */ |
16 | 16 | interface Http_Client { |
17 | 17 | |
18 | - /** |
|
19 | - * Perform a `GET` operation to the specified `$url`. |
|
20 | - * |
|
21 | - * @param string $url The URL. |
|
22 | - * @param array $options An array of options to pass to WordPress {@link wp_remote_request} function, default: array(). |
|
23 | - * |
|
24 | - * @return \WP_Error|array The response or WP_Error on failure. |
|
25 | - * @since 1.0.0 |
|
26 | - */ |
|
27 | - public function get( $url, $options = array() ); |
|
18 | + /** |
|
19 | + * Perform a `GET` operation to the specified `$url`. |
|
20 | + * |
|
21 | + * @param string $url The URL. |
|
22 | + * @param array $options An array of options to pass to WordPress {@link wp_remote_request} function, default: array(). |
|
23 | + * |
|
24 | + * @return \WP_Error|array The response or WP_Error on failure. |
|
25 | + * @since 1.0.0 |
|
26 | + */ |
|
27 | + public function get( $url, $options = array() ); |
|
28 | 28 | |
29 | - /** |
|
30 | - * Perform a request to the specified `$url`. |
|
31 | - * |
|
32 | - * @param string $url The URL. |
|
33 | - * @param array $options An array of options to pass to WordPress {@link wp_remote_request} function, default: array(). |
|
34 | - * |
|
35 | - * @return \WP_Error|array The response or WP_Error on failure. |
|
36 | - * @since 1.0.0 |
|
37 | - */ |
|
38 | - public function request( $url, $options = array() ); |
|
29 | + /** |
|
30 | + * Perform a request to the specified `$url`. |
|
31 | + * |
|
32 | + * @param string $url The URL. |
|
33 | + * @param array $options An array of options to pass to WordPress {@link wp_remote_request} function, default: array(). |
|
34 | + * |
|
35 | + * @return \WP_Error|array The response or WP_Error on failure. |
|
36 | + * @since 1.0.0 |
|
37 | + */ |
|
38 | + public function request( $url, $options = array() ); |
|
39 | 39 | |
40 | 40 | } |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | * @return \WP_Error|array The response or WP_Error on failure. |
25 | 25 | * @since 1.0.0 |
26 | 26 | */ |
27 | - public function get( $url, $options = array() ); |
|
27 | + public function get($url, $options = array()); |
|
28 | 28 | |
29 | 29 | /** |
30 | 30 | * Perform a request to the specified `$url`. |
@@ -35,6 +35,6 @@ discard block |
||
35 | 35 | * @return \WP_Error|array The response or WP_Error on failure. |
36 | 36 | * @since 1.0.0 |
37 | 37 | */ |
38 | - public function request( $url, $options = array() ); |
|
38 | + public function request($url, $options = array()); |
|
39 | 39 | |
40 | 40 | } |
@@ -14,59 +14,59 @@ |
||
14 | 14 | use Wordlift_Entity_Type_Taxonomy_Service; |
15 | 15 | |
16 | 16 | class Entity_Type_Change_Handler { |
17 | - /** |
|
18 | - * @var Wordlift_Entity_Service |
|
19 | - */ |
|
20 | - private $entity_service; |
|
21 | - /** |
|
22 | - * @var Wordlift_Entity_Type_Service |
|
23 | - */ |
|
24 | - private $entity_type_service; |
|
25 | - |
|
26 | - /** |
|
27 | - * Entity_Type_Change_Handler constructor. |
|
28 | - * |
|
29 | - * @param $entity_service Wordlift_Entity_Service |
|
30 | - * @param $entity_type_service Wordlift_Entity_Type_Service |
|
31 | - */ |
|
32 | - public function __construct( $entity_service, $entity_type_service ) { |
|
33 | - |
|
34 | - $this->entity_service = $entity_service; |
|
35 | - |
|
36 | - $this->entity_type_service = $entity_type_service; |
|
37 | - |
|
38 | - // Takes a performance toll, do we really need it? |
|
39 | - // add_action( 'set_object_terms', array( $this, 'set_object_terms' ), 10, 4 ); |
|
40 | - } |
|
41 | - |
|
42 | - public function set_object_terms( $object_id, $terms, $tt_ids, $taxonomy ) { |
|
43 | - |
|
44 | - if ( Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME !== $taxonomy ) { |
|
45 | - return; |
|
46 | - } |
|
47 | - |
|
48 | - if ( count( $terms ) !== 1 ) { |
|
49 | - // Unable to determine which entity type or multiple entity types. |
|
50 | - return; |
|
51 | - } |
|
52 | - |
|
53 | - // This taxonomy is registered only for post, so the object id would |
|
54 | - // be the post id. |
|
55 | - $types = $this->entity_type_service->get_names( $object_id ); |
|
56 | - |
|
57 | - if ( count( $types ) !== 1 ) { |
|
58 | - // Unable to determine which entity type or multiple entity types. |
|
59 | - return; |
|
60 | - } |
|
61 | - |
|
62 | - // Check if set to Article or one of its descendants |
|
63 | - if ( ! in_array( $types[0], Jsonld_Article_Wrapper::$article_types, true ) ) { |
|
64 | - return; |
|
65 | - } |
|
66 | - |
|
67 | - // clear the labels. |
|
68 | - $this->entity_service->set_alternative_labels( $object_id, array() ); |
|
69 | - |
|
70 | - } |
|
17 | + /** |
|
18 | + * @var Wordlift_Entity_Service |
|
19 | + */ |
|
20 | + private $entity_service; |
|
21 | + /** |
|
22 | + * @var Wordlift_Entity_Type_Service |
|
23 | + */ |
|
24 | + private $entity_type_service; |
|
25 | + |
|
26 | + /** |
|
27 | + * Entity_Type_Change_Handler constructor. |
|
28 | + * |
|
29 | + * @param $entity_service Wordlift_Entity_Service |
|
30 | + * @param $entity_type_service Wordlift_Entity_Type_Service |
|
31 | + */ |
|
32 | + public function __construct( $entity_service, $entity_type_service ) { |
|
33 | + |
|
34 | + $this->entity_service = $entity_service; |
|
35 | + |
|
36 | + $this->entity_type_service = $entity_type_service; |
|
37 | + |
|
38 | + // Takes a performance toll, do we really need it? |
|
39 | + // add_action( 'set_object_terms', array( $this, 'set_object_terms' ), 10, 4 ); |
|
40 | + } |
|
41 | + |
|
42 | + public function set_object_terms( $object_id, $terms, $tt_ids, $taxonomy ) { |
|
43 | + |
|
44 | + if ( Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME !== $taxonomy ) { |
|
45 | + return; |
|
46 | + } |
|
47 | + |
|
48 | + if ( count( $terms ) !== 1 ) { |
|
49 | + // Unable to determine which entity type or multiple entity types. |
|
50 | + return; |
|
51 | + } |
|
52 | + |
|
53 | + // This taxonomy is registered only for post, so the object id would |
|
54 | + // be the post id. |
|
55 | + $types = $this->entity_type_service->get_names( $object_id ); |
|
56 | + |
|
57 | + if ( count( $types ) !== 1 ) { |
|
58 | + // Unable to determine which entity type or multiple entity types. |
|
59 | + return; |
|
60 | + } |
|
61 | + |
|
62 | + // Check if set to Article or one of its descendants |
|
63 | + if ( ! in_array( $types[0], Jsonld_Article_Wrapper::$article_types, true ) ) { |
|
64 | + return; |
|
65 | + } |
|
66 | + |
|
67 | + // clear the labels. |
|
68 | + $this->entity_service->set_alternative_labels( $object_id, array() ); |
|
69 | + |
|
70 | + } |
|
71 | 71 | |
72 | 72 | } |
@@ -29,7 +29,7 @@ discard block |
||
29 | 29 | * @param $entity_service Wordlift_Entity_Service |
30 | 30 | * @param $entity_type_service Wordlift_Entity_Type_Service |
31 | 31 | */ |
32 | - public function __construct( $entity_service, $entity_type_service ) { |
|
32 | + public function __construct($entity_service, $entity_type_service) { |
|
33 | 33 | |
34 | 34 | $this->entity_service = $entity_service; |
35 | 35 | |
@@ -39,33 +39,33 @@ discard block |
||
39 | 39 | // add_action( 'set_object_terms', array( $this, 'set_object_terms' ), 10, 4 ); |
40 | 40 | } |
41 | 41 | |
42 | - public function set_object_terms( $object_id, $terms, $tt_ids, $taxonomy ) { |
|
42 | + public function set_object_terms($object_id, $terms, $tt_ids, $taxonomy) { |
|
43 | 43 | |
44 | - if ( Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME !== $taxonomy ) { |
|
44 | + if (Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME !== $taxonomy) { |
|
45 | 45 | return; |
46 | 46 | } |
47 | 47 | |
48 | - if ( count( $terms ) !== 1 ) { |
|
48 | + if (count($terms) !== 1) { |
|
49 | 49 | // Unable to determine which entity type or multiple entity types. |
50 | 50 | return; |
51 | 51 | } |
52 | 52 | |
53 | 53 | // This taxonomy is registered only for post, so the object id would |
54 | 54 | // be the post id. |
55 | - $types = $this->entity_type_service->get_names( $object_id ); |
|
55 | + $types = $this->entity_type_service->get_names($object_id); |
|
56 | 56 | |
57 | - if ( count( $types ) !== 1 ) { |
|
57 | + if (count($types) !== 1) { |
|
58 | 58 | // Unable to determine which entity type or multiple entity types. |
59 | 59 | return; |
60 | 60 | } |
61 | 61 | |
62 | 62 | // Check if set to Article or one of its descendants |
63 | - if ( ! in_array( $types[0], Jsonld_Article_Wrapper::$article_types, true ) ) { |
|
63 | + if ( ! in_array($types[0], Jsonld_Article_Wrapper::$article_types, true)) { |
|
64 | 64 | return; |
65 | 65 | } |
66 | 66 | |
67 | 67 | // clear the labels. |
68 | - $this->entity_service->set_alternative_labels( $object_id, array() ); |
|
68 | + $this->entity_service->set_alternative_labels($object_id, array()); |
|
69 | 69 | |
70 | 70 | } |
71 | 71 |
@@ -10,208 +10,208 @@ |
||
10 | 10 | |
11 | 11 | class Entity_Type_Setter { |
12 | 12 | |
13 | - const STARTER_PLAN = 'entity-types-starter'; |
|
14 | - |
|
15 | - const PROFESSIONAL_PLAN = 'entity-types-professional'; |
|
16 | - |
|
17 | - const BUSINESS_PLAN = 'entity-types-business'; |
|
18 | - |
|
19 | - public function __construct() { |
|
20 | - add_action( |
|
21 | - 'wl_feature__change__entity-types-starter', |
|
22 | - array( |
|
23 | - $this, |
|
24 | - 'wl_entity_types_feature_changed', |
|
25 | - ), |
|
26 | - 10, |
|
27 | - 3 |
|
28 | - ); |
|
29 | - add_action( |
|
30 | - 'wl_feature__change__entity-types-professional', |
|
31 | - array( |
|
32 | - $this, |
|
33 | - 'wl_entity_types_feature_changed', |
|
34 | - ), |
|
35 | - 10, |
|
36 | - 3 |
|
37 | - ); |
|
38 | - add_action( |
|
39 | - 'wl_feature__change__entity-types-business', |
|
40 | - array( |
|
41 | - $this, |
|
42 | - 'wl_entity_types_feature_changed', |
|
43 | - ), |
|
44 | - 10, |
|
45 | - 3 |
|
46 | - ); |
|
47 | - } |
|
48 | - |
|
49 | - public function wl_entity_types_feature_changed( $new_value, $old_value, $feature_slug ) { |
|
50 | - |
|
51 | - // If the entity types is not set by server, then return early. |
|
52 | - if ( ! $new_value ) { |
|
53 | - return; |
|
54 | - } |
|
55 | - |
|
56 | - $entity_types_data = self::get_entity_types_by_feature_flag( $feature_slug ); |
|
57 | - |
|
58 | - // If we dont have entity types returned, then dont reset the entity types, return early. |
|
59 | - if ( ! $entity_types_data ) { |
|
60 | - return; |
|
61 | - } |
|
62 | - // Repopulate the ones returned by package type. |
|
63 | - foreach ( $entity_types_data as $entity_type_data ) { |
|
64 | - |
|
65 | - $schema_label = $entity_type_data['label']; |
|
66 | - |
|
67 | - $term_exists = get_term_by( 'name', $schema_label, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME ) instanceof \WP_Term; |
|
68 | - |
|
69 | - if ( $term_exists ) { |
|
70 | - // Dont create term if it already exists. |
|
71 | - continue; |
|
72 | - } |
|
73 | - |
|
74 | - $term_data = wp_insert_term( |
|
75 | - $schema_label, |
|
76 | - Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME, |
|
77 | - array( |
|
78 | - 'description' => $entity_type_data['description'], |
|
79 | - 'slug' => $entity_type_data['slug'], |
|
80 | - ) |
|
81 | - ); |
|
82 | - |
|
83 | - $term_id = $term_data['term_id']; |
|
84 | - |
|
85 | - update_term_meta( $term_id, '_wl_uri', 'http://schema.org/' . $schema_label ); |
|
86 | - update_term_meta( $term_id, '_wl_name', $schema_label ); |
|
87 | - } |
|
88 | - |
|
89 | - } |
|
90 | - |
|
91 | - public static function get_starter_entity_types() { |
|
92 | - return array( |
|
93 | - array( |
|
94 | - 'label' => 'Person', |
|
95 | - 'description' => 'A person (or a music artist).', |
|
96 | - 'slug' => 'person', |
|
97 | - ), |
|
98 | - array( |
|
99 | - 'label' => 'Thing', |
|
100 | - 'description' => 'A generic thing (something that doesn\'t fit in the previous definitions.', |
|
101 | - 'slug' => 'thing', |
|
102 | - ), |
|
103 | - |
|
104 | - array( |
|
105 | - 'label' => 'Place', |
|
106 | - 'description' => 'A place.', |
|
107 | - 'slug' => 'place', |
|
108 | - ), |
|
109 | - |
|
110 | - array( |
|
111 | - 'label' => 'CreativeWork', |
|
112 | - 'description' => 'A creative work (or a Music Album).', |
|
113 | - 'slug' => 'creative-work', |
|
114 | - ), |
|
115 | - array( |
|
116 | - 'label' => 'Organization', |
|
117 | - 'description' => 'An organization, including a government or a newspaper.', |
|
118 | - 'slug' => 'organization', |
|
119 | - ), |
|
120 | - |
|
121 | - array( |
|
122 | - 'label' => 'Article', |
|
123 | - 'description' => 'An article, such as a news article or piece of investigative report. Newspapers and magazines have articles of many different types and this is intended to cover them all.', |
|
124 | - 'slug' => 'article', |
|
125 | - ), |
|
126 | - |
|
127 | - array( |
|
128 | - 'label' => 'WebSite', |
|
129 | - 'description' => 'A WebSite is a set of related web pages and other items typically served from a single web domain and accessible via URLs.', |
|
130 | - 'slug' => 'web-site', |
|
131 | - ), |
|
132 | - |
|
133 | - array( |
|
134 | - 'label' => 'NewsArticle', |
|
135 | - 'description' => 'A NewsArticle is an article whose content reports news, or provides background context and supporting materials for understanding the news.', |
|
136 | - 'slug' => 'news-article', |
|
137 | - ), |
|
138 | - |
|
139 | - array( |
|
140 | - 'label' => 'AboutPage', |
|
141 | - 'description' => 'An About page.', |
|
142 | - 'slug' => 'about-page', |
|
143 | - ), |
|
144 | - |
|
145 | - array( |
|
146 | - 'label' => 'ContactPage', |
|
147 | - 'description' => 'A Contact Page.', |
|
148 | - 'slug' => 'contact-page', |
|
149 | - ), |
|
150 | - |
|
151 | - ); |
|
152 | - } |
|
153 | - |
|
154 | - public static function get_professional_entity_types() { |
|
155 | - return array( |
|
156 | - |
|
157 | - array( |
|
158 | - 'label' => 'FAQPage', |
|
159 | - 'description' => 'A FAQPage is a WebPage presenting one or more "Frequently asked questions".', |
|
160 | - 'slug' => 'faq-page', |
|
161 | - ), |
|
162 | - array( |
|
163 | - 'label' => 'LocalBusiness', |
|
164 | - 'description' => 'A particular physical business or branch of an organization. Examples of LocalBusiness include a restaurant, a particular branch of a restaurant chain, a branch of a bank, a medical practice, a club, a bowling alley, etc.', |
|
165 | - 'slug' => 'local-business', |
|
166 | - |
|
167 | - ), |
|
168 | - array( |
|
169 | - 'label' => 'Recipe', |
|
170 | - 'description' => 'A recipe', |
|
171 | - 'slug' => 'recipe', |
|
172 | - ), |
|
173 | - array( |
|
174 | - 'label' => 'PodcastEpisode', |
|
175 | - 'description' => 'A single episode of a podcast series.', |
|
176 | - 'slug' => 'podcast-episode', |
|
177 | - ), |
|
178 | - array( |
|
179 | - 'label' => 'Course', |
|
180 | - 'description' => 'A description of an educational course which may be offered as distinct instances at which take place at different times or take place at different locations, or be offered through different media or modes of study.', |
|
181 | - 'slug' => 'course', |
|
182 | - ), |
|
183 | - array( |
|
184 | - 'label' => 'Event', |
|
185 | - 'description' => 'An event happening at a certain time and location, such as a concert, lecture, or festival.', |
|
186 | - 'slug' => 'event', |
|
187 | - ), |
|
188 | - array( |
|
189 | - 'label' => 'Review', |
|
190 | - 'description' => 'A review of an item - for example, of a restaurant, movie, or store.', |
|
191 | - 'slug' => 'review', |
|
192 | - ), |
|
193 | - |
|
194 | - ); |
|
195 | - } |
|
196 | - |
|
197 | - private static function get_entity_types_by_feature_flag( $package_type ) { |
|
198 | - |
|
199 | - switch ( $package_type ) { |
|
200 | - case self::STARTER_PLAN: |
|
201 | - return self::get_starter_entity_types(); |
|
202 | - case self::BUSINESS_PLAN: |
|
203 | - case self::PROFESSIONAL_PLAN: |
|
204 | - // We return same entity types for professional and business plans. |
|
205 | - // Business plan should have sync schema ui feature enabled, to sync all the entity types. |
|
206 | - return array_merge( |
|
207 | - self::get_starter_entity_types(), |
|
208 | - self::get_professional_entity_types() |
|
209 | - ); |
|
210 | - default: |
|
211 | - return array(); |
|
212 | - |
|
213 | - } |
|
214 | - |
|
215 | - } |
|
13 | + const STARTER_PLAN = 'entity-types-starter'; |
|
14 | + |
|
15 | + const PROFESSIONAL_PLAN = 'entity-types-professional'; |
|
16 | + |
|
17 | + const BUSINESS_PLAN = 'entity-types-business'; |
|
18 | + |
|
19 | + public function __construct() { |
|
20 | + add_action( |
|
21 | + 'wl_feature__change__entity-types-starter', |
|
22 | + array( |
|
23 | + $this, |
|
24 | + 'wl_entity_types_feature_changed', |
|
25 | + ), |
|
26 | + 10, |
|
27 | + 3 |
|
28 | + ); |
|
29 | + add_action( |
|
30 | + 'wl_feature__change__entity-types-professional', |
|
31 | + array( |
|
32 | + $this, |
|
33 | + 'wl_entity_types_feature_changed', |
|
34 | + ), |
|
35 | + 10, |
|
36 | + 3 |
|
37 | + ); |
|
38 | + add_action( |
|
39 | + 'wl_feature__change__entity-types-business', |
|
40 | + array( |
|
41 | + $this, |
|
42 | + 'wl_entity_types_feature_changed', |
|
43 | + ), |
|
44 | + 10, |
|
45 | + 3 |
|
46 | + ); |
|
47 | + } |
|
48 | + |
|
49 | + public function wl_entity_types_feature_changed( $new_value, $old_value, $feature_slug ) { |
|
50 | + |
|
51 | + // If the entity types is not set by server, then return early. |
|
52 | + if ( ! $new_value ) { |
|
53 | + return; |
|
54 | + } |
|
55 | + |
|
56 | + $entity_types_data = self::get_entity_types_by_feature_flag( $feature_slug ); |
|
57 | + |
|
58 | + // If we dont have entity types returned, then dont reset the entity types, return early. |
|
59 | + if ( ! $entity_types_data ) { |
|
60 | + return; |
|
61 | + } |
|
62 | + // Repopulate the ones returned by package type. |
|
63 | + foreach ( $entity_types_data as $entity_type_data ) { |
|
64 | + |
|
65 | + $schema_label = $entity_type_data['label']; |
|
66 | + |
|
67 | + $term_exists = get_term_by( 'name', $schema_label, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME ) instanceof \WP_Term; |
|
68 | + |
|
69 | + if ( $term_exists ) { |
|
70 | + // Dont create term if it already exists. |
|
71 | + continue; |
|
72 | + } |
|
73 | + |
|
74 | + $term_data = wp_insert_term( |
|
75 | + $schema_label, |
|
76 | + Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME, |
|
77 | + array( |
|
78 | + 'description' => $entity_type_data['description'], |
|
79 | + 'slug' => $entity_type_data['slug'], |
|
80 | + ) |
|
81 | + ); |
|
82 | + |
|
83 | + $term_id = $term_data['term_id']; |
|
84 | + |
|
85 | + update_term_meta( $term_id, '_wl_uri', 'http://schema.org/' . $schema_label ); |
|
86 | + update_term_meta( $term_id, '_wl_name', $schema_label ); |
|
87 | + } |
|
88 | + |
|
89 | + } |
|
90 | + |
|
91 | + public static function get_starter_entity_types() { |
|
92 | + return array( |
|
93 | + array( |
|
94 | + 'label' => 'Person', |
|
95 | + 'description' => 'A person (or a music artist).', |
|
96 | + 'slug' => 'person', |
|
97 | + ), |
|
98 | + array( |
|
99 | + 'label' => 'Thing', |
|
100 | + 'description' => 'A generic thing (something that doesn\'t fit in the previous definitions.', |
|
101 | + 'slug' => 'thing', |
|
102 | + ), |
|
103 | + |
|
104 | + array( |
|
105 | + 'label' => 'Place', |
|
106 | + 'description' => 'A place.', |
|
107 | + 'slug' => 'place', |
|
108 | + ), |
|
109 | + |
|
110 | + array( |
|
111 | + 'label' => 'CreativeWork', |
|
112 | + 'description' => 'A creative work (or a Music Album).', |
|
113 | + 'slug' => 'creative-work', |
|
114 | + ), |
|
115 | + array( |
|
116 | + 'label' => 'Organization', |
|
117 | + 'description' => 'An organization, including a government or a newspaper.', |
|
118 | + 'slug' => 'organization', |
|
119 | + ), |
|
120 | + |
|
121 | + array( |
|
122 | + 'label' => 'Article', |
|
123 | + 'description' => 'An article, such as a news article or piece of investigative report. Newspapers and magazines have articles of many different types and this is intended to cover them all.', |
|
124 | + 'slug' => 'article', |
|
125 | + ), |
|
126 | + |
|
127 | + array( |
|
128 | + 'label' => 'WebSite', |
|
129 | + 'description' => 'A WebSite is a set of related web pages and other items typically served from a single web domain and accessible via URLs.', |
|
130 | + 'slug' => 'web-site', |
|
131 | + ), |
|
132 | + |
|
133 | + array( |
|
134 | + 'label' => 'NewsArticle', |
|
135 | + 'description' => 'A NewsArticle is an article whose content reports news, or provides background context and supporting materials for understanding the news.', |
|
136 | + 'slug' => 'news-article', |
|
137 | + ), |
|
138 | + |
|
139 | + array( |
|
140 | + 'label' => 'AboutPage', |
|
141 | + 'description' => 'An About page.', |
|
142 | + 'slug' => 'about-page', |
|
143 | + ), |
|
144 | + |
|
145 | + array( |
|
146 | + 'label' => 'ContactPage', |
|
147 | + 'description' => 'A Contact Page.', |
|
148 | + 'slug' => 'contact-page', |
|
149 | + ), |
|
150 | + |
|
151 | + ); |
|
152 | + } |
|
153 | + |
|
154 | + public static function get_professional_entity_types() { |
|
155 | + return array( |
|
156 | + |
|
157 | + array( |
|
158 | + 'label' => 'FAQPage', |
|
159 | + 'description' => 'A FAQPage is a WebPage presenting one or more "Frequently asked questions".', |
|
160 | + 'slug' => 'faq-page', |
|
161 | + ), |
|
162 | + array( |
|
163 | + 'label' => 'LocalBusiness', |
|
164 | + 'description' => 'A particular physical business or branch of an organization. Examples of LocalBusiness include a restaurant, a particular branch of a restaurant chain, a branch of a bank, a medical practice, a club, a bowling alley, etc.', |
|
165 | + 'slug' => 'local-business', |
|
166 | + |
|
167 | + ), |
|
168 | + array( |
|
169 | + 'label' => 'Recipe', |
|
170 | + 'description' => 'A recipe', |
|
171 | + 'slug' => 'recipe', |
|
172 | + ), |
|
173 | + array( |
|
174 | + 'label' => 'PodcastEpisode', |
|
175 | + 'description' => 'A single episode of a podcast series.', |
|
176 | + 'slug' => 'podcast-episode', |
|
177 | + ), |
|
178 | + array( |
|
179 | + 'label' => 'Course', |
|
180 | + 'description' => 'A description of an educational course which may be offered as distinct instances at which take place at different times or take place at different locations, or be offered through different media or modes of study.', |
|
181 | + 'slug' => 'course', |
|
182 | + ), |
|
183 | + array( |
|
184 | + 'label' => 'Event', |
|
185 | + 'description' => 'An event happening at a certain time and location, such as a concert, lecture, or festival.', |
|
186 | + 'slug' => 'event', |
|
187 | + ), |
|
188 | + array( |
|
189 | + 'label' => 'Review', |
|
190 | + 'description' => 'A review of an item - for example, of a restaurant, movie, or store.', |
|
191 | + 'slug' => 'review', |
|
192 | + ), |
|
193 | + |
|
194 | + ); |
|
195 | + } |
|
196 | + |
|
197 | + private static function get_entity_types_by_feature_flag( $package_type ) { |
|
198 | + |
|
199 | + switch ( $package_type ) { |
|
200 | + case self::STARTER_PLAN: |
|
201 | + return self::get_starter_entity_types(); |
|
202 | + case self::BUSINESS_PLAN: |
|
203 | + case self::PROFESSIONAL_PLAN: |
|
204 | + // We return same entity types for professional and business plans. |
|
205 | + // Business plan should have sync schema ui feature enabled, to sync all the entity types. |
|
206 | + return array_merge( |
|
207 | + self::get_starter_entity_types(), |
|
208 | + self::get_professional_entity_types() |
|
209 | + ); |
|
210 | + default: |
|
211 | + return array(); |
|
212 | + |
|
213 | + } |
|
214 | + |
|
215 | + } |
|
216 | 216 | |
217 | 217 | } |
@@ -46,27 +46,27 @@ discard block |
||
46 | 46 | ); |
47 | 47 | } |
48 | 48 | |
49 | - public function wl_entity_types_feature_changed( $new_value, $old_value, $feature_slug ) { |
|
49 | + public function wl_entity_types_feature_changed($new_value, $old_value, $feature_slug) { |
|
50 | 50 | |
51 | 51 | // If the entity types is not set by server, then return early. |
52 | - if ( ! $new_value ) { |
|
52 | + if ( ! $new_value) { |
|
53 | 53 | return; |
54 | 54 | } |
55 | 55 | |
56 | - $entity_types_data = self::get_entity_types_by_feature_flag( $feature_slug ); |
|
56 | + $entity_types_data = self::get_entity_types_by_feature_flag($feature_slug); |
|
57 | 57 | |
58 | 58 | // If we dont have entity types returned, then dont reset the entity types, return early. |
59 | - if ( ! $entity_types_data ) { |
|
59 | + if ( ! $entity_types_data) { |
|
60 | 60 | return; |
61 | 61 | } |
62 | 62 | // Repopulate the ones returned by package type. |
63 | - foreach ( $entity_types_data as $entity_type_data ) { |
|
63 | + foreach ($entity_types_data as $entity_type_data) { |
|
64 | 64 | |
65 | 65 | $schema_label = $entity_type_data['label']; |
66 | 66 | |
67 | - $term_exists = get_term_by( 'name', $schema_label, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME ) instanceof \WP_Term; |
|
67 | + $term_exists = get_term_by('name', $schema_label, Wordlift_Entity_Type_Taxonomy_Service::TAXONOMY_NAME) instanceof \WP_Term; |
|
68 | 68 | |
69 | - if ( $term_exists ) { |
|
69 | + if ($term_exists) { |
|
70 | 70 | // Dont create term if it already exists. |
71 | 71 | continue; |
72 | 72 | } |
@@ -82,8 +82,8 @@ discard block |
||
82 | 82 | |
83 | 83 | $term_id = $term_data['term_id']; |
84 | 84 | |
85 | - update_term_meta( $term_id, '_wl_uri', 'http://schema.org/' . $schema_label ); |
|
86 | - update_term_meta( $term_id, '_wl_name', $schema_label ); |
|
85 | + update_term_meta($term_id, '_wl_uri', 'http://schema.org/'.$schema_label); |
|
86 | + update_term_meta($term_id, '_wl_name', $schema_label); |
|
87 | 87 | } |
88 | 88 | |
89 | 89 | } |
@@ -194,9 +194,9 @@ discard block |
||
194 | 194 | ); |
195 | 195 | } |
196 | 196 | |
197 | - private static function get_entity_types_by_feature_flag( $package_type ) { |
|
197 | + private static function get_entity_types_by_feature_flag($package_type) { |
|
198 | 198 | |
199 | - switch ( $package_type ) { |
|
199 | + switch ($package_type) { |
|
200 | 200 | case self::STARTER_PLAN: |
201 | 201 | return self::get_starter_entity_types(); |
202 | 202 | case self::BUSINESS_PLAN: |
@@ -7,152 +7,152 @@ |
||
7 | 7 | |
8 | 8 | class Default_Api_Service implements Api_Service, Api_Service_Ext { |
9 | 9 | |
10 | - /** |
|
11 | - * @var string |
|
12 | - */ |
|
13 | - private $wordlift_key; |
|
14 | - /** |
|
15 | - * @var int |
|
16 | - */ |
|
17 | - private $timeout; |
|
18 | - |
|
19 | - /** |
|
20 | - * @var string |
|
21 | - */ |
|
22 | - private $user_agent; |
|
23 | - |
|
24 | - /** |
|
25 | - * @var array |
|
26 | - */ |
|
27 | - private $headers; |
|
28 | - /** |
|
29 | - * @var string |
|
30 | - */ |
|
31 | - private $base_url; |
|
32 | - |
|
33 | - /** |
|
34 | - * @var \Wordlift_Log_Service |
|
35 | - */ |
|
36 | - private $log; |
|
37 | - |
|
38 | - /** |
|
39 | - * Default_Api_Service constructor. |
|
40 | - * |
|
41 | - * @param string $base_url |
|
42 | - * @param int $timeout |
|
43 | - * @param string $user_agent |
|
44 | - * @param string $wordlift_key |
|
45 | - */ |
|
46 | - protected function __construct( $base_url, $timeout, $user_agent, $wordlift_key ) { |
|
47 | - |
|
48 | - $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
49 | - |
|
50 | - $this->base_url = untrailingslashit( $base_url ); |
|
51 | - $this->timeout = $timeout; |
|
52 | - $this->user_agent = $user_agent; |
|
53 | - $this->wordlift_key = $wordlift_key; |
|
54 | - |
|
55 | - $this->headers = array( |
|
56 | - 'Content-Type' => 'application/json', |
|
57 | - 'Authorization' => "Key $wordlift_key", |
|
58 | - 'Expect' => '', |
|
59 | - ); |
|
60 | - |
|
61 | - self::$instance = $this; |
|
62 | - } |
|
63 | - |
|
64 | - private static $instance; |
|
65 | - |
|
66 | - /** |
|
67 | - * @return Default_Api_Service |
|
68 | - */ |
|
69 | - public static function get_instance() { |
|
70 | - if ( ! isset( self::$instance ) ) { |
|
71 | - self::$instance = new self( |
|
72 | - apply_filters( 'wl_api_base_url', WL_CONFIG_WORDLIFT_API_URL_DEFAULT_VALUE ), |
|
73 | - 60, |
|
74 | - User_Agent::get_user_agent(), |
|
75 | - Wordlift_Configuration_Service::get_instance()->get_key() |
|
76 | - ); |
|
77 | - } |
|
78 | - |
|
79 | - return self::$instance; |
|
80 | - } |
|
81 | - |
|
82 | - public function request( $method, $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
83 | - |
|
84 | - // Get the timeout for this request. |
|
85 | - $request_timeout = isset( $timeout ) ? $timeout : $this->timeout; |
|
86 | - |
|
87 | - // Set the time limit if lesser than our request timeout. |
|
88 | - $max_execution_time = ini_get( 'max_execution_time' ); |
|
89 | - if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) |
|
90 | - && ( 0 !== intval( $max_execution_time ) ) |
|
91 | - && ( $max_execution_time < $request_timeout ) ) { |
|
92 | - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
|
93 | - @set_time_limit( $request_timeout ); |
|
94 | - } |
|
95 | - |
|
96 | - $request_url = $this->base_url . $path; |
|
97 | - // Create the request args in the following order: |
|
98 | - // 1. use `$args` as base if provided. |
|
99 | - // 2. set the custom timeout if provided. |
|
100 | - // 3. set the custom user-agent if provided. |
|
101 | - // 4. merge the API headers to the provided headers. |
|
102 | - // 5. add the body. |
|
103 | - // |
|
104 | - // In this way the user can fully control the request if wanted (using `$args`) and we can add our defaults. |
|
105 | - $request_args = apply_filters( |
|
106 | - 'wl_api_service__request', |
|
107 | - $args + array( |
|
108 | - 'method' => $method, |
|
109 | - 'timeout' => $request_timeout, |
|
110 | - 'user-agent' => isset( $user_agent ) ? $user_agent : $this->user_agent, |
|
111 | - 'headers' => $headers + $this->headers + Api_Headers_Service::get_instance()->get_wp_headers(), |
|
112 | - 'body' => $body, |
|
113 | - ) |
|
114 | - ); |
|
115 | - |
|
116 | - /** |
|
117 | - * Allow 3rd parties to process the response. |
|
118 | - */ |
|
119 | - $response = apply_filters( |
|
120 | - 'wl_api_service__response', |
|
121 | - wp_remote_request( $request_url, $request_args ), |
|
122 | - $request_url, |
|
123 | - $request_args |
|
124 | - ); |
|
125 | - |
|
126 | - if ( defined( 'WL_DEBUG' ) && WL_DEBUG ) { |
|
127 | - $this->log->trace( |
|
128 | - "=== REQUEST ===========================\n" |
|
129 | - . "=== URL: $request_url ===========================\n" |
|
130 | - // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
|
131 | - . var_export( $request_args, true ) |
|
132 | - . "=== RESPONSE ===========================\n" |
|
133 | - // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
|
134 | - . var_export( $response, true ) |
|
135 | - ); |
|
136 | - } |
|
137 | - |
|
138 | - return new Response( $response ); |
|
139 | - } |
|
140 | - |
|
141 | - public function get( $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
142 | - |
|
143 | - return $this->request( 'GET', $path, $headers, $body, $timeout, $user_agent, $args ); |
|
144 | - } |
|
145 | - |
|
146 | - public function get_base_url() { |
|
147 | - return $this->base_url; |
|
148 | - } |
|
149 | - |
|
150 | - /** |
|
151 | - * @return Me_Response |
|
152 | - * @throws Exception when an error occurs. |
|
153 | - */ |
|
154 | - public function me() { |
|
155 | - return json_decode( $this->get( '/me' )->get_body() ); |
|
156 | - } |
|
10 | + /** |
|
11 | + * @var string |
|
12 | + */ |
|
13 | + private $wordlift_key; |
|
14 | + /** |
|
15 | + * @var int |
|
16 | + */ |
|
17 | + private $timeout; |
|
18 | + |
|
19 | + /** |
|
20 | + * @var string |
|
21 | + */ |
|
22 | + private $user_agent; |
|
23 | + |
|
24 | + /** |
|
25 | + * @var array |
|
26 | + */ |
|
27 | + private $headers; |
|
28 | + /** |
|
29 | + * @var string |
|
30 | + */ |
|
31 | + private $base_url; |
|
32 | + |
|
33 | + /** |
|
34 | + * @var \Wordlift_Log_Service |
|
35 | + */ |
|
36 | + private $log; |
|
37 | + |
|
38 | + /** |
|
39 | + * Default_Api_Service constructor. |
|
40 | + * |
|
41 | + * @param string $base_url |
|
42 | + * @param int $timeout |
|
43 | + * @param string $user_agent |
|
44 | + * @param string $wordlift_key |
|
45 | + */ |
|
46 | + protected function __construct( $base_url, $timeout, $user_agent, $wordlift_key ) { |
|
47 | + |
|
48 | + $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
49 | + |
|
50 | + $this->base_url = untrailingslashit( $base_url ); |
|
51 | + $this->timeout = $timeout; |
|
52 | + $this->user_agent = $user_agent; |
|
53 | + $this->wordlift_key = $wordlift_key; |
|
54 | + |
|
55 | + $this->headers = array( |
|
56 | + 'Content-Type' => 'application/json', |
|
57 | + 'Authorization' => "Key $wordlift_key", |
|
58 | + 'Expect' => '', |
|
59 | + ); |
|
60 | + |
|
61 | + self::$instance = $this; |
|
62 | + } |
|
63 | + |
|
64 | + private static $instance; |
|
65 | + |
|
66 | + /** |
|
67 | + * @return Default_Api_Service |
|
68 | + */ |
|
69 | + public static function get_instance() { |
|
70 | + if ( ! isset( self::$instance ) ) { |
|
71 | + self::$instance = new self( |
|
72 | + apply_filters( 'wl_api_base_url', WL_CONFIG_WORDLIFT_API_URL_DEFAULT_VALUE ), |
|
73 | + 60, |
|
74 | + User_Agent::get_user_agent(), |
|
75 | + Wordlift_Configuration_Service::get_instance()->get_key() |
|
76 | + ); |
|
77 | + } |
|
78 | + |
|
79 | + return self::$instance; |
|
80 | + } |
|
81 | + |
|
82 | + public function request( $method, $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
83 | + |
|
84 | + // Get the timeout for this request. |
|
85 | + $request_timeout = isset( $timeout ) ? $timeout : $this->timeout; |
|
86 | + |
|
87 | + // Set the time limit if lesser than our request timeout. |
|
88 | + $max_execution_time = ini_get( 'max_execution_time' ); |
|
89 | + if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) |
|
90 | + && ( 0 !== intval( $max_execution_time ) ) |
|
91 | + && ( $max_execution_time < $request_timeout ) ) { |
|
92 | + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
|
93 | + @set_time_limit( $request_timeout ); |
|
94 | + } |
|
95 | + |
|
96 | + $request_url = $this->base_url . $path; |
|
97 | + // Create the request args in the following order: |
|
98 | + // 1. use `$args` as base if provided. |
|
99 | + // 2. set the custom timeout if provided. |
|
100 | + // 3. set the custom user-agent if provided. |
|
101 | + // 4. merge the API headers to the provided headers. |
|
102 | + // 5. add the body. |
|
103 | + // |
|
104 | + // In this way the user can fully control the request if wanted (using `$args`) and we can add our defaults. |
|
105 | + $request_args = apply_filters( |
|
106 | + 'wl_api_service__request', |
|
107 | + $args + array( |
|
108 | + 'method' => $method, |
|
109 | + 'timeout' => $request_timeout, |
|
110 | + 'user-agent' => isset( $user_agent ) ? $user_agent : $this->user_agent, |
|
111 | + 'headers' => $headers + $this->headers + Api_Headers_Service::get_instance()->get_wp_headers(), |
|
112 | + 'body' => $body, |
|
113 | + ) |
|
114 | + ); |
|
115 | + |
|
116 | + /** |
|
117 | + * Allow 3rd parties to process the response. |
|
118 | + */ |
|
119 | + $response = apply_filters( |
|
120 | + 'wl_api_service__response', |
|
121 | + wp_remote_request( $request_url, $request_args ), |
|
122 | + $request_url, |
|
123 | + $request_args |
|
124 | + ); |
|
125 | + |
|
126 | + if ( defined( 'WL_DEBUG' ) && WL_DEBUG ) { |
|
127 | + $this->log->trace( |
|
128 | + "=== REQUEST ===========================\n" |
|
129 | + . "=== URL: $request_url ===========================\n" |
|
130 | + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
|
131 | + . var_export( $request_args, true ) |
|
132 | + . "=== RESPONSE ===========================\n" |
|
133 | + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
|
134 | + . var_export( $response, true ) |
|
135 | + ); |
|
136 | + } |
|
137 | + |
|
138 | + return new Response( $response ); |
|
139 | + } |
|
140 | + |
|
141 | + public function get( $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
142 | + |
|
143 | + return $this->request( 'GET', $path, $headers, $body, $timeout, $user_agent, $args ); |
|
144 | + } |
|
145 | + |
|
146 | + public function get_base_url() { |
|
147 | + return $this->base_url; |
|
148 | + } |
|
149 | + |
|
150 | + /** |
|
151 | + * @return Me_Response |
|
152 | + * @throws Exception when an error occurs. |
|
153 | + */ |
|
154 | + public function me() { |
|
155 | + return json_decode( $this->get( '/me' )->get_body() ); |
|
156 | + } |
|
157 | 157 | |
158 | 158 | } |
@@ -43,11 +43,11 @@ discard block |
||
43 | 43 | * @param string $user_agent |
44 | 44 | * @param string $wordlift_key |
45 | 45 | */ |
46 | - protected function __construct( $base_url, $timeout, $user_agent, $wordlift_key ) { |
|
46 | + protected function __construct($base_url, $timeout, $user_agent, $wordlift_key) { |
|
47 | 47 | |
48 | - $this->log = \Wordlift_Log_Service::get_logger( get_class() ); |
|
48 | + $this->log = \Wordlift_Log_Service::get_logger(get_class()); |
|
49 | 49 | |
50 | - $this->base_url = untrailingslashit( $base_url ); |
|
50 | + $this->base_url = untrailingslashit($base_url); |
|
51 | 51 | $this->timeout = $timeout; |
52 | 52 | $this->user_agent = $user_agent; |
53 | 53 | $this->wordlift_key = $wordlift_key; |
@@ -67,9 +67,9 @@ discard block |
||
67 | 67 | * @return Default_Api_Service |
68 | 68 | */ |
69 | 69 | public static function get_instance() { |
70 | - if ( ! isset( self::$instance ) ) { |
|
70 | + if ( ! isset(self::$instance)) { |
|
71 | 71 | self::$instance = new self( |
72 | - apply_filters( 'wl_api_base_url', WL_CONFIG_WORDLIFT_API_URL_DEFAULT_VALUE ), |
|
72 | + apply_filters('wl_api_base_url', WL_CONFIG_WORDLIFT_API_URL_DEFAULT_VALUE), |
|
73 | 73 | 60, |
74 | 74 | User_Agent::get_user_agent(), |
75 | 75 | Wordlift_Configuration_Service::get_instance()->get_key() |
@@ -79,21 +79,21 @@ discard block |
||
79 | 79 | return self::$instance; |
80 | 80 | } |
81 | 81 | |
82 | - public function request( $method, $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
82 | + public function request($method, $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array()) { |
|
83 | 83 | |
84 | 84 | // Get the timeout for this request. |
85 | - $request_timeout = isset( $timeout ) ? $timeout : $this->timeout; |
|
85 | + $request_timeout = isset($timeout) ? $timeout : $this->timeout; |
|
86 | 86 | |
87 | 87 | // Set the time limit if lesser than our request timeout. |
88 | - $max_execution_time = ini_get( 'max_execution_time' ); |
|
89 | - if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) |
|
90 | - && ( 0 !== intval( $max_execution_time ) ) |
|
91 | - && ( $max_execution_time < $request_timeout ) ) { |
|
88 | + $max_execution_time = ini_get('max_execution_time'); |
|
89 | + if ( ! (defined('WP_CLI') && WP_CLI) |
|
90 | + && (0 !== intval($max_execution_time)) |
|
91 | + && ($max_execution_time < $request_timeout)) { |
|
92 | 92 | // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged |
93 | - @set_time_limit( $request_timeout ); |
|
93 | + @set_time_limit($request_timeout); |
|
94 | 94 | } |
95 | 95 | |
96 | - $request_url = $this->base_url . $path; |
|
96 | + $request_url = $this->base_url.$path; |
|
97 | 97 | // Create the request args in the following order: |
98 | 98 | // 1. use `$args` as base if provided. |
99 | 99 | // 2. set the custom timeout if provided. |
@@ -107,7 +107,7 @@ discard block |
||
107 | 107 | $args + array( |
108 | 108 | 'method' => $method, |
109 | 109 | 'timeout' => $request_timeout, |
110 | - 'user-agent' => isset( $user_agent ) ? $user_agent : $this->user_agent, |
|
110 | + 'user-agent' => isset($user_agent) ? $user_agent : $this->user_agent, |
|
111 | 111 | 'headers' => $headers + $this->headers + Api_Headers_Service::get_instance()->get_wp_headers(), |
112 | 112 | 'body' => $body, |
113 | 113 | ) |
@@ -118,29 +118,29 @@ discard block |
||
118 | 118 | */ |
119 | 119 | $response = apply_filters( |
120 | 120 | 'wl_api_service__response', |
121 | - wp_remote_request( $request_url, $request_args ), |
|
121 | + wp_remote_request($request_url, $request_args), |
|
122 | 122 | $request_url, |
123 | 123 | $request_args |
124 | 124 | ); |
125 | 125 | |
126 | - if ( defined( 'WL_DEBUG' ) && WL_DEBUG ) { |
|
126 | + if (defined('WL_DEBUG') && WL_DEBUG) { |
|
127 | 127 | $this->log->trace( |
128 | 128 | "=== REQUEST ===========================\n" |
129 | 129 | . "=== URL: $request_url ===========================\n" |
130 | 130 | // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
131 | - . var_export( $request_args, true ) |
|
131 | + . var_export($request_args, true) |
|
132 | 132 | . "=== RESPONSE ===========================\n" |
133 | 133 | // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export |
134 | - . var_export( $response, true ) |
|
134 | + . var_export($response, true) |
|
135 | 135 | ); |
136 | 136 | } |
137 | 137 | |
138 | - return new Response( $response ); |
|
138 | + return new Response($response); |
|
139 | 139 | } |
140 | 140 | |
141 | - public function get( $path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array() ) { |
|
141 | + public function get($path, $headers = array(), $body = null, $timeout = null, $user_agent = null, $args = array()) { |
|
142 | 142 | |
143 | - return $this->request( 'GET', $path, $headers, $body, $timeout, $user_agent, $args ); |
|
143 | + return $this->request('GET', $path, $headers, $body, $timeout, $user_agent, $args); |
|
144 | 144 | } |
145 | 145 | |
146 | 146 | public function get_base_url() { |
@@ -152,7 +152,7 @@ discard block |
||
152 | 152 | * @throws Exception when an error occurs. |
153 | 153 | */ |
154 | 154 | public function me() { |
155 | - return json_decode( $this->get( '/me' )->get_body() ); |
|
155 | + return json_decode($this->get('/me')->get_body()); |
|
156 | 156 | } |
157 | 157 | |
158 | 158 | } |
@@ -4,50 +4,50 @@ discard block |
||
4 | 4 | |
5 | 5 | class Import_Videos_Page { |
6 | 6 | |
7 | - /** |
|
8 | - * Sync_Page constructor. |
|
9 | - */ |
|
10 | - public function __construct() { |
|
7 | + /** |
|
8 | + * Sync_Page constructor. |
|
9 | + */ |
|
10 | + public function __construct() { |
|
11 | 11 | |
12 | - add_action( 'admin_menu', array( $this, 'admin_menu' ) ); |
|
12 | + add_action( 'admin_menu', array( $this, 'admin_menu' ) ); |
|
13 | 13 | |
14 | - } |
|
14 | + } |
|
15 | 15 | |
16 | - public function admin_menu() { |
|
16 | + public function admin_menu() { |
|
17 | 17 | |
18 | - add_submenu_page( |
|
19 | - 'wl_admin_menu', |
|
20 | - __( 'Import all videos', 'wordlift' ), |
|
21 | - __( 'Import all videos', 'wordlift' ), |
|
22 | - 'manage_options', |
|
23 | - 'wl_videos_import', |
|
24 | - array( |
|
25 | - $this, |
|
26 | - 'render', |
|
27 | - ) |
|
28 | - ); |
|
18 | + add_submenu_page( |
|
19 | + 'wl_admin_menu', |
|
20 | + __( 'Import all videos', 'wordlift' ), |
|
21 | + __( 'Import all videos', 'wordlift' ), |
|
22 | + 'manage_options', |
|
23 | + 'wl_videos_import', |
|
24 | + array( |
|
25 | + $this, |
|
26 | + 'render', |
|
27 | + ) |
|
28 | + ); |
|
29 | 29 | |
30 | - } |
|
30 | + } |
|
31 | 31 | |
32 | - public function render() { |
|
32 | + public function render() { |
|
33 | 33 | |
34 | - wp_enqueue_script( |
|
35 | - 'wl-videos-sync-page', |
|
36 | - plugin_dir_url( __FILE__ ) . 'assets/videoobject-import-page.js', |
|
37 | - array( 'wp-api' ), |
|
38 | - WORDLIFT_VERSION, |
|
39 | - false |
|
40 | - ); |
|
41 | - wp_localize_script( |
|
42 | - 'wl-videos-sync-page', |
|
43 | - '_wlVideoObjectImportSettings', |
|
44 | - array( |
|
45 | - 'restUrl' => get_rest_url(), |
|
46 | - 'nonce' => wp_create_nonce( 'wp_rest' ), |
|
47 | - ) |
|
48 | - ) |
|
34 | + wp_enqueue_script( |
|
35 | + 'wl-videos-sync-page', |
|
36 | + plugin_dir_url( __FILE__ ) . 'assets/videoobject-import-page.js', |
|
37 | + array( 'wp-api' ), |
|
38 | + WORDLIFT_VERSION, |
|
39 | + false |
|
40 | + ); |
|
41 | + wp_localize_script( |
|
42 | + 'wl-videos-sync-page', |
|
43 | + '_wlVideoObjectImportSettings', |
|
44 | + array( |
|
45 | + 'restUrl' => get_rest_url(), |
|
46 | + 'nonce' => wp_create_nonce( 'wp_rest' ), |
|
47 | + ) |
|
48 | + ) |
|
49 | 49 | |
50 | - ?> |
|
50 | + ?> |
|
51 | 51 | <div class="wrap"> |
52 | 52 | <h2><?php esc_html_e( 'Import all videos', 'wordlift' ); ?></h2> |
53 | 53 | |
@@ -58,17 +58,17 @@ discard block |
||
58 | 58 | |
59 | 59 | <button id="wl-start-btn" type="button" class="button button-large button-primary"> |
60 | 60 | <?php |
61 | - esc_html_e( 'Start', 'wordlift' ); |
|
62 | - ?> |
|
61 | + esc_html_e( 'Start', 'wordlift' ); |
|
62 | + ?> |
|
63 | 63 | </button> |
64 | 64 | <button id="wl-stop-btn" type="button" class="button button-large button-primary hidden"> |
65 | 65 | <?php |
66 | - esc_html_e( 'Stop', 'wordlift' ); |
|
67 | - ?> |
|
66 | + esc_html_e( 'Stop', 'wordlift' ); |
|
67 | + ?> |
|
68 | 68 | </button> |
69 | 69 | |
70 | 70 | </div> |
71 | 71 | <?php |
72 | - } |
|
72 | + } |
|
73 | 73 | |
74 | 74 | } |
@@ -9,7 +9,7 @@ discard block |
||
9 | 9 | */ |
10 | 10 | public function __construct() { |
11 | 11 | |
12 | - add_action( 'admin_menu', array( $this, 'admin_menu' ) ); |
|
12 | + add_action('admin_menu', array($this, 'admin_menu')); |
|
13 | 13 | |
14 | 14 | } |
15 | 15 | |
@@ -17,8 +17,8 @@ discard block |
||
17 | 17 | |
18 | 18 | add_submenu_page( |
19 | 19 | 'wl_admin_menu', |
20 | - __( 'Import all videos', 'wordlift' ), |
|
21 | - __( 'Import all videos', 'wordlift' ), |
|
20 | + __('Import all videos', 'wordlift'), |
|
21 | + __('Import all videos', 'wordlift'), |
|
22 | 22 | 'manage_options', |
23 | 23 | 'wl_videos_import', |
24 | 24 | array( |
@@ -33,8 +33,8 @@ discard block |
||
33 | 33 | |
34 | 34 | wp_enqueue_script( |
35 | 35 | 'wl-videos-sync-page', |
36 | - plugin_dir_url( __FILE__ ) . 'assets/videoobject-import-page.js', |
|
37 | - array( 'wp-api' ), |
|
36 | + plugin_dir_url(__FILE__).'assets/videoobject-import-page.js', |
|
37 | + array('wp-api'), |
|
38 | 38 | WORDLIFT_VERSION, |
39 | 39 | false |
40 | 40 | ); |
@@ -43,13 +43,13 @@ discard block |
||
43 | 43 | '_wlVideoObjectImportSettings', |
44 | 44 | array( |
45 | 45 | 'restUrl' => get_rest_url(), |
46 | - 'nonce' => wp_create_nonce( 'wp_rest' ), |
|
46 | + 'nonce' => wp_create_nonce('wp_rest'), |
|
47 | 47 | ) |
48 | 48 | ) |
49 | 49 | |
50 | 50 | ?> |
51 | 51 | <div class="wrap"> |
52 | - <h2><?php esc_html_e( 'Import all videos', 'wordlift' ); ?></h2> |
|
52 | + <h2><?php esc_html_e('Import all videos', 'wordlift'); ?></h2> |
|
53 | 53 | |
54 | 54 | <div class="wl-task__progress" style="border: 1px solid #23282D; height: 20px; margin: 8px 0;"> |
55 | 55 | <div class="wl-task__progress__bar" |
@@ -58,12 +58,12 @@ discard block |
||
58 | 58 | |
59 | 59 | <button id="wl-start-btn" type="button" class="button button-large button-primary"> |
60 | 60 | <?php |
61 | - esc_html_e( 'Start', 'wordlift' ); |
|
61 | + esc_html_e('Start', 'wordlift'); |
|
62 | 62 | ?> |
63 | 63 | </button> |
64 | 64 | <button id="wl-stop-btn" type="button" class="button button-large button-primary hidden"> |
65 | 65 | <?php |
66 | - esc_html_e( 'Stop', 'wordlift' ); |
|
66 | + esc_html_e('Stop', 'wordlift'); |
|
67 | 67 | ?> |
68 | 68 | </button> |
69 | 69 |
@@ -8,31 +8,31 @@ |
||
8 | 8 | */ |
9 | 9 | class Parser_Factory { |
10 | 10 | |
11 | - const BLOCK_EDITOR = 'block-editor'; |
|
12 | - |
|
13 | - const CLASSIC_EDITOR = 'classic-editor'; |
|
14 | - |
|
15 | - /** |
|
16 | - * @param $parser_config |
|
17 | - * |
|
18 | - * @return Parser |
|
19 | - */ |
|
20 | - public static function get_parser( $parser_config ) { |
|
21 | - if ( self::BLOCK_EDITOR === $parser_config ) { |
|
22 | - return new Block_Editor_Parser(); |
|
23 | - } elseif ( self::CLASSIC_EDITOR === $parser_config ) { |
|
24 | - return new Classic_Editor_Parser(); |
|
25 | - } |
|
26 | - |
|
27 | - } |
|
28 | - |
|
29 | - public static function get_parser_from_content( $post_content ) { |
|
30 | - if ( function_exists( 'has_blocks' ) |
|
31 | - && function_exists( 'parse_blocks' ) && has_blocks( $post_content ) ) { |
|
32 | - return self::get_parser( self::BLOCK_EDITOR ); |
|
33 | - } else { |
|
34 | - return self::get_parser( self::CLASSIC_EDITOR ); |
|
35 | - } |
|
36 | - } |
|
11 | + const BLOCK_EDITOR = 'block-editor'; |
|
12 | + |
|
13 | + const CLASSIC_EDITOR = 'classic-editor'; |
|
14 | + |
|
15 | + /** |
|
16 | + * @param $parser_config |
|
17 | + * |
|
18 | + * @return Parser |
|
19 | + */ |
|
20 | + public static function get_parser( $parser_config ) { |
|
21 | + if ( self::BLOCK_EDITOR === $parser_config ) { |
|
22 | + return new Block_Editor_Parser(); |
|
23 | + } elseif ( self::CLASSIC_EDITOR === $parser_config ) { |
|
24 | + return new Classic_Editor_Parser(); |
|
25 | + } |
|
26 | + |
|
27 | + } |
|
28 | + |
|
29 | + public static function get_parser_from_content( $post_content ) { |
|
30 | + if ( function_exists( 'has_blocks' ) |
|
31 | + && function_exists( 'parse_blocks' ) && has_blocks( $post_content ) ) { |
|
32 | + return self::get_parser( self::BLOCK_EDITOR ); |
|
33 | + } else { |
|
34 | + return self::get_parser( self::CLASSIC_EDITOR ); |
|
35 | + } |
|
36 | + } |
|
37 | 37 | |
38 | 38 | } |
@@ -17,21 +17,21 @@ |
||
17 | 17 | * |
18 | 18 | * @return Parser |
19 | 19 | */ |
20 | - public static function get_parser( $parser_config ) { |
|
21 | - if ( self::BLOCK_EDITOR === $parser_config ) { |
|
20 | + public static function get_parser($parser_config) { |
|
21 | + if (self::BLOCK_EDITOR === $parser_config) { |
|
22 | 22 | return new Block_Editor_Parser(); |
23 | - } elseif ( self::CLASSIC_EDITOR === $parser_config ) { |
|
23 | + } elseif (self::CLASSIC_EDITOR === $parser_config) { |
|
24 | 24 | return new Classic_Editor_Parser(); |
25 | 25 | } |
26 | 26 | |
27 | 27 | } |
28 | 28 | |
29 | - public static function get_parser_from_content( $post_content ) { |
|
30 | - if ( function_exists( 'has_blocks' ) |
|
31 | - && function_exists( 'parse_blocks' ) && has_blocks( $post_content ) ) { |
|
32 | - return self::get_parser( self::BLOCK_EDITOR ); |
|
29 | + public static function get_parser_from_content($post_content) { |
|
30 | + if (function_exists('has_blocks') |
|
31 | + && function_exists('parse_blocks') && has_blocks($post_content)) { |
|
32 | + return self::get_parser(self::BLOCK_EDITOR); |
|
33 | 33 | } else { |
34 | - return self::get_parser( self::CLASSIC_EDITOR ); |
|
34 | + return self::get_parser(self::CLASSIC_EDITOR); |
|
35 | 35 | } |
36 | 36 | } |
37 | 37 |