-
-
Save codecowboy/80fd6363c58558a74c9e to your computer and use it in GitHub Desktop.
Reseller plugin class
This file contains 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. | |
* | |
* @package Plugin_Name | |
* @author Your Name <email@example.com> | |
* @license GPL-2.0+ | |
* @link http://example.com | |
* @copyright 2013 Your Name or Company Name | |
*/ | |
/** | |
* Plugin class. | |
*/ | |
class WPS_RESELLER { | |
/** | |
* Plugin version, used for cache-busting of style and script file references. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
const VERSION = '1.0.0'; | |
/** | |
* Unique identifier for your plugin. | |
* | |
* The variable name is used as the text domain when internationalizing strings of text. | |
* Its value should match the Text Domain file header in the main plugin file. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
protected $plugin_slug = 'wps-reseller'; | |
/** | |
* Instance of this class. | |
* | |
* @since 1.0.0 | |
* | |
* @var object | |
*/ | |
protected static $instance = null; | |
/** | |
* Slug of the plugin screen. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
protected $plugin_screen_hook_suffix = null; | |
/** | |
* Initialize the plugin by setting localization, filters, and administration functions. | |
* | |
* @since 1.0.0 | |
*/ | |
private function __construct() { | |
// Load plugin text domain | |
add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); | |
add_action( 'init', array( $this, 'wps_reseller_cpt' ) ); | |
add_action( 'init', array( $this, 'initialize_cmb_meta_boxes'),9999 ); | |
add_filter( 'cmb_meta_boxes', array($this, 'sample_metaboxes') ); | |
//add a shortcode for the reseller submission form | |
add_shortcode( 'wps-reseller-profile-form',array($this,'create_reseller_profile_form' )); | |
//add intercept for reseller submission form | |
add_action( 'template_redirect', array($this, 'intercept_reseller_profile_form' )); | |
// Activate plugin when new blog is added | |
//add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) ); | |
// Add the options page and menu item. | |
add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) ); | |
// Add an action link pointing to the options page. | |
$plugin_basename = plugin_basename( plugin_dir_path( __FILE__ ) . 'wps-reseller.php' ); | |
// add_filter( 'plugin_action_links_' . $plugin_basename, array( $this, 'add_action_links' ) ); | |
// Load admin style sheet and JavaScript. | |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) ); | |
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) ); | |
// Load public-facing style sheet and JavaScript. | |
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); | |
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); | |
// Define custom functionality. Read more about actions and filters: http://codex.wordpress.org/Plugin_API#Hooks.2C_Actions_and_Filters | |
add_action( 'TODO', array( $this, 'action_method_name' ) ); | |
add_filter( 'TODO', array( $this, 'filter_method_name' ) ); | |
} | |
/** | |
* Return an instance of this class. | |
* | |
* @since 1.0.0 | |
* | |
* @return object A single instance of this class. | |
*/ | |
public static function get_instance() { | |
// If the single instance hasn't been set, set it now. | |
if ( null == self::$instance ) { | |
self::$instance = new self; | |
} | |
return self::$instance; | |
} | |
/** | |
* Fired when the plugin is activated. | |
* | |
* @since 1.0.0 | |
* | |
* @param boolean $network_wide True if WPMU superadmin uses "Network Activate" action, false if WPMU is disabled or plugin is activated on an individual blog. | |
*/ | |
public static function activate( $network_wide ) { | |
if ( function_exists( 'is_multisite' ) && is_multisite() ) { | |
if ( $network_wide ) { | |
// Get all blog ids | |
$blog_ids = self::get_blog_ids(); | |
foreach ( $blog_ids as $blog_id ) { | |
switch_to_blog( $blog_id ); | |
self::single_activate(); | |
} | |
restore_current_blog(); | |
} else { | |
self::single_activate(); | |
} | |
} else { | |
self::single_activate(); | |
} | |
} | |
/** | |
* Fired when the plugin is deactivated. | |
* | |
* @since 1.0.0 | |
* | |
* @param boolean $network_wide True if WPMU superadmin uses "Network Deactivate" action, false if WPMU is disabled or plugin is deactivated on an individual blog. | |
*/ | |
public static function deactivate( $network_wide ) { | |
if ( function_exists( 'is_multisite' ) && is_multisite() ) { | |
if ( $network_wide ) { | |
// Get all blog ids | |
$blog_ids = self::get_blog_ids(); | |
foreach ( $blog_ids as $blog_id ) { | |
switch_to_blog( $blog_id ); | |
self::single_deactivate(); | |
} | |
restore_current_blog(); | |
} else { | |
self::single_deactivate(); | |
} | |
} else { | |
self::single_deactivate(); | |
} | |
} | |
/** | |
* Fired when a new site is activated with a WPMU environment. | |
* | |
* @since 1.0.0 | |
* | |
* @param int $blog_id ID of the new blog. | |
*/ | |
public function activate_new_site( $blog_id ) { | |
if ( 1 !== did_action( 'wpmu_new_blog' ) ) | |
return; | |
switch_to_blog( $blog_id ); | |
self::single_activate(); | |
restore_current_blog(); | |
} | |
/** | |
* Get all blog ids of blogs in the current network that are: | |
* - not archived | |
* - not spam | |
* - not deleted | |
* | |
* @since 1.0.0 | |
* | |
* @return array|false The blog ids, false if no matches. | |
*/ | |
private static function get_blog_ids() { | |
global $wpdb; | |
// get an array of blog ids | |
$sql = "SELECT blog_id FROM $wpdb->blogs | |
WHERE archived = '0' AND spam = '0' | |
AND deleted = '0'"; | |
return $wpdb->get_col( $sql ); | |
} | |
/** | |
* Fired for each blog when the plugin is activated. | |
* | |
* @since 1.0.0 | |
*/ | |
private static function single_activate() { | |
// TODO: Define activation functionality here | |
} | |
/** | |
* Fired for each blog when the plugin is deactivated. | |
* | |
* @since 1.0.0 | |
*/ | |
private static function single_deactivate() { | |
// TODO: Define deactivation functionality here | |
} | |
/** | |
* Load the plugin text domain for translation. | |
* | |
* @since 1.0.0 | |
*/ | |
public function load_plugin_textdomain() { | |
$domain = $this->plugin_slug; | |
$locale = apply_filters( 'plugin_locale', get_locale(), $domain ); | |
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' ); | |
load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . '/languages' ); | |
} | |
/** | |
* Register and enqueue admin-specific style sheet. | |
* | |
* @since 1.0.0 | |
* | |
* @return null Return early if no settings page is registered. | |
*/ | |
public function enqueue_admin_styles() { | |
if ( ! isset( $this->plugin_screen_hook_suffix ) ) { | |
return; | |
} | |
$screen = get_current_screen(); | |
if ( $screen->id == $this->plugin_screen_hook_suffix ) { | |
wp_enqueue_style( $this->plugin_slug .'-admin-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), self::VERSION ); | |
} | |
} | |
/** | |
* Register and enqueue admin-specific JavaScript. | |
* | |
* @since 1.0.0 | |
* | |
* @return null Return early if no settings page is registered. | |
*/ | |
public function enqueue_admin_scripts() { | |
if ( ! isset( $this->plugin_screen_hook_suffix ) ) { | |
return; | |
} | |
$screen = get_current_screen(); | |
if ( $screen->id == $this->plugin_screen_hook_suffix ) { | |
wp_enqueue_script( $this->plugin_slug . '-admin-script', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), self::VERSION ); | |
} | |
} | |
/** | |
* Register and enqueue public-facing style sheet. | |
* | |
* @since 1.0.0 | |
*/ | |
public function enqueue_styles() { | |
wp_enqueue_style( $this->plugin_slug . '-plugin-styles', plugins_url( 'css/public.css', __FILE__ ), array(), self::VERSION ); | |
} | |
/** | |
* Register and enqueues public-facing JavaScript files. | |
* | |
* @since 1.0.0 | |
*/ | |
public function enqueue_scripts() { | |
wp_enqueue_script( $this->plugin_slug . '-plugin-script', plugins_url( 'js/public.js', __FILE__ ), array( 'jquery' ), self::VERSION ); | |
} | |
/** | |
* Register the administration menu for this plugin into the WordPress Dashboard menu. | |
* | |
* @since 1.0.0 | |
*/ | |
public function add_plugin_admin_menu() { | |
/* | |
* Add a settings page for this plugin to the Settings menu. | |
* | |
* NOTE: Alternative menu locations are available via WordPress administration menu functions. | |
* | |
* Administration Menus: http://codex.wordpress.org/Administration_Menus | |
* | |
* TODO: | |
* | |
* Change 'Page Title' to the title of your plugin admin page | |
* Change 'Menu Text' to the text for menu item for the plugin settings page | |
* Change 'manage_options' to the capability you see fit (http://codex.wordpress.org/Roles_and_Capabilities) | |
*/ | |
$this->plugin_screen_hook_suffix = add_options_page( | |
__( 'WPS Reseller Settings', $this->plugin_slug ), | |
__( 'WPS Reseller Options', $this->plugin_slug ), | |
'manage_options', | |
$this->plugin_slug, | |
array( $this, 'display_plugin_admin_page' ) | |
); | |
} | |
/** | |
* Render the settings page for this plugin. | |
* | |
* @since 1.0.0 | |
*/ | |
public function display_plugin_admin_page() { | |
include_once( 'views/admin.php' ); | |
} | |
/** | |
* Add settings action link to the plugins page. | |
* | |
* @since 1.0.0 | |
*/ | |
public function add_action_links( $links ) { | |
return array_merge( | |
array( | |
'settings' => '<a href="' . admin_url( 'options-general.php?page=' . $this->plugin_slug ) . '">' . __( 'Settings', $this->plugin_slug ) . '</a>' | |
), | |
$links | |
); | |
} | |
/** | |
* NOTE: Actions are points in the execution of a page or process | |
* lifecycle that WordPress fires. | |
* | |
* WordPress Actions: http://codex.wordpress.org/Plugin_API#Actions | |
* Action Reference: http://codex.wordpress.org/Plugin_API/Action_Reference | |
* | |
* @since 1.0.0 | |
*/ | |
public function action_method_name() { | |
// TODO: Define your action hook callback here | |
} | |
/** | |
* NOTE: Filters are points of execution in which WordPress modifies data | |
* before saving it or sending it to the browser. | |
* | |
* WordPress Filters: http://codex.wordpress.org/Plugin_API#Filters | |
* Filter Reference: http://codex.wordpress.org/Plugin_API/Filter_Reference | |
* | |
* @since 1.0.0 | |
*/ | |
public function filter_method_name() { | |
// TODO: Define your filter hook callback here | |
} | |
public function wps_reseller_cpt() { | |
$labels = array( | |
'name' => _x( 'WPS Resellers', 'post type general name' ), | |
'singular_name' => _x( 'WPS Reseller', 'post type singular name' ), | |
'add_new' => _x( 'Add New', 'book' ), | |
'add_new_item' => __( 'Add New Reseller' ), | |
'edit_item' => __( 'Edit Reseller' ), | |
'new_item' => __( 'New Reseller' ), | |
'all_items' => __( 'All Resellers' ), | |
'view_item' => __( 'View Reseller' ), | |
'search_items' => __( 'Search Resellers' ), | |
'not_found' => __( 'No resellers found' ), | |
'not_found_in_trash' => __( 'No Reseller found in the Trash' ), | |
'parent_item_colon' => '', | |
'menu_name' => 'Resellers' | |
); | |
$args = array( | |
'labels' => $labels, | |
'description' => 'Holds our resellers and reseller specific data', | |
'public' => true, | |
'menu_position' => 50, | |
'supports' => array( 'title', 'editor','image', 'thumbnail', 'custom-fields' ), | |
'has_archive' => false, | |
); | |
register_post_type( 'wps-reseller', $args ); | |
} | |
public function create_reseller_profile_form(){ | |
require_once plugin_dir_path( __FILE__ ) . 'views/public-create_reseller_profile_form.php'; | |
} | |
public function intercept_reseller_profile_form() { | |
if ( !empty( $_POST['wps-reseller-user-submission'] ) ) { | |
$this->wps_reseller_process_form(); | |
} else { | |
return $template; | |
} | |
} | |
public function wps_reseller_process_form() { | |
require_once(ABSPATH . "wp-admin" . '/includes/image.php'); | |
require_once(ABSPATH . "wp-admin" . '/includes/file.php'); | |
require_once(ABSPATH . "wp-admin" . '/includes/media.php'); | |
if ( wp_verify_nonce( $_POST['reseller_user_form'], 'add_reseller_form') && | |
!empty( $_POST['reseller-title'] ) && | |
!empty( $_POST['reseller-description'] ) && | |
!empty( $_FILES['reseller-image']) ) | |
{ | |
//var_dump($_POST); exit; | |
$file = $_FILES['reseller-image']; | |
$uploads = wp_upload_dir();//var_dump($uploads); exit; | |
$new_reseller_profile_data = array( | |
'post_status' => 'draft', | |
'post_title' => $_POST['reseller-title'], | |
'post_content' => $_POST['reseller-description'], | |
'post_type' => 'wps-reseller' | |
); | |
$file_errors = $this->wps_parse_file_errors($file); | |
$upload_overrides = array( 'test_form' => FALSE ); | |
if($file_errors['error'] == 0) { | |
if($new_reseller_id = wp_insert_post( $new_reseller_profile_data )){ | |
//$this->wps_process_image($file, $new_reseller_id);exit; | |
$uploaded_file = wp_handle_upload( $file, $upload_overrides ); | |
$wp_filetype = wp_check_filetype( basename( $uploaded_file['file'] ), null ); | |
$attachment = array( | |
'post_mime_type' => $wp_filetype['type'], | |
'post_title' => preg_replace('/\.[^.]+$/', '', basename( $uploaded_file['file'] ) ), | |
'post_content' => '', | |
'post_author' => '', | |
'post_status' => 'inherit', | |
'post_type' => 'attachment', | |
'post_parent' => $new_reseller_id, | |
'guid' => $uploads['baseurl'] . $uploads['subdir'] . '/' . $file['name'] | |
); | |
echo $uploads['baseurl'].'<br />'; | |
echo $file['name'].'<br />'; | |
var_dump($uploads); exit; | |
$attachment_id = wp_insert_post( $attachment ); | |
$attach_data = wp_generate_attachment_metadata( $attachment_id, $uploaded_file['file'] ); | |
// update the attachment metadata | |
wp_update_attachment_metadata( $attachment_id, $attach_data ); | |
set_post_thumbnail( $new_reseller_id, $attachment_id ); | |
} | |
} | |
} | |
//create a new reseller post, make it draft (ensure post type supports this) | |
//email an admin user | |
} | |
protected function wps_parse_file_errors($file){ | |
define('MAX_UPLOAD_SIZE', 200000); | |
define('TYPE_WHITELIST', serialize(array( | |
'image/jpeg', | |
'image/png', | |
'image/gif' | |
))); | |
$result = array(); | |
$result['error'] = 0; | |
if($file['error']){ | |
$result['error'] = "No file uploaded or there was an upload error!"; | |
return $result; | |
} | |
$image_data = getimagesize($file['tmp_name']); | |
if(!in_array($image_data['mime'], unserialize(TYPE_WHITELIST))){ | |
$result['error'] = 'Your image must be a jpeg, png or gif!'; | |
}elseif(($file['size'] > MAX_UPLOAD_SIZE)){ | |
$result['error'] = 'Your image was ' . $file['size'] . ' bytes! It must not exceed ' . MAX_UPLOAD_SIZE . ' bytes.'; | |
} | |
return $result; | |
} | |
public function initialize_cmb_meta_boxes() { | |
if ( !class_exists( 'cmb_Meta_Box' ) ) { | |
require_once plugin_dir_path( __FILE__ ) . 'lib/metabox/init.php'; | |
} | |
} | |
public function sample_metaboxes( $meta_boxes ) { | |
$prefix = '_wps_'; // Prefix for all fields | |
$meta_boxes[] = array( | |
'id' => 'test_metabox', | |
'title' => 'Test Metabox', | |
'pages' => array('wps-reseller'), // post type | |
'context' => 'normal', | |
'priority' => 'high', | |
'show_names' => true, // Show field names on the left | |
'fields' => array( | |
array( | |
'name' => 'Test Text', | |
'desc' => 'field description (optional)', | |
'id' => $prefix . 'test_text', | |
'type' => 'text' | |
), | |
), | |
); | |
return $meta_boxes; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment