Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../public_h.../wp-conte.../plugins/wpforms-.../src/Emails
File: Notifications.php
[500] Fix | Delete
$field_name = $field['name'] ?? '';
[501] Fix | Delete
$field_val = empty( $field['value'] ) && ! is_numeric( $field['value'] ) ? esc_html__( '(empty)', 'wpforms-lite' ) : $field['value'];
[502] Fix | Delete
[503] Fix | Delete
// Add quantity for the field.
[504] Fix | Delete
if ( wpforms_payment_has_quantity( $field, $this->form_data ) ) {
[505] Fix | Delete
$field_val = wpforms_payment_format_quantity( $field );
[506] Fix | Delete
}
[507] Fix | Delete
[508] Fix | Delete
// Set a default field name if empty.
[509] Fix | Delete
if ( empty( $field_name ) && $field_name !== null ) {
[510] Fix | Delete
$field_name = $this->get_default_field_name( $field['id'] );
[511] Fix | Delete
}
[512] Fix | Delete
[513] Fix | Delete
$message .= '--- ' . $field_name . " ---\r\n\r\n";
[514] Fix | Delete
$field_value = wpforms_decode_string( $field_val ) . "\r\n\r\n";
[515] Fix | Delete
[516] Fix | Delete
/**
[517] Fix | Delete
* Filter the field value before it is added to the email message.
[518] Fix | Delete
*
[519] Fix | Delete
* @since 1.8.5
[520] Fix | Delete
* @deprecated 1.8.7
[521] Fix | Delete
*
[522] Fix | Delete
* @param string $field_value Field value.
[523] Fix | Delete
* @param array $field Field data.
[524] Fix | Delete
* @param array $form_data Form data.
[525] Fix | Delete
*/
[526] Fix | Delete
$field_value = apply_filters_deprecated( // phpcs:disable WPForms.Comments.ParamTagHooks.InvalidParamTagsQuantity
[527] Fix | Delete
'wpforms_emails_notifications_plaintext_field_value',
[528] Fix | Delete
[ $field_value, $field, $this->form_data ],
[529] Fix | Delete
'1.8.7 of the WPForms plugin',
[530] Fix | Delete
'wpforms_plaintext_field_value'
[531] Fix | Delete
);
[532] Fix | Delete
[533] Fix | Delete
/** This filter is documented in /includes/emails/class-emails.php */
[534] Fix | Delete
$field_value = apply_filters( // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[535] Fix | Delete
'wpforms_plaintext_field_value',
[536] Fix | Delete
$field_value,
[537] Fix | Delete
$field,
[538] Fix | Delete
$this->form_data
[539] Fix | Delete
);
[540] Fix | Delete
[541] Fix | Delete
// Append the filtered field value to the message.
[542] Fix | Delete
$message .= $field_value;
[543] Fix | Delete
[544] Fix | Delete
return $message;
[545] Fix | Delete
}
[546] Fix | Delete
[547] Fix | Delete
/**
[548] Fix | Delete
* Process the HTML email message.
[549] Fix | Delete
*
[550] Fix | Delete
* @since 1.8.5
[551] Fix | Delete
*
[552] Fix | Delete
* @param bool $show_empty_fields Whether to display empty fields in the email.
[553] Fix | Delete
*
[554] Fix | Delete
* @return string
[555] Fix | Delete
*/
[556] Fix | Delete
private function process_html_message( $show_empty_fields = false ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity
[557] Fix | Delete
[558] Fix | Delete
$message = '';
[559] Fix | Delete
[560] Fix | Delete
/**
[561] Fix | Delete
* Filter the list of field types to display in the email.
[562] Fix | Delete
*
[563] Fix | Delete
* @since 1.8.5
[564] Fix | Delete
* @deprecated 1.8.5.2
[565] Fix | Delete
*
[566] Fix | Delete
* @param array $other_fields List of field types.
[567] Fix | Delete
* @param array $form_data Form data.
[568] Fix | Delete
*/
[569] Fix | Delete
$other_fields = apply_filters_deprecated( // phpcs:disable WPForms.Comments.ParamTagHooks.InvalidParamTagsQuantity
[570] Fix | Delete
'wpforms_emails_notifications_display_other_fields',
[571] Fix | Delete
[ [], $this->form_data ],
[572] Fix | Delete
'1.8.5.2 of the WPForms plugin',
[573] Fix | Delete
'wpforms_email_display_other_fields'
[574] Fix | Delete
);
[575] Fix | Delete
[576] Fix | Delete
/** This filter is documented in /includes/emails/class-emails.php */
[577] Fix | Delete
$other_fields = (array) apply_filters( // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[578] Fix | Delete
'wpforms_email_display_other_fields',
[579] Fix | Delete
[],
[580] Fix | Delete
$this
[581] Fix | Delete
);
[582] Fix | Delete
[583] Fix | Delete
/**
[584] Fix | Delete
* Filter the form data before it is used to generate the email message.
[585] Fix | Delete
*
[586] Fix | Delete
* @since 1.8.8
[587] Fix | Delete
* @since 1.8.9 The $fields parameter was added.
[588] Fix | Delete
*
[589] Fix | Delete
* @param array $form_data Form data.
[590] Fix | Delete
* @param array $fields List of submitted fields.
[591] Fix | Delete
*/
[592] Fix | Delete
$this->form_data = apply_filters( 'wpforms_emails_notifications_form_data', $this->form_data, $this->fields );
[593] Fix | Delete
[594] Fix | Delete
foreach ( $this->form_data['fields'] as $field ) {
[595] Fix | Delete
$field_message = $this->get_field_html( $field, $show_empty_fields, $other_fields );
[596] Fix | Delete
[597] Fix | Delete
/**
[598] Fix | Delete
* Filter the field message before it is added to the email message.
[599] Fix | Delete
*
[600] Fix | Delete
* @since 1.8.9
[601] Fix | Delete
* @since 1.8.9.3 The $notifications parameter was added.
[602] Fix | Delete
*
[603] Fix | Delete
* @param string $field_message Field message.
[604] Fix | Delete
* @param array $field Field data.
[605] Fix | Delete
* @param bool $show_empty_fields Whether to display empty fields in the email.
[606] Fix | Delete
* @param array $other_fields List of field types.
[607] Fix | Delete
* @param array $form_data Form data.
[608] Fix | Delete
* @param array $fields List of submitted fields.
[609] Fix | Delete
* @param Notifications $notifications Notifications instance.
[610] Fix | Delete
*/
[611] Fix | Delete
$message .= apply_filters( 'wpforms_emails_notifications_field_message_html', $field_message, $field, $show_empty_fields, $other_fields, $this->form_data, $this->fields, $this );
[612] Fix | Delete
}
[613] Fix | Delete
[614] Fix | Delete
return $message;
[615] Fix | Delete
}
[616] Fix | Delete
[617] Fix | Delete
/**
[618] Fix | Delete
* Get a single field HTML markup.
[619] Fix | Delete
*
[620] Fix | Delete
* @since 1.8.9
[621] Fix | Delete
*
[622] Fix | Delete
* @param array $field Field data.
[623] Fix | Delete
* @param bool $show_empty_fields Whether to display empty fields in the email.
[624] Fix | Delete
* @param array $other_fields List of field types.
[625] Fix | Delete
*
[626] Fix | Delete
* @return string
[627] Fix | Delete
*/
[628] Fix | Delete
public function get_field_html( array $field, bool $show_empty_fields, array $other_fields ): string { // phpcs:ignore Generic.Metrics.CyclomaticComplexity
[629] Fix | Delete
[630] Fix | Delete
$field_type = ! empty( $field['type'] ) ? $field['type'] : '';
[631] Fix | Delete
$field_id = $field['id'] ?? '';
[632] Fix | Delete
[633] Fix | Delete
// Check if the field is empty in $this->fields.
[634] Fix | Delete
if ( empty( $this->fields[ $field_id ] ) ) {
[635] Fix | Delete
// Check if the field type is in $other_fields, otherwise skip.
[636] Fix | Delete
if ( empty( $other_fields ) || ! in_array( $field_type, $other_fields, true ) ) {
[637] Fix | Delete
return '';
[638] Fix | Delete
}
[639] Fix | Delete
[640] Fix | Delete
// Handle specific field types.
[641] Fix | Delete
list( $field_name, $field_val ) = $this->process_special_field_values( $field );
[642] Fix | Delete
} else {
[643] Fix | Delete
// Handle fields that are not empty in $this->fields.
[644] Fix | Delete
if ( ! $show_empty_fields && ( ! isset( $this->fields[ $field_id ]['value'] ) || (string) $this->fields[ $field_id ]['value'] === '' ) ) {
[645] Fix | Delete
return '';
[646] Fix | Delete
}
[647] Fix | Delete
[648] Fix | Delete
if ( $this->is_calculated_field_hidden( $field_id ) ) {
[649] Fix | Delete
return '';
[650] Fix | Delete
}
[651] Fix | Delete
[652] Fix | Delete
$field_name = $this->fields[ $field_id ]['name'] ?? '';
[653] Fix | Delete
$field_val = empty( $this->fields[ $field_id ]['value'] ) && ! is_numeric( $this->fields[ $field_id ]['value'] ) ? '<em>' . esc_html__( '(empty)', 'wpforms-lite' ) . '</em>' : $this->fields[ $field_id ]['value'];
[654] Fix | Delete
}
[655] Fix | Delete
[656] Fix | Delete
// Set a default field name if empty.
[657] Fix | Delete
if ( empty( $field_name ) && $field_name !== null ) {
[658] Fix | Delete
$field_name = $this->get_default_field_name( $field_id );
[659] Fix | Delete
}
[660] Fix | Delete
[661] Fix | Delete
/** This filter is documented in src/SmartTags/SmartTag/FieldHtmlId.php.*/
[662] Fix | Delete
$field_val = apply_filters( // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[663] Fix | Delete
'wpforms_html_field_value',
[664] Fix | Delete
$field_val,
[665] Fix | Delete
$this->fields[ $field_id ] ?? $field,
[666] Fix | Delete
$this->form_data,
[667] Fix | Delete
'email-html'
[668] Fix | Delete
);
[669] Fix | Delete
[670] Fix | Delete
// If it's not and RTE field - replace new lines with <br/> tags.
[671] Fix | Delete
if ( $field_type !== 'richtext' ) {
[672] Fix | Delete
$field_val = str_replace( [ "\r\n", "\r", "\n" ], '<br/>', $field_val );
[673] Fix | Delete
}
[674] Fix | Delete
[675] Fix | Delete
// Replace the payment total value if an order summary is enabled.
[676] Fix | Delete
// Ideally, it could be done through the `wpforms_html_field_value` filter,
[677] Fix | Delete
// but needed data is missed there, e.g. entry data ($this->fields).
[678] Fix | Delete
if ( $field_type === 'payment-total' && ! empty( $field['summary'] ) ) {
[679] Fix | Delete
$field_val = $this->process_tag( '{order_summary}' );
[680] Fix | Delete
}
[681] Fix | Delete
[682] Fix | Delete
// Append the field item to the message.
[683] Fix | Delete
return str_replace(
[684] Fix | Delete
[ '{field_type}', '{field_name}', '{field_value}' ],
[685] Fix | Delete
[ $field_type, $field_name, $field_val ],
[686] Fix | Delete
$this->field_template
[687] Fix | Delete
);
[688] Fix | Delete
}
[689] Fix | Delete
[690] Fix | Delete
/**
[691] Fix | Delete
* Check if a calculated field is hidden.
[692] Fix | Delete
*
[693] Fix | Delete
* @since 1.8.9.5
[694] Fix | Delete
*
[695] Fix | Delete
* @param int $field_id Field ID.
[696] Fix | Delete
*
[697] Fix | Delete
* @return bool
[698] Fix | Delete
*/
[699] Fix | Delete
private function is_calculated_field_hidden( $field_id ): bool {
[700] Fix | Delete
[701] Fix | Delete
return ! empty( $this->form_data['fields'][ $field_id ]['calculation_is_enabled'] ) &&
[702] Fix | Delete
! empty( $this->form_data['fields'][ $field_id ]['calculation_code_php'] ) &&
[703] Fix | Delete
isset( $this->fields[ $field_id ]['visible'] )
[704] Fix | Delete
&& ! $this->fields[ $field_id ]['visible'];
[705] Fix | Delete
}
[706] Fix | Delete
[707] Fix | Delete
/**
[708] Fix | Delete
* Process a smart tag.
[709] Fix | Delete
*
[710] Fix | Delete
* @since 1.8.5
[711] Fix | Delete
*
[712] Fix | Delete
* @param string $input Smart tag.
[713] Fix | Delete
*
[714] Fix | Delete
* @return string
[715] Fix | Delete
*/
[716] Fix | Delete
private function process_tag( $input = '' ) {
[717] Fix | Delete
[718] Fix | Delete
return wpforms_process_smart_tags( $input, $this->form_data, $this->fields, $this->entry_id, 'notification' );
[719] Fix | Delete
}
[720] Fix | Delete
[721] Fix | Delete
/**
[722] Fix | Delete
* Process special field types.
[723] Fix | Delete
* This is used for fields such as Page Break, HTML, Content, etc.
[724] Fix | Delete
*
[725] Fix | Delete
* @since 1.8.5
[726] Fix | Delete
*
[727] Fix | Delete
* @param array $field Field data.
[728] Fix | Delete
*
[729] Fix | Delete
* @return array
[730] Fix | Delete
*/
[731] Fix | Delete
private function process_special_field_values( $field ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity
[732] Fix | Delete
[733] Fix | Delete
$field_name = null;
[734] Fix | Delete
$field_val = null;
[735] Fix | Delete
[736] Fix | Delete
// Use a switch-case statement to handle specific field types.
[737] Fix | Delete
switch ( $field['type'] ) {
[738] Fix | Delete
case 'divider':
[739] Fix | Delete
$field_name = ! empty( $field['label'] ) ? str_repeat( '&mdash;', 3 ) . ' ' . $field['label'] . ' ' . str_repeat( '&mdash;', 3 ) : null;
[740] Fix | Delete
$field_val = ! empty( $field['description'] ) ? $field['description'] : '';
[741] Fix | Delete
break;
[742] Fix | Delete
[743] Fix | Delete
case 'pagebreak':
[744] Fix | Delete
// Skip if position is 'bottom'.
[745] Fix | Delete
if ( ! empty( $field['position'] ) && $field['position'] === 'bottom' ) {
[746] Fix | Delete
break;
[747] Fix | Delete
}
[748] Fix | Delete
[749] Fix | Delete
$title = ! empty( $field['title'] ) ? $field['title'] : esc_html__( 'Page Break', 'wpforms-lite' );
[750] Fix | Delete
$field_name = str_repeat( '&mdash;', 6 ) . ' ' . $title . ' ' . str_repeat( '&mdash;', 6 );
[751] Fix | Delete
break;
[752] Fix | Delete
[753] Fix | Delete
case 'html':
[754] Fix | Delete
// Skip if the field is conditionally hidden.
[755] Fix | Delete
if ( $this->is_field_conditionally_hidden( $field['id'] ) ) {
[756] Fix | Delete
break;
[757] Fix | Delete
}
[758] Fix | Delete
[759] Fix | Delete
$field_name = ! empty( $field['name'] ) ? $field['name'] : esc_html__( 'HTML / Code Block', 'wpforms-lite' );
[760] Fix | Delete
$field_val = $field['code'];
[761] Fix | Delete
break;
[762] Fix | Delete
[763] Fix | Delete
case 'content':
[764] Fix | Delete
// Skip if the field is conditionally hidden.
[765] Fix | Delete
if ( $this->is_field_conditionally_hidden( $field['id'] ) ) {
[766] Fix | Delete
break;
[767] Fix | Delete
}
[768] Fix | Delete
[769] Fix | Delete
$field_name = esc_html__( 'Content', 'wpforms-lite' );
[770] Fix | Delete
$field_val = $field['content'];
[771] Fix | Delete
break;
[772] Fix | Delete
[773] Fix | Delete
default:
[774] Fix | Delete
$field_name = '';
[775] Fix | Delete
$field_val = '';
[776] Fix | Delete
break;
[777] Fix | Delete
}
[778] Fix | Delete
[779] Fix | Delete
return [ $field_name, $field_val ];
[780] Fix | Delete
}
[781] Fix | Delete
[782] Fix | Delete
/**
[783] Fix | Delete
* Checks if conditional_logic is enabled and a field is conditionally hidden in the form.
[784] Fix | Delete
*
[785] Fix | Delete
* @since 1.8.5
[786] Fix | Delete
*
[787] Fix | Delete
* @param int $field_id The ID of the field to check.
[788] Fix | Delete
*
[789] Fix | Delete
* @return bool
[790] Fix | Delete
*/
[791] Fix | Delete
private function is_field_conditionally_hidden( $field_id ) {
[792] Fix | Delete
[793] Fix | Delete
return ! empty( $this->form_data['fields'][ $field_id ]['conditionals'] ) && ! wpforms_conditional_logic_fields()->field_is_visible( $this->form_data, $field_id );
[794] Fix | Delete
}
[795] Fix | Delete
[796] Fix | Delete
/**
[797] Fix | Delete
* Get the email reply to address.
[798] Fix | Delete
* This method has been overridden to add support for the Reply-to Name.
[799] Fix | Delete
*
[800] Fix | Delete
* @since 1.8.5
[801] Fix | Delete
*
[802] Fix | Delete
* @return string
[803] Fix | Delete
*/
[804] Fix | Delete
public function get_reply_to_address() {
[805] Fix | Delete
[806] Fix | Delete
$reply_to = $this->__get( 'reply_to' );
[807] Fix | Delete
$reply_to_name = false;
[808] Fix | Delete
[809] Fix | Delete
if ( ! empty( $reply_to ) ) {
[810] Fix | Delete
[811] Fix | Delete
// Optional custom format with a Reply-to Name specified: John Doe <john@doe.com>
[812] Fix | Delete
// - starts with anything,
[813] Fix | Delete
// - followed by space,
[814] Fix | Delete
// - ends with <anything> (expected to be an email, validated later).
[815] Fix | Delete
$regex = '/^(.+) (<.+>)$/';
[816] Fix | Delete
$matches = [];
[817] Fix | Delete
[818] Fix | Delete
if ( preg_match( $regex, $reply_to, $matches ) ) {
[819] Fix | Delete
$reply_to_name = $this->sanitize( $matches[1] );
[820] Fix | Delete
$reply_to = trim( $matches[2], '<> ' );
[821] Fix | Delete
}
[822] Fix | Delete
[823] Fix | Delete
$reply_to = $this->process_tag( $reply_to );
[824] Fix | Delete
[825] Fix | Delete
if ( ! is_email( $reply_to ) ) {
[826] Fix | Delete
$reply_to = false;
[827] Fix | Delete
$reply_to_name = false;
[828] Fix | Delete
}
[829] Fix | Delete
}
[830] Fix | Delete
[831] Fix | Delete
if ( $reply_to_name ) {
[832] Fix | Delete
$reply_to = "$reply_to_name <{$reply_to}>";
[833] Fix | Delete
}
[834] Fix | Delete
[835] Fix | Delete
/**
[836] Fix | Delete
* Filter the email reply-to address.
[837] Fix | Delete
*
[838] Fix | Delete
* @since 1.8.5
[839] Fix | Delete
*
[840] Fix | Delete
* @param string $reply_to Email reply-to address.
[841] Fix | Delete
* @param object $this Instance of the Notifications class.
[842] Fix | Delete
*/
[843] Fix | Delete
return apply_filters( 'wpforms_emails_notifications_get_reply_to_address', $reply_to, $this );
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
/**
[847] Fix | Delete
* Sanitize the string.
[848] Fix | Delete
* This method has been overridden to add support for processing smart tags.
[849] Fix | Delete
*
[850] Fix | Delete
* @since 1.8.5
[851] Fix | Delete
*
[852] Fix | Delete
* @param string $input String to sanitize and process for smart tags.
[853] Fix | Delete
*
[854] Fix | Delete
* @return string
[855] Fix | Delete
*/
[856] Fix | Delete
public function sanitize( $input = '' ) {
[857] Fix | Delete
[858] Fix | Delete
return wpforms_decode_string( $this->process_tag( $input ) );
[859] Fix | Delete
}
[860] Fix | Delete
[861] Fix | Delete
/**
[862] Fix | Delete
* Get the email content type.
[863] Fix | Delete
* This method has been overridden to better declare email template assigned to each notification.
[864] Fix | Delete
*
[865] Fix | Delete
* @since 1.8.5.2
[866] Fix | Delete
*
[867] Fix | Delete
* @return string
[868] Fix | Delete
*/
[869] Fix | Delete
public function get_content_type() {
[870] Fix | Delete
[871] Fix | Delete
$content_type = 'text/html';
[872] Fix | Delete
[873] Fix | Delete
if ( Helpers::is_plain_text_template( $this->current_template ) ) {
[874] Fix | Delete
$content_type = 'text/plain';
[875] Fix | Delete
}
[876] Fix | Delete
[877] Fix | Delete
/**
[878] Fix | Delete
* Filter the email content type.
[879] Fix | Delete
*
[880] Fix | Delete
* @since 1.8.5.2
[881] Fix | Delete
*
[882] Fix | Delete
* @param string $content_type The email content type.
[883] Fix | Delete
* @param Notifications $this An instance of the "Notifications" class.
[884] Fix | Delete
*/
[885] Fix | Delete
$content_type = apply_filters( 'wpforms_emails_notifications_get_content_type', $content_type, $this );
[886] Fix | Delete
[887] Fix | Delete
// Set the content type.
[888] Fix | Delete
$this->__set( 'content_type', $content_type );
[889] Fix | Delete
[890] Fix | Delete
// Return the content type.
[891] Fix | Delete
return $content_type;
[892] Fix | Delete
}
[893] Fix | Delete
[894] Fix | Delete
/**
[895] Fix | Delete
* Check if all emails are disabled.
[896] Fix | Delete
*
[897] Fix | Delete
* @since 1.8.5
[898] Fix | Delete
*
[899] Fix | Delete
* @return bool
[900] Fix | Delete
*/
[901] Fix | Delete
public function is_email_disabled() {
[902] Fix | Delete
[903] Fix | Delete
/**
[904] Fix | Delete
* Filter to control email disabling.
[905] Fix | Delete
*
[906] Fix | Delete
* The "Notifications" class is designed to mirror the properties and methods
[907] Fix | Delete
* provided by the "WPForms_WP_Emails" class for backward compatibility.
[908] Fix | Delete
*
[909] Fix | Delete
* @since 1.8.5
[910] Fix | Delete
*
[911] Fix | Delete
* @param bool $is_disabled Whether to disable all emails.
[912] Fix | Delete
* @param Notifications $this An instance of the "Notifications" class.
[913] Fix | Delete
*/
[914] Fix | Delete
return (bool) apply_filters( // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[915] Fix | Delete
'wpforms_disable_all_emails',
[916] Fix | Delete
false,
[917] Fix | Delete
$this
[918] Fix | Delete
);
[919] Fix | Delete
}
[920] Fix | Delete
[921] Fix | Delete
/**
[922] Fix | Delete
* Get the default field name as a fallback.
[923] Fix | Delete
*
[924] Fix | Delete
* @since 1.8.5
[925] Fix | Delete
*
[926] Fix | Delete
* @param int $field_id Field ID.
[927] Fix | Delete
*
[928] Fix | Delete
* @return string
[929] Fix | Delete
*/
[930] Fix | Delete
private function get_default_field_name( $field_id ) {
[931] Fix | Delete
[932] Fix | Delete
return sprintf( /* translators: %1$d - field ID. */
[933] Fix | Delete
esc_html__( 'Field ID #%1$s', 'wpforms-lite' ),
[934] Fix | Delete
wpforms_validate_field_id( $field_id )
[935] Fix | Delete
);
[936] Fix | Delete
}
[937] Fix | Delete
[938] Fix | Delete
/**
[939] Fix | Delete
* Wrap the given content with a table row.
[940] Fix | Delete
* This method has been added for styling purposes.
[941] Fix | Delete
*
[942] Fix | Delete
* @since 1.8.6
[943] Fix | Delete
*
[944] Fix | Delete
* @param string $content Processed smart tag content.
[945] Fix | Delete
*
[946] Fix | Delete
* @return string
[947] Fix | Delete
*/
[948] Fix | Delete
private function wrap_content_with_table_row( $content ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
[949] Fix | Delete
[950] Fix | Delete
// If the content is empty, return it as is.
[951] Fix | Delete
if ( empty( $content ) ) {
[952] Fix | Delete
return $content;
[953] Fix | Delete
}
[954] Fix | Delete
[955] Fix | Delete
// Process the smart tags in the content.
[956] Fix | Delete
$processed_content = $this->process_tag( $content );
[957] Fix | Delete
[958] Fix | Delete
// If the content doesn't contain any smart tags, wrap it in a table row, and return early.
[959] Fix | Delete
// Don't go beyond this point if the content doesn't contain any smart tags.
[960] Fix | Delete
if ( ! preg_match( '/{\w+}/', $processed_content ) ) {
[961] Fix | Delete
return '<tr class="smart-tag"><td class="field-name field-value" colspan="2">' . $processed_content . '</td></tr>';
[962] Fix | Delete
}
[963] Fix | Delete
[964] Fix | Delete
// Split the content into lines and remove empty lines.
[965] Fix | Delete
$lines = array_filter( explode( "\n", $content ), 'strlen' );
[966] Fix | Delete
[967] Fix | Delete
// Initialize an empty string to store the modified content.
[968] Fix | Delete
$modified_content = '';
[969] Fix | Delete
[970] Fix | Delete
// Iterate through each line.
[971] Fix | Delete
foreach ( $lines as $line ) {
[972] Fix | Delete
// Trim the line.
[973] Fix | Delete
$trimmed_line = $this->process_tag( trim( $line ) );
[974] Fix | Delete
[975] Fix | Delete
// Extract tags at the beginning of the line.
[976] Fix | Delete
preg_match( '/^(?:\{[^}]+}\s*)+/i', $trimmed_line, $before_line_tags );
[977] Fix | Delete
[978] Fix | Delete
if ( ! empty( $before_line_tags[0] ) ) {
[979] Fix | Delete
// Include the extracted tags at the beginning to the modified content.
[980] Fix | Delete
$modified_content .= trim( $before_line_tags[0] );
[981] Fix | Delete
// Remove the extracted tags from the trimmed line.
[982] Fix | Delete
$trimmed_line = trim( substr( $trimmed_line, strlen( $before_line_tags[0] ) ) );
[983] Fix | Delete
}
[984] Fix | Delete
[985] Fix | Delete
// Extract all smart tags from the remaining content.
[986] Fix | Delete
preg_match_all( '/\{([^}]+)}/i', $trimmed_line, $after_line_tags );
[987] Fix | Delete
[988] Fix | Delete
// Remove the smart tags from the content.
[989] Fix | Delete
$content_without_smart_tags = str_replace( $after_line_tags[0], '', $trimmed_line );
[990] Fix | Delete
[991] Fix | Delete
if ( ! empty( $content_without_smart_tags ) ) {
[992] Fix | Delete
// Wrap the content without the smart tags in a new table row.
[993] Fix | Delete
$modified_content .= '<tr class="smart-tag"><td class="field-name field-value" colspan="2">' . $content_without_smart_tags . '</td></tr>';
[994] Fix | Delete
}
[995] Fix | Delete
[996] Fix | Delete
if ( ! empty( $after_line_tags[0] ) ) {
[997] Fix | Delete
// Move all smart tags to the end of the line after the closing </tr> tag.
[998] Fix | Delete
$modified_content .= implode( ' ', $after_line_tags[0] );
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function