PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.2
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.2
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / rest-api / class-social-image-generator-controller.php
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / rest-api Last commit date
class-base-controller.php 9 months ago class-connections-controller.php 3 weeks ago class-connections-post-field.php 1 month ago class-keyring-result-controller.php 2 months ago class-message-templates-placeholders-controller.php 3 months ago class-proxy-requests.php 9 months ago class-render-messages-controller.php 1 month ago class-scheduled-actions-controller.php 9 months ago class-services-controller.php 3 weeks ago class-share-post-controller.php 9 months ago class-share-status-controller.php 9 months ago class-social-image-generator-controller.php 9 months ago
class-social-image-generator-controller.php
196 lines
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