_version = $version;
$this->_token = AWDP_TOKEN;
$this->file = $file;
$this->dir = dirname($this->file);
$this->assets_dir = trailingslashit($this->dir) . 'assets';
$this->assets_url = esc_url(trailingslashit(plugins_url('/assets/', $this->file)));
$this->plugin_slug = 'abc';
$this->script_suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
register_activation_hook($this->file, array($this, 'install'));
register_deactivation_hook($this->file, array($this, 'deactivation'));
add_action('save_post', array($this, 'delete_transient'), 1);
add_action('edited_term', array($this, 'delete_transient'));
add_action('delete_term', array($this, 'delete_transient'));
add_action('created_term', array($this, 'delete_transient'));
add_action('admin_menu', array($this, 'register_root_page'));
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 10, 1);
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_styles'), 10, 1);
$plugin = plugin_basename($this->file);
add_filter("plugin_action_links_$plugin", array($this, 'add_settings_link'));
}
/**
*
*
* Ensures only one instance of WCPA is loaded or can be loaded.
*
* @since 1.0.0
* @static
* @see WordPress_Plugin_Template()
* @return Main WCPA instance
*/
public static function instance($file = '', $version = '1.0.0')
{
if (is_null(self::$_instance)) {
self::$_instance = new self($file, $version);
}
return self::$_instance;
}
public function register_root_page()
{
$this->hook_suffix[] = add_menu_page(
'Pricing Rules', 'Pricing Rules', 'edit_products', 'awdp_admin_ui', array($this, 'admin_ui'), esc_url($this->assets_url).'/images/icon.png',25);
$this->hook_suffix[] = add_submenu_page(
'awdp_admin_ui', 'Product Lists', 'Product Lists', 'edit_products', 'awdp_admin_product_lists', array($this, 'admin_ui_pro_lists'));
}
public function admin_ui()
{
AWDP_Backend::view('admin-root', []);
}
public function add_settings_link($links)
{
$settings = '' . __('Pricing Rules') . '';
$products = '' . __('Product Lists') . '';
array_push($links, $settings);
array_push($links, $products);
return $links;
}
/**
* Create post type forms
*/
static function view($view, $data = array())
{
extract($data);
include(plugin_dir_path(__FILE__) . 'views/' . $view . '.php');
}
// End admin_enqueue_styles ()
public function admin_ui_pro_lists()
{
AWDP_Backend::view('admin-lists', []);
}
/**
* Load admin CSS.
* @access public
* @since 1.0.0
* @return void
*/
public function admin_enqueue_styles($hook = '')
{
wp_enqueue_style('wp-color-picker');
wp_register_style($this->_token . '-admin', esc_url($this->assets_url) . 'css/backend.css', array(), $this->_version);
wp_enqueue_style($this->_token . '-admin');
}
/**
* Load admin Javascript.
* @access public
* @since 1.0.0
* @return void
*/
public function admin_enqueue_scripts($hook = '')
{
if (!isset($this->hook_suffix) || empty($this->hook_suffix)) {
return;
}
$categories = get_terms('product_cat', ['taxonomy' => 'product_cat', 'hide_empty' => false, 'fields' => 'id=>name']);
// $productslist = get_posts(array('numberposts' => -1, 'post_type' => 'product'));
// $p = 0;
// foreach ($productslist as $product) {
// $products[$p]['ID'] = $product->ID;
// $products[$p]['post_title'] = $product->post_title;
// $products[$p]['post_thumbnail'] = get_the_post_thumbnail_url($product->ID);
// $p++;
// }
$wp_roles = new WP_Roles();
$user_roles = array_map(function ($v) {
return $v['name'];
}, $wp_roles->roles);
$awdpList = get_posts(array('numberposts' => -1, 'post_type' => AWDP_PRODUCT_LIST));
$awdpList = array_map(function ($v) {
return ['id' => $v->ID, 'name' => $v->post_title];
}, $awdpList);
$userlists = get_users(array('role__in' => array('administrator', 'author', 'contributor')));
$userlists = array_map(function ($v) {
return ['id' => $v->ID, 'display_name' => $v->display_name == '' ? $v->user_login : $v->display_name];
}, $userlists);
$taglist = get_terms(array('hide_empty' => false, 'taxonomy' => 'product_tag'));
// $installed_payment_methods = WC()->payment_gateways->get_available_payment_gateways();
$installed_payment_methods =[];
$installed_payment_methods = array_map(function ($v) {
return ['title' => $v->title];
}, $installed_payment_methods);
$screen = get_current_screen();
wp_enqueue_script('jquery');
if (in_array($screen->id, $this->hook_suffix)) {
wp_enqueue_script($this->_token . '-backend-script', esc_url($this->assets_url) . 'js/backend.js', array('jquery'), $this->_version, true);
wp_localize_script($this->_token . '-backend-script', 'awdp_object', array(
'api_nonce' => wp_create_nonce('wp_rest'),
'root' => rest_url('awdp/v1/'),
'cats' => (array)$categories,
'tags' => (array)$taglist,
'user_roles' => (array)$user_roles,
'productlist' => (array)$awdpList,
'userlists' => (array)$userlists,
'paymentgateways' => (array)$installed_payment_methods
)
);
}
wp_register_script($this->_token . '-backend', esc_url($this->assets_url) . 'js/backend.js', array('jquery'), $this->_version);
}
/**
* Cloning is forbidden.
*
* @since 1.0.0
*/
public function __clone()
{
_doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version);
}
/**
* Unserializing instances of this class is forbidden.
*
* @since 1.0.0
*/
public function __wakeup()
{
_doing_it_wrong(__FUNCTION__, __('Cheatin’ huh?'), $this->_version);
}
/**
* Installation. Runs on activation.
* @access public
* @since 1.0.0
* @return void
*/
public function install()
{
$this->_log_version_number();
}
/**
* Log the plugin version number.
* @access public
* @since 1.0.0
* @return void
*/
private function _log_version_number()
{
update_option($this->_token . '_version', $this->_version);
}
public function delete_transient($arg = false)
{
if ($arg) {
in_array(get_post_type($arg), ['product', WCPA_POST_TYPE]) && delete_transient(WCPA_PRODUCTS_TRANSIENT_KEY);
} else {
delete_transient(WCPA_PRODUCTS_TRANSIENT_KEY);
}
}
}