constants = new PDT_Constants( $this );
$this->bootstrap = new PDT_Bootstrap( $this );
if ( !defined('WP_CONTENT_URL') )
define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content'); // full url - WP_CONTENT_DIR is defined further up
/**
* Allows for the plugins directory to be moved from the default location.
*
* @since 2.6.0
*/
if ( !defined('WP_PLUGIN_URL') )
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' ); // full url, no trailing slash
/**
* Allows for the mu-plugins directory to be moved from the default location.
*
* @since 2.8.0
*/
if ( !defined('WPMU_PLUGIN_URL') )
define( 'WPMU_PLUGIN_URL', WP_CONTENT_URL . '/mu-plugins' ); // full url, no trailing slash
$this->basename = plugin_basename( __FILE__ );
$this->url = plugin_dir_url( __FILE__ );
$this->path = plugin_dir_path( __FILE__ );
$this->plugin_classes();
}
public static function maybe_fix_protocol( $url, $desired_protocol = null ) {
$pos_of_colon_slash_slash = strpos( $url, '://' );
if ( $pos_of_colon_slash_slash === false ) {
return $url;
}
if ( empty( $desired_protocol ) ) {
if ( defined( 'PD_PROTOCOL' ) && str_to_lower( PD_PROTOCOL ) === 'https' ) {
$desired_protocol = 'https';
} else {
$desired_protocol = 'http';
}
if ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) {
$desired_protocol = 'https';
} elseif ( !empty( $_SERVER['REDIRECT_HTTPS'] ) && $_SERVER['REDIRECT_HTTPS'] !== 'off' ) {
$desired_protocol = 'https';
} elseif ( !empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
$desired_protocol = 'https';
} elseif ( !empty( $_SERVER['protocol'] ) ) {
$desired_protocol = strtolower( substr( $_SERVER["SERVER_PROTOCOL"], 0, 5 ) ) == 'https' ? 'https' : 'http';
}
}
$url = $desired_protocol . '://' . substr( $url, $pos_of_colon_slash_slash + 3 );
return $url;
}
public static function maybe_fix_www_prefix( $url, $should_be_www = null ) {
$pos_of_colon_slash_slash = strpos( $url, '://' );
if ( $pos_of_colon_slash_slash === false ) {
return $url;
}
if ( $should_be_www === null ) {
if ( strpos( $_SERVER['HTTP_HOST'], 'www.' ) === 0 ) {
$should_be_www = true;
} else {
$should_be_www = false;
}
}
if ( !empty( $should_be_www ) ) {
$url = str_replace( array(
'://',
'://www.www.',
), array(
'://www.',
'://www.',
), $url );
} else {
$url = str_replace( array(
'://www.www.',
'://www.',
), array(
'://',
'://',
), $url );
}
return $url;
}
public function get_api_params() {
return array(
'site_url' => self::maybe_fix_www_prefix( self::maybe_fix_protocol( site_url() ) ),
'api_url' => self::maybe_fix_www_prefix( self::maybe_fix_protocol( $this->url( 'api.php' ) ) ),
'static_url' => self::maybe_fix_www_prefix( self::maybe_fix_protocol( $this->url( 'app/dist/static' ) ) ),
);
}
/**
* Attach other plugin classes to the base plugin class.
*
* @since 0.0.0
*/
public function plugin_classes() {
$this->filesystem = new PDT_Filesystem( $this );
$this->auth = new PDT_Auth( $this );
$this->api = new PDT_Api( $this );
$this->plugins = new PDT_Plugins( $this );
$this->installed = new PDT_Installed( $this );
$this->cases = new PDT_Cases( $this );
$this->clues = new PDT_Clues( $this );
$this->detective = new PDT_Detective( $this );
} // END OF PLUGIN CLASSES FUNCTION
/**
* Activate the plugin.
*
* @since 0.0.0
*/
public function _activate() {
// Bail early if requirements aren't met.
if ( ! $this->check_requirements() ) {
return;
}
// Make sure any rewrite functionality has been loaded.
flush_rewrite_rules();
}
/**
* Deactivate the plugin.
* Uninstall routines should be in uninstall.php.
*
* @since 0.0.0
*/
public function _deactivate() {
// Add deactivation cleanup functionality here.
}
/**
* Init hooks
*
* @since 0.0.0
*/
public function init() {
// Bail early if requirements aren't met.
if ( ! $this->check_requirements() ) {
return;
}
// Load translated strings for plugin.
load_plugin_textdomain( 'plugin-detective', false, dirname( $this->basename ) . '/languages/' );
// Initialize plugin classes.
$this->plugin_classes();
}
/**
* Check if the plugin meets requirements and
* disable it if they are not present.
*
* @since 0.0.0
*
* @return boolean True if requirements met, false if not.
*/
public function check_requirements() {
// Bail early if plugin meets requirements.
if ( $this->meets_requirements() ) {
return true;
}
// Add a dashboard notice.
add_action( 'all_admin_notices', array( $this, 'requirements_not_met_notice' ) );
// Deactivate our plugin.
add_action( 'admin_init', array( $this, 'deactivate_me' ) );
// Didn't meet the requirements.
return false;
}
/**
* Deactivates this plugin, hook this function on admin_init.
*
* @since 0.0.0
*/
public function deactivate_me() {
// We do a check for deactivate_plugins before calling it, to protect
// any developers from accidentally calling it too early and breaking things.
if ( function_exists( 'deactivate_plugins' ) ) {
deactivate_plugins( $this->basename );
}
}
/**
* Check that all plugin requirements are met.
*
* @since 0.0.0
*
* @return boolean True if requirements are met.
*/
public function meets_requirements() {
// Do checks for required classes / functions or similar.
// Add detailed messages to $this->activation_errors array.
return true;
}
/**
* Adds a notice to the dashboard if the plugin requirements are not met.
*
* @since 0.0.0
*/
public function requirements_not_met_notice() {
// Compile default message.
$default_message = sprintf( __( 'Troubleshoot is missing requirements and has been deactivated. Please make sure all requirements are available.', 'troubleshoot' ), admin_url( 'plugins.php' ) );
// Default details to null.
$details = null;
// Add details if any exist.
if ( $this->activation_errors && is_array( $this->activation_errors ) ) {
$details = '' . implode( '
', $this->activation_errors ) . '';
}
// Output errors.
?>