File: /var/www/html/wp-content/plugins/wp-optimize/webp/class-wpo-webp-test-run.php
<?php
if (!defined('ABSPATH')) die('No direct access allowed');
if (!class_exists('WPO_WebP_Test_Run')) :
/**
* Test run
*/
class WPO_WebP_Test_Run {
/**
* List of working coverters
*
* @var array
*/
private static $working_converters = array();
/**
* Errors array
*
* @var array
*/
private static $errors = array();
/**
* Get a list of converters that don't use shell functions
*
* @return array
*/
public static function get_converters_without_shell() {
return apply_filters('wpo_converters_without_shell', array(
'vips',
'wpc',
'ewww',
'imagick',
'gmagick',
'gd',
));
}
/**
* Get a list of converters that use shell functions
*
* @return array
*/
public static function get_converters_with_shell() {
return apply_filters('wpo_converters_with_shell', array(
// 'cwebp',
'imagemagick',
'graphicsmagick',
'ffmpeg',
));
}
/**
* Get an array of working and non-working converters list
*
* @return array
*/
public static function get_converter_status() {
$converters_without_shell = self::get_converters_without_shell();
$converters_with_shell = self::get_converters_with_shell();
self::$working_converters = array();
self::$errors = array();
self::try_converters($converters_without_shell);
if (empty(self::$working_converters)) {
if (WP_Optimize_WebP::get_instance()->shell_functions_available()) {
self::try_converters($converters_with_shell);
} else {
// If no working converters that don’t require shell access are found,
// and shell functions are unavailable, store the errors.
foreach ($converters_with_shell as $converter_id) {
self::$errors[$converter_id] = __('Required WebP shell functions are not available on the server.', 'wp-optimize');
}
}
}
return array(
'working_converters' => self::$working_converters,
'errors' => self::$errors,
);
}
/**
* Tries each converter from the list to convert to WebP
*
* @param array $converters
* @return void
*/
private static function try_converters($converters) {
$source = WPO_PLUGIN_MAIN_PATH . 'images/logo/wpo_logo_small.png';
$upload_dir = wp_upload_dir();
$destination = $upload_dir['basedir']. '/wpo/images/wpo_logo_small.png.webp';
foreach ($converters as $converter_id) {
$conversion_result = self::try_converter($converter_id, $source, $destination, $upload_dir['basedir']);
if (true === $conversion_result) {
self::$working_converters[] = $converter_id;
} else {
self::$errors[$converter_id] = $conversion_result;
}
}
}
/**
* Tries to convert to WebP and returns true if the conversion finishes successfully.
*
* @param string $converter_id
* @param string $source
* @param string $destination
* @param string $target_dir
* @return true|string
*/
private static function try_converter($converter_id, $source, $destination, $target_dir) {
try {
WPO_WebP_Utils::perform_webp_conversion($converter_id, $source, $destination);
// Copying source file to `uploads` folder. To be used test redirection
// We're doing it here, to make sure folders already exists `/wpo/images/`
copy($source, $target_dir. '/wpo/images/wpo_logo_small.png');
return true;
} catch (\Exception $e) {
return $e->getMessage();
}
}
}
endif;