PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.18
UiCore Elements – Free widgets and templates for Elementor v1.3.18
1.3.18 1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.2.0 1.2.1 1.2.2 1.2.3 All 42 releases
← All changes | includes/widgets/contact-form.php +13 -236 1.3.16 → 1.3.18 View file →
@@ -164,9 +164,9 @@
164 164 }
165 165
166 166 $value = empty($item['field_value']) ? '' : $item['field_value'];
167 167
168 - return '<input ' . $this->get_render_attribute_string('honeypot' . $item_index) . ' tabindex="-1">' . $value . '</input>';
168 + return '<input ' . $this->get_render_attribute_string('honeypot' . $item_index) . ' tabindex="-1">' . esc_html($value) . '</input>';
169 169 }
170 170 function build_textarea_field($item, $item_index)
171 171 {
172 172 $this->add_render_attribute('textarea' . $item_index, [
@@ -188,9 +188,9 @@
188 188 }
189 189
190 190 $value = empty($item['field_value']) ? '' : $item['field_value'];
191 191
192 - return '<textarea ' . $this->get_render_attribute_string('textarea' . $item_index) . '>' . $value . '</textarea>';
192 + return '<textarea ' . $this->get_render_attribute_string('textarea' . $item_index) . '>' . esc_textarea($value) . '</textarea>';
193 193 }
194 194 function build_select_field($item, $i)
195 195 {
196 196 $this->add_render_attribute(
@@ -268,9 +268,9 @@
268 268 {
269 269 $options = preg_split("/\\r\\n|\\r|\\n/", $item['field_options']);
270 270 $html = '';
271 271 if ($options) {
272 - $html .= '<div class="ui-e-field-subgroup ' . esc_attr($item['css_classes']) . ' ' . $item['inline_list'] . '">';
272 + $html .= '<div class="ui-e-field-subgroup ' . esc_attr($item['css_classes']) . ' ' . esc_attr($item['inline_list']) . '">';
273 273 foreach ($options as $key => $option) {
274 274 $element_id = $item['custom_id'] . $key;
275 275 $html_id = $this->get_attribute_id($item) . '-' . $key;
276 276 $option_label = $option;
@@ -300,9 +300,13 @@
300 300 if ($item['required'] && 'radio' === $type) {
301 301 $this->add_required_attribute($element_id);
302 302 }
303 303
304 - $html .= '<span class="ui-e-field-option"><input ' . $this->get_render_attribute_string($element_id) . '> <label for="' . $html_id . '">' . $option_label . '</label></span>';
304 + $html .= '<span class="ui-e-field-option">';
305 + $html .= '<input ' . $this->get_render_attribute_string($element_id) . '>';
306 + $html .= '<label for="' . $html_id . '">';
307 + $html .= esc_html($option_label);
308 + $html .= '</label></span>';
305 309 }
306 310 $html .= '</div>';
307 311 }
308 312
@@ -314,9 +318,9 @@
314 318 $this->add_render_attribute('input' . $item_index, 'class', 'ui-e-acceptance-field');
315 319 $this->add_render_attribute('input' . $item_index, 'type', 'checkbox', true);
316 320
317 321 if (! empty($item['acceptance_text'])) {
318 - $text = '<label for="' . $this->get_attribute_id($item) . '">' . $item['acceptance_text'] . '</label>';
322 + $text = '<label for="' . $this->get_attribute_id($item) . '">' . Helper::esc_string($item['acceptance_text']) . '</label>';
319 323 }
320 324
321 325 if (! empty($item['checked_by_default'])) {
322 326 $this->add_render_attribute('input' . $item_index, 'checked', 'checked');
@@ -835,9 +839,9 @@
835 839 'placeholder' => esc_html__('Message', 'uicore-elements'),
836 840 'width' => '100',
837 841 ],
838 842 ],
839 - 'title_field' => '{{{ field_label }}}',
843 + 'title_field' => '{{ field_label }}',
840 844 ]
841 845 );
842 846 $this->add_control(
843 847 'show_labels',
@@ -1279,9 +1283,9 @@
1279 1283 if ($print_label && $item['field_label'] && $item['field_type'] !== 'recaptcha' && $item['field_type'] !== 'recaptcha_v3') {
1280 1284 ?>
1281 1285 <label <?php $this->print_render_attribute_string('label' . $item_index); ?>>
1282 1286 <?php // PHPCS - the variable $item['field_label'] is safe.
1283 - echo $item['field_label']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1287 + echo Helper::esc_string($item['field_label']); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1284 1288 ?>
1285 1289 </label>
1286 1290 <?php
1287 1291 }
@@ -1288,9 +1292,9 @@
1288 1292
1289 1293 // Print field
1290 1294 switch ($item['field_type']):
1291 1295 case 'html':
1292 - echo do_shortcode($item['field_html']);
1296 + echo wp_kses_post(do_shortcode($item['field_html']));
1293 1297 break;
1294 1298
1295 1299 case 'textarea':
1296 1300 // PHPCS - the method build_textarea_field is safe.
@@ -1303,9 +1307,9 @@
1303 1307 break;
1304 1308
1305 1309 case 'acceptance':
1306 1310 // PHPCS - the method build_select_field is safe.
1307 - echo $this->build_acceptance_field($item, $item_index); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1311 + $this->build_acceptance_field($item, $item_index); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1308 1312 break;
1309 1313
1310 1314 case 'radio':
1311 1315 case 'checkbox':
@@ -1391,233 +1395,6 @@
1391 1395 ]); ?>;
1392 1396 </script>
1393 1397 <?php
1394 1398 }
1395 -
1396 - /*
1397 - protected function content_template() {
1398 - ?>
1399 - <#
1400 - view.addRenderAttribute(
1401 - 'form',
1402 - {
1403 - 'id': settings.form_id,
1404 - 'name': settings.form_name,
1405 - }
1406 - );
1407 - if ( 'no' === settings.form_validation ) {
1408 - view.addRenderAttribute( 'form', 'novalidate' );
1409 - }
1410 - #>
1411 - <form class="ui-e-form" {{{ view.getRenderAttributeString( 'form' ) }}}>
1412 - <div class="ui-e-fields-wrp">
1413 - <#
1414 - for ( var i in settings.form_fields ) {
1415 - var item = settings.form_fields[ i ];
1416 - item.field_type = _.escape( item.field_type );
1417 - item.field_value = _.escape( item.field_value );
1418 -
1419 - var options = item.field_options ? item.field_options.split( '\n' ) : [],
1420 - itemClasses = _.escape( item.css_classes ),
1421 - labelVisibility = '',
1422 - placeholder = '',
1423 - required = '',
1424 - checked_by_default = '',
1425 - inputField = '',
1426 - multiple = '',
1427 - fieldGroupClasses = 'ui-e-field-group elementor-column ui-e-field-type-' + item.field_type,
1428 - printLabel = settings.show_labels && ! [ 'hidden', 'html', 'recaptcha', 'recaptcha_v3' ].includes( item.field_type );
1429 -
1430 - fieldGroupClasses += ' elementor-col-' + ( ( '' !== item.width ) ? item.width : '100' );
1431 -
1432 - if ( item.width_tablet ) {
1433 - fieldGroupClasses += ' elementor-md-' + item.width_tablet;
1434 - }
1435 -
1436 - if ( item.width_mobile ) {
1437 - fieldGroupClasses += ' elementor-sm-' + item.width_mobile;
1438 - }
1439 -
1440 - if ( item.required ) {
1441 - required = 'required';
1442 - fieldGroupClasses += ' ui-e-field-required';
1443 -
1444 - if ( settings.mark_required ) {
1445 - fieldGroupClasses += ' ui-e-required';
1446 - }
1447 - }
1448 -
1449 - if ( item.placeholder ) {
1450 - placeholder = 'placeholder="' + _.escape( item.placeholder ) + '"';
1451 - }
1452 -
1453 - if ( item.allow_multiple ) {
1454 - multiple = ' multiple';
1455 - fieldGroupClasses += ' ui-e-field-type-' + item.field_type + '-multiple';
1456 - }
1457 -
1458 - switch ( item.field_type ) {
1459 - case 'html':
1460 - inputField = item.field_html;
1461 - break;
1462 -
1463 - case 'textarea':
1464 - inputField = '<textarea class="ui-e-field ui-e-field-textual elementor-size-' + settings.input_size + ' ' + itemClasses + '" name="form_field_' + i + '" id="form_field_' + i + '" rows="' + item.rows + '" ' + required + ' ' + placeholder + '>' + item.field_value + '</textarea>';
1465 - break;
1466 -
1467 - case 'select':
1468 - if ( options ) {
1469 - var size = '';
1470 - if ( item.allow_multiple && item.select_size ) {
1471 - size = ' size="' + item.select_size + '"';
1472 - }
1473 - inputField = '<div class="ui-e-field ui-e-field-select ui-e-field-subgroup' + itemClasses + '">';
1474 - inputField += '<select class="ui-e-field-textual" name="form_field_' + i + '" id="form_field_' + i + '" ' + required + multiple + size + ' >';
1475 - for ( var x in options ) {
1476 - var option_value = options[ x ];
1477 - var option_label = options[ x ];
1478 - var option_id = 'form_field_option' + i + x;
1479 -
1480 - if ( options[ x ].indexOf( '|' ) > -1 ) {
1481 - var label_value = options[ x ].split( '|' );
1482 - option_label = label_value[0];
1483 - option_value = label_value[1];
1484 - }
1485 -
1486 - view.addRenderAttribute( option_id, 'value', option_value );
1487 - if ( item.field_value.split( ',' ) .indexOf( option_value ) ) {
1488 - view.addRenderAttribute( option_id, 'selected', 'selected' );
1489 - }
1490 - inputField += '<option ' + view.getRenderAttributeString( option_id ) + '>' + option_label + '</option>';
1491 - }
1492 - inputField += '</select></div>';
1493 - }
1494 - break;
1495 -
1496 - case 'radio':
1497 - case 'checkbox':
1498 - if ( options ) {
1499 - var multiple = '';
1500 -
1501 - if ( 'checkbox' === item.field_type && options.length > 1 ) {
1502 - multiple = '[]';
1503 - }
1504 -
1505 - inputField = '<div class="ui-e-field-subgroup ' + itemClasses + ' ' + _.escape( item.inline_list ) + '">';
1506 -
1507 - for ( var x in options ) {
1508 - var option_value = options[ x ];
1509 - var option_label = options[ x ];
1510 - var option_id = 'form_field_' + item.field_type + i + x;
1511 - if ( options[x].indexOf( '|' ) > -1 ) {
1512 - var label_value = options[x].split( '|' );
1513 - option_label = label_value[0];
1514 - option_value = label_value[1];
1515 - }
1516 -
1517 - view.addRenderAttribute( option_id, {
1518 - value: option_value,
1519 - type: item.field_type,
1520 - id: 'form_field_' + i + '-' + x,
1521 - name: 'form_field_' + i + multiple
1522 - } );
1523 -
1524 - if ( option_value === item.field_value ) {
1525 - view.addRenderAttribute( option_id, 'checked', 'checked' );
1526 - }
1527 -
1528 - inputField += '<span class="ui-e-field-option"><input ' + view.getRenderAttributeString( option_id ) + ' ' + required + '> ';
1529 - inputField += '<label for="form_field_' + i + '-' + x + '">' + option_label + '</label></span>';
1530 -
1531 - }
1532 -
1533 - inputField += '</div>';
1534 - }
1535 - break;
1536 -
1537 - case 'acceptance' :
1538 - var checked = '';
1539 - if(item.checked_by_default == 'yes') {
1540 - checked = ' checked';
1541 - }
1542 - inputField += '<div class="ui-e-field-subgroup">';
1543 - inputField += '<input type="checkbox" class="ui-e-field ui-e-acceptance-field" name="form_field_' + i + '" id="form_field_' + i + '" ' + required + checked + '>';
1544 - inputField += '<label for="form_field_' + i + '">' + item.acceptance_text + '</label>';
1545 - inputField += '</div>';
1546 - break;
1547 -
1548 - case 'recaptcha' :
1549 - case 'recaptcha_v3' :
1550 - inputField = '<input type="hidden" name="recaptcha"/> <div id="ui-e-recaptcha"></div>';
1551 - break;
1552 -
1553 - default:
1554 - itemClasses = 'ui-e-field-textual ' + itemClasses;
1555 - inputField = '<input size="1" type="' + item.field_type + '" value="' + item.field_value + '" class="ui-e-field elementor-size-' + settings.input_size + ' ' + itemClasses + '" name="form_field_' + i + '" id="form_field_' + i + '" ' + required + ' ' + placeholder + ' >';
1556 - break;
1557 - }
1558 -
1559 - if ( inputField ) {
1560 - #>
1561 - <div class="{{ fieldGroupClasses }}">
1562 -
1563 - <# if ( printLabel && item.field_label ) { #>
1564 - <label class="ui-e-field-label" for="form_field_{{ i }}" {{{ labelVisibility }}}>{{{ item.field_label }}}</label>
1565 - <# } #>
1566 -
1567 - {{{ inputField }}}
1568 - </div>
1569 - <#
1570 - }
1571 - }
1572 -
1573 -
1574 - var buttonClasses = 'ui-e-field-group elementor-column ui-e-field-type-submit e-form__buttons';
1575 -
1576 - buttonClasses += ' elementor-col-' + ( ( '' !== settings.button_width ) ? settings.button_width : '100' );
1577 -
1578 - if ( settings.button_width_tablet ) {
1579 - buttonClasses += ' elementor-md-' + settings.button_width_tablet;
1580 - }
1581 -
1582 - if ( settings.button_width_mobile ) {
1583 - buttonClasses += ' elementor-sm-' + settings.button_width_mobile;
1584 - }
1585 -
1586 - var iconHTML = elementor.helpers.renderIcon( view, settings.selected_button_icon, { 'aria-hidden': true }, 'i' , 'object' )
1587 - #>
1588 -
1589 - <div class="{{ buttonClasses }}">
1590 - <button id="{{ settings.button_css_id }}" type="submit" class="elementor-button elementor-animation-{{ settings.button_hover_animation }}">
1591 - <span>
1592 - <# if ( settings.button_icon || settings.selected_button_icon ) { #>
1593 - <span class="ui-e-icon ui-e-align-{{ settings.button_icon_align }}">
1594 - <# if ( iconHTML && iconHTML.rendered && ( ! settings.button_icon ) ) { #>
1595 - {{{ iconHTML.value }}}
1596 - <# } else { #>
1597 - <i class="{{ settings.button_icon }}" aria-hidden="true"></i>
1598 - <# } #>
1599 - <span class="elementor-screen-only"><?php echo esc_html__( 'Submit', 'uicore-elements' ); ?></span>
1600 - </span>
1601 - <# } #>
1602 -
1603 - <# if ( settings.button_text ) { #>
1604 - <span class="ui-e-text">{{{ settings.button_text }}}</span>
1605 - <# } #>
1606 - </span>
1607 - </button>
1608 - </div>
1609 - </div>
1610 - <div class="ui-e-message elementor-hidden">
1611 - <#
1612 - const success = settings.success_message;
1613 - const error = settings.error_message;
1614 - #>
1615 - <span class="success">{{{ success }}}</span> <br>
1616 - <span class="error">{{{ error }}}</span>
1617 - </div>
1618 - </form>
1619 - <?php
1620 - }
1621 - */
1622 1399 }
1623 1400 \Elementor\Plugin::instance()->widgets_manager->register(new ContactForm());