Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 13 | class Jetpack_Custom_CSS_Data_Migration { |
||
| 14 | /** |
||
| 15 | * Set up assorted actions and filters used by this class. |
||
| 16 | */ |
||
| 17 | public static function add_hooks() { |
||
| 18 | add_action( 'init', array( __CLASS__, 'register_legacy_post_type' ) ); |
||
| 19 | add_action( 'admin_init', array( __CLASS__, 'do_migration' ) ); |
||
| 20 | |||
| 21 | include_once( dirname( __FILE__ ) . '/custom-css.php' ); |
||
| 22 | if ( ! is_admin() ) { |
||
| 23 | add_action( 'init', array( 'Jetpack_Custom_CSS', 'init' ) ); |
||
| 24 | } |
||
| 25 | } |
||
| 26 | |||
| 27 | /** |
||
| 28 | * Do the bulk of the migration. |
||
| 29 | * |
||
| 30 | * @return int|null |
||
| 31 | */ |
||
| 32 | public static function do_migration() { |
||
| 33 | Jetpack_Options::update_option( 'custom_css_4.7_migration', true ); |
||
| 34 | Jetpack::log( 'custom_css_4.7_migration', 'start' ); |
||
| 35 | |||
| 36 | if ( ! post_type_exists( 'safecss' ) ) { |
||
| 37 | self::register_legacy_post_type(); |
||
| 38 | } |
||
| 39 | |||
| 40 | /** This filter is documented in modules/custom-css/custom-css.php */ |
||
| 41 | $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() ); |
||
| 42 | $core_css_post = wp_get_custom_css_post(); |
||
| 43 | $jetpack_css_post = self::get_post(); |
||
| 44 | |||
| 45 | if ( ! $jetpack_css_post ) { |
||
| 46 | return; |
||
| 47 | } |
||
| 48 | |||
| 49 | $revisions = self::get_all_revisions(); |
||
|
|
|||
| 50 | |||
| 51 | // Migrate the settings from revision meta to theme mod. |
||
| 52 | $options = self::get_options( $jetpack_css_post->ID ); |
||
| 53 | set_theme_mod( 'jetpack_custom_css', $options ); |
||
| 54 | |||
| 55 | if ( empty( $revisions ) || ! is_array( $revisions ) ) { |
||
| 56 | if ( $jetpack_css_post instanceof WP_Post ) { |
||
| 57 | // Feed in the raw, if the current setting is Sass/LESS, it'll filter it inside. |
||
| 58 | kses_remove_filters(); |
||
| 59 | wp_update_custom_css_post( $jetpack_css_post->post_content ); |
||
| 60 | kses_init(); |
||
| 61 | return 1; |
||
| 62 | } |
||
| 63 | return null; |
||
| 64 | } |
||
| 65 | |||
| 66 | $revisions = array_reverse( $revisions ); |
||
| 67 | $themes = Jetpack_Custom_CSS_Enhancements::get_themes(); |
||
| 68 | $migrated = array(); |
||
| 69 | |||
| 70 | foreach ( $revisions as $post_id => $post ) { |
||
| 71 | // Jetpack had stored the theme Name, not the stylesheet directory, for ... reasons. |
||
| 72 | // Get the stylesheet. If null, the theme is no longer available. Skip. |
||
| 73 | $stylesheet = isset( $themes[ $post->post_excerpt ] ) ? $themes[ $post->post_excerpt ] : null; |
||
| 74 | if ( empty( $stylesheet ) ) { |
||
| 75 | continue; |
||
| 76 | } |
||
| 77 | |||
| 78 | $migrated[] = $post->ID; |
||
| 79 | $preprocessor = get_post_meta( $post->ID, 'custom_css_preprocessor', true ); |
||
| 80 | $css = $post->post_content; |
||
| 81 | $pre = ''; |
||
| 82 | |||
| 83 | // Do a revision by revision parsing. |
||
| 84 | if ( $preprocessor && isset( $preprocessors[ $preprocessor ] ) ) { |
||
| 85 | $pre = $css; |
||
| 86 | $css = call_user_func( $preprocessors[ $preprocessor ]['callback'], $pre ); |
||
| 87 | } |
||
| 88 | |||
| 89 | kses_remove_filters(); |
||
| 90 | wp_update_custom_css_post( $css, array( |
||
| 91 | 'stylesheet' => $stylesheet, |
||
| 92 | 'preprocessed' => $pre, |
||
| 93 | ) ); |
||
| 94 | kses_init(); |
||
| 95 | } |
||
| 96 | |||
| 97 | // If we've migrated some CSS for the current theme and there was already something there in the Core dataset ... |
||
| 98 | if ( $core_css_post && $jetpack_css_post ) { |
||
| 99 | $preprocessor = $options['preprocessor']; |
||
| 100 | |||
| 101 | $css = $core_css_post->post_content; |
||
| 102 | $pre = $core_css_post->post_content_filtered; |
||
| 103 | if ( $preprocessor ) { |
||
| 104 | if ( $pre ) { |
||
| 105 | $pre .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n"; |
||
| 106 | } |
||
| 107 | $pre .= $jetpack_css_post->post_content; |
||
| 108 | |||
| 109 | $css .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n"; |
||
| 110 | $css .= call_user_func( $preprocessors[ $preprocessor ]['callback'], $jetpack_css_post->post_content ); |
||
| 111 | } else { |
||
| 112 | $css .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n"; |
||
| 113 | $css .= $jetpack_css_post->post_content; |
||
| 114 | } |
||
| 115 | |||
| 116 | wp_update_custom_css_post( $css, array( |
||
| 117 | 'preprocessed' => $pre, |
||
| 118 | ) ); |
||
| 119 | } |
||
| 120 | |||
| 121 | Jetpack::log( 'custom_css_4.7_migration', count( $migrated ) . 'revisions migrated' ); |
||
| 122 | return count( $migrated ); |
||
| 123 | } |
||
| 124 | |||
| 125 | /** |
||
| 126 | * Re-register the legacy CPT so we can play with the content already in the database. |
||
| 127 | */ |
||
| 128 | public static function register_legacy_post_type() { |
||
| 150 | |||
| 151 | /** |
||
| 152 | * Get the post used for legacy storage. |
||
| 153 | * |
||
| 154 | * Jetpack used to use a single post for all themes, just blanking it on theme switch. This gets that post. |
||
| 155 | * |
||
| 156 | * @return array|bool|null|WP_Post |
||
| 157 | */ |
||
| 158 | View Code Duplication | public static function get_post() { |
|
| 191 | |||
| 192 | /** |
||
| 193 | * Get all revisions of the Jetpack CSS CPT entry. |
||
| 194 | * |
||
| 195 | * @return array |
||
| 196 | */ |
||
| 197 | public static function get_all_revisions() { |
||
| 212 | |||
| 213 | /** |
||
| 214 | * Get the options stored for a given revision ID. |
||
| 215 | * |
||
| 216 | * Jetpack used to version the settings by storing them as meta on the revision. |
||
| 217 | * |
||
| 218 | * @param integer $post_id Post ID. |
||
| 219 | * |
||
| 220 | * @return array |
||
| 221 | */ |
||
| 222 | public static function get_options( $post_id = null ) { |
||
| 241 | } |
||
| 242 | |||
| 244 |
This check looks for improperly formatted assignments.
Every assignment must have exactly one space before and one space after the equals operator.
To illustrate:
will have no issues, while
will report issues in lines 1 and 2.