gutenberg-styles
6 years ago
README.md
6 years ago
class-jetpack-calypsoify.php
3 years ago
mods-gutenberg.js
6 years ago
mods.js
6 years ago
style-gutenberg-rtl.min.css
4 years ago
style-gutenberg.min.css
4 years ago
style-rtl.min.css
4 years ago
style.min.css
4 years ago
class-jetpack-calypsoify.php
213 lines
| 1 | <?php |
| 2 | /** |
| 3 | * This is Calypso skin of the wp-admin interface that is conditionally triggered via the ?calypsoify=1 param. |
| 4 | * |
| 5 | * @package automattic/jetpack |
| 6 | */ |
| 7 | |
| 8 | use Automattic\Jetpack\Status; |
| 9 | |
| 10 | /** |
| 11 | * Class Jetpack_Calypsoify |
| 12 | */ |
| 13 | class Jetpack_Calypsoify { |
| 14 | |
| 15 | /** |
| 16 | * Singleton instance of `Jetpack_Calypsoify`. |
| 17 | * |
| 18 | * @var object |
| 19 | */ |
| 20 | public static $instance = false; |
| 21 | |
| 22 | /** |
| 23 | * Is Calypsoify enabled, based on any value of `calypsoify` user meta. |
| 24 | * |
| 25 | * @var bool |
| 26 | */ |
| 27 | public $is_calypsoify_enabled = false; |
| 28 | |
| 29 | /** |
| 30 | * Jetpack_Calypsoify constructor. |
| 31 | */ |
| 32 | private function __construct() { |
| 33 | add_action( 'admin_init', array( $this, 'setup' ), 4 ); |
| 34 | } |
| 35 | |
| 36 | /** |
| 37 | * Singleton. |
| 38 | * |
| 39 | * @return Jetpack_Calypsoify |
| 40 | */ |
| 41 | public static function get_instance() { |
| 42 | if ( ! self::$instance ) { |
| 43 | self::$instance = new self(); |
| 44 | } |
| 45 | |
| 46 | return self::$instance; |
| 47 | } |
| 48 | |
| 49 | /** |
| 50 | * Setup function that is loaded on the `wp_loaded` hook via the constructor. |
| 51 | */ |
| 52 | public function setup() { |
| 53 | $this->is_calypsoify_enabled = isset( $_GET['calypsoify'] ) && 1 === (int) $_GET['calypsoify'] && $this->is_page_gutenberg(); // phpcs:ignore WordPress.Security.NonceVerification.Recommended |
| 54 | |
| 55 | $this->check_meta(); |
| 56 | |
| 57 | if ( $this->is_calypsoify_enabled ) { |
| 58 | add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_for_gutenberg' ), 100 ); |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | /** |
| 63 | * Enqueues scripts, data, and styles for Gutenberg. |
| 64 | */ |
| 65 | public function enqueue_for_gutenberg() { |
| 66 | $site_suffix = ( new Status() )->get_site_suffix(); |
| 67 | wp_enqueue_style( 'calypsoify_wpadminmods_css', plugin_dir_url( __FILE__ ) . 'style-gutenberg.min.css', false, JETPACK__VERSION ); |
| 68 | wp_style_add_data( 'calypsoify_wpadminmods_css', 'rtl', 'replace' ); |
| 69 | wp_style_add_data( 'calypsoify_wpadminmods_css', 'suffix', '.min' ); |
| 70 | |
| 71 | wp_enqueue_script( 'calypsoify_wpadminmods_js', plugin_dir_url( __FILE__ ) . 'mods-gutenberg.js', array( 'jquery' ), JETPACK__VERSION, false ); |
| 72 | wp_localize_script( |
| 73 | 'calypsoify_wpadminmods_js', |
| 74 | 'calypsoifyGutenberg', |
| 75 | array( |
| 76 | 'closeUrl' => $this->get_close_gutenberg_url(), |
| 77 | 'manageReusableBlocksUrl' => $this->get_calypso_origin() . '/types/wp_block/' . $site_suffix, |
| 78 | 'createNewPostUrl' => $this->get_calypso_origin() . '/post/' . $site_suffix, |
| 79 | ) |
| 80 | ); |
| 81 | } |
| 82 | |
| 83 | /** |
| 84 | * Returns the Calypso domain that originated the current request. |
| 85 | * |
| 86 | * @return string |
| 87 | */ |
| 88 | private function get_calypso_origin() { |
| 89 | $origin = ! empty( $_GET['origin'] ) ? wp_unslash( $_GET['origin'] ) : 'https://wordpress.com'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 90 | $allowed = array( |
| 91 | 'http://calypso.localhost:3000', |
| 92 | 'http://127.0.0.1:41050', // Desktop App. |
| 93 | 'https://wpcalypso.wordpress.com', |
| 94 | 'https://horizon.wordpress.com', |
| 95 | 'https://wordpress.com', |
| 96 | ); |
| 97 | return in_array( $origin, $allowed, true ) ? $origin : 'https://wordpress.com'; |
| 98 | } |
| 99 | |
| 100 | /** |
| 101 | * Returns the Calypso URL that displays either the current post type list (if no args |
| 102 | * are supplied) or the classic editor for the current post (if a post ID is supplied). |
| 103 | * |
| 104 | * @param int|null $post_id Post ID. |
| 105 | * |
| 106 | * @return string |
| 107 | */ |
| 108 | public function get_calypso_url( $post_id = null ) { |
| 109 | $screen = get_current_screen(); |
| 110 | $post_type = $screen->post_type; |
| 111 | $site_suffix = ( new Status() )->get_site_suffix(); |
| 112 | |
| 113 | if ( $post_id === null ) { |
| 114 | // E.g. posts or pages have no special suffix. CPTs are in the `types/{cpt}` format. |
| 115 | $post_type_suffix = ( 'post' === $post_type || 'page' === $post_type ) |
| 116 | ? "/{$post_type}s/" |
| 117 | : "/types/{$post_type}/"; |
| 118 | $post_suffix = ''; |
| 119 | } else { |
| 120 | $post_type_suffix = ( 'post' === $post_type || 'page' === $post_type ) |
| 121 | ? "/{$post_type}/" |
| 122 | : "/edit/{$post_type}/"; |
| 123 | $post_suffix = "/{$post_id}"; |
| 124 | } |
| 125 | |
| 126 | return $this->get_calypso_origin() . $post_type_suffix . $site_suffix . $post_suffix; |
| 127 | } |
| 128 | |
| 129 | /** |
| 130 | * Returns the URL to be used on the block editor close button for going back to the |
| 131 | * Calypso post list. |
| 132 | * |
| 133 | * @return string |
| 134 | */ |
| 135 | public function get_close_gutenberg_url() { |
| 136 | return $this->get_calypso_url(); |
| 137 | } |
| 138 | |
| 139 | /** |
| 140 | * Returns the URL for switching the user's editor to the Calypso (WordPress.com Classic) editor. |
| 141 | * |
| 142 | * @return string |
| 143 | */ |
| 144 | public function get_switch_to_classic_editor_url() { |
| 145 | return add_query_arg( |
| 146 | 'set-editor', |
| 147 | 'classic', |
| 148 | $this->is_calypsoify_enabled ? $this->get_calypso_url( get_the_ID() ) : false |
| 149 | ); |
| 150 | } |
| 151 | |
| 152 | /** |
| 153 | * Checks if the calypsoify user meta value is set, and deletes it if it is. |
| 154 | * This is to ensure that Calypsoify is not activated without the URL parameter. |
| 155 | */ |
| 156 | public function check_meta() { |
| 157 | if ( ! empty( get_user_meta( get_current_user_id(), 'calypsoify', true ) ) ) { |
| 158 | delete_user_meta( get_current_user_id(), 'calypsoify' ); |
| 159 | } |
| 160 | } |
| 161 | |
| 162 | /** |
| 163 | * Return whether a post type should display the Gutenberg/block editor. |
| 164 | * |
| 165 | * @since 6.7.0 |
| 166 | * |
| 167 | * @param string $post_type Post type. |
| 168 | */ |
| 169 | public function is_post_type_gutenberg( $post_type ) { |
| 170 | return use_block_editor_for_post_type( $post_type ); |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * Determines if the page is an instance of the Gutenberg block editor. |
| 175 | * |
| 176 | * @return bool |
| 177 | */ |
| 178 | public function is_page_gutenberg() { |
| 179 | // phpcs:disable WordPress.Security.NonceVerification.Recommended |
| 180 | // Disabling WordPress.Security.NonceVerification.Recommended because this function fires within admin_init and this is only changing display. |
| 181 | $page = isset( $_SERVER['REQUEST_URI'] ) ? wp_basename( esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) : ''; |
| 182 | |
| 183 | if ( false !== strpos( $page, 'post-new.php' ) && empty( $_GET['post_type'] ) ) { |
| 184 | return true; |
| 185 | } |
| 186 | |
| 187 | if ( false !== strpos( $page, 'post-new.php' ) && isset( $_GET['post_type'] ) && $this->is_post_type_gutenberg( sanitize_key( $_GET['post_type'] ) ) ) { |
| 188 | return true; |
| 189 | } |
| 190 | |
| 191 | if ( false !== strpos( $page, 'post.php' ) ) { |
| 192 | $post = get_post( isset( $_GET['post'] ) ? intval( $_GET['post'] ) : null ); |
| 193 | if ( isset( $post ) && isset( $post->post_type ) && $this->is_post_type_gutenberg( $post->post_type ) ) { |
| 194 | return true; |
| 195 | } |
| 196 | } |
| 197 | |
| 198 | if ( false !== strpos( $page, 'revision.php' ) ) { |
| 199 | $post = get_post( isset( $_GET['revision'] ) ? intval( $_GET['revision'] ) : null ); |
| 200 | $parent = get_post( $post->post_parent ); |
| 201 | if ( isset( $parent ) && isset( $parent->post_type ) && $this->is_post_type_gutenberg( $parent->post_type ) ) { |
| 202 | return true; |
| 203 | } |
| 204 | } |
| 205 | |
| 206 | return false; |
| 207 | // phpcs:enable |
| 208 | } |
| 209 | |
| 210 | } |
| 211 | |
| 212 | Jetpack_Calypsoify::get_instance(); |
| 213 |