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