oont-contents/plugins/woo-order-export-lite/classes/class-wc-order-export-admin.php
2025-02-08 15:10:23 +01:00

653 lines
No EOL
24 KiB
PHP

<?php
use Automattic\WooCommerce\Utilities\FeaturesUtil;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class WC_Order_Export_Admin {
var $activation_notice_option = 'woocommerce-order-export-activation-notice-shown';
var $step = 30;
public static $formats = array( 'XLS', 'CSV', 'XML', 'JSON', 'TSV', 'PDF', 'HTML' );
public static $export_types = array( 'EMAIL', 'FTP', 'HTTP', 'FOLDER', 'SFTP', 'ZAPIER' );
public $url_plugin;
public $path_plugin;
public $path_views_default, $settings;
protected $tabs;
const last_bulk_export_results = 'woe-last-bulk-export-results';
public static $cap_export_orders = "export_woocommerce_orders";
public function __construct() {
$this->url_plugin = dirname( plugin_dir_url( __FILE__ ) ) . '/';
$this->path_plugin = dirname( plugin_dir_path( __FILE__ ) ) . '/';
$this->path_views_default = dirname( plugin_dir_path( __FILE__ ) ) . "/view/";
add_action( 'init', array( $this, 'load_textdomain' ) );
add_action( 'before_woocommerce_init', function() {
if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
FeaturesUtil::declare_compatibility( 'custom_order_tables', WOE_PLUGIN_PATH, true );
}
} );
if ( is_admin() ) { // admin actions
add_action( 'admin_menu', array( $this, 'add_menu' ) );
// load scripts on our pages only
if ( isset( $_GET['page'] ) && $_GET['page'] == 'wc-order-export' ) {
add_action( 'admin_enqueue_scripts', array( $this, 'thematic_enqueue_scripts' ) );
add_filter( 'script_loader_src', array( $this, 'script_loader_src' ), 999, 2 );
}
add_action( 'wp_loaded' , function() { //init tabs after loading text domains!
$this->tabs = $this->get_tabs();
});
add_action( 'wp_ajax_order_exporter', array( $this, 'ajax_gate' ) );
//Add custom bulk export action in Woocomerce orders Table, modified for WP 4.7
add_filter( 'bulk_actions-edit-shop_order', array( $this, 'export_orders_bulk_action' ) );
add_filter( 'handle_bulk_actions-edit-shop_order', array(
$this,
'export_orders_bulk_action_process',
), 10, 3 );
add_action( 'admin_notices', array( $this, 'export_orders_bulk_action_notices' ) );
//HPOS bulk actions
add_filter( 'bulk_actions-woocommerce_page_wc-orders', array( $this, 'export_orders_bulk_action' ) );
add_filter( 'handle_bulk_actions-woocommerce_page_wc-orders', array(
$this,
'export_orders_bulk_action_process',
), 10, 3 );
//do once
if ( ! get_option( $this->activation_notice_option ) ) {
add_action( 'admin_notices', array( $this, 'display_plugin_activated_message' ) );
}
//extra links in >Plugins
add_filter( 'plugin_action_links_' . WOE_PLUGIN_BASENAME, array( $this, 'add_action_links' ) );
// Add 'Export Status' orders page column header
add_filter( 'manage_edit-shop_order_columns', array( $this, 'add_order_status_column_header' ), 20 );
add_filter( 'manage_edit-shop_order_sortable_columns', array( $this, 'add_order_status_sortable_columns' ) );
add_filter( 'manage_woocommerce_page_wc-orders_columns', array( $this, 'add_order_status_column_header' ), 20 );
add_filter( 'manage_woocommerce_page_wc-orders_sortable_columns', array( $this, 'add_order_status_sortable_columns' ) );
add_filter( 'request', array( $this, 'add_order_status_request_query' ) );
// Add 'Export Status' orders page column content
add_action( 'manage_shop_order_posts_custom_column', array( $this, 'add_order_status_column_content' ) );
add_action( 'manage_woocommerce_page_wc-orders_custom_column', array( $this, 'add_order_status_column_content' ), 10, 2 );
// Style for 'Export Status' column
if ( isset( $_GET['post_type'] ) && $_GET['post_type'] == 'shop_order' ) {
add_action( 'admin_print_styles', array( $this, 'add_order_status_column_style' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'woe_add_orders_style' ) );
}
}
do_action( 'woe_order_export_admin_init', $this );
$this->settings = WC_Order_Export_Main_Settings::get_settings();
}
public function load_textdomain() {
$locale = apply_filters( 'plugin_locale', get_locale(), 'woo-order-export-lite' );
load_textdomain( 'woo-order-export-lite', WP_LANG_DIR . '/woo-order-export-lite/woo-order-export-lite' . $locale . '.mo' );
}
public function get_tabs() {
$tabs = array(
WC_Order_Export_Admin_Tab_Export_Now::get_key() => new WC_Order_Export_Admin_Tab_Export_Now(),
WC_Order_Export_Admin_Tab_Profiles::get_key() => new WC_Order_Export_Admin_Tab_Profiles(),
WC_Order_Export_Admin_Tab_Status_Change_Jobs::get_key() => new WC_Order_Export_Admin_Tab_Status_Change_Jobs(),
WC_Order_Export_Admin_Tab_Schedule_Jobs::get_key() => new WC_Order_Export_Admin_Tab_Schedule_Jobs(),
WC_Order_Export_Admin_Tab_Tools::get_key() => new WC_Order_Export_Admin_Tab_Tools(),
WC_Order_Export_Admin_Tab_Help::get_key() => new WC_Order_Export_Admin_Tab_Help(),
);
return apply_filters( 'woe_order_export_admin_tabs', $tabs );
}
public function add_order_status_column_header( $columns ) {
if ( ! $this->settings['show_export_status_column'] ) {
return $columns;
}
$new_columns = array();
foreach ( $columns as $column_name => $column_info ) {
if ( 'order_actions' === $column_name OR 'wc_actions' === $column_name ) { // Woocommerce uses wc_actions since 3.3.0
$label = __( 'Export Status', 'woo-order-export-lite' );
$new_columns['woe_export_status'] = $label;
}
$new_columns[ $column_name ] = $column_info;
}
return $new_columns;
}
/**
* Define which columns are sortable.
*
* @param array $columns Existing columns.
*
* @return array
*/
public function add_order_status_sortable_columns( $columns ) {
if ( ! $this->settings['show_export_status_column'] ) {
return $columns;
}
$columns['woe_export_status'] = 'woe_export_status';
return $columns;
}
/**
* @param array $query_vars Query vars.
*
* @return array
*/
public function add_order_status_request_query( $query_vars ) {
if ( isset( $query_vars['orderby'] ) ) {
if ( 'woe_export_status' === $query_vars['orderby'] ) {
$order = isset( $query_vars['order'] ) ? $query_vars['order'] : 'ASC';
$query_vars = array_merge( $query_vars, array(
'orderby' => array( 'meta_value_num' => $order, 'date' => 'DESC' ),
'meta_query' => array(
'relation' => 'OR',
// NOT EXISTS required! Otherwise, you will not get all orders.
array(
'key' => 'woe_order_exported',
'compare' => 'NOT EXISTS',
),
array(
'key' => 'woe_order_exported',
'compare' => 'EXISTS',
),
),
) );
}
}
return $query_vars;
}
public function add_order_status_column_content( $column, $order = null ) {
global $post;
if ( 'woe_export_status' === $column ) {
$is_exported = false;
foreach( apply_filters( "woe_export_status_postfixes_to_verify", array("") ) as $key ) {
if ( $order ? $order->get_meta("woe_order_exported" . $key) :
get_post_meta( $post->ID, "woe_order_exported" . $key, true ) ) {
$is_exported = true;
}
}
if ( $is_exported ) {
echo '<span class="dashicons dashicons-yes" style="color: #2ea2cc"></span>';
} else {
echo '<span class="dashicons dashicons-minus"></span>';
}
}
}
function add_order_status_column_style() {
$css = '.widefat .column-woe_export_status { width: 45px; text-align: center; }';
wp_add_inline_style( 'woocommerce_admin_styles', $css );
}
function woe_add_orders_style() {
wp_enqueue_style( 'woe_orders_style', $this->url_plugin . 'assets/css/orders_style.css', array(), WOE_VERSION );
}
public function display_plugin_activated_message() {
?>
<div class="notice notice-success is-dismissible">
<p><?php _e( 'Advanced Order Export For WooCommerce is available <a href="admin.php?page=wc-order-export">on this page</a>.',
'woo-order-export-lite' ); ?></p>
</div>
<?php
update_option( $this->activation_notice_option, true, false );
}
public function add_action_links( $links ) {
$mylinks = array(
'<a href="admin.php?page=wc-order-export">' . __( 'Settings', 'woo-order-export-lite' ) . '</a>',
'<a href="https://docs.algolplus.com/order-export-docs/" target="_blank">' . __( 'Docs',
'woo-order-export-lite' ) . '</a>',
'<a href="https://docs.algolplus.com/support/" target="_blank">' . __( 'Support',
'woo-order-export-lite' ) . '</a>',
);
return array_merge( $mylinks, $links );
}
public function deactivate() {
wp_clear_scheduled_hook( "wc_export_cron_global" );
delete_option( $this->activation_notice_option );
}
public function add_menu() {
if ( apply_filters( 'woe_current_user_can_export', true ) ) {
if ( current_user_can( 'manage_woocommerce' ) ) {
add_submenu_page( 'woocommerce', __( 'Export Orders', 'woo-order-export-lite' ),
__( 'Export Orders', 'woo-order-export-lite' ), "manage_woocommerce", 'wc-order-export',
array( $this, 'render_menu' ) );
} else // add after Sales Report!
{
$capability = current_user_can(self::$cap_export_orders) ? self::$cap_export_orders : 'view_woocommerce_reports';
add_menu_page( __( 'Export Orders', 'woo-order-export-lite' ),
__( 'Export Orders', 'woo-order-export-lite' ), $capability, 'wc-order-export',
array( $this, 'render_menu' ), null, '55.7' );
}
}
}
/**
* @param string $tab
*
* @return bool
*/
protected function is_tab_exists( $tab ) {
return isset( $this->tabs[ $tab ] );
}
public function render_menu() {
$active_tab = isset( $_REQUEST['tab'] ) && $this->is_tab_exists( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : $this->settings['default_tab'];
$this->render( 'main', array(
'WC_Order_Export' => $this,
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'tabs' => $this->tabs,
'active_tab' => $active_tab,
) );
if ( isset( $this->tabs[ $active_tab ] ) ) {
$this->tabs[ $active_tab ]->render();
}
}
public function thematic_enqueue_scripts() {
wp_enqueue_media();
wp_enqueue_script( 'jquery-ui-datepicker' );
wp_enqueue_script( 'jquery-ui-sortable' );
wp_enqueue_script( 'jquery-ui-draggable' );
wp_enqueue_script( 'jquery-touch-punch' );
wp_enqueue_style( 'jquery-style',
'//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css' );
$active_tab = isset( $_REQUEST['tab'] ) && $this->is_tab_exists( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : $this->settings['default_tab'];
$this->enqueue_select2_scripts( $active_tab );
wp_enqueue_script( 'serializejson', $this->url_plugin . 'assets/js/jquery.serializejson.js', array( 'jquery' ), WOE_VERSION );
// kill learn-press
// prevent to rewrite $.fn.serializeJSON
add_action( 'learn-press/admin/after-enqueue-scripts', function () {
wp_scripts()->dequeue( array('learn-press-utils', 'lp-admin-learnpress', 'lp-admin') );
},PHP_INT_MAX );
wp_enqueue_style( 'export', $this->url_plugin . 'assets/css/export.css', array(), WOE_VERSION );
wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array() );
$_REQUEST['tab'] = isset( $_REQUEST['tab'] ) && $this->is_tab_exists( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : $this->settings['default_tab'];
if ( isset( $_REQUEST['wc_oe'] ) AND ( strpos( $_REQUEST['wc_oe'], 'add_' ) === 0 OR strpos( $_REQUEST['wc_oe'],
'edit_' ) === 0 ) OR $_REQUEST['tab'] == 'export' ) {
$localize_settings_form = array(
'add_fields_to_export' => __( 'Add %s fields', 'woo-order-export-lite' ),
'repeats' => array(
'rows' => __( 'rows', 'woo-order-export-lite' ),
'columns' => __( 'columns', 'woo-order-export-lite' ),
'inside_one_cell' => __( 'one row', 'woo-order-export-lite' ),
),
'js_tpl_popup' => array(
'add' => __( 'Add', 'woo-order-export-lite' ),
'as' => __( 'as', 'woo-order-export-lite' ),
'split_values_by' => __( 'Split values by', 'woo-order-export-lite' ),
'fill_order_columns_label' => __( 'Fill order columns for', 'woo-order-export-lite' ),
'for_all_rows_label' => __( 'all rows', 'woo-order-export-lite' ),
'for_first_row_only_label' => __( '1st row only', 'woo-order-export-lite' ),
'grouping_by' => array(
'products' => __( 'Grouping by product', 'woo-order-export-lite' ),
'coupons' => __( 'Grouping by coupon', 'woo-order-export-lite' ),
),
),
'index' => array(
'product_pop_up_title' => __( 'Set up product fields', 'woo-order-export-lite' ),
'coupon_pop_up_title' => __( 'Set up coupon fields', 'woo-order-export-lite' ),
'products' => __( 'products', 'woo-order-export-lite' ),
'coupons' => __( 'coupons', 'woo-order-export-lite' ),
),
'remove_all_fields_confirm' => __( 'Remove all fields?', 'woo-order-export-lite' ),
'reset_profile_confirm' => __( 'This action will reset filters, settings and fields to default state. Are you sure?', 'woo-order-export-lite' ),
'sum_symbol_tooltip' => esc_attr__( 'Show total amount for this column', 'woo-order-export-lite' ),
'sum_symbol' => esc_attr__( 'Sum', 'woo-order-export-lite' ),
);
$settings = WC_Order_Export_Main_Settings::get_settings();
$settings_form = array(
'save_settings_url' => esc_url( add_query_arg(
array(
'page' => 'wc-order-export',
'tab' => $active_tab,
'save' => 'y',
),
admin_url( 'admin.php' ) ) ),
'EXPORT_NOW' => WC_Order_Export_Manage::EXPORT_NOW,
// TODO start - replace later
'EXPORT_PROFILE' => WC_Order_Export_Manage::EXPORT_PROFILE,
'EXPORT_SCHEDULE' => WC_Order_Export_Manage::EXPORT_SCHEDULE,
'EXPORT_ORDER_ACTION' => WC_Order_Export_Manage::EXPORT_ORDER_ACTION,
// end - replace later
'copy_to_profiles_url' => esc_url( add_query_arg(
array(
'page' => 'wc-order-export',
'tab' => 'profiles',
'wc_oe' => 'edit_profile',
),
admin_url( 'admin.php' ) ) ),
'flat_formats' => array_map( 'strtoupper', WC_Order_Export_Engine::get_plain_formats() ),
'object_formats' => array( 'XML', 'JSON' ),
'xml_formats' => array( 'XML' ),
'day_names' => WC_Order_Export_Manage::get_days(),
'woe_nonce' => wp_create_nonce( 'woe_nonce' ),
'woe_active_tab' => $active_tab,
'settings' => $settings,
);
wp_enqueue_script( 'settings-form', $this->url_plugin . 'assets/js/settings-form.js', array(), WOE_VERSION );
wp_localize_script( 'settings-form', 'settings_form', $settings_form );
wp_localize_script( 'settings-form', 'localize_settings_form', $localize_settings_form );
// Localize the script with new data
$translation_array = array(
'empty_column_name' => __( 'empty column name', 'woo-order-export-lite' ),
'empty_meta_key' => __( 'empty meta key', 'woo-order-export-lite' ),
'empty_meta_key_and_taxonomy' => __( 'select product field or taxonomy',
'woo-order-export-lite' ),
'empty_item_field' => __( 'select item field', 'woo-order-export-lite' ),
'empty_value' => __( 'empty value', 'woo-order-export-lite' ),
'empty_title' => __( 'Title is empty', 'woo-order-export-lite' ),
'wrong_date_range' => __( 'Date From is greater than Date To', 'woo-order-export-lite' ),
'no_fields' => __( 'Please, set up fields to export', 'woo-order-export-lite' ),
'no_results' => __( 'Nothing to export. Please, adjust your filters',
'woo-order-export-lite' ),
'empty' => __( 'empty', 'woo-order-export-lite' ),
);
wp_localize_script( 'settings-form', 'export_messages', $translation_array );
wp_enqueue_script( 'woe_filters', $this->url_plugin . 'assets/js/filters.js', array(), WOE_VERSION );
wp_enqueue_script( 'woe_buttons', $this->url_plugin . 'assets/js/buttons.js', array(), WOE_VERSION );
wp_enqueue_script( 'woe_export_fields', $this->url_plugin . 'assets/js/export-fields.js', array(), WOE_VERSION );
wp_enqueue_script( 'wp-color-picker' );
wp_enqueue_style( 'wp-color-picker' );
do_action( 'woe_thematic_enqueue_scripts_settings_form' );
}
do_action( 'woe_thematic_enqueue_scripts' );
}
private function get_select2_locale() {
$locale = get_locale();
$select2_locales = array(
'de_DE' => 'de',
'de_CH' => 'de',
'ru_RU' => 'ru',
'pt_BR' => 'pt-BR',
'pt_PT' => 'pt',
'zh_CN' => 'zh-CN',
'fr_FR' => 'fr',
'es_ES' => 'es',
);
return isset( $select2_locales[ $locale ] ) ? $select2_locales[ $locale ] : 'en';
}
private function enqueue_select2_scripts( $active_tab ) {
$settings = WC_Order_Export_Main_Settings::get_settings();
wp_enqueue_script( 'select22', $this->url_plugin . 'assets/js/select2/select2.full.js',
array( 'jquery' ), '4.0.3' );
if ( $select2_locale = $this->get_select2_locale() ) {
// enable by default
if ( $select2_locale !== 'en' ) {
wp_enqueue_script( "select22-i18n-{$select2_locale}",
$this->url_plugin . "assets/js/select2/i18n/{$select2_locale}.js", array( 'jquery', 'select22' ) );
}
}
wp_enqueue_script( 'select2-i18n', $this->url_plugin . 'assets/js/select2-i18n.js', array(
'jquery',
'select22',
), WOE_VERSION );
$script_data = array(
'locale' => get_locale(),
'select2_locale' => $this->get_select2_locale(),
'active_tab' => $active_tab,
'show_all_items_in_filters' => isset( $settings['show_all_items_in_filters'] ) ? $settings['show_all_items_in_filters'] : false,
);
wp_localize_script( 'select2-i18n', 'script_data', $script_data );
wp_enqueue_style( 'select2-css', $this->url_plugin . 'assets/css/select2/select2.min.css',
array(), WC_VERSION );
}
public function script_loader_src( $src, $handle ) {
//stop WP optimize! they disable button Apply in Bulk Actions
if ( preg_match( '#wp-optimize\/js\/wposmush#', $src ) ) {
return "";
}
// don't load ANY select2.js / select2.min.js and OUTDATED select2.full.js
if ( ! preg_match( '/\/select2\.full\.js\?ver=[1-3]/', $src ) && ! preg_match( '/\/select2\.min\.js/',
$src ) && ! preg_match( '/\/select2\.js/', $src )
&& ! preg_match( '#jquery\.serialize-object\.#', $src ) /*this script breaks our json!*/
) {
return $src;
}
return "";
}
public function render( $view, $params = array(), $path_views = null ) {
$params = apply_filters( 'woe_render_params', $params );
$params = apply_filters( 'woe_render_params_' . $view, $params );
extract( $params );
if ( $path_views ) {
include $path_views . "$view.php";
} else {
include $this->path_views_default . "$view.php";
}
}
// AJAX part
// calls ajax_action_XXXX
public function ajax_gate() {
if( !current_user_can('view_woocommerce_reports') AND !current_user_can(self::$cap_export_orders) ){
die( __( 'You can not do it', 'woo-order-export-lite' ) );
}
if ( ! isset( $_REQUEST['method'] ) ) {
die( __( 'Empty method', 'woo-order-export-lite' ) );
}
$method = 'ajax_' . $_REQUEST['method'];
$tab = isset( $_REQUEST['tab'] ) && $this->is_tab_exists( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : false;
do_action( 'woe_order_export_admin_ajax_gate_before');
if ( ! isset( $this->tabs[ $tab ] ) ) {
$ajax_handler = apply_filters( 'woe_global_ajax_handler', new WC_Order_Export_Ajax() );
if ( ! method_exists( $ajax_handler, $method ) ) {
die( sprintf( __( 'Unknown AJAX method %s', 'woo-order-export-lite' ), esc_html($method)) );
}
$ajax_handler->$method();
die();
}
if ( ! method_exists( $this->tabs[ $tab ], $method ) ) {
die( sprintf( __( 'Unknown tab method %s', 'woo-order-export-lite' ), esc_html($method)) );
}
if (! check_admin_referer( 'woe_nonce', 'woe_nonce' ) ) {
die( __( 'Wrong nonce', 'woo-order-export-lite' ) );
}
$_POST = stripslashes_deep( $_POST );
// parse json to arrays?
if ( ! empty( $_POST['json'] ) ) {
$json = json_decode( $_POST['json'], true );
if ( is_array( $json ) ) {
// add $_POST['settings'],$_POST['orders'],$_POST['products'],$_POST['coupons']
$_POST = $_POST + $json;
unset( $_POST['json'] );
}
}
$this->tabs[ $tab ]->$method();
die();
}
//Works since Wordpress 4.7
function export_orders_bulk_action( $actions ) {
$settings = WC_Order_Export_Manage::get( WC_Order_Export_Manage::EXPORT_NOW );
WC_Order_Export_Manage::set_correct_file_ext( $settings );
$new_actions = array();
// default
if ( ! empty( $settings['format'] ) ) {
$new_actions['woe_export_selected_orders'] = sprintf( __( 'Export as %s', 'woo-order-export-lite' ),
$settings['format'] );
}
// mark/unmark
if ( $this->settings['show_export_actions_in_bulk'] ) {
$new_actions['woe_mark_exported'] = __( 'Mark exported', 'woo-order-export-lite' );
$new_actions['woe_unmark_exported'] = __( 'Unmark exported', 'woo-order-export-lite' );
}
if( empty($actions) ) $actions = array(); //fix if another plugin damaged $actions
return $new_actions + $actions;
}
function export_orders_bulk_action_process( $redirect_to, $action, $ids ) {
$new_redirect_to = false;
switch ( $action ) {
case 'woe_export_selected_orders':
$new_redirect_to = admin_url( 'admin-ajax.php' ) . "?action=order_exporter&method=export_download_bulk_file&export_bulk_profile=now&ids=" . join( ',', $ids );
break;
case 'woe_mark_exported':
foreach ( $ids as $order_id ) {
$order = new WC_Order($order_id);
$order->update_meta_data('woe_order_exported' . apply_filters("woe_exported_postfix",''), current_time( 'timestamp' ));
$order->save();
}
$new_redirect_to = add_query_arg( array(
'woe_bulk_mark_exported' => count( $ids ),
'woe_bulk_unmark_exported' => false,
), $redirect_to );
break;
case 'woe_unmark_exported':
foreach ( $ids as $order_id ) {
$order = new WC_Order($order_id);
foreach( apply_filters( "woe_export_status_postfixes_to_delete", array("") ) as $key )
$order->delete_meta_data( 'woe_order_exported' . $key );
$order->save();
}
$new_redirect_to = add_query_arg( array(
'woe_bulk_mark_exported' => false,
'woe_bulk_unmark_exported' => count( $ids ),
), $redirect_to );
break;
}
if ( $new_redirect_to ) {
wp_redirect( $new_redirect_to );
exit();
}
return $redirect_to;
}
function export_orders_bulk_action_notices() {
global $post_type, $pagenow;
if ( $pagenow == 'edit.php' && $post_type == 'shop_order' && isset( $_REQUEST['woe_bulk_mark_exported'] ) ) {
$count = intval( $_REQUEST['woe_bulk_mark_exported'] );
printf(
'<div id="message" class="updated fade">' .
_n( '%s order marked.', '%s orders marked.', $count, 'woo-order-export-lite' )
. '</div>',
$count
);
} else if ( $pagenow == 'edit.php' && $post_type == 'shop_order' && isset( $_REQUEST['woe_bulk_unmark_exported'] ) ) {
$count = intval( $_REQUEST['woe_bulk_unmark_exported'] );
printf(
'<div id="message" class="updated fade">' .
_n( '%s order unmarked.', '%s orders unmarked.', $count, 'woo-order-export-lite' )
. '</div>',
$count
);
} else {
$logs = get_transient( WC_Order_Export_Admin::last_bulk_export_results );
if ( $logs ) {
delete_transient( WC_Order_Export_Admin::last_bulk_export_results );
echo "<div id=\"notice-orders\" class=\"notice notice-info is-dismissible\" style=\"padding: 15px\">{$logs}</div>";
}
}
}
function must_run_ajax_methods() {
// wait admin ajax!
$script_name = ! empty( $_SERVER['SCRIPT_NAME'] ) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['PHP_SELF'];
if ( basename( $script_name ) != "admin-ajax.php" ) {
return false;
}
// our method MUST BE called
return isset( $_REQUEST['action'] ) AND ( $_REQUEST['action'] == "order_exporter" OR $_REQUEST['action'] == "order_exporter_run" );
}
public static function user_can_add_custom_php() {
return apply_filters( 'woe_user_can_add_custom_php', current_user_can( 'edit_themes' ) );
}
}