65 lines
2.1 KiB
PHP
65 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace BitApps\FM\Providers;
|
|
|
|
\defined('ABSPATH') or exit();
|
|
class MediaSynchronizer
|
|
{
|
|
public $wp_upload_directory;
|
|
|
|
function __construct()
|
|
{
|
|
require_once ABSPATH . 'wp-admin/includes/image.php';
|
|
|
|
$this->wp_upload_directory = wp_upload_dir();
|
|
$this->wp_upload_directory = $this->wp_upload_directory['path'];
|
|
}
|
|
|
|
// Triggers when a file is uploaded and initiates the uploading process for single or batch files.
|
|
public function onFileUpload($cmd, &$result, $args, $elfinder, $volume)
|
|
{
|
|
$targetPath = $volume->getPath($args['target']);
|
|
|
|
if (strpos($targetPath, $this->wp_upload_directory) !== false) {
|
|
$images = [];
|
|
for ($file = 0; $file < \count($args['FILES']['upload']['name']); $file++) {
|
|
$images[] = [
|
|
'name' => $args['FILES']['upload']['name'][$file],
|
|
'type' => wp_check_filetype($args['FILES']['upload']['name'][$file], null),
|
|
'path' => trailingslashit($targetPath) . $args['FILES']['upload']['name'][$file],
|
|
'url' => $this->abs_path_to_url(
|
|
trailingslashit($targetPath)
|
|
. $args['FILES']['upload']['name'][$file]
|
|
),
|
|
];
|
|
}
|
|
|
|
$this->add_media($images);
|
|
}
|
|
}
|
|
|
|
private function add_media($images)
|
|
{
|
|
foreach ($images as $image) {
|
|
$attachment = [
|
|
'post_mime_type' => $image['type']['type'],
|
|
'post_title' => sanitize_file_name($image['name']),
|
|
];
|
|
$attachmentId = wp_insert_attachment($attachment, $image['path']);
|
|
$attachData = wp_generate_attachment_metadata($attachmentId, $image['path']);
|
|
wp_update_attachment_metadata($attachmentId, $attachData);
|
|
}
|
|
}
|
|
|
|
private function abs_path_to_url($path = '')
|
|
{
|
|
$url = str_replace(
|
|
wp_normalize_path(untrailingslashit(ABSPATH)),
|
|
site_url(),
|
|
wp_normalize_path($path)
|
|
);
|
|
|
|
return esc_url_raw($url);
|
|
}
|
|
}
|