2015-01-06 19:24:32 +00:00
< ? php
/**
* WooCommerce Webhooks Settings
*
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin
* @ version 2.3 . 0
*/
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
if ( ! class_exists ( 'WC_Settings_Webhooks' ) ) :
/**
* WC_Settings_Webhooks
*/
class WC_Settings_Webhooks extends WC_Settings_Page {
/**
* Constructor
*/
public function __construct () {
$this -> id = 'webhooks' ;
$this -> label = __ ( 'Webhooks' , 'woocommerce' );
add_filter ( 'woocommerce_settings_tabs_array' , array ( $this , 'add_settings_page' ), 20 );
add_action ( 'woocommerce_settings_' . $this -> id , array ( $this , 'output' ) );
add_action ( 'woocommerce_settings_form_method_tab_' . $this -> id , array ( $this , 'form_method' ) );
$this -> notices ();
}
/**
* Form method
*
* @ param string $method
*
* @ return string
*/
public function form_method ( $method ) {
2015-01-08 18:34:30 +00:00
if ( isset ( $_GET [ 'edit-webhook' ] ) ) {
2015-01-09 17:42:01 +00:00
$webhook_id = absint ( $_GET [ 'edit-webhook' ] );
$webhook = new WC_Webhook ( $webhook_id );
if ( 'trash' != $webhook -> post_data -> post_status ) {
return 'post' ;
}
2015-01-08 18:34:30 +00:00
}
2015-01-06 19:24:32 +00:00
return 'get' ;
}
/**
* Notices .
*/
2015-01-08 18:34:30 +00:00
private function notices () {
2015-01-06 19:24:32 +00:00
if ( isset ( $_GET [ 'trashed' ] ) ) {
$trashed = absint ( $_GET [ 'trashed' ] );
WC_Admin_Settings :: add_message ( sprintf ( _n ( '1 webhook moved to the Trash.' , '%d webhooks moved to the Trash.' , $trashed , 'woocommerce' ), $trashed ) );
}
2015-01-07 00:02:33 +00:00
if ( isset ( $_GET [ 'untrashed' ] ) ) {
$untrashed = absint ( $_GET [ 'untrashed' ] );
WC_Admin_Settings :: add_message ( sprintf ( _n ( '1 webhook restored from the Trash.' , '%d webhooks restored from the Trash.' , $untrashed , 'woocommerce' ), $untrashed ) );
}
if ( isset ( $_GET [ 'deleted' ] ) ) {
$deleted = absint ( $_GET [ 'deleted' ] );
WC_Admin_Settings :: add_message ( sprintf ( _n ( '1 webhook permanently deleted.' , '%d webhooks permanently deleted.' , $deleted , 'woocommerce' ), $deleted ) );
}
2015-01-09 17:42:01 +00:00
if ( isset ( $_GET [ 'updated' ] ) ) {
2015-01-09 18:21:19 +00:00
WC_Admin_Settings :: add_message ( __ ( 'Webhook updated successfully.' , 'woocommerce' ) );
}
2015-01-09 17:42:01 +00:00
2015-01-09 18:21:19 +00:00
if ( isset ( $_GET [ 'created' ] ) ) {
WC_Admin_Settings :: add_message ( __ ( 'Webhook created successfully.' , 'woocommerce' ) );
2015-01-09 17:42:01 +00:00
}
2015-01-06 19:24:32 +00:00
}
/**
* Table list output
*/
2015-01-08 18:34:30 +00:00
private function table_list_output () {
2015-01-09 18:21:19 +00:00
echo '<h3>' . __ ( 'Webhooks' , 'woocommerce' ) . ' <a href="' . esc_url ( admin_url ( 'admin.php?page=wc-settings&tab=webhooks&create-webhook=1' ) ) . '" class="add-new-h2">' . __ ( 'Add Webhook' , 'woocommerce' ) . '</a></h3>' ;
2015-01-06 19:24:32 +00:00
$webhooks_table_list = new WC_Admin_Webhooks_Table_List ();
$webhooks_table_list -> prepare_items ();
echo '<input type="hidden" name="page" value="wc-settings" />' ;
echo '<input type="hidden" name="tab" value="webhooks" />' ;
2015-01-07 00:02:33 +00:00
$webhooks_table_list -> views ();
2015-01-10 00:41:33 +00:00
$webhooks_table_list -> search_box ( __ ( 'Search Webhooks' , 'woocommerce' ), 'webhook' );
2015-01-06 19:24:32 +00:00
$webhooks_table_list -> display ();
}
2015-01-08 18:34:30 +00:00
/**
* Edit webhook output
2015-01-09 17:42:01 +00:00
*
* @ param WC_Webhook $webhook
2015-01-08 18:34:30 +00:00
*/
2015-01-09 17:42:01 +00:00
private function edit_output ( $webhook ) {
2015-01-08 18:34:30 +00:00
include_once ( 'views/html-webhooks-edit.php' );
}
/**
* Logs output
*
* @ param WC_Webhook $webhook
*/
private function logs_output ( $webhook ) {
$current = isset ( $_GET [ 'log_page' ] ) ? absint ( $_GET [ 'log_page' ] ) : 1 ;
$args = array (
'post_id' => $webhook -> id ,
'status' => 'approve' ,
'type' => 'webhook_delivery' ,
'number' => 10
);
if ( 1 < $current ) {
$args [ 'offset' ] = ( $current - 1 ) * 10 ;
}
remove_filter ( 'comments_clauses' , array ( 'WC_Comments' , 'exclude_webhook_comments' ), 10 , 1 );
$logs = get_comments ( $args );
add_filter ( 'comments_clauses' , array ( 'WC_Comments' , 'exclude_webhook_comments' ), 10 , 1 );
if ( $logs ) {
include_once ( 'views/html-webhook-logs.php' );
} else {
echo '<p>' . __ ( 'This Webhook has no log yet.' , 'woocommerce' ) . '</p>' ;
}
}
2015-01-06 19:24:32 +00:00
/**
* Output the settings
*/
public function output () {
global $current_section ;
// Hide the save button
$GLOBALS [ 'hide_save_button' ] = true ;
2015-01-08 18:34:30 +00:00
if ( isset ( $_GET [ 'edit-webhook' ] ) ) {
2015-01-09 17:42:01 +00:00
$webhook_id = absint ( $_GET [ 'edit-webhook' ] );
$webhook = new WC_Webhook ( $webhook_id );
if ( 'trash' != $webhook -> post_data -> post_status ) {
$this -> edit_output ( $webhook );
return ;
}
2015-01-08 18:34:30 +00:00
}
2015-01-09 17:42:01 +00:00
$this -> table_list_output ();
2015-01-08 18:34:30 +00:00
}
/**
* Get the webhook topic data
*
* @ return array
*/
private function get_topic_data ( $webhook ) {
$topic = $webhook -> get_topic ();
$event = '' ;
$resource = '' ;
if ( $topic ) {
list ( $resource , $event ) = explode ( '.' , $topic );
if ( 'action' === $resource ) {
$topic = 'action' ;
} else if ( ! in_array ( $resource , array ( 'coupon' , 'customer' , 'order' , 'product' ) ) ) {
$topic = 'custom' ;
}
}
return array (
'topic' => $topic ,
'event' => $event ,
'resource' => $resource
);
}
/**
* Get the logs navigation .
*
* @ param int $total
*
* @ return string
*/
private function get_logs_navigation ( $total , $webhook ) {
$pages = ceil ( $total / 10 );
$current = isset ( $_GET [ 'log_page' ] ) ? absint ( $_GET [ 'log_page' ] ) : 1 ;
$html = '<div class="webhook-logs-navigation">' ;
$html .= '<p class="info" style="float: left;"><strong>' ;
$html .= sprintf ( '%s – Page %d of %d' , _n ( '1 item' , sprintf ( '%d items' , $total ), $total , 'woocommerce' ), $current , $pages );
$html .= '</strong></p>' ;
if ( 1 < $pages ) {
$html .= '<p class="tools" style="float: right;">' ;
if ( 1 == $current ) {
$html .= '<button class="button-primary" disabled="disabled">' . __ ( '‹ Previous' , 'woocommerce' ) . '</button> ' ;
} else {
$html .= '<a class="button-primary" href="' . admin_url ( 'admin.php?page=wc-settings&tab=webhooks&edit-webhook=' . $webhook -> id . '&log_page=' . ( $current - 1 ) ) . '#webhook-logs">' . __ ( '‹ Previous' , 'woocommerce' ) . '</a> ' ;
}
if ( $pages == $current ) {
$html .= '<button class="button-primary" disabled="disabled">' . __ ( 'Next ›' , 'woocommerce' ) . '</button>' ;
} else {
$html .= '<a class="button-primary" href="' . admin_url ( 'admin.php?page=wc-settings&tab=webhooks&edit-webhook=' . $webhook -> id . '&log_page=' . ( $current + 1 ) ) . '#webhook-logs">' . __ ( 'Next ›' , 'woocommerce' ) . '</a>' ;
}
$html .= '</p>' ;
}
$html .= '<div class="clear"></div></div>' ;
return $html ;
2015-01-06 19:24:32 +00:00
}
}
endif ;
return new WC_Settings_Webhooks ();