PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 8.2.0
Admin and Site Enhancements (ASE) v8.2.0
9.1.1 9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / settings.php
admin-site-enhancements Last commit date
assets 8 months ago classes 8 months ago includes 8 months ago languages 8 months ago vendor 8 months ago CHANGELOG.md 8 months ago LICENSE.md 8 months ago README.md 8 months ago admin-site-enhancements.php 8 months ago bootstrap.php 8 months ago functions.php 8 months ago settings.php 8 months ago
settings.php
1283 lines
1 <?php
2
3 /**
4 * Initialize options. [TODO] Move this into activation class at v7.
5 *
6 * @since 6.4.1
7 */
8 if ( false === get_option( ASENHA_SLUG_U ) ) {
9 add_option(
10 ASENHA_SLUG_U,
11 array(),
12 '',
13 true
14 );
15 }
16 if ( false === get_option( ASENHA_SLUG_U . '_stats' ) ) {
17 add_option(
18 ASENHA_SLUG_U . '_stats',
19 array(),
20 '',
21 false
22 );
23 }
24 if ( false === get_option( ASENHA_SLUG_U . '_extra' ) ) {
25 add_option(
26 ASENHA_SLUG_U . '_extra',
27 array(),
28 '',
29 true
30 );
31 }
32 // Bugfix in v7.1.2 for Custom Content Type module
33 $options_extra = get_option( ASENHA_SLUG_U . '_extra', array() );
34 if ( !isset( $options_extra['cfgroup_next_field_id'] ) ) {
35 $options_extra['cfgroup_next_field_id'] = 1;
36 update_option( ASENHA_SLUG_U . '_extra', $options_extra, true );
37 }
38 // Move Admin Menu Organizer options storage to extra table since v7.8.5
39 if ( !isset( $options_extra['admin_menu'] ) ) {
40 $options = get_option( ASENHA_SLUG_U, array() );
41 $options_extra['admin_menu']['custom_menu_order'] = ( isset( $options['custom_menu_order'] ) ? $options['custom_menu_order'] : '' );
42 unset($options['custom_menu_order']);
43 $options_extra['admin_menu']['custom_menu_titles'] = ( isset( $options['custom_menu_titles'] ) ? $options['custom_menu_titles'] : '' );
44 unset($options['custom_menu_titles']);
45 $options_extra['admin_menu']['custom_menu_hidden'] = ( isset( $options['custom_menu_hidden'] ) ? trim( $options['custom_menu_hidden'], ',' ) : '' );
46 unset($options['custom_menu_hidden']);
47 update_option( ASENHA_SLUG_U . '_extra', $options_extra, true );
48 update_option( ASENHA_SLUG_U, $options, true );
49 }
50 /**
51 * Register admin menu
52 *
53 * @since 1.0.0
54 */
55 function asenha_register_admin_menu() {
56 add_submenu_page(
57 'tools.php',
58 // Parent page/menu
59 'Admin and Site Enhancements',
60 // Browser tab/window title
61 __( 'Enhancements', 'admin-site-enhancements' ),
62 // Sube menu title
63 'manage_options',
64 // Minimal user capabililty
65 ASENHA_SLUG,
66 // Page slug. Shows up in URL.
67 'asenha_add_settings_page'
68 );
69 }
70
71 /**
72 * Create the settings page of the plugin
73 *
74 * @since 1.0.0
75 */
76 function asenha_add_settings_page() {
77 $options = get_option( ASENHA_SLUG_U, array() );
78 ?>
79 <div class="wrap asenha">
80
81 <div id="asenha-header" class="asenha-header">
82 <div class="asenha-header-left">
83 <img src="<?php
84 echo esc_html( ASENHA_URL ) . 'assets/img/ase_icon.png';
85 ?>" class="asenha-icon"/>
86 <h1 class="asenha-heading">
87 <?php
88 echo esc_html( get_admin_page_title() );
89 ?>
90 (ASE)
91 <?php
92 ?>
93 </h1>
94 <input id="module-search-input" type="search" placeholder="<?php
95 echo esc_attr__( 'Search...', 'admin-site-enhancements' );
96 ?>" />
97 <!-- <a href="https://wordpress.org/plugins/admin-site-enhancements/" target="_blank" class="asenha-header-action"><span>&#8505;</span> <?php
98 // esc_html_e( 'Info', 'admin-site-enhancements' );
99 ?></a> -->
100 </div>
101 <div class="asenha-header-right">
102 <?php
103 // https://icon-sets.iconify.design/iconamoon/star-bold/
104 $svg_star = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="2.5" d="m12 2l3.104 6.728l7.358.873l-5.44 5.03l1.444 7.268L12 18.28L5.534 21.9l1.444-7.268L1.538 9.6l7.359-.873L12 2Z"/></svg>';
105 // https://icon-sets.iconify.design/octicon/question-16/
106 $svg_support = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13a6.5 6.5 0 0 0 0-13ZM6.92 6.085h.001a.749.749 0 1 1-1.342-.67c.169-.339.436-.701.849-.977C6.845 4.16 7.369 4 8 4a2.756 2.756 0 0 1 1.637.525c.503.377.863.965.863 1.725c0 .448-.115.83-.329 1.15c-.205.307-.47.513-.692.662c-.109.072-.22.138-.313.195l-.006.004a6.24 6.24 0 0 0-.26.16a.952.952 0 0 0-.276.245a.75.75 0 0 1-1.248-.832c.184-.264.42-.489.692-.661c.103-.067.207-.132.313-.195l.007-.004c.1-.061.182-.11.258-.161a.969.969 0 0 0 .277-.245C8.96 6.514 9 6.427 9 6.25a.612.612 0 0 0-.262-.525A1.27 1.27 0 0 0 8 5.5c-.369 0-.595.09-.74.187a1.01 1.01 0 0 0-.34.398ZM9 11a1 1 0 1 1-2 0a1 1 0 0 1 2 0Z"/></svg>';
107 // https://icon-sets.iconify.design/octicon/comment-16/
108 $svg_feedback = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 16 16"><path fill="currentColor" d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg>';
109 // https://icon-sets.iconify.design/ic/baseline-translate/
110 $svg_translate = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"><path fill="currentColor" d="m12.87 15.07l-2.54-2.51l.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35C8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5l3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7l1.62-4.33L19.12 17z"/></svg>';
111 // https://icon-sets.iconify.design/iconamoon/file-document/
112 $svg_docs = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="2"><path stroke-linecap="round" d="M7 21a2 2 0 0 1-2-2V3h9l5 5v11a2 2 0 0 1-2 2H7Z"/><path d="M13 3v6h6"/><path stroke-linecap="round" d="M9 13h6m-6 4h6"/></g></svg>';
113 // https://icon-sets.iconify.design/pajamas/heart/
114 $svg_sponsor = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M8.753 2.247L8 3l-.753-.753A4.243 4.243 0 0 0 1.25 8.25l5.69 5.69L8 15l1.06-1.06l5.69-5.69a4.243 4.243 0 0 0-5.997-6.003ZM8 12.879l5.69-5.69a2.743 2.743 0 0 0-3.877-3.881l-.752.753L8 5.12L6.94 4.06l-.753-.752v-.001A2.743 2.743 0 0 0 2.31 7.189L8 12.88Z" clip-rule="evenodd"/></svg>';
115 ?>
116 <a href="https://wordpress.org/plugins/admin-site-enhancements/#reviews" target="_blank" class="asenha-header-action review"><?php
117 echo wp_kses( $svg_star, get_kses_with_svg_ruleset() ) . esc_html__( 'Review', 'admin-site-enhancements' );
118 ?></a>
119 <a href="https://wordpress.org/support/plugin/admin-site-enhancements/" target="_blank" class="asenha-header-action feedback"><?php
120 echo wp_kses( $svg_feedback, get_kses_with_svg_ruleset() ) . esc_html__( 'Feedback', 'admin-site-enhancements' );
121 ?></a>
122 <a href="https://www.wpase.com/trnslt-plgnhdr" target="_blank" class="asenha-header-action translate"><?php
123 echo wp_kses( $svg_translate, get_kses_with_svg_ruleset() ) . esc_html__( 'Translate', 'admin-site-enhancements' );
124 ?></a>
125 <!--<a href="https://www.wpasenha.com/docs/" target="_blank" class="asenha-header-action docs"><?php
126 // echo $svg_docs . esc_html__( 'Docs', 'admin-site-enhancements' );
127 ?></a>-->
128 <!--<a id="plugin-sponsor" href="#" class="asenha-header-action sponsor"><?php
129 // echo $svg_sponsor . esc_html__( 'Sponsor', 'admin-site-enhancements' );
130 ?></a>-->
131 <a href="https://www.wpase.com/upgrade-btn" target="_blank" id="plugin-upgrade" class="button button-primary plugin-upgrade"><?php
132 echo esc_html__( 'Get ASE Pro', 'admin-site-enhancements' );
133 ?></a>
134 <?php
135 ?>
136 <a class="button button-primary asenha-save-button"><?php
137 echo esc_html__( 'Save Changes', 'admin-site-enhancements' );
138 ?></a>
139 <!-- https://icon-sets.iconify.design/svg-spinners/180-ring-with-bg/ -->
140 <div class="asenha-saving-changes" style="display:none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="#2271b1" d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z" opacity=".25"/><path fill="#2271b1" d="M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"><animateTransform attributeName="transform" dur="0.75s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"/></path></svg></div>
141 <div class="asenha-changes-saved" style="display:none;"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24"><path fill="seagreen" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10s10-4.48 10-10S17.52 2 12 2zM9.29 16.29L5.7 12.7a.996.996 0 1 1 1.41-1.41L10 14.17l6.88-6.88a.996.996 0 1 1 1.41 1.41l-7.59 7.59a.996.996 0 0 1-1.41 0z"/></svg></div>
142 </div>
143 </div>
144
145 <div class="asenha-body">
146 <?php
147 $is_yearend_promo_period = is_yearend_promo_period();
148 ?>
149 <?php
150 if ( $is_yearend_promo_period ) {
151 ?>
152 <!-- <div class="asenha-upgrade-nudge" style="display: none;">
153 <div class="asenha-upgrade-nudge__message"><?php
154 // echo esc_html__( 'Lifetime Deal (LTD) is available for the Pro version of ASE.', 'admin-site-enhancements' );
155 ?></div>
156 <a href="https://www.wpase.com/upgrade-ndg" class="button asenha-upgrade-nudge__button" target="_blank"><?php
157 // echo esc_html__( 'Find Out More', 'admin-site-enhancements' );
158 ?></a>
159 <a href="#" id="dismiss-upgrade-nudge" class="asenha-upgrade-nudge__dismiss">
160 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M24 2.4L21.6 0L12 9.6L2.4 0L0 2.4L9.6 12L0 21.6L2.4 24l9.6-9.6l9.6 9.6l2.4-2.4l-9.6-9.6z"/></svg>
161 </a>
162 </div> -->
163 <div class="asenha-promo-nudge" style="display: none;">
164 <div class="asenha-promo-nudge__message"><?php
165 echo esc_html__( 'ASE Pro YEAR-END SALE! 20% DISCOUNT. Lifetime Deal (LTD) available.', 'admin-site-enhancements' );
166 ?></div>
167 <a href="https://www.wpase.com/promo-ndg" class="button asenha-promo-nudge__button" target="_blank"><?php
168 echo esc_html__( 'Get It Now', 'admin-site-enhancements' );
169 ?></a>
170 <a href="#" id="dismiss-promo-nudge" class="asenha-promo-nudge__dismiss">
171 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M24 2.4L21.6 0L12 9.6L2.4 0L0 2.4L9.6 12L0 21.6L2.4 24l9.6-9.6l9.6 9.6l2.4-2.4l-9.6-9.6z"/></svg>
172 </a>
173 </div>
174 <?php
175 } else {
176 ?>
177 <div class="asenha-upgrade-nudge" style="display: none;">
178 <div class="asenha-upgrade-nudge__message"><?php
179 echo esc_html__( 'Lifetime Deal (LTD) is available for the Pro version of ASE.', 'admin-site-enhancements' );
180 ?></div>
181 <a href="https://www.wpase.com/upgrade-ndg" class="button asenha-upgrade-nudge__button" target="_blank"><?php
182 echo esc_html__( 'Find Out More', 'admin-site-enhancements' );
183 ?></a>
184 <a href="#" id="dismiss-upgrade-nudge" class="asenha-upgrade-nudge__dismiss">
185 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24"><path fill="currentColor" d="M24 2.4L21.6 0L12 9.6L2.4 0L0 2.4L9.6 12L0 21.6L2.4 24l9.6-9.6l9.6 9.6l2.4-2.4l-9.6-9.6z"/></svg>
186 </a>
187 </div>
188 <?php
189 }
190 ?>
191 <?php
192 ?>
193 <div class="asenha-support-nudge nudge-show-more is-enabled" style="display: none;">
194 <h3><?php
195 _e( 'Looks like some of these free enhancements have been useful for your site?', 'admin-site-enhancements' );
196 ?></h3>
197 <p class="nudge-description intro"><?php
198 _e( 'Please consider supporting ASE.', 'admin-site-enhancements' );
199 ?></p>
200 <div class="nudge-content">
201 <div class="nudge-primary">
202 <h4><?php
203 _e( 'Write a quick, 5-star review for ASE', 'admin-site-enhancements' );
204 ?></h4>
205 <div class="nudge-ctas">
206 <a href="https://wordpress.org/plugins/admin-site-enhancements/#reviews" target="_blank" class="button button-outline asenha-review-button"><?php
207 _e( 'Add Your Review', 'admin-site-enhancements' );
208 ?></a>
209 <a href="#" id="have-reviewed" class="asenha-have-supported"><?php
210 _e( 'I\'ve reviewed', 'admin-site-enhancements' );
211 ?></a>
212 </div>
213 <p class="nudge-description"><?php
214 _e( 'Or, help improve ASE by <a href="https://wordpress.org/support/plugin/admin-site-enhancements/" target="_blank">providing feedback</a>.', 'admin-site-enhancements' );
215 ?></p>
216 </div>
217 <div class="nudge-secondary">
218 <h4><?php
219 _e( 'Share about ASE on:', 'admin-site-enhancements' );
220 ?></h4>
221 <div class="nudge-ctas">
222 <a href="https://www.facebook.com/sharer.php?u=<?php
223 echo urlencode( 'https://www.wpase.com' );
224 ?>" target="_blank" class="button button-outline asenha-share-button"><?php
225 _e( 'Facebook', 'admin-site-enhancements' );
226 ?></a>
227 <a href="https://twitter.com/intent/post?url=<?php
228 echo urlencode( 'https://www.wpase.com' );
229 ?>&text=<?php
230 echo esc_attr( urlencode( 'Admin and Site Enhancements (ASE)' ) );
231 ?>" target="_blank" class="button button-outline asenha-share-button"><?php
232 _e( 'X / Twitter', 'admin-site-enhancements' );
233 ?></a>
234 <a href="https://www.wpase.com/video-reviews/" target="_blank" class="button button-outline asenha-share-button"><?php
235 _e( 'YouTube', 'admin-site-enhancements' );
236 ?></a>
237 <a href="#" id="have-shared" class="asenha-have-supported"><?php
238 _e( 'I\'ve shared', 'admin-site-enhancements' );
239 ?></a>
240 </div>
241 <div class="nudge-info">
242 <p class="nudge-description"><?php
243 _e( 'Help others discover ASE and maybe <a href="https://www.wpase.com/trnslt-plgnndg" target="_blank">translate</a> to your language.', 'admin-site-enhancements' );
244 ?></p>
245 </div>
246 </div>
247 </div>
248 <div class="dismiss-support-nudge"><a href="#" id="support-nudge-dismiss" class="asenha-support-nudge-dismiss"><?php
249 _e( 'Dismiss', 'admin-site-enhancements' );
250 ?></a></div>
251 </div>
252 <?php
253 ?>
254 <form action="options.php" method="post">
255 <div class="asenha-vertical-tabs">
256 <div class="asenha-tab-buttons">
257 <?php
258 // https://icon-sets.iconify.design/mdi/database-check-outline/ -- db check
259 // https://icon-sets.iconify.design/mdi/file-document-box-multiple-outline/ -- docs
260 // https://icon-sets.iconify.design/fluent/content-view-28-regular/ -- content
261 // https://icon-sets.iconify.design/lucide/shapes/ -- shapes
262 $icon_content_management = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z"/><rect width="7" height="7" x="3" y="14" rx="1"/><circle cx="17.5" cy="17.5" r="3.5"/></g></svg>';
263 // https://icon-sets.iconify.design/mingcute/layout-line/
264 $icon_admin_interface = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="M24 0v24H0V0h24ZM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035c-.01-.004-.019-.001-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427c-.002-.01-.009-.017-.017-.018Zm.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093c.012.004.023 0 .029-.008l.004-.014l-.034-.614c-.003-.012-.01-.02-.02-.022Zm-.715.002a.023.023 0 0 0-.027.006l-.006.014l-.034.614c0 .012.007.02.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01l-.184-.092Z"/><path fill="currentColor" d="M3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm16 0H5v3h14V5ZM5 19v-9h4v9H5Zm6 0h8v-9h-8v9Z"/></g></svg>';
265 // https://icon-sets.iconify.design/ri/login-circle-line/
266 $icon_login_logout = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="m10.998 16l5-4l-5-4v3h-9v2h9z"/><path fill="currentColor" d="M12.999 2.999a8.938 8.938 0 0 0-6.364 2.637L8.049 7.05c1.322-1.322 3.08-2.051 4.95-2.051s3.628.729 4.95 2.051S20 10.13 20 12s-.729 3.628-2.051 4.95s-3.08 2.051-4.95 2.051s-3.628-.729-4.95-2.051l-1.414 1.414c1.699 1.7 3.959 2.637 6.364 2.637s4.665-.937 6.364-2.637C21.063 16.665 22 14.405 22 12s-.937-4.665-2.637-6.364a8.938 8.938 0 0 0-6.364-2.637z"/></svg>';
267 // https://icon-sets.iconify.design/mingcute/code-line/
268 $icon_custom_code = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none"><path d="M0 0h24v24H0z"/><path fill="currentColor" d="M14.486 3.143a1 1 0 0 1 .692 1.233l-4.43 15.788a1 1 0 0 1-1.926-.54l4.43-15.788a1 1 0 0 1 1.234-.693ZM7.207 7.05a1 1 0 0 1 0 1.414L3.672 12l3.535 3.535a1 1 0 1 1-1.414 1.415L1.55 12.707a1 1 0 0 1 0-1.414L5.793 7.05a1 1 0 0 1 1.414 0Zm9.586 1.414a1 1 0 1 1 1.414-1.414l4.243 4.243a1 1 0 0 1 0 1.414l-4.243 4.242a1 1 0 0 1-1.414-1.414L20.328 12l-3.535-3.536Z"/></g></svg>';
269 // https://icon-sets.iconify.design/mdi/forbid/
270 $icon_disable_components = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2c5.5 0 10 4.5 10 10s-4.5 10-10 10S2 17.5 2 12S6.5 2 12 2m0 2c-1.9 0-3.6.6-4.9 1.7l11.2 11.2c1-1.4 1.7-3.1 1.7-4.9c0-4.4-3.6-8-8-8m4.9 14.3L5.7 7.1C4.6 8.4 4 10.1 4 12c0 4.4 3.6 8 8 8c1.9 0 3.6-.6 4.9-1.7Z"/></svg>';
271 // https://icon-sets.iconify.design/jam/shield-check/
272 $icon_security = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 16 16"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="m8 1.75l5.25 2v5c0 2.25-2 4.5-5.25 5.5c-3.25-1-5.25-3-5.25-5.5v-5z"/><path d="m5.75 7.75l1.5 1.5l3-3.5"/></g></svg>';
273 // https://icon-sets.iconify.design/streamline/image-flash-1-flash-power-connect-charge-electricity-lightning/
274 $icon_optimizations = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 14 14"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M4.25.5L2 5.81a.5.5 0 0 0 .46.69h2.79l-2 7l8.59-8.14a.5.5 0 0 0-.34-.86H7.75l2-4Z"/></svg>';
275 // https://icon-sets.iconify.design/iconoir/tools/
276 $icon_utilities = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="m10.05 10.607l-7.07 7.07a2 2 0 0 0 0 2.83v0a2 2 0 0 0 2.828 0l7.07-7.072m4.315.365l3.878 3.878a2 2 0 0 1 0 2.828v0a2 2 0 0 1-2.828 0l-6.209-6.208M6.733 5.904L4.61 6.61L2.49 3.075l1.414-1.414L7.44 3.782l-.707 2.122Zm0 0l2.83 2.83"/><path d="M10.05 10.607c-.844-2.153-.679-4.978 1.061-6.718c1.74-1.74 4.95-2.121 6.717-1.06l-3.04 3.04l-.283 3.111l3.111-.282l3.04-3.041c1.062 1.768.68 4.978-1.06 6.717c-1.74 1.74-4.564 1.905-6.717 1.061"/></g></svg>';
277 ?>
278 <input id="tab-content-management" type="radio" name="tabs" checked><label for="tab-content-management" class="modules-tab"><?php
279 echo wp_kses( $icon_content_management, get_kses_with_svg_ruleset() );
280 ?><span><?php
281 echo esc_html__( 'Content Management', 'admin-site-enhancements' );
282 ?></span></label>
283 <input id="tab-admin-interface" type="radio" name="tabs"><label for="tab-admin-interface" class="modules-tab"><?php
284 echo wp_kses( $icon_admin_interface, get_kses_with_svg_ruleset() );
285 ?><span><?php
286 echo esc_html__( 'Admin Interface', 'admin-site-enhancements' );
287 ?></span></label>
288 <input id="tab-login-logout" type="radio" name="tabs"><label for="tab-login-logout" class="modules-tab"><?php
289 echo wp_kses( $icon_login_logout, get_kses_with_svg_ruleset() );
290 ?><span><?php
291 echo esc_html__( 'Log In/Out | Register', 'admin-site-enhancements' );
292 ?></span></label>
293 <input id="tab-custom-code" type="radio" name="tabs"><label for="tab-custom-code" class="modules-tab"><?php
294 echo wp_kses( $icon_custom_code, get_kses_with_svg_ruleset() );
295 ?><span><?php
296 echo esc_html__( 'Custom Code', 'admin-site-enhancements' );
297 ?></span></label>
298 <input id="tab-disable-components" type="radio" name="tabs"><label for="tab-disable-components" class="modules-tab"><?php
299 echo wp_kses( $icon_disable_components, get_kses_with_svg_ruleset() );
300 ?><span><?php
301 echo esc_html__( 'Disable Components', 'admin-site-enhancements' );
302 ?></span></label>
303 <input id="tab-security" type="radio" name="tabs"><label for="tab-security" class="modules-tab"><?php
304 echo wp_kses( $icon_security, get_kses_with_svg_ruleset() );
305 ?><span><?php
306 echo esc_html__( 'Security', 'admin-site-enhancements' );
307 ?></span></label>
308 <input id="tab-optimizations" type="radio" name="tabs"><label for="tab-optimizations" class="modules-tab"><?php
309 echo wp_kses( $icon_optimizations, get_kses_with_svg_ruleset() );
310 ?><span><?php
311 echo esc_html__( 'Optimizations', 'admin-site-enhancements' );
312 ?></span></label>
313 <input id="tab-utilities" type="radio" name="tabs"><label for="tab-utilities" class="modules-tab"><?php
314 echo wp_kses( $icon_utilities, get_kses_with_svg_ruleset() );
315 ?><span><?php
316 echo esc_html__( 'Utilities', 'admin-site-enhancements' );
317 ?></span></label>
318 <label for="tab-search" class="search-tab" style="display:none;height:52px;"><span><?php
319 echo esc_html__( 'Search results:', 'admin-site-enhancements' );
320 ?></span></label>
321 </div>
322 <div class="asenha-tab-contents">
323 <section class="asenha-fields fields-content-management">
324 <table class="form-table" role="presentation">
325 <tbody></tbody>
326 </table>
327 </section>
328 <section class="asenha-fields fields-admin-interface">
329 <table class="form-table" role="presentation">
330 <tbody></tbody>
331 </table>
332 </section>
333 <section class="asenha-fields fields-login-logout">
334 <table class="form-table" role="presentation">
335 <tbody></tbody>
336 </table>
337 </section>
338 <section class="asenha-fields fields-custom-code">
339 <table class="form-table" role="presentation">
340 <tbody></tbody>
341 </table>
342 </section>
343 <section class="asenha-fields fields-disable-components">
344 <table class="form-table" role="presentation">
345 <tbody></tbody>
346 </table>
347 </section>
348 <section class="asenha-fields fields-security">
349 <table class="form-table" role="presentation">
350 <tbody></tbody>
351 </table>
352 </section>
353 <section class="asenha-fields fields-optimizations">
354 <table class="form-table" role="presentation">
355 <tbody></tbody>
356 </table>
357 </section>
358 <section class="asenha-fields fields-utilities">
359 <table class="form-table" role="presentation">
360 <tbody></tbody>
361 </table>
362 </section>
363 </div>
364 </div>
365 <div style="display:none;"><!-- Hide to prevent flash of fields appearing at the bottom of the page -->
366 <?php
367 settings_fields( ASENHA_ID );
368 ?>
369 <?php
370 do_settings_sections( ASENHA_SLUG );
371 ?>
372 <?php
373 submit_button(
374 __( 'Save Changes', 'admin-site-enhancements' ),
375 // Button copy
376 'primary',
377 // Type: 'primary', 'small', or 'large'
378 'submit',
379 // The 'name' attribute
380 true,
381 // Whether to wrap in <p> tag
382 array(
383 'id' => 'asenha-submit',
384 )
385 );
386 ?>
387 </div>
388 </form>
389 <?php
390 ?>
391 <div id="bottom-upgrade-nudge" class="asenha-upgrade-nudge-bottom" style="display:none;">
392 <div class="asenha-upgrade-nudge-bottom__message"><?php
393 echo __( 'Do more with <a href="https://www.wpase.com/upgrade-ndg-btm" target="_blank">ASE Pro</a>. Lifetime deal (LTD) <a href="https://www.wpase.com/upgrade-ndg-btm-prc" target="_blank">available</a>.', 'admin-site-enhancements' );
394 ?> <?php
395 if ( $is_yearend_promo_period ) {
396 echo __( 'Currently on YEAR-END SALE. <a href="https://www.wpase.com/promo-ndg" target="_blank">20% discount</a>.', 'admin-site-enhancements' );
397 }
398 ?></div>
399 </div>
400 <?php
401 ?>
402 </div>
403
404 <?php
405 ?>
406
407 </div>
408 <?php
409 // Record the number of times changes were saved as well as the date of last save
410 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
411 $changes_saved = ( isset( $_GET['settings-updated'] ) && 'true' == $_GET['settings-updated'] ? true : false );
412 if ( $changes_saved ) {
413 $current_date = date( 'Y-m-d', time() );
414 if ( !isset( $asenha_stats['first_save_date'] ) ) {
415 $asenha_stats['first_save_date'] = $current_date;
416 $asenha_stats['last_save_date'] = $current_date;
417 $asenha_stats['save_count'] = 1;
418 $asenha_stats['have_supported'] = false;
419 $asenha_stats['support_nudge_dismissed'] = false;
420 $asenha_stats['support_nudge_last_shown_date'] = '';
421 $asenha_stats['support_nudge_last_shown_save_count'] = 0;
422 } else {
423 $asenha_stats['last_save_date'] = $current_date;
424 $save_count = $asenha_stats['save_count'];
425 $save_count++;
426 $asenha_stats['save_count'] = $save_count;
427 }
428 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
429 }
430 }
431
432 /**
433 * Check whether it's the year-end promo period
434 *
435 * @since 7.8.11
436 */
437 function is_yearend_promo_period() {
438 $current_month = intval( date( 'n', time() ) );
439 // n is for numeric value of month, 1 to 12
440 if ( $current_month >= 10 ) {
441 $is_yearend_promo_period = true;
442 // Clear out last year's promo nudge dismissal data
443 $current_year = date( 'Y', time() );
444 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
445 if ( isset( $asenha_stats['promo_nudge_dismissed'] ) && $asenha_stats['promo_nudge_dismissed'] ) {
446 $last_dismissed_year = date( 'Y', strtotime( $asenha_stats['promo_nudge_dismissed_date'] ) );
447 if ( $current_year > $last_dismissed_year ) {
448 $asenha_stats['promo_nudge_dismissed'] = false;
449 $asenha_stats['promo_nudge_dismissed_date'] = '';
450 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
451 }
452 }
453 } else {
454 $is_yearend_promo_period = false;
455 }
456 return $is_yearend_promo_period;
457 }
458
459 /**
460 * Suppress all notices, then add notice for successful settings update
461 *
462 * @since 1.1.0
463 */
464 function asenha_suppress_add_notices() {
465 global $plugin_page;
466 // Suppress all notices
467 if ( ASENHA_SLUG === $plugin_page ) {
468 remove_all_actions( 'admin_notices' );
469 }
470 // Add notice for successful settings update
471 if ( isset( $_GET['page'] ) && ASENHA_SLUG == $_GET['page'] && isset( $_GET['settings-updated'] ) && true == $_GET['settings-updated'] ) {
472 ?>
473 <script>
474 jQuery(document).ready( function() {
475 jQuery('.asenha-changes-saved').fadeIn(400).delay(2500).fadeOut(400);
476 });
477 </script>
478
479 <?php
480 }
481 }
482
483 /**
484 * Suppress all generic notices on the plugin settings page
485 *
486 * @since 2.7.0
487 */
488 function asenha_suppress_generic_notices() {
489 global $plugin_page;
490 // Suppress all notices
491 if ( ASENHA_SLUG === $plugin_page ) {
492 remove_all_actions( 'all_admin_notices' );
493 }
494 }
495
496 /**
497 * Enqueue admin scripts
498 *
499 * @since 1.0.0
500 */
501 function asenha_admin_scripts( $hook_suffix ) {
502 global
503 $wp_version,
504 $pagenow,
505 $typenow,
506 $taxnow,
507 $hook_suffix,
508 $current_user
509 ;
510 $current_screen = get_current_screen();
511 // Get all WP Enhancements options, default to empty array in case it's not been created yet
512 $options = get_option( 'admin_site_enhancements', array() );
513 // For main page of this plugin
514 if ( is_asenha() ) {
515 wp_enqueue_style(
516 'asenha-jbox',
517 ASENHA_URL . 'assets/css/jBox.all.min.css',
518 array(),
519 ASENHA_VERSION
520 );
521 wp_enqueue_script(
522 'asenha-jbox',
523 ASENHA_URL . 'assets/js/jBox.all.min.js',
524 array(),
525 ASENHA_VERSION,
526 false
527 );
528 wp_enqueue_script(
529 'asenha-jsticky',
530 ASENHA_URL . 'assets/js/jquery.jsticky.mod.min.js',
531 array('jquery'),
532 ASENHA_VERSION,
533 false
534 );
535 wp_enqueue_script(
536 'asenha-js-cookie',
537 ASENHA_URL . 'assets/js/js.cookie.min.js',
538 array(),
539 ASENHA_VERSION,
540 false
541 );
542 // First, we unload the CodeMirror libraries included in WP core
543 wp_deregister_script( 'wp-codemirror' );
544 wp_deregister_script( 'code-editor' );
545 wp_deregister_script( 'htmlhint' );
546 wp_deregister_script( 'csslint' );
547 wp_deregister_script( 'esprima' );
548 wp_deregister_script( 'jshint' );
549 // Then, we load ASENHA's CodeMirror libraries. In use, e.g. for Utilities >> Enable Custom Admin / Frontend CSS / ads.txt / app-ads.txt
550 wp_enqueue_style(
551 'asenha-codemirror',
552 ASENHA_URL . 'assets/css/codemirror/codemirror.min.css',
553 array(),
554 ASENHA_VERSION
555 );
556 wp_enqueue_script(
557 'asenha-codemirror',
558 ASENHA_URL . 'assets/js/codemirror/codemirror.min.js',
559 array('jquery'),
560 ASENHA_VERSION,
561 true
562 );
563 wp_enqueue_script(
564 'asenha-codemirror-htmlmixed-mode',
565 ASENHA_URL . 'assets/js/codemirror/htmlmixed.js',
566 array('asenha-codemirror'),
567 ASENHA_VERSION,
568 true
569 );
570 wp_enqueue_script(
571 'asenha-codemirror-xml-mode',
572 ASENHA_URL . 'assets/js/codemirror/xml.js',
573 array('asenha-codemirror'),
574 ASENHA_VERSION,
575 true
576 );
577 wp_enqueue_script(
578 'asenha-codemirror-javascript-mode',
579 ASENHA_URL . 'assets/js/codemirror/javascript.js',
580 array('asenha-codemirror'),
581 ASENHA_VERSION,
582 true
583 );
584 wp_enqueue_script(
585 'asenha-codemirror-css-mode',
586 ASENHA_URL . 'assets/js/codemirror/css.js',
587 array('asenha-codemirror'),
588 ASENHA_VERSION,
589 true
590 );
591 wp_enqueue_script(
592 'asenha-codemirror-markdown-mode',
593 ASENHA_URL . 'assets/js/codemirror/markdown.js',
594 array('asenha-codemirror'),
595 ASENHA_VERSION,
596 true
597 );
598 // DataTables. In use, e.g. for Security >> Limit Login Attempts
599 wp_enqueue_style(
600 'asenha-datatables',
601 ASENHA_URL . 'assets/css/datatables/datatables.min.css',
602 array(),
603 ASENHA_VERSION
604 );
605 wp_enqueue_script(
606 'asenha-datatables',
607 ASENHA_URL . 'assets/js/datatables/datatables.min.js',
608 array('jquery'),
609 ASENHA_VERSION,
610 false
611 );
612 // Add WP media library assets
613 wp_enqueue_media();
614 // Add WP color picker assets
615 wp_enqueue_style( 'wp-color-picker' );
616 wp_enqueue_script( 'wp-color-picker' );
617 // We force loading the uncompressed version of TinyMCE. This ensures we load 'wp-tinymce-root' and then 'wp-tinymce',
618 // which prevents issue where the Visual tab is unusable in some scenarios
619 $wp_scripts = wp_scripts();
620 $wp_scripts->remove( 'wp-tinymce' );
621 wp_register_tinymce_scripts( $wp_scripts, true );
622 // Main style and script for the admin page
623 wp_enqueue_style(
624 'asenha-admin-page',
625 ASENHA_URL . 'assets/css/admin-page.css',
626 array(
627 'asenha-jbox',
628 'asenha-codemirror',
629 'asenha-datatables',
630 'wp-color-picker'
631 ),
632 ASENHA_VERSION
633 );
634 wp_enqueue_script(
635 'asenha-admin-page',
636 ASENHA_URL . 'assets/js/admin-page.js',
637 array(
638 'asenha-jsticky',
639 'asenha-jbox',
640 'asenha-js-cookie',
641 'asenha-codemirror-htmlmixed-mode',
642 'asenha-codemirror-xml-mode',
643 'asenha-codemirror-javascript-mode',
644 'asenha-codemirror-css-mode',
645 'asenha-codemirror-markdown-mode',
646 'asenha-datatables',
647 'wp-color-picker',
648 'wp-mediaelement',
649 'wp-tinymce-root',
650 'wp-tinymce'
651 ),
652 ASENHA_VERSION,
653 false
654 );
655 $jsvars = array(
656 'nonce' => wp_create_nonce( 'asenha-' . get_current_user_id() ),
657 'siteUrl' => get_site_url(),
658 'wpcontentUrl' => content_url(),
659 'mediaFrameTitle' => __( 'Select an Image', 'admin-site-enhancements' ),
660 'mediaFrameButtonText' => __( 'Use Selected Image', 'admin-site-enhancements' ),
661 'resetMenuNonce' => wp_create_nonce( 'reset-menu-nonce' ),
662 'sendTestEmailNonce' => wp_create_nonce( 'send-test-email-nonce_' . get_current_user_id() ),
663 'formBuilderSendTestEmailNonce' => wp_create_nonce( 'formbuilder_ajax' ),
664 'expandText' => __( 'Expand', 'admin-site-enhancements' ),
665 'collapseText' => __( 'Collapse', 'admin-site-enhancements' ),
666 'dataTable' => array(
667 'emptyTable' => __( 'No data available in table', 'admin-site-enhancements' ),
668 'info' => __( 'Showing _START_ to _END_ of _TOTAL_ entries', 'admin-site-enhancements' ),
669 'infoEmpty' => __( 'Showing 0 to 0 of 0 entries', 'admin-site-enhancements' ),
670 'infoFiltered' => __( '(filtered from _MAX_ total entries)', 'admin-site-enhancements' ),
671 'lengthMenu' => __( 'Show _MENU_ entries', 'admin-site-enhancements' ),
672 'search' => __( 'Search:', 'admin-site-enhancements' ),
673 'zeroRecords' => __( 'No matching records found', 'admin-site-enhancements' ),
674 'paginate' => array(
675 'first' => __( 'First', 'admin-site-enhancements' ),
676 'last' => __( 'Last', 'admin-site-enhancements' ),
677 'next' => __( 'Next', 'admin-site-enhancements' ),
678 'previous' => __( 'Previous', 'admin-site-enhancements' ),
679 ),
680 ),
681 );
682 wp_localize_script( 'asenha-admin-page', 'adminPageVars', $jsvars );
683 }
684 // Enqueue on all wp-admin
685 wp_enqueue_style(
686 'asenha-wp-admin',
687 ASENHA_URL . 'assets/css/wp-admin.css',
688 array(),
689 ASENHA_VERSION
690 );
691 // Prevent left admin menu FOUC when Admin Logo / Admin Menu Organizer / Custom Content Types is enabled.
692 // Hide the admin menu (and admin menu logo container, if present) until DOM is ready.
693 if ( !is_network_admin() ) {
694 $enable_anti_fouc = false;
695 // Admin Interface >> Admin Menu Organizer (free).
696 if ( array_key_exists( 'customize_admin_menu', $options ) && $options['customize_admin_menu'] ) {
697 $enable_anti_fouc = true;
698 }
699 if ( $enable_anti_fouc ) {
700 wp_add_inline_style( 'asenha-wp-admin', '#admin_menu_logo,' . PHP_EOL . '#adminmenu {' . PHP_EOL . "\tvisibility: hidden;" . PHP_EOL . "\topacity: 0;" . PHP_EOL . "\tpointer-events: none;" . PHP_EOL . '}' . PHP_EOL );
701 // Ensure required scripts are loaded so the inline script can run.
702 wp_enqueue_script( 'jquery' );
703 wp_enqueue_script( 'svg-painter' );
704 wp_add_inline_script( 'wp-dom-ready', 'jQuery(document).ready(function() {' . PHP_EOL . "\tjQuery(\"#admin_menu_logo, #adminmenu\").css({ visibility: \"visible\", opacity: \"1\", pointerEvents: \"auto\" });" . PHP_EOL . "\tjQuery(document).trigger(\"wp-window-resized\");" . PHP_EOL . '});' . PHP_EOL, 'after' );
705 }
706 }
707 // Content Management >> Show IDs, for list tables in wp-admin, e.g. All Posts page
708 if ( false !== strpos( $current_screen->base, 'edit' ) || false !== strpos( $current_screen->base, 'users' ) || false !== strpos( $current_screen->base, 'upload' ) ) {
709 wp_enqueue_style(
710 'asenha-list-table',
711 ASENHA_URL . 'assets/css/list-table.css',
712 array(),
713 ASENHA_VERSION
714 );
715 }
716 // Content Management >> Enable Media Replacement
717 if ( $current_screen->base == 'upload' || $current_screen->id == 'attachment' ) {
718 // wp_enqueue_style( 'asenha-jbox', ASENHA_URL . 'assets/css/jBox.all.min.css', array(), ASENHA_VERSION );
719 // wp_enqueue_script( 'asenha-jbox', ASENHA_URL . 'assets/js/jBox.all.min.js', array(), ASENHA_VERSION, false );
720 wp_enqueue_style(
721 'asenha-media-replace',
722 ASENHA_URL . 'assets/css/media-replace.css',
723 array(),
724 ASENHA_VERSION
725 );
726 wp_enqueue_script(
727 'asenha-media-replace',
728 ASENHA_URL . 'assets/js/media-replace.js',
729 array(),
730 ASENHA_VERSION,
731 false
732 );
733 $media_replace = array(
734 'selectMediaText' => __( 'Select New Media File', 'admin-site-enhancements' ),
735 'performReplacementText' => __( 'Perform Replacement', 'admin-site-enhancements' ),
736 );
737 wp_localize_script( 'asenha-media-replace', 'mediaReplace', $media_replace );
738 }
739 // Admin Interface >> Admin Menu Organizer
740 if ( 'settings_page_admin-menu-organizer' == $current_screen->base ) {
741 // Re-register and re-enqueue jQuery UI Core and plugins required for sortable, draggable and droppable when ordering menu items
742 wp_deregister_script( 'jquery-ui-core' );
743 wp_register_script(
744 'jquery-ui-core',
745 get_site_url() . '/wp-includes/js/jquery/ui/core.min.js',
746 array('jquery'),
747 ASENHA_VERSION,
748 false
749 );
750 wp_enqueue_script( 'jquery-ui-core' );
751 if ( version_compare( $wp_version, '5.6.0', '>=' ) ) {
752 wp_deregister_script( 'jquery-ui-mouse' );
753 wp_register_script(
754 'jquery-ui-mouse',
755 get_site_url() . '/wp-includes/js/jquery/ui/mouse.min.js',
756 array('jquery-ui-core'),
757 ASENHA_VERSION,
758 false
759 );
760 wp_enqueue_script( 'jquery-ui-mouse' );
761 } else {
762 wp_deregister_script( 'jquery-ui-widget' );
763 wp_register_script(
764 'jquery-ui-widget',
765 get_site_url() . '/wp-includes/js/jquery/ui/widget.min.js',
766 array('jquery'),
767 ASENHA_VERSION,
768 false
769 );
770 wp_enqueue_script( 'jquery-ui-widget' );
771 wp_deregister_script( 'jquery-ui-mouse' );
772 wp_register_script(
773 'jquery-ui-mouse',
774 get_site_url() . '/wp-includes/js/jquery/ui/mouse.min.js',
775 array('jquery-ui-core', 'jquery-ui-widget'),
776 ASENHA_VERSION,
777 false
778 );
779 wp_enqueue_script( 'jquery-ui-mouse' );
780 }
781 wp_deregister_script( 'jquery-ui-sortable' );
782 wp_register_script(
783 'jquery-ui-sortable',
784 get_site_url() . '/wp-includes/js/jquery/ui/sortable.min.js',
785 array('jquery-ui-mouse'),
786 ASENHA_VERSION,
787 false
788 );
789 wp_enqueue_script( 'jquery-ui-sortable' );
790 wp_deregister_script( 'jquery-ui-draggable' );
791 wp_register_script(
792 'jquery-ui-draggable',
793 get_site_url() . '/wp-includes/js/jquery/ui/draggable.min.js',
794 array('jquery-ui-mouse'),
795 ASENHA_VERSION,
796 false
797 );
798 wp_enqueue_script( 'jquery-ui-draggable' );
799 wp_deregister_script( 'jquery-ui-droppable' );
800 wp_register_script(
801 'jquery-ui-droppable',
802 get_site_url() . '/wp-includes/js/jquery/ui/droppable.min.js',
803 array('jquery-ui-draggable'),
804 ASENHA_VERSION,
805 false
806 );
807 wp_enqueue_script( 'jquery-ui-droppable' );
808 // Script to set behaviour and actions of the sortable menu
809 wp_enqueue_script(
810 'asenha-custom-admin-menu',
811 ASENHA_URL . 'assets/js/custom-admin-menu.js',
812 array('jquery-ui-draggable'),
813 ASENHA_VERSION,
814 false
815 );
816 wp_enqueue_style(
817 'asenha-admin-menu-organizer',
818 ASENHA_URL . 'assets/css/admin-menu-organizer.css',
819 array(),
820 ASENHA_VERSION
821 );
822 wp_enqueue_script(
823 'asenha-admin-menu-organizer',
824 ASENHA_URL . 'assets/js/admin-menu-organizer.js',
825 array('asenha-custom-admin-menu'),
826 ASENHA_VERSION,
827 false
828 );
829 wp_localize_script( 'asenha-admin-menu-organizer', 'amoPageVars', array(
830 'saveMenuNonce' => wp_create_nonce( 'save-menu-nonce' ),
831 'resetMenuNonce' => wp_create_nonce( 'reset-menu-nonce' ),
832 ) );
833 }
834 // Utilities >> Email Delivery Log
835 if ( 'tools_page_email-delivery-log' == $hook_suffix ) {
836 wp_enqueue_style( 'jquery-ui-css', ASENHA_URL . 'assets/premium/css/jquery-ui/jquery-ui.min.css' );
837 wp_enqueue_style( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/css/email-delivery-log.css' );
838 wp_enqueue_script( 'jquery-ui' );
839 // wp_enqueue_script( 'jquery-ui-datepicker' );
840 wp_enqueue_script( 'jquery-ui-tabs' );
841 wp_enqueue_script( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/js/email-delivery-log.js' );
842 $nonce = wp_create_nonce( 'email-delivery-log' . get_current_user_id() );
843 wp_localize_script( 'asenha-email-delivery-log', 'emailLog', array(
844 'nonce' => $nonce,
845 ) );
846 }
847 // Utilities >> Image Sizes Panel∂
848 if ( 'post' == $current_screen->base && 'attachment' == $current_screen->id ) {
849 global $post;
850 // Only enqueue if the attachment is an image
851 if ( property_exists( $post, 'post_mime_type' ) && false !== strpos( $post->post_mime_type, 'image' ) ) {
852 wp_enqueue_style( 'asenha-image-sizes-panel', ASENHA_URL . 'assets/css/image-sizes-panel.css' );
853 }
854 }
855 // Code Snippets Manager
856 if ( 'post' == $current_screen->base && 'asenha_code_snippet' == $current_screen->id || 'edit' == $current_screen->base && 'edit-asenha_code_snippet' == $current_screen->id ) {
857 }
858 // Content Management >> Hide Admin Notices
859 if ( array_key_exists( 'hide_admin_notices', $options ) && $options['hide_admin_notices'] ) {
860 $hide_for_nonadmins = ( isset( $options['hide_admin_notices_for_nonadmins'] ) ? $options['hide_admin_notices_for_nonadmins'] : false );
861 $minimum_capability = 'manage_options';
862 if ( function_exists( 'bwasenha_fs' ) ) {
863 if ( $hide_for_nonadmins && bwasenha_fs()->can_use_premium_code__premium_only() ) {
864 $minimum_capability = 'read';
865 }
866 }
867 if ( current_user_can( $minimum_capability ) ) {
868 wp_enqueue_style(
869 'asenha-jbox',
870 ASENHA_URL . 'assets/css/jBox.all.min.css',
871 array(),
872 ASENHA_VERSION
873 );
874 wp_enqueue_script(
875 'asenha-jbox',
876 ASENHA_URL . 'assets/js/jBox.all.min.js',
877 array(),
878 ASENHA_VERSION,
879 false
880 );
881 wp_enqueue_style(
882 'asenha-hide-admin-notices',
883 ASENHA_URL . 'assets/css/hide-admin-notices.css',
884 array(),
885 ASENHA_VERSION
886 );
887 wp_enqueue_script(
888 'asenha-hide-admin-notices',
889 ASENHA_URL . 'assets/js/hide-admin-notices.js',
890 array('asenha-jbox'),
891 ASENHA_VERSION,
892 false
893 );
894 }
895 }
896 // Utilities >> Multiple User Roles
897 if ( array_key_exists( 'multiple_user_roles', $options ) && $options['multiple_user_roles'] ) {
898 if ( 'user-edit.php' == $hook_suffix || 'user-new.php' == $hook_suffix ) {
899 // Only replace roles dropdown with checkboxes for users that can assign roles to other users, e.g. administrators
900 if ( current_user_can( 'promote_users', get_current_user_id() ) ) {
901 wp_enqueue_script(
902 'asenha-multiple-user-roles',
903 ASENHA_URL . 'assets/js/multiple-user-roles.js',
904 array('jquery'),
905 ASENHA_VERSION,
906 false
907 );
908 }
909 }
910 }
911 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
912 $hide_promo_nudge = false;
913 $is_yearend_promo_period = is_yearend_promo_period();
914 // Pass on ASENHA stats to admin-page.js to determine whether to show support nudge
915 $current_date = date( 'Y-m-d', time() );
916 $show_support_nudge = false;
917 $asenha_stats_localized = array(
918 'firstSaveDate' => '',
919 'lastSaveDate' => '',
920 'saveCount' => 0,
921 'hideUpgradeNudge' => false,
922 'hidePromoNudge' => false,
923 'showSupportNudge' => false,
924 );
925 if ( !empty( $asenha_stats ) ) {
926 $hide_upgrade_nudge = ( isset( $asenha_stats['upgrade_nudge_dismissed'] ) ? $asenha_stats['upgrade_nudge_dismissed'] : false );
927 $hide_promo_nudge = ( isset( $asenha_stats['promo_nudge_dismissed'] ) ? $asenha_stats['promo_nudge_dismissed'] : false );
928 $have_supported = ( isset( $asenha_stats['have_supported'] ) ? $asenha_stats['have_supported'] : false );
929 $changes_saved = ( isset( $_GET['settings-updated'] ) && 'true' == sanitize_text_field( $_GET['settings-updated'] ) ? true : false );
930 $save_count = ( isset( $asenha_stats['save_count'] ) ? $asenha_stats['save_count'] : 0 );
931 // Compensate for redirect from settings-updated=true URL
932 if ( $changes_saved ) {
933 $save_count = $save_count + 1;
934 } else {
935 $save_count = $save_count;
936 }
937 $saves_to_nudge_support = 10;
938 if ( $save_count < $saves_to_nudge_support ) {
939 $save_count_modulo = -1;
940 } else {
941 $save_count_modulo = $save_count % $saves_to_nudge_support;
942 }
943 // User have not supported ASE
944 if ( false === $have_supported ) {
945 // Support nudge have not been dismissed
946 if ( isset( $asenha_stats['support_nudge_dismissed'] ) && false === $asenha_stats['support_nudge_dismissed'] ) {
947 // Show support nudge after every x saves
948 if ( $save_count_modulo >= 0 ) {
949 $show_support_nudge = true;
950 } else {
951 $show_support_nudge = false;
952 }
953 if ( $show_support_nudge && $save_count_modulo >= 0 ) {
954 $asenha_stats['support_nudge_last_shown_date'] = $current_date;
955 $asenha_stats['support_nudge_last_shown_save_count'] = $save_count;
956 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
957 }
958 } else {
959 if ( $save_count_modulo == 0 ) {
960 $support_nudge_last_shown_save_count = ( isset( $asenha_stats['support_nudge_last_shown_save_count'] ) ? $asenha_stats['support_nudge_last_shown_save_count'] : 0 );
961 if ( $save_count > $support_nudge_last_shown_save_count ) {
962 $asenha_stats['support_nudge_dismissed'] = false;
963 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
964 $show_support_nudge = true;
965 } else {
966 $show_support_nudge = false;
967 }
968 } else {
969 $show_support_nudge = false;
970 }
971 }
972 }
973 $first_save_date = ( isset( $asenha_stats['first_save_date'] ) ? $asenha_stats['first_save_date'] : '' );
974 $last_save_date = ( isset( $asenha_stats['last_save_date'] ) ? $asenha_stats['last_save_date'] : '' );
975 $asenha_stats_localized = array(
976 'firstSaveDate' => $first_save_date,
977 'lastSaveDate' => $last_save_date,
978 'saveCount' => $save_count,
979 'isYearEndPromoPeriod' => $is_yearend_promo_period,
980 'hideUpgradeNudge' => $hide_upgrade_nudge,
981 'hidePromoNudge' => $hide_promo_nudge,
982 'showSupportNudge' => $show_support_nudge,
983 );
984 }
985 wp_localize_script( 'asenha-admin-page', 'asenhaStats', $asenha_stats_localized );
986 }
987
988 /**
989 * Inline CSS for Admin Menu Organizer in all wp-admin pages. Previously loaded externally as part of wp-admin.css file
990 *
991 * @since 7.6.11
992 */
993 function asenha_admin_menu_organizer_css() {
994 ?>
995 <style type="text/css">
996 /* Admin Interface >> Admin Menu Organizer */
997 #adminmenuwrap {
998 height: auto !important;
999 }
1000
1001 .toplevel_page_wpide #adminmenuwrap {
1002 height: calc(100vh - var(--wpide-admin-bar-height)) !important;
1003 } /* Fix for when in WPIDE plugin's menu / admin page */
1004
1005 .current.menu-top.hidden,
1006 .wp-has-current-submenu.hidden {
1007 display: list-item;
1008 }
1009
1010 #adminmenu a.menu-top.hidden,
1011 ul#adminmenu a.wp-has-current-submenu.hidden {
1012 display: block;
1013 }
1014
1015 /*! <fs_premium_only> */
1016 .always-hidden {
1017 display: none !important;
1018 }
1019
1020 #adminmenu .wp-submenu a.hidden {
1021 display: none;
1022 }
1023 /*! </fs_premium_only> */
1024 </style>
1025 <?php
1026 }
1027
1028 /**
1029 * Dequeue scripts that prevents ASE settings page from working properly. Usually from plugins.
1030 *
1031 * @since 6.3.3
1032 */
1033 function asenha_dequeue_scritps() {
1034 if ( is_asenha() ) {
1035 // https://wordpress.org/plugins/user-activity-log/
1036 wp_dequeue_script( 'chats-js' );
1037 wp_dequeue_script( 'custom_wp_admin_js' );
1038 // https://wordpress.org/plugins/print-invoices-packing-slip-labels-for-woocommerce/
1039 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce' );
1040 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce-form-wizard' );
1041 // https://wordpress.org/plugins/wp-reading-progress/
1042 wp_dequeue_script( 'ruigehond006_admin_javascript' );
1043 // WordPress Mentions Légales plugin v1.2.3 by Jean-Baptiste Aramendy - http://jba-development.fr/
1044 wp_dequeue_script( 'jquery-ui' );
1045 wp_dequeue_script( 'wordpress-mentions-legales' );
1046 // https://wordpress.org/plugins/us-weather-widget-willyweather/
1047 wp_dequeue_script( 'self' );
1048 // iThemes Security Pro / Solid Security Pro
1049 wp_dequeue_script( 'itsec-core-admin-notices' );
1050 // WPML
1051 wp_dequeue_script( 'wpml-ate-jobs-sync-ui' );
1052 wp_dequeue_script( 'wpml-purify' );
1053 wp_dequeue_script( 'sitepress-scripts' );
1054 wp_dequeue_script( 'sitepress' );
1055 wp_dequeue_script( 'wpml-dismiss-notice' );
1056 wp_dequeue_script( 'wpml-tm-scripts' );
1057 wp_dequeue_script( 'otgs-installer-components-save-setting' );
1058 wp_dequeue_script( 'installer-dismiss-nag' );
1059 wp_dequeue_script( 'install-recommended_plugin' );
1060 wp_dequeue_script( 'icl-admin-notifier' );
1061 wp_dequeue_script( 'otgsPopoverTooltip' );
1062 // WPML String Translation
1063 wp_dequeue_script( 'wpml-theme-plugin-localization-scan' );
1064 // Asset Cleanup
1065 wp_dequeue_script( 'wpassetcleanup-script' );
1066 }
1067 }
1068
1069 /**
1070 * Enqueue public scripts
1071 *
1072 * @since 3.9.0
1073 */
1074 function asenha_public_scripts( $hook_suffix ) {
1075 // Get all WP Enhancements options, default to empty array in case it's not been created yet
1076 $options = get_option( 'admin_site_enhancements', array() );
1077 // External Permalinks
1078 $enable_external_permalinks = ( array_key_exists( 'enable_external_permalinks', $options ) ? $options['enable_external_permalinks'] : false );
1079 if ( $enable_external_permalinks ) {
1080 wp_enqueue_script(
1081 'asenha-public',
1082 ASENHA_URL . 'assets/js/external-permalinks.js',
1083 array(),
1084 ASENHA_VERSION,
1085 false
1086 );
1087 wp_localize_script( 'asenha-public', 'phpVars', array(
1088 'externalPermalinksEnabled' => $enable_external_permalinks,
1089 ) );
1090 }
1091 // Media Categories
1092 $enable_media_categories = ( array_key_exists( 'enable_media_categories', $options ) ? $options['enable_media_categories'] : false );
1093 if ( $enable_media_categories && !is_admin() && is_user_logged_in() ) {
1094 wp_enqueue_style(
1095 'asenha-media-categories-frontend',
1096 ASENHA_URL . 'assets/css/media-categories-frontend.css',
1097 array(),
1098 ASENHA_VERSION
1099 );
1100 }
1101 // Media Replacement
1102 $enable_media_replacement = ( array_key_exists( 'enable_media_replacement', $options ) ? $options['enable_media_replacement'] : false );
1103 if ( $enable_media_replacement && !is_admin() && is_user_logged_in() ) {
1104 wp_enqueue_style(
1105 'asenha-media-replace-frontend',
1106 ASENHA_URL . 'assets/css/media-replace-frontend.css',
1107 array(),
1108 ASENHA_VERSION
1109 );
1110 }
1111 }
1112
1113 /**
1114 * Add admin bar styles for wp-admin and frontend
1115 *
1116 * @since 6.2.1
1117 */
1118 function asenha_admin_bar_item_js_css() {
1119 if ( is_user_logged_in() ) {
1120 ?>
1121 <!--<script></script>-->
1122 <style>
1123 #wp-admin-bar-user-info .avatar {
1124 object-fit: cover;
1125 }
1126 </style>
1127 <?php
1128 }
1129 }
1130
1131 /**
1132 * Add 'Access now' plugin action link.
1133 *
1134 * @since 1.0.0
1135 */
1136 function asenha_plugin_action_links( $links ) {
1137 $settings_link = '<a href="tools.php?page=' . ASENHA_SLUG . '">' . __( 'Configure', 'admin-site-enhancements' ) . '</a>';
1138 array_unshift( $links, $settings_link );
1139 return $links;
1140 }
1141
1142 /**
1143 * Modify footer text
1144 *
1145 * @since 1.0.0
1146 */
1147 function asenha_footer_text() {
1148 // Show nothing
1149 ?>
1150 <?php
1151 }
1152
1153 /**
1154 * Change WP version number text in footer
1155 *
1156 * @since 4.8.3
1157 */
1158 function asenha_footer_version_text() {
1159 ?>
1160 ASE <a href="https://www.wpase.com/documentation/changelog/" target="_blank">v<?php
1161 echo esc_html( ASENHA_VERSION );
1162 ?></a>
1163 <?php
1164 }
1165
1166 /**
1167 * Check if current screen is this plugin's main page
1168 *
1169 * @since 1.0.0
1170 */
1171 function is_asenha() {
1172 $request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
1173 // e.g. /wp-admin/index.php?page=page-slug
1174 if ( strpos( $request_uri, 'page=' . ASENHA_SLUG ) !== false ) {
1175 return true;
1176 // Yes, this is the plugin's main page
1177 } else {
1178 return false;
1179 // Nope, this is NOT the plugin's page
1180 }
1181 }
1182
1183 /**
1184 * Mark that user have supported ASE
1185 *
1186 * @since 5.2.7
1187 */
1188 function asenha_have_supported() {
1189 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1190 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1191 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1192 $asenha_stats['have_supported'] = true;
1193 $asenha_stats['support_nudge_dismissed'] = true;
1194 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1195 if ( $success ) {
1196 echo json_encode( array(
1197 'success' => true,
1198 ) );
1199 } else {
1200 echo json_encode( array(
1201 'success' => false,
1202 ) );
1203 }
1204 }
1205 }
1206 }
1207
1208 /**
1209 * Dismiss support nudge
1210 *
1211 * @since 5.8.2
1212 */
1213 function asenha_dismiss_upgrade_nudge() {
1214 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1215 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1216 $current_date = date( 'Y-m-d', time() );
1217 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1218 $asenha_stats['upgrade_nudge_dismissed'] = true;
1219 $asenha_stats['upgrade_nudge_dismissed_date'] = $current_date;
1220 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1221 if ( $success ) {
1222 echo json_encode( array(
1223 'success' => true,
1224 ) );
1225 } else {
1226 echo json_encode( array(
1227 'success' => false,
1228 ) );
1229 }
1230 }
1231 }
1232 }
1233
1234 /**
1235 * Dismiss promo nudge
1236 *
1237 * @since 7.5.1
1238 */
1239 function asenha_dismiss_promo_nudge() {
1240 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1241 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1242 $current_date = date( 'Y-m-d', time() );
1243 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1244 $asenha_stats['promo_nudge_dismissed'] = true;
1245 $asenha_stats['promo_nudge_dismissed_date'] = $current_date;
1246 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1247 if ( $success ) {
1248 echo json_encode( array(
1249 'success' => true,
1250 ) );
1251 } else {
1252 echo json_encode( array(
1253 'success' => false,
1254 ) );
1255 }
1256 }
1257 }
1258 }
1259
1260 /**
1261 * Dismiss support nudge
1262 *
1263 * @since 5.2.7
1264 */
1265 function asenha_dismiss_support_nudge() {
1266 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1267 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1268 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1269 $asenha_stats['support_nudge_dismissed'] = true;
1270 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1271 if ( $success ) {
1272 echo json_encode( array(
1273 'success' => true,
1274 ) );
1275 } else {
1276 echo json_encode( array(
1277 'success' => false,
1278 ) );
1279 }
1280 }
1281 }
1282 }
1283