pluginExists() ) {
add_filter( 'admin_notices', array( $this, 'displayAdminNotificationNotExist' ) );
// If the class doesn't exist, the plugin is inactive. Throw admin notice to activate plugin.
} else if ( ! class_exists( self::TITAN_CLASS ) ) {
add_filter( 'admin_notices', array( $this, 'displayAdminNotificationInactive' ) );
}
}
/**
* Displays a notification in the admin with a link to search
*
* @since 1.6
*/
public function displayAdminNotificationNotExist() {
// Check for TGM use, if used, let TGM do the notice.
// We do this here since performCheck() is too early
if ( $this->tgmPluginActivationExists() ) {
return;
}
echo "
"
. __( "Titan Framework needs to be installed.", "default" )
. sprintf( " %s",
admin_url( "plugin-install.php?tab=search&type=term&s=titan+framework" ),
__( "Click here to search for the plugin.", "default" ) )
. "
";
}
/**
* Displays a notification in the admin if the Titan Framework is found but not activated.
*
* @since 1.6
*/
public function displayAdminNotificationInactive() {
// Check for TGM use, if used, let TGM do the notice.
// We do this here since performCheck() is too early
if ( $this->tgmPluginActivationExists() ) {
return;
}
echo ""
. __( "Titan Framework needs to be activated.", "default" )
. sprintf( " %s",
admin_url( "plugins.php" ),
__( "Click here to go to the plugins page and activate it.", "default" ) )
. "
";
}
/**
* Checks the existence of Titan Framework in the list of plugins,
* uses the slug path of the plugin for checking.
*
* @return boolean True if the TF exists
* @since 1.6
*/
public function pluginExists() {
// Required function as it is only loaded in admin pages.
require_once ABSPATH . 'wp-admin/includes/plugin.php';
// Get all plugins, activated or not.
$plugins = get_plugins();
// Check plugin existence by checking if the name is registered as an array key. get_plugins collects all plugin path into arrays.
foreach ( $plugins as $slug => $plugin ) {
if ( preg_match( self::SEARCH_REGEX, $slug, $matches ) ) {
return true;
}
}
return false;
}
/**
* Checks whether TGM Plugin Activation is being used.
*
* @return boolean True if the TF was used in TGM
* @since 1.7.4
* @see http://tgmpluginactivation.com/
*/
public function tgmPluginActivationExists() {
return class_exists( 'TGM_Plugin_Activation' )
&& function_exists( 'tgmpa' );
}
/**
* Includes Titan Framework in TGM Plugin Activation if it's
* available.
*
* @return void
* @since 1.7.4
* @see http://tgmpluginactivation.com/
*/
public function tgmPluginActivationInclude() {
if ( ! $this->tgmPluginActivationExists() ) {
return;
}
tgmpa( array(
array(
'name' => 'Titan Framework',
'slug' => self::PLUGIN_SLUG,
'required' => true,
),
) );
}
}
new TitanFrameworkChecker();
}
/**
* If Titan Framework isn't activated, our frontend will show a ton of errors,
* not to mention live previews will not work correctly.
* This dummy class will make calls to Titan Framework work, but return the default values.
*
* @since 1.7.5
*/
function titan_framework_checker_dummy_class() {
// Don't do anything when we're activating a plugin to prevent errors
// on redeclaring Titan classes
if ( is_admin() ) {
if ( ! empty( $_GET['action'] ) && ! empty( $_GET['plugin'] ) ) {
if ( $_GET['action'] == 'activate' ) {
return;
}
}
}
// Create a dummy class of Titan Framework if the plugin isn't available.
// This is class just prevents errors and gives out default values.
if ( ! class_exists( 'TitanFramework' ) ) {
/**
* Dummy / Simulated Titan Framework for a more pleasing pre-Titan experience
*
* @since 1.7.5
*/
class TitanFramework {
private static $instances = array();
private static $firstCall = true;
public $optionNamespace;
private $optionDefaults = array();
private static $fontsToLoad = array();
/**
* All the web safe fonts (do not enqueue these)
* @see class-option-font.php
* @since 1.7.5
*/
public static $webSafeFonts = array(
'Arial, Helvetica, sans-serif' => 'Arial',
'"Arial Black", Gadget, sans-serif' => 'Arial Black',
'"Comic Sans MS", cursive, sans-serif' => 'Comic Sans',
'"Courier New", Courier, monospace' => 'Courier New',
'Georgia, serif' => 'Geogia',
'Impact, Charcoal, sans-serif' => 'Impact',
'"Lucida Console", Monaco, monospace' => 'Lucida Console',
'"Lucida Sans Unicode", "Lucida Grande", sans-serif' => 'Lucida Sans',
'"Palatino Linotype", "Book Antiqua", Palatino, serif' => 'Palatino',
'Tahoma, Geneva, sans-serif' => 'Tahoma',
'"Times New Roman", Times, serif' => 'Times New Roman',
'"Trebuchet MS", Helvetica, sans-serif' => 'Trebuchet',
'Verdana, Geneva, sans-serif' => 'Verdana',
);
/**
* Just memorize the option namespace
*
* @since 1.7.5
*/
function __construct( $optionNamespace ) {
$this->optionNamespace = $optionNamespace;
self::simulatedTFInit();
}
/**
* Simulation of a Titan Framework initialize
*
* @since 1.7.5
*/
public static function simulatedTFInit() {
if ( ! self::$firstCall ) {
return;
}
self::$firstCall = false;
// Start create option simulation
do_action( 'tf_create_options' );
// Enqueue all Google fonts
self::enqueueGooglefonts();
}
/**
* Gets the instance of our dummy class, also makes sure we perform tf_create_options
*
* @param $optionNamespace string The namespace to use
* @return TitanFramework (dummy) instance
* @see TitanFramework::getInstance (the real class)
* @since 1.7.5
*/
public static function getInstance( $optionNamespace ) {
// Clean namespace
$optionNamespace = str_replace( ' ', '-', trim( strtolower( $optionNamespace ) ) );
foreach ( self::$instances as $instance ) {
if ( $instance->optionNamespace == $optionNamespace ) {
return $instance;
}
}
$newInstance = new TitanFramework( $optionNamespace );
self::$instances[] = $newInstance;
return $newInstance;
}
/**
* Don't create the option and just memorize the default values
*
* @param $args array Normal option arguments
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createOption( $args ) {
if ( ! empty( $args['id'] ) ) {
$this->optionDefaults[ $args['id'] ] = empty( $args['default'] ) ? '' : $args['default'];
$this->gatherGoogleFonts( $args );
}
return $this;
}
/**
* Gathers all the Google fonts from font options
*
* @param $args array Normal option arguments
* @see TitanFrameworkOptionFont::enqueueGooglefonts()
* @since 1.7.5
*/
protected function gatherGoogleFonts( $args ) {
if ( $args['type'] != 'font' ) {
return;
}
if ( ! empty( $args['show_google_fonts'] ) ) {
if ( ! $args['show_google_fonts'] ) {
return;
}
}
if ( ! is_array( $args['default'] ) ) {
return;
}
if ( empty( $args['default']['font-family'] ) ) {
return;
}
if ( in_array( $args['default']['font-family'], self::$webSafeFonts ) ) {
return;
}
// Get the weight
$variant = '400';
if ( ! empty( $args['default']['font-weight'] ) ) {
$variant = $args['default']['font-weight'];
if ( $variant == 'normal' ) {
$variant = '400';
} else if ( $variant == 'bold' ) {
$variant = '500';
} else if ( $variant == 'bolder' ) {
$variant = '800';
} else if ( $variant == 'lighter' ) {
$variant = '100';
}
}
if ( ! empty( $args['default']['font-style'] ) ) {
if ( $args['default']['font-style'] == 'italic' ) {
$variant .= 'italic';
}
}
if ( ! array_key_exists( $args['default']['font-family'], self::$fontsToLoad ) ) {
self::$fontsToLoad[ $args['default']['font-family'] ] = array();
}
self::$fontsToLoad[ $args['default']['font-family'] ][] = $variant;
}
/**
* Enqueues all the Google fonts
*
* @see TitanFrameworkOptionFont::enqueueGooglefonts()
* @since 1.7.5
*/
protected function enqueueGooglefonts() {
$subsets = array( 'latin', 'latin-ext', );
foreach ( self::$fontsToLoad as $fontName => $variant ) {
// Always include the normal weight so that we don't error out
$variants[] = '400';
$variants = array_unique( $variants );
$fontUrl = sprintf( "http://fonts.googleapis.com/css?family=%s:%s&subset=%s",
str_replace( ' ', '+', $fontName ),
implode( ',', $variants ),
implode( ',', $subsets )
);
wp_enqueue_style( 'tf-google-webfont-' . strtolower( str_replace( ' ', '-', $fontName ) ), $fontUrl );
}
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string The option ID
* @return mixed The default value of the option
* @since 1.7.5
*/
public function getOption( $optionID ) {
return empty( $this->optionDefaults[ $optionID ] ) ? '' : $this->optionDefaults[ $optionID ];
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string The option ID
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createThemeCustomizerSection( $args ) {
return $this;
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string The option ID
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createAdminPanel( $args ) {
return $this;
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string The option ID
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createTab( $args ) {
return $this;
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string The option ID
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createMetaBox( $args ) {
return $this;
}
/**
* Don't get the actual option value and just get the default value
*
* @param $args string CSS arguments
* @return TitanFramework (dummy) instance
* @since 1.7.5
*/
public function createCSS( $args ) {
return $this;
}
}
}
}