includes();
$this->api = new AfterShip_API();
$options = get_option('aftership_option_name');
if ($options) {
if (isset($options['plugin'])) {
$plugin = $options['plugin'];
if ($plugin == 'aftership') {
add_action('admin_print_scripts', array(&$this, 'library_scripts'));
add_action('admin_print_styles', array(&$this, 'admin_styles'));
add_action('add_meta_boxes', array(&$this, 'add_meta_box'));
add_action('woocommerce_process_shop_order_meta', array(&$this, 'save_meta_box'), 0, 2);
add_action('plugins_loaded', array($this, 'load_plugin_textdomain'));
$this->couriers = $options['couriers'];
}
// View Order Page
$this->plugin = $plugin;
}else{
$this->plugin = '';
}
if (isset($options['use_track_button'])) {
$this->use_track_button = $options['use_track_button'];
}else{
$this->use_track_button = false;
}
add_action('woocommerce_view_order', array(&$this, 'display_tracking_info'));
add_action('woocommerce_email_before_order_table', array(&$this, 'email_display'));
}
// user profile api key
add_action('show_user_profile', array($this, 'add_api_key_field'));
add_action('edit_user_profile', array($this, 'add_api_key_field'));
add_action('personal_options_update', array($this, 'generate_api_key'));
add_action('edit_user_profile_update', array($this, 'generate_api_key'));
register_activation_hook(__FILE__, array($this, 'install'));
}
public function install()
{
global $wp_roles;
if (class_exists('WP_Roles')) {
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
}
if (is_object($wp_roles)) {
$wp_roles->add_cap('administrator', 'manage_aftership');
}
}
private function includes()
{
include_once('class-aftership-api.php');
include_once('class-aftership-settings.php');
}
/**
* Localisation
*/
public function load_plugin_textdomain()
{
load_plugin_textdomain('aftership', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
public function admin_styles()
{
wp_enqueue_style('aftership_styles_chosen', plugins_url(basename(dirname(__FILE__))) . '/assets/plugin/chosen/chosen.min.css');
wp_enqueue_style('aftership_styles', plugins_url(basename(dirname(__FILE__))) . '/assets/css/admin.css');
}
public function library_scripts()
{
wp_enqueue_script('aftership_styles_chosen_jquery', plugins_url(basename(dirname(__FILE__))) . '/assets/plugin/chosen/chosen.jquery.min.js');
wp_enqueue_script('aftership_styles_chosen_proto', plugins_url(basename(dirname(__FILE__))) . '/assets/plugin/chosen/chosen.proto.min.js');
wp_enqueue_script('aftership_script_util', plugins_url(basename(dirname(__FILE__))) . '/assets/js/util.js');
wp_enqueue_script('aftership_script_couriers', plugins_url(basename(dirname(__FILE__))) . '/assets/js/couriers.js');
wp_enqueue_script('aftership_script_admin', plugins_url(basename(dirname(__FILE__))) . '/assets/js/admin.js');
}
/**
* Add the meta box for shipment info on the order page
*
* @access public
*/
public function add_meta_box()
{
add_meta_box('woocommerce-aftership', __('AfterShip', 'wc_aftership'), array(&$this, 'meta_box'), 'shop_order', 'side', 'high');
}
/**
* Show the meta box for shipment info on the order page
*
* @access public
*/
public function meta_box()
{
// just draw the layout, no data
global $post;
$selected_provider = get_post_meta($post->ID, '_aftership_tracking_provider', true);
echo '
';
echo '
' . __('Carrier:', 'wc_aftership') . ' ';
if ($selected_provider == '') {
$selected_text = 'selected="selected"';
} else {
$selected_text = '';
}
echo 'Please Select ';
echo ' ';
echo 'Update carrier list ';
echo ' ';
echo ' ';
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_provider_name',
'label' => __('', 'wc_aftership'),
'placeholder' => '',
'description' => '',
'class' => 'hidden',
'value' => get_post_meta($post->ID, '_aftership_tracking_provider_name', true),
));
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_required_fields',
'label' => __('', 'wc_aftership'),
'placeholder' => '',
'description' => '',
'class' => 'hidden',
'value' => get_post_meta($post->ID, '_aftership_tracking_required_fields', true),
));
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_number',
'label' => __('Tracking number:', 'wc_aftership'),
'placeholder' => '',
'description' => '',
'value' => get_post_meta($post->ID, '_aftership_tracking_number', true),
));
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_shipdate',
'label' => __('Date shipped:', 'wc_aftership'),
'placeholder' => 'YYYY-MM-DD',
'description' => '',
'class' => 'date-picker-field hidden-field',
'value' => ($date = get_post_meta($post->ID, '_aftership_tracking_shipdate', true)) ? date('Y-m-d', $date) : ''
));
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_postal',
'label' => __('Postal Code:', 'wc_aftership'),
'placeholder' => '',
'description' => '',
'class' => 'hidden-field',
'value' => get_post_meta($post->ID, '_aftership_tracking_postal', true),
));
woocommerce_wp_text_input(array(
'id' => 'aftership_tracking_account',
'label' => __('Account name:', 'wc_aftership'),
'placeholder' => '',
'description' => '',
'class' => 'hidden-field',
'value' => get_post_meta($post->ID, '_aftership_tracking_account', true),
));
echo '
';
}
/**
* Order Downloads Save
*
* Function for processing and storing all order downloads.
*/
public function save_meta_box($post_id, $post)
{
if (isset($_POST['aftership_tracking_number'])) {
// Download data
$tracking_provider = woocommerce_clean($_POST['aftership_tracking_provider']);
$tracking_number = woocommerce_clean($_POST['aftership_tracking_number']);
$tracking_provider_name = woocommerce_clean($_POST['aftership_tracking_provider_name']);
$tracking_required_fields = woocommerce_clean($_POST['aftership_tracking_required_fields']);
$shipdate = woocommerce_clean(strtotime($_POST['aftership_tracking_shipdate']));
$postal = woocommerce_clean($_POST['aftership_tracking_postal']);
$account = woocommerce_clean($_POST['aftership_tracking_account']);
// Update order data
update_post_meta($post_id, '_aftership_tracking_provider', $tracking_provider);
update_post_meta($post_id, '_aftership_tracking_number', $tracking_number);
update_post_meta($post_id, '_aftership_tracking_provider_name', $tracking_provider_name);
update_post_meta($post_id, '_aftership_tracking_required_fields', $tracking_required_fields);
update_post_meta($post_id, '_aftership_tracking_shipdate', $shipdate);
update_post_meta($post_id, '_aftership_tracking_postal', $postal);
update_post_meta($post_id, '_aftership_tracking_account', $account);
}
}
/**
* Display the API key info for a user
*
* @since 2.1
* @param WP_User $user
*/
public function add_api_key_field($user)
{
if (!current_user_can('manage_aftership'))
return;
if (current_user_can('edit_user', $user->ID)) {
?>
AfterShip
aftership_wp_api_key)) {
$api_key = 'ck_' . hash('md5', $user->user_login . date('U') . mt_rand());
update_user_meta($user_id, 'aftership_wp_api_key', $api_key);
} else {
delete_user_meta($user_id, 'aftership_wp_api_key');
}
}
}
}
/**
* Display Shipment info in the frontend (order view/tracking page).
*
* @access public
*/
function display_tracking_info($order_id, $for_email = false)
{
if ($this->plugin == 'aftership') {
$this->display_order_aftership($order_id, $for_email);
} else if ($this->plugin == 'wc-shipment-tracking') { //$49
$this->display_order_wc_shipment_tracking($order_id, $for_email);
}
}
private function display_order_aftership($order_id, $for_email)
{
$tracking_provider = get_post_meta($order_id, '_aftership_tracking_provider', true);
$tracking_number = get_post_meta($order_id, '_aftership_tracking_number', true);
$tracking_provider_name = get_post_meta($order_id, '_aftership_tracking_provider_name', true);
$tracking_required_fields = get_post_meta($order_id, '_aftership_tracking_required_fields', true);
$date_shipped = get_post_meta($order_id, '_aftership_tracking_shipdate', true);
$postcode = get_post_meta($order_id, '_aftership_tracking_postal', true);
$account = get_post_meta($order_id, '_aftership_tracking_account', true);
if (!$tracking_provider)
return;
if (!$tracking_number)
return;
$provider_name = $tracking_provider_name;
$provider_required_fields = explode(",", $tracking_required_fields);
$date_shipped_str = '';
$postcode_str = '';
$account_str = '';
foreach ($provider_required_fields as $field) {
if ($field == 'tracking_ship_date') {
if ($date_shipped) {
$date_shipped_str = ' ' . sprintf(__('on %s', 'wc_shipment_tracking'), date_i18n(__('l jS F Y', 'wc_shipment_tracking'), $date_shipped));
}
} else if ($field == 'tracking_postal_code') {
if ($postcode) {
$postcode_str = ' ' . sprintf('The postal code is %s.', $postcode);
}
} else if ($field == 'tracking_account_number') {
if ($account) {
$account_str = ' ' . sprintf('The account is %s.', $account);
}
}
}
$provider_name = ' ' . __('via', 'wc_shipment_tracking') . ' ' . $provider_name . ' ';
echo wpautop(sprintf(__('Your order was shipped%s%s. Tracking number is %s.%s%s', 'wc_shipment_tracking'), $date_shipped_str, $provider_name, $tracking_number, $postcode_str, $account_str));
if (!$for_email && $this->use_track_button) {
$this->display_track_button($tracking_provider, $tracking_number);
}
}
private function display_order_wc_shipment_tracking($order_id, $for_email)
{
if ($for_email || !$this->use_track_button) {
return;
}
$tracking = get_post_meta($order_id, '_tracking_number', true);
$sharp = strpos($tracking, '#');
$colon = strpos($tracking, ':');
if ($sharp && $colon && $sharp >= $colon) {
return;
} else if (!$sharp && $colon) {
return;
} else if ($sharp) {
$tracking_provider = substr($tracking, 0, $sharp);
if ($colon) {
$tracking_number = substr($tracking, $sharp + 1, $colon - $sharp - 1);
} else {
$tracking_number = substr($tracking, $sharp + 1, strlen($tracking));
}
} else {
$tracking_provider = '';
$tracking_number = $tracking;
}
if ($tracking_number) {
$this->display_track_button($tracking_provider, $tracking_number);
}
}
/**
* Display shipment info in customer emails.
*
* @access public
* @return void
*/
function email_display($order)
{
$this->display_tracking_info($order->id, true);
}
private function display_track_button($tracking_provider, $tracking_number)
{
$js = '(function(e,t,n){var r,i=e.getElementsByTagName(t)[0];if(e.getElementById(n))return;r=e.createElement(t);r.id=n;r.src="//apps.aftership.com/all.js";i.parentNode.insertBefore(r,i)})(document,"script","aftership-jssdk")';
if (function_exists('wc_enqueue_js')) {
wc_enqueue_js($js);
} else {
global $woocommerce;
$woocommerce->add_inline_js($js);
}
$track_button = '
';
echo wpautop(sprintf('%s', $track_button));
echo " ";
}
}
if (!function_exists('getAfterShipInstance')) {
function getAfterShipInstance()
{
return AfterShip::Instance();
}
}
}
/**
* Register this class globally
*/
$GLOBALS['aftership'] = getAfterShipInstance();
}