%PDF- %PDF-
Direktori : /var/www/projetos/stb.ind.br/wp-content/plugins/webp-express/lib/classes/ |
Current File : /var/www/projetos/stb.ind.br/wp-content/plugins/webp-express/lib/classes/WCFMApi.php |
<?php namespace WebPExpress; use \WebPConvert\Convert\Converters\Stack; use \WebPConvert\WebPConvert; /** * */ class WCFMApi { private static function doProcessRequest() { if (!check_ajax_referer('webpexpress-wcfm-nonce', 'nonce', false)) { throw new \Exception('The security nonce has expired. You need to reload (press F5) and try again)'); } Validate::postHasKey('command'); $command = sanitize_text_field(stripslashes($_POST['command'])); switch ($command) { case 'get-tree': $result = self::processGetTree(); break; case 'conversion-settings': $result = self::processConversionSettings(); break; case 'info': $result = self::processInfo(); break; case 'convert': $result = self::processConvert(); break; } $json = wp_json_encode($result, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); if ($json === false) { // TODO: We can do better error handling than this! throw new \Exception('Failed encoding result to JSON'); } else { echo $json; } wp_die(); } public static function processRequest() { try { self::doProcessRequest(); } catch (\Exception $e) { wp_send_json_error($e->getMessage()); wp_die(); } } /* { "converters": [ { "converter": "cwebp", "options": { "use-nice": true, "try-common-system-paths": true, "try-supplied-binary-for-os": true, "method": 6, "low-memory": true, "command-line-options": "" }, "working": true }, { "converter": "vips", "options": { "smart-subsample": false, "preset": "none" }, "working": false }, { "converter": "imagemagick", "options": { "use-nice": true }, "working": true, "deactivated": true }, { "converter": "graphicsmagick", "options": { "use-nice": true }, "working": false }, { "converter": "ffmpeg", "options": { "use-nice": true, "method": 4 }, "working": false }, { "converter": "wpc", "working": false, "options": { "api-key": "" } }, { "converter": "ewww", "working": false }, { "converter": "imagick", "working": false }, { "converter": "gmagick", "working": false }, { "converter": "gd", "options": { "skip-pngs": false }, "working": false } ] }*/ public static function processConversionSettings() { require_once __DIR__ . "/../../vendor/autoload.php"; $availableConverters = Stack::getAvailableConverters(); /* $converters = []; //$supportsEncoding = []; foreach ($availableConverters as $converter) { $converters[] = [ 'id' => $converter, 'name' => $converter ]; /*if () { $supportsEncoding[] = $converter; }*/ //} $systemStatus = [ 'converterRequirements' => [ 'gd' => [ 'extensionLoaded' => extension_loaded('gd'), 'compiledWithWebP' => function_exists('imagewebp'), ] // TODO: Add more! ] ]; //getUnsupportedDefaultOptions //supportedStandardOptions: { return [ //'converters' => $converters, //'options' => WebPConvert::getConverterOptionDefinitions('png', false, true)['general'], 'systemStatus' => $systemStatus ]; /* $config = Config::loadConfigAndFix(); // 'working', 'deactivated' $foundFirstWorkingAndActive = false; foreach ($config['converters'] as $converter) { $converters[] = [ 'id' => $converter['converter'], 'name' => $converter['converter'] ]; if ($converter['working']) { if } if (!$foundFirstWorkingAndActive) { } }*/ return [ 'converters' => $converters ]; } public static function processInfo() { Validate::postHasKey('args'); //$args = json_decode(sanitize_text_field(stripslashes($_POST['args'])), true); $args = $_POST['args']; if (!array_key_exists('path', $args)) { throw new \Exception('"path" argument missing for command'); } $path = SanityCheck::pathWithoutDirectoryTraversal($args['path']); $path = ltrim($path, '/'); $pathTokens = explode('/', $path); $rootId = array_shift($pathTokens); // Shift off the first item, which is the scope $relPath = implode('/', $pathTokens); $config = Config::loadConfigAndFix(); $rootIds = Paths::filterOutSubRoots($config['scope']); if (!in_array($rootId, $rootIds)) { throw new \Exception('Invalid scope'); } $absPath = Paths::getAbsDirById($rootId) . '/' . $relPath; //absPathExistsAndIsFile SanityCheck::absPathExists($absPath); $result = [ 'original' => [ //'filename' => $absPath, //'abspath' => $absPath, 'size' => filesize($absPath), 'url' => Paths::getUrlById($rootId) . '/' . $relPath, ] ]; // TODO: NO! // We must use ConvertHelper::getDestination for the abs path. // And we must use logic from AlterHtmlHelper to get the URL //error_log('path:' . $absPathDest); $destinationOptions = DestinationOptions::createFromConfig($config); if ($destinationOptions->useDocRoot) { if (!(Paths::canUseDocRootForStructuringCacheDir())) { $destinationOptions->useDocRoot = false; } } $imageRoots = new ImageRoots(Paths::getImageRootsDef()); $destinationPath = Paths::getDestinationPathCorrespondingToSource($absPath, $destinationOptions); list($rootId, $destRelPath) = Paths::getRootAndRelPathForDestination($destinationPath, $imageRoots); if ($rootId != '') { $absPathDest = Paths::getAbsDirById($rootId) . '/' . $destRelPath; $destinationUrl = Paths::getUrlById($rootId) . '/' . $destRelPath; SanityCheck::absPath($absPathDest); if (@file_exists($absPathDest)) { $result['converted'] = [ 'abspath' => $absPathDest, 'size' => filesize($absPathDest), 'url' => $destinationUrl, 'log' => '' ]; } } //$destinationUrl = DestinationUrl:: /* error_log('dest:' . $destinationPath); error_log('dest root:' . $rootId); error_log('dest path:' . $destRelPath); error_log('dest abs-dir:' . Paths::getAbsDirById($rootId) . '/' . $destRelPath); error_log('dest url:' . Paths::getUrlById($rootId) . '/' . $destRelPath); */ //error_log('url:' . $destinationPath); //error_log('destinationOptions' . print_r($destinationOptions, true)); /* $destination = Paths::destinationPathConvenience($rootId, $relPath, $config); $absPathDest = $destination['abs-path']; SanityCheck::absPath($absPathDest); error_log('path:' . $absPathDest); if (@file_exists($absPathDest)) { $result['converted'] = [ 'abspath' => $destination['abs-path'], 'size' => filesize($destination['abs-path']), 'url' => $destination['url'], 'log' => '' ]; } */ return $result; } public static function processGetTree() { $config = Config::loadConfigAndFix(); $rootIds = Paths::filterOutSubRoots($config['scope']); $listOptions = [ //'root' => Paths::getUploadDirAbs(), 'ext' => $config['destination-extension'], 'destination-folder' => $config['destination-folder'], /* hm, "destination-folder" is a bad name... */ 'webExpressContentDirAbs' => Paths::getWebPExpressContentDirAbs(), 'uploadDirAbs' => Paths::getUploadDirAbs(), 'useDocRootForStructuringCacheDir' => (($config['destination-structure'] == 'doc-root') && (Paths::canUseDocRootForStructuringCacheDir())), 'imageRoots' => new ImageRoots(Paths::getImageRootsDefForSelectedIds($config['scope'])), // (Paths::getImageRootsDef() 'filter' => [ 'only-converted' => false, 'only-unconverted' => false, 'image-types' => $config['image-types'], ], 'flattenList' => false ]; $children = []; foreach ($rootIds as $rootId) { $listOptions['root'] = Paths::getAbsDirById($rootId); $grandChildren = BulkConvert::getListRecursively('.', $listOptions); $children[] = [ 'name' => $rootId, 'isDir' => true, 'children' => $grandChildren ]; } return ['name' => '', 'isDir' => true, 'isOpen' => true, 'children' => $children]; } public static function processConvert() { Validate::postHasKey('args'); //$args = json_decode(sanitize_text_field(stripslashes($_POST['args'])), true); $args = $_POST['args']; if (!array_key_exists('path', $args)) { throw new \Exception('"path" argument missing for command'); } if (!array_key_exists('convertOptions', $args)) { throw new \Exception('"convertOptions" argument missing for command'); } return ['success' => true, 'optionsReceived' => $args['convertOptions']]; /* $path = SanityCheck::pathWithoutDirectoryTraversal($args['path']); $path = ltrim($path, '/'); $pathTokens = explode('/', $path); $rootId = array_shift($pathTokens); // Shift off the first item, which is the scope $relPath = implode('/', $pathTokens); $config = Config::loadConfigAndFix(); $rootIds = Paths::filterOutSubRoots($config['scope']); if (!in_array($rootId, $rootIds)) { throw new \Exception('Invalid scope'); } $absPath = Paths::getAbsDirById($rootId) . '/' . $relPath; //absPathExistsAndIsFile SanityCheck::absPathExists($absPath); */ } }