File: /home/globfdxw/public_html/wp-content/plugins/wpforms-pdf/src/Notifications/Fields/Textarea.php
<?php
namespace WPFormsPDF\Notifications\Fields;
use DOMXPath;
/**
* Class Textarea field.
*
* Moves multiline-to-rows transform from Process into field handler.
*
* @since 1.2.0
*/
class Textarea {
/**
* Class constructor.
*
* @since 1.2.0
*
* @return void
*/
public function __construct() {
$this->hooks();
}
/**
* Register hooks.
*
* @since 1.2.0
*
* @return void
*/
private function hooks(): void {
add_filter(
'wpforms_pdf_notifications_fields_field_message_html_textarea',
[ $this, 'field_row_html_value' ],
100,
7
);
}
/**
* Transform textarea field message HTML to multiple rows by line breaks.
*
* @since 1.2.0
*
* @param string|mixed $field_markup Field HTML row markup.
* @param array $field Field data.
* @param array $form_data Form data.
* @param array $template Template data.
*
* @return string
* @noinspection PhpUnusedParameterInspection
*/
public function field_row_html_value( $field_markup, array $field, array $form_data, array $template ): string { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed
$field_markup = (string) $field_markup;
if ( $field_markup === '' ) {
return $field_markup;
}
list( $dom, $xpath ) = Helpers::load_dom( $field_markup );
$rows = $this->query_textarea_rows( $xpath );
if ( ! $rows || $rows->length === 0 ) {
return $field_markup;
}
for ( $i = $rows->length - 1; $i >= 0; $i-- ) {
$tr = $rows->item( $i );
$value_td = Helpers::get_value_cell( $xpath, $tr );
if ( ! $value_td ) {
continue;
}
$has_field_name = Helpers::has_name_cell( $xpath, $tr );
$value_html = Helpers::get_inner_html( $dom, $value_td );
$parts = $this->split_value_into_parts( $value_html );
$field_name_td_html = $has_field_name ? Helpers::get_name_cell_html( $dom, $xpath, $tr ) : '';
Helpers::replace_row_with_parts( $dom, $tr, 'field-textarea', $has_field_name, $field_name_td_html, $parts );
}
return Helpers::save_html( $dom );
}
/**
* Query textarea rows.
*
* @since 1.2.0
*
* @param DOMXPath $xpath XPath instance.
*
* @return DOMNodeList|false
*/
private function query_textarea_rows( DOMXPath $xpath ) {
return $xpath->query( '//tr[contains(@class,"field-textarea")]' );
}
/**
* Normalize BR tags and split into parts.
*
* @since 1.2.0
*
* @param string $value_html HTML of the value cell.
*
* @return array
*/
private function split_value_into_parts( string $value_html ): array {
$value_html = preg_replace( '#<br\s*/?>#i', '<br />', $value_html );
return explode( '<br /><br />', $value_html );
}
}