1 <?php
2 3 4 5 6 7 8 9
10
11 if ( ! defined( 'ABSPATH' ) ) exit;
12
13 if ( ! class_exists( 'WC_Admin_Assets' ) ) :
14
15 16 17
18 class WC_Admin_Assets {
19
20 21 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 31
32 public function admin_styles() {
33 global $wp_scripts;
34
35
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
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 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
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
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
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
118 if ( in_array( $screen->id, array( 'edit-product_cat' ) ) )
119 wp_enqueue_media();
120
121
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
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() ) ),
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
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
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
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
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
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 259 260 261 262 263 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