array(
'affected_fields' => array(
'raw_content' => $this->get_modules( 'code' ),
),
),
'description' => array(
'affected_fields' => array(
'description' => $this->get_modules( 'signup' ),
),
),
'footer_content' => array(
'affected_fields' => array(
'footer_content' => $this->get_modules( 'signup' ),
),
),
);
}
private function decode_code_module_raw_content( $content ) {
// convert previously escaped/encoded content back to normal
$content = et_builder_replace_code_content_entities( $content );
$content = ET_Builder_Element::convert_smart_quotes_and_amp( $content );
// TODO, not sure about this, but single quotes were encoded so this seemed to be needed
$content = str_replace( ''', "'", $content );
$author_id = get_post_field( 'post_author', get_the_ID() ) || get_current_user_id();
if ( ! user_can( $author_id, 'unfiltered_html' ) ) {
$content = $this->_post_content_capability_check( $content );
}
$content = html_entity_decode( $content, ENT_QUOTES );
// Only apply this aspect of the migration on FE, its not needed to run in VB or BB,
// thats the purpose ! is_admin() check is serving in this case.
if ( ! is_admin() ) {
// convert
tags into placeholder so wpautop will leave them alone.
$content = preg_replace( '|
|', '', $content );
// convert
tag to tag, so wpautop will leave them alone,
// *and* so that we can clearly spot the tags that wpautop adds
// so we can quickly remove them.
$content = preg_replace( '|
|', '', $content );
$content = preg_replace( '|<\/p>|', '', $content );
}
return $content;
}
public function migrate( $field_name, $current_value, $module_slug, $saved_value, $saved_field_name, $attrs, $content, $module_address ) {
// code module migration for BB
if ( in_array( $module_slug, $this->get_modules( 'code' ) ) && 'raw_content' === $saved_field_name ) {
return $this->decode_code_module_raw_content( $content );
}
$signup_fields = array( 'description', 'footer_content' );
if ( in_array( $module_slug, $this->get_modules( 'signup' ) ) && in_array( $saved_field_name, $signup_fields ) ) {
return html_entity_decode( $saved_value, ENT_COMPAT, 'UTF-8' );
}
return $saved_value;
}
public function get_content_migration_modules( $group = '' ) {
$modules = array();
if ( in_array( $group, array( '', 'code' ) ) ) {
$modules[] = 'et_pb_code';
$modules[] = 'et_pb_fullwidth_code';
}
return $modules;
}
public function migrate_content( $module_slug, $attrs, $content ) {
if ( in_array( $module_slug, $this->get_content_migration_modules( 'code' ) ) ) {
return $this->decode_code_module_raw_content( $content );
}
return $content;
}
private function _post_content_capability_check( $content ) {
$content = preg_replace_callback( '/\[et_pb_code.*?\](.*)\[\/et_pb_code\]/mis', array( $this, '_sanitize_code_module_content_regex' ), $content );
$content = preg_replace_callback( '/\[et_pb_fullwidth_code.*?\](.*)\[\/et_pb_fullwidth_code\]/mis', array( $this, '_sanitize_code_module_content_regex' ), $content );
return $content;
}
private function _sanitize_code_module_content_regex( $matches ) {
$sanitized_content = wp_kses_post( $matches[1] );
$sanitized_shortcode = str_replace( $matches[1], $sanitized_content, $matches[0] );
return $sanitized_shortcode;
}
}
return new ET_Builder_Module_Settings_Migration_DiscontinueHtmlEncoding();