diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..906f916 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# configuration file +/load.php diff --git a/load-example.php b/load-example.php new file mode 100644 index 0000000..892b46b --- /dev/null +++ b/load-example.php @@ -0,0 +1,20 @@ +from( 'posts' ) + ->where( 1 ) + ->update( col_replace( $text_columm, " src=\"$url_attribute", ' src="/' ) ); + + ( new Query() ) + ->from( 'posts' ) + ->where( 1 ) + ->update( col_replace( $text_columm, " href=\"$url_attribute", ' href="/' ) ); + } +} + +// update all the option values +$options = ( new Query() ) + ->from( 'options' ) + ->queryGenerator(); + +// each option must be evaluated manually because they may be serialized +foreach( $options as $option ) { + + // get the raw value + $id = $option->get( 'option_id' ); + $value = $option->get( 'option_value' ); + $value_unserialized = @unserialize( $value ); + + $new_value = null; + + if( $value_unserialized === false ) { + if( strpos( $value, $from ) !== false ) { + $new_value = url_replace( $from, $to, $value ); + } + } else { + if( is_object( $value_unserialized ) ) { + replace_object( $from, $to, $value_unserialized, $replaced ); + if( $replaced ) { + $new_value = serialize( $value_unserialized ); + } + } elseif( is_string( $value_unserialized ) ) { + if( strpos( $value_unserialized, $from ) !== false ) { + $value_unserialized = url_replace( $from, $to, $value_unserialized ); + $new_value = serialize( $value_unserialized ); + } + } + } + + if( $new_value ) { + echo "\n"; + echo "From:\n"; + echo $value; + echo "\n"; + echo "To:\n"; + print_r( $new_value ); + + echo "\nSave [Y/n]?\n"; + $y = readline(); + if( $y === 'y' || empty( $y ) ) { + ( new Query() ) + ->from( 'options' ) + ->whereStr( 'option_id', $id ) + ->update( [ + 'option_value' => $new_value, + ] ); + + echo "Saved\n"; + } else { + echo "Skipped\n"; + } + } else { + echo "Nothing to do from $value\n"; + } +} + +// update all the option values +$options = ( new Query() ) + ->from( 'postmeta' ) + ->queryGenerator(); + +// each option must be evaluated manually because they may be serialized +foreach( $options as $option ) { + + // get the raw value + $id = $option->get( 'meta_id' ); + $value = $option->get( 'meta_value' ); + $value_unserialized = @unserialize( $value ); + + $new_value = null; + + if( $value_unserialized === false ) { + if( strpos( $value, $from ) !== false ) { + $new_value = url_replace( $from, $to, $value ); + } + } else { + if( is_object( $value_unserialized ) ) { + replace_object( $from, $to, $value_unserialized, $replaced ); + if( $replaced ) { + $new_value = serialize( $value_unserialized ); + } + } elseif( is_string( $value_unserialized ) ) { + if( strpos( $value_unserialized, $from ) !== false ) { + $value_unserialized = url_replace( $from, $to, $value_unserialized ); + $new_value = serialize( $value_unserialized ); + } + } + } + + if( $new_value ) { + echo "\n"; + echo "From:\n"; + echo $value; + echo "\n"; + echo "To:\n"; + print_r( $new_value ); + + echo "\nSave [Y/n]?\n"; + $y = readline(); + if( $y === 'y' || empty( $y ) ) { + ( new Query() ) + ->from( 'postmeta' ) + ->whereStr( 'meta_id', $id ) + ->update( [ + 'meta_value' => $new_value, + ] ); + + echo "Saved\n"; + } else { + echo "Skipped\n"; + } + } else { + echo "Nothing to do from $value\n"; + } +} + +/** + * Replace something from an object + */ +function replace_object( $from, $to, $obj, & $replaced = false ) { + + // for each attribute + foreach( $obj as $attr => $value ) { + + if( is_object( $value ) ) { + // eventually proceed in the leafs + replace_object( $from, $to, $value ); + } elseif( is_string( $value ) ) { + if( strpos( $value, $from ) !== false ) { + if( is_array( $obj ) ) { + $obj[ $attr ] = str_replace( $from, $to, $value ); + } else { + $obj->$attr = str_replace( $from, $to, $value ); + } + $replaced = true; + } + } + } + +} + + +function sql_replace( $col, $from, $to ) { + return sprintf( + "REPLACE( %s, '%s', '%s' )", + $col, + esc_sql( $from ), + esc_sql( $to ) + ); +} + +function col_replace( $col, $from, $to ) { + return new DBCol( + $col, + sql_replace( $col, $from, $to ), + '-' + ); +} + +/** + * Replace an URL from a string + */ +function url_replace( $from, $to, $value ) { + + $value = str_replace( $from, $to, $value ); + + // make relative URLs in images + $value = str_replace( " src=\"$to", ' src="/', $value ); + + // make relative URLs in links + $value = str_replace( " href=\"$to", ' href="/', $value ); + + return $value; +}