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: * Basic input class.
21: *
22: * This input class can be used to render basic simple
23: * input elements like hidden, text, email, tel and other
24: * types.
25: */
26: class BasicWidget implements WidgetInterface
27: {
28:
29: /**
30: * StringTemplate instance.
31: *
32: * @var \Cake\View\StringTemplate
33: */
34: protected $_templates;
35:
36: /**
37: * Constructor.
38: *
39: * @param \Cake\View\StringTemplate $templates Templates list.
40: */
41: public function __construct($templates)
42: {
43: $this->_templates = $templates;
44: }
45:
46: /**
47: * Render a text widget or other simple widget like email/tel/number.
48: *
49: * This method accepts a number of keys:
50: *
51: * - `name` The name attribute.
52: * - `val` The value attribute.
53: * - `escape` Set to false to disable escaping on all attributes.
54: *
55: * Any other keys provided in $data will be converted into HTML attributes.
56: *
57: * @param array $data The data to build an input with.
58: * @param \Cake\View\Form\ContextInterface $context The current form context.
59: * @return string
60: */
61: public function render(array $data, ContextInterface $context)
62: {
63: $data += [
64: 'name' => '',
65: 'val' => null,
66: 'type' => 'text',
67: 'escape' => true,
68: 'templateVars' => []
69: ];
70: $data['value'] = $data['val'];
71: unset($data['val']);
72:
73: return $this->_templates->format('input', [
74: 'name' => $data['name'],
75: 'type' => $data['type'],
76: 'templateVars' => $data['templateVars'],
77: 'attrs' => $this->_templates->formatAttributes(
78: $data,
79: ['name', 'type']
80: ),
81: ]);
82: }
83:
84: /**
85: * {@inheritDoc}
86: */
87: public function secureFields(array $data)
88: {
89: if (!isset($data['name']) || $data['name'] === '') {
90: return [];
91: }
92:
93: return [$data['name']];
94: }
95: }
96: