PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 7.6.4
Admin and Site Enhancements (ASE) v7.6.4
9.1.1 9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / settings.php
admin-site-enhancements Last commit date
assets 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
1114 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 'sendTestEmailNonce' => wp_create_nonce( 'send-test-email-nonce_' . get_current_user_id() ),
660 'expandText' => __( 'Expand', 'admin-site-enhancements' ),
661 'collapseText' => __( 'Collapse', 'admin-site-enhancements' ),
662 'dataTable' => array(
663 'emptyTable' => __( 'No data available in table', 'admin-site-enhancements' ),
664 'info' => __( 'Showing _START_ to _END_ of _TOTAL_ entries', 'admin-site-enhancements' ),
665 'infoEmpty' => __( 'Showing 0 to 0 of 0 entries', 'admin-site-enhancements' ),
666 'infoFiltered' => __( '(filtered from _MAX_ total entries)', 'admin-site-enhancements' ),
667 'lengthMenu' => __( 'Show _MENU_ entries', 'admin-site-enhancements' ),
668 'search' => __( 'Search:', 'admin-site-enhancements' ),
669 'zeroRecords' => __( 'No matching records found', 'admin-site-enhancements' ),
670 'paginate' => array(
671 'first' => __( 'First', 'admin-site-enhancements' ),
672 'last' => __( 'Last', 'admin-site-enhancements' ),
673 'next' => __( 'Next', 'admin-site-enhancements' ),
674 'previous' => __( 'Previous', 'admin-site-enhancements' ),
675 ),
676 ),
677 ) );
678 }
679 // Enqueue on all wp-admin
680 wp_enqueue_style(
681 'asenha-wp-admin',
682 ASENHA_URL . 'assets/css/wp-admin.css',
683 array(),
684 ASENHA_VERSION
685 );
686 // Content Management >> Show IDs, for list tables in wp-admin, e.g. All Posts page
687 if ( false !== strpos( $current_screen->base, 'edit' ) || false !== strpos( $current_screen->base, 'users' ) || false !== strpos( $current_screen->base, 'upload' ) ) {
688 wp_enqueue_style(
689 'asenha-list-table',
690 ASENHA_URL . 'assets/css/list-table.css',
691 array(),
692 ASENHA_VERSION
693 );
694 }
695 // Content Management >> Enable Media Replacement
696 if ( $current_screen->base == 'upload' || $current_screen->id == 'attachment' ) {
697 // wp_enqueue_style( 'asenha-jbox', ASENHA_URL . 'assets/css/jBox.all.min.css', array(), ASENHA_VERSION );
698 // wp_enqueue_script( 'asenha-jbox', ASENHA_URL . 'assets/js/jBox.all.min.js', array(), ASENHA_VERSION, false );
699 wp_enqueue_style(
700 'asenha-media-replace',
701 ASENHA_URL . 'assets/css/media-replace.css',
702 array(),
703 ASENHA_VERSION
704 );
705 wp_enqueue_script(
706 'asenha-media-replace',
707 ASENHA_URL . 'assets/js/media-replace.js',
708 array(),
709 ASENHA_VERSION,
710 false
711 );
712 $media_replace = array(
713 'selectMediaText' => __( 'Select New Media File', 'admin-site-enhancements' ),
714 'performReplacementText' => __( 'Perform Replacement', 'admin-site-enhancements' ),
715 );
716 wp_localize_script( 'asenha-media-replace', 'mediaReplace', $media_replace );
717 }
718 // Utilities >> Email Delivery Log
719 if ( 'tools_page_email-delivery-log' == $hook_suffix ) {
720 wp_enqueue_style( 'jquery-ui-css', ASENHA_URL . 'assets/premium/css/jquery-ui/jquery-ui.min.css' );
721 wp_enqueue_style( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/css/email-delivery-log.css' );
722 wp_enqueue_script( 'jquery-ui' );
723 // wp_enqueue_script( 'jquery-ui-datepicker' );
724 wp_enqueue_script( 'jquery-ui-tabs' );
725 wp_enqueue_script( 'asenha-email-delivery-log', ASENHA_URL . 'assets/premium/js/email-delivery-log.js' );
726 $nonce = wp_create_nonce( 'email-delivery-log' . get_current_user_id() );
727 wp_localize_script( 'asenha-email-delivery-log', 'emailLog', array(
728 'nonce' => $nonce,
729 ) );
730 }
731 // Utilities >> Image Sizes Panel∂
732 if ( 'post' == $current_screen->base && 'attachment' == $current_screen->id ) {
733 global $post;
734 // Only enqueue if the attachment is an image
735 if ( property_exists( $post, 'post_mime_type' ) && false !== strpos( $post->post_mime_type, 'image' ) ) {
736 wp_enqueue_style( 'asenha-image-sizes-panel', ASENHA_URL . 'assets/css/image-sizes-panel.css' );
737 }
738 }
739 // Content Management >> Hide Admin Notices
740 if ( array_key_exists( 'hide_admin_notices', $options ) && $options['hide_admin_notices'] ) {
741 $hide_for_nonadmins = ( isset( $options['hide_admin_notices_for_nonadmins'] ) ? $options['hide_admin_notices_for_nonadmins'] : false );
742 $minimum_capability = 'manage_options';
743 if ( function_exists( 'bwasenha_fs' ) ) {
744 if ( $hide_for_nonadmins && bwasenha_fs()->can_use_premium_code__premium_only() ) {
745 $minimum_capability = 'read';
746 }
747 }
748 if ( current_user_can( $minimum_capability ) ) {
749 wp_enqueue_style(
750 'asenha-jbox',
751 ASENHA_URL . 'assets/css/jBox.all.min.css',
752 array(),
753 ASENHA_VERSION
754 );
755 wp_enqueue_script(
756 'asenha-jbox',
757 ASENHA_URL . 'assets/js/jBox.all.min.js',
758 array(),
759 ASENHA_VERSION,
760 false
761 );
762 wp_enqueue_style(
763 'asenha-hide-admin-notices',
764 ASENHA_URL . 'assets/css/hide-admin-notices.css',
765 array(),
766 ASENHA_VERSION
767 );
768 wp_enqueue_script(
769 'asenha-hide-admin-notices',
770 ASENHA_URL . 'assets/js/hide-admin-notices.js',
771 array('asenha-jbox'),
772 ASENHA_VERSION,
773 false
774 );
775 }
776 }
777 // Utilities >> Multiple User Roles
778 if ( array_key_exists( 'multiple_user_roles', $options ) && $options['multiple_user_roles'] ) {
779 if ( 'user-edit.php' == $hook_suffix || 'user-new.php' == $hook_suffix ) {
780 // Only replace roles dropdown with checkboxes for users that can assign roles to other users, e.g. administrators
781 if ( current_user_can( 'promote_users', get_current_user_id() ) ) {
782 wp_enqueue_script(
783 'asenha-multiple-user-roles',
784 ASENHA_URL . 'assets/js/multiple-user-roles.js',
785 array('jquery'),
786 ASENHA_VERSION,
787 false
788 );
789 }
790 }
791 }
792 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
793 $hide_promo_nudge = false;
794 // Pass on ASENHA stats to admin-page.js to determine whether to show support nudge
795 $current_date = date( 'Y-m-d', time() );
796 $show_support_nudge = false;
797 $asenha_stats_localized = array(
798 'firstSaveDate' => '',
799 'lastSaveDate' => '',
800 'saveCount' => 0,
801 'hideUpgradeNudge' => false,
802 'hidePromoNudge' => false,
803 'showSupportNudge' => false,
804 );
805 if ( !empty( $asenha_stats ) ) {
806 $hide_upgrade_nudge = ( isset( $asenha_stats['upgrade_nudge_dismissed'] ) ? $asenha_stats['upgrade_nudge_dismissed'] : false );
807 $hide_promo_nudge = ( isset( $asenha_stats['promo_nudge_dismissed'] ) ? $asenha_stats['promo_nudge_dismissed'] : false );
808 $have_supported = ( isset( $asenha_stats['have_supported'] ) ? $asenha_stats['have_supported'] : false );
809 $changes_saved = ( isset( $_GET['settings-updated'] ) && 'true' == sanitize_text_field( $_GET['settings-updated'] ) ? true : false );
810 $save_count = ( isset( $asenha_stats['save_count'] ) ? $asenha_stats['save_count'] : 0 );
811 // Compensate for redirect from settings-updated=true URL
812 if ( $changes_saved ) {
813 $save_count = $save_count + 1;
814 } else {
815 $save_count = $save_count;
816 }
817 $saves_to_nudge_support = 10;
818 if ( $save_count < $saves_to_nudge_support ) {
819 $save_count_modulo = -1;
820 } else {
821 $save_count_modulo = $save_count % $saves_to_nudge_support;
822 }
823 // User have not supported ASE
824 if ( false === $have_supported ) {
825 // Support nudge have not been dismissed
826 if ( isset( $asenha_stats['support_nudge_dismissed'] ) && false === $asenha_stats['support_nudge_dismissed'] ) {
827 // Show support nudge after every x saves
828 if ( $save_count_modulo >= 0 ) {
829 $show_support_nudge = true;
830 } else {
831 $show_support_nudge = false;
832 }
833 if ( $show_support_nudge && $save_count_modulo >= 0 ) {
834 $asenha_stats['support_nudge_last_shown_date'] = $current_date;
835 $asenha_stats['support_nudge_last_shown_save_count'] = $save_count;
836 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
837 }
838 } else {
839 if ( $save_count_modulo == 0 ) {
840 $support_nudge_last_shown_save_count = ( isset( $asenha_stats['support_nudge_last_shown_save_count'] ) ? $asenha_stats['support_nudge_last_shown_save_count'] : 0 );
841 if ( $save_count > $support_nudge_last_shown_save_count ) {
842 $asenha_stats['support_nudge_dismissed'] = false;
843 update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
844 $show_support_nudge = true;
845 } else {
846 $show_support_nudge = false;
847 }
848 } else {
849 $show_support_nudge = false;
850 }
851 }
852 }
853 $first_save_date = ( isset( $asenha_stats['first_save_date'] ) ? $asenha_stats['first_save_date'] : '' );
854 $last_save_date = ( isset( $asenha_stats['last_save_date'] ) ? $asenha_stats['last_save_date'] : '' );
855 $asenha_stats_localized = array(
856 'firstSaveDate' => $first_save_date,
857 'lastSaveDate' => $last_save_date,
858 'saveCount' => $save_count,
859 'hideUpgradeNudge' => $hide_upgrade_nudge,
860 'hidePromoNudge' => $hide_promo_nudge,
861 'showSupportNudge' => $show_support_nudge,
862 );
863 }
864 wp_localize_script( 'asenha-admin-page', 'asenhaStats', $asenha_stats_localized );
865 }
866
867 /**
868 * Dequeue scripts that prevents ASE settings page from working properly. Usually from plugins.
869 *
870 * @since 6.3.3
871 */
872 function asenha_dequeue_scritps() {
873 if ( is_asenha() ) {
874 // https://wordpress.org/plugins/user-activity-log/
875 wp_dequeue_script( 'chats-js' );
876 wp_dequeue_script( 'custom_wp_admin_js' );
877 // https://wordpress.org/plugins/print-invoices-packing-slip-labels-for-woocommerce/
878 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce' );
879 wp_dequeue_script( 'print-invoices-packing-slip-labels-for-woocommerce-form-wizard' );
880 // https://wordpress.org/plugins/wp-reading-progress/
881 wp_dequeue_script( 'ruigehond006_admin_javascript' );
882 // WordPress Mentions Légales plugin v1.2.3 by Jean-Baptiste Aramendy - http://jba-development.fr/
883 wp_dequeue_script( 'jquery-ui' );
884 wp_dequeue_script( 'wordpress-mentions-legales' );
885 // https://wordpress.org/plugins/us-weather-widget-willyweather/
886 wp_dequeue_script( 'self' );
887 // iThemes Security Pro / Solid Security Pro
888 wp_dequeue_script( 'itsec-core-admin-notices' );
889 // WPML
890 wp_dequeue_script( 'wpml-ate-jobs-sync-ui' );
891 wp_dequeue_script( 'wpml-purify' );
892 wp_dequeue_script( 'sitepress-scripts' );
893 wp_dequeue_script( 'sitepress' );
894 wp_dequeue_script( 'wpml-dismiss-notice' );
895 wp_dequeue_script( 'wpml-tm-scripts' );
896 wp_dequeue_script( 'otgs-installer-components-save-setting' );
897 wp_dequeue_script( 'installer-dismiss-nag' );
898 wp_dequeue_script( 'install-recommended_plugin' );
899 wp_dequeue_script( 'icl-admin-notifier' );
900 wp_dequeue_script( 'otgsPopoverTooltip' );
901 // WPML String Translation
902 wp_dequeue_script( 'wpml-theme-plugin-localization-scan' );
903 // Asset Cleanup
904 wp_dequeue_script( 'wpassetcleanup-script' );
905 }
906 }
907
908 /**
909 * Enqueue public scripts
910 *
911 * @since 3.9.0
912 */
913 function asenha_public_scripts( $hook_suffix ) {
914 // Get all WP Enhancements options, default to empty array in case it's not been created yet
915 $options = get_option( 'admin_site_enhancements', array() );
916 // External Permalinks
917 $enable_external_permalinks = ( array_key_exists( 'enable_external_permalinks', $options ) ? $options['enable_external_permalinks'] : false );
918 if ( $enable_external_permalinks ) {
919 wp_enqueue_script(
920 'asenha-public',
921 ASENHA_URL . 'assets/js/external-permalinks.js',
922 array(),
923 ASENHA_VERSION,
924 false
925 );
926 wp_localize_script( 'asenha-public', 'phpVars', array(
927 'externalPermalinksEnabled' => $enable_external_permalinks,
928 ) );
929 }
930 // Media Categories
931 $enable_media_categories = ( array_key_exists( 'enable_media_categories', $options ) ? $options['enable_media_categories'] : false );
932 if ( $enable_media_categories && !is_admin() && is_user_logged_in() ) {
933 wp_enqueue_style(
934 'asenha-media-categories-frontend',
935 ASENHA_URL . 'assets/css/media-categories-frontend.css',
936 array(),
937 ASENHA_VERSION
938 );
939 }
940 // Media Replacement
941 $enable_media_replacement = ( array_key_exists( 'enable_media_replacement', $options ) ? $options['enable_media_replacement'] : false );
942 if ( $enable_media_replacement && is_user_logged_in() ) {
943 wp_enqueue_style(
944 'asenha-media-replace-frontend',
945 ASENHA_URL . 'assets/css/media-replace-frontend.css',
946 array(),
947 ASENHA_VERSION
948 );
949 }
950 }
951
952 /**
953 * Add admin bar styles for wp-admin and frontend
954 *
955 * @since 6.2.1
956 */
957 function asenha_admin_bar_item_js_css() {
958 if ( is_user_logged_in() ) {
959 ?>
960 <!--<script></script>-->
961 <style>
962 #wp-admin-bar-user-info .avatar {
963 object-fit: cover;
964 }
965 </style>
966 <?php
967 }
968 }
969
970 /**
971 * Add 'Access now' plugin action link.
972 *
973 * @since 1.0.0
974 */
975 function asenha_plugin_action_links( $links ) {
976 $settings_link = '<a href="tools.php?page=' . ASENHA_SLUG . '">' . __( 'Configure', 'admin-site-enhancements' ) . '</a>';
977 array_unshift( $links, $settings_link );
978 return $links;
979 }
980
981 /**
982 * Modify footer text
983 *
984 * @since 1.0.0
985 */
986 function asenha_footer_text() {
987 // Show nothing
988 ?>
989 <?php
990 }
991
992 /**
993 * Change WP version number text in footer
994 *
995 * @since 4.8.3
996 */
997 function asenha_footer_version_text() {
998 ?>
999 ASE <a href="https://www.wpase.com/documentation/changelog/" target="_blank">v<?php
1000 echo esc_html( ASENHA_VERSION );
1001 ?></a>
1002 <?php
1003 }
1004
1005 /**
1006 * Check if current screen is this plugin's main page
1007 *
1008 * @since 1.0.0
1009 */
1010 function is_asenha() {
1011 $request_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] );
1012 // e.g. /wp-admin/index.php?page=page-slug
1013 if ( strpos( $request_uri, 'page=' . ASENHA_SLUG ) !== false ) {
1014 return true;
1015 // Yes, this is the plugin's main page
1016 } else {
1017 return false;
1018 // Nope, this is NOT the plugin's page
1019 }
1020 }
1021
1022 /**
1023 * Mark that user have supported ASE
1024 *
1025 * @since 5.2.7
1026 */
1027 function asenha_have_supported() {
1028 if ( isset( $_REQUEST ) ) {
1029 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1030 $asenha_stats['have_supported'] = true;
1031 $asenha_stats['support_nudge_dismissed'] = true;
1032 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1033 if ( $success ) {
1034 echo json_encode( array(
1035 'success' => true,
1036 ) );
1037 } else {
1038 echo json_encode( array(
1039 'success' => false,
1040 ) );
1041 }
1042 }
1043 }
1044
1045 /**
1046 * Dismiss support nudge
1047 *
1048 * @since 5.8.2
1049 */
1050 function asenha_dismiss_upgrade_nudge() {
1051 if ( isset( $_REQUEST ) ) {
1052 $current_date = date( 'Y-m-d', time() );
1053 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1054 $asenha_stats['upgrade_nudge_dismissed'] = true;
1055 $asenha_stats['upgrade_nudge_dismissed_date'] = $current_date;
1056 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1057 if ( $success ) {
1058 echo json_encode( array(
1059 'success' => true,
1060 ) );
1061 } else {
1062 echo json_encode( array(
1063 'success' => false,
1064 ) );
1065 }
1066 }
1067 }
1068
1069 /**
1070 * Dismiss promo nudge
1071 *
1072 * @since 7.5.1
1073 */
1074 function asenha_dismiss_promo_nudge() {
1075 if ( isset( $_REQUEST ) ) {
1076 $current_date = date( 'Y-m-d', time() );
1077 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1078 $asenha_stats['promo_nudge_dismissed'] = true;
1079 $asenha_stats['promo_nudge_dismissed_date'] = $current_date;
1080 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1081 if ( $success ) {
1082 echo json_encode( array(
1083 'success' => true,
1084 ) );
1085 } else {
1086 echo json_encode( array(
1087 'success' => false,
1088 ) );
1089 }
1090 }
1091 }
1092
1093 /**
1094 * Dismiss support nudge
1095 *
1096 * @since 5.2.7
1097 */
1098 function asenha_dismiss_support_nudge() {
1099 if ( isset( $_REQUEST ) ) {
1100 $asenha_stats = get_option( ASENHA_SLUG_U . '_stats', array() );
1101 $asenha_stats['support_nudge_dismissed'] = true;
1102 $success = update_option( ASENHA_SLUG_U . '_stats', $asenha_stats, false );
1103 if ( $success ) {
1104 echo json_encode( array(
1105 'success' => true,
1106 ) );
1107 } else {
1108 echo json_encode( array(
1109 'success' => false,
1110 ) );
1111 }
1112 }
1113 }
1114