Plugin
Class Plugin
Source
File: includes/libs/plugin.class.php
class Plugin{
/**
* Holds the plugin instance.
*
* @var Plugin
*/
private static $instance = null;
/**
* Stores plugin options
*
* @var Options
*/
private $options;
/**
* Stores player options
*
* @var Options
*/
private $player_options;
/**
* @var Post_Type
*/
private $cpt;
/**
* Store admin instance
* @var Admin
*/
private $admin;
/**
* @var Posts_Import
*/
private $posts_import;
/**
* @var Front_End
*/
private $front_end;
/**
* @var Blocks_Factory
*/
private $blocks_factory;
/**
* @var Themes
*/
private $playlist_themes;
/**
* @var Post_Registration
*/
private $registered_post_types;
/**
* @var Customizer
*/
private $customizer;
/**
* @var Rest_Api
*/
private $rest_api;
/**
* Clone.
*
* Disable class cloning and throw an error on object clone.
*
* The whole idea of the singleton design pattern is that there is a single
* object. Therefore, we don't want the object to be cloned.
*
* @access public
*/
public function __clone() {
// Cloning instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'codeflavors-vimeo-video-post-lite' ), '2.0' );
}
/**
* Wakeup.
*
* Disable unserializing of the class.
*
* @access public
*/
public function __wakeup() {
// Unserializing instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'codeflavors-vimeo-video-post-lite' ), '2.0' );
}
/**
* Instance.
*
* Ensures only one instance of the plugin class is loaded or can be loaded.
*
* @access public
* @static
*
* @return Plugin
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
/**
* Triggered when Vimeotheque has loaded.
* Fires when Vimeotheque was fully loaded and instantiated.
*
* @since 2.0
*/
do_action( 'vimeotheque_loaded' );
}
return self::$instance;
}
/**
* Class constructors - sets all filters and hooks
*/
private function __construct(){
// start the autoloader
$this->register_autoloader();
// load dependency files
$this->load();
// activation hook to add the rewrite rules for the custom post type
register_activation_hook( VIMEOTHEQUE_FILE, [
$this,
'activation_hook'
] );
add_action( 'plugins_loaded', [
$this,
'init'
], 1 );
// run this admin init on init to have access to earlier hooks
// priority must be set to run very early so that init hooks set
// in admin page can also run
add_action( 'init', [
$this,
'admin_init'
], -9999999 );
new Amp();
new Templates_Init();
add_action(
'after_setup_theme',
function(){
$options = $this->get_options();
if( $options['enable_templates'] && !current_theme_supports( 'vimeotheque' ) ){
/**
* Support for Video templates.
*/
add_theme_support( 'vimeotheque' );
/**
* Support for next video card after the video finishes.
*/
add_theme_support( 'vimeotheque-next-video-card' );
}
}, 1
);
add_filter(
'vimeotheque\options\get',
/**
* Filter options.
*
* Filter the plugin options and check if templates are enabled.
*
* @param array $result The requested options set.
* @param array $all_options All the plugin options.
* @param string $wp_option_name The WP option name.
*/
function( $result, $all_options, $wp_option_name ){
if( $this->get_options_obj()->get_option_name() == $wp_option_name ){
if( get_theme_support( 'vimeotheque' ) ){
$all_options['enable_templates'] = true;
if( isset( $result['enable_templates'] ) ) {
$result['enable_templates'] = true;
}
}
if( $all_options['enable_templates'] ) {
// When templates are enabled, these options will always have the same predefined value.
$options = [
'archives' => false,
'public' => true,
'import_title' => true,
'import_description' => 'content',
'featured_image' => true
];
// Set the options to the predefined value.
foreach ( $options as $index => $value ) {
if ( isset( $result[ $index ] ) ) {
$result[ $index ] = $value;
}
}
}
}
return $result;
}, -999, 3
);
}
public function init(){
// register the post type
$this->set_post_type();
// set the importer
$this->load_importer();
// start the front-end
$this->load_front_end();
new Shortcode_Factory();
$this->blocks_factory = new Blocks_Factory( $this );
new Widgets_Factory( $this );
$this->playlist_themes = new Themes(
new Theme(
VIMEOTHEQUE_PATH . 'themes/default/player.php',
__( 'Default', 'codeflavors-vimeo-video-post-lite' )
)
);
$this->playlist_themes->register_theme(
new Theme(
VIMEOTHEQUE_PATH . 'themes/simple/theme.php',
__( 'Simple', 'codeflavors-vimeo-video-post-lite' )
)
);
$this->playlist_themes->register_theme(
new Theme(
VIMEOTHEQUE_PATH . 'themes/listy/theme.php',
__( 'Listy', 'codeflavors-vimeo-video-post-lite' )
)
);
// internalization
load_plugin_textdomain(
'codeflavors-vimeo-video-post-lite',
false,
basename( dirname( VIMEOTHEQUE_FILE ) ) . '/languages/'
);
}
/**
* Register the autoloader
*/
private function register_autoloader(){
require VIMEOTHEQUE_PATH . 'includes/libs/autoload.class.php';
Autoload::run();
}
/**
* Register the post type
*/
private function set_post_type(){
$this->cpt = new Post_Type( $this );
add_action( 'init', function(){
$this->registered_post_types = new Post_Registration(
$this->cpt->get_wp_post_type_object(),
$this->cpt->get_category_taxonomy_object(),
get_taxonomy( $this->cpt->get_tag_tax() )
);
}, 2 );
}
/**
* Loads the automatic importer
*/
private function load_importer(){
/**
* Posts importer filter.
*
* @param Posts_Import $importer The Posts_Import object reference.
*/
$this->posts_import = apply_filters(
'vimeotheque\set_importer',
new Posts_Import( $this->get_cpt() )
);
}
/**
* Loads the front-end
*/
private function load_front_end(){
// start the REST API compatibility
$this->rest_api = new Rest_Api( $this->get_cpt() );
// start the front-end functionality
$this->front_end = new Front_End( $this );
}
/**
* Set plugin options
*/
private function set_plugin_options(){
$defaults = [
'enable_templates' => false, // use the video templates for themes
'public' => true, // post type is public or not
'archives' => false, // display video embed on archive pages
'post_slug' => 'vimeo-video',
'taxonomy_slug' => 'vimeo-videos',
'tag_slug' => 'vimeo-tag',
'import_tags' => true, // import tags retrieved from Vimeo
'max_tags' => 3, // how many tags to import
'import_title' => true, // import titles on custom posts
'import_description' => 'content', // import descriptions on custom posts
'import_date' => true, // import video date as post date
'featured_image' => true, // set thumbnail as featured image; default import on video feed import (takes more time)
'import_status' => 'publish', // default import status of videos
// Vimeo oAuth
'vimeo_consumer_key' => '',
'vimeo_secret_key' => '',
'oauth_token' => '' // retrieved from Vimeo; gets set after entering valid client ID and client secret
];
/**
* Options filter.
*
* @param array $defaults Default options array.
*/
$defaults = apply_filters(
'vimeotheque\options_default',
$defaults
);
$this->options = Options_Factory::get( '_cvm_plugin_settings', $defaults );
}
/**
* Set video player options
*/
private function set_player_options(){
$defaults = [
'title' => 1, // show video title
'byline' => 1, // show player controls. Values: 0 or 1
'portrait' => 1, // show author image
'loop' => 0,
// Autoplay may be blocked in some environments, such as IOS, Chrome 66+, and Safari 11+. In these cases, we’ll revert to standard playback requiring viewers to initiate playback.
'autoplay' => 0, // 0 - on load, player won't play video; 1 - on load player plays video automatically
'color' => '', // no color set by default; will use Vimeo's settings
'dnt' => 0, // block Vimeo player from tracking session data or cookies (1) or allow it (0);
// extra settings
'aspect_ratio' => '16x9',
'width' => 900,
'max_height' => 0, // allows setup of a maximum embed height; must be a value over 50px to work
'video_position' => 'below-content', // in front-end custom post, where to display the video: above or below post content
'video_align' => 'align-left', // video alignment
'lazy_load' => false, // lazy load videos
'play_icon_color' => '#FF0000', // lazy load play icon color
'volume' => 45, // video default volume
// extra player settings controllable by widgets/shortcodes
'playlist_loop' => 0,
'aspect_override' => true,
'start_time' => 0, // time in seconds when playback should start
'muted' => false, // load video muted
'background' => false, // load video in background mode (hides controls and mutes video)
'transparent' => false, // video embed should be with background (false) or without it (true)
];
/**
* Player options filter.
*
* @param array $defaults Default options array.
*/
$defaults = apply_filters(
'vimeotheque\player_options_default',
$defaults
);
// get Plugin option
$this->player_options = Options_Factory::get( '_cvm_player_settings', $defaults );
}
/**
* Runs on plugin activation and registers rewrite rules
* for video custom post type
*
* @return void
*/
public function activation_hook(){
$this->set_post_type();
// register custom post
$this->get_cpt()->register_post();
// create rewrite ( soft )
flush_rewrite_rules( false );
$this->add_admin();
$wp_option = get_option( $this->get_options_obj()->get_option_name() );
if( !$wp_option ){
set_transient( 'vimeotheque_setup_activated' , time(), 30 );
}
}
/**
* Returns plugin options array
*
* @return array
*/
public function get_options(){
$options = $this->get_options_obj();
return $options->get_options( is_customize_preview() );
}
/**
* Returns options object
*
* @return Options
*/
public function get_options_obj(){
if( !$this->options ){
$this->set_plugin_options();
}
return $this->options;
}
/**
* Returns player options object
*
* @return Options
*/
public function get_embed_options_obj(){
if( !$this->player_options ){
$this->set_player_options();
}
return $this->player_options;
}
/**
* @return array
*/
public function get_embed_options(){
$options = $this->get_embed_options_obj();
return $options->get_options( is_customize_preview() );
}
/**
* Callback function for hook "admin_init"
*/
public function admin_init(){
$this->add_customizer();
$this->add_admin();
}
/**
* Implements WP customizer functionality
*/
private function add_customizer(){
if( is_admin() || is_customize_preview() ) {
$this->customizer = new Customizer();
}
}
/**
* Adds plugin administration functionality
*/
private function add_admin(){
if( is_admin() || Helper::is_ajax() ) {
$this->admin = new Admin( $this->get_cpt() );
}
}
/**
* @param bool $cap
*
* @return array|mixed
* @throws \Exception
*/
public function get_capability( $cap = false ){
return $this->admin->get_capability( $cap );
}
/**
* @return array
*/
public function get_roles(){
return $this->admin->get_roles();
}
/**
* @return Post_Type
*/
public function get_cpt(){
return $this->cpt;
}
/**
* @return Posts_Import
*/
public function get_posts_importer(){
return $this->posts_import;
}
/**
* Get the admin.
*
* Returns the Admin object that allows access to various admin sections like the menu
* or custom post type definitions.
*
* @return Admin
*/
public function get_admin(){
if( is_null( $this->admin ) ){
$this->add_admin();
}
return $this->admin;
}
/**
* @return Front_End
*/
public function get_front_end(){
return $this->front_end;
}
/**
* @return Themes
*/
public function get_playlist_themes() {
return $this->playlist_themes;
}
/**
* @param string $key - string key for the block
*
* @return Block_Abstract - returns the registered block
* @see Blocks_Factory::register_blocks() for all keys
*/
public function get_block( $key ) {
return $this->blocks_factory->get_block( $key );
}
/**
* @return Blocks_Factory
*/
public function get_blocks(){
return $this->blocks_factory;
}
/**
* @return Post_Registration
*/
public function get_registered_post_types(){
return $this->registered_post_types;
}
/**
* @return Customizer
*/
public function get_customizer() {
return $this->customizer;
}
/**
* @return Rest_Api
*/
public function get_rest_api() {
return $this->rest_api;
}
/**
* Load dependencies
* @return void
*/
private function load(){
add_action( 'vimeotheque_pro_loaded', function(){
include_once VIMEOTHEQUE_PATH . 'includes/deprecated.php';
} );
}
}
Methods
- __clone — Clone.
- __construct — Class constructors - sets all filters and hooks
- __wakeup — Wakeup.
- activation_hook — Runs on plugin activation and registers rewrite rules for video custom post type
- add_admin — Adds plugin administration functionality
- add_customizer — Implements WP customizer functionality
- admin_init — Callback function for hook "admin_init"
- get_admin — Get the admin.
- get_block
- get_blocks
- get_capability
- get_cpt
- get_customizer
- get_embed_options
- get_embed_options_obj — Returns player options object
- get_front_end
- get_options — Returns plugin options array
- get_options_obj — Returns options object
- get_playlist_themes
- get_posts_importer
- get_registered_post_types
- get_rest_api
- get_roles
- init
- instance — Instance.
- load — Load dependencies
- load_front_end — Loads the front-end
- load_importer — Loads the automatic importer
- register_autoloader — Register the autoloader
- set_player_options — Set video player options
- set_plugin_options — Set plugin options
- set_post_type — Register the post type
