File "file.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/contact-form-7/includes/file.php
File size: 7.58 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

function wpcf7_unship_uploaded_file($file, $args = '')
{
    $args = wp_parse_args($args, array('required' => false, 'filetypes' => '', 'limit' => MB_IN_BYTES));
    foreach (array('name', 'size', 'tmp_name', 'error') as $key) {
        if (!isset($file[$key])) {
            $file[$key] = array();
        }
    }
    $names = wpcf7_array_flatten($file['name']);
    $sizes = wpcf7_array_flatten($file['size']);
    $tmp_names = wpcf7_array_flatten($file['tmp_name']);
    $errors = wpcf7_array_flatten($file['error']);
    foreach ($errors as $error) {
        if (!empty($error) and UPLOAD_ERR_NO_FILE !== $error) {
            return new WP_Error('wpcf7_upload_failed_php_error', wpcf7_get_message('upload_failed_php_error'));
        }
    }
    if ($args['required'] and !array_filter($tmp_names)) {
        return new WP_Error('wpcf7_invalid_required', wpcf7_get_message('invalid_required'));
    }
    $file_type_pattern = wpcf7_acceptable_filetypes($args['filetypes'], 'regex');
    $file_type_pattern = '/\\.(' . $file_type_pattern . ')$/i';
    foreach ($names as $name) {
        if (!empty($name) and !preg_match($file_type_pattern, $name)) {
            return new WP_Error('wpcf7_upload_file_type_invalid', wpcf7_get_message('upload_file_type_invalid'));
        }
    }
    $total_size = array_sum($sizes);
    if ($args['limit'] < $total_size) {
        return new WP_Error('wpcf7_upload_file_too_large', wpcf7_get_message('upload_file_too_large'));
    }
    $uploads_dir = wpcf7_upload_tmp_dir();
    $uploads_dir = wpcf7_maybe_add_random_dir($uploads_dir);
    $uploaded_files = array();
    foreach ($names as $key => $name) {
        $tmp_name = $tmp_names[$key];
        if (empty($tmp_name) or !is_uploaded_file($tmp_name)) {
            continue;
        }
        $filename = $name;
        $filename = wpcf7_canonicalize($filename, array('strto' => 'as-is'));
        $filename = wpcf7_antiscript_file_name($filename);
        $filename = apply_filters('wpcf7_upload_file_name', $filename, $name, $args);
        $filename = wp_unique_filename($uploads_dir, $filename);
        $new_file = path_join($uploads_dir, $filename);
        if (false === @move_uploaded_file($tmp_name, $new_file)) {
            return new WP_Error('wpcf7_upload_failed', wpcf7_get_message('upload_failed'));
        }
        chmod($new_file, 0400);
        $uploaded_files[] = $new_file;
    }
    return $uploaded_files;
}
add_filter('wpcf7_messages', 'wpcf7_file_messages', 10, 1);
function wpcf7_file_messages($messages)
{
    return array_merge($messages, array('upload_failed' => array('description' => __("Uploading a file fails for any reason", 'contact-form-7'), 'default' => __("There was an unknown error uploading the file.", 'contact-form-7')), 'upload_file_type_invalid' => array('description' => __("Uploaded file is not allowed for file type", 'contact-form-7'), 'default' => __("You are not allowed to upload files of this type.", 'contact-form-7')), 'upload_file_too_large' => array('description' => __("Uploaded file is too large", 'contact-form-7'), 'default' => __("The file is too big.", 'contact-form-7')), 'upload_failed_php_error' => array('description' => __("Uploading a file fails for PHP error", 'contact-form-7'), 'default' => __("There was an error uploading the file.", 'contact-form-7'))));
}
add_filter('wpcf7_form_enctype', 'wpcf7_file_form_enctype_filter', 10, 1);
function wpcf7_file_form_enctype_filter($enctype)
{
    $multipart = (bool) wpcf7_scan_form_tags(array('feature' => 'file-uploading'));
    if ($multipart) {
        $enctype = 'multipart/form-data';
    }
    return $enctype;
}
function wpcf7_acceptable_filetypes($types = 'default', $format = 'regex')
{
    if ('default' === $types or empty($types)) {
        $types = array('jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'odt', 'avi', 'ogg', 'm4a', 'mov', 'mp3', 'mp4', 'mpg', 'wav', 'wmv');
    } else {
        $types_tmp = (array) $types;
        $types = array();
        foreach ($types_tmp as $val) {
            if (is_string($val)) {
                $val = preg_split('/[\\s|,]+/', $val);
            }
            $types = array_merge($types, (array) $val);
        }
    }
    $types = array_unique(array_filter($types));
    $output = '';
    foreach ($types as $type) {
        $type = trim($type, ' ,.|');
        $type = str_replace(array('.', '+', '*', '?'), array('\\.', '\\+', '\\*', '\\?'), $type);
        if ('' === $type) {
            continue;
        }
        if ('attr' === $format or 'attribute' === $format) {
            $output .= sprintf('.%s', $type);
            $output .= ',';
        } else {
            $output .= $type;
            $output .= '|';
        }
    }
    return trim($output, ' ,|');
}
add_action('wpcf7_init', 'wpcf7_init_uploads', 10, 0);
function wpcf7_init_uploads()
{
    $dir = wpcf7_upload_tmp_dir();
    if (is_dir($dir) and is_writable($dir)) {
        $htaccess_file = path_join($dir, '.htaccess');
        if (!file_exists($htaccess_file) and $handle = @fopen($htaccess_file, 'w')) {
            fwrite($handle, "Deny from all\n");
            fclose($handle);
        }
    }
}
function wpcf7_maybe_add_random_dir($dir)
{
    do {
        $rand_max = mt_getrandmax();
        $rand = zeroise(mt_rand(0, $rand_max), strlen($rand_max));
        $dir_new = path_join($dir, $rand);
    } while (file_exists($dir_new));
    if (wp_mkdir_p($dir_new)) {
        return $dir_new;
    }
    return $dir;
}
function wpcf7_upload_tmp_dir()
{
    if (defined('WPCF7_UPLOADS_TMP_DIR')) {
        $dir = path_join(WP_CONTENT_DIR, WPCF7_UPLOADS_TMP_DIR);
        wp_mkdir_p($dir);
        if (wpcf7_is_file_path_in_content_dir($dir)) {
            return $dir;
        }
    }
    $dir = path_join(wpcf7_upload_dir('dir'), 'wpcf7_uploads');
    wp_mkdir_p($dir);
    return $dir;
}
add_action('template_redirect', 'wpcf7_cleanup_upload_files', 20, 0);
function wpcf7_cleanup_upload_files($seconds = 60, $max = 100)
{
    if (is_admin() or 'GET' != $_SERVER['REQUEST_METHOD'] or is_robots() or is_feed() or is_trackback()) {
        return;
    }
    $dir = trailingslashit(wpcf7_upload_tmp_dir());
    if (!is_dir($dir) or !is_readable($dir) or !wp_is_writable($dir)) {
        return;
    }
    $seconds = absint($seconds);
    $max = absint($max);
    $count = 0;
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if ('.' == $file or '..' == $file or '.htaccess' == $file) {
                continue;
            }
            $mtime = @filemtime(path_join($dir, $file));
            if ($mtime and time() < $mtime + $seconds) {
                continue;
            }
            wpcf7_rmdir_p(path_join($dir, $file));
            $count += 1;
            if ($max <= $count) {
                break;
            }
        }
        closedir($handle);
    }
}
add_action('wpcf7_admin_warnings', 'wpcf7_file_display_warning_message', 10, 3);
function wpcf7_file_display_warning_message($page, $action, $object)
{
    if ($object instanceof WPCF7_ContactForm) {
        $contact_form = $object;
    } else {
        return;
    }
    $has_tags = (bool) $contact_form->scan_form_tags(array('feature' => 'file-uploading'));
    if (!$has_tags) {
        return;
    }
    $uploads_dir = wpcf7_upload_tmp_dir();
    if (!is_dir($uploads_dir) or !wp_is_writable($uploads_dir)) {
        $message = sprintf(__('This contact form has file uploading fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7'), $uploads_dir);
        echo sprintf('<div class="notice notice-warning"><p>%s</p></div>', esc_html($message));
    }
}