Forked from LiamBailey/Woocommerce Product Vendors Frontend Dash
Created
July 14, 2016 04:13
-
-
Save BurlesonBrad/02cb3a568e6fac96f2b16b27ab21ed17 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
get_header(); | |
global $WVBM; | |
?><div id="content" class="woocommerce container"> | |
<div class="row product content-area"> | |
<main id="main" class="site-main col-xl-12" role="main"> | |
<?php $WVBM->show_dashboard(); ?> | |
</main> | |
</div> | |
</div> | |
<?php get_footer(); ?> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: Woocommerce Vendors Bookings Management | |
* Description: Allows vendors to manage their bookings in the frontend | |
* Version: 1.0.0 | |
* Author: Liam Bailey | |
* Author URI: http://webbyscots.com/ | |
* License: GNU General Public License v3.0 | |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html | |
*/ | |
global $WVBM; | |
$WVBM = new WVBM; | |
class WVBM { | |
private $required_plugins = array('woocommerce', 'woocommerce-bookings', 'woocommerce-product-vendors'); | |
function have_required_plugins() { | |
$active_plugins = (array) get_option('active_plugins', array()); | |
if (is_multisite()) { | |
$active_plugins = array_merge($active_plugins, get_site_option('active_sitewide_plugins', array())); | |
} | |
foreach ($this->required_plugins as $key => $required) { | |
$required = (!is_numeric($key)) ? "{$key}/{$required}.php" : "{$required}/{$required}.php"; | |
if (!in_array($required, $active_plugins) && !array_key_exists($required, $active_plugins)) | |
return false; | |
} | |
return true; | |
} | |
function __construct() { | |
if (!$this->have_required_plugins()) | |
return; | |
register_activation_hook(__FILE__, array($this, 'rewrite_flush')); | |
add_action('init',array($this,'endpoint_keeper')); | |
add_filter('query_vars', array($this, 'add_query_vars')); | |
add_action('parse_request', array($this, 'parse_request'), 0); | |
add_filter('template_include',array($this,'get_template')); | |
add_action('wp',array($this,'process_confirm')); | |
add_action('woocommerce_before_my_account',array($this,'add_vendor_dashboard_link')); | |
} | |
function add_vendor_dashboard_link() { | |
$user = get_current_user_id(); | |
$vendor_id = get_user_meta($user,'product_vendor',true); | |
if ($vendor_id === "") | |
return; | |
$vendor_term = get_term($vendor_id,'shop_vendor'); | |
$vendor_link = site_url() ."/vendors-dashboard/".$vendor_term->slug; | |
?><h2>Vendors Dashboard</h2> | |
<p>Please <a href='<?php echo $vendor_link; ?>'>click here</a> to manage your bookings</p><?php | |
} | |
function process_confirm() { | |
if ($_GET['wvbm_action'] == "confirm") { | |
if (get_post_type($_GET['booking_id']) != "wc_booking" || !wp_verify_nonce($_REQUEST['security'],'vendor-booking-confirm-noncerator')) { | |
wc_add_notice("Invalid request - booking not confirmed","error"); | |
$url = site_url() . "/vendors-dashboard/".get_query_var('vendors-dashboard')."/"; | |
header("Location: ".$url); | |
} | |
$booking = new WC_Booking($_GET['booking_id']); | |
$booking->update_status("confirmed"); | |
wc_add_notice("Booking ".$_GET['booking_id']." confirmed","success"); | |
} | |
} | |
function get_template($template) { | |
global $wp; | |
if (isset($wp->query_vars['vendors-dashboard'])) | |
$template = trailingslashit(plugin_dir_path(__FILE__)) . "vendors-dashboard.php"; | |
return $template; | |
} | |
function endpoint_keeper() { | |
add_rewrite_endpoint('vendors-dashboard', EP_ALL); | |
add_rewrite_rule('/vendors-dashboard/(.*)/page/([0-9]+)\/?','index.php?vendors-dashboard=$matches[1]&paged=$matches[2]','top'); | |
} | |
function parse_request($request) { | |
global $wp; | |
$key = 'vendors-dashboard'; | |
if ( isset( $_GET[ $key ] ) ) { | |
$wp->query_vars[ $key ] = $_GET[ $key ]; | |
} | |
else if ( isset( $wp->query_vars[ $key ] ) ) { | |
$wp->query_vars[ $key ] = $wp->query_vars[ $key ]; | |
} | |
} | |
function add_query_vars($vars) { | |
$vars[] = 'vendors-dashboard'; | |
return $vars; | |
} | |
function rewrite_flush() { | |
add_rewrite_endpoint('vendors-dashboard', EP_ALL); | |
add_rewrite_rule('/vendors-dashboard/(.*)/page/([0-9]+)\/?','index.php?vendors-dashboard=$matches[1]&paged=$matches[2]'); | |
flush_rewrite_rules(); | |
} | |
function show_dashboard() { | |
/* extract(shortcode_atts(array( | |
'active_tabs' => 'bookings'//comma seperated list of active tabs | |
),$atts)); */ | |
$vendor = get_term_by('slug',get_query_var('vendors-dashboard'),'shop_vendor'); | |
if (!$vendor) { | |
echo "<p class='error'>Vendor not found!</p>"; | |
return; | |
} | |
$user = get_current_user_id(); | |
if (!current_user_can('administrator') && !is_vendor_admin($vendor->term_id,$user)) { | |
echo "<p class='error'>You do not have permission to view this page</p>"; | |
return; | |
} | |
$cols = array('Booking ID', 'Parent Order', 'Date', 'Start Time', 'End Time', '# of Guests', 'Price', 'User', 'Date Applied', 'Status','Actions'); | |
$tabs = array('bookings'); | |
$posts_per_page = 10; | |
$page = (get_query_var('paged')) ? 1 : get_query_var('paged'); | |
$bookings = new WP_Query(array( | |
'post_type' => 'wc_booking', | |
'posts_per_page' => $posts_per_page, | |
'meta_key' => '_booking_vendor', | |
'meta_value' => $vendor->term_id, | |
'post_status' => 'any', | |
'paged' => get_query_var('paged') | |
)); | |
$data = array(); | |
foreach($bookings->posts as $key => $booking) { | |
$_booking = new WC_Booking($booking->ID); | |
$user = get_post_meta($booking->ID,'_booking_customer_id',true); | |
$actions = array(); | |
if ($booking->post_status != "cancelled") | |
array_push($actions,"cancel"); | |
if ($booking->post_status == "pending-confirmation") | |
array_push($actions,"confirm"); | |
$action_strings = array(); | |
foreach($actions as $action) { | |
$action_url = add_query_arg(array('wvbm_action'=>$action,'booking_id'=>$booking->ID,'security'=>wp_create_nonce('vendor-booking-confirm-noncerator')),site_url()."/vendors-dashboard/".get_query_var('vendors-dashboard')."/"); | |
$action_strings[] = ($action == "cancel") ? "<a href='".$_booking->get_cancel_url()."'>Cancel</a>" : "<a href='".$action_url."'>".ucfirst($action)."</a>"; | |
} | |
$data[$booking->ID] = array( | |
'Booking ID' => $booking->ID, | |
'Parent Order' => $booking->post_parent, | |
'Date' => date("Y-m-d",strtotime(get_post_meta($booking->ID,'_booking_start',true))), | |
'Start Time' => date("h:ia",strtotime(get_post_meta($booking->ID,'_booking_start',true))), | |
'End Time' => date("h:ia",strtotime(get_post_meta($booking->ID,'_booking_end',true))), | |
'# of Guests' => count(get_post_meta($booking->ID,'_booking_persons',true)), | |
'Price' => get_post_meta($booking->ID,'_booking_cost',true), | |
'User' => (get_user_meta($user,'billing_first_name',true) !== "") ? get_user_meta($user,'billing_first_name',true) . " " . get_user_meta($user,'billing_last_name',true) : $user->user_login, | |
'Date Applied' => $booking->post_date, | |
'Status' => $booking->post_status, | |
'Actions' => implode(" | ",$action_strings) | |
); | |
} | |
wc_print_notices(); | |
?><div class="woocommerce-tabs"> | |
<ul class="tabs"> | |
<?php | |
foreach ($tabs as $key => $tab) { | |
$class = ($key == 0) ? "active" : ""; | |
?><li class="dashboard_tab <?php echo $class; ?>"> | |
<a href="#tab-<?php echo $tab; ?>"><?php echo ucwords($tab); ?></a> | |
</li> | |
<?php } ?> | |
</ul> | |
<?php foreach ($tabs as $key => $tab) { | |
?><div class="panel entry-content" id="tab-<?php echo $tab; ?>" style="display: block;"> | |
<table class="<?php echo $tab; ?>-table"> | |
<thead> | |
<tr> | |
<?php foreach ($cols as $key => $col) { ?> | |
<th><?php echo $col; ?></th><?php } ?> | |
</tr> | |
</thead> | |
<tbody> | |
<?php foreach ($data as $booking_id => $booking) { ?> | |
<tr><?php foreach($cols as $key => $col) { ?> | |
<td><?php echo $booking[$col]; ?></td> | |
<?php } ?> | |
</tr><?php } ?> | |
</tbody> | |
</table> | |
</div><?php } | |
$big = 999999999; // need an unlikely integer | |
echo paginate_links( array( | |
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), | |
'format' => '?paged=%#%', | |
'current' => max( 1, get_query_var('paged') ), | |
'total' => $bookings->max_num_pages | |
) );?> | |
</div><?php | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment