Jetpack by WordPress.com - Version 4.7.1

Version Description

  • Release date: March 14th, 2017
  • Release post: http://wp.me/p1moTy-48Y

Bug Fixes

  • Carousel: avoid javascript errors that may cause issues with Slideshows or Tiled Galleries.
  • Markdown: always enable Markdown for posts whenever the module is active.
  • Sharing: make sure that sharing buttons open in a small pop-up instead of a separate window.
  • SSO: Avoid token or nonce errors when trying to log in to your site via the Secure Sign On option.
  • VideoPress: add in the ability to get video thumbnails from the WordPress.com REST API.
  • Widgets: improve rendering of the Image Widget via Photon.
  • Widget Visibility: avoid empty widget visibility rules after updating to Jetpack 4.7.
  • Widget Visibility: restore the option to make widgets appear on archive pages of different Custom Post Types.
  • Widget Visibility: migrate widget visibility settings to the new major Page rule for Custom Post Types.
  • Widget Visibility: add missing CSS for widget visibility settings on sites using an RTL language.
Download this release

Release Info

Developer dsmart
Plugin Icon 128x128 Jetpack by WordPress.com
Version 4.7.1
Comparing to
See all releases

Code changes from version 4.7 to 4.7.1

_inc/jetpack-strings.php CHANGED
@@ -131,11 +131,11 @@ __( "Security Scanning", "jetpack" ), // _inc/client/at-a-glance/scan.jsx:29
131
  __( "{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:43
132
  __( "Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:27
133
  __( "Site Verification Tools", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:21
134
- __( "By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.", "jetpack" ), // _inc/client/engagement/index.jsx:276
135
- __( "View your earnings", "jetpack" ), // _inc/client/engagement/index.jsx:251
136
- __( "View your {{a}}Email Followers{{/a}}", "jetpack" ), // _inc/client/engagement/index.jsx:232
137
- __( "View {{a}}All Stats{{/a}}", "jetpack" ), // _inc/client/engagement/index.jsx:217
138
- __( "Learn More", "jetpack" ), // _inc/client/engagement/index.jsx:210
139
  __( "Paid", "jetpack" ), // _inc/client/engagement/index.jsx:158
140
  __( "Unavailable in Dev Mode", "jetpack" ), // _inc/client/engagement/index.jsx:128
141
  __( "Your site must be accessible by search engines for this feature to work properly. You can change this in {{a}}Reading Settings{{/a}}.", "jetpack" ), // _inc/client/engagement/index.jsx:55
@@ -279,14 +279,14 @@ __( "Something happened while loading stats. Please try again later or {{a}}view
279
  __( "Click to view detailed stats.", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:92
280
  __( "Views: %(numberOfViews)s", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:90
281
  __( "Week of %(date)s", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:74
282
- __( "Paid", "jetpack" ), // _inc/client/components/dash-item/index.jsx:98
283
- __( "Active", "jetpack" ), // _inc/client/components/dash-item/index.jsx:87
284
- __( "Updates Needed", "jetpack" ), // _inc/client/components/dash-item/index.jsx:81
285
  __( "Connect Jetpack", "jetpack" ), // _inc/client/components/connect-button/index.jsx:101
286
  __( "Disconnect Jetpack", "jetpack" ), // _inc/client/components/connect-button/index.jsx:86
287
  __( "Do you really want to disconnect your site from WordPress.com?", "jetpack" ), // _inc/client/components/connect-button/index.jsx:71
288
  __( "Link to WordPress.com", "jetpack" ), // _inc/client/components/connect-button/index.jsx:65
289
  __( "Unlink me from WordPress.com", "jetpack" ), // _inc/client/components/connect-button/index.jsx:48
 
 
 
290
  _x( "Settings", "Noun. Displayed to screen readers.", "jetpack" ), // _inc/client/components/dash-section-header/index.jsx:43
291
  _x( "Privacy", "Shorthand for Privacy Policy.", "jetpack" ), // _inc/client/components/footer/index.jsx:126
292
  __( "Automattic's Privacy Policy", "jetpack" ), // _inc/client/components/footer/index.jsx:124
131
  __( "{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:43
132
  __( "Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:27
133
  __( "Site Verification Tools", "jetpack" ), // _inc/client/at-a-glance/site-verification.jsx:21
134
+ __( "By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.", "jetpack" ), // _inc/client/engagement/index.jsx:279
135
+ __( "View your earnings", "jetpack" ), // _inc/client/engagement/index.jsx:254
136
+ __( "View your {{a}}Email Followers{{/a}}", "jetpack" ), // _inc/client/engagement/index.jsx:235
137
+ __( "View {{a}}All Stats{{/a}}", "jetpack" ), // _inc/client/engagement/index.jsx:220
138
+ __( "Learn More", "jetpack" ), // _inc/client/engagement/index.jsx:213
139
  __( "Paid", "jetpack" ), // _inc/client/engagement/index.jsx:158
140
  __( "Unavailable in Dev Mode", "jetpack" ), // _inc/client/engagement/index.jsx:128
141
  __( "Your site must be accessible by search engines for this feature to work properly. You can change this in {{a}}Reading Settings{{/a}}.", "jetpack" ), // _inc/client/engagement/index.jsx:55
279
  __( "Click to view detailed stats.", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:92
280
  __( "Views: %(numberOfViews)s", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:90
281
  __( "Week of %(date)s", "jetpack" ), // _inc/client/at-a-glance/stats/index.jsx:74
 
 
 
282
  __( "Connect Jetpack", "jetpack" ), // _inc/client/components/connect-button/index.jsx:101
283
  __( "Disconnect Jetpack", "jetpack" ), // _inc/client/components/connect-button/index.jsx:86
284
  __( "Do you really want to disconnect your site from WordPress.com?", "jetpack" ), // _inc/client/components/connect-button/index.jsx:71
285
  __( "Link to WordPress.com", "jetpack" ), // _inc/client/components/connect-button/index.jsx:65
286
  __( "Unlink me from WordPress.com", "jetpack" ), // _inc/client/components/connect-button/index.jsx:48
287
+ __( "Paid", "jetpack" ), // _inc/client/components/dash-item/index.jsx:98
288
+ __( "Active", "jetpack" ), // _inc/client/components/dash-item/index.jsx:87
289
+ __( "Updates Needed", "jetpack" ), // _inc/client/components/dash-item/index.jsx:81
290
  _x( "Settings", "Noun. Displayed to screen readers.", "jetpack" ), // _inc/client/components/dash-section-header/index.jsx:43
291
  _x( "Privacy", "Shorthand for Privacy Policy.", "jetpack" ), // _inc/client/components/footer/index.jsx:126
292
  __( "Automattic's Privacy Policy", "jetpack" ), // _inc/client/components/footer/index.jsx:124
changelog.txt CHANGED
@@ -1,5 +1,91 @@
1
  == Changelog ==
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  = 4.6 =
4
 
5
  * Release date: February 7, 2017
1
  == Changelog ==
2
 
3
+ = 4.7 =
4
+
5
+ * Release date: March 7th, 2017
6
+ * Release post: http://wp.me/p1moTy-46L
7
+
8
+ **Enhancements**
9
+
10
+ * Quickly jump to post specific stats on WordPress.com with a new link.
11
+ * We've added more information to our debug tools to improve your support experience.
12
+ * New HTML5 versions of our house ads are out.
13
+ * Display custom copyright EXIF information in the Carousel with this new filter.
14
+ * We've highlighted the ability to export Contact Form feedback as it was being overlooked.
15
+ * If you have images on WordPress.com we're going to skip using Photon when the images include resize parameters.
16
+ * It is now possible to use the Sharing filter to customize the emails sent from the Email Sharing button.
17
+ * We've updated the library powering the Print link in the Recipe shortcode.
18
+ * Customize the speed and display of your slideshows with new Slideshow shortcode filters.
19
+ * The Twitch.tv shortcode now uses Twitch's new embedded player.
20
+ * Social Menus now come with the option to use SVG icons.
21
+ * Customize the content of the Display Posts Widget with a new filter.
22
+ * We've added a new email field to the Contact Info Widget.
23
+ * The Image and the Text widgets now use Photon if it is enabled.
24
+ * The WordPress.com REST API got several updates including using `register_rest_route()` consistently for registering, new date and time format settings, a filter for theme info results, new links and endpoints, and more.
25
+ * We cleaned up the Google+ Shortcode JS library and added a way to filter the SlideShare shortcode.
26
+
27
+ **Performance Improvements**
28
+
29
+ * Experience better performance with single page load caching of the media summary.
30
+ * We made some improvements to avoid slow queries on sites with thousands of images.
31
+ * The Top Posts widget now utilizes an endpoint from the WP.com REST API improving performance.
32
+ * Improve development mode performance by only calling `site_url()` once.
33
+ * We rewrote the way major/minor rules lists are generated to save bandwidth, and memory for sites using Widget Visibility.
34
+ * We've removed sync options that weren't needed to save memory during the sync process.
35
+
36
+ **Accessibility**
37
+
38
+ * We've improved the highlight of the stats range for a better visual experience and to make it consistent with other areas of the dashboard.
39
+ * Added a missing label to one of the fields in the Email sharing dialog.
40
+ * We've enabled keyboard focus styling in the new admin interface.
41
+ * Increased padding to sharing buttons on mobile to avoid usability issues.
42
+ * We've replaced Widget Visibility text labels with icons to improve usability on smaller devices.
43
+
44
+ **Slightly Less Exciting Enhancements:**
45
+
46
+ * We've added a filter to allow you to remove the Comment Form title.
47
+ * The Development Mode notice got an update to include all possible options to activate Development mode.
48
+ * Jetpack registration function got an update and cleanup.
49
+ * A notice displayed to WooCommerce store owners now detects when WooCommerce Services is installed, but not active.
50
+ * We've removed the Holiday Snow settings until you need them.
51
+ * Improved Infinite Scroll settings to reduce confusion.
52
+ * The HTML classes `infinite-scroll` and `neverending` are now applied using JS instead of PHP.
53
+ * We've updated the support link appearing when you're locked out of your site.
54
+ * New Unit Tests were added to make sure Publicize doesn't break when making changes to the Publicize process.
55
+ * We've added a sync filter to allow customizing timeout.
56
+ * The Top Posts widget now supports non-square image sizes.
57
+ * Added the Video GUID to the media API endpoint.
58
+
59
+ **Improved Compatibility**
60
+
61
+ * Fixed some W3C validation errors in Comments.
62
+ * Infinite Scroll now works beautifully with the Twenty Seventeen Theme.
63
+ * Translate new terms easier with an improvement to the translator comments.
64
+ * We switched to use Core functions to retrieve the list of sites in a multisite network for more accurate results.
65
+ * We added Product visibility to post meta whitelist, for better control of products displayed in Related Posts.
66
+ * We no longer sync specific post meta data added by Postman or WP RSS Mutli Importer to avoid performance issues during the sync process.
67
+ * We're now avoiding conflicts with plugins adding the core Video upload library to the post editor.
68
+ * Removed deprecated compatibility code for older versions of WordPress.
69
+ * We had some Shortcode conflicts with WordPress Post embeds, but that's been fixed.
70
+
71
+ **Bug Fixes**
72
+
73
+ * The Carousel `jp_carousel_load_for_images_linked_to_file` filter wasn't working well with Photon, this has been fixed.
74
+ * Carousel is now working well when loaded from infinite scroll.
75
+ * We removed double slashes from file paths in the Contact Form to avoid errors in specific server environments.
76
+ * Fixed a problem where CSS was being stripped when migrating from Jetpack's Custom CSS to Core's CSS editor.
77
+ * Our Debug Tool is now reporting the correct URL when WordPress lives in a subdirectory.
78
+ * Found and fixed a PHP error when uninstalling Jetpack.
79
+ * Infinite Scroll is no longer buggy when displaying the last page, and is more compatible with certain themes that were returning posts when there were none left to show.
80
+ * We're now skipping Photon for .ashx files.
81
+ * The Twitter character counter in Publicize got a fix to display info correctly.
82
+ * Related Posts are now displaying correctly for everyone, and we brought back the `jetpack_sharing_headline_html` filter.
83
+ * We've improved Sharing to render custom sharing services correctly, include Open Graph Meta Tags, and avoid JavaScript errors when jQuery is enqueued in the footer.
84
+ * Synchronization scheduling issues have been resolved.
85
+ * We're now trimming spaces in URLs for Image and Display Posts Widgets.
86
+ * Widget Visibility wasn't playing nice on taxonomy pages, this is no longer the case.
87
+ * The WordPress.com REST API received a couple of fixes to remove PHP errors when editing via the WordPress.com interface, authentication errors when using third-party apps, and permission errors when trying to preview edited posts in the WordPress.com editor.
88
+
89
  = 4.6 =
90
 
91
  * Release date: February 7, 2017
class.jetpack.php CHANGED
@@ -335,7 +335,7 @@ class Jetpack {
335
  list( $version ) = explode( ':', Jetpack_Options::get_option( 'version' ) );
336
  if ( JETPACK__VERSION != $version ) {
337
 
338
- // Check which active modules actually exist and remove others from active_modules list
339
  $unfiltered_modules = Jetpack::get_active_modules();
340
  $modules = array_filter( $unfiltered_modules, array( 'Jetpack', 'is_module' ) );
341
  if ( array_diff( $unfiltered_modules, $modules ) ) {
@@ -349,11 +349,43 @@ class Jetpack {
349
  Jetpack_Options::delete_option( 'identity_crisis_whitelist' );
350
  }
351
 
352
- Jetpack::maybe_set_version_option();
 
 
 
 
 
 
 
 
 
 
 
 
353
  }
354
  }
355
  }
356
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
  static function activate_manage( ) {
358
  if ( did_action( 'init' ) || current_filter() == 'init' ) {
359
  self::activate_module( 'manage', false, false );
335
  list( $version ) = explode( ':', Jetpack_Options::get_option( 'version' ) );
336
  if ( JETPACK__VERSION != $version ) {
337
 
338
+ // check which active modules actually exist and remove others from active_modules list
339
  $unfiltered_modules = Jetpack::get_active_modules();
340
  $modules = array_filter( $unfiltered_modules, array( 'Jetpack', 'is_module' ) );
341
  if ( array_diff( $unfiltered_modules, $modules ) ) {
349
  Jetpack_Options::delete_option( 'identity_crisis_whitelist' );
350
  }
351
 
352
+ // Make sure Markdown for posts gets turned back on
353
+ if ( ! get_option( 'wpcom_publish_posts_with_markdown' ) ) {
354
+ update_option( 'wpcom_publish_posts_with_markdown', true );
355
+ }
356
+
357
+ if ( did_action( 'wp_loaded' ) ) {
358
+ self::upgrade_on_load();
359
+ } else {
360
+ add_action(
361
+ 'wp_loaded',
362
+ array( __CLASS__, 'upgrade_on_load' )
363
+ );
364
+ }
365
  }
366
  }
367
  }
368
 
369
+ /**
370
+ * Runs upgrade routines that need to have modules loaded.
371
+ */
372
+ static function upgrade_on_load() {
373
+
374
+ // Not attempting any upgrades if jetpack_modules_loaded did not fire.
375
+ // This can happen in case Jetpack has been just upgraded and is
376
+ // being initialized late during the page load. In this case we wait
377
+ // until the next proper admin page load with Jetpack active.
378
+ if ( ! did_action( 'jetpack_modules_loaded' ) ) {
379
+ return;
380
+ }
381
+
382
+ Jetpack::maybe_set_version_option();
383
+
384
+ if ( class_exists( 'Jetpack_Widget_Conditions' ) ) {
385
+ Jetpack_Widget_Conditions::migrate_post_type_rules();
386
+ }
387
+ }
388
+
389
  static function activate_manage( ) {
390
  if ( did_action( 'init' ) || current_filter() == 'init' ) {
391
  self::activate_module( 'manage', false, false );
css/jetpack-rtl.css CHANGED
@@ -22,4 +22,7 @@ div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding
22
  .jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
23
  .widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:100% 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:100% 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
24
  .widget.widget_authors li>ul,.widget_authors>ul{margin-right:inherit;padding-right:0}.widget_authors ul li li{padding-right:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-left:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
 
 
 
25
  .wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;right:0;left:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:right!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
22
  .jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
23
  .widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:100% 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:100% 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
24
  .widget.widget_authors li>ul,.widget_authors>ul{margin-right:inherit;padding-right:0}.widget_authors ul li li{padding-right:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-left:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
25
+ /*!
26
+ * Do not modify this file directly. It is compiled SASS code.
27
+ */#wp-admin-bar-jetpack-idc.hide{display:none}#wp-admin-bar-jetpack-idc .jp-idc-admin-bar{background:#fff;border-radius:2px;color:#23282d;padding:4px 8px;font-size:12px}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons{color:#23282d;font-family:dashicons}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before{font-size:16px}#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item{background:inherit}#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar{background:#eee}
28
  .wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;right:0;left:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:right!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
css/jetpack.css CHANGED
@@ -22,4 +22,7 @@ div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding
22
  .jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
23
  .widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
24
  .widget.widget_authors li>ul,.widget_authors>ul{margin-left:inherit;padding-left:0}.widget_authors ul li li{padding-left:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-right:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
 
 
 
25
  .wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;left:0;right:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:left!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
22
  .jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
23
  .widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
24
  .widget.widget_authors li>ul,.widget_authors>ul{margin-left:inherit;padding-left:0}.widget_authors ul li li{padding-left:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-right:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
25
+ /*!
26
+ * Do not modify this file directly. It is compiled SASS code.
27
+ */#wp-admin-bar-jetpack-idc.hide{display:none}#wp-admin-bar-jetpack-idc .jp-idc-admin-bar{background:#fff;border-radius:2px;color:#23282d;padding:4px 8px;font-size:12px}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons{color:#23282d;font-family:dashicons}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before{font-size:16px}#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item{background:inherit}#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar{background:#eee}
28
  .wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;left:0;right:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:left!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
jetpack.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: http://jetpack.com
6
  * Description: Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.
7
  * Author: Automattic
8
- * Version: 4.7
9
  * Author URI: http://jetpack.com
10
  * License: GPL2+
11
  * Text Domain: jetpack
@@ -14,7 +14,7 @@
14
 
15
  define( 'JETPACK__MINIMUM_WP_VERSION', '4.6' );
16
 
17
- define( 'JETPACK__VERSION', '4.7' );
18
  define( 'JETPACK_MASTER_USER', true );
19
  define( 'JETPACK__API_VERSION', 1 );
20
  define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
5
  * Plugin URI: http://jetpack.com
6
  * Description: Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.
7
  * Author: Automattic
8
+ * Version: 4.7.1
9
  * Author URI: http://jetpack.com
10
  * License: GPL2+
11
  * Text Domain: jetpack
14
 
15
  define( 'JETPACK__MINIMUM_WP_VERSION', '4.6' );
16
 
17
+ define( 'JETPACK__VERSION', '4.7.1' );
18
  define( 'JETPACK_MASTER_USER', true );
19
  define( 'JETPACK__API_VERSION', 1 );
20
  define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
modules/carousel/jetpack-carousel.js CHANGED
@@ -445,6 +445,11 @@ jQuery(document).ready(function($) {
445
  return;
446
  }
447
 
 
 
 
 
 
448
  var valid = false;
449
 
450
  // if link points to 'Media File' (ignoring GET parameters) and flag is set allow it
445
  return;
446
  }
447
 
448
+ // skip if the container is not a link
449
+ if ( 'undefined' === typeof( $( container ).attr( 'href' ) ) ) {
450
+ return;
451
+ }
452
+
453
  var valid = false;
454
 
455
  // if link points to 'Media File' (ignoring GET parameters) and flag is set allow it
modules/markdown.php CHANGED
@@ -13,3 +13,17 @@
13
  */
14
 
15
  include dirname( __FILE__ ) . '/markdown/easy-markdown.php';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  */
14
 
15
  include dirname( __FILE__ ) . '/markdown/easy-markdown.php';
16
+
17
+ /**
18
+ * Remove checkbox set in modules/markdown/easy-markdown.php.
19
+ * We don't just remove the register_setting call there because the checkbox is
20
+ * needed on WordPress.com, where the file is sync'ed verbatim.
21
+ */
22
+ function jetpack_markdown_posting_always_on() {
23
+ // why oh why isn't there a remove_settings_field?
24
+ global $wp_settings_fields;
25
+ if ( isset( $wp_settings_fields['writing']['default'][ WPCom_Markdown::POST_OPTION ] ) ) {
26
+ unset( $wp_settings_fields['writing']['default'][ WPCom_Markdown::POST_OPTION ] );
27
+ }
28
+ }
29
+ add_action( 'admin_init', 'jetpack_markdown_posting_always_on', 11 );
modules/sharedaddy/sharing-service.php CHANGED
@@ -548,9 +548,6 @@ function sharing_add_footer() {
548
  );
549
  wp_localize_script( 'sharing-js', 'sharing_js_options', $sharing_js_options);
550
  }
551
- }
552
-
553
- function sharing_add_footer_scripts_inline() {
554
  $sharer = new Sharing_Service();
555
  $enabled = $sharer->get_blog_services();
556
  foreach ( array_merge( $enabled['visible'], $enabled['hidden'] ) AS $service ) {
@@ -779,9 +776,6 @@ function sharing_display( $text = '', $echo = false ) {
779
 
780
  // Enqueue scripts for the footer
781
  add_action( 'wp_footer', 'sharing_add_footer' );
782
-
783
- // Print inline scripts that depend on jQuery
784
- add_action( 'wp_footer', 'sharing_add_footer_scripts_inline', 25 );
785
  }
786
  }
787
 
548
  );
549
  wp_localize_script( 'sharing-js', 'sharing_js_options', $sharing_js_options);
550
  }
 
 
 
551
  $sharer = new Sharing_Service();
552
  $enabled = $sharer->get_blog_services();
553
  foreach ( array_merge( $enabled['visible'], $enabled['hidden'] ) AS $service ) {
776
 
777
  // Enqueue scripts for the footer
778
  add_action( 'wp_footer', 'sharing_add_footer' );
 
 
 
779
  }
780
  }
781
 
modules/sso.php CHANGED
@@ -31,8 +31,8 @@ class Jetpack_SSO {
31
  add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
32
  add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
33
  add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
34
- add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_wpcom_profile_cookies' ) );
35
  add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
 
36
 
37
  // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
38
  add_action( 'login_form_jetpack-sso', '__return_true' );
@@ -554,6 +554,44 @@ class Jetpack_SSO {
554
  }
555
  }
556
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
557
  static function delete_connection_for_user( $user_id ) {
558
  if ( ! $wpcom_user_id = get_user_meta( $user_id, 'wpcom_user_id', true ) ) {
559
  return;
@@ -577,17 +615,33 @@ class Jetpack_SSO {
577
  }
578
 
579
  static function request_initial_nonce() {
580
- Jetpack::load_xml_rpc_client();
581
- $xml = new Jetpack_IXR_Client( array(
582
- 'user_id' => get_current_user_id(),
583
- ) );
584
- $xml->query( 'jetpack.sso.requestNonce' );
585
 
586
- if ( $xml->isError() ) {
587
- return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
588
  }
589
 
590
- return $xml->getResponse();
591
  }
592
 
593
  /**
@@ -727,8 +781,6 @@ class Jetpack_SSO {
727
  if ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
728
  // Set that as the requested redirect to
729
  $redirect_to = $_request_redirect_to = esc_url_raw( $_COOKIE['jetpack_sso_redirect_to'] );
730
- // And then purge it
731
- setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
732
  }
733
 
734
  $json_api_auth_environment = Jetpack_SSO_Helpers::get_json_api_auth_environment();
31
  add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
32
  add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
33
  add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
 
34
  add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
35
+ add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_cookies_after_login' ) );
36
 
37
  // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
38
  add_action( 'login_form_jetpack-sso', '__return_true' );
554
  }
555
  }
556
 
557
+ /**
558
+ * Clear cookies that are no longer needed once the user has logged in.
559
+ *
560
+ * @since 4.8.0
561
+ */
562
+ static function clear_cookies_after_login() {
563
+ self::clear_wpcom_profile_cookies();
564
+ if ( isset( $_COOKIE[ 'jetpack_sso_nonce' ] ) ) {
565
+ setcookie(
566
+ 'jetpack_sso_nonce',
567
+ ' ',
568
+ time() - YEAR_IN_SECONDS,
569
+ COOKIEPATH,
570
+ COOKIE_DOMAIN
571
+ );
572
+ }
573
+
574
+ if ( isset( $_COOKIE[ 'jetpack_sso_original_request' ] ) ) {
575
+ setcookie(
576
+ 'jetpack_sso_original_request',
577
+ ' ',
578
+ time() - YEAR_IN_SECONDS,
579
+ COOKIEPATH,
580
+ COOKIE_DOMAIN
581
+ );
582
+ }
583
+
584
+ if ( isset( $_COOKIE[ 'jetpack_sso_redirect_to' ] ) ) {
585
+ setcookie(
586
+ 'jetpack_sso_redirect_to',
587
+ ' ',
588
+ time() - YEAR_IN_SECONDS,
589
+ COOKIEPATH,
590
+ COOKIE_DOMAIN
591
+ );
592
+ }
593
+ }
594
+
595
  static function delete_connection_for_user( $user_id ) {
596
  if ( ! $wpcom_user_id = get_user_meta( $user_id, 'wpcom_user_id', true ) ) {
597
  return;
615
  }
616
 
617
  static function request_initial_nonce() {
618
+ $nonce = ! empty( $_COOKIE[ 'jetpack_sso_nonce' ] )
619
+ ? $_COOKIE[ 'jetpack_sso_nonce' ]
620
+ : false;
 
 
621
 
622
+ if ( ! $nonce ) {
623
+ Jetpack::load_xml_rpc_client();
624
+ $xml = new Jetpack_IXR_Client( array(
625
+ 'user_id' => get_current_user_id(),
626
+ ) );
627
+ $xml->query( 'jetpack.sso.requestNonce' );
628
+
629
+ if ( $xml->isError() ) {
630
+ return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
631
+ }
632
+
633
+ $nonce = $xml->getResponse();
634
+
635
+ setcookie(
636
+ 'jetpack_sso_nonce',
637
+ $nonce,
638
+ time() + ( 10 * MINUTE_IN_SECONDS ),
639
+ COOKIEPATH,
640
+ COOKIE_DOMAIN
641
+ );
642
  }
643
 
644
+ return sanitize_key( $nonce );
645
  }
646
 
647
  /**
781
  if ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
782
  // Set that as the requested redirect to
783
  $redirect_to = $_request_redirect_to = esc_url_raw( $_COOKIE['jetpack_sso_redirect_to'] );
 
 
784
  }
785
 
786
  $json_api_auth_environment = Jetpack_SSO_Helpers::get_json_api_auth_environment();
modules/videopress/class.videopress-xmlrpc.php CHANGED
@@ -155,18 +155,21 @@ class VideoPress_XMLRPC {
155
  return false;
156
  }
157
 
 
 
 
 
 
 
 
158
  // Update the poster in the VideoPress info.
159
  $thumbnail_id = videopress_download_poster_image( $poster, $post_id );
160
 
161
- if ( !is_int( $thumbnail_id ) ) {
162
  return false;
163
  }
164
 
165
  update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
166
- $meta = wp_get_attachment_metadata( $post_id );
167
-
168
- $meta['videopress']['poster'] = $poster;
169
- wp_update_attachment_metadata( $post_id, $meta );
170
 
171
  return true;
172
  }
155
  return false;
156
  }
157
 
158
+ // We add ssl => 1 to make sure that the videos.files.wordpress.com domain is parsed as photon.
159
+ $poster = apply_filters( 'jetpack_photon_url', $poster, array( 'ssl' => 1 ), 'https' );
160
+
161
+ $meta = wp_get_attachment_metadata( $post_id );
162
+ $meta['videopress']['poster'] = $poster;
163
+ wp_update_attachment_metadata( $post_id, $meta );
164
+
165
  // Update the poster in the VideoPress info.
166
  $thumbnail_id = videopress_download_poster_image( $poster, $post_id );
167
 
168
+ if ( ! is_int( $thumbnail_id ) ) {
169
  return false;
170
  }
171
 
172
  update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
 
 
 
 
173
 
174
  return true;
175
  }
modules/videopress/utility-functions.php CHANGED
@@ -558,17 +558,22 @@ function videopress_make_media_upload_path( $blog_id ) {
558
  function video_get_info_by_blogpostid( $blog_id, $post_id ) {
559
  $post = get_post( $post_id );
560
 
 
 
 
 
 
 
561
  if ( is_wp_error( $post ) ) {
562
- return false;
563
  }
564
 
565
  if ( 'video/videopress' !== $post->post_mime_type ) {
566
- return false;
567
  }
568
 
569
- $video_info = new stdClass();
570
  $video_info->guid = get_post_meta( $post_id, 'videopress_guid', true );
571
- $video_info->finish_date_gmt = '0000-00-00 00:00:00';
572
 
573
  if ( videopress_is_finished_processing( $post_id ) ) {
574
  $video_info->finish_date_gmt = date( 'Y-m-d H:i:s' );
@@ -576,3 +581,118 @@ function video_get_info_by_blogpostid( $blog_id, $post_id ) {
576
 
577
  return $video_info;
578
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
558
  function video_get_info_by_blogpostid( $blog_id, $post_id ) {
559
  $post = get_post( $post_id );
560
 
561
+ $video_info = new stdClass();
562
+ $video_info->post_id = $post_id;
563
+ $video_info->blog_id = $blog_id;
564
+ $video_info->guid = null;
565
+ $video_info->finish_date_gmt = '0000-00-00 00:00:00';
566
+
567
  if ( is_wp_error( $post ) ) {
568
+ return $video_info;
569
  }
570
 
571
  if ( 'video/videopress' !== $post->post_mime_type ) {
572
+ return $video_info;
573
  }
574
 
575
+ // Since this is a VideoPress post, lt's fill out the rest of the object.
576
  $video_info->guid = get_post_meta( $post_id, 'videopress_guid', true );
 
577
 
578
  if ( videopress_is_finished_processing( $post_id ) ) {
579
  $video_info->finish_date_gmt = date( 'Y-m-d H:i:s' );
581
 
582
  return $video_info;
583
  }
584
+
585
+
586
+ /**
587
+ * Check that a VideoPress video format has finished processing.
588
+ *
589
+ * This uses the info object, because that is what the WPCOM endpoint
590
+ * uses, however we don't have a complete info object in the same way
591
+ * WPCOM does, so we pull the meta information out of the post
592
+ * options instead.
593
+ *
594
+ * Note: This mimics the WPCOM function of the same name and helps the media
595
+ * API endpoint add all needed VideoPress data.
596
+ *
597
+ * @param stdClass $info
598
+ * @param string $format
599
+ * @return bool
600
+ */
601
+ function video_format_done( $info, $format ) {
602
+
603
+ // Avoids notice when a non-videopress item is found.
604
+ if ( ! is_object( $info ) ) {
605
+ return false;
606
+ }
607
+
608
+ $post_id = $info->post_id;
609
+
610
+ if ( get_post_mime_type( $post_id ) !== 'video/videopress' ) {
611
+ return false;
612
+ }
613
+
614
+ $post = get_post( $post_id );
615
+
616
+ if ( is_wp_error( $post ) ) {
617
+ return false;
618
+ }
619
+
620
+ $meta = wp_get_attachment_metadata( $post->ID );
621
+
622
+ switch ( $format ) {
623
+ case 'fmt_hd':
624
+ return isset( $meta['videopress']['files']['hd']['mp4'] );
625
+ break;
626
+
627
+ case 'fmt_dvd':
628
+ return isset( $meta['videopress']['files']['dvd']['mp4'] );
629
+ break;
630
+
631
+ case 'fmt_std':
632
+ return isset( $meta['videopress']['files']['std']['mp4'] );
633
+ break;
634
+
635
+ case 'fmt_ogg':
636
+ return isset( $meta['videopress']['files']['std']['ogg'] );
637
+ break;
638
+ }
639
+
640
+ return false;
641
+ }
642
+
643
+ /**
644
+ * Get the image URL for the given VideoPress GUID
645
+ *
646
+ * We look up by GUID, because that is what WPCOM does and this needs to be
647
+ * parameter compatible with that.
648
+ *
649
+ * Note: This mimics the WPCOM function of the same name and helps the media
650
+ * API endpoint add all needed VideoPress data.
651
+ *
652
+ * @param string $guid
653
+ * @param string $format
654
+ * @return string
655
+ */
656
+ function video_image_url_by_guid( $guid, $format ) {
657
+
658
+ $post = video_get_post_by_guid( $guid );
659
+
660
+ if ( is_wp_error( $post ) ) {
661
+ return null;
662
+ }
663
+
664
+ $meta = wp_get_attachment_metadata( $post->ID );
665
+
666
+ // We add ssl => 1 to make sure that the videos.files.wordpress.com domain is parsed as photon.
667
+ $poster = apply_filters( 'jetpack_photon_url', $meta['videopress']['poster'], array( 'ssl' => 1 ), 'https' );
668
+
669
+ return $poster;
670
+ }
671
+
672
+ /**
673
+ * Using a GUID, find a post.
674
+ *
675
+ * @param string $guid
676
+ * @return WP_Post
677
+ */
678
+ function video_get_post_by_guid( $guid ) {
679
+ $args = array(
680
+ 'post_type' => 'attachment',
681
+ 'post_mime_type' => 'video/videopress',
682
+ 'post_status' => 'inherit',
683
+ 'meta_query' => array(
684
+ array(
685
+ 'key' => 'videopress_guid',
686
+ 'value' => $guid,
687
+ 'compare' => '=',
688
+ )
689
+ )
690
+ );
691
+
692
+ $query = new WP_Query( $args );
693
+
694
+ $post = $query->next_post();
695
+
696
+ return $post;
697
+ }
698
+
modules/widget-visibility/widget-conditions.php CHANGED
@@ -91,13 +91,17 @@ class Jetpack_Widget_Conditions {
91
  $post_types = get_post_types( array( 'public' => true ), 'objects' );
92
 
93
  $widget_conditions_post_types = array();
 
94
 
95
  foreach ( $post_types as $post_type ) {
96
  $widget_conditions_post_types[] = array( 'post_type-' . $post_type->name, $post_type->labels->singular_name );
 
97
  }
98
 
99
  $widget_conditions_data['page'][] = array( __( 'Post type:', 'jetpack' ), $widget_conditions_post_types );
100
 
 
 
101
  $pages_dropdown = preg_replace( '/<\/?select[^>]*?>/i', '', wp_dropdown_pages( array( 'echo' => false ) ) );
102
 
103
  preg_match_all( '/value=.([0-9]+).[^>]*>([^<]+)</', $pages_dropdown, $page_ids_and_titles, PREG_SET_ORDER );
@@ -490,6 +494,8 @@ class Jetpack_Widget_Conditions {
490
  default:
491
  if ( substr( $rule['minor'], 0, 10 ) == 'post_type-' ) {
492
  $condition_result = is_singular( substr( $rule['minor'], 10 ) );
 
 
493
  } elseif ( $rule['minor'] == get_option( 'page_for_posts' ) ) {
494
  // If $rule['minor'] is a page ID which is also the posts page
495
  $condition_result = $wp_query->is_posts_page;
@@ -690,6 +696,76 @@ class Jetpack_Widget_Conditions {
690
 
691
  return $term_id;
692
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
693
  }
694
 
695
  add_action( 'init', array( 'Jetpack_Widget_Conditions', 'init' ) );
91
  $post_types = get_post_types( array( 'public' => true ), 'objects' );
92
 
93
  $widget_conditions_post_types = array();
94
+ $widget_conditions_post_type_archives = array();
95
 
96
  foreach ( $post_types as $post_type ) {
97
  $widget_conditions_post_types[] = array( 'post_type-' . $post_type->name, $post_type->labels->singular_name );
98
+ $widget_conditions_post_type_archives[] = array( 'post_type_archive-' . $post_type->name, $post_type->labels->name );
99
  }
100
 
101
  $widget_conditions_data['page'][] = array( __( 'Post type:', 'jetpack' ), $widget_conditions_post_types );
102
 
103
+ $widget_conditions_data['page'][] = array( __( 'Post type Archives:', 'jetpack' ), $widget_conditions_post_type_archives );
104
+
105
  $pages_dropdown = preg_replace( '/<\/?select[^>]*?>/i', '', wp_dropdown_pages( array( 'echo' => false ) ) );
106
 
107
  preg_match_all( '/value=.([0-9]+).[^>]*>([^<]+)</', $pages_dropdown, $page_ids_and_titles, PREG_SET_ORDER );
494
  default:
495
  if ( substr( $rule['minor'], 0, 10 ) == 'post_type-' ) {
496
  $condition_result = is_singular( substr( $rule['minor'], 10 ) );
497
+ } elseif ( substr( $rule['minor'], 0, 18 ) == 'post_type_archive-' ) {
498
+ $condition_result = is_post_type_archive( substr( $rule['minor'], 18 ) );
499
  } elseif ( $rule['minor'] == get_option( 'page_for_posts' ) ) {
500
  // If $rule['minor'] is a page ID which is also the posts page
501
  $condition_result = $wp_query->is_posts_page;
696
 
697
  return $term_id;
698
  }
699
+
700
+ /**
701
+ * Upgrade routine to go through all widgets and move the Post Type
702
+ * setting to its newer location.
703
+ *
704
+ * @since 4.7.1
705
+ *
706
+ */
707
+ static function migrate_post_type_rules() {
708
+ global $wp_registered_widgets;
709
+
710
+ $sidebars_widgets = get_option( 'sidebars_widgets' );
711
+
712
+ // Going through all sidebars and through inactive and orphaned widgets
713
+ foreach ( $sidebars_widgets as $s => $sidebar ) {
714
+ if ( ! is_array( $sidebar ) ) {
715
+ continue;
716
+ }
717
+
718
+ foreach ( $sidebar as $w => $widget ) {
719
+ // $widget is the id of the widget
720
+ if ( empty( $wp_registered_widgets[ $widget ] ) ) {
721
+ continue;
722
+ }
723
+
724
+ $opts = $wp_registered_widgets[ $widget ];
725
+ $instances = get_option( $opts['callback'][0]->option_name );
726
+
727
+ // Going through each instance of the widget
728
+ foreach( $instances as $number => $instance ) {
729
+ if (
730
+ ! is_array( $instance ) ||
731
+ empty( $instance['conditions'] ) ||
732
+ empty( $instance['conditions']['rules'] )
733
+ ) {
734
+ continue;
735
+ }
736
+
737
+ // Going through all visibility rules
738
+ foreach( $instance['conditions']['rules'] as $index => $rule ) {
739
+
740
+ // We only need Post Type rules
741
+ if ( 'post_type' !== $rule['major'] ) {
742
+ continue;
743
+ }
744
+
745
+ $rule_type = false;
746
+
747
+ // Post type or type archive rule
748
+ if ( 0 === strpos( $rule['minor'], 'post_type_archive' ) ) {
749
+ $rule_type = 'post_type_archive';
750
+ } else if ( 0 === strpos( $rule['minor'], 'post_type' ) ) {
751
+ $rule_type = 'post_type';
752
+ }
753
+
754
+ if ( $rule_type ) {
755
+ $post_type = substr( $rule['minor'], strlen( $rule_type ) + 1 );
756
+ $rule['minor'] = $rule_type . '-' . $post_type;
757
+ $rule['major'] = 'page';
758
+
759
+ $instances[ $number ]['conditions']['rules'][ $index ] = $rule;
760
+ }
761
+ }
762
+ }
763
+
764
+ update_option( $opts['callback'][0]->option_name, $instances );
765
+ }
766
+ }
767
+ }
768
+
769
  }
770
 
771
  add_action( 'init', array( 'Jetpack_Widget_Conditions', 'init' ) );
modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css CHANGED
@@ -1,10 +1,7 @@
1
- /* This file was automatically generated on Jul 14 2014 00:47:30 */
2
-
3
  .wp-customizer .expanded .widget-conditional .widget-conditional-inner {
4
- width: 98%;
5
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
6
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
7
- box-sizing: border-box;
8
  }
9
 
10
  .wp-customizer .expanded .widget-conditional .form{
@@ -35,9 +32,12 @@
35
  }
36
  .widget-conditional .condition {
37
  padding-top: 12px;
 
38
  }
39
  .widget-conditional .condition select {
40
  width: 120px;
 
 
41
  }
42
  .widget-conditional .condition-top select {
43
  width: auto;
@@ -48,22 +48,51 @@
48
  margin-top: -20px;
49
  }
50
  .widget-conditional .selection {
51
- margin-left: 70px;
 
 
 
 
52
  }
53
  .widget-conditional .condition .actions {
54
  margin-top: -28px;
 
 
55
  }
56
 
57
  .widget-conditional .condition-control a {
58
  text-decoration: none;
 
 
 
 
 
 
 
 
 
59
  }
60
- .widget-conditional .condition:last-child .condition-conjunction {
 
 
 
 
 
 
 
 
 
61
  display: none;
62
  }
63
- .widget-control-actions .alignright {
64
- text-align: left;
65
- color:#999;
 
 
 
 
66
  }
 
67
  .wp-core-ui .button.display-options {
68
  margin-left: 5px;
69
  }
@@ -76,3 +105,11 @@
76
  max-width: none;
77
  height: auto;
78
  }
 
 
 
 
 
 
 
 
1
+ /* Do not modify this file directly. It is concatenated from individual module CSS files. */
 
2
  .wp-customizer .expanded .widget-conditional .widget-conditional-inner {
3
+ width: 98%; /* Safari/Chrome, other WebKit */ /* Firefox, other Gecko */
4
+ box-sizing: border-box;
 
 
5
  }
6
 
7
  .wp-customizer .expanded .widget-conditional .form{
32
  }
33
  .widget-conditional .condition {
34
  padding-top: 12px;
35
+ position: relative;
36
  }
37
  .widget-conditional .condition select {
38
  width: 120px;
39
+ position: relative;
40
+ z-index: 2;
41
  }
42
  .widget-conditional .condition-top select {
43
  width: auto;
48
  margin-top: -20px;
49
  }
50
  .widget-conditional .selection {
51
+ margin-left: 50px;
52
+ margin-right: 20px;
53
+ }
54
+ .widget-conditional .conditions-rule-has-children {
55
+ display: block;
56
  }
57
  .widget-conditional .condition .actions {
58
  margin-top: -28px;
59
+ }.widget-conditional .condition .actions {
60
+ margin-top: -28px;
61
  }
62
 
63
  .widget-conditional .condition-control a {
64
  text-decoration: none;
65
+ position: absolute;
66
+ top: 17px;
67
+ text-indent: -9999px;
68
+ z-index: 1;
69
+ }
70
+ .widget-conditional .condition-control a:before {
71
+ position: absolute;
72
+ text-indent: 0;
73
+ right: 0;
74
  }
75
+ .widget-conditional .condition-control .delete-condition {
76
+ right: 0;
77
+ color: #f11;
78
+ }
79
+ .widget-conditional .condition-control .add-condition {
80
+ left: 0;
81
+ }
82
+
83
+ .widget-conditional .condition:last-child .condition-conjunction,
84
+ .widget-conditional .condition:last-child .condition-intersection {
85
  display: none;
86
  }
87
+
88
+ .widget-conditional.conjunction .condition-intersection {
89
+ display: none;
90
+ }
91
+
92
+ .widget-conditional.intersection .condition-conjunction {
93
+ display: none;
94
  }
95
+
96
  .wp-core-ui .button.display-options {
97
  margin-left: 5px;
98
  }
105
  max-width: none;
106
  height: auto;
107
  }
108
+ .wp-customizer .widget-conditional .condition-control a {
109
+ top: 15px;
110
+ }
111
+ @media screen and ( max-width: 782px ) {
112
+ .widget-conditional .condition-control a {
113
+ top: 20px;
114
+ }
115
+ }
modules/widget-visibility/widget-conditions/widget-conditions.js CHANGED
@@ -200,7 +200,10 @@ jQuery( function( $ ) {
200
  select = condition.find( '.conditions-rule-minor' ).html( '' ),
201
  major = condition.data( 'rule-major' );
202
 
203
- if ( ! major ) {
 
 
 
204
  select.attr( 'disabled', 'disabled' );
205
  return;
206
  }
200
  select = condition.find( '.conditions-rule-minor' ).html( '' ),
201
  major = condition.data( 'rule-major' );
202
 
203
+ // Disable the select, if major rule is empty or if it's a `post_type`.
204
+ // "Post Type" rule has been removed in Jetpack 4.7, and
205
+ // because it breaks all other rules we should `return`.
206
+ if ( ! major || 'post_type' === major ) {
207
  select.attr( 'disabled', 'disabled' );
208
  return;
209
  }
modules/widgets/image-widget.php CHANGED
@@ -69,14 +69,7 @@ class Jetpack_Image_Widget extends WP_Widget {
69
 
70
  if ( '' != $instance['img_url'] ) {
71
 
72
- $image_url = Jetpack::is_module_active( 'photon' )
73
- ? jetpack_photon_url( $instance['img_url'], array(
74
- 'w' => $instance['img_width'],
75
- 'h' => $instance['img_height'],
76
- ) )
77
- : $instance['img_url'];
78
-
79
- $output = '<img src="' . esc_url( $image_url ) . '" ';
80
 
81
  if ( '' != $instance['alt_text'] ) {
82
  $output .= 'alt="' . esc_attr( $instance['alt_text'] ) .'" ';
@@ -94,6 +87,11 @@ class Jetpack_Image_Widget extends WP_Widget {
94
  $output .= 'height="' . esc_attr( $instance['img_height'] ) .'" ';
95
  }
96
  $output .= '/>';
 
 
 
 
 
97
  if ( '' != $instance['link'] ) {
98
  $target = ! empty( $instance['link_target_blank'] )
99
  ? 'target="_blank"'
69
 
70
  if ( '' != $instance['img_url'] ) {
71
 
72
+ $output = '<img src="' . esc_url( $instance['img_url'] ) . '" ';
 
 
 
 
 
 
 
73
 
74
  if ( '' != $instance['alt_text'] ) {
75
  $output .= 'alt="' . esc_attr( $instance['alt_text'] ) .'" ';
87
  $output .= 'height="' . esc_attr( $instance['img_height'] ) .'" ';
88
  }
89
  $output .= '/>';
90
+
91
+ if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
92
+ $output = Jetpack_Photon::filter_the_content( $output );
93
+ }
94
+
95
  if ( '' != $instance['link'] ) {
96
  $target = ! empty( $instance['link_target_blank'] )
97
  ? 'target="_blank"'
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === Jetpack by WordPress.com ===
2
  Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, annezazu, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cena, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, erania-pinnera, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jgs, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, rachelsquirrel, rdcoll, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, scarstocea, sdquirk, stephdau, tmoorewp, tyxla, Viper007Bond, westi, yoavf, zinigor
3
  Tags: Jetpack, WordPress.com, backup, security, related posts, CDN, speed, anti-spam, social sharing, SEO, video, stats
4
- Stable tag: 4.7
5
  Requires at least: 4.6
6
  Tested up to: 4.7
7
 
@@ -103,6 +103,24 @@ There are opportunities for developers at all levels to contribute. [Learn more
103
 
104
  == Changelog ==
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  = 4.7 =
107
 
108
  * Release date: March 7th, 2017
1
  === Jetpack by WordPress.com ===
2
  Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, annezazu, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cena, cfinke, chaselivingston, chellycat, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, erania-pinnera, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jacobshere, jblz, jeherve, jenhooks, jenia, jgs, jkudish, jmdodd, Joen, johnjamesjacoby, jshreve, koke, kraftbj, lamdayap, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, michael-arestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, pento, professor44, rachelsquirrel, rdcoll, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, scarstocea, sdquirk, stephdau, tmoorewp, tyxla, Viper007Bond, westi, yoavf, zinigor
3
  Tags: Jetpack, WordPress.com, backup, security, related posts, CDN, speed, anti-spam, social sharing, SEO, video, stats
4
+ Stable tag: 4.7.1
5
  Requires at least: 4.6
6
  Tested up to: 4.7
7
 
103
 
104
  == Changelog ==
105
 
106
+ = 4.7.1 =
107
+
108
+ * Release date: March 14th, 2017
109
+ * Release post: http://wp.me/p1moTy-48Y
110
+
111
+ **Bug Fixes**
112
+
113
+ * Carousel: avoid javascript errors that may cause issues with Slideshows or Tiled Galleries.
114
+ * Markdown: always enable Markdown for posts whenever the module is active.
115
+ * Sharing: make sure that sharing buttons open in a small pop-up instead of a separate window.
116
+ * SSO: Avoid token or nonce errors when trying to log in to your site via the Secure Sign On option.
117
+ * VideoPress: add in the ability to get video thumbnails from the WordPress.com REST API.
118
+ * Widgets: improve rendering of the Image Widget via Photon.
119
+ * Widget Visibility: avoid empty widget visibility rules after updating to Jetpack 4.7.
120
+ * Widget Visibility: restore the option to make widgets appear on archive pages of different Custom Post Types.
121
+ * Widget Visibility: migrate widget visibility settings to the new major Page rule for Custom Post Types.
122
+ * Widget Visibility: add missing CSS for widget visibility settings on sites using an RTL language.
123
+
124
  = 4.7 =
125
 
126
  * Release date: March 7th, 2017