File "EnvironmentModel.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/shortpixel-image-optimiser/class/Model/EnvironmentModel.php
File
size: 5.15 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
namespace ShortPixel\Model;
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
/** Loads a few environment variables handy to have nearby
*
* Notice - This is meant to be loaded via the plugin class. Easy access with wpSPIO()->getEnv().
*/
class EnvironmentModel extends \ShortPixel\Model
{
// Server and PHP
public $is_nginx;
public $is_apache;
public $is_gd_installed;
public $is_curl_installed;
private $disabled_functions = array();
// MultiSite
public $is_multisite;
public $is_mainsite;
// Integrations
public $has_nextgen;
// WordPress
public $is_front = false;
public $is_admin = false;
public $is_ajaxcall = false;
private $screen_is_set = false;
public $is_screen_to_use = false; // where shortpixel optimizer loads
public $is_our_screen = false; // where shortpixel hooks in more complicated functions.
public $is_bulk_page = false; // Shortpixel bulk screen.
// Debug flag
public $is_debug = false;
protected static $instance;
public function __construct()
{
$this->setServer();
$this->setWordPress();
add_action('plugins_loaded', array($this, 'setIntegrations') ); // not set on construct.
add_action('current_screen', array($this, 'setScreen') ); // Not set on construct
}
public static function getInstance()
{
if (is_null(self::$instance))
self::$instance = new EnvironmentModel();
/*if (! self::$instance->screen_is_set)
self::$instance->setScreen(); */
return self::$instance;
}
/** Check ENV is a specific function is allowed. Use this with functions that might be turned off on configurations
* @param $function String The name of the function being tested
* Note: In future this function can be extended with other function edge cases.
*/
public function is_function_usable($function)
{
if (count($this->disabled_functions) == 0)
{
$disabled = ini_get('disable_functions');
$this->disabled_functions = explode($disabled, ',');
}
if (isset($this->disabled_functions[$function]))
return false;
if (function_exists($function))
return true;
return false;
}
/* https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-image-editor-imagick.php */
public function hasImagick()
{
$editor = wp_get_image_editor(\wpSPIO()->plugin_path('res/img/test.jpg'));
$className = get_class($editor);
if ($className == 'WP_Image_Editor_Imagick')
return true;
else
return false;
}
private function setServer()
{
$this->is_nginx = strpos(strtolower($_SERVER["SERVER_SOFTWARE"]), 'nginx') !== false ? true : false;
$this->is_apache = strpos(strtolower($_SERVER["SERVER_SOFTWARE"]), 'apache') !== false ? true : false;
$this->is_gd_installed = function_exists('imagecreatefrompng');
$this->is_curl_installed = function_exists('curl_init');
}
private function setWordPress()
{
$this->is_multisite = (function_exists("is_multisite") && is_multisite()) ? true : false;
$this->is_mainsite = is_main_site();
$this->determineFrontBack();
if (defined('DOING_AJAX') && DOING_AJAX)
{
$this->is_ajaxcall = true;
}
$this->is_debug = Log::debugIsActive();
}
// check if this request is front or back.
protected function determineFrontBack()
{
if ( is_admin() )
$this->is_admin = true;
else
$this->is_front = true;
}
public function setScreen($screen)
{
// WordPress pages where we'll be active on.
// https://codex.wordpress.org/Plugin_API/Admin_Screen_Reference
$use_screens = array(
'edit-post_tag', // edit tags
'upload', // media library
'attachment', // edit media
'post', // post screen
'page', // page editor
'edit-post', // edit post
'new-post', // new post
'edit-page', // all pages
);
$use_screens = apply_filters('shortpixel/init/optimize_on_screens', $use_screens);
if(in_array($screen->id, $use_screens)) {
$this->is_screen_to_use = true;
}
// Our pages.
$pages = \wpSPIO()->get_admin_pages();
// the main WP pages where SPIO hooks a lot of functions into, our operating area.
$wp_pages = array('upload', 'attachment');
$pages = array_merge($pages, $wp_pages);
/* pages can be null in certain cases i.e. plugin activation.
* treat those cases as improper screen set.
*/
if (is_null($pages))
{
return false;
}
if ( in_array($screen->id, $pages))
{
$this->is_screen_to_use = true;
$this->is_our_screen = true;
if ($screen->id == 'media_page_wp-short-pixel-bulk')
$this->is_bulk_page = true;
}
$this->screen_is_set = true;
}
public function setIntegrations()
{
$ng = \ShortPixel\NextGen::getInstance();
$this->has_nextgen = $ng->has_nextgen();
}
public function getRelativePluginSlug()
{
$dir = SHORTPIXEL_PLUGIN_DIR;
$file = SHORTPIXEL_PLUGIN_FILE;
$fs = \wpSPIO()->filesystem();
$plugins_dir = $fs->getDirectory($dir)->getParent();
$slug = str_replace($plugins_dir->getPath(), '', $file);
return $slug;
}
}