|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Migration for the Code Module and Signup Module that had values html encoded.
|
|
|
|
|
*
|
|
|
|
|
* @since 3.15.1
|
|
|
|
|
*/
|
|
|
|
|
class ET_Builder_Module_Settings_Migration_DiscontinueHtmlEncoding extends ET_Builder_Module_Settings_Migration {
|
|
|
|
|
public function get_modules( $group = '' ) {
|
|
|
|
|
$modules = array();
|
|
|
|
|
|
|
|
|
|
if ( in_array( $group, array( '', 'signup' ) ) ) {
|
|
|
|
|
$modules[] = 'et_pb_signup';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( in_array( $group, array( '', 'code' ) ) ) {
|
|
|
|
|
$modules[] = 'et_pb_code';
|
|
|
|
|
$modules[] = 'et_pb_fullwidth_code';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $modules;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function get_fields() {
|
|
|
|
|
return array(
|
|
|
|
|
'raw_content' => 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 <br /> tags into placeholder so wpautop will leave them alone.
|
|
|
|
|
$content = preg_replace( '|<br[\s]?[\/]?>|', '<!–- [et_pb_br_holder] -–>', $content );
|
|
|
|
|
|
|
|
|
|
// convert <p> tag to <pee> tag, so wpautop will leave them alone,
|
|
|
|
|
// *and* so that we can clearly spot the <p> tags that wpautop adds
|
|
|
|
|
// so we can quickly remove them.
|
|
|
|
|
$content = preg_replace( '|<p |', '<pee ', $content );
|
|
|
|
|
$content = preg_replace( '|<p>|', '<pee>', $content );
|
|
|
|
|
$content = preg_replace( '|<\/p>|', '</pee>', $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();
|