43 if ( is_null( self::$_instance ) ) {
44 self::$_instance =
new self();
47 return self::$_instance;
64 add_action(
'admin_menu', [ $this,
'add_admin_menu' ] );
65 add_action(
'network_admin_menu', [ $this,
'add_admin_menu' ] );
81 global $menu, $submenu;
84 if ( strpos( json_encode( $menu ?: [] ), self::WP_ADMIN_MENU_SLUG ) !==
false ) {
88 $_get_divider =
function () {
90 return '</a> <hr style="margin: 10px 12px; border: none; height: 1px; background-color: hsla( 0, 0%, 100%, .2 );" tabindex="-1" />';
93 $total_badge_count = 0;
94 $submenus = self::get_submenus();
95 $filtered_submenus = [];
98 foreach ( $submenus as $submenu_data ) {
99 if ( empty( $submenu_data ) ) {
103 foreach ( array_values( $submenu_data ) as $index => $submenu_item ) {
104 if ( ! current_user_can( $submenu_item[
'capability'] ) ) {
115 $badge_count = (int) apply_filters(
"gk/foundation/admin-menu/submenu/{$submenu_item['id']}/counter", 0 );
117 if ( $badge_count > 0 ) {
118 $total_badge_count += $badge_count;
121 $filtered_submenu = [
122 'slug' => self::WP_ADMIN_MENU_SLUG,
123 'page_title' => $submenu_item[
'page_title'],
125 'capability' => $submenu_item[
'capability'],
126 'id' => $submenu_item[
'id'],
127 'callback' => $submenu_item[
'callback']
130 if ( $index === count( $submenu_data ) - 1 ) {
131 $filtered_submenu[
'divider'] = $_get_divider();
134 $filtered_submenus[] = $filtered_submenu;
138 if ( empty( $filtered_submenus ) ) {
143 $page_title = esc_html__(
'GravityKit',
'gk-gravityview' );
144 $menu_title = esc_html__(
'GravityKit',
'gk-gravityview' );
155 $menu_position = apply_filters(
'gk/foundation/admin-menu/position', (
float) apply_filters(
'gform_menu_position',
'16.9' ) + .0001 );
160 $filtered_submenus[0][
'capability'],
161 self::WP_ADMIN_MENU_SLUG,
163 'data:image/svg+xml;base64,' . base64_encode(
'<svg id="Artwork" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path fill="#a7aaad" class="st0" d="M128 0C57.3 0 0 57.3 0 128s57.3 128 128 128 128-57.3 128-128S198.7 0 128 0zm0 243.2c-63.6 0-115.2-51.6-115.2-115.2S64.4 12.8 128 12.8 243.2 64.4 243.2 128 191.6 243.2 128 243.2zm7.9-172.5c-.8.1-1.4-.5-1.5-1.3V57.7c-.1-.9.4-1.8 1.3-2.1 7.8-4.2 10.6-13.9 6.4-21.7-4.2-7.8-13.9-10.6-21.7-6.4-7.8 4.2-10.6 13.9-6.4 21.7 1.5 2.7 3.7 4.9 6.4 6.4.8.3 1.4 1.2 1.3 2.1v11.4c.1.8-.4 1.5-1.2 1.6h-.3c-41 3-68.9 29.6-68.9 66.9 0 39.6 31.5 67.2 76.8 67.2s76.8-27.6 76.8-67.2c-.1-37.3-28-63.9-69-66.9zM128 182.4c-35.9 0-60.8-18.4-60.8-44.8S92.1 92.8 128 92.8s60.8 18.4 60.8 44.8-24.9 44.8-60.8 44.8zm53.8-44.8c0 22.3-22.1 37.8-53.8 37.8-5.1 0-10.2-.4-15.2-1.3-6.8-1.2-9.4-3.2-12-9.6-3.1-7.5-4.8-16.6-4.8-26.9s1.7-19.4 4.8-26.9c2.7-6.4 5.2-8.4 12-9.6 5-.9 10.1-1.3 15.2-1.3 31.7 0 53.8 15.5 53.8 37.8z"/></svg>' ),
167 add_filter(
'gk/foundation/inline-styles',
function ( $styles ) {
169 'style' =>
'#toplevel_page_' . self::WP_ADMIN_MENU_SLUG .
' div.wp-menu-image.svg { background-size: 1.5em auto; }',
182 $total_badge_count = (int) apply_filters(
'gk/foundation/admin-menu/counter', $total_badge_count );
184 if ( $total_badge_count ) {
185 foreach ( $menu as &$menu_item ) {
186 if ( $menu_item[2] === self::WP_ADMIN_MENU_SLUG ) {
193 foreach ( $filtered_submenus as $index => $filtered_submenu ) {
195 $filtered_submenu[
'slug'],
196 $filtered_submenu[
'page_title'],
197 $filtered_submenu[
'menu_title'],
198 $filtered_submenu[
'capability'],
199 $filtered_submenu[
'id'],
200 $filtered_submenu[
'callback']
204 if ( ! isset( $filtered_submenu[
'divider'] ) || $index === count( $filtered_submenus ) - 1 ) {
208 $added_submenu_to_update = array_pop( $submenu[ self::WP_ADMIN_MENU_SLUG ] );
209 $added_submenu_to_update[0] .= $filtered_submenu[
'divider'];
211 $submenu[ self::WP_ADMIN_MENU_SLUG ][] = $added_submenu_to_update;
216 foreach ( $submenu[ self::WP_ADMIN_MENU_SLUG ] as $key => $submenu_item ) {
217 if ( $submenu_item[2] === self::WP_ADMIN_MENU_SLUG ) {
218 unset( $submenu[ self::WP_ADMIN_MENU_SLUG ][ $key ] );
234 if ( ! isset( $submenu[
'id'] ) && ! isset(
$_submenus[ $position ] ) ) {
238 $submenus = self::get_submenus();
240 if ( ! isset( $submenu[
'order'] ) ) {
241 $order = array_column( $submenus[ $position ],
'order' );
243 if ( empty( $order ) ) {
244 $submenu[
'order'] = 1;
246 $submenu[
'order'] = max( $order ) + 100;
250 $submenus[ $position ][ $submenu[
'id'] ] = $submenu;
252 $order = array_column( $submenus[ $position ],
'order' );
254 array_multisort( $submenus[ $position ], SORT_NUMERIC, $order );
256 self::$_submenus = $submenus;
274 return apply_filters(
'gk/foundation/admin-menu/submenus', self::$_submenus );
289 if ( ! isset( $submenu[ self::WP_ADMIN_MENU_SLUG ] ) ) {
293 foreach ( $submenu[ self::WP_ADMIN_MENU_SLUG ] as $index => $submenu_item ) {
294 if ( $submenu_item[2] === $id ) {
295 unset( $submenu[ self::WP_ADMIN_MENU_SLUG ][ $index ] );
299 if ( ! empty( $submenu[ self::WP_ADMIN_MENU_SLUG ] ) ) {
303 self::remove_admin_menu();
318 foreach ( $menu as $index => $menu_item ) {
319 if ( $menu_item[2] === self::WP_ADMIN_MENU_SLUG ) {
320 unset( $menu[ $index ] );
336 $badge_count = (int) $badge_count;
338 return '<span id="' . $menu_id .
'-badge" style="margin-left: 5px;" class="update-plugins count-' . $badge_count .
'"><span class="plugin-count">' . number_format_i18n( $badge_count ) .
'</span></span>';