| @@ -1,121 +1,198 @@ | ||
| 1 | 1 | <?php |
| 2 | + | |
| 3 | +use Give\Helpers\Utils; | |
| 4 | + | |
| 2 | 5 | /** |
| 3 | 6 | * Admin View: Settings |
| 4 | 7 | */ |
| 5 | -if ( ! defined( 'ABSPATH' ) ) { | |
| 6 | - exit; | |
| 8 | +if ( ! defined('ABSPATH')) { | |
| 9 | + exit; | |
| 7 | 10 | } |
| 8 | 11 | |
| 9 | 12 | // Bailout: Do not output anything if setting tab is not defined. |
| 10 | -if ( ! empty( $tabs ) && array_key_exists( give_get_current_setting_tab(), $tabs ) ) : | |
| 11 | - /** | |
| 12 | - * Filter the form action. | |
| 13 | - * | |
| 14 | - * Note: filter dynamically fire on basis of setting page slug | |
| 15 | - * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 16 | - * then filter will be give-settings_form_method_tab_general | |
| 17 | - * | |
| 18 | - * @since 1.8 | |
| 19 | - */ | |
| 20 | - $form_method = apply_filters( self::$setting_filter_prefix . '_form_method_tab_' . $current_tab, 'post' ); | |
| 13 | +if ( ! empty($tabs) && array_key_exists(give_get_current_setting_tab(), $tabs)) : | |
| 14 | + /** | |
| 15 | + * Filter the form action. | |
| 16 | + * | |
| 17 | + * Note: filter dynamically fire on basis of setting page slug | |
| 18 | + * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 19 | + * then filter will be give-settings_form_method_tab_general | |
| 20 | + * | |
| 21 | + * @since 1.8 | |
| 22 | + */ | |
| 23 | + $form_method = apply_filters(self::$setting_filter_prefix . '_form_method_tab_' . $current_tab, 'post'); | |
| 21 | 24 | |
| 22 | - /** | |
| 23 | - * Filter the main form tab. | |
| 24 | - * | |
| 25 | - * Note: You can stop print main form if you want to.filter dynamically fire on basis of setting page slug | |
| 26 | - * For example: if you register a setting page with give-settings menu slug | |
| 27 | - * then filter will be give-settings_open_form, give-settings_close_form | |
| 28 | - * We are using this filter in includes/admin/tools/class-settings-data.php#L52 | |
| 29 | - * | |
| 30 | - * @since 1.8 | |
| 31 | - */ | |
| 32 | - $form_open_tag = apply_filters( self::$setting_filter_prefix . '_open_form', '<form method="' . $form_method . '" id="give-mainform" action="" enctype="multipart/form-data">' ); | |
| 33 | - $form_close_tag = apply_filters( self::$setting_filter_prefix . '_close_form', '</form>' ); | |
| 25 | + /** | |
| 26 | + * Filter the main form tab. | |
| 27 | + * | |
| 28 | + * Note: You can stop print main form if you want to filter dynamically fire on basis of setting page slug | |
| 29 | + * For example: if you register a setting page with give-settings menu slug | |
| 30 | + * then filter will be give-settings_open_form, give-settings_close_form | |
| 31 | + * We are using this filter in includes/admin/tools/class-settings-data.php#L52 | |
| 32 | + * | |
| 33 | + * @since 1.8 | |
| 34 | + */ | |
| 35 | + $form_open_tag = apply_filters( | |
| 36 | + self::$setting_filter_prefix . '_open_form', | |
| 37 | + '<form method="' . $form_method . '" id="give-mainform" action="" enctype="multipart/form-data">' | |
| 38 | + ); | |
| 39 | + $form_close_tag = apply_filters(self::$setting_filter_prefix . '_close_form', '</form>'); | |
| 34 | 40 | |
| 35 | - $wrapper_class = implode( ' ', | |
| 36 | - array( | |
| 37 | - self::$setting_filter_prefix . '-setting-page', | |
| 38 | - self::$setting_filter_prefix . '-' . give_get_current_setting_section() . '-section', | |
| 39 | - self::$setting_filter_prefix . '-' . give_get_current_setting_tab() . '-tab', | |
| 40 | - ) | |
| 41 | - ); | |
| 42 | - ?> | |
| 43 | - <div class="wrap give-settings-page <?php echo $wrapper_class; ?>"> | |
| 44 | - <?php | |
| 45 | - echo $form_open_tag; | |
| 41 | + $wrapper_class = implode( | |
| 42 | + ' ', | |
| 43 | + [ | |
| 44 | + self::$setting_filter_prefix . '-setting-page', | |
| 45 | + self::$setting_filter_prefix . '-' . give_get_current_setting_section() . '-section', | |
| 46 | + self::$setting_filter_prefix . '-' . give_get_current_setting_tab() . '-tab', | |
| 47 | + ] | |
| 48 | + ); | |
| 49 | + ?> | |
| 46 | 50 | |
| 47 | - /* @var Give_Settings_Page $current_setting_obj */ | |
| 48 | - if ( | |
| 49 | - ! empty( $current_setting_obj ) && | |
| 50 | - method_exists( $current_setting_obj, 'get_heading_html' ) | |
| 51 | - ) { | |
| 52 | - echo $current_setting_obj->get_heading_html(); | |
| 53 | - } else { | |
| 51 | + <div class="wrap give-settings-page <?php | |
| 52 | + echo esc_html($wrapper_class); ?>"> | |
| 54 | 53 | |
| 55 | - // Backward compatibility. | |
| 56 | - echo sprintf( | |
| 57 | - '<h1 class="wp-heading-inline">%s</h1><hr class="wp-header-end">', | |
| 58 | - esc_html( $tabs[ $current_tab ] ) | |
| 59 | - ); | |
| 60 | - } | |
| 54 | + <?php | |
| 55 | + echo $form_open_tag; ?> | |
| 61 | 56 | |
| 62 | - self::show_messages(); | |
| 63 | - ?> | |
| 64 | - <div class="nav-tab-wrapper give-nav-tab-wrapper"> | |
| 65 | - <?php | |
| 66 | - foreach ( $tabs as $name => $label ) { | |
| 67 | - echo '<a href="' . admin_url( "edit.php?post_type=give_forms&page=" . self::$setting_filter_prefix . "&tab={$name}" ) . '" class="nav-tab ' . ( $current_tab === $name ? 'nav-tab-active' : 'give-mobile-hidden' ) . '">' . $label . '</a>'; | |
| 68 | - } | |
| 57 | + <div class="give-settings-header"> | |
| 58 | + <?php | |
| 59 | + /* @var Give_Settings_Page $current_setting_obj */ | |
| 60 | + if ( | |
| 61 | + ! empty($current_setting_obj) | |
| 62 | + && method_exists($current_setting_obj, 'get_heading_html') | |
| 63 | + ) { | |
| 64 | + echo $current_setting_obj->get_heading_html(); | |
| 65 | + } else { | |
| 66 | + // Backward compatibility. | |
| 67 | + echo sprintf( | |
| 68 | + '<h1 class="wp-heading-inline">%s</h1>', | |
| 69 | + esc_html($tabs[$current_tab]) | |
| 70 | + ); | |
| 71 | + } | |
| 69 | 72 | |
| 70 | - /** | |
| 71 | - * Trigger Action. | |
| 72 | - * | |
| 73 | - * Note: action dynamically fire on basis of setting page slug. | |
| 74 | - * For example: if you register a setting page with give-settings menu slug | |
| 75 | - * then action will be give-settings_tabs | |
| 76 | - * | |
| 77 | - * @since 1.8 | |
| 78 | - */ | |
| 79 | - do_action( self::$setting_filter_prefix . '_tabs' ); | |
| 80 | - ?> | |
| 81 | - <div class="give-sub-nav-tab-wrapper"> | |
| 82 | - <a href="#" id="give-show-sub-nav" class="nav-tab give-not-tab" title="<?php _e( 'View remaining setting tabs', 'give' ); ?>"><span class="dashicons dashicons-arrow-down-alt2"></span></span> | |
| 83 | - </a> | |
| 84 | - <nav class="give-sub-nav-tab give-hidden"></nav> | |
| 85 | - </div> | |
| 86 | - </div> | |
| 87 | - <?php | |
| 73 | + self::show_messages(); | |
| 88 | 74 | |
| 89 | - /** | |
| 90 | - * Trigger Action. | |
| 91 | - * | |
| 92 | - * Note: action dynamically fire on basis of setting page slug. | |
| 93 | - * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 94 | - * then action will be give-settings_sections_general_page | |
| 95 | - * | |
| 96 | - * @since 1.8 | |
| 97 | - */ | |
| 98 | - do_action( self::$setting_filter_prefix . "_sections_{$current_tab}_page" ); | |
| 75 | + do_action('give_settings_page_header'); | |
| 76 | + ?> | |
| 99 | 77 | |
| 100 | - /** | |
| 101 | - * Trigger Action. | |
| 102 | - * | |
| 103 | - * Note: action dynamically fire on basis of setting page slug. | |
| 104 | - * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 105 | - * then action will be give-settings_settings_general_page | |
| 106 | - * | |
| 107 | - * @since 1.8 | |
| 108 | - */ | |
| 109 | - do_action( self::$setting_filter_prefix . "_settings_{$current_tab}_page" ); | |
| 78 | + </div> | |
| 110 | 79 | |
| 111 | - wp_nonce_field( 'give-save-settings', '_give-save-settings' ); | |
| 80 | + <?php | |
| 81 | + /* | |
| 82 | + Default behavior of WordPress places admin notices directly after the first h-tag inside any element | |
| 83 | + with the class of wrap. The tag below will instruct WordPress to place these notices below the header. | |
| 84 | + */ | |
| 85 | + ?> | |
| 86 | + <hr class="wp-header-end hidden"> | |
| 112 | 87 | |
| 113 | - if ( empty( $GLOBALS['give_hide_save_button'] ) ) : ?> | |
| 114 | - <div class="give-submit-wrap"> | |
| 115 | - <input name="save" class="button-primary give-save-button" type="submit" value="<?php _e( 'Save changes', 'give' ); ?>"/> | |
| 116 | - </div> | |
| 117 | - <?php endif; ?> | |
| 118 | - <?php echo $form_close_tag; ?> | |
| 119 | - </div> | |
| 120 | -<?php else : echo '<div class="error"><p>' . __( 'Oops, this settings page does not exist.', 'give' ) . '</p></div>'; ?> | |
| 121 | -<?php endif; ?> | |
| 88 | + <div class="nav-tab-wrapper give-nav-tab-wrapper"> | |
| 89 | + <?php | |
| 90 | + /** | |
| 91 | + * Render Recurring Donations UTM link. | |
| 92 | + * | |
| 93 | + * @since 2.27.1 | |
| 94 | + */ | |
| 95 | + foreach ($tabs as $name => $label) { | |
| 96 | + $target = $name === 'recurring' ? 'target="_blank" ' : false; | |
| 97 | + $urlPath = $name === 'recurring' ? 'https://docs.givewp.com/recurring-link' : admin_url( | |
| 98 | + 'edit.php?post_type=give_forms&page=' . self::$setting_filter_prefix . "&tab={$name}" | |
| 99 | + ); | |
| 100 | + echo '<a ' . $target . 'href="' . $urlPath . '"' . ' class="nav-tab ' . ($current_tab === $name ? 'nav-tab-active' : 'give-mobile-hidden') . '">' . $label . '</a>'; | |
| 101 | + } | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * Render Addon product recommendation link if Recurring Donations is active. | |
| 105 | + * | |
| 106 | + * @since 2.27.1 | |
| 107 | + */ | |
| 108 | + if (Utils::isPluginActive('give-recurring/give-recurring.php')) { | |
| 109 | + echo ' | |
| 110 | + <a class="give-nav-addons-tab" href="' . esc_url( | |
| 111 | + admin_url('edit.php?post_type=give_forms&page=give-add-ons') | |
| 112 | + ) . '"> | |
| 113 | + <img src="' . GIVE_PLUGIN_URL . 'build/assets/dist/images/admin/add-on-star-icon.svg"/> | |
| 114 | + <span>' . __('ADD-ONS', 'give') . '</span> | |
| 115 | + </a> | |
| 116 | + '; | |
| 117 | + } | |
| 118 | + | |
| 119 | + /** | |
| 120 | + * Trigger Action. | |
| 121 | + * | |
| 122 | + * Note: action dynamically fire on basis of setting page slug. | |
| 123 | + * For example: if you register a setting page with give-settings menu slug | |
| 124 | + * then action will be give-settings_tabs | |
| 125 | + * | |
| 126 | + * @since 1.8 | |
| 127 | + */ | |
| 128 | + do_action(self::$setting_filter_prefix . '_tabs'); | |
| 129 | + | |
| 130 | + // Show link to New Reports page | |
| 131 | + $isReports = isset($_GET['page']) && $_GET['page'] === 'give-reports'; | |
| 132 | + if ($isReports === true) { | |
| 133 | + echo sprintf( | |
| 134 | + '<a href="%1$s" class="nav-tab nav-tab" id="new-reports-link">%2$s</a>', | |
| 135 | + admin_url('edit.php?post_type=give_forms&page=give-reports'), | |
| 136 | + esc_html__('New Reports Dashboard', 'give') | |
| 137 | + ); | |
| 138 | + } | |
| 139 | + ?> | |
| 140 | + | |
| 141 | + <div class="give-sub-nav-tab-wrapper"> | |
| 142 | + <a href="#" id="give-show-sub-nav" class="nav-tab give-not-tab" title="<?php | |
| 143 | + esc_html_e('View remaining setting tabs', 'give'); ?>"> | |
| 144 | + <span class="dashicons dashicons-arrow-down-alt2"></span> | |
| 145 | + </a> | |
| 146 | + <nav class="give-sub-nav-tab give-hidden"></nav> | |
| 147 | + </div> | |
| 148 | + </div> | |
| 149 | + | |
| 150 | + <?php | |
| 151 | + | |
| 152 | + /** | |
| 153 | + * Trigger Action. | |
| 154 | + * | |
| 155 | + * Note: action dynamically fire on basis of setting page slug. | |
| 156 | + * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 157 | + * then action will be give-settings_sections_general_page | |
| 158 | + * | |
| 159 | + * @since 1.8 | |
| 160 | + */ | |
| 161 | + do_action(self::$setting_filter_prefix . "_sections_{$current_tab}_page"); | |
| 162 | + | |
| 163 | + /** | |
| 164 | + * Trigger Action. | |
| 165 | + * | |
| 166 | + * Note: action dynamically fire on basis of setting page slug. | |
| 167 | + * For example: if you register a setting page with give-settings menu slug and general current tab | |
| 168 | + * then action will be give-settings_settings_general_page | |
| 169 | + * | |
| 170 | + * @since 1.8 | |
| 171 | + */ | |
| 172 | + do_action(self::$setting_filter_prefix . "_settings_{$current_tab}_page"); | |
| 173 | + | |
| 174 | + wp_nonce_field('give-save-settings', '_give-save-settings'); | |
| 175 | + | |
| 176 | + if (empty($GLOBALS['give_hide_save_button'])) : | |
| 177 | + ?> | |
| 178 | + <div class="give-submit-wrap"> | |
| 179 | + <input name="save" class="button-primary give-save-button" type="submit" value="<?php | |
| 180 | + esc_html_e('Save changes', 'give'); ?>" /> | |
| 181 | + </div> | |
| 182 | + <?php | |
| 183 | + endif; ?> | |
| 184 | + <?php | |
| 185 | + echo $form_close_tag; ?> | |
| 186 | + </div> | |
| 187 | +<?php | |
| 188 | +else : | |
| 189 | + ?> | |
| 190 | + <div class="error"> | |
| 191 | + <p> | |
| 192 | + <?php | |
| 193 | + esc_html_e('Oops, this settings page does not exist.', 'give'); ?> | |
| 194 | + </p> | |
| 195 | + </div> | |
| 196 | +<?php | |
| 197 | +endif; | |
| 198 | +?> | |