Tribe__Image__Plus__Main
Source
File: src/Tribe/Main.php
class Tribe__Image__Plus__Main {
const VERSION = '1.0.3';
/**
* Static Singleton Holder
* @var self
*/
protected static $instance;
/**
* Path of the plugin.
*/
public $plugin_path;
/**
* Plugin directory
*/
public $plugin_dir;
/**
* Plugin slug
*/
public $plugin_slug;
/**
* Plugin url
*/
public $plugin_url;
/**
* PUE checker
*/
protected $pue;
/**
* The placeholder image src.
*/
public static $placeholder = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw';
/**
* Get (and instantiate, if necessary) the instance of the class.
*
* @return self
*/
public static function instance() {
if ( ! self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
/**
* Initialize the widget and much of the plugin in general.
*
* @since 1.0
*/
public function __construct() {
$this->plugin_path = trailingslashit( IMAGE_WIDGET_PLUS_DIR );
$this->plugin_dir = trailingslashit( basename( $this->plugin_path ) );
$this->plugin_url = trailingslashit( plugins_url( $this->plugin_dir ) );
$this->plugin_slug = 'image-widget-plus';
// let's initialize after TEC and ET to prevent common conflicts
add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 1 );
}
/**
* To avoid duplication of our own methods and to provide a underlying system
* Modern Tribe maintains a Library called Common to store a base for our plugins
*
* Currently we will read the File `common/package.json` to determine which version
* of the Common Lib we will pass to the Auto-Loader of PHP.
*
* In the past we used to parse `common/src/Tribe/Main.php` for the Common Lib version.
*
* @link https://github.com/moderntribe/tribe-common
* @see self::init_autoloading
*
* @return void
*/
public function maybe_set_common_lib_info() {
// if always set common version to something super low because ANY common should override the
// one in image-widget-plus
$common_version = '1.0';
/**
* If we don't have a version of Common or an Older version of the Lib
* overwrite what should be loaded by the auto-loader
*/
if (
empty( $GLOBALS['tribe-common-info'] ) ||
version_compare( $GLOBALS['tribe-common-info']['version'], $common_version, '<' )
) {
$GLOBALS['tribe-common-info'] = array(
'dir' => "{$this->plugin_path}common/src/Tribe",
'version' => $common_version,
);
}
}
/**
* Bootstrap this plugin and all of its pieces
*
* Fired during plugins_loaded action
*
* @since 1.0
*/
public function plugins_loaded() {
$this->maybe_set_common_lib_info();
$this->init_autoloading();
// Tribe common resources
require_once $this->plugin_path . 'vendor/tribe-common-libraries/tribe-common-libraries.class.php';
Tribe__Main::instance();
// if running an old version of TEC (pre PUE 2.0 with embedded licensing), fake the install key
if ( version_compare( Tribe__Main::VERSION, '4.5.1', '<' ) ) {
add_filter( 'pre_option_pue_install_key_image_widget_plus', array( $this, 'filter_install_key' ) );
}
if ( class_exists( 'Tribe__Main' ) && ! is_admin() && ! class_exists( 'Tribe__Image__Plus__Main' ) ) {
tribe_main_pue_helper();
}
// Load language files.
$mopath = $this->plugin_dir . 'lang/';
$domain = 'image-widget-plus';
// If we don't have Common classes load the old fashioned way
if ( ! class_exists( 'Tribe__Main' ) ) {
load_plugin_textdomain( $domain, false, $mopath );
} else {
// This will load `wp-content/languages/plugins` files first
Tribe__Main::instance()->load_text_domain( $domain, $mopath );
}
// Load other files.
require_once $this->plugin_path . 'src/Tribe/Attachment.php';
require_once $this->plugin_path . 'src/Tribe/Image.php';
require_once $this->plugin_path . 'src/Tribe/Widget.php';
require_once $this->plugin_path . 'src/Tribe/PUE/Helper.php';
require_once $this->plugin_path . 'src/Tribe/PUE.php';
// Initialize other classes.
Tribe__Image__Plus__Attachment::instance();
Tribe__Image__Plus__Widget::instance();
// Register the actual Image Widget Plus widget.
add_action( 'widgets_init', array( $this, 'register_widget' ) );
// Misc. hooks.
add_action( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 );
$this->pue = new Tribe__Image__Plus__PUE( "{$this->plugin_path}/image-widget-plus.php" );
}
/**
* Requires the autoloader class from the main plugin class and sets up
* autoloading.
*/
public function init_autoloading() {
$prefixes = array();
if ( ! class_exists( 'Tribe__Autoloader' ) ) {
require_once $GLOBALS['tribe-common-info']['dir'] . '/Autoloader.php';
$prefixes['Tribe__'] = $GLOBALS['tribe-common-info']['dir'];
}
$autoloader = Tribe__Autoloader::instance();
// include the fake Tribe__Main if a preferred one from TEC/ET hasn't been prepped for use
if ( ! empty( $prefixes['Tribe__'] ) && "{$this->plugin_path}common/src/Tribe" === $prefixes['Tribe__'] ) {
require_once $this->plugin_path . 'Tribe__Main.php';
} else {
$autoloader->register_prefixes( $prefixes );
}
$autoloader->register_prefix( 'Tribe__Image__Plus__', dirname( __FILE__ ) . '/src/Tribe', 'image-widget-plus' );
// deprecated classes are registered in a class to path fashion
foreach ( glob( $this->plugin_path . 'src/deprecated/*.php' ) as $file ) {
$class_name = str_replace( '.php', '', basename( $file ) );
$autoloader->register_class( $class_name, $file );
}
$autoloader->register_autoloader();
}
public function register_widget() {
register_widget( 'Tribe__Image__Plus__Widget' );
}
/**
* Loads theme files in appropriate hierarchy: First the child theme, then
* the parent template, and finally plugin resources. Will look in the
* image-widget/ directory in a theme, the views/ directory in the plugin.
*
* @param string $template Template file to search for.
*
* @return template path
*/
public function template( $template ) {
// Whether or not .php was added.
$template_slug = rtrim( $template, '.php' );
$template = $template_slug . '.php';
if ( $theme_file = locate_template( array( "image-widget/{$template}" ) ) ) {
$file = $theme_file;
} else {
$file = "{$this->plugin_path}src/views/{$template}";
}
return apply_filters( 'tribe_image_plus_template_' . $template, $file );
}
/**
* Loads admin views, which aren't "overrideable", so no hierarchy.
*
* @param string $template Template file to search for.
*
* @return template path
*/
public function admin_template( $template ) {
// Whether or not .php was added.
$template_slug = rtrim( $template, '.php' );
$template = $template_slug . '.php';
return "{$this->plugin_path}src/admin-views/{$template}";
}
/**
* Display an informational section in the plugin admin UI.
*
* @param array $meta Array of existing meta links.
* @param string $file Filename of plugin whose meta row is being filtered.
*
* @return array The filtered array of meta links.
*/
public function plugin_row_meta( $meta, $file ) {
if ( strpos( $file, 'image-widget-plus.php' ) !== false ) {
$meta[] = '<a href="http://m.tri.be/19nl" target="_blank">' . esc_html__( 'Support', 'image-widget-plus' ) . '</a>';
}
return $meta;
}
/**
* Filter the PUE install key for image widget plus to use the PUE__Helper class
*
* Note: this only gets run if running an older version of TEC (pre PUE 2.0 embedded licensing)
*
* @param string $value
*
* @return string
*/
public function filter_install_key( $value ) {
if ( $value ) {
return $value;
}
return Tribe__Image__Plus__PUE__Helper::DATA;
}
}
Methods
- __construct — Initialize the widget and much of the plugin in general.
- admin_template — Loads admin views, which aren't "overrideable", so no hierarchy.
- filter_install_key — Filter the PUE install key for image widget plus to use the PUE__Helper class
- init_autoloading — Requires the autoloader class from the main plugin class and sets up autoloading.
- instance — Get (and instantiate, if necessary) the instance of the class.
- maybe_set_common_lib_info — To avoid duplication of our own methods and to provide a underlying system Modern Tribe maintains a Library called Common to store a base for our plugins
- plugin_row_meta — Display an informational section in the plugin admin UI.
- plugins_loaded — Bootstrap this plugin and all of its pieces
- register_widget
- template — Loads theme files in appropriate hierarchy: First the child theme, then the parent template, and finally plugin resources. Will look in the image-widget/ directory in a theme, the views/ directory in the plugin.