PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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-forms / src / class-jetpack-forms.php
jetpack / jetpack_vendor / automattic / jetpack-forms / src Last commit date
abilities 2 months ago blocks 1 month ago contact-form 3 weeks ago dashboard 3 weeks ago form-editor 3 months ago modules 2 months ago service 2 months ago store 3 months ago util 3 months ago class-jetpack-forms.php 3 weeks ago
class-jetpack-forms.php
251 lines
1 <?php
2 /**
3 * Package description here
4 *
5 * @package automattic/jetpack-forms
6 */
7
8 namespace Automattic\Jetpack\Forms;
9
10 use Automattic\Jetpack\Forms\ContactForm\Feedback_Source;
11 use Automattic\Jetpack\Forms\ContactForm\Util;
12 use Automattic\Jetpack\Forms\Dashboard\Dashboard;
13 /**
14 * Understands the Jetpack Forms package.
15 */
16 class Jetpack_Forms {
17
18 const PACKAGE_VERSION = '7.23.4';
19
20 /**
21 * Load the contact form module.
22 */
23 public static function load_contact_form() {
24 Util::init();
25
26 if ( self::is_feedback_dashboard_enabled() ) {
27 $dashboard = new Dashboard();
28 $dashboard->init();
29 }
30
31 if ( is_admin() && apply_filters_deprecated( 'tmp_grunion_allow_editor_view', array( true ), '0.30.5', '', 'This functionality will be removed in an upcoming version.' ) ) {
32 add_action( 'current_screen', '\Automattic\Jetpack\Forms\ContactForm\Editor_View::add_hooks' );
33 }
34
35 add_action( 'init', '\Automattic\Jetpack\Forms\ContactForm\Util::register_pattern' );
36
37 // Add hook to delete file attachments when a feedback post is deleted
38 add_action( 'before_delete_post', array( '\Automattic\Jetpack\Forms\ContactForm\Contact_Form', 'delete_feedback_files' ) );
39
40 // Invalidate the source post IDs cache when a feedback post is permanently deleted.
41 add_action( 'deleted_post', array( '\Automattic\Jetpack\Forms\ContactForm\Feedback', 'invalidate_source_ids_cache_on_delete' ), 10, 2 );
42
43 // Enforces the availability of block support controls in the UI for classic themes.
44 add_filter( 'wp_theme_json_data_default', array( '\Automattic\Jetpack\Forms\ContactForm\Contact_Form', 'add_theme_json_data_for_classic_themes' ) );
45
46 // Initialize abilities registration for WordPress Abilities API (WP 6.9+)
47 \Automattic\Jetpack\Forms\Abilities\Forms_Abilities::init();
48 }
49
50 /**
51 * Get the plugin URL.
52 */
53 public static function plugin_url() {
54 return plugin_dir_url( __FILE__ );
55 }
56
57 /**
58 * Get the assets URL.
59 */
60 public static function assets_url() {
61 return plugin_dir_url( __DIR__ ) . 'assets';
62 }
63
64 /**
65 * Returns true if the feedback dashboard is enabled.
66 *
67 * @return boolean
68 */
69 public static function is_feedback_dashboard_enabled() {
70 /**
71 * Enable the new Jetpack Forms dashboard.
72 *
73 * @module contact-form
74 * @since 0.3.0
75 *
76 * @param bool false Should the new Jetpack Forms dashboard be enabled? Default to false.
77 */
78 return apply_filters( 'jetpack_forms_dashboard_enable', true );
79 }
80
81 /**
82 * Returns true if the legacy menu item is retired.
83 *
84 * @return boolean
85 */
86 public static function is_legacy_menu_item_retired() {
87 return apply_filters( 'jetpack_forms_retire_legacy_menu_item', true );
88 }
89
90 /**
91 * Returns true if MailPoet integration is enabled.
92 *
93 * @return boolean
94 */
95 public static function is_mailpoet_enabled() {
96 /**
97 * Enable MailPoet integration.
98 *
99 * @param bool false Whether MailPoet integration be enabled. Default is false.
100 */
101 return apply_filters( 'jetpack_forms_mailpoet_enable', true );
102 }
103
104 /**
105 * Returns true if Hostinger Reach integration is enabled.
106 *
107 * @return boolean
108 */
109 public static function is_hostinger_reach_enabled() {
110 /**
111 * Enable Hostinger Reach integration.
112 *
113 * @param bool false Whether Hostinger Reach integration be enabled. Default is false.
114 */
115 return apply_filters( 'jetpack_forms_hostinger_reach_enable', false );
116 }
117
118 /**
119 * Returns true if the Integrations UI should be enabled.
120 *
121 * @return boolean
122 */
123 public static function is_integrations_enabled() {
124 /**
125 * Whether to enable the Integrations UI.
126 *
127 * @param bool true Whether to enable the Integrations UI. Default true.
128 */
129 return apply_filters( 'jetpack_forms_is_integrations_enabled', true );
130 }
131
132 /**
133 * Returns true if webhooks are enabled.
134 *
135 * @return boolean
136 */
137 public static function is_webhooks_enabled() {
138 /**
139 * Whether to enable webhooks for Jetpack Forms.
140 *
141 * @param bool true Whether webhooks should be enabled. Default true.
142 */
143 return apply_filters( 'jetpack_forms_webhooks_enabled', true );
144 }
145
146 /**
147 * Whether author-configured outbound destinations from a form source should be honored.
148 *
149 * Destinations declared in the form content (webhooks, the legacy postToUrl attribute and
150 * the Salesforce integration) carry submission data to an outbound URL, so they are only
151 * honored when whoever placed the form had an administrator-level capability:
152 *
153 * - For post/page forms (`single`, numeric source id) the source post's author must have
154 * the `manage_options` capability. Editor/Author/Contributor-authored forms are dropped.
155 * - For block templates, block template parts and widgets the source id is not a numeric
156 * post, so there is no author to check. Editing any of those surfaces already requires
157 * the `edit_theme_options` capability — administrator-tier, strictly above the
158 * capabilities an Editor/Author/Contributor holds — so their destinations are trusted.
159 *
160 * The source type is established server-side (from the signed JWT, or by re-rendering the
161 * real template/template part on the legacy path) and is not forgeable by the submitter.
162 *
163 * Returns false for any other unresolved source (non-numeric id of an unknown type, or a
164 * numeric id with no admin-capable author).
165 *
166 * @param int|string $source_id The form source id: a post id for post/page forms, or a
167 * non-numeric value for widget or block-template sources.
168 * @param string $source_type The form source type: single, widget, block_template or
169 * block_template_part. Defaults to 'single'.
170 * @return boolean
171 */
172 public static function should_honor_content_destinations( $source_id, $source_type = 'single' ) {
173 // Block templates, template parts and widgets can only be authored by users with the
174 // administrator-tier `edit_theme_options` capability, so their destinations are trusted
175 // even though the source id is not a numeric post.
176 if ( in_array( $source_type, Feedback_Source::ADMIN_TIER_SOURCE_TYPES, true ) ) {
177 return true;
178 }
179
180 if ( ! is_numeric( $source_id ) ) {
181 return false;
182 }
183
184 $source_id = (int) $source_id;
185 if ( $source_id <= 0 ) {
186 return false;
187 }
188
189 $author_id = (int) get_post_field( 'post_author', $source_id );
190
191 return $author_id > 0 && user_can( $author_id, 'manage_options' );
192 }
193
194 /**
195 * Returns true if the Integrations UI should be shown in the Forms dashboard.
196 *
197 * @since 6.22.0
198 *
199 * @return boolean
200 */
201 public static function show_dashboard_integrations() {
202 /**
203 * Whether to show Integrations UI in the Forms dashboard.
204 *
205 * @since 6.22.0
206 *
207 * @param bool true Whether to show the Integrations UI in the dashboard. Default true.
208 */
209 return apply_filters( 'jetpack_forms_show_dashboard_integrations', true );
210 }
211
212 /**
213 * Returns true if the Integrations UI should be shown in the Form block editor.
214 *
215 * @since 6.22.0
216 *
217 * @return boolean
218 */
219 public static function show_block_integrations() {
220 /**
221 * Whether to show Integrations UI in the Form block editor.
222 *
223 * @since 6.22.0
224 *
225 * @param bool true Whether to show the Integrations UI in the editor. Default true.
226 */
227 return apply_filters( 'jetpack_forms_show_block_integrations', true );
228 }
229
230 /**
231 * Returns true if integration icons should be shown (editor sidebar and integrations modal).
232 *
233 * @since 6.22.0
234 *
235 * @return boolean
236 */
237 public static function show_integration_icons() {
238 /**
239 * Whether to show integration icons in the UI.
240 *
241 * If set to false, the ActiveIntegrations component (editor sidebar) will be hidden
242 * and integration icons in the integrations modal will not be rendered.
243 *
244 * @since 6.22.0
245 *
246 * @param bool true Whether to show integration icons. Default true.
247 */
248 return apply_filters( 'jetpack_forms_show_integration_icons', true );
249 }
250 }
251