PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.3-beta
16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 All 507 releases
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / rest-api / class-social-image-generator-controller.php

class-social-image-generator-controller.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-beta, at jetpack_vendor/automattic/jetpack-publicize/src/rest-api/class-social-image-generator-controller.php

196 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Publicize: Social Image Generator Controller
4 *
5 * @package automattic/jetpack-publicize
6 */
7
8 namespace Automattic\Jetpack\Publicize\REST_API;
9
10 use Automattic\Jetpack\Connection\Traits\WPCOM_REST_API_Proxy_Request;
11 use Automattic\Jetpack\Publicize\Publicize_Utils as Utils;
12 use Automattic\Jetpack\Publicize\Social_Image_Generator as SIG;
13 use Automattic\Jetpack\Publicize\Social_Image_Generator\Templates;
14 use WP_Error;
15 use WP_REST_Request;
16 use WP_REST_Response;
17 use WP_REST_Server;
18
19 if ( ! defined( 'ABSPATH' ) ) {
20 exit( 0 );
21 }
22
23 /**
24 * Publicize: Social Image Generator Controller class.
25 *
26 * @phan-constructor-used-for-side-effects
27 */
28 class Social_Image_Generator_Controller extends Base_Controller {
29
30 use WPCOM_REST_API_Proxy_Request;
31
32 /**
33 * The constructor sets the route namespace, rest_base, and registers our API route and endpoint.
34 */
35 public function __construct() {
36 parent::__construct();
37
38 $this->base_api_path = 'wpcom';
39 $this->version = 'v2';
40
41 $this->namespace = "{$this->base_api_path}/{$this->version}";
42 $this->rest_base = 'publicize/social-image-generator';
43
44 $this->allow_requests_as_blog = true;
45
46 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
47 }
48
49 /**
50 * Register the routes.
51 */
52 public function register_routes() {
53 register_rest_route(
54 $this->namespace,
55 '/' . $this->rest_base . '/generate-token',
56 array(
57 'methods' => WP_REST_Server::CREATABLE,
58 'callback' => array( $this, 'generate_preview_token' ),
59 'permission_callback' => array( $this, 'permissions_check' ),
60 'private_site_security_settings' => array(
61 'allow_blog_token_access' => true,
62 ),
63 'args' => array(
64 'text' => array(
65 'description' => __( 'The text to be used to generate the image.', 'jetpack-publicize-pkg' ),
66 'type' => 'string',
67 'required' => true,
68 ),
69 'image_url' => array(
70 'description' => __( 'The URL of the background image to use when generating the social image.', 'jetpack-publicize-pkg' ),
71 'oneOf' => array(
72 array(
73 'type' => 'string',
74 ),
75 array(
76 'type' => 'null',
77 ),
78 ),
79 ),
80 'template' => array(
81 'description' => __( 'The template slug.', 'jetpack-publicize-pkg' ),
82 'type' => 'string',
83 'enum' => Templates::TEMPLATES,
84 ),
85 'font' => array(
86 'description' => __( 'The font slug.', 'jetpack-publicize-pkg' ),
87 'type' => 'string',
88 ),
89 ),
90 'schema' => array(
91 '$schema' => 'http://json-schema.org/draft-04/schema#',
92 'title' => 'publicize-sig-generate-token',
93 'type' => 'string',
94 ),
95 )
96 );
97
98 register_rest_route(
99 $this->namespace,
100 '/' . $this->rest_base . '/font-options',
101 array(
102 'methods' => WP_REST_Server::READABLE,
103 'callback' => array( $this, 'get_font_options' ),
104 'permission_callback' => array( $this, 'permissions_check' ),
105 'schema' => array(
106 '$schema' => 'http://json-schema.org/draft-04/schema#',
107 'title' => 'publicize-sig-font-options',
108 'type' => 'array',
109 'items' => array(
110 'type' => 'object',
111 'properties' => array(
112 'id' => array(
113 'type' => 'string',
114 'description' => __( 'Unique identifier for the font.', 'jetpack-publicize-pkg' ),
115 ),
116 'label' => array(
117 'type' => 'string',
118 'description' => __( 'The font label.', 'jetpack-publicize-pkg' ),
119 ),
120 ),
121 ),
122 ),
123 )
124 );
125 }
126
127 /**
128 * Ensure the user has proper permissions.
129 *
130 * @return boolean|WP_Error True if the user has permissions, WP_Error otherwise.
131 */
132 public function permissions_check() {
133 $permissions = $this->publicize_permissions_check();
134
135 if ( is_wp_error( $permissions ) ) {
136 return $permissions;
137 }
138
139 // On WPCOM, need to check for the feature.
140 if ( Utils::is_wpcom() ) {
141 require_lib( 'publicize/util/social-image-generator' );
142
143 return \Publicize\Social_Image_Generator\is_enabled();
144 }
145
146 return true;
147 }
148
149 /**
150 * Passes the request parameters to the WPCOM endpoint to generate a preview image token.
151 *
152 * @param WP_REST_Request $request The request object, which includes the parameters.
153 * @return WP_REST_Response The response.
154 */
155 public function generate_preview_token( $request ) {
156 return rest_ensure_response(
157 SIG\fetch_token(
158 $request->get_param( 'text' ),
159 $request->get_param( 'image_url' ),
160 $request->get_param( 'template' ),
161 $request->get_param( 'font' )
162 )
163 );
164 }
165
166 /**
167 * Returns the available font options for the social image generator.
168 *
169 * @param WP_REST_Request $request The request object, which includes the parameters.
170 *
171 * @return WP_REST_Response The response containing the font options.
172 */
173 public function get_font_options( $request ) {
174 if ( Utils::is_wpcom() ) {
175 require_lib( 'publicize/util/social-image-generator' );
176
177 $fonts = \Publicize\Social_Image_Generator\get_font_options();
178
179 $font_options = array();
180
181 foreach ( $fonts as $id => [ 'label' => $label ] ) {
182 $font_options[] = compact( 'id', 'label' );
183 }
184
185 return rest_ensure_response( $font_options );
186 }
187
188 $response = $this->proxy_request_to_wpcom_as_blog(
189 $request,
190 'font-options'
191 );
192
193 return rest_ensure_response( $response );
194 }
195 }
196