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