PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.33
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.33
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / controllers / FrmApplicationsController.php

FrmApplicationsController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.33, at classes/controllers/FrmApplicationsController.php

234 lines 6.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * @since 5.3
8 */
9 class FrmApplicationsController {
10
11 /**
12 * Add Applications menu item to sidebar and define Applications index page.
13 *
14 * @return void
15 */
16 public static function menu() {
17 $label = __( 'Applications', 'formidable' );
18 $cap = self::get_required_capability();
19
20 if ( ! current_user_can( $cap ) && is_callable( 'FrmProApplicationsHelper::get_custom_applications_capability' ) ) {
21 $custom_applications_cap = FrmProApplicationsHelper::get_custom_applications_capability();
22
23 if ( current_user_can( $custom_applications_cap ) ) {
24 $cap = $custom_applications_cap;
25 $slug = 'edit-tags.php?taxonomy=frm_application';
26 $callback = '';
27 }
28 }
29
30 if ( ! isset( $slug ) ) {
31 $slug = 'formidable-applications';
32 $callback = array( self::class, 'landing_page' );
33 }
34
35 add_submenu_page( 'formidable', 'Formidable | ' . $label, $label, $cap, $slug, $callback );
36 }
37
38 /**
39 * Get the required capability for accessing the Applications dashboard.
40 *
41 * @since 5.3.1
42 *
43 * @return string
44 */
45 private static function get_required_capability() {
46 if ( is_callable( 'FrmProApplicationsHelper::get_required_templates_capability' ) ) {
47 return FrmProApplicationsHelper::get_required_templates_capability();
48 }
49 return 'frm_edit_forms';
50 }
51
52 /**
53 * Render Applications index page.
54 *
55 * @return void
56 */
57 public static function landing_page() {
58 require self::get_view_path() . 'index.php';
59 }
60
61 /**
62 * Get path to application views.
63 *
64 * @return string
65 */
66 private static function get_view_path() {
67 return FrmAppHelper::plugin_path() . '/classes/views/applications/';
68 }
69
70 /**
71 * Get information about applications via AJAX action.
72 *
73 * @return void
74 */
75 public static function get_applications_data() {
76 FrmAppHelper::permission_check( 'frm_view_forms' );
77 check_ajax_referer( 'frm_ajax', 'nonce' );
78
79 $view = FrmAppHelper::get_param( 'view', '', 'get', 'sanitize_text_field' );
80 $data = array();
81
82 if ( 'applications' === $view ) {
83 FrmAppHelper::permission_check( 'frm_edit_applications' );
84 } else {
85 FrmAppHelper::permission_check( self::get_required_capability() );
86
87 // View may be 'applications', 'templates', or empty.
88 $data['templates'] = self::get_prepared_template_data();
89 $data['categories'] = FrmApplicationTemplate::get_categories();
90 }
91
92 /**
93 * @param array $data
94 */
95 $data = apply_filters( 'frm_applications_data', $data );
96
97 wp_send_json_success( $data );
98 }
99
100 /**
101 * Retrieve API data and return a reduced set back with some restructuring applied to make it easier to read.
102 *
103 * @return array<array>
104 */
105 private static function get_prepared_template_data() {
106 $api = new FrmApplicationApi();
107 $applications = $api->get_api_info();
108 $applications = array_filter( $applications, 'is_array' );
109 $unlocked_templates = array();
110 $locked_templates = array();
111
112 foreach ( $applications as $key => $application ) {
113 if ( ! is_numeric( $key ) ) {
114 // Skip "error" or any other non-numeric key.
115 continue;
116 }
117
118 if ( ! empty( $application['url'] ) ) {
119 $unlocked_templates[] = $application;
120 } else {
121 $locked_templates[] = $application;
122 }
123 }
124
125 $unlocked_templates = self::sort_templates( $unlocked_templates );
126 $applications = $unlocked_templates;
127
128 if ( current_user_can( 'administrator' ) || current_user_can( 'frm_change_settings' ) ) {
129 $locked_templates = self::sort_templates( $locked_templates );
130 $applications = array_merge( $applications, $locked_templates );
131 }
132
133 FrmApplicationTemplate::init();
134
135 return array_reduce( $applications, array( self::class, 'reduce_template' ), array() );
136 }
137
138 /**
139 * @param array $total the accumulated array of reduced application data.
140 * @param array $current data for the current template from the API.
141 *
142 * @return array<array>
143 */
144 private static function reduce_template( $total, $current ) {
145 $template = new FrmApplicationTemplate( $current );
146 $js_object = $template->as_js_object();
147
148 if ( $js_object ) {
149 $total[] = $js_object;
150 }
151
152 return $total;
153 }
154
155 /**
156 * Sort applications alphabetically.
157 *
158 * @param array<array> $applications
159 *
160 * @return array<array>
161 */
162 private static function sort_templates( $applications ) {
163 usort(
164 $applications,
165 function ( $a, $b ) {
166 return strcmp( $a['name'], $b['name'] );
167 }
168 );
169 return $applications;
170 }
171
172 /**
173 * @usedby FrmAppController::admin_init().
174 *
175 * @since 6.8
176 *
177 * @return void
178 */
179 public static function load_page() {
180 self::load_assets();
181 }
182
183 /**
184 * @return void
185 */
186 public static function load_assets() {
187 $plugin_url = FrmAppHelper::plugin_url();
188 $version = FrmAppHelper::plugin_version();
189
190 wp_enqueue_style( 'formidable-admin' );
191 wp_enqueue_style( 'formidable-grids' );
192
193 $js_dependencies = array(
194 'wp-i18n',
195 // This prevents a console error "wp.hooks is undefined" in WP versions older than 5.7.
196 'wp-hooks',
197 'formidable_dom',
198 );
199 wp_register_script( 'formidable_applications', $plugin_url . '/js/admin/applications.js', $js_dependencies, $version, true );
200 wp_register_style( 'formidable_applications', $plugin_url . '/css/admin/applications.css', array(), $version );
201
202 $js_vars = array(
203 'proUpgradeUrl' => FrmAppHelper::admin_upgrade_link( 'applications' ),
204 );
205 wp_localize_script( 'formidable_applications', 'frmApplicationsVars', $js_vars );
206
207 wp_enqueue_script( 'formidable_applications' );
208 wp_set_script_translations( 'formidable_applications', 'formidable' );
209 wp_enqueue_style( 'formidable_applications' );
210
211 do_action( 'frm_applications_assets' );
212 }
213
214 /**
215 * @return void
216 */
217 public static function dequeue_scripts() {
218 if ( 'formidable-applications' === FrmAppHelper::simple_get( 'page', 'sanitize_title' ) ) {
219 FrmAppHelper::dequeue_extra_global_scripts();
220 }
221 }
222
223 /**
224 * @param string $title
225 * @param string $context values include 'index', 'list', and 'edit'.
226 *
227 * @return void
228 */
229 public static function render_applications_header( $title, $context ) {
230 FrmAppHelper::print_admin_banner( true );
231 require self::get_view_path() . 'header.php';
232 }
233 }
234