Automattic /
jetpack
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * Plugin Name: PWA |
||
| 4 | * Description: Add Progressive Web App support to your WordPress site. |
||
| 5 | * Plugin URI: https://github.com/automattic/jetpack |
||
| 6 | * Author: Automattic |
||
| 7 | * Author URI: https://automattic.com |
||
| 8 | * Version: 0.4.2 |
||
| 9 | * Text Domain: pwa |
||
| 10 | * Domain Path: /languages/ |
||
| 11 | * License: GPLv2 or later |
||
| 12 | */ |
||
| 13 | |||
| 14 | /** |
||
| 15 | * Include the following PWA capabilities: |
||
| 16 | * - cache the home page and posts/pages |
||
| 17 | * - cache all CSS and JS |
||
| 18 | * - show offline/online status using body class "jetpack__offline" |
||
| 19 | * TODO: |
||
|
0 ignored issues
–
show
|
|||
| 20 | * - push updates |
||
| 21 | * - how to cache within wp-admin? |
||
| 22 | * - hook WP's native cache functions to expire and push updates to sites |
||
| 23 | */ |
||
| 24 | |||
| 25 | define( 'PWA_SW_QUERY_VAR', 'jetpack_service_worker' ); |
||
| 26 | define( 'PWA_MANIFEST_QUERY_VAR', 'jetpack_app_manifest' ); |
||
| 27 | add_action( 'jetpack_activate_module_pwa', 'pwa_activate' ); |
||
| 28 | add_action( 'jetpack_deactivate_module_pwa', 'pwa_deactivate' ); |
||
| 29 | add_filter( 'query_vars', 'pwa_register_query_vars' ); |
||
| 30 | |||
| 31 | // manifest |
||
| 32 | add_action( 'wp_head', 'pwa_render_manifest_link' ); |
||
| 33 | add_action( 'amp_post_template_head', 'pwa_render_manifest_link' ); |
||
| 34 | add_action( 'admin_head', 'pwa_render_manifest_link' ); |
||
| 35 | |||
| 36 | // service worker |
||
| 37 | add_action( 'template_redirect', 'pwa_force_https', 1 ); |
||
| 38 | add_action( 'wp_enqueue_scripts', 'pwa_enqueue_script' ); |
||
| 39 | add_action( 'template_redirect', 'pwa_render_custom_assets', 2 ); |
||
| 40 | add_action( 'amp_post_template_head', 'pwa_render_amp_serviceworker_script' ); |
||
| 41 | add_action( 'amp_post_template_footer', 'pwa_render_amp_serviceworker_element' ); |
||
| 42 | |||
| 43 | function pwa_activate() { |
||
| 44 | if ( ! did_action( 'pwa_init' ) ) { |
||
| 45 | pwa_init(); |
||
| 46 | } |
||
| 47 | flush_rewrite_rules(); |
||
| 48 | } |
||
| 49 | |||
| 50 | function pwa_deactivate() { |
||
| 51 | flush_rewrite_rules(); |
||
| 52 | } |
||
| 53 | |||
| 54 | function pwa_register_query_vars( $vars ) { |
||
| 55 | $vars[] = PWA_SW_QUERY_VAR; |
||
| 56 | $vars[] = PWA_MANIFEST_QUERY_VAR; |
||
| 57 | return $vars; |
||
| 58 | } |
||
| 59 | |||
| 60 | add_action( 'init', 'pwa_init' ); |
||
| 61 | function pwa_init() { |
||
| 62 | if ( false === apply_filters( 'pwa_is_enabled', true ) ) { |
||
| 63 | return; |
||
| 64 | } |
||
| 65 | |||
| 66 | do_action( 'pwa_init' ); |
||
| 67 | add_rewrite_rule('service-worker.js$', 'index.php?' . PWA_SW_QUERY_VAR . '=1', 'top'); |
||
| 68 | wp_register_script( 'jetpack-register-service-worker', plugins_url( 'assets/js/register-service-worker.js', __FILE__ ), false, '1.5' ); |
||
| 69 | wp_register_script( 'jetpack-show-network-status', plugins_url( 'assets/js/show-network-status.js', __FILE__ ), false, '1.5' ); |
||
| 70 | wp_register_style( 'jetpack-show-network-status', plugins_url( 'assets/css/show-network-status.css', __FILE__ ) ); |
||
| 71 | } |
||
| 72 | |||
| 73 | function pwa_render_custom_assets() { |
||
| 74 | global $wp_query; |
||
| 75 | |||
| 76 | if ( $wp_query->get( PWA_SW_QUERY_VAR ) ) { |
||
| 77 | header( 'Content-Type: application/javascript; charset=utf-8' ); |
||
| 78 | echo file_get_contents( plugin_dir_path( __FILE__ ) . 'assets/js/service-worker.js' ); |
||
| 79 | exit; |
||
| 80 | } |
||
| 81 | |||
| 82 | if ( $wp_query->get( PWA_MANIFEST_QUERY_VAR ) ) { |
||
| 83 | $theme_color = pwa_get_theme_color(); |
||
| 84 | |||
| 85 | $manifest = array( |
||
| 86 | 'start_url' => get_bloginfo( 'url' ), |
||
| 87 | 'short_name' => get_bloginfo( 'name' ), |
||
| 88 | 'name' => get_bloginfo( 'name' ), |
||
| 89 | 'display' => 'standalone', |
||
| 90 | 'background_color' => $theme_color, |
||
| 91 | 'theme_color' => $theme_color, |
||
| 92 | ); |
||
| 93 | |||
| 94 | $icon_48 = pwa_site_icon_url( 48 ); |
||
| 95 | |||
| 96 | if ( $icon_48 ) { |
||
| 97 | $manifest[ 'icons' ] = array( |
||
| 98 | array( |
||
| 99 | 'src' => $icon_48, |
||
| 100 | 'sizes' => '48x48' |
||
| 101 | ), |
||
| 102 | array( |
||
| 103 | 'src' => pwa_site_icon_url( 192 ), |
||
| 104 | 'sizes' => '192x192' |
||
| 105 | ), |
||
| 106 | array( |
||
| 107 | 'src' => pwa_site_icon_url( 512 ), |
||
| 108 | 'sizes' => '512x512' |
||
| 109 | ) |
||
| 110 | ); |
||
| 111 | } |
||
| 112 | |||
| 113 | wp_send_json( $manifest ); |
||
| 114 | } |
||
| 115 | } |
||
| 116 | |||
| 117 | function pwa_site_icon_url( $size ) { |
||
| 118 | $url = get_site_icon_url( $size ); |
||
| 119 | |||
| 120 | if ( ! $url ) { |
||
| 121 | if ( ! function_exists( 'jetpack_site_icon_url' ) ) { |
||
| 122 | require_once( JETPACK__PLUGIN_DIR . 'modules/site-icon/site-icon-functions.php' ); |
||
| 123 | } |
||
| 124 | $url = jetpack_site_icon_url( null, $size ); |
||
| 125 | } |
||
| 126 | |||
| 127 | return $url; |
||
| 128 | } |
||
| 129 | |||
| 130 | function pwa_enqueue_script() { |
||
| 131 | wp_enqueue_script( 'jetpack-register-service-worker' ); |
||
| 132 | wp_enqueue_script( 'jetpack-show-network-status' ); |
||
| 133 | wp_enqueue_style( 'jetpack-show-network-status' ); |
||
| 134 | } |
||
| 135 | |||
| 136 | function pwa_get_theme_color() { |
||
| 137 | // if we have AMP enabled, use those colors? |
||
| 138 | if ( class_exists( 'AMP_Customizer_Settings' ) ) { |
||
| 139 | $amp_settings = apply_filters( 'amp_post_template_customizer_settings', AMP_Customizer_Settings::get_settings(), null ); |
||
| 140 | $theme_color = $amp_settings['header_background_color']; |
||
| 141 | } elseif ( current_theme_supports( 'custom-background' ) ) { |
||
| 142 | $theme_color = get_theme_support( 'custom-background' )->{'default-color'}; |
||
| 143 | } else { |
||
| 144 | $theme_color = '#FFF'; |
||
| 145 | } |
||
| 146 | |||
| 147 | return apply_filters( 'jetpack_pwa_background_color', $theme_color ); |
||
| 148 | } |
||
| 149 | |||
| 150 | function pwa_render_manifest_link() { |
||
| 151 | ?> |
||
| 152 | <link rel="manifest" href="/index.php?<?php echo PWA_MANIFEST_QUERY_VAR; ?>=1"> |
||
| 153 | <meta name="theme-color" content="<?php echo pwa_get_theme_color(); ?>"> |
||
| 154 | <?php |
||
| 155 | } |
||
| 156 | |||
| 157 | function pwa_render_amp_serviceworker_script() { |
||
| 158 | ?> |
||
| 159 | <script async custom-element="amp-install-serviceworker" src="https://cdn.ampproject.org/v0/amp-install-serviceworker-0.1.js"></script> |
||
| 160 | <?php |
||
| 161 | } |
||
| 162 | |||
| 163 | function pwa_render_amp_serviceworker_element() { |
||
| 164 | ?> |
||
| 165 | <amp-install-serviceworker src="/service-worker.js" layout="nodisplay"></amp-install-serviceworker> |
||
| 166 | <?php |
||
| 167 | } |
||
| 168 | |||
| 169 | function pwa_force_https () { |
||
| 170 | if ( !is_ssl() ) { |
||
| 171 | wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 ); |
||
| 172 | exit(); |
||
| 173 | } |
||
| 174 | } |
||
| 175 |
This check looks
TODOcomments that have been left in the code.``TODO``s show that something is left unfinished and should be attended to.