1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 3.0.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\View\Widget;
16:
17: use Cake\View\Form\ContextInterface;
18:
19: /**
20: * Input widget class for generating a file upload control.
21: *
22: * This class is intended as an internal implementation detail
23: * of Cake\View\Helper\FormHelper and is not intended for direct use.
24: */
25: class FileWidget implements WidgetInterface
26: {
27:
28: /**
29: * Templates
30: *
31: * @var \Cake\View\StringTemplate
32: */
33: protected $_templates;
34:
35: /**
36: * Constructor
37: *
38: * @param \Cake\View\StringTemplate $templates Templates list.
39: */
40: public function __construct($templates)
41: {
42: $this->_templates = $templates;
43: }
44:
45: /**
46: * Render a file upload form widget.
47: *
48: * Data supports the following keys:
49: *
50: * - `name` - Set the input name.
51: * - `escape` - Set to false to disable HTML escaping.
52: *
53: * All other keys will be converted into HTML attributes.
54: * Unlike other input objects the `val` property will be specifically
55: * ignored.
56: *
57: * @param array $data The data to build a file input with.
58: * @param \Cake\View\Form\ContextInterface $context The current form context.
59: * @return string HTML elements.
60: */
61: public function render(array $data, ContextInterface $context)
62: {
63: $data += [
64: 'name' => '',
65: 'escape' => true,
66: 'templateVars' => [],
67: ];
68: unset($data['val']);
69:
70: return $this->_templates->format('file', [
71: 'name' => $data['name'],
72: 'templateVars' => $data['templateVars'],
73: 'attrs' => $this->_templates->formatAttributes(
74: $data,
75: ['name']
76: )
77: ]);
78: }
79:
80: /**
81: * {@inheritDoc}
82: */
83: public function secureFields(array $data)
84: {
85: $fields = [];
86: foreach (['name', 'type', 'tmp_name', 'error', 'size'] as $suffix) {
87: $fields[] = $data['name'] . '[' . $suffix . ']';
88: }
89:
90: return $fields;
91: }
92: }
93: