1<?php 2 3namespace OOUI; 4 5/** 6 * Generic widget for buttons. 7 */ 8class SelectFileInputWidget extends InputWidget { 9 10 /* Static Properties */ 11 12 protected $accept, $placeholder; 13 14 /** 15 * @param array $config Configuration options 16 * - string[]|null $config['accept'] MIME types to accept. null accepts all types. 17 * (default: null) 18 * - bool $config['multiple'] Allow multiple files to be selected. (default: false) 19 * - string $config['placeholder'] Text to display when no file is selected. 20 * - array $config['button'] Config to pass to select file button. 21 * - string $config['icon'] Icon to show next to file info 22 * and show a preview (for performance). 23 */ 24 public function __construct( array $config = [] ) { 25 // Config initialization 26 $config = array_merge( [ 27 'accept' => null, 28 'multiple' => false, 29 'placeholder' => null, 30 'button' => null, 31 'icon' => null, 32 ], $config ); 33 34 // Parent constructor 35 parent::__construct( $config ); 36 37 // Properties 38 $this->accept = $config['accept']; 39 $this->multiple = $config['multiple']; 40 $this->placeholder = $config['placeholder']; 41 $this->button = $config['button']; 42 $this->icon = $config['icon']; 43 44 $this->addClasses( [ 'oo-ui-selectFileWidget' ] ); 45 46 // Initialization 47 $this->input->setAttributes( [ 48 'type' => 'file' 49 ] ); 50 if ( $this->multiple ) { 51 $this->input->setAttributes( [ 52 'multiple' => '' 53 ] ); 54 } 55 if ( $this->accept ) { 56 $this->input->setAttributes( [ 57 'accept' => implode( ',', $this->accept ) 58 ] ); 59 } 60 } 61 62 public function getConfig( &$config ) { 63 if ( $this->accept !== null ) { 64 $config['accept'] = $this->accept; 65 } 66 if ( $this->multiple !== null ) { 67 $config['multiple'] = $this->multiple; 68 } 69 if ( $this->placeholder !== null ) { 70 $config['placeholder'] = $this->placeholder; 71 } 72 if ( $this->button !== null ) { 73 $config['button'] = $this->button; 74 } 75 if ( $this->icon !== null ) { 76 $config['icon'] = $this->icon; 77 } 78 return parent::getConfig( $config ); 79 } 80} 81