<?php
/**
 * 媒体配置文件
 * 管理文件上传、SVG支持、媒体库显示等功能
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

/**
 * 允许上传SVG图片和PDF文档
 * 扩展WordPress默认允许的文件类型
 * @param array $mimes 当前允许的MIME类型数组
 * @return array 扩展后的MIME类型数组
 */
function allow_additional_file_types($mimes) {
    // 确保 $mimes 是数组
    if (!is_array($mimes)) {
        return $mimes;
    }
    
    $mimes['svg'] = 'image/svg+xml';
    $mimes['pdf'] = 'application/pdf';
    return $mimes;
}
add_filter('upload_mimes', 'allow_additional_file_types');

/**
 * 修复SVG图片在媒体库中的显示
 * 添加CSS样式确保SVG图片正确显示
 */
function fix_svg_display() {
    echo '<style>
        .attachment-266x266, .thumbnail img {
            width: 100% !important;
            height: auto !important;
        }
    </style>';
}
add_action('admin_head', 'fix_svg_display');

/**
 * 为SVG添加安全检查
 * 检查SVG文件是否包含恶意脚本代码
 * @param array $file 上传的文件信息数组
 * @return array 处理后的文件信息数组
 */
function check_svg_file($file) {
    if ($file['type'] === 'image/svg+xml') {
        $svg_content = file_get_contents($file['tmp_name']);
        
        // 检查是否包含危险的脚本标签
        if (strpos($svg_content, '<script') !== false || 
            strpos($svg_content, 'javascript:') !== false ||
            strpos($svg_content, 'onload=') !== false ||
            strpos($svg_content, 'onerror=') !== false) {
            $file['error'] = '出于安全考虑，不允许上传包含脚本的SVG文件。';
        }
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'check_svg_file');

/**
 * 在媒体库中正确显示SVG缩略图
 * 为SVG文件生成适当的缩略图信息
 * @param array $response 附件响应数据
 * @param object $attachment 附件对象
 * @param array $meta 附件元数据
 * @return array 处理后的响应数据
 */
function svg_media_thumbnails($response, $attachment, $meta) {
    // 确保 $response 是数组
    if (!is_array($response)) {
        return $response;
    }
    
    if (isset($response['type']) && isset($response['subtype']) && 
        $response['type'] === 'image' && $response['subtype'] === 'svg+xml') {
        $response['image'] = array(
            'src' => $response['url'],
            'width' => 150,
            'height' => 150,
        );
        $response['thumb'] = array(
            'src' => $response['url'],
            'width' => 150,
            'height' => 150,
        );
        $response['sizes'] = array(
            'full' => array(
                'url' => $response['url'],
                'width' => 150,
                'height' => 150,
                'orientation' => 'landscape'
            )
        );
    }
    return $response;
}
add_filter('wp_prepare_attachment_for_js', 'svg_media_thumbnails', 10, 3);

?>