id = 'admin_bar'; $this->short_desc = __( 'Admin Bar', 'woocommerce-jetpack' ); $this->desc = __( 'WooCommerce admin bar.', 'woocommerce-jetpack' ); $this->link_slug = 'woocommerce-admin-bar'; parent::__construct(); if ( $this->is_enabled() ) { if ( 'yes' === get_option( 'wcj_admin_bar_wc_enabled', 'yes' ) ) { add_action( 'admin_bar_menu', array( $this, 'add_woocommerce_admin_bar' ), PHP_INT_MAX ); add_action( 'wp_head', array( $this, 'add_woocommerce_admin_bar_icon_style' ) ); add_action( 'admin_head', array( $this, 'add_woocommerce_admin_bar_icon_style' ) ); } if ( 'yes' === get_option( 'wcj_admin_bar_booster_enabled', 'yes' ) ) { add_action( 'admin_bar_menu', array( $this, 'add_booster_admin_bar' ), PHP_INT_MAX ); if ( 'yes' === get_option( 'wcj_admin_bar_booster_active_enabled', 'yes' ) ) { add_action( 'admin_bar_menu', array( $this, 'add_booster_active_admin_bar' ), PHP_INT_MAX ); } add_action( 'wp_head', array( $this, 'add_booster_admin_bar_icon_style' ) ); add_action( 'admin_head', array( $this, 'add_booster_admin_bar_icon_style' ) ); } add_action( 'woojetpack_after_settings_save', array( $this, 'reload_page_after_settings_save' ), PHP_INT_MAX, 2 ); } } /** * reload_page_after_settings_save. * * @version 2.9.0 * @since 2.9.0 * @todo (maybe) somehow add "Your settings have been saved." admin notice */ function reload_page_after_settings_save( $sections, $current_section ) { // This function is needed so admin bar menus would appear immediately after module settings are saved (i.e. without additional page refresh) if ( $this->id === $current_section ) { wp_safe_redirect( add_query_arg( '', '' ) ); exit; } } /** * add_booster_admin_bar_icon_style. * * @version 3.1.0 * @since 2.9.0 */ function add_booster_admin_bar_icon_style() { echo ''; echo ''; } /** * add_woocommerce_admin_bar_icon_style. * * @version 2.9.0 * @since 2.9.0 */ function add_woocommerce_admin_bar_icon_style() { echo ''; } /** * add_woocommerce_admin_bar_nodes. * * @version 2.9.0 * @since 2.9.0 */ function add_woocommerce_admin_bar_nodes( $wp_admin_bar, $nodes, $parent_id ) { foreach ( $nodes as $node_id => $node ) { $id = ( false !== $parent_id ? $parent_id . '-' . $node_id : $node_id ); $args = array( 'parent' => $parent_id, 'id' => $id, 'title' => $node['title'], 'href' => $node['href'], 'meta' => array( 'title' => $node['title'] ), ); if ( isset( $node['meta'] ) ) { $args['meta'] = array_merge( $args['meta'], $node['meta'] ); } $wp_admin_bar->add_node( $args ); if ( isset( $node['nodes'] ) ) { // Recursion $this->add_woocommerce_admin_bar_nodes( $wp_admin_bar, $node['nodes'], $id ); } } } /** * get_nodes_booster_modules. * * @version 3.1.0 * @since 2.9.0 * @todo (maybe) dashes instead of underscores * @todo (maybe) dashboard > alphabetically - list all modules * @todo (maybe) dashboard > by_category - list all modules */ function get_nodes_booster_modules() { $nodes = array(); $cats = include( wcj_plugin_path() . '/includes/admin/' . 'wcj-modules-cats.php' ); $this->active_modules = array(); foreach ( $cats as $id => $label_info ) { $nodes[ $id ] = array( 'title' => $label_info['label'], 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $id ), 'meta' => array( 'title' => strip_tags( $label_info['desc'] ) ), ); if ( 'dashboard' === $id ) { $nodes[ $id ]['nodes'] = apply_filters( 'wcj_admin_bar_dashboard_nodes', array( 'alphabetically' => array( 'title' => __( 'Alphabetically', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=dashboard§ion=alphabetically' ), ), 'by_category' => array( 'title' => __( 'By Category', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=dashboard§ion=by_category' ), ), 'active' => array( 'title' => __( 'Active', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=dashboard§ion=active' ), ), 'manager' => array( 'title' => __( 'Manage Settings', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=dashboard§ion=manager' ), ), ) ); } else { $cat_nodes = array(); foreach ( $label_info['all_cat_ids'] as $link_id ) { if ( wcj_is_module_deprecated( $link_id, false, true ) ) { continue; } $cat_nodes[ $link_id ] = array( 'title' => WCJ()->modules[ $link_id ]->short_desc, 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $id . '§ion=' . $link_id ), 'meta' => array( 'title' => WCJ()->modules[ $link_id ]->desc ), 'nodes' => array( 'settings' => array( 'title' => __( 'Settings', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=' . $id . '§ion=' . $link_id ), ), 'docs' => array( 'title' => __( 'Documentation', 'woocommerce-jetpack' ), 'href' => WCJ()->modules[ $link_id ]->link . '?utm_source=module_documentation&utm_medium=admin_bar_link&utm_campaign=booster_documentation', 'meta' => array( 'target' => '_blank' ), ), ), ); if ( WCJ()->modules[ $link_id ]->is_enabled() && 'module' === WCJ()->modules[ $link_id ]->type ) { $this->active_modules[ $link_id ] = $cat_nodes[ $link_id ]; } } usort( $cat_nodes, array( $this, 'usort_compare_by_title' ) ); $nodes[ $id ]['nodes'] = $cat_nodes; } } if ( ! empty( $this->active_modules ) ) { usort( $this->active_modules, array( $this, 'usort_compare_by_title' ) ); $nodes['dashboard']['nodes']['active']['nodes'] = $this->active_modules; } return $nodes; } /** * usort_compare_by_title. * * @version 2.9.1 * @since 2.9.0 */ function usort_compare_by_title( $a, $b ) { return strcasecmp( $a['title'], $b['title'] ); } /** * get_nodes_booster_tools. * * @version 2.9.0 * @since 2.9.0 */ function get_nodes_booster_tools() { $nodes = array(); $tools = apply_filters( 'wcj_tools_tabs', array( array( 'id' => 'dashboard', 'title' => __( 'Dashboard', 'woocommerce-jetpack' ), 'desc' => __( 'This dashboard lets you check statuses and short descriptions of all available Booster for WooCommerce tools. Tools can be enabled through WooCommerce > Settings > Booster.', 'woocommerce-jetpack' ), ), ) ); foreach ( $tools as $tool ) { $nodes[ $tool['id'] ] = array( 'title' => $tool['title'], 'href' => admin_url( 'admin.php?page=wcj-tools&tab=' . $tool['id'] ), ); if ( isset( $tool['desc'] ) ) { $nodes[ $tool['id'] ]['meta']['title'] = $tool['desc']; } } return $nodes; } /** * add_booster_active_admin_bar. * * @version 3.6.0 * @since 3.1.0 */ function add_booster_active_admin_bar( $wp_admin_bar ) { if ( ! current_user_can( 'manage_woocommerce' ) ) { return; } $tools = array( 'tools' => array( 'title' => __( 'Tools', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wcj-tools' ), 'nodes' => $this->get_nodes_booster_tools(), ), ); unset( $tools['tools']['nodes']['dashboard'] ); $nodes = array( 'booster-active' => array( 'title' => '' . __( 'Booster: Active', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack&wcj-cat=dashboard§ion=active' ), 'meta' => array( 'title' => __( 'Booster - Active', 'woocommerce-jetpack' ), ), 'nodes' => array_merge( $this->active_modules, $tools ), ), ); $this->add_woocommerce_admin_bar_nodes( $wp_admin_bar, $nodes, false ); } /** * add_booster_admin_bar. * * @version 3.6.0 * @since 2.9.0 */ function add_booster_admin_bar( $wp_admin_bar ) { if ( ! current_user_can( 'manage_woocommerce' ) ) { return; } $nodes = array( 'booster' => array( 'title' => '' . __( 'Booster', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack' ), 'meta' => array( 'title' => __( 'Booster - Settings', 'woocommerce-jetpack' ), ), 'nodes' => array( 'modules' => array( 'title' => __( 'Modules', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=jetpack' ), 'nodes' => $this->get_nodes_booster_modules(), ), 'tools' => array( 'title' => __( 'Tools', 'woocommerce-jetpack' ), 'href' => admin_url( 'admin.php?page=wcj-tools' ), 'nodes' => $this->get_nodes_booster_tools(), ), ), ), ); $this->add_woocommerce_admin_bar_nodes( $wp_admin_bar, $nodes, false ); } /** * get_nodes_orders_reports. * * @version 2.9.0 * @since 2.9.0 */ function get_nodes_orders_reports() { $nodes = array(); $reports = array( 'sales_by_date' => __( 'Sales by date', 'woocommerce' ), 'sales_by_product' => __( 'Sales by product', 'woocommerce' ), 'sales_by_category' => __( 'Sales by category', 'woocommerce' ), 'coupon_usage' => __( 'Coupons by date', 'woocommerce' ), ); foreach ( $reports as $report_id => $report_title ) { $nodes[ $report_id ] = array( 'title' => $report_title, 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders&report=' . $report_id ), 'nodes' => array( '7day' => array( 'title' => __( 'Last 7 days', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders&report=' . $report_id . '&range=7day' ), ), 'month' => array( 'title' => __( 'This month', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders&report=' . $report_id . '&range=month' ), ), 'last-month' => array( 'title' => __( 'Last month', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders&report=' . $report_id . '&range=last_month' ), ), 'year' => array( 'title' => __( 'Year', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders&report=' . $report_id . '&range=year' ), ), ), ); } return $nodes; } /** * add_woocommerce_admin_bar. * * @version 3.6.0 * @since 2.9.0 * @todo (maybe) reports > customers > customers > add dates * @todo (maybe) reports > taxes > taxes_by_code > add dates * @todo (maybe) reports > taxes > taxes_by_date > add dates * @todo (maybe) settings > add custom sections (i.e. Booster and other plugins) * @todo (maybe) extensions > add sections */ function add_woocommerce_admin_bar( $wp_admin_bar ) { if ( ! current_user_can( 'manage_woocommerce' ) ) { return; } $nodes = array( 'wcj-wc' => array( 'title' => '' . __( 'WooCommerce', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings' ), 'meta' => array( 'title' => __( 'WooCommerce settings', 'woocommerce' ), ), 'nodes' => array( 'orders' => array( 'title' => __( 'Orders', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=shop_order' ), 'nodes' => array( 'orders' => array( 'title' => __( 'Orders', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=shop_order' ), ), 'add-order' => array( 'title' => __( 'Add order', 'woocommerce' ), 'href' => admin_url( 'post-new.php?post_type=shop_order' ), ), 'customers' => array( 'title' => __( 'Customers', 'woocommerce' ), 'href' => admin_url( 'users.php?role=customer' ), ), ), ), 'reports' => array( 'title' => __( 'Reports', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports' ), 'nodes' => array( 'orders' => array( 'title' => __( 'Orders', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=orders' ), 'nodes' => $this->get_nodes_orders_reports(), ), 'customers' => array( 'title' => __( 'Customers', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=customers' ), 'nodes' => array( 'customers' => array( 'title' => __( 'Customers vs. guests', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=customers&report=customers' ), ), 'customer-list' => array( 'title' => __( 'Customer list', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=customers&report=customer_list' ), ), ), ), 'stock' => array( 'title' => __( 'Stock', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=stock' ), 'nodes' => array( 'low-in-stock' => array( 'title' => __( 'Low in stock', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=stock&report=low_in_stock' ), ), 'out-of-stock' => array( 'title' => __( 'Out of stock', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=stock&report=out_of_stock' ), ), 'most-stocked' => array( 'title' => __( 'Most Stocked', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=stock&report=most_stocked' ), ), ), ), 'taxes' => array( 'title' => __( 'Taxes', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=taxes' ), 'nodes' => array( 'taxes-by-code' => array( 'title' => __( 'Taxes by code', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=taxes&report=taxes_by_code' ), ), 'taxes-by-date' => array( 'title' => __( 'Taxes by date', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-reports&tab=taxes&report=taxes_by_date' ), ), ), ), ), ), 'products' => array( 'title' => __( 'Products', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=product' ), 'nodes' => array( 'products' => array( 'title' => __( 'Products', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=product' ), ), 'add-product' => array( 'title' => __( 'Add product', 'woocommerce' ), 'href' => admin_url( 'post-new.php?post_type=product' ), ), 'categories' => array( 'title' => __( 'Categories', 'woocommerce' ), 'href' => admin_url( 'edit-tags.php?taxonomy=product_cat&post_type=product' ), ), 'tags' => array( 'title' => __( 'Tags', 'woocommerce' ), 'href' => admin_url( 'edit-tags.php?taxonomy=product_tag&post_type=product' ), ), 'attributes' => array( 'title' => __( 'Attributes', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=product&page=product_attributes' ), ), ), ), 'coupons' => array( 'title' => __( 'Coupons', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=shop_coupon' ), 'nodes' => array( 'coupons' => array( 'title' => __( 'Coupons', 'woocommerce' ), 'href' => admin_url( 'edit.php?post_type=shop_coupon' ), ), 'add-coupon' => array( 'title' => __( 'Add coupon', 'woocommerce' ), 'href' => admin_url( 'post-new.php?post_type=shop_coupon' ), ), ), ), 'settings' => array( 'title' => __( 'Settings', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings' ), 'nodes' => array( 'general' => array( 'title' => __( 'General', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=general' ), ), 'products' => array( 'title' => __( 'Products', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=products' ), 'nodes' => array( 'general' => array( 'title' => __( 'General', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=products§ion' ), ), 'display' => array( 'title' => __( 'Display', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=products§ion=display' ), ), 'inventory' => array( 'title' => __( 'Inventory', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=products§ion=inventory' ), ), 'downloadable' => array( 'title' => __( 'Downloadable products', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=products§ion=downloadable' ), ), ), ), 'tax' => array( 'title' => __( 'Tax', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=tax' ), 'nodes' => array( 'tax-options' => array( 'title' => __( 'Tax options', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=tax§ion' ), ), 'standard-rates' => array( 'title' => __( 'Standard rates', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=tax§ion=standard' ), ), ), ), 'shipping' => array( 'title' => __( 'Shipping', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=shipping' ), 'nodes' => array( 'shipping-zones' => array( 'title' => __( 'Shipping zones', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=shipping§ion' ), ), 'shipping-options' => array( 'title' => __( 'Shipping options', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=options' ), ), 'shipping-classes' => array( 'title' => __( 'Shipping classes', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=classes' ), ), ), ), 'checkout' => array( 'title' => __( 'Checkout', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout' ), 'nodes' => array( 'checkout-options' => array( 'title' => __( 'Checkout options', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout§ion' ), ), 'bacs' => array( 'title' => __( 'BACS', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=bacs' ), ), 'cheque' => array( 'title' => __( 'Check payments', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=cheque' ), ), 'cod' => array( 'title' => __( 'Cash on delivery', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=cod' ), ), 'paypal' => array( 'title' => __( 'PayPal', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=paypal' ), ), ), ), 'account' => array( 'title' => __( 'Account', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=account' ), ), 'email' => array( 'title' => __( 'Emails', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=email' ), ), 'api' => array( 'title' => __( 'API', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=api' ), 'nodes' => array( 'settings' => array( 'title' => __( 'Settings', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=api§ion' ), ), 'keys' => array( 'title' => __( 'Keys/Apps', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=api§ion=keys' ), ), 'webhooks' => array( 'title' => __( 'Webhooks', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-settings&tab=api§ion=webhooks' ), ), ), ), ), ), 'system-status' => array( 'title' => __( 'System status', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-status' ), 'nodes' => array( 'system-status' => array( 'title' => __( 'System status', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-status&tab=status' ), ), 'tools' => array( 'title' => __( 'Tools', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-status&tab=tools' ), ), 'logs' => array( 'title' => __( 'Logs', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-status&tab=logs' ), ), ), ), 'extensions' => array( 'title' => __( 'Extensions', 'woocommerce' ), 'href' => admin_url( 'admin.php?page=wc-addons' ), ), ), ), ); $this->add_woocommerce_admin_bar_nodes( $wp_admin_bar, $nodes, false ); } } endif; return new WCJ_Admin_Bar();