PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 7.8.18
Admin and Site Enhancements (ASE) v7.8.18
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 1 year ago classes 1 year ago includes 1 year ago languages 1 year ago vendor 1 year ago CHANGELOG.md 1 year ago LICENSE.md 1 year ago README.md 1 year ago admin-site-enhancements.php 1 year ago bootstrap.php 1 year ago functions.php 1 year ago settings.php 1 year ago
settings.php
1240 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( ASENHA_SLUG_U, array(), true );
10 }
11 if ( false === get_option( ASENHA_SLUG_U . '_stats' ) ) {
12 add_option( ASENHA_SLUG_U . '_stats', array(), false );
13 }
14 if ( false === get_option( ASENHA_SLUG_U . '_extra' ) ) {
15 add_option( ASENHA_SLUG_U . '_extra', array(), true );
16 }
17 // Bugfix in v7.1.2 for Custom Content Type module
18 $options_extra = get_option( ASENHA_SLUG_U . '_extra', array() );
19 if ( !isset( $options_extra['cfgroup_next_field_id'] ) ) {
20 $options_extra['cfgroup_next_field_id'] = 1;
21 update_option( ASENHA_SLUG_U . '_extra', $options_extra, true );
22 }
23 // Move Admin Menu Organizer options storage to extra table since v7.8.5
24 if ( !isset( $options_extra['admin_menu'] ) ) {
25 $options = get_option( ASENHA_SLUG_U, array() );
26 $options_extra['admin_menu']['custom_menu_order'] = ( isset( $options['custom_menu_order'] ) ? $options['custom_menu_order'] : '' );
27 unset($options['custom_menu_order']);
28 $options_extra['admin_menu']['custom_menu_titles'] = ( isset( $options['custom_menu_titles'] ) ? $options['custom_menu_titles'] : '' );
29 unset($options['custom_menu_titles']);
30 $options_extra['admin_menu']['custom_menu_hidden'] = ( isset( $options['custom_menu_hidden'] ) ? trim( $options['custom_menu_hidden'], ',' ) : '' );
31 unset($options['custom_menu_hidden']);
32 update_option( ASENHA_SLUG_U . '_extra', $options_extra, true );
33 update_option( ASENHA_SLUG_U, $options, true );
34 }
35 /**
36 * Register admin menu
37 *
38 * @since 1.0.0
39 */
40 function asenha_register_admin_menu() {
41 add_submenu_page(
42 'tools.php',
43 // Parent page/menu
44 'Admin and Site Enhancements',
45 // Browser tab/window title
46 __( 'Enhancements', 'admin-site-enhancements' ),
47 // Sube menu title
48 'manage_options',
49 // Minimal user capabililty
50 ASENHA_SLUG,
51 // Page slug. Shows up in URL.
52 'asenha_add_settings_page'
53 );
54 }
55
56 /**
57 * Create the settings page of the plugin
58 *
59 * @since 1.0.0
60 */
61 function asenha_add_settings_page() {
62 $options = get_option( ASENHA_SLUG_U, array() );
63 ?>
64 <div class="wrap asenha">
65
66 <div id="asenha-header" class="asenha-header">
67 <div class="asenha-header-left">
68 <img src="<?php
69 echo esc_html( ASENHA_URL ) . 'assets/img/ase_icon.png';
70 ?>" class="asenha-icon"/>
71 <h1 class="asenha-heading">
72 <?php
73 echo esc_html( get_admin_page_title() );
74 ?>
75 (ASE)
76 <?php
77 ?>
78 </h1>
79 <input id="module-search-input" type="search" placeholder="<?php
80 echo esc_attr__( 'Search...', 'admin-site-enhancements' );
81 ?>" />
82 <!-- <a href="https://wordpress.org/plugins/admin-site-enhancements/" target="_blank" class="asenha-header-action"><span>&#8505;</span> <?php
83 // esc_html_e( 'Info', 'admin-site-enhancements' );
84 ?></a> -->
85 </div>
86 <div class="asenha-header-right">
87 <?php
88 // https://icon-sets.iconify.design/iconamoon/star-bold/
89 $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>';
90 // https://icon-sets.iconify.design/octicon/question-16/
91 $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>';
92 // https://icon-sets.iconify.design/octicon/comment-16/
93 $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>';
94 // https://icon-sets.iconify.design/ic/baseline-translate/
95 $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>';
96 // https://icon-sets.iconify.design/iconamoon/file-document/
97 $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>';
98 // https://icon-sets.iconify.design/pajamas/heart/
99 $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>';
100 ?>
101 <a href="https://wordpress.org/plugins/admin-site-enhancements/#reviews" target="_blank" class="asenha-header-action review"><?php
102 echo wp_kses( $svg_star, get_kses_with_svg_ruleset() ) . esc_html__( 'Review', 'admin-site-enhancements' );
103 ?></a>
104 <a href="https://wordpress.org/support/plugin/admin-site-enhancements/" target="_blank" class="asenha-header-action feedback"><?php
105 echo wp_kses( $svg_feedback, get_kses_with_svg_ruleset() ) . esc_html__( 'Feedback', 'admin-site-enhancements' );
106 ?></a>
107 <a href="https://www.wpase.com/trnslt-plgnhdr" target="_blank" class="asenha-header-action translate"><?php
108 echo wp_kses( $svg_translate, get_kses_with_svg_ruleset() ) . esc_html__( 'Translate', 'admin-site-enhancements' );
109 ?></a>
110 <!--<a href="https://www.wpasenha.com/docs/" target="_blank" class="asenha-header-action docs"><?php
111 // echo $svg_docs . esc_html__( 'Docs', 'admin-site-enhancements' );
112 ?></a>-->
113 <!--<a id="plugin-sponsor" href="#" class="asenha-header-action sponsor"><?php
114 // echo $svg_sponsor . esc_html__( 'Sponsor', 'admin-site-enhancements' );
115 ?></a>-->
116 <a href="https://www.wpase.com/upgrade-btn" target="_blank" id="plugin-upgrade" class="button button-primary plugin-upgrade"><?php
117 echo esc_html__( 'Get ASE Pro', 'admin-site-enhancements' );
118 ?></a>
119 <?php
120 ?>
121 <a class="button button-primary asenha-save-button"><?php
122 echo esc_html__( 'Save Changes', 'admin-site-enhancements' );
123 ?></a>
124 <!-- https://icon-sets.iconify.design/svg-spinners/180-ring-with-bg/ -->
125 <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>
126 <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>
127 </div>
128 </div>
129
130 <div class="asenha-body">
131 <?php
132 $is_yearend_promo_period = is_yearend_promo_period();
133 ?>
134 <?php
135 if ( $is_yearend_promo_period ) {
136 ?>
137 <!-- <div class="asenha-upgrade-nudge" style="display: none;">
138 <div class="asenha-upgrade-nudge__message"><?php
139 // echo esc_html__( 'Lifetime Deal (LTD) is available for the Pro version of ASE.', 'admin-site-enhancements' );
140 ?></div>
141 <a href="https://www.wpase.com/upgrade-ndg" class="button asenha-upgrade-nudge__button" target="_blank"><?php
142 // echo esc_html__( 'Find Out More', 'admin-site-enhancements' );
143 ?></a>
144 <a href="#" id="dismiss-upgrade-nudge" class="asenha-upgrade-nudge__dismiss">
145 <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>
146 </a>
147 </div> -->
148 <div class="asenha-promo-nudge" style="display: none;">
149 <div class="asenha-promo-nudge__message"><?php
150 echo esc_html__( 'ASE Pro YEAR-END SALE! 20% DISCOUNT. Lifetime Deal (LTD) available.', 'admin-site-enhancements' );
151 ?></div>
152 <a href="https://www.wpase.com/promo-ndg" class="button asenha-promo-nudge__button" target="_blank"><?php
153 echo esc_html__( 'Get It Now', 'admin-site-enhancements' );
154 ?></a>
155 <a href="#" id="dismiss-promo-nudge" class="asenha-promo-nudge__dismiss">
156 <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>
157 </a>
158 </div>
159 <?php
160 } else {
161 ?>
162 <div class="asenha-upgrade-nudge" style="display: none;">
163 <div class="asenha-upgrade-nudge__message"><?php
164 echo esc_html__( 'Lifetime Deal (LTD) is available for the Pro version of ASE.', 'admin-site-enhancements' );
165 ?></div>
166 <a href="https://www.wpase.com/upgrade-ndg" class="button asenha-upgrade-nudge__button" target="_blank"><?php
167 echo esc_html__( 'Find Out More', 'admin-site-enhancements' );
168 ?></a>
169 <a href="#" id="dismiss-upgrade-nudge" class="asenha-upgrade-nudge__dismiss">
170 <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>
171 </a>
172 </div>
173 <?php
174 }
175 ?>
176 <?php
177 ?>
178 <div class="asenha-support-nudge nudge-show-more is-enabled" style="display: none;">
179 <h3><?php
180 _e( 'Looks like some of these free enhancements have been useful for your site?', 'admin-site-enhancements' );
181 ?></h3>
182 <p class="nudge-description intro"><?php
183 _e( 'Please consider supporting ASE.', 'admin-site-enhancements' );
184 ?></p>
185 <div class="nudge-content">
186 <div class="nudge-primary">
187 <h4><?php
188 _e( 'Write a quick, 5-star review for ASE', 'admin-site-enhancements' );
189 ?></h4>
190 <div class="nudge-ctas">
191 <a href="https://wordpress.org/plugins/admin-site-enhancements/#reviews" target="_blank" class="button button-outline asenha-review-button"><?php
192 _e( 'Add Your Review', 'admin-site-enhancements' );
193 ?></a>
194 <a href="#" id="have-reviewed" class="asenha-have-supported"><?php
195 _e( 'I\'ve reviewed', 'admin-site-enhancements' );
196 ?></a>
197 </div>
198 <p class="nudge-description"><?php
199 _e( 'Or, help improve ASE by <a href="https://wordpress.org/support/plugin/admin-site-enhancements/" target="_blank">providing feedback</a>.', 'admin-site-enhancements' );
200 ?></p>
201 </div>
202 <div class="nudge-secondary">
203 <h4><?php
204 _e( 'Share about ASE on:', 'admin-site-enhancements' );
205 ?></h4>
206 <div class="nudge-ctas">
207 <a href="https://www.facebook.com/sharer.php?u=<?php
208 echo urlencode( 'https://www.wpase.com' );
209 ?>" target="_blank" class="button button-outline asenha-share-button"><?php
210 _e( 'Facebook', 'admin-site-enhancements' );
211 ?></a>
212 <a href="https://twitter.com/intent/post?url=<?php
213 echo urlencode( 'https://www.wpase.com' );
214 ?>&text=<?php
215 echo esc_attr( urlencode( 'Admin and Site Enhancements (ASE)' ) );
216 ?>" target="_blank" class="button button-outline asenha-share-button"><?php
217 _e( 'X / Twitter', 'admin-site-enhancements' );
218 ?></a>
219 <a href="https://www.wpase.com/video-reviews/" target="_blank" class="button button-outline asenha-share-button"><?php
220 _e( 'YouTube', 'admin-site-enhancements' );
221 ?></a>
222 <a href="#" id="have-shared" class="asenha-have-supported"><?php
223 _e( 'I\'ve shared', 'admin-site-enhancements' );
224 ?></a>
225 </div>
226 <div class="nudge-info">
227 <p class="nudge-description"><?php
228 _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' );
229 ?></p>
230 </div>
231 </div>
232 </div>
233 <div class="dismiss-support-nudge"><a href="#" id="support-nudge-dismiss" class="asenha-support-nudge-dismiss"><?php
234 _e( 'Dismiss', 'admin-site-enhancements' );
235 ?></a></div>
236 </div>
237 <?php
238 ?>
239 <form action="options.php" method="post">
240 <div class="asenha-vertical-tabs">
241 <div class="asenha-tab-buttons">
242 <?php
243 // https://icon-sets.iconify.design/mdi/database-check-outline/ -- db check
244 // https://icon-sets.iconify.design/mdi/file-document-box-multiple-outline/ -- docs
245 // https://icon-sets.iconify.design/fluent/content-view-28-regular/ -- content
246 // https://icon-sets.iconify.design/lucide/shapes/ -- shapes
247 $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>';
248 // https://icon-sets.iconify.design/mingcute/layout-line/
249 $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>';
250 // https://icon-sets.iconify.design/ri/login-circle-line/
251 $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>';
252 // https://icon-sets.iconify.design/mingcute/code-line/
253 $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>';
254 // https://icon-sets.iconify.design/mdi/forbid/
255 $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>';
256 // https://icon-sets.iconify.design/jam/shield-check/
257 $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>';
258 // https://icon-sets.iconify.design/streamline/image-flash-1-flash-power-connect-charge-electricity-lightning/
259 $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>';
260 // https://icon-sets.iconify.design/iconoir/tools/
261 $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>';
262 ?>
263 <input id="tab-content-management" type="radio" name="tabs" checked><label for="tab-content-management" class="modules-tab"><?php
264 echo wp_kses( $icon_content_management, get_kses_with_svg_ruleset() );
265 ?><span><?php
266 echo esc_html__( 'Content Management', 'admin-site-enhancements' );
267 ?></span></label>
268 <input id="tab-admin-interface" type="radio" name="tabs"><label for="tab-admin-interface" class="modules-tab"><?php
269 echo wp_kses( $icon_admin_interface, get_kses_with_svg_ruleset() );
270 ?><span><?php
271 echo esc_html__( 'Admin Interface', 'admin-site-enhancements' );
272 ?></span></label>
273 <input id="tab-login-logout" type="radio" name="tabs"><label for="tab-login-logout" class="modules-tab"><?php
274 echo wp_kses( $icon_login_logout, get_kses_with_svg_ruleset() );
275 ?><span><?php
276 echo esc_html__( 'Log In/Out | Register', 'admin-site-enhancements' );
277 ?></span></label>
278 <input id="tab-custom-code" type="radio" name="tabs"><label for="tab-custom-code" class="modules-tab"><?php
279 echo wp_kses( $icon_custom_code, get_kses_with_svg_ruleset() );
280 ?><span><?php
281 echo esc_html__( 'Custom Code', 'admin-site-enhancements' );
282 ?></span></label>
283 <input id="tab-disable-components" type="radio" name="tabs"><label for="tab-disable-components" class="modules-tab"><?php
284 echo wp_kses( $icon_disable_components, get_kses_with_svg_ruleset() );
285 ?><span><?php
286 echo esc_html__( 'Disable Components', 'admin-site-enhancements' );
287 ?></span></label>
288 <input id="tab-security" type="radio" name="tabs"><label for="tab-security" class="modules-tab"><?php
289 echo wp_kses( $icon_security, get_kses_with_svg_ruleset() );
290 ?><span><?php
291 echo esc_html__( 'Security', 'admin-site-enhancements' );
292 ?></span></label>
293 <input id="tab-optimizations" type="radio" name="tabs"><label for="tab-optimizations" class="modules-tab"><?php
294 echo wp_kses( $icon_optimizations, get_kses_with_svg_ruleset() );
295 ?><span><?php
296 echo esc_html__( 'Optimizations', 'admin-site-enhancements' );
297 ?></span></label>
298 <input id="tab-utilities" type="radio" name="tabs"><label for="tab-utilities" class="modules-tab"><?php
299 echo wp_kses( $icon_utilities, get_kses_with_svg_ruleset() );
300 ?><span><?php
301 echo esc_html__( 'Utilities', 'admin-site-enhancements' );
302 ?></span></label>
303 <label for="tab-search" class="search-tab" style="display:none;height:52px;"><span><?php
304 echo esc_html__( 'Search results:', 'admin-site-enhancements' );
305 ?></span></label>
306 </div>
307 <div class="asenha-tab-contents">
308 <section class="asenha-fields fields-content-management">
309 <table class="form-table" role="presentation">
310 <tbody></tbody>
311 </table>
312 </section>
313 <section class="asenha-fields fields-admin-interface">
314 <table class="form-table" role="presentation">
315 <tbody></tbody>
316 </table>
317 </section>
318 <section class="asenha-fields fields-login-logout">
319 <table class="form-table" role="presentation">
320 <tbody></tbody>
321 </table>
322 </section>
323 <section class="asenha-fields fields-custom-code">
324 <table class="form-table" role="presentation">
325 <tbody></tbody>
326 </table>
327 </section>
328 <section class="asenha-fields fields-disable-components">
329 <table class="form-table" role="presentation">
330 <tbody></tbody>
331 </table>
332 </section>
333 <section class="asenha-fields fields-security">
334 <table class="form-table" role="presentation">
335 <tbody></tbody>
336 </table>
337 </section>
338 <section class="asenha-fields fields-optimizations">
339 <table class="form-table" role="presentation">
340 <tbody></tbody>
341 </table>
342 </section>
343 <section class="asenha-fields fields-utilities">
344 <table class="form-table" role="presentation">
345 <tbody></tbody>
346 </table>
347 </section>
348 </div>
349 </div>
350 <div style="display:none;"><!-- Hide to prevent flash of fields appearing at the bottom of the page -->
351 <?php
352 settings_fields( ASENHA_ID );
353 ?>
354 <?php
355 do_settings_sections( ASENHA_SLUG );
356 ?>
357 <?php
358 submit_button(
359 __( 'Save Changes', 'admin-site-enhancements' ),
360 // Button copy
361 'primary',
362 // Type: 'primary', 'small', or 'large'
363 'submit',
364 // The 'name' attribute
365 true,
366 // Whether to wrap in <p> tag
367 array(
368 'id' => 'asenha-submit',
369 )
370 );
371 ?>
372 </div>
373 </form>
374 <?php
375 ?>
376 <div id="bottom-upgrade-nudge" class="asenha-upgrade-nudge-bottom" style="display:none;">
377 <div class="asenha-upgrade-nudge-bottom__message"><?php
378 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' );
379 ?> <?php
380 if ( $is_yearend_promo_period ) {
381 echo __( 'Currently on YEAR-END SALE. <a href="https://www.wpase.com/promo-ndg" target="_blank">20% discount</a>.', 'admin-site-enhancements' );
382 }
383 ?></div>
384 </div>
385 <?php
386 ?>
387 </div>
388
389 <?php
390 ?>
391
392 </div>
393 <?php
394 // Record the number of times changes were saved as well as the date of last save
395 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
396 $changes_saved = ( isset( $_GET['settings-updated'] ) && 'true' == $_GET['settings-updated'] ? true : false );
397 if ( $changes_saved ) {
398 $current_date = date( 'Y-m-d', time() );
399 if ( !isset( $asenha_stats['first_save_date'] ) ) {
400 $asenha_stats['first_save_date'] = $current_date;
401 $asenha_stats['last_save_date'] = $current_date;
402 $asenha_stats['save_count'] = 1;
403 $asenha_stats['have_supported'] = false;
404 $asenha_stats['support_nudge_dismissed'] = false;
405 $asenha_stats['support_nudge_last_shown_date'] = '';
406 $asenha_stats['support_nudge_last_shown_save_count'] = 0;
407 } else {
408 $asenha_stats['last_save_date'] = $current_date;
409 $save_count = $asenha_stats['save_count'];
410 $save_count++;
411 $asenha_stats['save_count'] = $save_count;
412 }
413 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
414 }
415 }
416
417 /**
418 * Check whether it's the year-end promo period
419 *
420 * @since 7.8.11
421 */
422 function is_yearend_promo_period() {
423 $current_month = intval( date( 'n', time() ) );
424 // n is for numeric value of month, 1 to 12
425 if ( $current_month >= 10 ) {
426 $is_yearend_promo_period = true;
427 } else {
428 $is_yearend_promo_period = false;
429 }
430 return $is_yearend_promo_period;
431 }
432
433 /**
434 * Suppress all notices, then add notice for successful settings update
435 *
436 * @since 1.1.0
437 */
438 function asenha_suppress_add_notices() {
439 global $plugin_page;
440 // Suppress all notices
441 if ( ASENHA_SLUG === $plugin_page ) {
442 remove_all_actions( 'admin_notices' );
443 }
444 // Add notice for successful settings update
445 if ( isset( $_GET['page'] ) && ASENHA_SLUG == $_GET['page'] && isset( $_GET['settings-updated'] ) && true == $_GET['settings-updated'] ) {
446 ?>
447 <script>
448 jQuery(document).ready( function() {
449 jQuery('.asenha-changes-saved').fadeIn(400).delay(2500).fadeOut(400);
450 });
451 </script>
452
453 <?php
454 }
455 }
456
457 /**
458 * Suppress all generic notices on the plugin settings page
459 *
460 * @since 2.7.0
461 */
462 function asenha_suppress_generic_notices() {
463 global $plugin_page;
464 // Suppress all notices
465 if ( ASENHA_SLUG === $plugin_page ) {
466 remove_all_actions( 'all_admin_notices' );
467 }
468 }
469
470 /**
471 * Enqueue admin scripts
472 *
473 * @since 1.0.0
474 */
475 function asenha_admin_scripts( $hook_suffix ) {
476 global
477 $wp_version,
478 $pagenow,
479 $typenow,
480 $taxnow,
481 $hook_suffix,
482 $current_user
483 ;
484 $current_screen = get_current_screen();
485 // Get all WP Enhancements options, default to empty array in case it's not been created yet
486 $options = get_option( 'admin_site_enhancements', array() );
487 // For main page of this plugin
488 if ( is_asenha() ) {
489 wp_enqueue_style(
490 'asenha-jbox',
491 ASENHA_URL . 'assets/css/jBox.all.min.css',
492 array(),
493 ASENHA_VERSION
494 );
495 wp_enqueue_script(
496 'asenha-jbox',
497 ASENHA_URL . 'assets/js/jBox.all.min.js',
498 array(),
499 ASENHA_VERSION,
500 false
501 );
502 wp_enqueue_script(
503 'asenha-jsticky',
504 ASENHA_URL . 'assets/js/jquery.jsticky.mod.min.js',
505 array('jquery'),
506 ASENHA_VERSION,
507 false
508 );
509 wp_enqueue_script(
510 'asenha-js-cookie',
511 ASENHA_URL . 'assets/js/js.cookie.min.js',
512 array(),
513 ASENHA_VERSION,
514 false
515 );
516 // First, we unload the CodeMirror libraries included in WP core
517 wp_deregister_script( 'wp-codemirror' );
518 wp_deregister_script( 'code-editor' );
519 wp_deregister_script( 'htmlhint' );
520 wp_deregister_script( 'csslint' );
521 wp_deregister_script( 'esprima' );
522 wp_deregister_script( 'jshint' );
523 // Then, we load ASENHA's CodeMirror libraries. In use, e.g. for Utilities >> Enable Custom Admin / Frontend CSS / ads.txt / app-ads.txt
524 wp_enqueue_style(
525 'asenha-codemirror',
526 ASENHA_URL . 'assets/css/codemirror/codemirror.min.css',
527 array(),
528 ASENHA_VERSION
529 );
530 wp_enqueue_script(
531 'asenha-codemirror',
532 ASENHA_URL . 'assets/js/codemirror/codemirror.min.js',
533 array('jquery'),
534 ASENHA_VERSION,
535 true
536 );
537 wp_enqueue_script(
538 'asenha-codemirror-htmlmixed-mode',
539 ASENHA_URL . 'assets/js/codemirror/htmlmixed.js',
540 array('asenha-codemirror'),
541 ASENHA_VERSION,
542 true
543 );
544 wp_enqueue_script(
545 'asenha-codemirror-xml-mode',
546 ASENHA_URL . 'assets/js/codemirror/xml.js',
547 array('asenha-codemirror'),
548 ASENHA_VERSION,
549 true
550 );
551 wp_enqueue_script(
552 'asenha-codemirror-javascript-mode',
553 ASENHA_URL . 'assets/js/codemirror/javascript.js',
554 array('asenha-codemirror'),
555 ASENHA_VERSION,
556 true
557 );
558 wp_enqueue_script(
559 'asenha-codemirror-css-mode',
560 ASENHA_URL . 'assets/js/codemirror/css.js',
561 array('asenha-codemirror'),
562 ASENHA_VERSION,
563 true
564 );
565 wp_enqueue_script(
566 'asenha-codemirror-markdown-mode',
567 ASENHA_URL . 'assets/js/codemirror/markdown.js',
568 array('asenha-codemirror'),
569 ASENHA_VERSION,
570 true
571 );
572 // DataTables. In use, e.g. for Security >> Limit Login Attempts
573 wp_enqueue_style(
574 'asenha-datatables',
575 ASENHA_URL . 'assets/css/datatables/datatables.min.css',
576 array(),
577 ASENHA_VERSION
578 );
579 wp_enqueue_script(
580 'asenha-datatables',
581 ASENHA_URL . 'assets/js/datatables/datatables.min.js',
582 array('jquery'),
583 ASENHA_VERSION,
584 false
585 );
586 // Add WP media library assets
587 wp_enqueue_media();
588 // Add WP color picker assets
589 wp_enqueue_style( 'wp-color-picker' );
590 wp_enqueue_script( 'wp-color-picker' );
591 // We force loading the uncompressed version of TinyMCE. This ensures we load 'wp-tinymce-root' and then 'wp-tinymce',
592 // which prevents issue where the Visual tab is unusable in some scenarios
593 $wp_scripts = wp_scripts();
594 $wp_scripts->remove( 'wp-tinymce' );
595 wp_register_tinymce_scripts( $wp_scripts, true );
596 // Main style and script for the admin page
597 wp_enqueue_style(
598 'asenha-admin-page',
599 ASENHA_URL . 'assets/css/admin-page.css',
600 array(
601 'asenha-jbox',
602 'asenha-codemirror',
603 'asenha-datatables',
604 'wp-color-picker'
605 ),
606 ASENHA_VERSION
607 );
608 wp_enqueue_script(
609 'asenha-admin-page',
610 ASENHA_URL . 'assets/js/admin-page.js',
611 array(
612 'asenha-jsticky',
613 'asenha-jbox',
614 'asenha-js-cookie',
615 'asenha-codemirror-htmlmixed-mode',
616 'asenha-codemirror-xml-mode',
617 'asenha-codemirror-javascript-mode',
618 'asenha-codemirror-css-mode',
619 'asenha-codemirror-markdown-mode',
620 'asenha-datatables',
621 'wp-color-picker',
622 'wp-mediaelement',
623 'wp-tinymce-root',
624 'wp-tinymce'
625 ),
626 ASENHA_VERSION,
627 false
628 );
629 wp_localize_script( 'asenha-admin-page', 'adminPageVars', array(
630 'nonce' => wp_create_nonce( 'asenha-' . get_current_user_id() ),
631 'siteUrl' => get_site_url(),
632 'wpcontentUrl' => content_url(),
633 'mediaFrameTitle' => __( 'Select an Image', 'admin-site-enhancements' ),
634 'mediaFrameButtonText' => __( 'Use Selected Image', 'admin-site-enhancements' ),
635 'resetMenuNonce' => wp_create_nonce( 'reset-menu-nonce' ),
636 'sendTestEmailNonce' => wp_create_nonce( 'send-test-email-nonce_' . get_current_user_id() ),
637 'formBuilderSendTestEmailNonce' => wp_create_nonce( 'formbuilder_ajax' ),
638 'expandText' => __( 'Expand', 'admin-site-enhancements' ),
639 'collapseText' => __( 'Collapse', 'admin-site-enhancements' ),
640 'dataTable' => array(
641 'emptyTable' => __( 'No data available in table', 'admin-site-enhancements' ),
642 'info' => __( 'Showing _START_ to _END_ of _TOTAL_ entries', 'admin-site-enhancements' ),
643 'infoEmpty' => __( 'Showing 0 to 0 of 0 entries', 'admin-site-enhancements' ),
644 'infoFiltered' => __( '(filtered from _MAX_ total entries)', 'admin-site-enhancements' ),
645 'lengthMenu' => __( 'Show _MENU_ entries', 'admin-site-enhancements' ),
646 'search' => __( 'Search:', 'admin-site-enhancements' ),
647 'zeroRecords' => __( 'No matching records found', 'admin-site-enhancements' ),
648 'paginate' => array(
649 'first' => __( 'First', 'admin-site-enhancements' ),
650 'last' => __( 'Last', 'admin-site-enhancements' ),
651 'next' => __( 'Next', 'admin-site-enhancements' ),
652 'previous' => __( 'Previous', 'admin-site-enhancements' ),
653 ),
654 ),
655 ) );
656 }
657 // Enqueue on all wp-admin
658 wp_enqueue_style(
659 'asenha-wp-admin',
660 ASENHA_URL . 'assets/css/wp-admin.css',
661 array(),
662 ASENHA_VERSION
663 );
664 // Content Management >> Show IDs, for list tables in wp-admin, e.g. All Posts page
665 if ( false !== strpos( $current_screen->base, 'edit' ) || false !== strpos( $current_screen->base, 'users' ) || false !== strpos( $current_screen->base, 'upload' ) ) {
666 wp_enqueue_style(
667 'asenha-list-table',
668 ASENHA_URL . 'assets/css/list-table.css',
669 array(),
670 ASENHA_VERSION
671 );
672 }
673 // Content Management >> Enable Media Replacement
674 if ( $current_screen->base == 'upload' || $current_screen->id == 'attachment' ) {
675 // wp_enqueue_style( 'asenha-jbox', ASENHA_URL . 'assets/css/jBox.all.min.css', array(), ASENHA_VERSION );
676 // wp_enqueue_script( 'asenha-jbox', ASENHA_URL . 'assets/js/jBox.all.min.js', array(), ASENHA_VERSION, false );
677 wp_enqueue_style(
678 'asenha-media-replace',
679 ASENHA_URL . 'assets/css/media-replace.css',
680 array(),
681 ASENHA_VERSION
682 );
683 wp_enqueue_script(
684 'asenha-media-replace',
685 ASENHA_URL . 'assets/js/media-replace.js',
686 array(),
687 ASENHA_VERSION,
688 false
689 );
690 $media_replace = array(
691 'selectMediaText' => __( 'Select New Media File', 'admin-site-enhancements' ),
692 'performReplacementText' => __( 'Perform Replacement', 'admin-site-enhancements' ),
693 );
694 wp_localize_script( 'asenha-media-replace', 'mediaReplace', $media_replace );
695 }
696 // Admin Interface >> Admin Menu Organizer
697 if ( 'settings_page_admin-menu-organizer' == $current_screen->base ) {
698 // Re-register and re-enqueue jQuery UI Core and plugins required for sortable, draggable and droppable when ordering menu items
699 wp_deregister_script( 'jquery-ui-core' );
700 wp_register_script(
701 'jquery-ui-core',
702 get_site_url() . '/wp-includes/js/jquery/ui/core.min.js',
703 array('jquery'),
704 ASENHA_VERSION,
705 false
706 );
707 wp_enqueue_script( 'jquery-ui-core' );
708 if ( version_compare( $wp_version, '5.6.0', '>=' ) ) {
709 wp_deregister_script( 'jquery-ui-mouse' );
710 wp_register_script(
711 'jquery-ui-mouse',
712 get_site_url() . '/wp-includes/js/jquery/ui/mouse.min.js',
713 array('jquery-ui-core'),
714 ASENHA_VERSION,
715 false
716 );
717 wp_enqueue_script( 'jquery-ui-mouse' );
718 } else {
719 wp_deregister_script( 'jquery-ui-widget' );
720 wp_register_script(
721 'jquery-ui-widget',
722 get_site_url() . '/wp-includes/js/jquery/ui/widget.min.js',
723 array('jquery'),
724 ASENHA_VERSION,
725 false
726 );
727 wp_enqueue_script( 'jquery-ui-widget' );
728 wp_deregister_script( 'jquery-ui-mouse' );
729 wp_register_script(
730 'jquery-ui-mouse',
731 get_site_url() . '/wp-includes/js/jquery/ui/mouse.min.js',
732 array('jquery-ui-core', 'jquery-ui-widget'),
733 ASENHA_VERSION,
734 false
735 );
736 wp_enqueue_script( 'jquery-ui-mouse' );
737 }
738 wp_deregister_script( 'jquery-ui-sortable' );
739 wp_register_script(
740 'jquery-ui-sortable',
741 get_site_url() . '/wp-includes/js/jquery/ui/sortable.min.js',
742 array('jquery-ui-mouse'),
743 ASENHA_VERSION,
744 false
745 );
746 wp_enqueue_script( 'jquery-ui-sortable' );
747 wp_deregister_script( 'jquery-ui-draggable' );
748 wp_register_script(
749 'jquery-ui-draggable',
750 get_site_url() . '/wp-includes/js/jquery/ui/draggable.min.js',
751 array('jquery-ui-mouse'),
752 ASENHA_VERSION,
753 false
754 );
755 wp_enqueue_script( 'jquery-ui-draggable' );
756 wp_deregister_script( 'jquery-ui-droppable' );
757 wp_register_script(
758 'jquery-ui-droppable',
759 get_site_url() . '/wp-includes/js/jquery/ui/droppable.min.js',
760 array('jquery-ui-draggable'),
761 ASENHA_VERSION,
762 false
763 );
764 wp_enqueue_script( 'jquery-ui-droppable' );
765 // Script to set behaviour and actions of the sortable menu
766 wp_enqueue_script(
767 'asenha-custom-admin-menu',
768 ASENHA_URL . 'assets/js/custom-admin-menu.js',
769 array('jquery-ui-draggable'),
770 ASENHA_VERSION,
771 false
772 );
773 wp_enqueue_style(
774 'asenha-admin-menu-organizer',
775 ASENHA_URL . 'assets/css/admin-menu-organizer.css',
776 array(),
777 ASENHA_VERSION
778 );
779 wp_enqueue_script(
780 'asenha-admin-menu-organizer',
781 ASENHA_URL . 'assets/js/admin-menu-organizer.js',
782 array('asenha-custom-admin-menu'),
783 ASENHA_VERSION,
784 false
785 );
786 wp_localize_script( 'asenha-admin-menu-organizer', 'amoPageVars', array(
787 'saveMenuNonce' => wp_create_nonce( 'save-menu-nonce' ),
788 'resetMenuNonce' => wp_create_nonce( 'reset-menu-nonce' ),
789 ) );
790 }
791 // Utilities >> Email Delivery Log
792 if ( 'tools_page_email-delivery-log' == $hook_suffix ) {
793 wp_enqueue_style( 'jquery-ui-css', ASENHA_URL . 'assets/premium/css/jquery-ui/jquery-ui.min.css' );
794 wp_enqueue_style( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/css/email-delivery-log.css' );
795 wp_enqueue_script( 'jquery-ui' );
796 // wp_enqueue_script( 'jquery-ui-datepicker' );
797 wp_enqueue_script( 'jquery-ui-tabs' );
798 wp_enqueue_script( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/js/email-delivery-log.js' );
799 $nonce = wp_create_nonce( 'email-delivery-log' . get_current_user_id() );
800 wp_localize_script( 'asenha-email-delivery-log', 'emailLog', array(
801 'nonce' => $nonce,
802 ) );
803 }
804 // Utilities >> Image Sizes Panel∂
805 if ( 'post' == $current_screen->base && 'attachment' == $current_screen->id ) {
806 global $post;
807 // Only enqueue if the attachment is an image
808 if ( property_exists( $post, 'post_mime_type' ) && false !== strpos( $post->post_mime_type, 'image' ) ) {
809 wp_enqueue_style( 'asenha-image-sizes-panel', ASENHA_URL . 'assets/css/image-sizes-panel.css' );
810 }
811 }
812 // Code Snippets Manager
813 if ( 'post' == $current_screen->base && 'asenha_code_snippet' == $current_screen->id || 'edit' == $current_screen->base && 'edit-asenha_code_snippet' == $current_screen->id ) {
814 }
815 // Content Management >> Hide Admin Notices
816 if ( array_key_exists( 'hide_admin_notices', $options ) && $options['hide_admin_notices'] ) {
817 $hide_for_nonadmins = ( isset( $options['hide_admin_notices_for_nonadmins'] ) ? $options['hide_admin_notices_for_nonadmins'] : false );
818 $minimum_capability = 'manage_options';
819 if ( function_exists( 'bwasenha_fs' ) ) {
820 if ( $hide_for_nonadmins && bwasenha_fs()->can_use_premium_code__premium_only() ) {
821 $minimum_capability = 'read';
822 }
823 }
824 if ( current_user_can( $minimum_capability ) ) {
825 wp_enqueue_style(
826 'asenha-jbox',
827 ASENHA_URL . 'assets/css/jBox.all.min.css',
828 array(),
829 ASENHA_VERSION
830 );
831 wp_enqueue_script(
832 'asenha-jbox',
833 ASENHA_URL . 'assets/js/jBox.all.min.js',
834 array(),
835 ASENHA_VERSION,
836 false
837 );
838 wp_enqueue_style(
839 'asenha-hide-admin-notices',
840 ASENHA_URL . 'assets/css/hide-admin-notices.css',
841 array(),
842 ASENHA_VERSION
843 );
844 wp_enqueue_script(
845 'asenha-hide-admin-notices',
846 ASENHA_URL . 'assets/js/hide-admin-notices.js',
847 array('asenha-jbox'),
848 ASENHA_VERSION,
849 false
850 );
851 }
852 }
853 // Utilities >> Multiple User Roles
854 if ( array_key_exists( 'multiple_user_roles', $options ) && $options['multiple_user_roles'] ) {
855 if ( 'user-edit.php' == $hook_suffix || 'user-new.php' == $hook_suffix ) {
856 // Only replace roles dropdown with checkboxes for users that can assign roles to other users, e.g. administrators
857 if ( current_user_can( 'promote_users', get_current_user_id() ) ) {
858 wp_enqueue_script(
859 'asenha-multiple-user-roles',
860 ASENHA_URL . 'assets/js/multiple-user-roles.js',
861 array('jquery'),
862 ASENHA_VERSION,
863 false
864 );
865 }
866 }
867 }
868 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
869 $hide_promo_nudge = false;
870 $is_yearend_promo_period = is_yearend_promo_period();
871 // Pass on ASENHA stats to admin-page.js to determine whether to show support nudge
872 $current_date = date( 'Y-m-d', time() );
873 $show_support_nudge = false;
874 $asenha_stats_localized = array(
875 'firstSaveDate' => '',
876 'lastSaveDate' => '',
877 'saveCount' => 0,
878 'hideUpgradeNudge' => false,
879 'hidePromoNudge' => false,
880 'showSupportNudge' => false,
881 );
882 if ( !empty( $asenha_stats ) ) {
883 $hide_upgrade_nudge = ( isset( $asenha_stats['upgrade_nudge_dismissed'] ) ? $asenha_stats['upgrade_nudge_dismissed'] : false );
884 $hide_promo_nudge = ( isset( $asenha_stats['promo_nudge_dismissed'] ) ? $asenha_stats['promo_nudge_dismissed'] : false );
885 $have_supported = ( isset( $asenha_stats['have_supported'] ) ? $asenha_stats['have_supported'] : false );
886 $changes_saved = ( isset( $_GET['settings-updated'] ) && 'true' == sanitize_text_field( $_GET['settings-updated'] ) ? true : false );
887 $save_count = ( isset( $asenha_stats['save_count'] ) ? $asenha_stats['save_count'] : 0 );
888 // Compensate for redirect from settings-updated=true URL
889 if ( $changes_saved ) {
890 $save_count = $save_count + 1;
891 } else {
892 $save_count = $save_count;
893 }
894 $saves_to_nudge_support = 10;
895 if ( $save_count < $saves_to_nudge_support ) {
896 $save_count_modulo = -1;
897 } else {
898 $save_count_modulo = $save_count % $saves_to_nudge_support;
899 }
900 // User have not supported ASE
901 if ( false === $have_supported ) {
902 // Support nudge have not been dismissed
903 if ( isset( $asenha_stats['support_nudge_dismissed'] ) && false === $asenha_stats['support_nudge_dismissed'] ) {
904 // Show support nudge after every x saves
905 if ( $save_count_modulo >= 0 ) {
906 $show_support_nudge = true;
907 } else {
908 $show_support_nudge = false;
909 }
910 if ( $show_support_nudge && $save_count_modulo >= 0 ) {
911 $asenha_stats['support_nudge_last_shown_date'] = $current_date;
912 $asenha_stats['support_nudge_last_shown_save_count'] = $save_count;
913 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
914 }
915 } else {
916 if ( $save_count_modulo == 0 ) {
917 $support_nudge_last_shown_save_count = ( isset( $asenha_stats['support_nudge_last_shown_save_count'] ) ? $asenha_stats['support_nudge_last_shown_save_count'] : 0 );
918 if ( $save_count > $support_nudge_last_shown_save_count ) {
919 $asenha_stats['support_nudge_dismissed'] = false;
920 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
921 $show_support_nudge = true;
922 } else {
923 $show_support_nudge = false;
924 }
925 } else {
926 $show_support_nudge = false;
927 }
928 }
929 }
930 $first_save_date = ( isset( $asenha_stats['first_save_date'] ) ? $asenha_stats['first_save_date'] : '' );
931 $last_save_date = ( isset( $asenha_stats['last_save_date'] ) ? $asenha_stats['last_save_date'] : '' );
932 $asenha_stats_localized = array(
933 'firstSaveDate' => $first_save_date,
934 'lastSaveDate' => $last_save_date,
935 'saveCount' => $save_count,
936 'isYearEndPromoPeriod' => $is_yearend_promo_period,
937 'hideUpgradeNudge' => $hide_upgrade_nudge,
938 'hidePromoNudge' => $hide_promo_nudge,
939 'showSupportNudge' => $show_support_nudge,
940 );
941 }
942 wp_localize_script( 'asenha-admin-page', 'asenhaStats', $asenha_stats_localized );
943 }
944
945 /**
946 * Inline CSS for Admin Menu Organizer in all wp-admin pages. Previously loaded externally as part of wp-admin.css file
947 *
948 * @since 7.6.11
949 */
950 function asenha_admin_menu_organizer_css() {
951 ?>
952 <style type="text/css">
953 /* Admin Interface >> Admin Menu Organizer */
954 #adminmenuwrap {
955 height: auto !important;
956 }
957
958 .toplevel_page_wpide #adminmenuwrap {
959 height: calc(100vh - var(--wpide-admin-bar-height)) !important;
960 } /* Fix for when in WPIDE plugin's menu / admin page */
961
962 .current.menu-top.hidden,
963 .wp-has-current-submenu.hidden {
964 display: list-item;
965 }
966
967 #adminmenu a.menu-top.hidden,
968 ul#adminmenu a.wp-has-current-submenu.hidden {
969 display: block;
970 }
971
972 /*! <fs_premium_only> */
973 .always-hidden {
974 display: none !important;
975 }
976
977 #adminmenu .wp-submenu a.hidden {
978 display: none;
979 }
980 /*! </fs_premium_only> */
981 </style>
982 <?php
983 }
984
985 /**
986 * Dequeue scripts that prevents ASE settings page from working properly. Usually from plugins.
987 *
988 * @since 6.3.3
989 */
990 function asenha_dequeue_scritps() {
991 if ( is_asenha() ) {
992 // https://wordpress.org/plugins/user-activity-log/
993 wp_dequeue_script( 'chats-js' );
994 wp_dequeue_script( 'custom_wp_admin_js' );
995 // https://wordpress.org/plugins/print-invoices-packing-slip-labels-for-woocommerce/
996 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce' );
997 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce-form-wizard' );
998 // https://wordpress.org/plugins/wp-reading-progress/
999 wp_dequeue_script( 'ruigehond006_admin_javascript' );
1000 // WordPress Mentions Légales plugin v1.2.3 by Jean-Baptiste Aramendy - http://jba-development.fr/
1001 wp_dequeue_script( 'jquery-ui' );
1002 wp_dequeue_script( 'wordpress-mentions-legales' );
1003 // https://wordpress.org/plugins/us-weather-widget-willyweather/
1004 wp_dequeue_script( 'self' );
1005 // iThemes Security Pro / Solid Security Pro
1006 wp_dequeue_script( 'itsec-core-admin-notices' );
1007 // WPML
1008 wp_dequeue_script( 'wpml-ate-jobs-sync-ui' );
1009 wp_dequeue_script( 'wpml-purify' );
1010 wp_dequeue_script( 'sitepress-scripts' );
1011 wp_dequeue_script( 'sitepress' );
1012 wp_dequeue_script( 'wpml-dismiss-notice' );
1013 wp_dequeue_script( 'wpml-tm-scripts' );
1014 wp_dequeue_script( 'otgs-installer-components-save-setting' );
1015 wp_dequeue_script( 'installer-dismiss-nag' );
1016 wp_dequeue_script( 'install-recommended_plugin' );
1017 wp_dequeue_script( 'icl-admin-notifier' );
1018 wp_dequeue_script( 'otgsPopoverTooltip' );
1019 // WPML String Translation
1020 wp_dequeue_script( 'wpml-theme-plugin-localization-scan' );
1021 // Asset Cleanup
1022 wp_dequeue_script( 'wpassetcleanup-script' );
1023 }
1024 }
1025
1026 /**
1027 * Enqueue public scripts
1028 *
1029 * @since 3.9.0
1030 */
1031 function asenha_public_scripts( $hook_suffix ) {
1032 // Get all WP Enhancements options, default to empty array in case it's not been created yet
1033 $options = get_option( 'admin_site_enhancements', array() );
1034 // External Permalinks
1035 $enable_external_permalinks = ( array_key_exists( 'enable_external_permalinks', $options ) ? $options['enable_external_permalinks'] : false );
1036 if ( $enable_external_permalinks ) {
1037 wp_enqueue_script(
1038 'asenha-public',
1039 ASENHA_URL . 'assets/js/external-permalinks.js',
1040 array(),
1041 ASENHA_VERSION,
1042 false
1043 );
1044 wp_localize_script( 'asenha-public', 'phpVars', array(
1045 'externalPermalinksEnabled' => $enable_external_permalinks,
1046 ) );
1047 }
1048 // Media Categories
1049 $enable_media_categories = ( array_key_exists( 'enable_media_categories', $options ) ? $options['enable_media_categories'] : false );
1050 if ( $enable_media_categories && !is_admin() && is_user_logged_in() ) {
1051 wp_enqueue_style(
1052 'asenha-media-categories-frontend',
1053 ASENHA_URL . 'assets/css/media-categories-frontend.css',
1054 array(),
1055 ASENHA_VERSION
1056 );
1057 }
1058 // Media Replacement
1059 $enable_media_replacement = ( array_key_exists( 'enable_media_replacement', $options ) ? $options['enable_media_replacement'] : false );
1060 if ( $enable_media_replacement && !is_admin() && is_user_logged_in() ) {
1061 wp_enqueue_style(
1062 'asenha-media-replace-frontend',
1063 ASENHA_URL . 'assets/css/media-replace-frontend.css',
1064 array(),
1065 ASENHA_VERSION
1066 );
1067 }
1068 }
1069
1070 /**
1071 * Add admin bar styles for wp-admin and frontend
1072 *
1073 * @since 6.2.1
1074 */
1075 function asenha_admin_bar_item_js_css() {
1076 if ( is_user_logged_in() ) {
1077 ?>
1078 <!--<script></script>-->
1079 <style>
1080 #wp-admin-bar-user-info .avatar {
1081 object-fit: cover;
1082 }
1083 </style>
1084 <?php
1085 }
1086 }
1087
1088 /**
1089 * Add 'Access now' plugin action link.
1090 *
1091 * @since 1.0.0
1092 */
1093 function asenha_plugin_action_links( $links ) {
1094 $settings_link = '<a href="tools.php?page=' . ASENHA_SLUG . '">' . __( 'Configure', 'admin-site-enhancements' ) . '</a>';
1095 array_unshift( $links, $settings_link );
1096 return $links;
1097 }
1098
1099 /**
1100 * Modify footer text
1101 *
1102 * @since 1.0.0
1103 */
1104 function asenha_footer_text() {
1105 // Show nothing
1106 ?>
1107 <?php
1108 }
1109
1110 /**
1111 * Change WP version number text in footer
1112 *
1113 * @since 4.8.3
1114 */
1115 function asenha_footer_version_text() {
1116 ?>
1117 ASE <a href="https://www.wpase.com/documentation/changelog/" target="_blank">v<?php
1118 echo esc_html( ASENHA_VERSION );
1119 ?></a>
1120 <?php
1121 }
1122
1123 /**
1124 * Check if current screen is this plugin's main page
1125 *
1126 * @since 1.0.0
1127 */
1128 function is_asenha() {
1129 $request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
1130 // e.g. /wp-admin/index.php?page=page-slug
1131 if ( strpos( $request_uri, 'page=' . ASENHA_SLUG ) !== false ) {
1132 return true;
1133 // Yes, this is the plugin's main page
1134 } else {
1135 return false;
1136 // Nope, this is NOT the plugin's page
1137 }
1138 }
1139
1140 /**
1141 * Mark that user have supported ASE
1142 *
1143 * @since 5.2.7
1144 */
1145 function asenha_have_supported() {
1146 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1147 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1148 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1149 $asenha_stats['have_supported'] = true;
1150 $asenha_stats['support_nudge_dismissed'] = true;
1151 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1152 if ( $success ) {
1153 echo json_encode( array(
1154 'success' => true,
1155 ) );
1156 } else {
1157 echo json_encode( array(
1158 'success' => false,
1159 ) );
1160 }
1161 }
1162 }
1163 }
1164
1165 /**
1166 * Dismiss support nudge
1167 *
1168 * @since 5.8.2
1169 */
1170 function asenha_dismiss_upgrade_nudge() {
1171 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1172 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1173 $current_date = date( 'Y-m-d', time() );
1174 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1175 $asenha_stats['upgrade_nudge_dismissed'] = true;
1176 $asenha_stats['upgrade_nudge_dismissed_date'] = $current_date;
1177 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1178 if ( $success ) {
1179 echo json_encode( array(
1180 'success' => true,
1181 ) );
1182 } else {
1183 echo json_encode( array(
1184 'success' => false,
1185 ) );
1186 }
1187 }
1188 }
1189 }
1190
1191 /**
1192 * Dismiss promo nudge
1193 *
1194 * @since 7.5.1
1195 */
1196 function asenha_dismiss_promo_nudge() {
1197 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1198 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1199 $current_date = date( 'Y-m-d', time() );
1200 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1201 $asenha_stats['promo_nudge_dismissed'] = true;
1202 $asenha_stats['promo_nudge_dismissed_date'] = $current_date;
1203 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1204 if ( $success ) {
1205 echo json_encode( array(
1206 'success' => true,
1207 ) );
1208 } else {
1209 echo json_encode( array(
1210 'success' => false,
1211 ) );
1212 }
1213 }
1214 }
1215 }
1216
1217 /**
1218 * Dismiss support nudge
1219 *
1220 * @since 5.2.7
1221 */
1222 function asenha_dismiss_support_nudge() {
1223 if ( isset( $_REQUEST ) && current_user_can( 'manage_options' ) ) {
1224 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'asenha-' . get_current_user_id() ) ) {
1225 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1226 $asenha_stats['support_nudge_dismissed'] = true;
1227 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1228 if ( $success ) {
1229 echo json_encode( array(
1230 'success' => true,
1231 ) );
1232 } else {
1233 echo json_encode( array(
1234 'success' => false,
1235 ) );
1236 }
1237 }
1238 }
1239 }
1240