first commit
This commit is contained in:
249
wp-content/plugins/brizy/editor/asset/static-file-trait.php
Normal file
249
wp-content/plugins/brizy/editor/asset/static-file-trait.php
Normal file
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
|
||||
trait Brizy_Editor_Asset_StaticFileTrait
|
||||
{
|
||||
|
||||
public static function get_asset_content($asset_source)
|
||||
{
|
||||
$http = new WP_Http();
|
||||
$wp_response = null;
|
||||
if (is_string($asset_source)) {
|
||||
$wp_response = $http->request($asset_source, array('timeout' => 30));
|
||||
} else {
|
||||
foreach ($asset_source as $url) {
|
||||
$wp_response = $http->request($url, array('timeout' => 30));
|
||||
|
||||
if (is_wp_error($wp_response)) {
|
||||
Brizy_Logger::instance()->error('Unable to get media content', array('exception' => $wp_response));
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$code = wp_remote_retrieve_response_code($wp_response);
|
||||
|
||||
if (is_wp_error($wp_response) || !($code >= 200 && $code < 300)) {
|
||||
Brizy_Logger::instance()->error('Unable to get media content', array('exception' => $wp_response));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$content = wp_remote_retrieve_body($wp_response);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $asset_source
|
||||
* @param $asset_path
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function store_file($asset_source, $asset_path)
|
||||
{
|
||||
|
||||
if (file_exists($asset_path)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
// check destination dir
|
||||
$dir_path = dirname($asset_path);
|
||||
|
||||
if (!file_exists($dir_path)) {
|
||||
if (!file_exists($dir_path) && !mkdir($dir_path, 0755, true) && !is_dir($dir_path)) {
|
||||
throw new \RuntimeException(sprintf('Directory "%s" was not created', $dir_path));
|
||||
}
|
||||
}
|
||||
|
||||
$content = self::get_asset_content($asset_source);
|
||||
|
||||
if ($content !== false) {
|
||||
file_put_contents($asset_path, $content);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
// clean up
|
||||
if ($asset_path) {
|
||||
@unlink($asset_path);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function create_attachment($madia_name, $absolute_asset_path, $relative_asset_path, $post_id = null, $uid = null)
|
||||
{
|
||||
return self::createMediaAttachment($absolute_asset_path, $relative_asset_path, $post_id, $uid);
|
||||
}
|
||||
|
||||
public static function createMediaAttachment($absolute_asset_path, $relative_asset_path, $post_id = null, $uid = null)
|
||||
{
|
||||
$filetype = wp_check_filetype($absolute_asset_path);
|
||||
|
||||
$upload_path = wp_upload_dir();
|
||||
|
||||
$attachment = array(
|
||||
'guid' => $upload_path['baseurl'] . "/" . $relative_asset_path,
|
||||
'post_mime_type' => $filetype['type'],
|
||||
'post_title' => basename($absolute_asset_path),
|
||||
'post_content' => '',
|
||||
'post_status' => 'inherit'
|
||||
);
|
||||
|
||||
$attachment_id = wp_insert_attachment($attachment, $relative_asset_path, $post_id);
|
||||
|
||||
if (is_wp_error($attachment_id) || $attachment_id === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
update_post_meta($attachment_id, 'brizy_attachment_uid', $uid ? $uid : md5($attachment_id . time()));
|
||||
|
||||
if (!function_exists('wp_generate_attachment_metadata')) {
|
||||
include_once ABSPATH . "/wp-admin/includes/image.php";
|
||||
}
|
||||
|
||||
$attach_data = wp_generate_attachment_metadata($attachment_id, $absolute_asset_path);
|
||||
wp_update_attachment_metadata($attachment_id, $attach_data);
|
||||
|
||||
return $attachment_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filename
|
||||
* @param array $headers
|
||||
*/
|
||||
public function send_file($filename, $headers = array())
|
||||
{
|
||||
if (file_exists($filename)) {
|
||||
|
||||
$defaultHeaders = array(
|
||||
'Content-Type' => self::get_mime($filename, 1),
|
||||
'Cache-Control' => 'max-age=600'
|
||||
);
|
||||
|
||||
$content = file_get_contents($filename);
|
||||
|
||||
// send headers
|
||||
$headers = array_merge($defaultHeaders, $headers);
|
||||
|
||||
foreach ($headers as $key => $val) {
|
||||
if (is_array($val)) {
|
||||
$val = implode(', ', $val);
|
||||
}
|
||||
|
||||
header("{$key}: {$val}");
|
||||
}
|
||||
// send file content
|
||||
echo $content;
|
||||
exit;
|
||||
} else {
|
||||
global $wp_query;
|
||||
$wp_query->set_404();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filename
|
||||
* @param int $mode
|
||||
*
|
||||
* @return mixed|string
|
||||
*/
|
||||
public static function get_mime($filename, $mode = 0)
|
||||
{
|
||||
|
||||
// mode 0 = full check
|
||||
// mode 1 = extension check only
|
||||
|
||||
$mime_types = array(
|
||||
|
||||
'txt' => 'text/plain',
|
||||
'htm' => 'text/html',
|
||||
'html' => 'text/html',
|
||||
'php' => 'text/html',
|
||||
'css' => 'text/css',
|
||||
'js' => 'application/javascript',
|
||||
'json' => 'application/json',
|
||||
'xml' => 'application/xml',
|
||||
'swf' => 'application/x-shockwave-flash',
|
||||
'flv' => 'video/x-flv',
|
||||
|
||||
// images
|
||||
'png' => 'image/png',
|
||||
'jpe' => 'image/jpeg',
|
||||
'jpeg' => 'image/jpeg',
|
||||
'jpg' => 'image/jpeg',
|
||||
'gif' => 'image/gif',
|
||||
'bmp' => 'image/bmp',
|
||||
'ico' => 'image/vnd.microsoft.icon',
|
||||
'tiff' => 'image/tiff',
|
||||
'tif' => 'image/tiff',
|
||||
'svg' => 'image/svg+xml',
|
||||
'svgz' => 'image/svg+xml',
|
||||
'webp' => 'image/webp',
|
||||
|
||||
// archives
|
||||
'zip' => 'application/zip',
|
||||
'rar' => 'application/x-rar-compressed',
|
||||
'exe' => 'application/x-msdownload',
|
||||
'msi' => 'application/x-msdownload',
|
||||
'cab' => 'application/vnd.ms-cab-compressed',
|
||||
|
||||
// audio/video
|
||||
'mp3' => 'audio/mpeg',
|
||||
'qt' => 'video/quicktime',
|
||||
'mov' => 'video/quicktime',
|
||||
|
||||
// adobe
|
||||
'pdf' => 'application/pdf',
|
||||
'psd' => 'image/vnd.adobe.photoshop',
|
||||
'ai' => 'application/postscript',
|
||||
'eps' => 'application/postscript',
|
||||
'ps' => 'application/postscript',
|
||||
|
||||
// ms office
|
||||
'doc' => 'application/msword',
|
||||
'rtf' => 'application/rtf',
|
||||
'xls' => 'application/vnd.ms-excel',
|
||||
'ppt' => 'application/vnd.ms-powerpoint',
|
||||
'docx' => 'application/msword',
|
||||
'xlsx' => 'application/vnd.ms-excel',
|
||||
'pptx' => 'application/vnd.ms-powerpoint',
|
||||
|
||||
|
||||
// open office
|
||||
'odt' => 'application/vnd.oasis.opendocument.text',
|
||||
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
|
||||
);
|
||||
|
||||
$array = explode('.', $filename);
|
||||
$str = end($array);
|
||||
$ext = strtolower($str);
|
||||
|
||||
if (function_exists('mime_content_type') && $mode == 0) {
|
||||
$mimetype = mime_content_type($filename);
|
||||
|
||||
return $mimetype;
|
||||
|
||||
} elseif (function_exists('finfo_open') && $mode == 0) {
|
||||
$finfo = finfo_open(FILEINFO_MIME);
|
||||
$mimetype = finfo_file($finfo, $filename);
|
||||
finfo_close($finfo);
|
||||
|
||||
return $mimetype;
|
||||
} elseif (array_key_exists($ext, $mime_types)) {
|
||||
return $mime_types[$ext];
|
||||
} else {
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user