guillermorangel
5/28/2014 - 1:23 AM

WordPress Transients

WordPress Transients

<?php
/**
 * Plugin Name.
 *
 * @package   Support_KB_Press
 * @author    Your Name <email@example.com>
 * @license   GPL-2.0+
 * @link      http://example.com
 * @copyright 2014 Your Name or Company Name
 */
 
/**
 * Plugin class. This class should ideally be used to work with the
 * public-facing side of the WordPress site.
 *
 * If you're interested in introducing administrative or dashboard
 * functionality, then refer to `class-plugin-name-admin.php`
 *
 * @TODO: Rename this class to a proper name for your plugin.
 *
 * @package Support_KB_Press
 * @author  Your Name <email@example.com>
 */
class Support_KB_Press {
 
	/**
	 * Plugin version, used for cache-busting of style and script file references.
	 *
	 * @since   1.0.0
	 *
	 * @var     string
	 */
	const VERSION = '1.0.0';
 
	/**
	 * @TODO - Rename "plugin-name" to the name of your plugin
	 *
	 * 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 = 'plugin-name';
 
	/**
	 * Instance of this class.
	 *
	 * @since    1.0.0
	 *
	 * @var      object
	 */
	protected static $instance = null;
 
	/**
	 * Initialize the plugin by setting localization and loading public scripts
	 * and styles.
	 *
	 * @since     1.0.0
	 */
	private function __construct() {
 
		// Load plugin text domain
		add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
 
		// Activate plugin when new blog is added
		add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
 
		// 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.
		 * Refer To 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' ) );
	    add_action( 'init', array( $this, 'skbp_register_cpts' ) );
        add_action( 'init', array( $this, 'skbp_register_taxonomies' ) );
        add_shortcode( 'getsat', array( $this, 'skbp_output_forum_posts_list' ) );
 
	}
 
	/**
	 * Return the plugin slug.
	 *
	 * @since    1.0.0
	 *
	 * @return    Plugin slug variable.
	 */
	public function get_plugin_slug() {
		return $this->plugin_slug;
	}
 
	/**
	 * 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( plugin_dir_path( dirname( __FILE__ ) ) ) . '/languages/' );
 
	}
 
	/**
	 * 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( 'assets/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( 'assets/js/public.js', __FILE__ ), array( 'jquery' ), self::VERSION );
	}
 
	/**
	 * NOTE:  Actions are points in the execution of a page or process
	 *        lifecycle that WordPress fires.
	 *
	 *        Actions:    http://codex.wordpress.org/Plugin_API#Actions
	 *        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.
	 *
	 *        Filters: http://codex.wordpress.org/Plugin_API#Filters
	 *        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
	}
 
 
    /**
     * NOTE:  Lets register the Custom Post Type and custom taxonomy
     *
     *
     * @since   1.0.0
     */
    public function skbp_register_cpts() {
        $labels = array(
        	'name'               => _x( 'Support Articles', 'post type general name', 'your-plugin-textdomain' ),
        	'singular_name'      => _x( 'Support Article', 'post type singular name', 'your-plugin-textdomain' ),
        	'menu_name'          => _x( 'Support Articles', 'admin menu', 'your-plugin-textdomain' ),
        	'name_admin_bar'     => _x( 'Support Article', 'add new on admin bar', 'your-plugin-textdomain' ),
        	'add_new'            => _x( 'Add New', 'support article', 'your-plugin-textdomain' ),
        	'add_new_item'       => __( 'Add New Support Article', 'your-plugin-textdomain' ),
        	'new_item'           => __( 'New Support Article', 'your-plugin-textdomain' ),
        	'edit_item'          => __( 'Edit Support Article', 'your-plugin-textdomain' ),
        	'view_item'          => __( 'View Support Article', 'your-plugin-textdomain' ),
        	'all_items'          => __( 'All Support Articles', 'your-plugin-textdomain' ),
        	'search_items'       => __( 'Search Support Articles', 'your-plugin-textdomain' ),
        	'parent_item_colon'  => __( 'Parent Support Articles:', 'your-plugin-textdomain' ),
        	'not_found'          => __( 'No support articles found.', 'your-plugin-textdomain' ),
        	'not_found_in_trash' => __( 'No support articles found in Trash.', 'your-plugin-textdomain' ),
        );
 
    	$args = array(
    		'labels'             => $labels,
    		'public'             => true,
    		'publicly_queryable' => true,
    		'show_ui'            => true,
    		'show_in_menu'       => true,
    		'query_var'          => true,
    		'rewrite'            => array( 'slug' => 'support-articles' ),
    		'capability_type'    => 'post',
    		'has_archive'        => true,
    		'hierarchical'       => false,
    		'menu_position'      => null,
            'menu_icon'          => 'dashicons-sos',
    		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    	);
 
    	register_post_type( 'support-articles', $args );
 
    }
 
    /**
     * NOTE:  Lets register the Custom Post Type and custom taxonomy
     *
     * Register Taxonomies for Support Articles
     *
     * @since   1.0.0
     */
    public function skbp_register_taxonomies() {
        $support_tags_labels = array(
            'name'              => _x( 'Support Tags', 'taxonomy general name' ),
            'singular_name'     => _x( 'Support Tag', 'taxonomy singular name' ),
            'search_items'      => __( 'Search Support Tag' ),
            'all_items'         => __( 'All Support Tags' ),
            'parent_item'       => __( 'Parent Support Tag' ),
            'parent_item_colon' => __( 'Parent Support Tag:' ),
            'edit_item'         => __( 'Edit Support Tag' ),
            'update_item'       => __( 'Update Support Tag' ),
            'add_new_item'      => __( 'Add New Support Tag' ),
            'new_item_name'     => __( 'New Support Tag Name' ),
            'menu_name'         => __( 'Support Tags' ),
        );
 
        $tags_args = array(
            'hierarchical'          => false,
            'labels'                => $support_tags_labels,
            'show_ui'               => true,
            'show_admin_column'     => true,
            'update_count_callback' => '_update_post_term_count',
            'query_var'             => true,
            'rewrite'               => array( 'slug' => 'support-tags' ),
        );
 
        register_taxonomy( 'support-tags', array( 'support-articles' ), $category_args );
 
        $support_category_labels = array(
            'name'              => _x( 'Support Categories', 'categories general name' ),
            'singular_name'     => _x( 'Support Category', 'taxonomy singular name' ),
            'search_items'      => __( 'Search Support Category' ),
            'all_items'         => __( 'All Support Categories' ),
            'parent_item'       => __( 'Parent Support Category' ),
            'parent_item_colon' => __( 'Parent Support Category:' ),
            'edit_item'         => __( 'Edit Support Category' ),
            'update_item'       => __( 'Update Support Category' ),
            'add_new_item'      => __( 'Add New Support Category' ),
            'new_item_name'     => __( 'New Support Category Name' ),
            'menu_name'         => __( 'Support Categories' ),
        );
 
        $category_args = array(
            'hierarchical'          => true,
            'labels'                => $support_category_labels,
            'show_ui'               => true,
            'show_admin_column'     => true,
            'update_count_callback' => '_update_post_term_count',
            'query_var'             => true,
            'rewrite'               => array( 'slug' => 'support-categories' ),
        );
 
        register_taxonomy( 'support-categories', array( 'support-articles' ), $category_args );
 
    }
 
    public function skbp_get_sat_posts() {
 
        $get_sat_url = 'https://helpforum.covenanteyes.com/covenanteyes/topics.rss?sort=created_at';
        $get_sat = wp_remote_get( $get_sat_url );
        $body = wp_remote_retrieve_body( $get_sat );
        $items = 5;
        $xml = simplexml_load_string( $body );
        echo "<h3>Recent Forum Threads</h3>";
        echo "<ul>";
        for ( $i=0; $i<$items; $i++ ) {
            echo "<li><a href='" . $xml->channel->item[$i]->link . "'>" . $xml->channel->item[$i]->title . "</a></li>";
        }
        echo "</ul>";
 
    }
 
    /**
     * Output HTML markup for forum post list.
     *
     * @since  1.0.0
     *
     * @param  integer $post_count Post count.
     */
    public function skbp_output_forum_posts_list( $post_count = 5 ) {
        echo self::skbp_get_forum_posts_list( $post_count = 5 );
    }
     
    /**
     * Generate HTML markup for forum post list.
     *
     * @since  1.0.0
     *
     * @param  integer $post_count Post count.
     * @return string         HTML Markup.
     */
    private function skbp_get_forum_posts_list( $post_count = 5 ) {
        $xml = simplexml_load_string( self::skbp_get_forum_posts_xml() );
 
        $output = '';
        $output .= '<h3>' . __( 'Recent Forum Threads', 'skbp' ) . '</h3>';
        $output .= '<ul>';
        for ( $i = 0; $i < absint( $post_count ); $i++ ) {
            $output .= '<li>' . self::skbp_get_forum_post_link( $xml->channel->item[ $i ] ) . '</li>';
        }
        $output .= '</ul>';
 
        return $output;
 
    }
     
    /**
     * Retrieve recent forum post XML data.
     *
     * @since  1.0.0
     *
     * @return string XML data.
     */
    private function skbp_get_forum_posts_xml() {
     
        $forum_feed_xml = get_transient( 'skbp_get_forum_posts_xml' );
        
        if ( false === $forum_feed_xml ) {
            $get_sat_posts = wp_remote_get( 'https://helpforum.covenanteyes.com/covenanteyes/topics.rss?sort=created_at' );
            $forum_feed_xml = wp_remote_retrieve_body( $get_sat_posts );
            set_transient( 'skbp_get_forum_posts_xml', $forum_feed_xml, 2 * DAY_IN_SECONDS );
        }
 
        return maybe_unserialize( $forum_feed_xml );
    }
     
    /**
     * Generate HTML markup for a single forum post link.
     *
     * @since  1.0.0
     *
     * @param  object $item XML item object.
     * @return string       HTML Markup.
     */
    private function skbp_get_forum_post_link( $item = null ) {
        return is_object( $item )
            ? sprintf(
                '<a href="%1$s">%2$s</a>',
                $item->link,
                $item->title
                )
            : '';
    }
 
}

?>