field-file.php
| 1 | <?php |
| 2 | |
| 3 | if(!defined('ABSPATH')) |
| 4 | exit; |
| 5 | |
| 6 | if(!class_exists('acfe_field_file')): |
| 7 | |
| 8 | class acfe_field_file{ |
| 9 | |
| 10 | function __construct(){ |
| 11 | |
| 12 | add_filter('gettext', array($this, 'gettext'), 99, 3); |
| 13 | add_action('acf/include_admin_tools', array($this, 'acf_admin_tools')); |
| 14 | add_filter('acf/validate_field/type=file', array($this, 'validate_field'), 20); |
| 15 | add_action('acf/render_field_settings/type=file', array($this, 'render_field_settings'), 0); |
| 16 | add_filter('acf/prepare_field/type=file', array($this, 'prepare_field')); |
| 17 | |
| 18 | add_filter('acf/prepare_field/name=min_size', array($this, 'prepare_min_max_size')); |
| 19 | add_filter('acf/prepare_field/name=max_size', array($this, 'prepare_min_max_size')); |
| 20 | add_filter('acf/prepare_field/name=library', array($this, 'prepare_library')); |
| 21 | |
| 22 | } |
| 23 | |
| 24 | function prepare_min_max_size($field){ |
| 25 | |
| 26 | if(acf_maybe_get($field['wrapper'], 'data-setting') !== 'file') |
| 27 | return $field; |
| 28 | |
| 29 | if($field['_name'] === 'min_size'){ |
| 30 | |
| 31 | $field['label'] = __('File size', 'acf'); |
| 32 | $field['prepend'] = 'Min size'; |
| 33 | |
| 34 | }elseif($field['_name'] === 'max_size'){ |
| 35 | |
| 36 | $field['prepend'] = 'Max size'; |
| 37 | $field['wrapper']['data-append'] = 'min_size'; |
| 38 | |
| 39 | } |
| 40 | |
| 41 | return $field; |
| 42 | |
| 43 | } |
| 44 | |
| 45 | function prepare_library($field){ |
| 46 | |
| 47 | if(acf_maybe_get($field['wrapper'], 'data-setting') !== 'file') |
| 48 | return $field; |
| 49 | |
| 50 | $field['conditional_logic'] = array( |
| 51 | array( |
| 52 | array( |
| 53 | 'field' => 'uploader', |
| 54 | 'operator' => '==', |
| 55 | 'value' => 'wp', |
| 56 | ) |
| 57 | ) |
| 58 | ); |
| 59 | |
| 60 | return $field; |
| 61 | |
| 62 | } |
| 63 | |
| 64 | function acf_admin_tools(){ |
| 65 | |
| 66 | // Do not remove "No file selected" in the ACF Admin Tool |
| 67 | remove_filter('gettext', array($this, 'gettext'), 99); |
| 68 | |
| 69 | } |
| 70 | |
| 71 | function gettext($translated_text, $text, $domain){ |
| 72 | |
| 73 | if($domain !== 'acf') |
| 74 | return $translated_text; |
| 75 | |
| 76 | if($text === 'No file selected') |
| 77 | return ''; |
| 78 | |
| 79 | return $translated_text; |
| 80 | |
| 81 | } |
| 82 | |
| 83 | function validate_field($field){ |
| 84 | |
| 85 | if(!acf_maybe_get($field, 'acfe_uploader')) |
| 86 | return $field; |
| 87 | |
| 88 | $field['uploader'] = $field['acfe_uploader']; |
| 89 | unset($field['acfe_uploader']); |
| 90 | |
| 91 | return $field; |
| 92 | |
| 93 | } |
| 94 | |
| 95 | function render_field_settings($field){ |
| 96 | |
| 97 | acf_render_field_setting($field, array( |
| 98 | 'label' => __('Uploader type'), |
| 99 | 'name' => 'uploader', |
| 100 | 'key' => 'uploader', |
| 101 | 'instructions' => __('Choose the uploader type'), |
| 102 | 'type' => 'radio', |
| 103 | 'choices' => array( |
| 104 | '' => 'Default', |
| 105 | 'wp' => 'WordPress', |
| 106 | 'basic' => 'Browser', |
| 107 | ), |
| 108 | 'default_value' => '', |
| 109 | 'layout' => 'horizontal', |
| 110 | 'return_format' => 'value', |
| 111 | )); |
| 112 | |
| 113 | } |
| 114 | |
| 115 | function prepare_field($field){ |
| 116 | |
| 117 | // ACFE Form force uploader type |
| 118 | if(acf_is_filter_enabled('acfe/form/uploader')) |
| 119 | acfe_unset($field, 'uploader'); |
| 120 | |
| 121 | if(!acf_maybe_get($field, 'uploader')) |
| 122 | $field['uploader'] = acf_get_setting('uploader'); |
| 123 | |
| 124 | if(!current_user_can('upload_files')) |
| 125 | $field['uploader'] = 'basic'; |
| 126 | |
| 127 | acf_update_setting('uploader', $field['uploader']); |
| 128 | |
| 129 | return $field; |
| 130 | |
| 131 | } |
| 132 | |
| 133 | } |
| 134 | |
| 135 | new acfe_field_file(); |
| 136 | |
| 137 | endif; |