| @@ -13,14 +13,14 @@ | ||
| 13 | 13 | * |
| 14 | 14 | * @return void |
| 15 | 15 | */ |
| 16 | 16 | public static function menu() { |
| 17 | - $label = __( 'Applications', 'formidable' ); | |
| 18 | - $cap = self::get_required_capability(); | |
| 17 | + $label = __( 'Applications', 'formidable' ); | |
| 18 | + $new_pill = '<span class="frm-new-pill">NEW</span>'; | |
| 19 | + $cap = self::get_required_capability(); | |
| 19 | 20 | |
| 20 | 21 | if ( ! current_user_can( $cap ) && is_callable( 'FrmProApplicationsHelper::get_custom_applications_capability' ) ) { |
| 21 | 22 | $custom_applications_cap = FrmProApplicationsHelper::get_custom_applications_capability(); |
| 22 | - | |
| 23 | 23 | if ( current_user_can( $custom_applications_cap ) ) { |
| 24 | 24 | $cap = $custom_applications_cap; |
| 25 | 25 | $slug = 'edit-tags.php?taxonomy=frm_application'; |
| 26 | 26 | $callback = ''; |
| @@ -28,12 +28,12 @@ | ||
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | if ( ! isset( $slug ) ) { |
| 31 | 31 | $slug = 'formidable-applications'; |
| 32 | - $callback = array( self::class, 'landing_page' ); | |
| 32 | + $callback = array( __CLASS__, 'landing_page' ); | |
| 33 | 33 | } |
| 34 | 34 | |
| 35 | - add_submenu_page( 'formidable', 'Formidable | ' . $label, $label, $cap, $slug, $callback ); | |
| 35 | + add_submenu_page( 'formidable', 'Formidable | ' . $label, $label . $new_pill, $cap, $slug, $callback ); | |
| 36 | 36 | } |
| 37 | 37 | |
| 38 | 38 | /** |
| 39 | 39 | * Get the required capability for accessing the Applications dashboard. |
| @@ -72,22 +72,19 @@ | ||
| 72 | 72 | * |
| 73 | 73 | * @return void |
| 74 | 74 | */ |
| 75 | 75 | public static function get_applications_data() { |
| 76 | - FrmAppHelper::permission_check( 'frm_view_forms' ); | |
| 77 | - check_ajax_referer( 'frm_ajax', 'nonce' ); | |
| 78 | - | |
| 79 | 76 | $view = FrmAppHelper::get_param( 'view', '', 'get', 'sanitize_text_field' ); |
| 80 | 77 | $data = array(); |
| 81 | 78 | |
| 82 | - if ( 'applications' === $view ) { | |
| 83 | - FrmAppHelper::permission_check( 'frm_edit_applications' ); | |
| 84 | - } else { | |
| 79 | + if ( 'applications' !== $view ) { | |
| 85 | 80 | FrmAppHelper::permission_check( self::get_required_capability() ); |
| 86 | 81 | |
| 87 | - // View may be 'applications', 'templates', or empty. | |
| 82 | + // view may be 'applications', 'templates', or empty. | |
| 88 | 83 | $data['templates'] = self::get_prepared_template_data(); |
| 89 | 84 | $data['categories'] = FrmApplicationTemplate::get_categories(); |
| 85 | + } else { | |
| 86 | + FrmAppHelper::permission_check( 'frm_edit_applications' ); | |
| 90 | 87 | } |
| 91 | 88 | |
| 92 | 89 | /** |
| 93 | 90 | * @param array $data |
| @@ -102,20 +99,15 @@ | ||
| 102 | 99 | * |
| 103 | 100 | * @return array<array> |
| 104 | 101 | */ |
| 105 | 102 | private static function get_prepared_template_data() { |
| 106 | - $api = new FrmApplicationApi(); | |
| 107 | - $applications = $api->get_api_info(); | |
| 108 | - $applications = array_filter( $applications, 'is_array' ); | |
| 103 | + $api = new FrmApplicationApi(); | |
| 104 | + $applications = $api->get_api_info(); | |
| 105 | + $applications = array_filter( $applications, 'is_array' ); | |
| 106 | + | |
| 109 | 107 | $unlocked_templates = array(); |
| 110 | 108 | $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 | - | |
| 109 | + foreach ( $applications as $application ) { | |
| 118 | 110 | if ( ! empty( $application['url'] ) ) { |
| 119 | 111 | $unlocked_templates[] = $application; |
| 120 | 112 | } else { |
| 121 | 113 | $locked_templates[] = $application; |
| @@ -122,10 +114,10 @@ | ||
| 122 | 114 | } |
| 123 | 115 | } |
| 124 | 116 | |
| 125 | 117 | $unlocked_templates = self::sort_templates( $unlocked_templates ); |
| 126 | - $applications = $unlocked_templates; | |
| 127 | 118 | |
| 119 | + $applications = $unlocked_templates; | |
| 128 | 120 | if ( current_user_can( 'administrator' ) || current_user_can( 'frm_change_settings' ) ) { |
| 129 | 121 | $locked_templates = self::sort_templates( $locked_templates ); |
| 130 | 122 | $applications = array_merge( $applications, $locked_templates ); |
| 131 | 123 | } |
| @@ -131,25 +123,19 @@ | ||
| 131 | 123 | } |
| 132 | 124 | |
| 133 | 125 | FrmApplicationTemplate::init(); |
| 134 | 126 | |
| 135 | - return array_reduce( $applications, array( self::class, 'reduce_template' ), array() ); | |
| 127 | + return array_reduce( $applications, array( __CLASS__, 'reduce_template' ), array() ); | |
| 136 | 128 | } |
| 137 | 129 | |
| 138 | 130 | /** |
| 139 | 131 | * @param array $total the accumulated array of reduced application data. |
| 140 | 132 | * @param array $current data for the current template from the API. |
| 141 | - * | |
| 142 | 133 | * @return array<array> |
| 143 | 134 | */ |
| 144 | 135 | 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 | - | |
| 136 | + $template = new FrmApplicationTemplate( $current ); | |
| 137 | + $total[] = $template->as_js_object(); | |
| 152 | 138 | return $total; |
| 153 | 139 | } |
| 154 | 140 | |
| 155 | 141 | /** |
| @@ -155,15 +141,14 @@ | ||
| 155 | 141 | /** |
| 156 | 142 | * Sort applications alphabetically. |
| 157 | 143 | * |
| 158 | 144 | * @param array<array> $applications |
| 159 | - * | |
| 160 | 145 | * @return array<array> |
| 161 | 146 | */ |
| 162 | 147 | private static function sort_templates( $applications ) { |
| 163 | 148 | usort( |
| 164 | 149 | $applications, |
| 165 | - function ( $a, $b ) { | |
| 150 | + function( $a, $b ) { | |
| 166 | 151 | return strcmp( $a['name'], $b['name'] ); |
| 167 | 152 | } |
| 168 | 153 | ); |
| 169 | 154 | return $applications; |
| @@ -169,21 +154,10 @@ | ||
| 169 | 154 | return $applications; |
| 170 | 155 | } |
| 171 | 156 | |
| 172 | 157 | /** |
| 173 | - * @usedby FrmAppController::admin_init(). | |
| 174 | - * | |
| 175 | - * @since 6.8 | |
| 176 | - * | |
| 177 | 158 | * @return void |
| 178 | 159 | */ |
| 179 | - public static function load_page() { | |
| 180 | - self::load_assets(); | |
| 181 | - } | |
| 182 | - | |
| 183 | - /** | |
| 184 | - * @return void | |
| 185 | - */ | |
| 186 | 160 | public static function load_assets() { |
| 187 | 161 | $plugin_url = FrmAppHelper::plugin_url(); |
| 188 | 162 | $version = FrmAppHelper::plugin_version(); |
| 189 | 163 | |
| @@ -191,10 +165,8 @@ | ||
| 191 | 165 | wp_enqueue_style( 'formidable-grids' ); |
| 192 | 166 | |
| 193 | 167 | $js_dependencies = array( |
| 194 | 168 | 'wp-i18n', |
| 195 | - // This prevents a console error "wp.hooks is undefined" in WP versions older than 5.7. | |
| 196 | - 'wp-hooks', | |
| 197 | 169 | 'formidable_dom', |
| 198 | 170 | ); |
| 199 | 171 | wp_register_script( 'formidable_applications', $plugin_url . '/js/admin/applications.js', $js_dependencies, $version, true ); |
| 200 | 172 | wp_register_style( 'formidable_applications', $plugin_url . '/css/admin/applications.css', array(), $version ); |
| @@ -204,9 +176,8 @@ | ||
| 204 | 176 | ); |
| 205 | 177 | wp_localize_script( 'formidable_applications', 'frmApplicationsVars', $js_vars ); |
| 206 | 178 | |
| 207 | 179 | wp_enqueue_script( 'formidable_applications' ); |
| 208 | - wp_set_script_translations( 'formidable_applications', 'formidable' ); | |
| 209 | 180 | wp_enqueue_style( 'formidable_applications' ); |
| 210 | 181 | |
| 211 | 182 | do_action( 'frm_applications_assets' ); |
| 212 | 183 | } |
| @@ -215,9 +186,11 @@ | ||
| 215 | 186 | * @return void |
| 216 | 187 | */ |
| 217 | 188 | public static function dequeue_scripts() { |
| 218 | 189 | if ( 'formidable-applications' === FrmAppHelper::simple_get( 'page', 'sanitize_title' ) ) { |
| 219 | - FrmAppHelper::dequeue_extra_global_scripts(); | |
| 190 | + // Avoid extra scripts loading on applications index that aren't needed. | |
| 191 | + wp_dequeue_script( 'frm-surveys-admin' ); | |
| 192 | + wp_dequeue_script( 'frm-quizzes-form-action' ); | |
| 220 | 193 | } |
| 221 | 194 | } |
| 222 | 195 | |
| 223 | 196 | /** |
| @@ -222,12 +195,10 @@ | ||
| 222 | 195 | |
| 223 | 196 | /** |
| 224 | 197 | * @param string $title |
| 225 | 198 | * @param string $context values include 'index', 'list', and 'edit'. |
| 226 | - * | |
| 227 | 199 | * @return void |
| 228 | 200 | */ |
| 229 | 201 | public static function render_applications_header( $title, $context ) { |
| 230 | - FrmAppHelper::print_admin_banner( true ); | |
| 231 | 202 | require self::get_view_path() . 'header.php'; |
| 232 | 203 | } |
| 233 | 204 | } |