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