1 <?php
  2 /**
  3  * Load assets.
  4  *
  5  * @author      WooThemes
  6  * @category    Admin
  7  * @package     WooCommerce/Admin
  8  * @version     2.1.0
  9  */
 10 
 11 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 12 
 13 if ( ! class_exists( 'WC_Admin_Assets' ) ) :
 14 
 15 /**
 16  * WC_Admin_Assets Class
 17  */
 18 class WC_Admin_Assets {
 19 
 20     /**
 21      * Hook in tabs.
 22      */
 23     public function __construct() {
 24         add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );
 25         add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
 26         add_action( 'admin_head', array( $this, 'product_taxonomy_styles' ) );
 27     }
 28 
 29     /**
 30      * Enqueue styles
 31      */
 32     public function admin_styles() {
 33         global $wp_scripts;
 34 
 35         // Sitewide menu CSS
 36         wp_enqueue_style( 'woocommerce_admin_menu_styles', WC()->plugin_url() . '/assets/css/menu.css', array(), WC_VERSION );
 37 
 38         $screen = get_current_screen();
 39 
 40         if ( in_array( $screen->id, wc_get_screen_ids() ) ) {
 41 
 42             $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
 43 
 44             // Admin styles for WC pages only
 45             wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
 46             wp_enqueue_style( 'jquery-ui-style', '//ajax.googleapis.com/ajax/libs/jqueryui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), WC_VERSION );
 47             wp_enqueue_style( 'wp-color-picker' );
 48         }
 49 
 50         if ( in_array( $screen->id, array( 'dashboard' ) ) ) {
 51             wp_enqueue_style( 'woocommerce_admin_dashboard_styles', WC()->plugin_url() . '/assets/css/dashboard.css', array(), WC_VERSION );
 52         }
 53 
 54         do_action( 'woocommerce_admin_css' );
 55     }
 56 
 57 
 58     /**
 59      * Enqueue scripts
 60      */
 61     public function admin_scripts() {
 62         global $wp_query, $post;
 63 
 64         $screen       = get_current_screen();
 65         $wc_screen_id = sanitize_title( __( 'WooCommerce', 'woocommerce' ) );
 66         $suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
 67 
 68         // Register scripts
 69         wp_register_script( 'woocommerce_admin', WC()->plugin_url() . '/assets/js/admin/woocommerce_admin' . $suffix . '.js', array( 'jquery', 'jquery-blockui', 'jquery-ui-sortable', 'jquery-ui-widget', 'jquery-ui-core', 'jquery-tiptip' ), WC_VERSION );
 70 
 71         wp_register_script( 'jquery-blockui', WC()->plugin_url() . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js', array( 'jquery' ), '2.66', true );
 72 
 73         wp_register_script( 'jquery-tiptip', WC()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip' . $suffix . '.js', array( 'jquery' ), WC_VERSION, true );
 74 
 75         wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/admin/accounting' . $suffix . '.js', array( 'jquery' ), '0.3.2' );
 76 
 77         wp_register_script( 'round', WC()->plugin_url() . '/assets/js/admin/round' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
 78 
 79         wp_register_script( 'woocommerce_admin_meta_boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker', 'jquery-ui-sortable', 'accounting', 'round' ), WC_VERSION );
 80 
 81         wp_register_script( 'woocommerce_admin_meta_boxes_variations', WC()->plugin_url() . '/assets/js/admin/meta-boxes-variations' . $suffix . '.js', array( 'jquery', 'jquery-ui-sortable' ), WC_VERSION );
 82 
 83         wp_register_script( 'ajax-chosen', WC()->plugin_url() . '/assets/js/chosen/ajax-chosen.jquery' . $suffix . '.js', array('jquery', 'chosen'), WC_VERSION );
 84 
 85         wp_register_script( 'chosen', WC()->plugin_url() . '/assets/js/chosen/chosen.jquery' . $suffix . '.js', array('jquery'), WC_VERSION );
 86 
 87         // Accounting
 88         $params = array(
 89             'mon_decimal_point' => get_option( 'woocommerce_price_decimal_sep' )
 90         );
 91 
 92         wp_localize_script( 'accounting', 'accounting_params', $params );
 93 
 94         // WooCommerce admin pages
 95         if ( in_array( $screen->id, wc_get_screen_ids() ) ) {
 96 
 97             wp_enqueue_script( 'woocommerce_admin' );
 98             wp_enqueue_script( 'iris' );
 99             wp_enqueue_script( 'ajax-chosen' );
100             wp_enqueue_script( 'chosen' );
101             wp_enqueue_script( 'jquery-ui-sortable' );
102             wp_enqueue_script( 'jquery-ui-autocomplete' );
103 
104             $locale  = localeconv();
105             $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.';
106 
107             $params = array(
108                 'i18n_decimal_error'     => sprintf( __( 'Please enter in decimal (%s) format without thousand separators.', 'woocommerce' ), $decimal ),
109                 'i18n_mon_decimal_error' => sprintf( __( 'Please enter in monetary decimal (%s) format without thousand separators and currency symbols.', 'woocommerce' ), get_option( 'woocommerce_price_decimal_sep' ) ),
110                 'decimal_point'          => $decimal,
111                 'mon_decimal_point'      => get_option( 'woocommerce_price_decimal_sep' )
112             );
113 
114             wp_localize_script( 'woocommerce_admin', 'woocommerce_admin', $params );
115         }
116 
117         // Edit product category pages
118         if ( in_array( $screen->id, array( 'edit-product_cat' ) ) )
119             wp_enqueue_media();
120 
121         // Products
122         if ( in_array( $screen->id, array( 'edit-product' ) ) )
123             wp_enqueue_script( 'woocommerce_quick-edit', WC()->plugin_url() . '/assets/js/admin/quick-edit' . $suffix . '.js', array('jquery'), WC_VERSION );
124 
125         // Product/Coupon/Orders
126         if ( in_array( $screen->id, array( 'shop_coupon', 'shop_order', 'product', 'edit-shop_coupon', 'edit-shop_order', 'edit-product' ) ) ) {
127 
128             wp_enqueue_script( 'woocommerce_admin_meta_boxes' );
129             wp_enqueue_script( 'jquery-ui-datepicker' );
130             wp_enqueue_media();
131             wp_enqueue_script( 'ajax-chosen' );
132             wp_enqueue_script( 'chosen' );
133             wp_enqueue_script( 'plupload-all' );
134 
135             $params = array(
136                 'remove_item_notice'            => __( 'Are you sure you want to remove the selected items? If you have previously reduced this item\'s stock, or this order was submitted by a customer, you will need to manually restore the item\'s stock.', 'woocommerce' ),
137                 'i18n_select_items'             => __( 'Please select some items.', 'woocommerce' ),
138                 'remove_item_meta'              => __( 'Remove this item meta?', 'woocommerce' ),
139                 'remove_attribute'              => __( 'Remove this attribute?', 'woocommerce' ),
140                 'name_label'                    => __( 'Name', 'woocommerce' ),
141                 'remove_label'                  => __( 'Remove', 'woocommerce' ),
142                 'click_to_toggle'               => __( 'Click to toggle', 'woocommerce' ),
143                 'values_label'                  => __( 'Value(s)', 'woocommerce' ),
144                 'text_attribute_tip'            => __( 'Enter some text, or some attributes by pipe (|) separating values.', 'woocommerce' ),
145                 'visible_label'                 => __( 'Visible on the product page', 'woocommerce' ),
146                 'used_for_variations_label'     => __( 'Used for variations', 'woocommerce' ),
147                 'new_attribute_prompt'          => __( 'Enter a name for the new attribute term:', 'woocommerce' ),
148                 'calc_totals'                   => __( 'Calculate totals based on order items, discounts, and shipping?', 'woocommerce' ),
149                 'calc_line_taxes'               => __( 'Calculate line taxes? This will calculate taxes based on the customers country. If no billing/shipping is set it will use the store base country.', 'woocommerce' ),
150                 'copy_billing'                  => __( 'Copy billing information to shipping information? This will remove any currently entered shipping information.', 'woocommerce' ),
151                 'load_billing'                  => __( 'Load the customer\'s billing information? This will remove any currently entered billing information.', 'woocommerce' ),
152                 'load_shipping'                 => __( 'Load the customer\'s shipping information? This will remove any currently entered shipping information.', 'woocommerce' ),
153                 'featured_label'                => __( 'Featured', 'woocommerce' ),
154                 'prices_include_tax'            => esc_attr( get_option('woocommerce_prices_include_tax') ),
155                 'round_at_subtotal'             => esc_attr( get_option( 'woocommerce_tax_round_at_subtotal' ) ),
156                 'no_customer_selected'          => __( 'No customer selected', 'woocommerce' ),
157                 'plugin_url'                    => WC()->plugin_url(),
158                 'ajax_url'                      => admin_url('admin-ajax.php'),
159                 'order_item_nonce'              => wp_create_nonce("order-item"),
160                 'add_attribute_nonce'           => wp_create_nonce("add-attribute"),
161                 'save_attributes_nonce'         => wp_create_nonce("save-attributes"),
162                 'calc_totals_nonce'             => wp_create_nonce("calc-totals"),
163                 'get_customer_details_nonce'    => wp_create_nonce("get-customer-details"),
164                 'search_products_nonce'         => wp_create_nonce("search-products"),
165                 'grant_access_nonce'            => wp_create_nonce("grant-access"),
166                 'revoke_access_nonce'           => wp_create_nonce("revoke-access"),
167                 'add_order_note_nonce'          => wp_create_nonce("add-order-note"),
168                 'delete_order_note_nonce'       => wp_create_nonce("delete-order-note"),
169                 'calendar_image'                => WC()->plugin_url().'/assets/images/calendar.png',
170                 'post_id'                       => isset( $post->ID ) ? $post->ID : '',
171                 'base_country'                  => WC()->countries->get_base_country(),
172                 'currency_format_num_decimals'  => absint( get_option( 'woocommerce_price_num_decimals' ) ),
173                 'currency_format_symbol'        => get_woocommerce_currency_symbol(),
174                 'currency_format_decimal_sep'   => esc_attr( stripslashes( get_option( 'woocommerce_price_decimal_sep' ) ) ),
175                 'currency_format_thousand_sep'  => esc_attr( stripslashes( get_option( 'woocommerce_price_thousand_sep' ) ) ),
176                 'currency_format'               => esc_attr( str_replace( array( '%1$s', '%2$s' ), array( '%s', '%v' ), get_woocommerce_price_format() ) ), // For accounting JS
177                 'rounding_precision'            => WC_ROUNDING_PRECISION,
178                 'tax_rounding_mode'             => WC_TAX_ROUNDING_MODE,
179                 'product_types'                 => array_map( 'sanitize_title', get_terms( 'product_type', array( 'hide_empty' => false, 'fields' => 'names' ) ) ),
180                 'default_attribute_visibility'  => apply_filters( 'default_attribute_visibility', false ),
181                 'default_attribute_variation'   => apply_filters( 'default_attribute_variation', false ),
182                 'i18n_download_permission_fail' => __( 'Could not grant access - the user may already have permission for this file or billing email is not set. Ensure the billing email is set, and the order has been saved.', 'woocommerce' ),
183                 'i18n_permission_revoke'        => __( 'Are you sure you want to revoke access to this download?', 'woocommerce' ),
184             );
185 
186             wp_localize_script( 'woocommerce_admin_meta_boxes', 'woocommerce_admin_meta_boxes', $params );
187         }
188 
189         // Product specific
190         if ( in_array( $screen->id, array( 'product', 'edit-product' ) ) ) {
191 
192             wp_enqueue_script( 'woocommerce_admin_meta_boxes_variations' );
193 
194             $params = array(
195                 'post_id'                             => isset( $post->ID ) ? $post->ID : '',
196                 'plugin_url'                          => WC()->plugin_url(),
197                 'ajax_url'                            => admin_url('admin-ajax.php'),
198                 'woocommerce_placeholder_img_src'     => wc_placeholder_img_src(),
199                 'add_variation_nonce'                 => wp_create_nonce("add-variation"),
200                 'link_variation_nonce'                => wp_create_nonce("link-variations"),
201                 'delete_variation_nonce'              => wp_create_nonce("delete-variation"),
202                 'delete_variations_nonce'             => wp_create_nonce("delete-variations"),
203                 'i18n_link_all_variations'            => esc_js( __( 'Are you sure you want to link all variations? This will create a new variation for each and every possible combination of variation attributes (max 50 per run).', 'woocommerce' ) ),
204                 'i18n_enter_a_value'                  => esc_js( __( 'Enter a value', 'woocommerce' ) ),
205                 'i18n_enter_a_value_fixed_or_percent' => esc_js( __( 'Enter a value (fixed or %)', 'woocommerce' ) ),
206                 'i18n_delete_all_variations'          => esc_js( __( 'Are you sure you want to delete all variations? This cannot be undone.', 'woocommerce' ) ),
207                 'i18n_last_warning'                   => esc_js( __( 'Last warning, are you sure?', 'woocommerce' ) ),
208                 'i18n_choose_image'                   => esc_js( __( 'Choose an image', 'woocommerce' ) ),
209                 'i18n_set_image'                      => esc_js( __( 'Set variation image', 'woocommerce' ) ),
210                 'i18n_variation_added'                => esc_js( __( "variation added", 'woocommerce' ) ),
211                 'i18n_variations_added'               => esc_js( __( "variations added", 'woocommerce' ) ),
212                 'i18n_no_variations_added'            => esc_js( __( "No variations added", 'woocommerce' ) ),
213                 'i18n_remove_variation'               => esc_js( __( 'Are you sure you want to remove this variation?', 'woocommerce' ) )
214             );
215 
216             wp_localize_script( 'woocommerce_admin_meta_boxes_variations', 'woocommerce_admin_meta_boxes_variations', $params );
217         }
218 
219         // Term ordering - only when sorting by term_order
220         if ( ( strstr( $screen->id, 'edit-pa_' ) || ( ! empty( $_GET['taxonomy'] ) && in_array( $_GET['taxonomy'], apply_filters( 'woocommerce_sortable_taxonomies', array( 'product_cat' ) ) ) ) ) && ! isset( $_GET['orderby'] ) ) {
221 
222             wp_register_script( 'woocommerce_term_ordering', WC()->plugin_url() . '/assets/js/admin/term-ordering.js', array('jquery-ui-sortable'), WC_VERSION );
223             wp_enqueue_script( 'woocommerce_term_ordering' );
224 
225             $taxonomy = isset( $_GET['taxonomy'] ) ? wc_clean( $_GET['taxonomy'] ) : '';
226 
227             $woocommerce_term_order_params = array(
228                 'taxonomy'          =>  $taxonomy
229              );
230 
231             wp_localize_script( 'woocommerce_term_ordering', 'woocommerce_term_ordering_params', $woocommerce_term_order_params );
232         }
233 
234         // Product sorting - only when sorting by menu order on the products page
235         if ( current_user_can('edit_others_pages') && $screen->id == 'edit-product' && isset( $wp_query->query['orderby'] ) && $wp_query->query['orderby'] == 'menu_order title' ) {
236 
237             wp_enqueue_script( 'woocommerce_product_ordering', WC()->plugin_url() . '/assets/js/admin/product-ordering.js', array('jquery-ui-sortable'), WC_VERSION, true );
238 
239         }
240 
241         // Reports Pages
242         if ( in_array( $screen->id, apply_filters( 'woocommerce_reports_screen_ids', array( $wc_screen_id . '_page_wc-reports', 'dashboard' ) ) ) ) {
243             wp_enqueue_script( 'wc-reports', WC()->plugin_url() . '/assets/js/admin/reports' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker' ), WC_VERSION );
244             wp_enqueue_script( 'flot', WC()->plugin_url() . '/assets/js/admin/jquery.flot' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
245             wp_enqueue_script( 'flot-resize', WC()->plugin_url() . '/assets/js/admin/jquery.flot.resize' . $suffix . '.js', array('jquery', 'flot'), WC_VERSION );
246             wp_enqueue_script( 'flot-time', WC()->plugin_url() . '/assets/js/admin/jquery.flot.time' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
247             wp_enqueue_script( 'flot-pie', WC()->plugin_url() . '/assets/js/admin/jquery.flot.pie' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
248             wp_enqueue_script( 'flot-stack', WC()->plugin_url() . '/assets/js/admin/jquery.flot.stack' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
249         }
250 
251         // Chosen RTL
252         if ( is_rtl() ) {
253             wp_enqueue_script( 'chosen-rtl', WC()->plugin_url() . '/assets/js/chosen/chosen-rtl' . $suffix . '.js', array( 'jquery' ), WC_VERSION, true );
254         }
255     }
256 
257     /**
258      * Admin Head
259      *
260      * Outputs some styles in the admin <head> to show icons on the woocommerce admin pages
261      *
262      * @access public
263      * @return void
264      */
265     public function product_taxonomy_styles() {
266 
267         if ( ! current_user_can( 'manage_woocommerce' ) ) return;
268         ?>
269         <style type="text/css">
270             <?php if ( isset($_GET['taxonomy']) && $_GET['taxonomy']=='product_cat' ) : ?>
271                 .icon32-posts-product { background-position: -243px -5px !important; }
272             <?php elseif ( isset($_GET['taxonomy']) && $_GET['taxonomy']=='product_tag' ) : ?>
273                 .icon32-posts-product { background-position: -301px -5px !important; }
274             <?php endif; ?>
275         </style>
276         <?php
277     }
278 }
279 
280 endif;
281 
282 return new WC_Admin_Assets();
283 
WooCommerce API documentation generated by ApiGen 2.8.0