/var/www/html_us/wp-content/plugins/contact-form-7/includes/swv/rules/file.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php

class WPCF7_SWV_FileRule extends WPCF7_SWV_Rule {

    const 
rule_name 'file';

    public function 
matches$context ) {
        if ( 
false === parent::matches$context ) ) {
            return 
false;
        }

        if ( empty( 
$context['file'] ) ) {
            return 
false;
        }

        return 
true;
    }

    public function 
validate$context ) {
        
$field $this->get_property'field' );
        
$input = isset( $_FILES[$field]['name'] ) ? $_FILES[$field]['name'] : '';
        
$input wpcf7_array_flatten$input );
        
$input wpcf7_exclude_blank$input );

        
$acceptable_filetypes = array();

        foreach ( (array) 
$this->get_property'accept' ) as $accept ) {
            if ( 
false === strpos$accept'/' ) ) {
                
$acceptable_filetypes[] = strtolower$accept );
            } else {
                foreach ( 
wpcf7_convert_mime_to_ext$accept ) as $ext ) {
                    
$acceptable_filetypes[] = sprintf(
                        
'.%s',
                        
strtolowertrim$ext' .' ) )
                    );
                }
            }
        }

        
$acceptable_filetypes array_unique$acceptable_filetypes );

        foreach ( 
$input as $i ) {
            
$last_period_pos strrpos$i'.' );

            if ( 
false === $last_period_pos ) { // no period
                
return new WP_Error'wpcf7_invalid_file',
                    
$this->get_property'error' )
                );
            }

            
$suffix strtolowersubstr$i$last_period_pos ) );

            if ( ! 
in_array$suffix$acceptable_filetypestrue ) ) {
                return new 
WP_Error'wpcf7_invalid_file',
                    
$this->get_property'error' )
                );
            }
        }

        return 
true;
    }

    public function 
to_array() {
        return array( 
'rule' => self::rule_name ) + (array) $this->properties;
    }
}