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: * Templates
29: *
30: * @var \Cake\View\StringTemplate
31: */
32: protected $_templates;
33:
34: /**
35: * Constructor
36: *
37: * @param \Cake\View\StringTemplate $templates Templates list.
38: */
39: public function __construct($templates)
40: {
41: $this->_templates = $templates;
42: }
43:
44: /**
45: * Render a file upload form widget.
46: *
47: * Data supports the following keys:
48: *
49: * - `name` - Set the input name.
50: * - `escape` - Set to false to disable HTML escaping.
51: *
52: * All other keys will be converted into HTML attributes.
53: * Unlike other input objects the `val` property will be specifically
54: * ignored.
55: *
56: * @param array $data The data to build a file input with.
57: * @param \Cake\View\Form\ContextInterface $context The current form context.
58: * @return string HTML elements.
59: */
60: public function render(array $data, ContextInterface $context)
61: {
62: $data += [
63: 'name' => '',
64: 'escape' => true,
65: 'templateVars' => [],
66: ];
67: unset($data['val']);
68:
69: return $this->_templates->format('file', [
70: 'name' => $data['name'],
71: 'templateVars' => $data['templateVars'],
72: 'attrs' => $this->_templates->formatAttributes(
73: $data,
74: ['name']
75: )
76: ]);
77: }
78:
79: /**
80: * {@inheritDoc}
81: */
82: public function secureFields(array $data)
83: {
84: $fields = [];
85: foreach (['name', 'type', 'tmp_name', 'error', 'size'] as $suffix) {
86: $fields[] = $data['name'] . '[' . $suffix . ']';
87: }
88:
89: return $fields;
90: }
91: }
92: