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: * StringTemplate instance.
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 text widget or other simple widget like email/tel/number.
47: *
48: * This method accepts a number of keys:
49: *
50: * - `name` The name attribute.
51: * - `val` The value attribute.
52: * - `escape` Set to false to disable escaping on all attributes.
53: *
54: * Any other keys provided in $data will be converted into HTML attributes.
55: *
56: * @param array $data The data to build an input with.
57: * @param \Cake\View\Form\ContextInterface $context The current form context.
58: * @return string
59: */
60: public function render(array $data, ContextInterface $context)
61: {
62: $data += [
63: 'name' => '',
64: 'val' => null,
65: 'type' => 'text',
66: 'escape' => true,
67: 'templateVars' => []
68: ];
69: $data['value'] = $data['val'];
70: unset($data['val']);
71:
72: return $this->_templates->format('input', [
73: 'name' => $data['name'],
74: 'type' => $data['type'],
75: 'templateVars' => $data['templateVars'],
76: 'attrs' => $this->_templates->formatAttributes(
77: $data,
78: ['name', 'type']
79: ),
80: ]);
81: }
82:
83: /**
84: * {@inheritDoc}
85: */
86: public function secureFields(array $data)
87: {
88: if (!isset($data['name']) || $data['name'] === '') {
89: return [];
90: }
91:
92: return [$data['name']];
93: }
94: }
95: