summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYury German <blueknight@gentoo.org>2016-02-12 22:22:00 -0500
committerYury German <blueknight@gentoo.org>2016-02-12 22:22:00 -0500
commit657cafe0e955cf88033597f131aa50835140c617 (patch)
treecf21a30d319cb2a238a6cfb8b4eb3b20b1b5dcff
parentAdding New Mantra version 2.4.1.1 - Bug 574468 (diff)
downloadblogs-gentoo-657cafe0e955cf88033597f131aa50835140c617.tar.gz
blogs-gentoo-657cafe0e955cf88033597f131aa50835140c617.tar.bz2
blogs-gentoo-657cafe0e955cf88033597f131aa50835140c617.zip
Updating plugins easy-table, jetpack, openid, public-post preview, talbe-of-contents-plus, wordress-mobile-pack - Bug 574468
-rw-r--r--plugins/easy-table/easy-table.php114
-rw-r--r--plugins/easy-table/languages/easy-table-id_ID.mobin4983 -> 4358 bytes
-rw-r--r--plugins/easy-table/languages/easy-table-id_ID.po264
-rw-r--r--plugins/easy-table/languages/english.mobin530 -> 527 bytes
-rw-r--r--plugins/easy-table/languages/english.po244
-rw-r--r--plugins/easy-table/readme.txt13
-rw-r--r--plugins/jetpack/3rd-party/3rd-party.php7
-rw-r--r--plugins/jetpack/3rd-party/bbpress.php28
-rw-r--r--plugins/jetpack/3rd-party/bitly.php16
-rw-r--r--plugins/jetpack/_inc/footer.php21
-rw-r--r--plugins/jetpack/_inc/gallery-settings.js4
-rw-r--r--plugins/jetpack/_inc/genericons/README.md134
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.eotbin22760 -> 22374 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.svg48
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.ttfbin22576 -> 22188 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.woffbin14360 -> 13988 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/genericons.css68
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css70
-rw-r--r--plugins/jetpack/_inc/header.php22
-rw-r--r--plugins/jetpack/_inc/jetpack-jitm.js129
-rw-r--r--plugins/jetpack/_inc/jetpack-modules.js21
-rw-r--r--plugins/jetpack/_inc/jetpack.js4
-rw-r--r--plugins/jetpack/_inc/jp-my-jetpack.js86
-rw-r--r--plugins/jetpack/_inc/jp.js182
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php35
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-my-jetpack-page.php187
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php2
-rw-r--r--plugins/jetpack/_inc/lib/markdown/extra.php106
-rw-r--r--plugins/jetpack/_inc/lib/markdown/gfm.php9
-rw-r--r--plugins/jetpack/_inc/lib/markdown/test.php33
-rw-r--r--plugins/jetpack/_inc/lib/tonesque.php2
-rw-r--r--plugins/jetpack/_inc/lib/tracks/class.tracks-client.php168
-rw-r--r--plugins/jetpack/_inc/lib/tracks/class.tracks-event.php149
-rw-r--r--plugins/jetpack/_inc/lib/tracks/client.php124
-rw-r--r--plugins/jetpack/changelog.txt1405
-rw-r--r--plugins/jetpack/class.jetpack-admin.php61
-rw-r--r--plugins/jetpack/class.jetpack-autoupdate.php278
-rw-r--r--plugins/jetpack/class.jetpack-cli.php456
-rw-r--r--plugins/jetpack/class.jetpack-client-server.php65
-rw-r--r--plugins/jetpack/class.jetpack-client.php65
-rw-r--r--plugins/jetpack/class.jetpack-data.php83
-rw-r--r--plugins/jetpack/class.jetpack-debugger.php70
-rw-r--r--plugins/jetpack/class.jetpack-heartbeat.php8
-rw-r--r--plugins/jetpack/class.jetpack-ixr-client.php16
-rw-r--r--plugins/jetpack/class.jetpack-jitm.php426
-rw-r--r--plugins/jetpack/class.jetpack-modules-list-table.php65
-rw-r--r--plugins/jetpack/class.jetpack-network-sites-list-table.php25
-rw-r--r--plugins/jetpack/class.jetpack-network.php482
-rw-r--r--plugins/jetpack/class.jetpack-options.php26
-rw-r--r--plugins/jetpack/class.jetpack-post-images.php102
-rw-r--r--plugins/jetpack/class.jetpack-signature.php6
-rw-r--r--plugins/jetpack/class.jetpack-sync.php113
-rw-r--r--plugins/jetpack/class.jetpack-tracks.php72
-rw-r--r--plugins/jetpack/class.jetpack-twitter-cards.php48
-rw-r--r--plugins/jetpack/class.jetpack-user-agent.php86
-rw-r--r--plugins/jetpack/class.jetpack-xmlrpc-server.php45
-rw-r--r--plugins/jetpack/class.jetpack.php2327
-rw-r--r--plugins/jetpack/class.json-api-endpoints.php539
-rw-r--r--plugins/jetpack/class.json-api.php88
-rw-r--r--plugins/jetpack/class.media-extractor.php2
-rw-r--r--plugins/jetpack/class.media-summary.php9
-rw-r--r--plugins/jetpack/class.photon.php264
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.css150
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.css147
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.min.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.css781
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-admin.css779
-rw-r--r--plugins/jetpack/css/jetpack-admin.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-admin.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-admin.min.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.css147
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-banners.css145
-rw-r--r--plugins/jetpack/css/jetpack-banners.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-banners.min.css2
-rw-r--r--plugins/jetpack/css/jetpack-banners.min.css.map2
-rw-r--r--plugins/jetpack/css/jetpack-rtl.css2
-rw-r--r--plugins/jetpack/css/jetpack.css2
-rw-r--r--plugins/jetpack/functions.compat.php5
-rw-r--r--plugins/jetpack/functions.gallery.php32
-rw-r--r--plugins/jetpack/functions.opengraph.php201
-rw-r--r--plugins/jetpack/functions.photon.php74
-rw-r--r--plugins/jetpack/images/custom-css.jpgbin10203 -> 9525 bytes
-rw-r--r--plugins/jetpack/images/custom-css@2x.jpgbin26272 -> 23050 bytes
-rw-r--r--plugins/jetpack/images/jetpack-icon.jpgbin0 -> 9872 bytes
-rw-r--r--plugins/jetpack/images/jetpack-logo.pngbin1058 -> 706 bytes
-rw-r--r--plugins/jetpack/images/rss/blue-large.pngbin1776 -> 1743 bytes
-rw-r--r--plugins/jetpack/images/rss/blue-medium.pngbin1195 -> 1175 bytes
-rw-r--r--plugins/jetpack/images/rss/green-large.pngbin1644 -> 1603 bytes
-rw-r--r--plugins/jetpack/images/rss/green-medium.pngbin1036 -> 1018 bytes
-rw-r--r--plugins/jetpack/images/rss/green-small.pngbin528 -> 523 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-large.pngbin2545 -> 2495 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-medium.pngbin1697 -> 1582 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-small.pngbin672 -> 652 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-large.pngbin3617 -> 3458 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-medium.pngbin1553 -> 1509 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-small.pngbin644 -> 630 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-large.pngbin3755 -> 3615 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-medium.pngbin1702 -> 1655 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-small.pngbin651 -> 630 bytes
-rw-r--r--plugins/jetpack/images/rss/red-large.pngbin3595 -> 3388 bytes
-rw-r--r--plugins/jetpack/images/rss/red-medium.pngbin1558 -> 1536 bytes
-rw-r--r--plugins/jetpack/images/rss/red-small.pngbin609 -> 595 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-large.pngbin2120 -> 1946 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-medium.pngbin853 -> 811 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-small.pngbin336 -> 331 bytes
-rw-r--r--plugins/jetpack/images/screenshots/beautifulmath.jpgbin0 -> 17159 bytes
-rw-r--r--plugins/jetpack/images/screenshots/beautifulmath.pngbin37171 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/carousel.jpgbin0 -> 42162 bytes
-rw-r--r--plugins/jetpack/images/screenshots/carousel.pngbin293351 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/comments.jpgbin0 -> 16219 bytes
-rw-r--r--plugins/jetpack/images/screenshots/comments.pngbin29695 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/contactform.jpgbin0 -> 25029 bytes
-rw-r--r--plugins/jetpack/images/screenshots/contactform.pngbin30026 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/custom-content-types.jpgbin0 -> 22052 bytes
-rw-r--r--plugins/jetpack/images/screenshots/custom-content-types.pngbin44387 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/custom-css.jpgbin0 -> 25432 bytes
-rw-r--r--plugins/jetpack/images/screenshots/custom-css.pngbin23291 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/google-plus.jpgbin0 -> 7103 bytes
-rw-r--r--plugins/jetpack/images/screenshots/google-plus.pngbin9805 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/hovercards.jpgbin0 -> 25367 bytes
-rw-r--r--plugins/jetpack/images/screenshots/hovercards.pngbin98590 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/likes.jpgbin0 -> 15437 bytes
-rw-r--r--plugins/jetpack/images/screenshots/likes.pngbin38360 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/manage-sm.pngbin18319 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/manage.jpgbin0 -> 23865 bytes
-rw-r--r--plugins/jetpack/images/screenshots/manage.pngbin53226 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/mobile-push-notifications.jpgbin28097 -> 28093 bytes
-rw-r--r--plugins/jetpack/images/screenshots/mobile-theme.jpgbin0 -> 22313 bytes
-rw-r--r--plugins/jetpack/images/screenshots/mobile-theme.pngbin36665 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/notes.jpgbin0 -> 20665 bytes
-rw-r--r--plugins/jetpack/images/screenshots/notes.pngbin21825 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/post-by-email.jpgbin0 -> 19119 bytes
-rw-r--r--plugins/jetpack/images/screenshots/post-by-email.pngbin23968 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/publicize.jpgbin0 -> 15343 bytes
-rw-r--r--plugins/jetpack/images/screenshots/publicize.pngbin68018 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/related-posts.jpgbin0 -> 11382 bytes
-rw-r--r--plugins/jetpack/images/screenshots/related-posts.pngbin41760 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/sharing.jpgbin0 -> 15781 bytes
-rw-r--r--plugins/jetpack/images/screenshots/sharing.pngbin34165 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/shortcodes.jpgbin0 -> 28818 bytes
-rw-r--r--plugins/jetpack/images/screenshots/shortcodes.pngbin32383 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/shortlinks.jpgbin0 -> 21286 bytes
-rw-r--r--plugins/jetpack/images/screenshots/shortlinks.pngbin49341 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/site-icon.pngbin37215 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/spelling.jpgbin0 -> 19051 bytes
-rw-r--r--plugins/jetpack/images/screenshots/spelling.pngbin52755 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/stats.jpgbin0 -> 18641 bytes
-rw-r--r--plugins/jetpack/images/screenshots/stats.pngbin68102 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/subscriptions.jpgbin0 -> 22165 bytes
-rw-r--r--plugins/jetpack/images/screenshots/subscriptions.pngbin41785 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/tiled-gallery.jpgbin0 -> 31306 bytes
-rw-r--r--plugins/jetpack/images/screenshots/tiled-gallery.pngbin175467 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/vaultpress.jpgbin0 -> 21181 bytes
-rw-r--r--plugins/jetpack/images/screenshots/vaultpress.pngbin35503 -> 0 bytes
-rw-r--r--plugins/jetpack/images/screenshots/widgets.jpgbin0 -> 23939 bytes
-rw-r--r--plugins/jetpack/images/screenshots/widgets.pngbin103682 -> 0 bytes
-rw-r--r--plugins/jetpack/images/the-footcloud.svg8
-rw-r--r--plugins/jetpack/images/wordpress-connect.jpgbin5956 -> 5524 bytes
-rw-r--r--plugins/jetpack/images/wordpress-connect@2x.jpgbin14451 -> 12401 bytes
-rw-r--r--plugins/jetpack/images/wordpress-stats.jpgbin12088 -> 11658 bytes
-rw-r--r--plugins/jetpack/images/wordpress-stats@2x.jpgbin25681 -> 24786 bytes
-rw-r--r--plugins/jetpack/images/wpspin_light-2x.gifbin10411 -> 0 bytes
-rw-r--r--plugins/jetpack/jetpack.php10
-rw-r--r--plugins/jetpack/json-api-config.php1
-rw-r--r--plugins/jetpack/json-endpoints.php2515
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php68
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php46
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php34
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php107
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php134
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php11
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php8
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-invites-endpoint.php124
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php14
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php5
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php42
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php64
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php29
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php3
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php26
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php43
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-publicize-endpoint.php23
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php63
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php107
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php4
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php18
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php50
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-invites-endpoint.php141
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php12
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php132
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php116
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php116
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php17
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php101
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php16
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php32
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php7
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php2
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php155
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php12
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php1
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php12
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php39
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php31
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php93
-rw-r--r--plugins/jetpack/languages/jetpack-af.mobin11152 -> 11262 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ar.mobin243407 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-az.mobin192930 -> 200045 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-bg_BG.mobin20081 -> 21156 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-bs_BA.mobin71898 -> 71909 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ca.mobin79651 -> 80071 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ckb.mobin91963 -> 91348 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-cs_CZ.mobin47202 -> 46928 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-cy.mobin17699 -> 20883 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-da_DK.mobin50817 -> 57726 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-de_DE.mobin212453 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-el.mobin231030 -> 251264 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-es_CL.mobin0 -> 717 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-es_ES.mobin208445 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-fa_IR.mobin150553 -> 185029 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-fi.mobin39939 -> 43192 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-fr_FR.mobin213518 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-gd.mobin0 -> 48759 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-gl_ES.mobin38869 -> 39180 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-he_IL.mobin226278 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-hr.mobin38656 -> 38814 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-hu_HU.mobin176055 -> 174752 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-id_ID.mobin202361 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-is_IS.mobin0 -> 21640 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-it_IT.mobin207351 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ja.mobin223739 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ka_GE.mobin1031 -> 1774 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ko_KR.mobin210885 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-lt_LT.mobin17297 -> 19361 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-lv.mobin0 -> 806 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-mk_MK.mobin25106 -> 25205 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ms_MY.mobin24467 -> 24416 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-my_MM.mobin17386 -> 18713 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-nb_NO.mobin182016 -> 182475 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-nl_NL.mobin200739 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-nn_NO.mobin24985 -> 25313 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-pl_PL.mobin40760 -> 43924 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-pt_BR.mobin204415 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-pt_PT.mobin79626 -> 87285 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ro_RO.mobin81733 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ru_RU.mobin269288 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sa_IN.mobin887 -> 1075 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-si_LK.mobin57057 -> 56106 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sk_SK.mobin17903 -> 18116 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sl_SI.mobin9505 -> 9766 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sq.mobin202110 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sr_RS.mobin54536 -> 54232 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sv_SE.mobin52964 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-te.mobin21783 -> 22370 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-th.mobin30284 -> 29992 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-tr_TR.mobin209580 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-uk.mobin12489 -> 56465 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ur.mobin4434 -> 4576 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-vi.mobin22062 -> 22558 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-zh_CN.mobin191136 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-zh_TW.mobin191481 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/readme.txt8
-rw-r--r--plugins/jetpack/locales.php332
-rw-r--r--plugins/jetpack/modules/after-the-deadline.php8
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js20
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd.core.js83
-rw-r--r--plugins/jetpack/modules/after-the-deadline/proxy.php8
-rw-r--r--plugins/jetpack/modules/carousel.php3
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.css15
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.js124
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.php137
-rw-r--r--plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css45
-rw-r--r--plugins/jetpack/modules/comments.php3
-rw-r--r--plugins/jetpack/modules/comments/admin.php10
-rw-r--r--plugins/jetpack/modules/comments/base.php8
-rw-r--r--plugins/jetpack/modules/comments/comments.php44
-rw-r--r--plugins/jetpack/modules/contact-form.php3
-rw-r--r--plugins/jetpack/modules/contact-form/admin.php162
-rw-r--r--plugins/jetpack/modules/contact-form/css/grunion.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/menu-alter-rtl.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/menu-alter-rtl.min.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/menu-alter.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/menu-alter.min.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/rtl/grunion-rtl.css4
-rw-r--r--plugins/jetpack/modules/contact-form/css/rtl/menu-alter-rtl.css53
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-contact-form.php697
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-form-view.php19
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-omnisearch.php3
-rw-r--r--plugins/jetpack/modules/contact-form/js/grunion.js63
-rw-r--r--plugins/jetpack/modules/contact-form/readme.txt132
-rw-r--r--plugins/jetpack/modules/custom-content-types.php1
-rw-r--r--plugins/jetpack/modules/custom-css.php3
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php52
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php6
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/data.inc.php9
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css.php441
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/blank.css1
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php205
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics.php38
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/nova-font.css5
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css1
-rw-r--r--plugins/jetpack/modules/custom-post-types/nova.php153
-rw-r--r--plugins/jetpack/modules/custom-post-types/portfolios.php134
-rw-r--r--plugins/jetpack/modules/custom-post-types/testimonial.php307
-rw-r--r--plugins/jetpack/modules/enhanced-distribution.php4
-rw-r--r--plugins/jetpack/modules/gravatar-hovercards.php12
-rw-r--r--plugins/jetpack/modules/holiday-snow.php60
-rw-r--r--plugins/jetpack/modules/infinite-scroll.php29
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.js4
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.php277
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css161
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css161
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php41
-rw-r--r--plugins/jetpack/modules/json-api.php1
-rw-r--r--plugins/jetpack/modules/latex.php2
-rw-r--r--plugins/jetpack/modules/likes.php315
-rw-r--r--plugins/jetpack/modules/manage.php38
-rw-r--r--plugins/jetpack/modules/manage/activate-admin.php95
-rw-r--r--plugins/jetpack/modules/manage/confirm-admin.php107
-rw-r--r--plugins/jetpack/modules/markdown.php3
-rw-r--r--plugins/jetpack/modules/markdown/easy-markdown.php43
-rw-r--r--plugins/jetpack/modules/minileven.php1
-rw-r--r--plugins/jetpack/modules/minileven/minileven.php59
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php5
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php15
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php22
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/header.php4
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/image.php10
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/page.php5
-rw-r--r--plugins/jetpack/modules/module-extras.php11
-rw-r--r--plugins/jetpack/modules/module-headings.php59
-rw-r--r--plugins/jetpack/modules/module-info.php748
-rw-r--r--plugins/jetpack/modules/monitor.php8
-rw-r--r--plugins/jetpack/modules/notes.php31
-rw-r--r--plugins/jetpack/modules/omnisearch.php1
-rw-r--r--plugins/jetpack/modules/omnisearch/omnisearch-comments.php4
-rw-r--r--plugins/jetpack/modules/omnisearch/omnisearch-core.php68
-rw-r--r--plugins/jetpack/modules/omnisearch/omnisearch-media.php8
-rw-r--r--plugins/jetpack/modules/omnisearch/omnisearch-plugins.php2
-rw-r--r--plugins/jetpack/modules/omnisearch/omnisearch-posts.php9
-rw-r--r--plugins/jetpack/modules/photon.php9
-rw-r--r--plugins/jetpack/modules/post-by-email.php11
-rw-r--r--plugins/jetpack/modules/protect.php380
-rw-r--r--plugins/jetpack/modules/protect/config-ui.php25
-rw-r--r--plugins/jetpack/modules/protect/math-fallback.php24
-rw-r--r--plugins/jetpack/modules/protect/shared-functions.php230
-rw-r--r--plugins/jetpack/modules/protect/transient-cleanup.php18
-rw-r--r--plugins/jetpack/modules/publicize.php12
-rw-r--r--plugins/jetpack/modules/publicize/assets/publicize-rtl.css15
-rw-r--r--plugins/jetpack/modules/publicize/assets/publicize-rtl.min.css2
-rw-r--r--plugins/jetpack/modules/publicize/assets/publicize.css15
-rw-r--r--plugins/jetpack/modules/publicize/assets/publicize.min.css2
-rw-r--r--plugins/jetpack/modules/publicize/assets/rtl/publicize-rtl.css15
-rw-r--r--plugins/jetpack/modules/publicize/publicize-jetpack.php13
-rw-r--r--plugins/jetpack/modules/publicize/publicize.php118
-rw-r--r--plugins/jetpack/modules/publicize/ui.php236
-rw-r--r--plugins/jetpack/modules/related-posts.php7
-rw-r--r--plugins/jetpack/modules/related-posts/jetpack-related-posts.php207
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.css76
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.js15
-rw-r--r--plugins/jetpack/modules/sharedaddy.php5
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css30
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css2
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.css30
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.min.css2
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-skype.pngbin0 -> 2995 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.pngbin0 -> 6782 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter.pngbin1427 -> 2945 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.pngbin2258 -> 2686 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/stumbleupon.pngbin638 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/stumbleupon@2x.pngbin1423 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/readme.txt129
-rw-r--r--plugins/jetpack/modules/sharedaddy/recaptcha.php179
-rw-r--r--plugins/jetpack/modules/sharedaddy/recaptchalib.php277
-rw-r--r--plugins/jetpack/modules/sharedaddy/screenshot-1.jpgbin48840 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/screenshot-2.jpgbin23781 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharedaddy.php50
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharedaddy.pot404
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-service.php90
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-sources.php660
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.css34
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.js151
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.php32
-rw-r--r--plugins/jetpack/modules/shortcodes.php3
-rw-r--r--plugins/jetpack/modules/shortcodes/audio.php64
-rw-r--r--plugins/jetpack/modules/shortcodes/bandcamp.php100
-rw-r--r--plugins/jetpack/modules/shortcodes/css/rtl/slideshow-shortcode-rtl.css52
-rw-r--r--plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css54
-rw-r--r--plugins/jetpack/modules/shortcodes/dailymotion.php70
-rw-r--r--plugins/jetpack/modules/shortcodes/facebook.php39
-rw-r--r--plugins/jetpack/modules/shortcodes/gist.php31
-rw-r--r--plugins/jetpack/modules/shortcodes/instagram.php47
-rw-r--r--plugins/jetpack/modules/shortcodes/js/facebook.js29
-rw-r--r--plugins/jetpack/modules/shortcodes/js/gist.js28
-rw-r--r--plugins/jetpack/modules/shortcodes/js/instagram.js19
-rw-r--r--plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js49
-rw-r--r--plugins/jetpack/modules/shortcodes/medium.php15
-rw-r--r--plugins/jetpack/modules/shortcodes/mixcloud.php2
-rw-r--r--plugins/jetpack/modules/shortcodes/polldaddy.php370
-rw-r--r--plugins/jetpack/modules/shortcodes/recipe.php8
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshare.php85
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshow.php197
-rw-r--r--plugins/jetpack/modules/shortcodes/soundcloud.php29
-rw-r--r--plugins/jetpack/modules/shortcodes/twitchtv.php79
-rw-r--r--plugins/jetpack/modules/shortcodes/vimeo.php88
-rw-r--r--plugins/jetpack/modules/shortcodes/wufoo.php81
-rw-r--r--plugins/jetpack/modules/shortcodes/youtube.php47
-rw-r--r--plugins/jetpack/modules/shortlinks.php3
-rw-r--r--plugins/jetpack/modules/site-icon.php3
-rw-r--r--plugins/jetpack/modules/site-icon/jetpack-site-icon.php50
-rw-r--r--plugins/jetpack/modules/site-icon/site-icon-functions.php2
-rw-r--r--plugins/jetpack/modules/site-icon/upload-site-icon.php14
-rw-r--r--plugins/jetpack/modules/sitemaps.php26
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-xsl.php147
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemaps.php751
-rw-r--r--plugins/jetpack/modules/sso.php156
-rw-r--r--plugins/jetpack/modules/stats.php225
-rw-r--r--plugins/jetpack/modules/subscriptions.php332
-rw-r--r--plugins/jetpack/modules/theme-tools.php27
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css18
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css18
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css763
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.css763
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.php49
-rw-r--r--plugins/jetpack/modules/theme-tools/featured-content.php51
-rw-r--r--plugins/jetpack/modules/theme-tools/infinite-scroll.php3
-rw-r--r--plugins/jetpack/modules/theme-tools/random-redirect.php2
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos.php71
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css10
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js15
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js2
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo.php25
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php56
-rw-r--r--plugins/jetpack/modules/theme-tools/social-links.php12
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu.php67
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/social-menu.css180
-rw-r--r--plugins/jetpack/modules/tiled-gallery.php1
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery.php42
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css4
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php10
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php8
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php10
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css2
-rw-r--r--plugins/jetpack/modules/vaultpress.php6
-rw-r--r--plugins/jetpack/modules/verification-tools.php3
-rw-r--r--plugins/jetpack/modules/verification-tools/blog-verification-tools.php93
-rw-r--r--plugins/jetpack/modules/videopress.php1
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-player.php137
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-video.php14
-rw-r--r--plugins/jetpack/modules/videopress/shortcode.php53
-rw-r--r--plugins/jetpack/modules/videopress/videopress.php7
-rw-r--r--plugins/jetpack/modules/widget-visibility.php1
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions.php180
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css3
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css2
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css3
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js37
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css2
-rw-r--r--plugins/jetpack/modules/widgets.php3
-rw-r--r--plugins/jetpack/modules/widgets/contact-info.php1
-rw-r--r--plugins/jetpack/modules/widgets/contact-info/contact-info-map.js6
-rw-r--r--plugins/jetpack/modules/widgets/facebook-likebox.php179
-rw-r--r--plugins/jetpack/modules/widgets/facebook-likebox/style.css3
-rw-r--r--plugins/jetpack/modules/widgets/gallery.php33
-rw-r--r--plugins/jetpack/modules/widgets/gallery/js/admin.js7
-rw-r--r--plugins/jetpack/modules/widgets/goodreads.php12
-rw-r--r--plugins/jetpack/modules/widgets/google-plus/js/admin.js22
-rw-r--r--plugins/jetpack/modules/widgets/googleplus-badge.php310
-rw-r--r--plugins/jetpack/modules/widgets/gravatar-profile.php79
-rw-r--r--plugins/jetpack/modules/widgets/image-widget.php44
-rw-r--r--plugins/jetpack/modules/widgets/rsslinks-widget.php52
-rw-r--r--plugins/jetpack/modules/widgets/social-media-icons.php250
-rw-r--r--plugins/jetpack/modules/widgets/social-media-icons/style.css49
-rw-r--r--plugins/jetpack/modules/widgets/top-posts.php177
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline.php14
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget.php1093
-rw-r--r--plugins/jetpack/modules/wpgroho.js4
-rw-r--r--plugins/jetpack/readme.txt1677
-rw-r--r--plugins/jetpack/require-lib.php8
-rw-r--r--plugins/jetpack/scss/atoms/colors/_colors.scss11
-rw-r--r--plugins/jetpack/scss/atoms/icons/_jetpack.scss2
-rw-r--r--plugins/jetpack/scss/jetpack-admin-jitm.scss170
-rw-r--r--plugins/jetpack/scss/jetpack-admin.scss6
-rw-r--r--plugins/jetpack/scss/organisms/_banners.scss151
-rw-r--r--plugins/jetpack/scss/pages/_connection.scss160
-rw-r--r--plugins/jetpack/scss/pages/_manage.scss40
-rw-r--r--plugins/jetpack/scss/templates/_id-crisis.scss9
-rw-r--r--plugins/jetpack/scss/templates/_main.scss123
-rw-r--r--plugins/jetpack/scss/templates/_module-overhaul.scss279
-rw-r--r--plugins/jetpack/scss/templates/_nux-landing-2015.scss694
-rw-r--r--plugins/jetpack/scss/templates/_settings.scss64
-rw-r--r--plugins/jetpack/to-test.md287
-rw-r--r--plugins/jetpack/views/admin/admin-page.php293
-rw-r--r--plugins/jetpack/views/admin/landing-page-templates.php80
-rw-r--r--plugins/jetpack/views/admin/module-modal-template.php2
-rw-r--r--plugins/jetpack/views/admin/must-connect-main-blog.php8
-rw-r--r--plugins/jetpack/views/admin/my-jetpack-page.php173
-rw-r--r--plugins/jetpack/views/admin/network-admin-alert.php6
-rw-r--r--plugins/jetpack/views/admin/network-admin-header.php5
-rw-r--r--plugins/jetpack/views/admin/network-settings.php27
-rw-r--r--plugins/openid/Auth/OpenID.php563
-rw-r--r--plugins/openid/Auth/OpenID/AX.php1022
-rw-r--r--plugins/openid/Auth/OpenID/Association.php610
-rw-r--r--plugins/openid/Auth/OpenID/BigMath.php452
-rw-r--r--plugins/openid/Auth/OpenID/Consumer.php2234
-rw-r--r--plugins/openid/Auth/OpenID/CryptUtil.php122
-rw-r--r--plugins/openid/Auth/OpenID/DatabaseConnection.php130
-rw-r--r--plugins/openid/Auth/OpenID/DiffieHellman.php113
-rw-r--r--plugins/openid/Auth/OpenID/Discover.php606
-rw-r--r--plugins/openid/Auth/OpenID/DumbStore.php99
-rw-r--r--plugins/openid/Auth/OpenID/Extension.php61
-rw-r--r--plugins/openid/Auth/OpenID/FileStore.php618
-rw-r--r--plugins/openid/Auth/OpenID/HMAC.php98
-rw-r--r--plugins/openid/Auth/OpenID/Interface.php196
-rw-r--r--plugins/openid/Auth/OpenID/KVForm.php111
-rw-r--r--plugins/openid/Auth/OpenID/MDB2Store.php413
-rw-r--r--plugins/openid/Auth/OpenID/MemcachedStore.php207
-rw-r--r--plugins/openid/Auth/OpenID/Message.php920
-rw-r--r--plugins/openid/Auth/OpenID/MySQLStore.php77
-rw-r--r--plugins/openid/Auth/OpenID/Nonce.php108
-rw-r--r--plugins/openid/Auth/OpenID/PAPE.php300
-rw-r--r--plugins/openid/Auth/OpenID/Parse.php377
-rw-r--r--plugins/openid/Auth/OpenID/PostgreSQLStore.php112
-rw-r--r--plugins/openid/Auth/OpenID/SQLStore.php557
-rw-r--r--plugins/openid/Auth/OpenID/SQLiteStore.php70
-rw-r--r--plugins/openid/Auth/OpenID/SReg.php521
-rw-r--r--plugins/openid/Auth/OpenID/Server.php1765
-rw-r--r--plugins/openid/Auth/OpenID/ServerRequest.php36
-rw-r--r--plugins/openid/Auth/OpenID/TrustRoot.php461
-rw-r--r--plugins/openid/Auth/OpenID/URINorm.php249
-rw-r--r--plugins/openid/Auth/Yadis/HTTPFetcher.php174
-rw-r--r--plugins/openid/Auth/Yadis/Manager.php521
-rw-r--r--plugins/openid/Auth/Yadis/Misc.php58
-rw-r--r--plugins/openid/Auth/Yadis/ParanoidHTTPFetcher.php245
-rw-r--r--plugins/openid/Auth/Yadis/ParseHTML.php258
-rw-r--r--plugins/openid/Auth/Yadis/PlainHTTPFetcher.php248
-rw-r--r--plugins/openid/Auth/Yadis/XML.php352
-rw-r--r--plugins/openid/Auth/Yadis/XRDS.php478
-rw-r--r--plugins/openid/Auth/Yadis/XRI.php234
-rw-r--r--plugins/openid/Auth/Yadis/XRIRes.php72
-rw-r--r--plugins/openid/Auth/Yadis/Yadis.php382
-rw-r--r--plugins/openid/LICENSE202
-rw-r--r--plugins/openid/admin_panels.php138
-rw-r--r--plugins/openid/comments.php31
-rw-r--r--plugins/openid/common.php77
-rw-r--r--plugins/openid/consumer.php26
-rw-r--r--plugins/openid/f/openid.css16
-rw-r--r--plugins/openid/f/register.js10
-rw-r--r--plugins/openid/lib/Auth/OpenID/Consumer.php21
-rw-r--r--plugins/openid/lib/Auth/OpenID/Extension.php11
-rw-r--r--plugins/openid/lib/Auth/OpenID/FileStore.php13
-rw-r--r--plugins/openid/lib/Auth/OpenID/MDB2Store.php26
-rw-r--r--plugins/openid/lib/Auth/OpenID/Message.php6
-rw-r--r--plugins/openid/lib/Auth/OpenID/PredisStore.php211
-rw-r--r--plugins/openid/lib/Auth/OpenID/SQLStore.php2
-rw-r--r--plugins/openid/lib/Auth/OpenID/TrustRoot.php4
-rw-r--r--plugins/openid/lib/Auth/OpenID/URINorm.php12
-rw-r--r--plugins/openid/lib/Auth/Yadis/Manager.php4
-rw-r--r--plugins/openid/lib/Auth/Yadis/ParanoidHTTPFetcher.php16
-rw-r--r--plugins/openid/lib/Auth/Yadis/ParseHTML.php25
-rw-r--r--plugins/openid/lib/Auth/Yadis/XML.php24
-rw-r--r--plugins/openid/lib/Auth/Yadis/XRDS.php2
-rw-r--r--plugins/openid/lib/Auth/Yadis/Yadis.php2
-rw-r--r--plugins/openid/localization/openid-de_DE.mobin0 -> 14774 bytes
-rw-r--r--plugins/openid/localization/openid-de_DE.po531
-rw-r--r--plugins/openid/localization/openid-pt_BR.mobin0 -> 13608 bytes
-rw-r--r--plugins/openid/localization/openid-pt_BR.po498
-rw-r--r--plugins/openid/localization/openid-zh_CN.mobin0 -> 12715 bytes
-rw-r--r--plugins/openid/localization/openid-zh_CN.po544
-rw-r--r--plugins/openid/login.php63
-rw-r--r--plugins/openid/openid.php154
-rw-r--r--plugins/openid/readme.txt73
-rw-r--r--plugins/openid/server.php80
-rw-r--r--plugins/openid/server_ext.php117
-rw-r--r--plugins/openid/store.php35
-rw-r--r--plugins/public-post-preview/lang/ds-public-post-preview-de_DE.mobin1213 -> 0 bytes
-rw-r--r--plugins/public-post-preview/lang/ds-public-post-preview-de_DE.po88
-rw-r--r--plugins/public-post-preview/lang/ds-public-post-preview-xx_XX.pot21
-rw-r--r--plugins/public-post-preview/public-post-preview.php31
-rw-r--r--plugins/public-post-preview/readme.txt9
-rw-r--r--plugins/table-of-contents-plus/admin.css15
-rw-r--r--plugins/table-of-contents-plus/admin.js14
-rw-r--r--plugins/table-of-contents-plus/front.js193
-rw-r--r--plugins/table-of-contents-plus/front.min.js1
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-da_DK.mobin0 -> 11761 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-da_DK.po560
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-de_DE.mo (renamed from plugins/table-of-contents-plus/languages/toc+-de_DE.mo)bin26416 -> 26416 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-de_DE.po (renamed from plugins/table-of-contents-plus/languages/toc+-de_DE.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-el_GR.mobin0 -> 15971 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-el_GR.po575
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-es_ES.mobin0 -> 12571 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-es_ES.po568
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-fr_FR.mo (renamed from plugins/table-of-contents-plus/languages/toc+-fr_FR.mo)bin25306 -> 25306 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-fr_FR.po (renamed from plugins/table-of-contents-plus/languages/toc+-fr_FR.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-he_IL.mobin0 -> 13553 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-he_IL.po534
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-ja.mobin0 -> 11032 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-ja.po (renamed from plugins/table-of-contents-plus/languages/toc+.pot)247
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-nl_NL.mo (renamed from plugins/table-of-contents-plus/languages/toc+-nl_NL.mo)bin24974 -> 24974 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-nl_NL.po (renamed from plugins/table-of-contents-plus/languages/toc+-nl_NL.po)0
-rw-r--r--[-rwxr-xr-x]plugins/table-of-contents-plus/languages/table-of-contents-plus-pl_PL.mo (renamed from plugins/table-of-contents-plus/languages/toc+-pl_PL.mo)bin24818 -> 24818 bytes
-rw-r--r--[-rwxr-xr-x]plugins/table-of-contents-plus/languages/table-of-contents-plus-pl_PL.po (renamed from plugins/table-of-contents-plus/languages/toc+-pl_PL.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-pt_BR.mobin0 -> 11990 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-pt_BR.po900
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-sk_SK.mo (renamed from plugins/table-of-contents-plus/languages/toc+-sk_SK.mo)bin24881 -> 24881 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-sk_SK.po (renamed from plugins/table-of-contents-plus/languages/toc+-sk_SK.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-uk_UA.mo (renamed from plugins/table-of-contents-plus/languages/toc+-uk_UA.mo)bin32712 -> 32712 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-uk_UA.po (renamed from plugins/table-of-contents-plus/languages/toc+-uk_UA.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-zh_CN.mo (renamed from plugins/table-of-contents-plus/languages/toc+-zh_CN.mo)bin23236 -> 23236 bytes
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus-zh_CN.po (renamed from plugins/table-of-contents-plus/languages/toc+-zh_CN.po)0
-rw-r--r--plugins/table-of-contents-plus/languages/table-of-contents-plus.pot513
-rw-r--r--plugins/table-of-contents-plus/readme.txt47
-rw-r--r--plugins/table-of-contents-plus/screen.css93
-rw-r--r--plugins/table-of-contents-plus/screen.min.css1
-rw-r--r--plugins/table-of-contents-plus/toc.php424
-rw-r--r--plugins/wordpress-mobile-pack/admin/class-admin-ajax.php1095
-rw-r--r--plugins/wordpress-mobile-pack/admin/class-admin-init.php290
-rw-r--r--plugins/wordpress-mobile-pack/admin/class-admin.php388
-rw-r--r--plugins/wordpress-mobile-pack/admin/css/fonts.css39
-rw-r--r--plugins/wordpress-mobile-pack/admin/css/general-min.css9
-rw-r--r--plugins/wordpress-mobile-pack/admin/css/general.css148
-rw-r--r--plugins/wordpress-mobile-pack/admin/css/main.css3093
-rw-r--r--plugins/wordpress-mobile-pack/admin/css/perfect-scrollbar.css125
-rw-r--r--plugins/wordpress-mobile-pack/admin/fonts/Appticles-font.eotbin3052 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/fonts/Appticles-font.svg18
-rw-r--r--plugins/wordpress-mobile-pack/admin/fonts/Appticles-font.ttfbin2860 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/fonts/Appticles-font.woffbin2800 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app-icon.pngbin15060 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app2/1-preview-cover.png (renamed from plugins/wordpress-mobile-pack/admin/images/lifestyletheme/1-preview-phone-cover.png)bin240586 -> 240586 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app2/2-preview-categories.png (renamed from plugins/wordpress-mobile-pack/admin/images/lifestyletheme/2-preview-phone-categories.png)bin105914 -> 105914 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app2/3-preview-menu.png (renamed from plugins/wordpress-mobile-pack/admin/images/lifestyletheme/3-preview-phone-menu.png)bin86627 -> 86627 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app2/4-preview-article.png (renamed from plugins/wordpress-mobile-pack/admin/images/lifestyletheme/4-preview-phone-article.png)bin131571 -> 131571 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app3/1-preview-cover.png (renamed from plugins/wordpress-mobile-pack/admin/images/businesstheme/1-preview-phone-cover.png)bin167097 -> 167097 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app3/2-preview-categories.png (renamed from plugins/wordpress-mobile-pack/admin/images/businesstheme/2-preview-phone-categories.png)bin113501 -> 113501 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app3/3-preview-menu.png (renamed from plugins/wordpress-mobile-pack/admin/images/businesstheme/3-preview-phone-menu.png)bin181059 -> 181059 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app3/4-preview-article.png (renamed from plugins/wordpress-mobile-pack/admin/images/businesstheme/4-preview-phone-article.png)bin129744 -> 129744 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app4/1-homepage.pngbin0 -> 120477 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app4/2-menu-opened.pngbin0 -> 109023 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app4/3-categories-opened.pngbin0 -> 131445 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app4/4-others-opened.pngbin0 -> 101199 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app4/5-article-details.pngbin0 -> 172225 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/1-preview-homepage.pngbin0 -> 164839 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/2-preview-articles.pngbin0 -> 146002 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/3-preview-menu.pngbin0 -> 49171 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/4-preview-menu-categories.pngbin0 -> 103374 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/5-preview-article-details.pngbin0 -> 141803 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/app5/6-preview-article-details-menu.pngbin0 -> 130862 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/businesstheme/5-preview-phone-social.pngbin124508 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/content-icons.pngbin8815 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/lifestyletheme/5-preview-phone-social.pngbin125009 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/theme-1.jpgbin73643 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/theme-2.jpgbin78621 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/theme-3.jpgbin101394 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/themes/theme-1.jpgbin0 -> 33583 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/themes/theme-2.jpgbin0 -> 18073 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/themes/theme-3.jpgbin0 -> 22592 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/themes/theme-4.jpgbin0 -> 19340 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/images/themes/theme-5.jpgbin0 -> 25664 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Interface/JSInterface.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_EDIT_CATEGORIES.js7
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_EDIT_CATEGORIES.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_EDIT_PAGES.js136
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_EDIT_PAGES.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_PAGE_DETAILS.js48
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Content/WMP_PAGE_DETAILS.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Feedback/WMP_SEND_FEEDBACK.js295
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Feedback/WMP_SEND_FEEDBACK.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_ALLOW_TRACKING.js8
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_ALLOW_TRACKING.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_APP_SETTINGS.js (renamed from plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_EDIT_DISPLAY.js)38
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_APP_SETTINGS.min.js1
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_CONNECT.js4
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_CONNECT.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_DISCONNECT.js68
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_DISCONNECT.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Settings/WMP_EDIT_DISPLAY.min.js1
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_COVER.js9
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_COVER.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_IMAGES.js8
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_IMAGES.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_THEME.js224
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_EDIT_THEME.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_THEMES_GALLERY.js230
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Theming/WMP_THEMES_GALLERY.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Waitlist/WMP_UPGRADE_NOTICE.js63
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Waitlist/WMP_UPGRADE_NOTICE.min.js10
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Waitlist/WMP_WAITLIST.js16
-rw-r--r--plugins/wordpress-mobile-pack/admin/js/UI.Modules/Waitlist/WMP_WAITLIST.min.js2
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/content.php (renamed from plugins/wordpress-mobile-pack/admin/wmp-admin-content.php)187
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/page-details.php (renamed from plugins/wordpress-mobile-pack/admin/wmp-admin-page-details.php)69
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/premium.php (renamed from plugins/wordpress-mobile-pack/admin/wmp-admin-premium.php)107
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/settings.php235
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/theme.php514
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/upgrade.php145
-rw-r--r--plugins/wordpress-mobile-pack/admin/pages/whats-new.php (renamed from plugins/wordpress-mobile-pack/admin/wmp-admin-main.php)30
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/config.rb21
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_buttons.scss100
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_core.scss445
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_fonts.scss11
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_forms.scss409
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_ie.scss (renamed from plugins/wordpress-mobile-pack/admin/css/ie.css)13
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/core/_variables.scss101
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/WP Dashboard.json588
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-regular.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-regular.eot)bin25550 -> 25550 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-regular.otf (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-regular.otf)bin142648 -> 142648 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-regular.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-regular.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-regular.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-regular.ttf)bin78548 -> 78548 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-regular.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-regular.woff)bin28940 -> 28940 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-semibold.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-semibold.eot)bin26084 -> 26084 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-semibold.otf (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-semibold.otf)bin140888 -> 140888 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-semibold.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-semibold.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-semibold.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-semibold.ttf)bin75088 -> 75088 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/acorde-semibold.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/acorde-semibold.woff)bin29404 -> 29404 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/ol-round-gothic-light.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/ol-round-gothic-light.eot)bin15471 -> 15471 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/ol-round-gothic-light.otf (renamed from plugins/wordpress-mobile-pack/admin/fonts/ol-round-gothic-light.otf)bin64032 -> 64032 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/ol-round-gothic-light.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/ol-round-gothic-light.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/ol-round-gothic-light.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/ol-round-gothic-light.ttf)bin36324 -> 36324 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/ol-round-gothic-light.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/ol-round-gothic-light.woff)bin17720 -> 17720 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/open-sans-regular.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/open-sans-regular.eot)bin21096 -> 21096 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/open-sans-regular.otf (renamed from plugins/wordpress-mobile-pack/admin/fonts/open-sans-regular.otf)bin54272 -> 54272 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/open-sans-regular.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/open-sans-regular.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/open-sans-regular.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/open-sans-regular.ttf)bin45112 -> 45112 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/open-sans-regular.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/open-sans-regular.woff)bin24728 -> 24728 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-italic.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-italic.eot)bin23404 -> 23404 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-italic.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-italic.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-italic.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-italic.ttf)bin51188 -> 51188 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-italic.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-italic.woff)bin27212 -> 27212 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-semibold.eot (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-semibold.eot)bin21299 -> 21299 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-semibold.svg (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-semibold.svg)0
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-semibold.ttf (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-semibold.ttf)bin45160 -> 45160 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/opensans-semibold.woff (renamed from plugins/wordpress-mobile-pack/admin/fonts/opensans-semibold.woff)bin24912 -> 24912 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/wp-font.eotbin0 -> 7240 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/wp-font.svg53
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/wp-font.ttfbin0 -> 7076 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/fonts/wp-font.woffbin0 -> 7156 bytes
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/general.scss33
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/mixins/_display.scss154
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/mixins/_icon.scss55
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/mixins/_mixins.scss115
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_content.scss264
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_look-and-feel.scss593
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_more.scss169
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_perfect-scrollbar.scss128
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_settings.scss32
-rw-r--r--plugins/wordpress-mobile-pack/admin/sass/modules/_whats-new.scss66
-rw-r--r--plugins/wordpress-mobile-pack/admin/sections/admin-menu.php (renamed from plugins/wordpress-mobile-pack/admin/sections/wmp-admin-menu.php)22
-rw-r--r--plugins/wordpress-mobile-pack/admin/sections/feedback.php (renamed from plugins/wordpress-mobile-pack/admin/sections/wmp-feedback.php)40
-rw-r--r--plugins/wordpress-mobile-pack/admin/sections/news.php (renamed from plugins/wordpress-mobile-pack/admin/sections/wmp-news.php)22
-rw-r--r--plugins/wordpress-mobile-pack/admin/sections/waitlist.php57
-rw-r--r--plugins/wordpress-mobile-pack/admin/sections/wmp-waitlist.php58
-rw-r--r--plugins/wordpress-mobile-pack/admin/wmp-admin-settings.php175
-rw-r--r--plugins/wordpress-mobile-pack/admin/wmp-admin-theme.php554
-rw-r--r--plugins/wordpress-mobile-pack/admin/wmp-admin-upgrade.php97
-rw-r--r--plugins/wordpress-mobile-pack/core/class-admin.php1325
-rw-r--r--plugins/wordpress-mobile-pack/core/class-tracking.php160
-rw-r--r--plugins/wordpress-mobile-pack/core/class-wmp.php1373
-rw-r--r--plugins/wordpress-mobile-pack/core/config-uploads.php20
-rw-r--r--plugins/wordpress-mobile-pack/core/config.php16
-rw-r--r--plugins/wordpress-mobile-pack/core/mobile-detect.php63
-rw-r--r--plugins/wordpress-mobile-pack/export/.htaccess7
-rw-r--r--plugins/wordpress-mobile-pack/export/class-export.php1447
-rw-r--r--plugins/wordpress-mobile-pack/export/content.php159
-rw-r--r--plugins/wordpress-mobile-pack/export/export-class.php1728
-rw-r--r--plugins/wordpress-mobile-pack/frontend/class-application.php389
-rw-r--r--plugins/wordpress-mobile-pack/frontend/class-detect.php165
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/.htaccess16
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-1.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-2.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-3.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-4.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-5.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-6.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-7.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-8.css5
-rw-r--r--plugins/wordpress-mobile-pack/frontend/fonts/font-9.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/.htaccess10
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-1.jpgbin0 -> 77935 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-2.jpgbin0 -> 123316 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-3.jpgbin0 -> 116283 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-4.jpgbin0 -> 64003 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-5.jpgbin0 -> 71319 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/images/pattern-6.jpgbin0 -> 68873 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/de_DE.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/default.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/en_EN.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/es_ES.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/fr_FR.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/hu_HU.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/it_IT.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/pl_PL.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/pt_BR.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/ro_RO.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/locales/sv_SE.json51
-rw-r--r--plugins/wordpress-mobile-pack/frontend/sections/htaccess-template.txt31
-rw-r--r--plugins/wordpress-mobile-pack/frontend/sections/show-mobile-link.php19
-rw-r--r--plugins/wordpress-mobile-pack/frontend/sections/show-rel-premium.php52
-rw-r--r--plugins/wordpress-mobile-pack/frontend/sections/show-rel.php76
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/.htaccess39
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/category.php15
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-1-fonts-1.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-1-fonts-2.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-1-fonts-3.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-2-fonts-1.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-2-fonts-2.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-2-fonts-3.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-3-fonts-1.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-3-fonts-2.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/css/colors-3-fonts-3.css1
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/index.php2
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/js/app.js18
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/others/credits.json (renamed from plugins/wordpress-mobile-pack/themes/base/includes/others/credits.json)0
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/page.php14
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/scss/phone.scss11113
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/single.php (renamed from plugins/wordpress-mobile-pack/themes/base/single.php)4
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/snapshots/1-preview-phone-cover.png (renamed from plugins/wordpress-mobile-pack/themes/base/snapshots/1-preview-phone-cover.png)bin292291 -> 292291 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/snapshots/2-preview-phone-categories.png (renamed from plugins/wordpress-mobile-pack/themes/base/snapshots/2-preview-phone-categories.png)bin175123 -> 175123 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/snapshots/3-preview-phone-menu.png (renamed from plugins/wordpress-mobile-pack/themes/base/snapshots/3-preview-phone-menu.png)bin234747 -> 234747 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/snapshots/4-preview-phone-article.png (renamed from plugins/wordpress-mobile-pack/themes/base/snapshots/4-preview-phone-article.png)bin146073 -> 146073 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/snapshots/5-preview-phone-comments.png (renamed from plugins/wordpress-mobile-pack/themes/base/snapshots/5-preview-phone-comments.png)bin72347 -> 72347 bytes
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/app1/template.php176
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/premium/category.php (renamed from plugins/wordpress-mobile-pack/themes/premium/category.php)12
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/premium/index.php (renamed from plugins/wordpress-mobile-pack/themes/base/index.php)0
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/premium/page.php (renamed from plugins/wordpress-mobile-pack/themes/premium/page.php)15
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/premium/single.php (renamed from plugins/wordpress-mobile-pack/themes/premium/single.php)11
-rw-r--r--plugins/wordpress-mobile-pack/frontend/themes/premium/template.php380
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-cookie.php54
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-formatter.php194
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-options.php297
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-premium.php241
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-themes-compiler.php224
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-themes-config.php98
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-tokens.php79
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-tracking.php160
-rw-r--r--plugins/wordpress-mobile-pack/inc/class-wmp-uploads.php203
-rw-r--r--plugins/wordpress-mobile-pack/index.php2
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/LICENSE.txt48
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/Mobile_Detect.json1
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/Mobile_Detect.php1350
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/README.md224
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/composer.json30
-rw-r--r--plugins/wordpress-mobile-pack/libs/Mobile-Detect-2.8.12/namespaced/Detection/MobileDetect.php22
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier.includes.php2
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier.safe-includes.php8
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier/Filter/Iframe.php60
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier/URIScheme/skype.php32
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier/URIScheme/sms.php31
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-4.6.0/library/HTMLPurifier/URIScheme/whatsapp.php31
-rw-r--r--plugins/wordpress-mobile-pack/libs/htmlpurifier-html5/htmlpurifier_html5.php141
-rw-r--r--plugins/wordpress-mobile-pack/libs/mobileesp/mdetect.php1184
-rw-r--r--plugins/wordpress-mobile-pack/libs/safestring/safeString.php105
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/LICENSE.md20
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/README.md47
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/classmap.php63
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/composer.json44
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/scss.inc.php21
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Base/Range.php47
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Colors.php176
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Compiler.php4463
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php167
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter/Compact.php44
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter/Compressed.php89
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter/Crunched.php76
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter/Expanded.php56
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter/Nested.php145
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Parser.php2342
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Server.php454
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Util.php55
-rw-r--r--plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Version.php22
-rw-r--r--plugins/wordpress-mobile-pack/readme.txt154
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-10.jpgbin0 -> 172242 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-10.pngbin112071 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-11.jpgbin0 -> 163709 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-11.pngbin432294 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-7.jpgbin0 -> 502702 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-7.pngbin833589 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-8.jpgbin0 -> 289162 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-8.pngbin487221 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-9.jpgbin0 -> 115352 bytes
-rw-r--r--plugins/wordpress-mobile-pack/screenshot-9.pngbin102585 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/sections/wmp-show-mobile.php3
-rw-r--r--plugins/wordpress-mobile-pack/sections/wmp-show-rel-premium.php51
-rw-r--r--plugins/wordpress-mobile-pack/sections/wmp-show-rel.php62
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/android-manifest.php15
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/category.php21
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/app.extended.js67862
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/app.js1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/font-1.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/font-2.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/font-3.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/fonts.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/headlines-f1.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/headlines-f2.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/headlines-f3.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/paragraphs-f1.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/paragraphs-f2.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/paragraphs-f3.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/phone.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/subtitles-f1.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/subtitles-f2.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/subtitles-f3.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/theme-1.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/theme-2.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/css/theme-3.css1
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-1.jpgbin408604 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-2.jpgbin531266 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-3.jpgbin607029 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-4.jpgbin322478 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-5.jpgbin359092 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/includes/resources/images/pattern-6.jpgbin339797 -> 0 bytes
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/mozilla-manifest.php15
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/page.php14
-rw-r--r--plugins/wordpress-mobile-pack/themes/base/template.php214
-rw-r--r--plugins/wordpress-mobile-pack/themes/premium/index.php3
-rw-r--r--plugins/wordpress-mobile-pack/themes/premium/template.php38
-rw-r--r--plugins/wordpress-mobile-pack/themes/premium/template_250.php303
-rw-r--r--plugins/wordpress-mobile-pack/themes/premium/template_260.php340
-rw-r--r--plugins/wordpress-mobile-pack/uninstall.php33
-rw-r--r--plugins/wordpress-mobile-pack/wordpress-mobile-pack.php105
930 files changed, 69082 insertions, 107440 deletions
diff --git a/plugins/easy-table/easy-table.php b/plugins/easy-table/easy-table.php
index 6cc6b4be..4bfe2854 100644
--- a/plugins/easy-table/easy-table.php
+++ b/plugins/easy-table/easy-table.php
@@ -4,7 +4,7 @@ Plugin Name: Easy Table
Plugin URI: http://takien.com/
Description: Create table in post, page, or widget in easy way.
Author: Takien
-Version: 1.5.2
+Version: 1.6
Author URI: http://takien.com/
*/
@@ -106,7 +106,7 @@ function __construct(){
private function easy_table_base($return){
$easy_table_base = Array(
'name' => 'Easy Table',
- 'version' => '1.5.2',
+ 'version' => '1.6',
'plugin-domain' => 'easy-table'
);
return $easy_table_base[$return];
@@ -163,7 +163,9 @@ function easy_table_short_code($atts, $content="") {
'style' => '', /*table inline style, since 1.0*/
'colalign' => '', /*column align, ex: [table colalign="left|right|center"], @since 1.0*/
'colwidth' => '', /*column width, ex: [table colwidth="100|200|300"], @since 1.0*/
- 'fixlinebreak' => $this->option('fixlinebreak') /* fix linebreak on cell if terminator is not \n or \r @since 1.1.4 */
+ 'fixlinebreak' => $this->option('fixlinebreak'), /* fix linebreak on cell if terminator is not \n or \r @since 1.1.4 */
+ 'exclude_row' => '',
+ 'exclude_col' => '',
), $atts);
/**
* because clean_pre is deprecated since WordPress 3.4, then replace it manually
@@ -197,13 +199,23 @@ function easy_table_short_code_attr($atts){
*/
private function csv_to_table($data,$args){
extract($args);
+
+ /** check param value if it is expected to be boolean
+ * @since: 1.6
+ **/
+ $th = filter_var($th, FILTER_VALIDATE_BOOLEAN);
+ $trim = filter_var($trim, FILTER_VALIDATE_BOOLEAN);
+ if($tf !== 'last') {
+ $tf = filter_var($tf, FILTER_VALIDATE_BOOLEAN);
+ }
+
if( $this->option('csvfile') AND $file ){
/*$data = @file_get_contents($file);*/
/** use wp_remote_get
* @since 0.8
*/
$data = '';
- $response = wp_remote_get($file);
+ $response = wp_remote_get( $file, array('sslverify'=>false) );
/**
notify if error reading file.
@since 0.9
@@ -238,6 +250,24 @@ private function csv_to_table($data,$args){
if(empty($data)) return false;
+ /** exclude row or col
+ * @since: 1.6
+ **/
+
+ if( $exclude_row ) {
+ $exclude_row = explode(',',$exclude_row);
+ foreach( $exclude_row as $x_row ) {
+ if(isset($data[$x_row-1])) {
+ unset($data[$x_row-1]);
+ }
+ }
+ }
+
+ if( $exclude_col ) {
+ $exclude_col = explode(',',$exclude_col);
+ }
+
+
$max_cols = count(max($data));
$r=0;
@@ -313,6 +343,15 @@ private function csv_to_table($data,$args){
foreach($data as $k=>$cols){ $r++;
//$cols = array_pad($cols,$max_cols,'');
+ // exclude cols, @since: 1.6
+ if(is_array($exclude_col)) {
+ foreach( $exclude_col as $x_col ) {
+ if(isset($cols[$x_col-1])) {
+ unset($cols[$x_col-1]);
+ }
+ }
+ }
+
$output .= (($r==$tfpos) AND $tf) ? (($tf=='last')?'</tbody>':'').'<tfoot>': '';
$output .= "\r\n".'<tr>';
@@ -345,7 +384,8 @@ ai head, text to shown in the table head row, default is No.
* Add attribute for each cell
* @since 0.5
*/
- preg_match('/\['.$this->option('attrtag').' ([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)/',$cell,$matchattr);
+ //preg_match('/\['.$this->option('attrtag').' ([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)/',$cell,$matchattr);
+ preg_match('/\['.$this->option('attrtag').' ([^\\]]*)/',$cell,$matchattr);
$attr = isset($matchattr[1]) ? $matchattr[1] : '';
/**
* extract $attr value
@@ -952,7 +992,7 @@ no,head1,head2,head3,head4
[/table] ';
$tableexample = $defaulttableexample;
if(isset($_POST['test-easy-table'])){
- $tableexample = $_POST['easy-table-test-area'];
+ $tableexample = strip_tags($_POST['easy-table-test-area'],'<p><a><img>');
}
if(isset($_POST['test-easy-table-reset'])){
@@ -975,12 +1015,14 @@ if(isset($_POST['test-easy-table-reset'])){
<li><strong>tablesorter</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
<li><strong>file</strong>, <?php _e('default value','easy-table');?> <em>'false'</em></li>
<li><strong>sort</strong>, <?php _e('default value','easy-table');?> <em>''</em></li>
-<li class="new"><strong>trim</strong>, <?php _e('default value','easy-table');?> <em>false</em></li>
-<li class="new"><strong>style</strong>, <?php _e('default value','easy-table');?> <em>''</em></li>
-<li class="new"><strong>limit</strong>, <?php _e('default value','easy-table');?> <em>0</em></li>
-<li class="new"><strong>terminator</strong>, <?php _e('default value','easy-table');?> <em>\n</em></li>
-<li class="new"><strong>colalign</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
-<li class="new"><strong>colwidth</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
+<li><strong>trim</strong>, <?php _e('default value','easy-table');?> <em>false</em></li>
+<li><strong>style</strong>, <?php _e('default value','easy-table');?> <em>''</em></li>
+<li><strong>limit</strong>, <?php _e('default value','easy-table');?> <em>0</em></li>
+<li><strong>terminator</strong>, <?php _e('default value','easy-table');?> <em>\n</em></li>
+<li><strong>colalign</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
+<li><strong>colwidth</strong>, <?php _e('default value','easy-table');?> <em>''</em>, see example on the test area</li>
+<li><strong>exclude_row</strong>, <?php _e('default value','easy-table');?> <em>''</em>, comma separated value, ex: exclude_row="1,3,5"</li>
+<li><strong>exclude_col</strong>, <?php _e('default value','easy-table');?> <em>''</em>, comma separated value, ex: exclude_col="1,3,5"</li>
</ol>
<h3><?php printf('Example usage of %s parameter','sort','easy-table');?></h3>
<p><em>sort</em> <?php _e('parameter is for initial sorting order. Value for each column separated by comma. See example below:','easy-table');?></p>
@@ -1074,53 +1116,7 @@ col4,col5,col6
</div>
<?php elseif($_GET['gettab'] == 'support') : ?>
-<p><?php _e('I have tried to make this plugin can be used as easy as possible and documentation as complete as possible. However it is also possible that you are still confused. Therefore feel free to ask. I would be happy to answer.','easy-table');?></p>
-<p><?php _e('You can use this discussion to get support, request feature or reporting bug.','easy-table');?></p>
-<p><a target="_blank" href="http://takien.com/plugins/easy-table"><?php _e('Before you ask something, make sure you have read documentation here!','easy-table');?></a></p>
-
-<div id="disqus_thread"></div>
-<script type="text/javascript">
-/* <![CDATA[ */
- var disqus_url = 'http://takien.com/1126/easy-table-is-the-easiest-way-to-create-table-in-wordpress.php';
- var disqus_identifier = '1126 http://takien.com/?p=1126';
- var disqus_container_id = 'disqus_thread';
- var disqus_domain = 'disqus.com';
- var disqus_shortname = 'takien';
- var disqus_title = "Easy Table is The Easiest Way to Create Table in WordPress";
- var disqus_config = function () {
- var config = this;
- config.callbacks.preData.push(function() {
- // clear out the container (its filled for SEO/legacy purposes)
- document.getElementById(disqus_container_id).innerHTML = '';
- });
- config.callbacks.onReady.push(function() {
- // sync comments in the background so we don't block the page
- DISQUS.request.get('?cf_action=sync_comments&post_id=1126');
- });
- };
- var facebookXdReceiverPath = 'http://takien.com/wp-content/plugins/disqus-comment-system/xd_receiver.htm';
-/* ]]> */
-</script>
-
-<script type="text/javascript">
-/* <![CDATA[ */
- var DsqLocal = {
- 'trackbacks': [
- ],
- 'trackback_url': "http:\/\/takien.com\/1126\/easy-table-is-the-easiest-way-to-create-table-in-wordpress.php\/trackback" };
-/* ]]> */
-</script>
-
-<script type="text/javascript">
-/* <![CDATA[ */
-(function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript';
- dsq.async = true;
- dsq.src = 'http' + '://' + disqus_shortname + '.' + disqus_domain + '/embed.js?pname=wordpress&pver=2.72';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
-})();
-/* ]]> */
-</script>
+<p>To ask question, please visit this plugin support on WordPress.org</p>
<?php elseif ($_GET['gettab'] == 'about') : ?>
<?php
require_once(ABSPATH.'wp-admin/includes/plugin-install.php');
diff --git a/plugins/easy-table/languages/easy-table-id_ID.mo b/plugins/easy-table/languages/easy-table-id_ID.mo
index 67f4cda3..a77b899d 100644
--- a/plugins/easy-table/languages/easy-table-id_ID.mo
+++ b/plugins/easy-table/languages/easy-table-id_ID.mo
Binary files differ
diff --git a/plugins/easy-table/languages/easy-table-id_ID.po b/plugins/easy-table/languages/easy-table-id_ID.po
index 49762b6a..687bdf3a 100644
--- a/plugins/easy-table/languages/easy-table-id_ID.po
+++ b/plugins/easy-table/languages/easy-table-id_ID.po
@@ -1,9 +1,9 @@
msgid ""
msgstr ""
-"Project-Id-Version: easy-table 1.5.1\n"
+"Project-Id-Version: easy-table 1.6\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-18 23:23+0700\n"
-"PO-Revision-Date: 2014-07-18 23:23+0700\n"
+"POT-Creation-Date: 2016-01-23 19:17+0700\n"
+"PO-Revision-Date: 2016-01-23 19:18+0700\n"
"Last-Translator: takien <contact@takien.com>\n"
"Language-Team: takien.com <contact@takien.com>\n"
"Language: id_ID\n"
@@ -11,12 +11,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: __;_e\n"
-"X-Poedit-Basepath: ../\n"
+"X-Poedit-Basepath: ..\n"
"X-Poedit-SourceCharset: UTF-8\n"
-"X-Generator: Poedit 1.5.7\n"
+"X-Generator: Poedit 1.8.6\n"
"X-Poedit-SearchPath-0: .\n"
-#: easy-table.php:119 easy-table.php:127 easy-table.php:135
+#: easy-table.php:120 easy-table.php:128 easy-table.php:136
#, php-format
msgid ""
"It seems that %1$s shortcode already used by another plugin and potentially "
@@ -24,291 +24,291 @@ msgid ""
"%4$s. <a href=\"%5$s\">Click here to fix it.</a>"
msgstr ""
-#: easy-table.php:665
+#: easy-table.php:706
msgid "Settings"
msgstr "Pengaturan"
-#: easy-table.php:677
+#: easy-table.php:718
msgid "Instruction"
msgstr "Petunjuk"
-#: easy-table.php:678
+#: easy-table.php:719
msgid ""
"Once plugin installed, go to plugin options page to configure some options"
msgstr "Setelah plugin terpasang, kemudian buka halaman penyetelan plugin"
-#: easy-table.php:679
+#: easy-table.php:720
msgid "You are ready to write a table in post or page."
msgstr "Anda telah siap untuk membuat tabel di post atau halaman."
-#: easy-table.php:680
+#: easy-table.php:721
msgid ""
"To be able write table in widget you have to check <em>Enable render table "
"in widget</em> option in the option page."
msgstr ""
-#: easy-table.php:699
+#: easy-table.php:740
#, php-format
msgid "%s Option"
msgstr "Pengaturan %s"
-#: easy-table.php:704
+#: easy-table.php:745
msgid "Support"
msgstr "Dukungan"
-#: easy-table.php:705
+#: easy-table.php:746
msgid "About"
msgstr "Tentang"
-#: easy-table.php:715
+#: easy-table.php:756
msgid "Show/hide help button"
msgstr "Tampilkan/Sembunyikan tombol bantuan"
-#: easy-table.php:716
+#: easy-table.php:757
msgid "General options"
msgstr "Pengaturan umum"
-#: easy-table.php:721
+#: easy-table.php:762
msgid "Short code tag"
msgstr ""
-#: easy-table.php:723
+#: easy-table.php:764
msgid "Shortcode tag, type 'table' if you want to use [table] short tag."
msgstr ""
-#: easy-table.php:729 easy-table.php:1001
+#: easy-table.php:770 easy-table.php:1044
msgid "Cell attribute tag"
msgstr ""
-#: easy-table.php:731
+#: easy-table.php:772
msgid "Cell attribute tag, default is attr."
msgstr ""
-#: easy-table.php:736
+#: easy-table.php:777
msgid "Also render table in widget?"
msgstr "Tampilkan tabel di widget?"
-#: easy-table.php:738
+#: easy-table.php:779
msgid "Check this if you want the table could be rendered in widget."
msgstr ""
-#: easy-table.php:743
+#: easy-table.php:784
msgid "Only load JS/CSS when in this condition"
msgstr ""
-#: easy-table.php:744
+#: easy-table.php:785
msgid "Please check in where JavaScript and CSS should be loaded"
msgstr ""
-#: easy-table.php:748
+#: easy-table.php:789
msgid "Single"
msgstr ""
-#: easy-table.php:754
+#: easy-table.php:795
msgid "Page"
msgstr ""
-#: easy-table.php:760
+#: easy-table.php:801
msgid "Front page"
msgstr ""
-#: easy-table.php:766
+#: easy-table.php:807
msgid "Archive page"
msgstr ""
-#: easy-table.php:772
+#: easy-table.php:813
msgid "Search page"
msgstr ""
-#: easy-table.php:780
+#: easy-table.php:821
msgid "Load script on footer?"
msgstr "Muat script di footer?"
-#: easy-table.php:782
+#: easy-table.php:823
msgid ""
"Check this if you want the script to be rendered in footer. Try to check or "
"uncheck this if you experienced conflict with another JavaScript library "
"(not guaranteed though)."
msgstr ""
-#: easy-table.php:793
+#: easy-table.php:834
msgid "Use tablesorter?"
msgstr "Gunakan tablesorter?"
-#: easy-table.php:796
+#: easy-table.php:837
msgid "Check this to use tablesorter jQuery plugin"
msgstr "Ceklist ini jika ingin menggunakan jQuery plugin tablesorter"
-#: easy-table.php:800
+#: easy-table.php:841
msgid "Use TH for the first row?"
msgstr "Gunakan TH untuk baris pertama?"
-#: easy-table.php:803
+#: easy-table.php:844
msgid ""
"Check this if you want to use first row as table head (required by "
"tablesorter)"
msgstr ""
-#: easy-table.php:807
+#: easy-table.php:848
msgid "Load CSS?"
msgstr "Muat CSS?"
-#: easy-table.php:810
+#: easy-table.php:851
msgid ""
"Check this to use CSS included in this plugin to styling table, you may "
"unceck if you want to write your own style."
msgstr "Ceklist ini untuk menyertakan CSS untuk penataan tampilan tabel."
-#: easy-table.php:814
+#: easy-table.php:855
msgid "Table class"
msgstr "Class tabel"
-#: easy-table.php:816
+#: easy-table.php:857
msgid "Additional table class attribute."
msgstr ""
-#: easy-table.php:820
+#: easy-table.php:861
msgid "Table width"
msgstr "Lebar tabel"
-#: easy-table.php:822
+#: easy-table.php:863
msgid "Table width, in pixel or percent (may be overriden by CSS)"
msgstr "Lebar tabel, dalam pixel atau persen (kemungkinan ditimpa oleh CSS)"
-#: easy-table.php:826
+#: easy-table.php:867
msgid "Table border"
msgstr "Garis tabel"
-#: easy-table.php:828
+#: easy-table.php:869
msgid "Table border (may be overriden by CSS)"
msgstr "Garis tabel (kemungkinan ditimpa oleh CSS)"
-#: easy-table.php:832
+#: easy-table.php:873
msgid "Table align"
msgstr "Perataan tabel"
-#: easy-table.php:834
+#: easy-table.php:875
msgid "Table align (left, center, right)"
msgstr ""
-#: easy-table.php:839
+#: easy-table.php:880
msgid "Table options"
msgstr "Pengaturan tabel"
-#: easy-table.php:843
+#: easy-table.php:884
msgid "Theme selector"
msgstr "Pemilihan tema"
-#: easy-table.php:848
+#: easy-table.php:889
msgid "Default theme"
msgstr "Tema bawaan"
-#: easy-table.php:852
+#: easy-table.php:893
msgid "Select default theme of the table"
msgstr "Pilih tema untuk tabel"
-#: easy-table.php:858
+#: easy-table.php:899
#, fuzzy
msgid "Data options"
msgstr "Pengaturan tabel"
-#: easy-table.php:863
+#: easy-table.php:904
msgid "Row limit"
msgstr "Batas baris"
-#: easy-table.php:867
+#: easy-table.php:908
msgid "Max row to convert to table, default 0 (unlimited)"
msgstr ""
-#: easy-table.php:871
+#: easy-table.php:912
msgid "Trim cell data?"
msgstr ""
-#: easy-table.php:876
+#: easy-table.php:917
msgid "Trim empty character around cell data"
msgstr ""
-#: easy-table.php:882
+#: easy-table.php:923
#, fuzzy
msgid "Parser options"
msgstr "Pengaturan parser"
-#: easy-table.php:883
+#: easy-table.php:924
msgid "Do not change this unless you know what you're doing"
msgstr "Jangan ganti bagian ini kecuali Anda mengetahuinya"
-#: easy-table.php:889
+#: easy-table.php:930
msgid "New line replacement"
msgstr "Pengganti baris baru"
-#: easy-table.php:892
+#: easy-table.php:933
msgid ""
"Since new line is used by parser, you need specify character as a "
"replacement."
msgstr ""
-#: easy-table.php:895
+#: easy-table.php:936
msgid "Row terminator"
msgstr "Pembatas baris"
-#: easy-table.php:899
+#: easy-table.php:940
msgid ""
"This caharacter will converted into new row. Default value \\n (this is "
"invisible character when you press Enter). If your new line not converted as "
"new row in the table, try use \\r instead."
msgstr ""
-#: easy-table.php:902
+#: easy-table.php:943
msgid "Delimiter"
msgstr "Pemisah"
-#: easy-table.php:905
+#: easy-table.php:946
msgid "CSV delimiter (default is comma)"
msgstr ""
-#: easy-table.php:908
+#: easy-table.php:949
msgid "Enclosure"
msgstr ""
-#: easy-table.php:911
+#: easy-table.php:952
msgid "CSV enclosure (default is double quote)"
msgstr ""
-#: easy-table.php:914
+#: easy-table.php:955
msgid "Escape"
msgstr ""
-#: easy-table.php:917
+#: easy-table.php:958
msgid "CSV escape (default is backslash)"
msgstr ""
-#: easy-table.php:920
+#: easy-table.php:961
msgid "Fix linebreak"
msgstr ""
-#: easy-table.php:923
+#: easy-table.php:964
msgid ""
"If terminator is not default (linebreak), you may encounter some issue with "
"linebreak inside cell, try to check or uncheck this to resolve"
msgstr ""
-#: easy-table.php:927
+#: easy-table.php:968
msgid "Allow read CSV from file?"
msgstr "Bolehkan membaca CSV dari file?"
-#: easy-table.php:930
+#: easy-table.php:971
msgid "Check this if you also want to convert CSV file to table"
msgstr "Ceklist ini jika Anda juga ingin merubah file CSV ke tabel"
-#: easy-table.php:938
+#: easy-table.php:979
msgid "Save"
msgstr "Simpan"
-#: easy-table.php:962
+#: easy-table.php:1003
msgid "Possible parameter"
msgstr "Parameter yang dimungkinkan"
-#: easy-table.php:963
+#: easy-table.php:1004
msgid ""
"These parameters commonly can override global options in the left side of "
"this page. Example usage:"
@@ -316,19 +316,21 @@ msgstr ""
"Parameter berikut ini secara umum dapat menggantikan setingan global yang "
"ada di sebelah kiri halaman ini. Contoh penggunaan:"
-#: easy-table.php:966 easy-table.php:967 easy-table.php:968 easy-table.php:969
-#: easy-table.php:970 easy-table.php:971 easy-table.php:972 easy-table.php:973
-#: easy-table.php:974 easy-table.php:975 easy-table.php:976 easy-table.php:977
-#: easy-table.php:978 easy-table.php:979 easy-table.php:980 easy-table.php:981
-#: easy-table.php:982
+#: easy-table.php:1007 easy-table.php:1008 easy-table.php:1009
+#: easy-table.php:1010 easy-table.php:1011 easy-table.php:1012
+#: easy-table.php:1013 easy-table.php:1014 easy-table.php:1015
+#: easy-table.php:1016 easy-table.php:1017 easy-table.php:1018
+#: easy-table.php:1019 easy-table.php:1020 easy-table.php:1021
+#: easy-table.php:1022 easy-table.php:1023 easy-table.php:1024
+#: easy-table.php:1025
msgid "default value"
msgstr "nilai bawaan"
-#: easy-table.php:966
+#: easy-table.php:1007
msgid "another value"
msgstr "nilai lainnya"
-#: easy-table.php:985
+#: easy-table.php:1028
msgid ""
"parameter is for initial sorting order. Value for each column separated by "
"comma. See example below:"
@@ -336,161 +338,157 @@ msgstr ""
"parameter untuk penyortiran bawaan. Nilai dari masing masih kolom dipisahkan "
"dengan koma. Lihat contoh berikut:"
-#: easy-table.php:987
+#: easy-table.php:1030
msgid ""
"Set initial order of first column descending and second column ascending:"
msgstr ""
-#: easy-table.php:993
+#: easy-table.php:1036
msgid "Set initial order of second column descending:"
msgstr ""
-#: easy-table.php:999
+#: easy-table.php:1042
msgid ""
"Additionaly, sort option also can be set via sort attr in a cell. See "
"example below"
msgstr ""
-#: easy-table.php:1003
+#: easy-table.php:1046
msgid "To set attribute for cell eg. class, colspan, rowspan, etc"
msgstr ""
-#: easy-table.php:1004
+#: easy-table.php:1047
msgid "Example"
msgstr "Contoh"
-#: easy-table.php:1013
+#: easy-table.php:1056
msgid "To set initial sort order, this is intended to TH (first row) only."
msgstr ""
-#: easy-table.php:1014
+#: easy-table.php:1057
msgid "Example: sort second column descending "
msgstr ""
-#: easy-table.php:1031
+#: easy-table.php:1074
msgid "Test area:"
msgstr "Area test:"
-#: easy-table.php:1036
+#: easy-table.php:1079
msgid "Reset"
msgstr "Reset"
-#: easy-table.php:1037
+#: easy-table.php:1080
msgid "Update preview"
msgstr "Perbaharui pratinjau"
-#: easy-table.php:1039
+#: easy-table.php:1082
msgid "Preview"
msgstr "Pratinjau"
-#: easy-table.php:1046
+#: easy-table.php:1089
msgid "Easy Table theme editor"
msgstr ""
-#: easy-table.php:1076
-msgid ""
-"I have tried to make this plugin can be used as easy as possible and "
-"documentation as complete as possible. However it is also possible that you "
-"are still confused. Therefore feel free to ask. I would be happy to answer."
-msgstr ""
-"Saya telah membuat plugin ini semudah mungkin digunakan dan juga dokumentasi "
-"yang selengkap mungkin. Meskipun begitu mungkin Anda masih bingung. Untuk "
-"itu jangan sungkan-sungkan untuk bertanya. Saya akan senang menjawabnya."
-
-#: easy-table.php:1077
-msgid ""
-"You can use this discussion to get support, request feature or reporting bug."
-msgstr ""
-
-#: easy-table.php:1078
-msgid "Before you ask something, make sure you have read documentation here!"
-msgstr ""
-"Sebelum bertanya sesuatu, pastikan Anda telah membaca dokumentasi di sini!"
-
-#: easy-table.php:1137
+#: easy-table.php:1134
msgid "Install Now"
msgstr ""
-#: easy-table.php:1141
+#: easy-table.php:1138
msgid "Install Update Now"
msgstr ""
-#: easy-table.php:1144
+#: easy-table.php:1141
#, php-format
msgid "Newer Version (%s) Installed"
msgstr ""
-#: easy-table.php:1147
+#: easy-table.php:1144
msgid "Latest Version Installed"
msgstr ""
-#: easy-table.php:1156
+#: easy-table.php:1153
msgid "Latest Version:"
msgstr ""
-#: easy-table.php:1158
+#: easy-table.php:1155
msgid "Author:"
msgstr ""
-#: easy-table.php:1160
+#: easy-table.php:1157
msgid "Last Updated:"
msgstr ""
-#: easy-table.php:1161
+#: easy-table.php:1158
#, php-format
msgid "%s ago"
msgstr ""
-#: easy-table.php:1163
+#: easy-table.php:1160
msgid "Requires WordPress Version:"
msgstr ""
-#: easy-table.php:1163
+#: easy-table.php:1160
#, php-format
msgid "%s or higher"
msgstr ""
-#: easy-table.php:1165
+#: easy-table.php:1162
msgid "Compatible up to:"
msgstr ""
-#: easy-table.php:1167
+#: easy-table.php:1164
msgid "Downloaded:"
msgstr ""
-#: easy-table.php:1169
+#: easy-table.php:1166
msgid "WordPress.org Plugin Page &#187;"
msgstr ""
-#: easy-table.php:1171
+#: easy-table.php:1168
msgid "Plugin Homepage &#187;"
msgstr ""
-#: easy-table.php:1175
+#: easy-table.php:1172
msgid "Average Rating"
msgstr "Penilaian rata-rata"
-#: easy-table.php:1193
+#: easy-table.php:1190
msgid "Support my work with donation"
msgstr "Dukung karya saya dengan sumbangan"
-#: easy-table.php:1202
+#: easy-table.php:1199
msgid "Don't have money? No problem, you can rate my plugin instead."
msgstr "Tidak punya uang? Tidak masalah, Anda cukup memberi rating plugin ini."
-#: easy-table.php:1203
+#: easy-table.php:1200
msgid "Click here to rate"
msgstr "Klik di sini untuk memberi nilai"
-#: easy-table.php:1205
+#: easy-table.php:1202
msgid "Thanks to"
msgstr "Terimakasih kepada"
-#: easy-table.php:1211 easy-table.php:1212 easy-table.php:1213
-#: easy-table.php:1214 easy-table.php:1215
+#: easy-table.php:1208 easy-table.php:1209 easy-table.php:1210
+#: easy-table.php:1211 easy-table.php:1212
msgid "by"
msgstr "oleh"
+#~ msgid ""
+#~ "I have tried to make this plugin can be used as easy as possible and "
+#~ "documentation as complete as possible. However it is also possible that "
+#~ "you are still confused. Therefore feel free to ask. I would be happy to "
+#~ "answer."
+#~ msgstr ""
+#~ "Saya telah membuat plugin ini semudah mungkin digunakan dan juga "
+#~ "dokumentasi yang selengkap mungkin. Meskipun begitu mungkin Anda masih "
+#~ "bingung. Untuk itu jangan sungkan-sungkan untuk bertanya. Saya akan "
+#~ "senang menjawabnya."
+
+#~ msgid ""
+#~ "Before you ask something, make sure you have read documentation here!"
+#~ msgstr ""
+#~ "Sebelum bertanya sesuatu, pastikan Anda telah membaca dokumentasi di sini!"
+
#~ msgid "Table align, left/right/center (may be overriden by CSS)"
#~ msgstr "Perataan tabel, left/right/center (kemungkinan ditimpa oleh CSS)"
diff --git a/plugins/easy-table/languages/english.mo b/plugins/easy-table/languages/english.mo
index 4d6813f9..7d3a70d8 100644
--- a/plugins/easy-table/languages/english.mo
+++ b/plugins/easy-table/languages/english.mo
Binary files differ
diff --git a/plugins/easy-table/languages/english.po b/plugins/easy-table/languages/english.po
index 1fb921b4..7fb1030f 100644
--- a/plugins/easy-table/languages/english.po
+++ b/plugins/easy-table/languages/english.po
@@ -1,9 +1,9 @@
msgid ""
msgstr ""
-"Project-Id-Version: easy-table 1.5.1\n"
+"Project-Id-Version: easy-table 1.6\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-18 23:23+0700\n"
-"PO-Revision-Date: 2014-07-18 23:24+0700\n"
+"POT-Creation-Date: 2016-01-23 19:18+0700\n"
+"PO-Revision-Date: 2016-01-23 19:18+0700\n"
"Last-Translator: takien <contact@takien.com>\n"
"Language-Team: takien.com <contact@takien.com>\n"
"Language: en_US\n"
@@ -11,12 +11,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: __;_e\n"
-"X-Poedit-Basepath: ../\n"
+"X-Poedit-Basepath: ..\n"
"X-Poedit-SourceCharset: UTF-8\n"
-"X-Generator: Poedit 1.5.7\n"
+"X-Generator: Poedit 1.8.6\n"
"X-Poedit-SearchPath-0: .\n"
-#: easy-table.php:119 easy-table.php:127 easy-table.php:135
+#: easy-table.php:120 easy-table.php:128 easy-table.php:136
#, php-format
msgid ""
"It seems that %1$s shortcode already used by another plugin and potentially "
@@ -24,459 +24,445 @@ msgid ""
"%4$s. <a href=\"%5$s\">Click here to fix it.</a>"
msgstr ""
-#: easy-table.php:665
+#: easy-table.php:706
msgid "Settings"
msgstr ""
-#: easy-table.php:677
+#: easy-table.php:718
msgid "Instruction"
msgstr ""
-#: easy-table.php:678
+#: easy-table.php:719
msgid ""
"Once plugin installed, go to plugin options page to configure some options"
msgstr ""
-#: easy-table.php:679
+#: easy-table.php:720
msgid "You are ready to write a table in post or page."
msgstr ""
-#: easy-table.php:680
+#: easy-table.php:721
msgid ""
"To be able write table in widget you have to check <em>Enable render table "
"in widget</em> option in the option page."
msgstr ""
-#: easy-table.php:699
+#: easy-table.php:740
#, php-format
msgid "%s Option"
msgstr ""
-#: easy-table.php:704
+#: easy-table.php:745
msgid "Support"
msgstr ""
-#: easy-table.php:705
+#: easy-table.php:746
msgid "About"
msgstr ""
-#: easy-table.php:715
+#: easy-table.php:756
msgid "Show/hide help button"
msgstr ""
-#: easy-table.php:716
+#: easy-table.php:757
msgid "General options"
msgstr ""
-#: easy-table.php:721
+#: easy-table.php:762
msgid "Short code tag"
msgstr ""
-#: easy-table.php:723
+#: easy-table.php:764
msgid "Shortcode tag, type 'table' if you want to use [table] short tag."
msgstr ""
-#: easy-table.php:729 easy-table.php:1001
+#: easy-table.php:770 easy-table.php:1044
msgid "Cell attribute tag"
msgstr ""
-#: easy-table.php:731
+#: easy-table.php:772
msgid "Cell attribute tag, default is attr."
msgstr ""
-#: easy-table.php:736
+#: easy-table.php:777
msgid "Also render table in widget?"
msgstr ""
-#: easy-table.php:738
+#: easy-table.php:779
msgid "Check this if you want the table could be rendered in widget."
msgstr ""
-#: easy-table.php:743
+#: easy-table.php:784
msgid "Only load JS/CSS when in this condition"
msgstr ""
-#: easy-table.php:744
+#: easy-table.php:785
msgid "Please check in where JavaScript and CSS should be loaded"
msgstr ""
-#: easy-table.php:748
+#: easy-table.php:789
msgid "Single"
msgstr ""
-#: easy-table.php:754
+#: easy-table.php:795
msgid "Page"
msgstr ""
-#: easy-table.php:760
+#: easy-table.php:801
msgid "Front page"
msgstr ""
-#: easy-table.php:766
+#: easy-table.php:807
msgid "Archive page"
msgstr ""
-#: easy-table.php:772
+#: easy-table.php:813
msgid "Search page"
msgstr ""
-#: easy-table.php:780
+#: easy-table.php:821
msgid "Load script on footer?"
msgstr ""
-#: easy-table.php:782
+#: easy-table.php:823
msgid ""
"Check this if you want the script to be rendered in footer. Try to check or "
"uncheck this if you experienced conflict with another JavaScript library "
"(not guaranteed though)."
msgstr ""
-#: easy-table.php:793
+#: easy-table.php:834
msgid "Use tablesorter?"
msgstr ""
-#: easy-table.php:796
+#: easy-table.php:837
msgid "Check this to use tablesorter jQuery plugin"
msgstr ""
-#: easy-table.php:800
+#: easy-table.php:841
msgid "Use TH for the first row?"
msgstr ""
-#: easy-table.php:803
+#: easy-table.php:844
msgid ""
"Check this if you want to use first row as table head (required by "
"tablesorter)"
msgstr ""
-#: easy-table.php:807
+#: easy-table.php:848
msgid "Load CSS?"
msgstr ""
-#: easy-table.php:810
+#: easy-table.php:851
msgid ""
"Check this to use CSS included in this plugin to styling table, you may "
"unceck if you want to write your own style."
msgstr ""
-#: easy-table.php:814
+#: easy-table.php:855
msgid "Table class"
msgstr ""
-#: easy-table.php:816
+#: easy-table.php:857
msgid "Additional table class attribute."
msgstr ""
-#: easy-table.php:820
+#: easy-table.php:861
msgid "Table width"
msgstr ""
-#: easy-table.php:822
+#: easy-table.php:863
msgid "Table width, in pixel or percent (may be overriden by CSS)"
msgstr ""
-#: easy-table.php:826
+#: easy-table.php:867
msgid "Table border"
msgstr ""
-#: easy-table.php:828
+#: easy-table.php:869
msgid "Table border (may be overriden by CSS)"
msgstr ""
-#: easy-table.php:832
+#: easy-table.php:873
msgid "Table align"
msgstr ""
-#: easy-table.php:834
+#: easy-table.php:875
msgid "Table align (left, center, right)"
msgstr ""
-#: easy-table.php:839
+#: easy-table.php:880
msgid "Table options"
msgstr ""
-#: easy-table.php:843
+#: easy-table.php:884
msgid "Theme selector"
msgstr ""
-#: easy-table.php:848
+#: easy-table.php:889
msgid "Default theme"
msgstr ""
-#: easy-table.php:852
+#: easy-table.php:893
msgid "Select default theme of the table"
msgstr ""
-#: easy-table.php:858
+#: easy-table.php:899
msgid "Data options"
msgstr ""
-#: easy-table.php:863
+#: easy-table.php:904
msgid "Row limit"
msgstr ""
-#: easy-table.php:867
+#: easy-table.php:908
msgid "Max row to convert to table, default 0 (unlimited)"
msgstr ""
-#: easy-table.php:871
+#: easy-table.php:912
msgid "Trim cell data?"
msgstr ""
-#: easy-table.php:876
+#: easy-table.php:917
msgid "Trim empty character around cell data"
msgstr ""
-#: easy-table.php:882
+#: easy-table.php:923
msgid "Parser options"
msgstr ""
-#: easy-table.php:883
+#: easy-table.php:924
msgid "Do not change this unless you know what you're doing"
msgstr ""
-#: easy-table.php:889
+#: easy-table.php:930
msgid "New line replacement"
msgstr ""
-#: easy-table.php:892
+#: easy-table.php:933
msgid ""
"Since new line is used by parser, you need specify character as a "
"replacement."
msgstr ""
-#: easy-table.php:895
+#: easy-table.php:936
msgid "Row terminator"
msgstr ""
-#: easy-table.php:899
+#: easy-table.php:940
msgid ""
"This caharacter will converted into new row. Default value \\n (this is "
"invisible character when you press Enter). If your new line not converted as "
"new row in the table, try use \\r instead."
msgstr ""
-#: easy-table.php:902
+#: easy-table.php:943
msgid "Delimiter"
msgstr ""
-#: easy-table.php:905
+#: easy-table.php:946
msgid "CSV delimiter (default is comma)"
msgstr ""
-#: easy-table.php:908
+#: easy-table.php:949
msgid "Enclosure"
msgstr ""
-#: easy-table.php:911
+#: easy-table.php:952
msgid "CSV enclosure (default is double quote)"
msgstr ""
-#: easy-table.php:914
+#: easy-table.php:955
msgid "Escape"
msgstr ""
-#: easy-table.php:917
+#: easy-table.php:958
msgid "CSV escape (default is backslash)"
msgstr ""
-#: easy-table.php:920
+#: easy-table.php:961
msgid "Fix linebreak"
msgstr ""
-#: easy-table.php:923
+#: easy-table.php:964
msgid ""
"If terminator is not default (linebreak), you may encounter some issue with "
"linebreak inside cell, try to check or uncheck this to resolve"
msgstr ""
-#: easy-table.php:927
+#: easy-table.php:968
msgid "Allow read CSV from file?"
msgstr ""
-#: easy-table.php:930
+#: easy-table.php:971
msgid "Check this if you also want to convert CSV file to table"
msgstr ""
-#: easy-table.php:938
+#: easy-table.php:979
msgid "Save"
msgstr ""
-#: easy-table.php:962
+#: easy-table.php:1003
msgid "Possible parameter"
msgstr ""
-#: easy-table.php:963
+#: easy-table.php:1004
msgid ""
"These parameters commonly can override global options in the left side of "
"this page. Example usage:"
msgstr ""
-#: easy-table.php:966 easy-table.php:967 easy-table.php:968 easy-table.php:969
-#: easy-table.php:970 easy-table.php:971 easy-table.php:972 easy-table.php:973
-#: easy-table.php:974 easy-table.php:975 easy-table.php:976 easy-table.php:977
-#: easy-table.php:978 easy-table.php:979 easy-table.php:980 easy-table.php:981
-#: easy-table.php:982
+#: easy-table.php:1007 easy-table.php:1008 easy-table.php:1009
+#: easy-table.php:1010 easy-table.php:1011 easy-table.php:1012
+#: easy-table.php:1013 easy-table.php:1014 easy-table.php:1015
+#: easy-table.php:1016 easy-table.php:1017 easy-table.php:1018
+#: easy-table.php:1019 easy-table.php:1020 easy-table.php:1021
+#: easy-table.php:1022 easy-table.php:1023 easy-table.php:1024
+#: easy-table.php:1025
msgid "default value"
msgstr ""
-#: easy-table.php:966
+#: easy-table.php:1007
msgid "another value"
msgstr ""
-#: easy-table.php:985
+#: easy-table.php:1028
msgid ""
"parameter is for initial sorting order. Value for each column separated by "
"comma. See example below:"
msgstr ""
-#: easy-table.php:987
+#: easy-table.php:1030
msgid ""
"Set initial order of first column descending and second column ascending:"
msgstr ""
-#: easy-table.php:993
+#: easy-table.php:1036
msgid "Set initial order of second column descending:"
msgstr ""
-#: easy-table.php:999
+#: easy-table.php:1042
msgid ""
"Additionaly, sort option also can be set via sort attr in a cell. See "
"example below"
msgstr ""
-#: easy-table.php:1003
+#: easy-table.php:1046
msgid "To set attribute for cell eg. class, colspan, rowspan, etc"
msgstr ""
-#: easy-table.php:1004
+#: easy-table.php:1047
msgid "Example"
msgstr ""
-#: easy-table.php:1013
+#: easy-table.php:1056
msgid "To set initial sort order, this is intended to TH (first row) only."
msgstr ""
-#: easy-table.php:1014
+#: easy-table.php:1057
msgid "Example: sort second column descending "
msgstr ""
-#: easy-table.php:1031
+#: easy-table.php:1074
msgid "Test area:"
msgstr ""
-#: easy-table.php:1036
+#: easy-table.php:1079
msgid "Reset"
msgstr ""
-#: easy-table.php:1037
+#: easy-table.php:1080
msgid "Update preview"
msgstr ""
-#: easy-table.php:1039
+#: easy-table.php:1082
msgid "Preview"
msgstr ""
-#: easy-table.php:1046
+#: easy-table.php:1089
msgid "Easy Table theme editor"
msgstr ""
-#: easy-table.php:1076
-msgid ""
-"I have tried to make this plugin can be used as easy as possible and "
-"documentation as complete as possible. However it is also possible that you "
-"are still confused. Therefore feel free to ask. I would be happy to answer."
-msgstr ""
-
-#: easy-table.php:1077
-msgid ""
-"You can use this discussion to get support, request feature or reporting bug."
-msgstr ""
-
-#: easy-table.php:1078
-msgid "Before you ask something, make sure you have read documentation here!"
-msgstr ""
-
-#: easy-table.php:1137
+#: easy-table.php:1134
msgid "Install Now"
msgstr ""
-#: easy-table.php:1141
+#: easy-table.php:1138
msgid "Install Update Now"
msgstr ""
-#: easy-table.php:1144
+#: easy-table.php:1141
#, php-format
msgid "Newer Version (%s) Installed"
msgstr ""
-#: easy-table.php:1147
+#: easy-table.php:1144
msgid "Latest Version Installed"
msgstr ""
-#: easy-table.php:1156
+#: easy-table.php:1153
msgid "Latest Version:"
msgstr ""
-#: easy-table.php:1158
+#: easy-table.php:1155
msgid "Author:"
msgstr ""
-#: easy-table.php:1160
+#: easy-table.php:1157
msgid "Last Updated:"
msgstr ""
-#: easy-table.php:1161
+#: easy-table.php:1158
#, php-format
msgid "%s ago"
msgstr ""
-#: easy-table.php:1163
+#: easy-table.php:1160
msgid "Requires WordPress Version:"
msgstr ""
-#: easy-table.php:1163
+#: easy-table.php:1160
#, php-format
msgid "%s or higher"
msgstr ""
-#: easy-table.php:1165
+#: easy-table.php:1162
msgid "Compatible up to:"
msgstr ""
-#: easy-table.php:1167
+#: easy-table.php:1164
msgid "Downloaded:"
msgstr ""
-#: easy-table.php:1169
+#: easy-table.php:1166
msgid "WordPress.org Plugin Page &#187;"
msgstr ""
-#: easy-table.php:1171
+#: easy-table.php:1168
msgid "Plugin Homepage &#187;"
msgstr ""
-#: easy-table.php:1175
+#: easy-table.php:1172
msgid "Average Rating"
msgstr ""
-#: easy-table.php:1193
+#: easy-table.php:1190
msgid "Support my work with donation"
msgstr ""
-#: easy-table.php:1202
+#: easy-table.php:1199
msgid "Don't have money? No problem, you can rate my plugin instead."
msgstr ""
-#: easy-table.php:1203
+#: easy-table.php:1200
msgid "Click here to rate"
msgstr ""
-#: easy-table.php:1205
+#: easy-table.php:1202
msgid "Thanks to"
msgstr ""
-#: easy-table.php:1211 easy-table.php:1212 easy-table.php:1213
-#: easy-table.php:1214 easy-table.php:1215
+#: easy-table.php:1208 easy-table.php:1209 easy-table.php:1210
+#: easy-table.php:1211 easy-table.php:1212
msgid "by"
msgstr ""
diff --git a/plugins/easy-table/readme.txt b/plugins/easy-table/readme.txt
index 7aab791d..4e09bf50 100644
--- a/plugins/easy-table/readme.txt
+++ b/plugins/easy-table/readme.txt
@@ -3,8 +3,8 @@ Contributors: takien
Donate link: http://takien.com/donate
Tags: table,csv,csv-to-table,post,excel,csv file,widget,tablesorter
Requires at least: 3.0
-Tested up to: 3.9.1
-Stable tag: 1.5.2
+Tested up to: 4.4.1
+Stable tag: 1.6
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -248,6 +248,15 @@ No
== Changelog ==
+= 1.6 =
+* Added: exclude_row, exclude_col argument. Useful to hide sort of rows or columns from your data.
+* Added: sslverify=false to wp_remote_get $args
+* Fixed: boolean param value.
+
+= 1.5.2 =
+* Fixed: security problems
+* Removed: Disqus comment on support tab
+
= 1.5.2 =
* Fixed: Bug on 1.5/1.5.1, Easy Table does not work in WordPress prior to version 3.6
diff --git a/plugins/jetpack/3rd-party/3rd-party.php b/plugins/jetpack/3rd-party/3rd-party.php
index 2ff07816..7bc11bd8 100644
--- a/plugins/jetpack/3rd-party/3rd-party.php
+++ b/plugins/jetpack/3rd-party/3rd-party.php
@@ -5,6 +5,7 @@
* is architected
*/
-require_once( 'buddypress.php' );
-require_once( 'wpml.php' );
-require_once( 'bitly.php' ); \ No newline at end of file
+require_once( JETPACK__PLUGIN_DIR . '3rd-party/buddypress.php' );
+require_once( JETPACK__PLUGIN_DIR . '3rd-party/wpml.php' );
+require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
+require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' ); \ No newline at end of file
diff --git a/plugins/jetpack/3rd-party/bbpress.php b/plugins/jetpack/3rd-party/bbpress.php
new file mode 100644
index 00000000..ae60d91d
--- /dev/null
+++ b/plugins/jetpack/3rd-party/bbpress.php
@@ -0,0 +1,28 @@
+<?php
+add_action( 'init', 'jetpack_bbpress_compat', 11 ); // Priority 11 needed to ensure sharing_display is loaded.
+
+/**
+ * Adds Jetpack + bbPress Compatibility filters.
+ *
+ * @author Brandon Kraft
+ * @since 3.7.1
+ */
+function jetpack_bbpress_compat() {
+ if ( function_exists( 'sharing_display' ) ) {
+ add_filter( 'bbp_get_topic_content', 'sharing_display', 19 );
+ add_action( 'bbp_template_after_single_forum', 'jetpack_sharing_bbpress' );
+ add_action( 'bbp_template_after_single_topic', 'jetpack_sharing_bbpress' );
+ }
+}
+
+/**
+ * Display Jetpack "Sharing" buttons on bbPress 2.x forums/ topics/ lead topics/ replies.
+ *
+ * Determination if the sharing buttons should display on the post type is handled within sharing_display().
+ *
+ * @author David Decker
+ * @since 3.7.0
+ */
+function jetpack_sharing_bbpress() {
+ sharing_display( null, true );
+} \ No newline at end of file
diff --git a/plugins/jetpack/3rd-party/bitly.php b/plugins/jetpack/3rd-party/bitly.php
index b8f3f63c..9d087b77 100644
--- a/plugins/jetpack/3rd-party/bitly.php
+++ b/plugins/jetpack/3rd-party/bitly.php
@@ -1,11 +1,11 @@
-<?php
+<?php
-/*
+/*
* Fixes issues with the Official Bitly for WordPress
* http://wordpress.org/plugins/bitly/
*/
if( class_exists( 'Bitly' ) ) {
-
+
if( isset( $GLOBALS['bitly'] ) ) {
remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
@@ -14,8 +14,8 @@ if( class_exists( 'Bitly' ) ) {
}
/**
- * jetpack_bitly_og_tag
- *
+ * jetpack_bitly_og_tag
+ *
* @return null
*/
function jetpack_bitly_og_tag() {
@@ -23,7 +23,7 @@ function jetpack_bitly_og_tag() {
// Add the bitly part again back if we don't have any jetpack_og_tags added
$GLOBALS['bitly']->og_tags();
} elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
- printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
- }
+ printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
+ }
-} \ No newline at end of file
+}
diff --git a/plugins/jetpack/_inc/footer.php b/plugins/jetpack/_inc/footer.php
index bfda9e7d..e04d187f 100644
--- a/plugins/jetpack/_inc/footer.php
+++ b/plugins/jetpack/_inc/footer.php
@@ -1,12 +1,4 @@
-<?php
-global $current_user;
-$is_active = Jetpack::is_active();
-$user_token = Jetpack_Data::get_access_token( $current_user->ID );
-$is_user_connected = $user_token && ! is_wp_error( $user_token );
-$is_master_user = $current_user->ID == Jetpack_Options::get_option( 'master_user' );
-?>
-
- </div><!-- .wrapper -->
+ </div><!-- .wrapper -->
<div class="footer">
<nav class="primary nav-horizontal">
@@ -24,17 +16,12 @@ $is_master_user = $current_user->ID == Jetpack_Options::get_option( 'master_u
<a href="http://jetpack.me">Jetpack <?php echo JETPACK__VERSION; ?></a>
<a href="http://wordpress.com/tos/"><?php esc_html_e( 'Terms', 'jetpack' ); ?></a>
<a href="http://automattic.com/privacy/"><?php esc_html_e( 'Privacy', 'jetpack' ); ?></a>
- <a href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack-debugger' ) ); ?>" title="<?php esc_attr_e( 'Test your site&#8217;s compatibility with Jetpack.', 'jetpack' ); ?>"><?php _e( 'Debug', 'jetpack' ); ?></a>
+ <?php if ( current_user_can( 'jetpack_manage_modules' ) ) : ?><a href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack-debugger' ) ); ?>" title="<?php esc_attr_e( 'Test your site&#8217;s compatibility with Jetpack.', 'jetpack' ); ?>"><?php _e( 'Debug', 'jetpack' ); ?><?php endif; ?></a>
<a href="http://jetpack.me/contact-support/" title="<?php esc_attr_e( 'Contact the Jetpack Happiness Squad.', 'jetpack' ); ?>"><?php _e( 'Support', 'jetpack' ); ?></a>
<a href="http://jetpack.me/survey/?rel=<?php echo JETPACK__VERSION; ?>" title="<?php esc_attr_e( 'Take a survey. Tell us how we&#8217;re doing.', 'jetpack' ); ?>"><?php _e( 'Give Us Feedback', 'jetpack' ); ?></a>
-
- <?php if ( $is_active && current_user_can( 'jetpack_disconnect' ) ) : ?>
- <a href="<?php echo wp_nonce_url( Jetpack::admin_url( 'action=disconnect' ), 'jetpack-disconnect' ); ?>" onclick="return confirm('<?php echo htmlspecialchars( __('Are you sure you want to disconnect from WordPress.com?', 'jetpack'), ENT_QUOTES ); ?>');"><?php esc_html_e( 'Disconnect from WordPress.com', 'jetpack' ); ?></a>
+ <?php if ( Jetpack::is_active() && current_user_can( 'jetpack_disconnect' ) ) : ?>
+ <a href="<?php echo esc_url( Jetpack::admin_url( 'page=my_jetpack#disconnect' ) ); ?>"><?php esc_html_e( 'Disconnect Jetpack', 'jetpack' ); ?></a>
<?php endif; ?>
- <?php if ( $is_active && $is_user_connected && ! $is_master_user ) : ?>
- <a href="<?php echo wp_nonce_url( Jetpack::admin_url( 'action=unlink' ), 'jetpack-unlink' ); ?>"><?php esc_html_e( 'Unlink your user account', 'jetpack' ); ?></a>
- <?php endif; ?>
-
</div>
</nav><!-- .secondary -->
</div><!-- .footer -->
diff --git a/plugins/jetpack/_inc/gallery-settings.js b/plugins/jetpack/_inc/gallery-settings.js
index fe88f568..7e7b29f2 100644
--- a/plugins/jetpack/_inc/gallery-settings.js
+++ b/plugins/jetpack/_inc/gallery-settings.js
@@ -20,7 +20,7 @@
$el.find( 'select[name=type]' ).on( 'change', function () {
var columnSetting = $el.find( 'select[name=columns]' ).closest( 'label.setting' );
- if ( 'default' === $( this ).val() ) {
+ if ( 'default' === $( this ).val() || 'thumbnails' === $( this ).val() ) {
columnSetting.show();
} else {
columnSetting.hide();
@@ -30,4 +30,4 @@
return this;
}
});
-})(jQuery); \ No newline at end of file
+})(jQuery);
diff --git a/plugins/jetpack/_inc/genericons/README.md b/plugins/jetpack/_inc/genericons/README.md
index 98c10947..4aa8cc0d 100644
--- a/plugins/jetpack/_inc/genericons/README.md
+++ b/plugins/jetpack/_inc/genericons/README.md
@@ -1,13 +1,13 @@
-## Genericons
+# Genericons
Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic.
Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients!
-### Usage
+## Usage
-To use it, place the `font` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this:
+To use it, place the `genericons` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this:
```
.my-icon:before {
@@ -24,30 +24,124 @@ This will output a comment icon before every element with the class "my-icon". T
You can also use the bundled example.css if you'd rather insert the icons using HTML tags.
-### Notes
+## Building your own Genericons
-** Photoshop mockups **
+In the `source` directory, you'll find all Genericons source icons in SVG format. This will allow you to bake your own flavor of Genericons using a tool such as FontCustom (http://fontcustom.com) or Fontello (http://fontello.com). Perhaps you need more logos than are available in the base Genericons package? Just add those logos and bake your own expanded set. Maybe you need just a few of the icons Genericons provides, but would like to trim the fat? Remove the ones you won't need!
-The `Genericons.ttf` file found in the `font` directory can be placed in your system fonts folder and used Photoshop or other graphics apps if you like.
+
+### FontCustom instructions
+
+FontCustom is a powerful commandline tool which which bakes icon fonts from the SVG source files. It's the tool Genericons is built on, and it provides highly accurate and perfectly crisp icons, *provided all SVGs have the same pixel height*.
+
+It's not that hard to use, and once it's installed you'll never think of icon-fonts the same way again. Seriously, you should try it. Icon fonts for everyone!
+
+1. Install FontCustom. Follow the instructions on the website: http://fontcustom.com/
+2. In the `source` directory from the Genericons download, open the file called `fontcustom.yml` in a text editor. Customize the `font_name` and `css_selector`.
+3. Open a terminal. Browse to the `source` directory. Type `fontcustom compile`.
+
+You'll now receive a brand new subdirectory called `fontcustom-webfont`. Inside here you'll find your very own flavor of Genericons, with only the icons you want, including a handy example page that'll help you copy/paste the necessary glyphs or CSS values.
+
+*Please note*: In the source directory, there's a hidden file called `.fontcustom-manifest.json`. This file is auto-generated by the FontCustom tool, and holds codepoints (unicode addresses) for every glyph, so its address doesn't change when you add or remove icons. If you feel the need to "start fresh" with the unicode addresses, you should delete this file.
+
+
+### Fontello instructions
+
+Fontello is very easy to use. Just drop the SVG files of the icons you want onto their website and download the font. The downside is that Fontello seems to ignore the 16px pixelgrid, so you'll end up with fuzzy icons. Buyer beware.
+
+
+## Notes
+
+**Photoshop mockups**
+
+The `Genericons.ttf` file can be placed in your system fonts folder and used Photoshop or other graphics apps if you like.
If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system.
-** Pixel grid **
+**Pixel grid**
Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry.
-** Antialiasing **
+**Antialiasing**
If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers.
-** Updates **
+**optimizeLegibility**
+
+Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility.
+
+**Updates**
We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended.
+**Base64 encoding**
+
+By default, Genericons ships with a stylesheet that includes a base64 encoded version of the font. This is to sidestep issues with cross-origin requests for fonts, that happen when a stylesheet loads a font that's stored on a different domain or subdomain. This is very common when using caching plugins.
+
+Base64 encoding comes with a 25% filesize overhead compared to just loading the WOFF file directly. If you know that you won't be loading fonts across domains, or have the ability to edit your server config files to allow it, you can get slightly faster performance by loading Genericons without the base64 encoding. Simply edit `genericons.css` and edit the `@font-face` declaration to match this:
+
+```
+@font-face {
+ font-family: 'Genericons';
+ src: url('Genericons.woff') format('woff'),
+ url('Genericons.ttf') format('truetype'),
+ url('Genericons.svg#genericonsregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+```
+
+
+
+## Changelog
+
+**3.4.1**
+
+* IE8 support restored.
+
+**3.4**
+
+* Updated: Update Google Plus icon to new geometric version. This also *retires* the "alt" version, so *please be mindful if you choose to update, make sure you use the `f206` glyph, not the `f218` glyph, as it no longer exists!
+* New: Added helper rotation classes to the base CSS, thanks to geminorum. Apply `genericon-rotate-90` to rotate 90 degrees, -180, -270. Or `genericon-flip-horizontal` or -vertical.
+
+*Again, it is important if you choose to update to this version, make sure you're not using `genericon-googleplus-alt` or unicode character `f218`, as that has been retired! Use `genericon-googleplus` and glyph `f206` instead!*
+
+**3.3.1**
+
+Security Hardening: Remove Genericons example.html file. Please visit genericons.com instead.
+
+**3.3**
+
+The Open Source release.
+
+You can now build your own flavors of Genericons with all the SVGs provided.
+
+
+**3.2**
+
+A number of new icons and a couple of quick updates.
+
+* New: Activity
+* New: HTML anchor
+* New: Bug
+* New: Download
+* New: Handset
+* New: Microphone
+* New: Minus
+* New: Plus
+* New: Move
+* New: Rating stars, empty, half, full
+* New: Shuffle
+* New: video camera
+* New: Spotify
+* New: Twitch
+* Update: Fixed geometry in Edit icon
+* Update: Updated Foursquare icon
+* IE8 bugfix, slipstreamed into this.
-### Changelog
+Twitch and Spotify mark the last social icons that will be added to Genericons.
+Future social icons will have to happen in a separate font.
-** 3.1 **
+**3.1**
Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade.
@@ -63,7 +157,7 @@ Genericons is now generated using a commandline tool called FontCustom. This mak
* New: Paintbrush.
* Updated: Show and Hide icons were updated for clarity.
-** 3.0.3 **
+**3.0.3**
Bunch of updates mostly.
@@ -73,7 +167,7 @@ Bunch of updates mostly.
* Nicer "Share" icon.
* Bigger default Linkedin icon.
-** 3.0.2 **
+**3.0.2**
A slew of new stuff and updates.
@@ -88,7 +182,7 @@ A slew of new stuff and updates.
* The "pin" icon has been updated for style and clarity.
* The Twitter icon has been scaled down to fit with the other social icons.
-** 3.0.1 **
+**3.0.1**
Mostly maintenance.
@@ -97,7 +191,7 @@ Mostly maintenance.
* Replaced tabs with spaces in the helper CSS.
* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway.
-** 3.0 **
+**3.0**
Mainly maintenance and a few new icons.
@@ -107,18 +201,18 @@ Mainly maintenance and a few new icons.
* Genericons.com now has a mini release blog.
* The CSS has prettier formatting, props Konstantin Obenland.
-** 2.09 **
+**2.09**
Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet.
-** 2.06 **
+**2.06**
Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox.
-** 2.05 **
+**2.05**
Added a bunch of new icons, including upload to cloud, download to cloud, many more.
-** 2.0 **
+**2.0**
-Initial public release \ No newline at end of file
+Initial public release
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.eot b/plugins/jetpack/_inc/genericons/genericons/Genericons.eot
index b5f8647f..7322565a 100644
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.eot
+++ b/plugins/jetpack/_inc/genericons/genericons/Genericons.eot
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.svg b/plugins/jetpack/_inc/genericons/genericons/Genericons.svg
index f8131107..47406858 100644
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.svg
+++ b/plugins/jetpack/_inc/genericons/genericons/Genericons.svg
@@ -1,30 +1,32 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
-2014-10-3: Created.
+2015-9-18: Created with FontForge (http://fontforge.org)
-->
-<svg xmlns="http://www.w3.org/2000/svg">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
-Created by FontForge 20120731 at Fri Oct 3 09:39:07 2014
- By Joen
-Created by Joen with FontForge 2.0 (http://fontforge.sf.net)
+Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015
+ By Joen Asmussen
+Copyright (c) 2015, Joen Asmussen
</metadata>
<defs>
<font id="Genericons" horiz-adv-x="2048" >
<font-face
font-family="Genericons"
- font-weight="500"
+ font-weight="400"
font-stretch="normal"
units-per-em="2048"
- panose-1="2 0 6 9 0 0 0 0 0 0"
+ panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="2048"
descent="0"
bbox="-0.0140489 0 2048.01 2048"
underline-thickness="102.4"
underline-position="-204.8"
- unicode-range="U+F100-F517"
+ unicode-range="U+0020-F517"
/>
<missing-glyph />
+ <glyph glyph-name="space" unicode=" " horiz-adv-x="200"
+ />
<glyph glyph-name="uniF413" unicode="&#xf413;"
d="M256 1280c565.504 0 1024 -458.496 1024 -1024h-256c0 423.552 -344.448 768 -768 768v256zM256 1792c848.256 0 1536 -687.744 1536 -1536h-256c0 705.792 -574.208 1280 -1280 1280v256zM448 640c106.112 0 192 -86.0156 192 -192s-85.8877 -192 -192 -192
s-192 86.0156 -192 192s85.8877 192 192 192z" />
@@ -55,13 +57,13 @@ d="M1664 1280h128l-256 -768h-768l256 768h128l86.2725 256h339.455zM1300.86 1280h2
<glyph glyph-name="uniF430" unicode="&#xf430;"
d="M1024 1453.31l86.6562 -86.6553l-342.656 -342.656h896v-128h-896l342.656 -342.656l-86.6562 -86.6553l-493.312 493.312z" />
<glyph glyph-name="uniF515" unicode="&#xf515;"
-d="M1024 1920c494.848 0 896 -401.152 896 -896s-401.152 -896 -896 -896s-896 401.152 -896 896s401.152 896 896 896zM1387.52 601.216c29.4404 0 55.6807 23.6807 55.8086 56.0645c0 33.1514 -13.0557 46.4639 -35.4561 59.5195
-c-150.4 90.1123 -325.12 135.168 -521.216 135.168c-114.433 0 -224.769 -14.4639 -335.36 -39.6797c-27.1357 -5.12012 -48.7676 -23.8076 -48.7676 -61.4404c0 -29.1836 22.6553 -56.3193 56.7041 -56.3193c11.0078 0 29.4395 5.75977 44.1592 8.83203
-c90.2402 18.6875 186.752 30.9756 282.624 30.9756c171.776 0 333.696 -41.3438 463.616 -119.808c13.5684 -8.32031 23.4238 -13.3125 37.8877 -13.3125zM1485.18 838.4c38.9121 0 69.7607 31.3594 69.8887 70.0156c0 31.8721 -11.0078 53.6318 -40.832 70.7842
-c-178.433 106.752 -405.376 165.12 -639.872 165.12c-149.76 0 -252.544 -21.248 -353.28 -48.8965c-37.248 -10.624 -55.6797 -36.7354 -55.6797 -74.8799c0 -38.7842 31.3594 -70.1436 69.8877 -70.1436c16.3838 0 26.1123 5.11914 43.5205 10.1113
-c81.1514 21.5039 179.071 37.376 292.479 37.376c221.185 0 423.168 -57.4717 568.96 -144c13.3125 -7.55176 25.6006 -15.4873 44.9277 -15.4873zM1596.29 1114.24c45.3115 0 84.6084 35.0713 84.3516 83.8398c0 42.752 -18.9434 66.0479 -46.208 81.4082
-c-202.111 118.912 -478.976 172.928 -742.016 172.928c-155.008 0 -297.472 -17.5361 -425.216 -55.168c-32.5117 -9.59961 -62.7197 -36.9922 -62.7197 -85.6318c0 -47.8721 36.7354 -85.6318 84.4795 -85.6318c16.5117 0 33.0244 6.39941 46.0801 9.72754
-c113.024 30.5918 236.416 43.0078 357.888 43.0078c243.328 0 495.104 -53.5039 657.28 -150.784c17.0244 -9.34375 27.7764 -13.6953 46.0801 -13.6953z" />
+d="M1024 1920c499.2 0 896 -396.8 896 -896s-396.8 -896 -896 -896s-896 396.8 -896 896s396.8 896 896 896zM1382.4 601.6c38.3994 0 64 25.6006 64 51.2002c0 38.4004 -12.8008 51.2002 -38.4004 64c-153.6 89.6006 -332.8 140.8 -524.8 140.8
+c-115.2 0 -217.601 -25.5996 -320 -51.1992c-25.6006 -12.8008 -51.2002 -25.6006 -51.2002 -64c0 -25.6006 12.7998 -51.2002 51.2002 -51.2002c0 0 25.5996 12.7998 38.3994 12.7998c89.6006 12.7998 192 25.5996 281.601 25.5996
+c166.399 0 332.8 -38.3994 460.8 -115.199c12.7998 -12.8008 25.5996 -12.8008 38.4004 -12.8008zM1484.8 832c38.4004 0 64 38.4004 64 76.7998c0 38.4004 -12.7998 64 -38.3994 76.7998c-179.2 102.4 -409.601 166.4 -640 166.4c-153.601 0 -256 -25.5996 -358.4 -51.2002
+c-38.4004 -12.7998 -51.2002 -38.3994 -51.2002 -76.7998s38.4004 -76.7998 76.7998 -89.5996c12.8008 0 25.6006 12.7998 38.4004 12.7998c76.7998 25.5996 179.2 38.3994 294.4 38.3994c217.6 0 422.399 -51.1992 563.199 -140.8
+c25.6006 0 25.6006 -12.7998 51.2002 -12.7998zM1600 1113.6c38.4004 0 76.7998 38.4004 76.7998 89.6006c0 38.3994 -25.5996 64 -51.2002 76.7998c-204.8 128 -473.6 179.2 -742.399 179.2c-153.601 0 -294.4 -12.7998 -422.4 -51.2002
+c-38.3994 -12.7998 -64 -38.4004 -64 -89.5996c0 -51.2002 38.4004 -89.6006 89.6006 -89.6006c25.5996 0 38.3994 12.7998 51.1992 12.7998c115.2 25.6006 230.4 38.4004 358.4 38.4004c243.2 0 486.4 -51.2002 652.8 -153.6
+c25.6006 -12.8008 38.4004 -12.8008 51.2002 -12.8008z" />
<glyph glyph-name="uniF448" unicode="&#xf448;"
d="M512 384v1280h384v-1280h-384zM1152 1664h384v-1280h-384v1280z" />
<glyph glyph-name="uniF453" unicode="&#xf453;"
@@ -163,12 +165,8 @@ d="M1024 1664l640 -512l-128 -128v-512h-1024v512l-128 128zM1152 576v448h-256v-448
<glyph glyph-name="uniF458" unicode="&#xf458;"
d="M1920 1024l-1024 -640v480l-768 -480v1280l768 -480v480z" />
<glyph glyph-name="uniF218" unicode="&#xf218;"
-d="M1792 1152h256v-128h-256v-256h-128v256h-256v128h256v256h128v-256zM1301.5 1920l-150.528 -84.7363h-145.792c54.0166 -44.6719 167.04 -138.624 167.04 -317.439c0 -173.952 -98.8154 -256.256 -197.504 -333.952
-c-30.5918 -30.4639 -65.9199 -63.4883 -65.9199 -115.2s35.3281 -79.8721 61.1846 -101.12l84.7354 -65.792c103.424 -86.9121 197.376 -166.912 197.376 -329.216c0 -221.184 -213.888 -444.544 -618.368 -444.544c-341.119 0 -505.728 162.304 -505.728 336.384
-c0 84.6084 42.3682 204.544 181.12 286.849c145.792 89.4717 343.424 101.119 449.152 108.159c-32.8965 42.3682 -70.5283 87.04 -70.5283 159.744c0 40.1924 11.7754 63.7441 23.5518 91.7764c-25.9844 -2.04785 -51.7119 -4.6084 -75.2637 -4.6084
-c-249.216 0 -390.4 185.856 -390.4 369.28c0 108.032 49.4082 227.968 150.528 315.008c134.144 110.592 294.016 129.408 420.864 129.408h484.479zM1094.53 480.768c0 119.809 -77.5684 183.425 -256.385 310.528c-18.8154 2.30371 -30.5918 2.30371 -54.0156 2.30371
-c-21.1201 0 -148.224 -4.60742 -246.912 -37.6318c-51.8398 -18.8154 -202.368 -75.1357 -202.368 -242.304c0 -166.784 162.305 -286.848 413.952 -286.848c225.792 0 345.729 108.159 345.729 253.951zM906.496 1238.02c54.0156 54.1445 58.752 129.408 58.624 171.648
-c0 169.344 -101.12 432.768 -296.192 432.768c-61.3115 0 -127.104 -30.5918 -164.735 -77.5674c-39.9365 -49.4082 -51.7119 -112.896 -51.7119 -174.08c0 -157.568 91.6475 -418.561 294.016 -418.561c58.752 0 122.368 28.2881 160 65.792z" />
+d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
+c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
<glyph glyph-name="uniF513" unicode="&#xf513;"
d="M1920 1280l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496l212.991 636.032l-555.264 387.968h685.312l210.688 640l210.688 -640h685.312zM1024 807.68l307.584 -219.136l-118.4 353.536l300.288 209.92h-371.456l-118.016 358.528v-702.849z
" />
@@ -398,12 +396,8 @@ c-48.2559 175.232 -96.5117 350.336 -144.64 525.568c-53.6318 190.976 -111.232 286
c117.888 100.991 206.464 154.111 265.472 159.487c139.521 13.3125 225.28 -81.2793 257.536 -283.392c34.8164 -218.24 58.8799 -353.92 72.4482 -407.04c40.1924 -180.992 84.4805 -271.36 132.736 -271.36c37.5039 0 93.8232 58.752 169.088 176.128
c75.0078 117.376 115.2 206.849 120.576 268.16c10.624 101.376 -29.4404 152.192 -120.576 152.192c-43.0078 0 -87.2959 -9.98438 -132.736 -29.1846c88.0645 285.952 256.512 424.704 504.704 416.769z" />
<glyph glyph-name="uniF206" unicode="&#xf206;"
-d="M571.904 570.112c-36.4805 0 -71.6807 -1.02441 -110.208 -1.02441c-127.36 0 -240.513 -32 -333.696 -83.3281v484.864c78.0801 -78.208 189.696 -126.208 329.984 -126.336c20.2236 0 39.6797 1.02344 58.8799 2.43164
-c-18.8164 -35.9678 -32.2559 -76.1602 -32.2559 -118.271c0 -70.9121 39.04 -111.36 87.2959 -158.336zM575.232 937.088c-163.584 4.86426 -319.104 155.008 -347.265 369.792c-28.2881 214.912 81.4082 379.264 244.992 374.4
-c163.584 -4.86426 303.488 -181.12 331.648 -396.032c28.2881 -214.784 -65.9199 -353.024 -229.376 -348.16zM965.504 217.856c4.99219 -21.248 7.80762 -43.1367 7.80762 -65.5361c0 -8.19238 -0.639648 -16.2559 -1.02344 -24.3203h-588.288
-c-115.328 0 -211.712 76.7998 -243.712 181.504c74.8799 110.72 228.224 189.824 401.408 187.904c56.832 -0.640625 109.823 -9.72852 157.952 -25.3438c132.352 -91.9043 238.976 -149.376 265.855 -254.208zM1920 1536h-256v256h-128v-256h-256v-128h256v-256h128v256
-h256v-1024.13c0 -141.312 -114.688 -256 -256 -256h-506.624c2.55957 16.7676 4.22363 33.5361 4.22363 50.3037c0 183.937 -39.6797 276.48 -235.647 423.424c-56.1924 42.2402 -178.688 128.769 -178.688 186.881c0 67.9678 19.4561 101.632 121.856 181.504
-c104.96 82.0479 179.328 190.208 179.328 324.352c0 146.176 -59.7764 278.912 -172.16 343.296h159.36l135.68 142.464h-606.977c-174.336 0 -332.159 -72.832 -436.352 -181.376v65.2803c0 141.312 114.688 256 256 256h1280c141.312 0 256 -114.688 256 -256v-128z" />
+d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
+c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
<glyph glyph-name="uniF407" unicode="&#xf407;"
d="M1280 1536l256 -128v-128h-128h-128h-128h-128h-128h-128h-128h-128h-128v128l256 128c0 70.7842 57.3438 128 128 128h384c70.7842 0 128 -57.2158 128 -128zM1088 1408c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64h-256c-35.3281 0 -64 -28.6719 -64 -64
s28.6719 -64 64 -64h256zM1280 1216h128v-704c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.6562 0 -128 57.2158 -128 128v704h128v-704h128v704h128v-704h128v704h128v-704h128v704z" />
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf b/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf
index 1f160ddb..01744385 100644
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf
+++ b/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.woff b/plugins/jetpack/_inc/genericons/genericons/Genericons.woff
index 973e0339..0e7212af 100644
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.woff
+++ b/plugins/jetpack/_inc/genericons/genericons/Genericons.woff
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/genericons.css b/plugins/jetpack/_inc/genericons/genericons/genericons.css
index f58f42e8..87cf754e 100644
--- a/plugins/jetpack/_inc/genericons/genericons/genericons.css
+++ b/plugins/jetpack/_inc/genericons/genericons/genericons.css
@@ -9,19 +9,21 @@
IE9 uses WOFF which is base64 encoded to allow cross-site embedding.
So unfortunately, IE9 will throw a console error, but it'll still work.
When the font is base64 encoded, cross-site embedding works in Firefox */
-
@font-face {
- font-family: 'Genericons';
- src: url('Genericons.eot');
+ font-family: "Genericons";
+ src: url("./Genericons.eot");
+ src: url("./Genericons.eot?") format("embedded-opentype");
+ font-weight: normal;
+ font-style: normal;
}
@font-face {
- font-family: 'Genericons';
- src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAADgYAA0AAAAAWDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA3/AAAABoAAAAcbOWpBk9TLzIAAAGUAAAARQAAAGBVb3cYY21hcAAAAngAAACUAAABqq7WqvhjdnQgAAADDAAAAAQAAAAEAEQFEWdhc3AAADf0AAAACAAAAAj//wADZ2x5ZgAABEAAADAqAABJ0A3bTddoZWFkAAABMAAAACkAAAA2B8ZTM2hoZWEAAAFcAAAAGAAAACQQuQgFaG10eAAAAdwAAACZAAABNGKqU2Vsb2NhAAADEAAAAS4AAAEuB9f1Nm1heHAAAAF0AAAAIAAAACAA6AEZbmFtZQAANGwAAAFRAAAChXCWuFJwb3N0AAA1wAAAAjEAAAXmlxz2knjaY2BkYGAA4rplZ/Tj+W2+MnBzMIDAhRBmaWSag4EDQjGBKADj7gZyAAAAeNpjYGRg4GAAgh1gEsRmZEAFLAAWNADXAAEAAACWAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNg4WBg/MLAysDAasw6k4GBUQ5CM19nSGMSYmBgYmDjZIADAQSTISDNNYXhwEeGr+IcIO4ODogwI5ISBQZGAOtvCU0AAAB42kVPuxXCQAyTL+GRmmVoKdgA6FNRMoObdAyRnj3o6NkGLOl4+N75I381AUeUTPoNASSyoWVUBMYUYkmt/KOQVdG79IceFtwj8QpN4JxI+vL4LrYUTlL294GNerLNcGfiRMu6gfhOGMbSzTOz30lv9SbvMoe+TRfHFld08b4wQ/Mhk6ocD8rtKzrHrV/49A34cy/9BURAKJ4AAAB42t2NPw8BQRTEZ+/E2Xi7NlHIJsI1hGgodVqdVqfVqZRqH8QXvL25eq0/USh8AL/kzWReJhkAOV43hMKDW0rqmVu4Jh/BpY+tdNDBh2ndoabnnGtuueeR52YQI1AhILhQ1iDoWHLJDXc88NQgxl5ujS2sMjNZyUImMhYvfTFSdC/v3R+oNj4llSXJvgv4e+6zoCcQAEQFEQAAACwALAAsAFoAhADMAPIBAAEcAUYBlAHOAggCsgNMA6QD4AQSBMIFXAWoBgQGdgcIByoHageOB8gIJgkeCn4LOgvIDH4Myg2YDeoOLA5oDtIO9A8QDy4PeA+aD+AQNhCgEN4RFBFSEZwR9hJgEoISpBLuEwwTKBNEE3ITihPOFAYUWBSYFMgU3BT4FT4VTBViFaAVzhY6FmYWlhaoFsIW2hbuFwQXEhcgFzYXlBfEGAIYNhh4GLIY2hj8GSoZhBnAGfAaBhoUGioaQBpOGn4awBr4GyobgBuWG6wb3hwCHCwccByqHOgdFh02HWodmh3MHgQeHh5GHowfpB/OH9wf6B/2IAQgWCCOIOYhdiGuIfAiciKOIrQi6CL2IyojRCN2I5QjviQIJJAkxCToAAB42oV8CWBU1dX/PW+dyT57Mkkms2RmAkkmyazZCEPYE3ZCWALKJkhYI7IorT4XFERwQdEiAtaK1l0roMUln3WtSktBPltrP7CLyx9b21o/hczlf+59MyGA+jF579333n3vbuf+zu+cex5EICMIERbK04hIVBJ6BkhN87OqRL4IP6PIf2x+VhQwSZ4R2WWZXX5WVaCv+Vlg1yMmj8nvMXlGCG5aDvfSy+Vppx8bIb1HCFEEIhCFyBp/bzbJJxbiIAQ8No9s88TkmMcGuPkxbcKjQCTSRwQtpYkESErDFDmLj8pa+t9Zwg8UNyIA5lHxh++1YFluyVwgSO5yocBMwvFowKtYxRr4Kcw7fJjuoZfQPYcPw1vHduw4tkMl567MYzn6Du9gNwgWr4GmaoqGr3WQYjIY6yqz5lk8JNwiREOCN0+wukC0yTESdoHNmif4vCGIxmVNIN9iY/FAHzqwb/3o0ev36YezZ4nw8ye3d0amrRs2fXtnJzamTxM1DcgZrT8TO4jfzk3upb2d26cPWzct0rn9ye2sPgIxDOw/7DuTB7BKbGM/Cd/Vp/UREXsFMAWajHuBAJ5Tvmcb9g+wawprm0CIUcC+1s7gWQp/eI8/h32ZixmtimqSTSGIReNuu6zd1nOW9Nx2ElpOytqG1ytSn2rCvRWvb9hz8iQfA3xKYWPAxhXrY80Dnykcj8G5pAdwTDef2tK9Q8gkKNaajfOWU5uB7OgekCQCqyevSxGJsnG120xYo1g8ZmKDiicOG9bNFHVg/+MddwDTLZCwsVv2MMsWFA9B1qHuzmTP7p5kZ3dvZ/ch+vWhus4GfkElhzZSbd7uwD2NHaBN7OmZSLWOxnsCu+eBtvEEHqi28dChjaAl10wvwjyU5wHMw3qO9KqsbgXEh+0N87pVggk8CQ9rtH7BhyPk87J6xSOK1r1jR7dGk3S/Blv2nKT8HE+TPKFgk9klmoRe7eQeQTt3uqMbMEVEyIybjKW6mASw8sDFxikYj0WDmCzAZIsQiwaCLDcfe03Kjzc1xWe1t0PBjAULZnTVtPonjpbx9hnchIL4rbtujc1q7+7G+zM/p32fz+yq6blx1OWHRmMR2M6oASWPrOMzyyWYbVZBkVQlgELBimlRsOAWIRAMQZ6gBoKKGhLzIQ9wcjgUm9UlOxQ1TwhBMCQFB+N1u8MlOVxKwmq32qxKMFAewNqaWwRxDdgh68RLN7YteYHSe30+CLpiMxeMH1tbskQxGvMtUl64eUHiqptvvioxf2goK6sg32CUlpTUjpkwf2YsmmsPjR46yikYS73xUimnyGhyisZSpzcXFIc7MWp+M/h899DUC0vabnzphIGwPf16y8P0rTOvhFV3ofSrKcPnOhVLeXjC/E1T916RXzHm0joQZXOd3wvg9deZFEGomNSQKMlevWfK5vkTwn6zEurKypMLYtVSrq+4UFCznWZQCl31Hil3kGtwXpapfGJdVqFbibx8Bhoe3sIbh53IgIoQ3qcGYiKliC1hkiSTCPGHE4KoENXuj5sT5bILzIgrZkecJALBHGDd6xIccckhAMtUnhAsXsVnt7RIiUAVuCWCsEcQ9wgDPonsP+R56k90U/cH4phd7xbSU/RYXmPX6fuvXPZjePyTgiT9G+2Rl4w+8L/N9tKg8iiMu9p5pvFV+s+aV+GrW7Y+4dbci36t7B2/Zcmga+hBehXsgg1g+dnP6Bd0I12I2xc/+xlYtElQBTe20SNv9u5dBh29oVDxvfTXwubkw/Q369+D+PharTMMHzRc2u0qjXTkeJRiKIV/T6OHjtvHhMAJ8YJ9dJ/Q6G5pLb/mTu2Cl2OBvFDWXYB4XIV4/BFpwBNFtSPgSpLP7bdHwjjlUbwwgYchKF8MrxJ2yYES2iJEwnZHPJEHalzV2pcL1bO0p39L6TZ6mJ6tqpr24B1D173k87vraq99ZMKM9hnhW+CWj7MaF2xqn7Al8uNl1o6GFUrtqgnFtiXH3jt0/+phD8mBUXXitpVqbtE7N8qVYvinlyzofPSd7EGVbZsWNA5JFCWTS7y5en0J6g9VI8F+dPAhSls8Q1BHRByJgA8VSCnCIirN8wCC/g3ycujfKlv3yeOXXHLnjCpKU1XshoqIcIYgdL4JUm9OcwL+lRW/dM2IU7Qv1bCjW8Y7HNuxXPkTLNfN8EFkioGVEW2RsCfKQPTyckVpN4zNp2/Q3j/9yVE95pJr2hLdTqc6Z2FF1GmUvqFH+g6KY6EGhOjc6WPipYoo0r+Z/NVeUTASRJ9M2yyIzB6ykKzg2GA3s0HxeXFGF5jjgJILCoRRdrPBbgFLPNEixqIMCAwIHZGwI1Du80qKGo6E40MhbldURQWLiDgSd9jPXfPjUKti3ByLim2wDMZ9uW3Y6n2vfXr1Afrcl9u2fUn/ePo9eu0oMXDL9ZLwzb9W/Rl8kwSpIM+iOgqt4JDNcp6kChMawbiCfnbfLfTs4THFRf5lPq/NkmetqgX/09d0WPOt1o0TA0t9PrxoqxR88pCvD/5B1fDtzx24+tPX9q0etu1LGMdLT+WdohsWSqX399WEZEV4ODXMI+3t2w05Sk5d3ahIYWhmzCv4De7skvxCW3ZDJyxc1fXgClkQocwrykLfPYIJZqiC1w1ZmYtqReXNO1MN3bD6w8NM1lHXk2t5/+YjykfIUhxJnOhe1cRknGEqWLAbAy3gcIkOuwKsh1CIgngB0VUBNuRIrJhocbFDnA4JQW9IxX5PcNCOJDxehZ1GPCibQrN5rOXgPde86/S4nWWeH79ty6u/enJzz/Qh2TYNclRIPTftpqLGD7Qp4yyjfPFSj1XsRQJ2ls9KprZk2RLtaoNgTqDAnW821LT/YubUvTenHrj2r5N0yRQaYSr89VqxpcHTXA5TpN/uXvLUPFFIdt8+aW9vKubxCPZFk6ZdLkBhbm1hRWkwKBcASRfRh8+X2Mcuumx2fWlWaUGJtdBmjI5uuvX5Vc/Xbps/dRibG1w3IrAqLyE/MpM6nR0FmeplooaqCCkIXoqyaQcqEgSPOeixtSh4T7AJc+gBaHtImHzZ4qmJjiqo6pQL6MHJnZWjB+dm04OSBGOzbW5PTaS1fMrmxQ1AxP+5ef7YtnnV4+tqx4fO7BTMS9b5I+7ieOq/xevnbDWV+IqLLdmJpU+s5GOppcfSgnOyeQAapKc940oWpAwh8CGpsdrxAq+moMY89gKbirVOcByzmXSEYCCAlMBBv71hxGSY1Dp8yuRhUtPDm8KT670F9BsAMBiyvA3ekcMykKEPwmkiFvV9Im6c2Ng8fkJT48S+DfDmUweKKoOFqzx09f4DcKjS5hxUemkHnYGd+RgqqsmooyaxGrskfWoHggLO0mAgYQkJvGcZDmN/svlqZlKG9casSMjUPPYXZNlaZKlu7e+f3DY3Wj31qh0HFi54yju2wDvnbrX0p1KefeuiqTMCzXmOqxeueWH+yBve+vGcx25eMTY41ayqolVQffZpaxPl45bd84s/G0hi/qa9++ds+PiVXcub5yTpR/UbtscfuVp42uhZEr310NIpke3/1bDg9ueh7sDlz1zXFpq86qZ7J9093+YszJmYVWgy+u56cdX43fdtXT89rOuUjB5ekOE2BUKegM0MxhMWFzDNwhol6o2yO+wIYZCIB4JpzYKiw5gt0v4Ep1xMtjBfGWAnOQLkQl6T5hx3bWsvGVOydfJVv7l9ctMVu95bvfbI7msmDupebC6RBZMgy3kjRmu9PZc92F0/acclsQ5/Tnada/Tw+KxYgcHYY3HI++mpXQNZDP2cfs3eP3j9AnDG2pceAvHurifuWplMXPKj2+9uu+XoYEOexZDMstpME6+a9+zNk5uX3DZt+zd3x7piNbvWDW6dPuLq9srJFgv1T52/eSI4YO3hfrIikL3CXHWuvBcnVz7n4AXIswvK00fZCjO++oo+8lXqynRC3sv2X6XP8KjrbsK5shdPJBFtBR9qkiAKC9LWBP4sZocZoQ1TeMmsbABrQQ4aZnem7l+2wjt5tvWqjo3XPT3zSF3U2jy2vmeVoWBTcuSNKjHQh2iKDqGDoAxuuwbKOpZdufpeg5X+lj4/kf7z6adn31sKT7A2ZGy5fMSGi+afUVAImjB7+vgeuNWpIAOn/FzAfR9n0gTgA6IpFTiXvbqFg+iKgMtA2YSKCsWGkeCYyRfjjUpIw+HndLqpoLp53KabV8+Zs2zDpZcMb42+0d3eHqo2qRptop/Q6K6qKmf5DPq3uN1eVtbQeN0GYU3Kl0zOmrklowsy+OEg1WTIxfUnbqXA7o4XYI34bHRz/oN1syO4x00ol5WoPkrBam+CcHwghIhl9NWTzJxDM+Hv5s2n6OenNpvp39tjMom1t8e09O58FKHkpP5U30mRjGpEYw3tuKaRKfaItD/zTDufWmcBVFDOkm3kTrKD/ITcTx4gD5FHmGWJTbDVKuzPqtSh/aLUKaqV7RQbAxTsTiUfQPEGobYGAsHaQCygd28gGA3yGRiI4cUodkGsNh6L10VZn8fCCX7Uf0OhNgHxsANq7XW19ojd0f+zsa2W/Vkd1jo7mOSEERx+2ZYAk1/1J4KqEYKyP6aqOOr8n4B/QnqPh1SrqcKUagURUJxFdlWA8/4J0J8Z1bzwMmYXXgYB+t+RfhHgq8D1SWpd6swn4Eq98RDcTT/+RBj92WefQaUgf0I/Fhofkv4lS7RaUAWQ2DOsUIEVmX4Dvh9odXYOHGWvT9dU5PfxAPgQPijBUUkWQAYBT9nGHuMvYPuj2dm0Ot1CUX8jK4NlwydgIn3vlZ0wgz6y85W9f1yRehmir9w3YdeuXZiasfOVB/644nxZtaCee5l8wmQVWWEB2otubua1IClH01FA/eCwSwmcMlw/IKYisA4FhqmYA21CC2eDCiP1iKy10TrGd8rZJf5onIFwCBT9gnAOmJHmBLji4dmYWYBvYzfZOVNKIhquQY7XyJ3wlD2RPhUgXJ7QqRJ7JWK4hGUGA+ZEHK8nFElBuDfbJYkcYCyUkUN6FyOhnI8e3U2PL1++0Gra96P14N4wtn3lu3dNL0+GsEeNIgz72WuLHwTXPLf/cvrh7eLgwZ1brlzbMWvuU9e0Z3d3LKJfLb9ySEuWYefyFf/T1OJoD23cFOu02CIFVbHSqlmBQNRgMBcVVIaLndFqc7FDVirLKmpCY3LRJjTa7CMDgVFWm2w2Fnsr7JVdHq9fFDo3tkam1eTYzJMWra0vHxYxFRvNjg2PdEy/fRrdcAo2LWqavuPt1eNvmOeMj1m9ih58+GH62ei23OkzoPpZk/k++tnba6/7EEI6B9abyShwmg3fY1izcin9/d13nR07Jq/BNmP7u6tGbVoTxrZmCdC+rOnWDZHqa+5OZQ2/qX71YF+Jt/2ap+YKS19pGW9talmy9Efrf+XyTJnT9XF7pNoaHDJ33rTiyjI1O8/hGD1ocIfH4bEIQo7TXNzm97eYkN7WVwpQNrbU5RGg0ufrCFo9TotkLCpzz6wdtjRkyhl5ycpYtKPaYM+rGVKe2NA88apYfs7yB/tu/ubdm25cc+S+pVb38q2T76FPrt+wqtT5P3t2wfKf3Pc7lyTk3PIB/dPuffR3H17fL78G1FQkm3SRK8mtun+SkekYkmlQfZwGodgwz18ZuGR2hjIsMslG6ybBU0osLdcopR6IhlCKOOnkHAJ5khhPcwrGQ60utMviiDIZtqtR+z13FroSbmehu7nK77AUOiyWaZ7yeKk7N7z4jnfWLHx47ZSgoaA0mPBGNtzaNsSSV5yFU1xQwNBomnXP3Nj4sfeDAew5ZeXDWiIWn2XY2urC8mGV3j8f+tmBl5oc4REL6l0tcUu0oCw8tLO2aoakZZi8QKZZSpJDLomEZ7a0Bkrt9praSkt+a4k7UT1kZHD4dT2dYf/QznkxeygSCddY3ZV2VSqyhKqcan52npovIXlJLrlhVMfDyetOz3NFwoMToXJRNucb8wfXTq65du9WcVFTT/TK1bMbLD5HcsWgWZdOG1Hhx7I3Im7E1evIIuxxF07qPDmExqcpz4AzmadcQjyB6tYlYj/HQ4ov6A3kYTZwiWWghiSc/C0i2kLybrVo7MgZI5qceWWVy1auW3X59KTZjGrEYLK6/dHS6IqOkWaLZ8Tw+gKoV6zJoTPGTxlalyWUt0zpmj11mMUiFUSi7aOmjh5TUlwkmpxFRuNJ1dE4qDR7zPCRjzz89E/v3TDbqQ4ScwaHp825YdvB+TM3T01Y5NxcVaH/T1DtDrfL5yrNNgtFrpxcKPRW5pVXi8+m/ibI2ZJsqR6+dOS467vaqrz5BoRYJb+wItJeXT138rjGqpzst43uJSseeuCN2ROuaHILeSVFWYTzr1uxb65EmRxErsPesavc0RxkIiahmmdMVERbmhk5KI7AvICBgT/Mw2xte5qo9N9HosV0rXWATrSmOUz/fVuG3sTVYREYf8P+hVctnzjuig+fR/ptGl7Xtf7uSVvXtY2a//JD21dPraKLmry+IU0dU5Z0utzlbktBNNE1v3Kwp8RRVBP1eYuc9fVTp63atmRZfUMi1jVj4+yWeq+npfXyCdWhQqfDVlJWFff64tHp6w78ZMUqsXXxFQv33zC+MW/Isl0v/GF1x7QrNk66e31XXXtO1dTV2x96ef4c+uuOy2cMaa4IFjsdFqPRnI/vCHnL3e6WkM1eXl4dCtcitXIGB41tm7toRGswUGI1mzyu8NDBVXabxxOrLSxCm659/LiaoaEQtweQ5RGF8dQoYyg4P3XrBvdKJbIuzrlCQiWYuFbiHc88/0hU0IpWNHuwyM629liSsSCaHHbl6FmDtd66FfOSoCKieWaOKjAYYG+sXSLFdeUGT1DfY+7u9oraCkG75IFvNsumak9Jx84p0/b6A+26ifIebFUj6mruLQySWjKUjEG7bDPWMo7V0octikQHxwqwlmmr117OzDOFnfnj3DxR7ajjWJJ7Xqx2CayOOHNFKcSrMJd51GLVfWuAGpvzyIydh/ksCGgOuQXtItYVaPUE/aLdwc5dIL2VP9iV3/nCoc581+D8+tvuoP9oDYWGDQuFWmHE7NbW2a2Cp7JhUHXZ1NSWx8D36KP0o8cepx89+ij4Uh9X1EwrrRrUKFfjQAyt3lcfyrvydfolPU6/fH1NQWll0dqpdVNLDv51tmw226ChcEpd25IlbTUT60R6evyfniqZFo7PjouGfFdlfmdnfqUrvx6UUCsW39qq70OhIWW1gxqCQ1KLu/cvXXagu/vA8QPdwn01JeOGlDcIHaGWUHUy9XSiqzhcd9kLGydO3Pj8ZWjPRob5pq6tDswzwtv27Bx5zKC6JXctqR4faqbX5MytCMVns/nJUFNFqSE+ksDxYA4uZsaLfDlIGIIKRF+K4N3msKmyJ2MzBmOOhH5Tmmz32701ALPvnzNSmx0HtWZEjfzmli1vSfcjLVJn754zZ/dsWHI/XpaOzLb7bSEvLZv1k5mxrh+POHLYU1PjgU82vfTKpqXV1x7p2jVr5s6u39WGjrHrRK8jW5tBuc4n5Rn7gS+Q6f4HtkSGfJetkzkg4UIjIeFQkOln1sbQUPhDoL3bT/9A/+Dvbg/AEtnUMKLBJKt8yeKIvnx2hK1RpPaxDPRD8PMHdkilPl+pRHSf4cvIDVv7168chBhFkzEnYTNCzCHcBj2pL+h2WC5YKKYFCyxP/VPIp9tTX0APvR2u2J36MvXlbrWVvksPQnnqBfDR5+m7EIUx9CP6sLiX/hHGQvTMt/S9xavpq9CyejFvu0DIWWUktt1FRvK2q6KAqpiZRCrkgW6xMWue8Uec32ztKGFGxsiMJZ1VMkuLe2094RaQ35jRaI3OlGXFWlTjOm2QVboub7A721qWX9ZcIZz0yk5LaoWtVP6301pa9pG1WBRcouSy0H8W+3zFMDTbXqCS+fMppS1Wq63CZhYMtKEgV5TVygrZ5qiqKqErf2Evc5v7DIqMclKY58wz7Mq1+rzFwWJPjoXjFFt7YmttA63ZAQtN5HsXltIrSRzrBJRavl7H1pHQmHUg1xEjQi/z7TGLF7OnNE2T0BxGZoQcISNLWLLC2FIO97IZIbPIKuFUSBFKxHe6GaApmEwRtobXzs5JZv2Ky2EZ8ad9xhnrgLmM9ZVVxCY8kywmNB5NYh24QH5x1aoX6Rn6MT3z0sqVL8Fda96/r6vrvvfX7KJf79wJWX+EwV30GZWsfEnPxLKj3YIPvnRmZdfO458f39m1k35N38LsEqGz6H93wST4gy4fWCfC13lNeO5lOGq3iqxXPawzpW6+UqwxL8DJPZLG14fp5yf3MM605yTrk3PtyibFpEr3PSJnjNhwszBnni5W3B5PjxcbKh8rLCKj0jmNmyZgZ7fH+rgFLeI+1etE5h9I4t6paGfYFNK0M5iNZUixvbA/4KSE3YdezHl+XVxkMGnEutSi5a+KjEclLHqJniaoDUfQICqBuh+qqoRlKaFIibrsSV4GYdahw81drd9ZY+lXIBhUrFFxTqgInsEqCW4H2qeHvqvyhOT013VgTEAxykYlaUIdN5zhacQmprdM2pNOR3Az/VBPZ549FyrAasyP39MASvQ87B7faPqY2Qvku5oCMT0ggc+PaTBNvVq9GtvjRoQDB6DB0CJAAtSAN5+vf6qQsIeHIuzCn4SyWamT5U2NQW+OtV745jmhbL+/O7C/0GwufC51Yn8A036hnufy15TmGUORKdKL+1MnnvP79xe1thbuF8owecDf3T83Oc4XkBLsOxVQS7MoiHK3ZEZ2R9BqQQRDDYXYh4aG6d4X0vMH6iFr58q+lesPf3V4PdsBNvgfKzN3cOrseuFeeCd9c/16kvG3p8viLb2gOJIuKg+sdkvMY5NN8I+LykyN6n+nQdDEldR0Ubn023O1MvA+FgfEe5SQCu6L6zfTfrAeotZvZwn/R3UUcm6FI/V/1IvrNwKVBqK8T3KxTqWIbtUstoJBW9AIcayKaATe8UZgnuU4mhpx7kQVOO9C/JThDJUX0q+Q93x1GVXg9GWQA4Mhxw9r6Nbxr3/w2jh6K1wx/vVly16fmCLMbXeSvjqPY6uMT1J50erVi+E0nF68enVfJVwJqydMnTKB3kq34hFe3aM/cFKIcXQ+r84sxsXHZx0Bb5CtJyms7kgrE8xiTUDQ4oBggjUEbYkM3vs5c8QGJXS+KZEiDzynnBQA5vKW3P3zXdsv6Vj2ejus+X3oujPkOo028mbd/b9vp7bwasB73bc9sow3raVn6Mk9yxBy4DlP0Z6Twgm6l7Vp4nbvlAlw5QfwMX8DvMEauDf1Lm/4191LeBNf7Zm7nIMxCAy09DgU7H/mxsP6GQGVUS8kNdpLezVI8h0k5QvONZYnvXbL1wXOf4eB9PWKSa2vt69XE5N8JybVC841lofJqJbWKxbEsxiLHrJVGmJ+fcVNZT3IsAqRSo70O3Mj534y0QFH07GnPQYINEwhOM+mAV/TwUfPofDMCEX7EXTxrzfFTRABj5mN8wYoRd6wgxjZfLXgH8jFoBJafpD6qf8gLRfGPfecdC09kPoMxtHnBAe0geBIfcawRecLGnZtFp/tCLxB5gRHra9pfUQTccIoDDApc7ineqGXJs/xY8YXjNyfYgT8M3kYi0jhT8TfaUzz8KRetmNVJRLvv16lF58zkDzGdIwCm90OHIoaQfWjPGIf9fZpNClqqSfmClNTe7W5ybkajMf0XAVL79OgF1vO7vXN5fdy2a00f8K3syE2ZkKoVOQ5jPYgDCVT/ElWFegdiDc5OLc5g+ZxMJ6oUO4zhVGNOQFPsiBQBT4zM45QzQLR11DazpLDdPdvj8A2mAwlb6w4S2Y/9AX9hO5/ctXeVfgnZ0JRfgvzD4tkxRv0L/QpesWRJ6Edir54aHafxvNx3U5krMdZ9RXsDSeP/3GhPuE2KU7RFmQW/VOzGDwW9d3KvOiVU7891bq42eHwCd9UrrpiVSX9Xz7vfh+lf4sIs0ZpcxK+5LTueun9UWPHjjp9hM8qiLE1ECwvs25iQ2yI6LyGoQLaLglub3IkQ1BD9PUwaLA7WOODakgQOI1SvCwajv66nf7q1ekPbW0EtAoCsS3jWfATbmi+tsOQV6//dCa7Dr6pC77ijZVQlB4/FupoArQm/PEhJ4UytjDz+LGFM9kFKA+X0lree3osG48Rq8xEiOWBl3F6nFZ2Nw8V83n7A8L4XOM0mQeGcQTXWKpn4qRVOG80dmRhYSntaobtVzNsYDFggjaxZ9WkNNl6jTazM4FsZPMC7lCYbOSRQj32EMFTZVgfi5rRhChgxRfYxXKuOWZOokvokkkzd8K+G1988UZ8s0qYNllzFG/APZOOrtkFWSnni2B4kQWqMTyby/BMPsGmEJIJHyQcMucl9IR2Qj4xN0Vgr9aLY4UyaiD9XIoU4WCx8WJHA/mG6BtwRyPTbSmuCgdwBgsZhO8I4qzOY35uhwkHkTWBeUAcHlMZChiP3jCh6MOf/yxon9aM8P/+4ZtPPTZ/vbyp/rJRf05plvfHTFr45Ap2TSnF809DqzaOfIb+o4qetm9+A8Rbd4GdTrj8jUdG4/OW90f98vI1h7eVgoI3aYrZJCK2VdJ4a9i01FhMY7qeDH9YJ7D2cUn0p3OcQfOkD5/rIzyQkCHNVCFpYH2mcjuzjM1yzg/SB3BI6fVLc3q+CPX0P7BdoxZYIz2UTqzqG46CwYbhn7t7enb3yA/QMsq8pHtSJ/Vjyzx2F8WHHuphWc7jJirnswxfeJjewJkp87g8NJXwCO3n5iMicfqqyIPzBk5Gwl7FdUr63RmmnNCZMknjjvmCoz8dWaszZV39yFzxeLgSQrMRybPPxPII+7jyGPgH6cBRFqOaUUM0qZsDfJ/EyrH7OAj8CdAfpPphn06MJU6bmUbS33qGW5QswJcROkbEicps0RJuz+rqMBpvgrQfi/uYuH9ywOKlqh7a2Lq2KvTiFXtOFkqE22U7yjwbD0WqL9twck9LK5+bmgqqnI41tlsZ/w6yiREMRIeylUERablyoL39s7Yj7bSBnoA3oa3ts/ZjbTP2niV75V3tR/EWjKEN4Ga3juFZW2rHXiAMkIHpLpnRKPVc/4t6RWS9Qtyn+Dv57/KTXNcIWHjMAxKBL6hlOkxn4b/05/IT1EItnTBdg+ncD4kT7HeKpj+Dcx7JLZJaiUynP2cRvjB9OrXIT3TSn+OznfAFt+WTCqsHY3RMQQJCRKo3haymV2a6WEBqk+T5GJYkWT6sixGzcS+BkMSfxhQ2JlO9/bERIlaPRbqiBIs8VLmPyyHgDMWq6fdQttkkzdxL8wRZ4+HexCiyymuMlDEJOEMEPaib8/gCdiJrysX2n48EUbJrUOckuCVIMvYe2xIRm2/geWSAPfh950I/mUplUn3ahYn+4PJMdPn3pHjXCNwPwn0ZrM4XrcpnkIXhmKw7ZPhe940wRwnznvXxaxILztHSs13EW2kc4e9n+BW44P0RpnBtvtiAcsQYM4ThXFEae5GWKZCzMuYFzJSJFh4zjM8VvJ+ZuGd1H0LGD85wpljHYqbP5fQRPFZBYQQwBIKIz/AG8UMfDvJNn91xltzx2U0KBw7uCdePqXfupf/5RSn9N+SW/gKyGU0k+rxX0lYcw+c0ADC0GggCLuhHAQmrx8KaAeWGtxYbpwdTK8qhjVUdo0t1UBCwajp2AXPbMD2CB7d74yFHpSuNEeewp7wfe/R6fF/p6ShNkqmDPqznl8zhSIfO7yhT4N9CMF5l5B48E1va8qhcXyMQI0bgpGWR+8z+ZO6I1B9mCQE6S2AjRHHecY8cKvB9/MZ5Pqx8piZKeXAK7nwx/l0AMKjFPGcZy2bDcpWaYrORvZvF1+nzNj3mJj7iTEM0IatNSzOrWyCa4BaLwk2LZEZ0+4gYDof7DjN/FBMlTZfnM1ha4s4EszQFRMs96lx1LqniKyuqX1EtapARxaAlEJSDzH5MBBNyPCEmHIjKCYdod/gdqh3Hmgu3PazObaS/qWm2b3l7qLPl7S22plr6m8ZPDYZPG6Gutsm25e1h1mFv32pvqoU6dplu4vArnLrV3lxzLqf+gtzsJL6huUbP+qn+4lvfwheXcewmF/gYrGjPn/dVCXAnvwpxv5Ux4AQoF35fIoU3n9qyaYNwaEwf4anUyDEXfWySOrzl1OYxqZEbNrGjcGjDRfyh+JxeKc/YFQiobPaz6S7r3CGlHxgLQhgmTGgklB79qj6532E6mM3uc7Ki8yiTzhLZ1Yyql4kO1Yxb93MunpN9laN/mdP/vUcG5/VwKBFvnmbFkwzeD1h/yORFMmRh4ql/Y6OXmOIKov/bFDLg2xQsLf1tigg8eN7wvZhLBmCu7gRPY10adLFzDAiAp/UZi/tvMqDLqypyPGLvV9C6YpjLMdV4XjGe9G9AcUIaXIX+IoFXG6d+pmj+lQ/2v6hliseHsN2s9f3VuFDuLBfKnZRZpIux+N4IMrcL5U5YrKP9Xtqr7b1I4MK8mL52Bi00rcfOK8/x3V9PMc560RdUqYG89YKCzhw+z448r4zId5ehr1zjrHLw5WoGtOxXCpEYj+j6nvLhFX9Hx13P/Wz2TQsripyFRdERxc53TeaRU76vTkJD4+RVyWGXPDe6oKDEV1LsHVxdNazBW2q1VUfT3xnoNq8u1eynotwwRwXH3BPUjcPmhhMX5GUZjSxvCkdeIsxhz/Iy5kPdzJ+R8YMwpmMmdnwigoZBxIJb0Oe3oGUXKWZJhVGNFHt5J3TQ/3e8Ukt93sl9kVrnUDyTeV24H5NnTKf5mo6Kc+db5Sq2ksEs0BbBXgaJFnChtsbKrx/bFLzxhZfHPvDA2Jef31jRPBZF9rKRv3rzvpbBI++9d+TglvveenUk9zMsghPqTsWNM1j/0oz5v0RQLaKDObSDwtLj9AjUHD8iHTl+5MhxqDnT/Q2Qb+SGbcihG7ZBA7y5jb5J39wGb9KyFom0MJuM26dpP1ARW/0xCjFUtGjFXRQQHTsXwK47iRREFZGHgqvnvO4xpt91F63MYYR583CHVPZcDu7T73f6XlyP0h+uh+2Hy0/9XyVr5DvKLPuBMi2o/oPqD5XaB6/Nojv2d/1QySg+r3WxTAxF0zIqox7Dck1GgQUtmIKowpg/zSRwrycDYJGgHtrR9uLCsxyP5STzjtJeLsLsYz16bEfbOKrp5+l4CR3X83iM+MC3yhe8i3zH8+d8DyLrk4wu8vLgKNFnCvMAC44eEhfyUSvb21eOGr2sJdLg8zVEWpaN5leA95SMM49ZpGwT+1MDMI7zo2zmpYE0iPMSWby2J8iX6oF7RhhwSxqbWA31q1JklT9SxMy8FFePUvqThPatiZ6e8lmXhrWB3In7Gi4cUhbg6MbOkT0x/tmiwg3hPr7ffArspzazVVLkHdJ5Y6jpkbWapn/fwHSxPB3bUECcPP7Yw1FSUW08BMXnYa44BqGVUKQnfaiTFn+1cuW8Scvn/eVXdDKQ6xfOrKu7fM32y+a+q2ijRv5k8Y15atFNK+9/Rnh+yOjW0lLaQo+Nn3QbSfvRiZxZH/aJEdWTiFh8CY88Q/tSq6DJCnZA85IbVFxzpn3eGucW2QyDWD9nAkvAFGSBpZxdwP60PkbB7T3LsVLS6UrfO0KyNzUX3ExAjP1x44w3GEkOj9+24Qii7reYPBb24QSTtkEAumdY9RsBTXpNN25A+5aPme5uAd3FrH2rcSKM53KaGFMsPeN4YSMMGmdRGjczmLNNO19Pmsl/na/DHEFFHcrDR4OJGiEfaoShqmMolEGgBvKl4FBwJIJDhUBQdeBfvsgy4SnqugTCM8+YyBfK8BomyiAfEmoZqIl8Q7ASTxwJfKHkUGtkhYWfOmrkoQIS56ECPi2pmFXENzryUeouVJF5opglm1wCeQ2SbUq+r6iwPloRBJBlR64l1x8oHu4szHXIeaUOZ6RQzK0xFNoq8setlqweyWZoHt+sFOSE7O6RrqXz338qUOv21biUkuza9vJEbrDYa/F4jKXZ1vb4YDkvO1TgLMvzObPcTkNhKFinlDbmDwpWocFoAIOcJYPT9aMPNklZ2cPdWWqewZBvzW0OCvmWEXVeo8FjqKktExwl4Ypyk+CRBl+kuP8jKRZk2H0Tfv90VqTIYLGJpXF3QjX78qxOH2Sp/qzmuKwKdl+2scIp2p1Ge/b6dsEkZwnGLF9ps8dmNRlM4L8ZcgwGRTWLDrnINjjfXOINOEzmrITVYs8xFagWi5xvslgLnc3O2opKt6vSaTRPrC1oNWWZchzloQVT76Bnny3PuWVoa31JQaxFzjaquebiItXutch1xoJsydI4bERZl+wwORWuQ/eKbnWulPFBXsTj+/m875c33PDLG0Rx4EE6cQM/DvhLf1PI/C69DNVR5g3kG03sFfv9NXhiYHOFxEwg9iLq9yXZM1KSr2XhdeQa/KqB9CW5HyeZXucSOH9hl/V3DvQBVJBaUq9/C65HLiEn8+jfhKe//jEhY4sPgfSl8vSEl9LEDpGmkX/pfZY0jmK2cGPg6pu6d/B0n74WKbSnA0ZGrfE+yPRGtyb5vGtHMuQLdbY6qH30ju4HvWtG4QU7z7s/Q5iVftvi/P9XIK1LMos7mW/kgejapI8wA15EBU75FZGBBLOccKMkkwLOw/Q0x7cExwCN5OrrIUYRbWIItkh8xdTnDUIsGFDyQWGxXA7d3VgG51w0BD7DAv/t94MfeJSf+Os4tiNODySdXf5x/m5/vqDl+zGV70xqT8cCgZhf1agDaWeuvzsA5aJsGz1l42kaG9feHYc2LenMx8z6U92Y6nImU//Bh/wxQgZ+pzmCjCMdZDZZyNeM0jGBLZBgQYEeU/8VFmPLhnfABf6J4LnRZl4fPGZAvT/y54Kj2j/U7bH0sI9qPIsaL51kqznpJAuiSeli0Jc2084/zNHHnQvCg0iqPkqfj1zrBV977MG0nODpg3tOQkZsUJLoRyf3pNXK6fYBxnB7RnYE7JOTalLp5etpRF+XjxgFEdmugy2PZuas/Kivp1XMFuiqszqTpMf+OppHBuBPX4iSV8dahL4TApceNAenr97GXGLsXPhpegVPgBU4p+7EOeXhay0OHh2QcIHD5ItFYgM62Rax+UwtkOlmmd61mD5IF9IHF9816vXVmpbuO01b/Tr9sd5Nh2c+9ut3Hp3ZtsgC/9EePNcLD2o023KZmEo3WkjLBCETUB50j1cl+57aXAqsrUMgGmRLfOVBpf+COREI+nRvWDQRMPFa4k2X4G4RWFwcOytQ7TY//wSVO8vyBJUvEryX6501PxANXD+Lfr3zJ/Q/M2/AkwUzPXnvsbu9pffj6WWPfwHSF49fhsldJSltZ2rIrH9t6nrijqaKLb/kiwrD2hbTs1v5+5LHH1t3y+Z1jx/Tz7YCLB7bilkmzT0Mgn7tenwVvvJ6/YyePdzVqf1887zlka7krFsmZHxd2oC1bMGTRgtZ0116bN4zniJxxsDGkDIEgH4OwLiNPWLyVgHJQivB6lDtxCG/df99R+gV9Cn6lzdWCKT7pUUQPiRGIpSseANKYDJsO/LF8Zeeof+YwuvwBspCI/9/Nkp53BnnipxEWxMRRWDu1YAQjLjAHZcm7enpmRidGXmh1/rVM2fJM19Zex3vQ/ExUeuZKJCJPZGZUUomFRykXw6iX0LBICg4uPngwXRMs4gtHbimJpP0mtq5b9QdGQ8Od3yaBqbVdJ8M2HMCldkz6vRd1yH9XMZO4P2dnfluTv+xcAGGt8yXzoi1nmL9zb/ZI7xuRraKBqJHFv345xFRifHIBY9E1tKtULUW7ejoOqiiW9ceFZ5Ivf9+6njq+Pup94Un5E/oT35H93z4Icz7nYhmCP1R6ka4ha4VfgQ3Zv5PgUwZmXgITzGgCT/gJUePork/4MH0YtzA+uUPfFrklbzwHUczVbz4ZbSC1Q8Wp2P3uK1mR4ZfyfxPRpQutprNcdrDo82Z3KmBIMIyuwvhhN3BfNYKH9Oz3OzqZoPBE7PGDJp+wx591beP6GeUcWMOZFwtA0n/hyxN18zv0q9TnoYLvz8MoCE/47uiNvkn5QEP/2KAfy4QcTvsCd0cKfcNuByWHHZLmC0k6zf457L9dzLf9w/85EhcYfeYzB/T3//0ydqyImHwjo1gfNN2RemgQRvp/qeferZ+UKnRt/Wen0Kgp0RzBApr7qRXH/77oeLyunJDYM+bv4S564ou/IiJl3JmsbuwsCj75gpj1OExlK3L+2JQaa1j0rS6/CbXoGz/+OEFaBkGChPO6Z0JQ6W3PJxVOXFM3oD+EHnEaBGTaB//Txb4grvoy7ANWwIldJdQsqvvUmUIraYPfP4XSpSFp8/ApZ/B4/LjtBqOsg2OnXmJDmckQ3orNVyceWbH0aMca9L+ovQa8kCLkqlg3ag5L/qSmzNs9vErfP//ATHKtuMAAHjajZA9TgMxEIWfyY9EhBBFDuAKhSKON0m10EUKUgRt+vx4ky3wRruOktByFlpKuAT0nICOO/DWsUBICFhrPd+8Gc+MDeAYDxDYfxe4DSzQwEvgA9TxFriCU3EeuIqG2Aau4UTcB65Tf2amqB7S2/pTJQs08RT4AEd4DVzBFd4DV9EU08A1SHEXuE79EQPkMJjAcZ9DYood9xEy+pa0QcrYkjSkZsmlzbFgXKILBU3bYobjWiFGhysJuclnrkJBT1E11M+AQW4mzszldCdHmbFyk7qlHGbWDbN8YWRXadlaOreKO52EalKqqkiUNY6nL/14hsVTzHyzgqKxJk9nmSVf+/ukWOOGjpmna9rfrhDz/6nqPtJDGxHz2szXpD6LfZs1ll/d6fTakW53ddT/x6hjHywYzvyTa99BeVtOhrHJizSzUutIaa3l3zU/ABw5cLgAAAB42l3SZ5MVVRSF4fuOBEmCiZyDiInb5+zTPYOkgWEIEpUgQUkShpyVoCA5Jy3/LlBz3/ED/WVVdVU/1XvVanW1Bp83rdbRd0Hr/ee/wbdddPEBwxjOCEbyIaMYzRjGMo6PGM8EPuYTPuUzPmcik5jMFKYyjenMYCazmM0c5jKP+SzgCxbyJYv4iq/5hm/5jsW0qUhkgkJNQzc9LOF7lrKM5axgJb2sYjV9rKGftaxjPRv4gY1sYjNb2Mo2fuQntrODneziZ3azh73s4xd+ZT8HOMghDvMbRzjKMY4zwAlOcorTnOEs5zjPBS5yictc4Xf+4CrXuM4N/uQvbnKLv7nNHe5yj/s84CGPeMwTnvKM57zgJa94zT/8O/LymYH+qt02KzOZ2QyzmLXZmN1mz2AmvaSX9JJe0kt6SS/pJb005FV6lV6lV+lVepVepVfpVXqVXtJLekkv6SW9pJc6Xvau7F3Zu7J3Ze/K3pXbQ981Zuc/Qid0Qid0Qid0Qid04n+nc0/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hPJL2kl/SyXtbLelkv62W9rJf1sl7WC73QC73QC73QC73QC73QK3pFr+gVvaJX9Ipe0St6Ra/Wq/VqvVqv1qv1ar1ar9ar9Rq9Rq/Ra/QavUav6XjFnRV3VtxZcWfFnRV3VtpD3zVmt9lj9pqrzNVmn7nG7O+kuyzusrjL4i6LuyzusrjLUjVvAQpVcTgAAAAAAAAB//8AAnjaY2BgYGQAgjO2i86D6AshzNIwGgBAmQUAAAA=) format('woff'),
- url('Genericons.ttf') format('truetype'),
- url('Genericons.svg#genericonsregular') format('svg');
- font-weight: normal;
- font-style: normal;
+ font-family: "Genericons";
+ src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),
+ url("./Genericons.ttf") format("truetype"),
+ url("./Genericons.svg#Genericons") format("svg");
+ font-weight: normal;
+ font-style: normal;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
@@ -57,6 +59,54 @@
/**
+ * Helper classes
+ */
+
+.genericon-rotate-90 {
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+}
+
+.genericon-rotate-180 {
+ -webkit-transform: rotate(180deg);
+ -moz-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ -o-transform: rotate(180deg);
+ transform: rotate(180deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+}
+
+.genericon-rotate-270 {
+ -webkit-transform: rotate(270deg);
+ -moz-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ -o-transform: rotate(270deg);
+ transform: rotate(270deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+}
+
+.genericon-flip-horizontal {
+ -webkit-transform: scale(-1, 1);
+ -moz-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ -o-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.genericon-flip-vertical {
+ -webkit-transform: scale(1, -1);
+ -moz-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ -o-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+
+/**
* Individual icons
*/
diff --git a/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css b/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css
index dbe23b22..fbf8fac5 100644
--- a/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css
+++ b/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css
@@ -1,4 +1,4 @@
-/* This file was automatically generated on Oct 03 2014 13:34:55 */
+/* This file was automatically generated on Sep 30 2015 12:24:15 */
/**
@@ -11,19 +11,21 @@
IE9 uses WOFF which is base64 encoded to allow cross-site embedding.
So unfortunately, IE9 will throw a console error, but it'll still work.
When the font is base64 encoded, cross-site embedding works in Firefox */
-
@font-face {
- font-family: 'Genericons';
- src: url('../Genericons.eot');
+ font-family: "Genericons";
+ src: url(".././Genericons.eot");
+ src: url(".././Genericons.eot?") format("embedded-opentype");
+ font-weight: normal;
+ font-style: normal;
}
@font-face {
- font-family: 'Genericons';
- src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),
- url('../Genericons.ttf') format('truetype'),
- url('../Genericons.svg#genericonsregular') format('svg');
- font-weight: normal;
- font-style: normal;
+ font-family: "Genericons";
+ src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),
+ url(".././Genericons.ttf") format("truetype"),
+ url(".././Genericons.svg#Genericons") format("svg");
+ font-weight: normal;
+ font-style: normal;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
@@ -59,6 +61,54 @@
/**
+ * Helper classes
+ */
+
+.genericon-rotate-90 {
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+}
+
+.genericon-rotate-180 {
+ -webkit-transform: rotate(180deg);
+ -moz-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ -o-transform: rotate(180deg);
+ transform: rotate(180deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+}
+
+.genericon-rotate-270 {
+ -webkit-transform: rotate(270deg);
+ -moz-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ -o-transform: rotate(270deg);
+ transform: rotate(270deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+}
+
+.genericon-flip-horizontal {
+ -webkit-transform: scale(-1, 1);
+ -moz-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ -o-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.genericon-flip-vertical {
+ -webkit-transform: scale(1, -1);
+ -moz-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ -o-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+
+/**
* Individual icons
*/
diff --git a/plugins/jetpack/_inc/header.php b/plugins/jetpack/_inc/header.php
index 0ec2c3f5..a15e3313 100644
--- a/plugins/jetpack/_inc/header.php
+++ b/plugins/jetpack/_inc/header.php
@@ -6,15 +6,19 @@
<ul class="main-nav">
<li class="jetpack-logo"><a href="<?php echo Jetpack::admin_url(); ?>" title="<?php esc_attr_e( 'Jetpack', 'jetpack' ); ?>" <?php if ( 'jetpack' == $current ) { echo 'class="current"'; } ?>><span><?php esc_html_e( 'Jetpack', 'jetpack' ); ?></span></a></li>
- <?php if ( ( Jetpack::is_active() || Jetpack::is_development_mode() )
- && current_user_can( 'jetpack_manage_modules' )
- ) : ?>
- <li class="jetpack-modules">
- <a href="<?php echo Jetpack::admin_url( 'page=jetpack_modules' ); ?>" class="jp-button--settings <?php if ( 'jetpack_modules' == $current ) { echo 'current'; } ?>"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
- </li>
- <li class="jetpack-modules">
- <a href="http://jetpack.me/survey/?rel=<?php echo JETPACK__VERSION; ?>" class="jp-button--settings"><?php esc_html_e( 'Feedback', 'jetpack' ); ?></a>
- </li>
+ <?php if ( ( Jetpack::is_active() || Jetpack::is_development_mode() ) && current_user_can( 'jetpack_manage_modules' ) ) : ?>
+ <li class="jetpack-modules">
+ <a href="<?php echo Jetpack::admin_url( 'page=jetpack_modules' ); ?>" class="jp-button--settings <?php if ( 'jetpack_modules' == $current ) { echo 'current'; } ?>"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
+ </li>
+ <li class="jetpack-modules">
+ <a href="http://jetpack.me/survey/?rel=<?php echo JETPACK__VERSION; ?>" class="jp-button--settings"><?php esc_html_e( 'Feedback', 'jetpack' ); ?></a>
+ </li>
+ <?php endif; // End if connected or dev mode and is admin ?>
+
+ <?php if ( Jetpack::is_active() && ! Jetpack::is_development_mode() ) : ?>
+ <li class="jetpack-modules">
+ <a href="<?php echo Jetpack::admin_url( 'page=my_jetpack' ); ?>" class="jp-button--settings <?php if ( 'my_jetpack' == $current ) { echo 'current'; } ?>"><?php esc_html_e( 'My Jetpack', 'jetpack' ); ?></a>
+ </li>
<?php endif; ?>
</ul>
diff --git a/plugins/jetpack/_inc/jetpack-jitm.js b/plugins/jetpack/_inc/jetpack-jitm.js
new file mode 100644
index 00000000..79b2f24a
--- /dev/null
+++ b/plugins/jetpack/_inc/jetpack-jitm.js
@@ -0,0 +1,129 @@
+/* global jitmL10n, jQuery */
+
+(function($, jitmL10n) {
+
+ ///////////////////////////////////////
+ // INIT
+ ///////////////////////////////////////
+
+ var data;
+
+ $(document).ready(function () {
+
+ data = {
+ 'action' : 'jitm_ajax',
+ 'jitmNonce' : jitmL10n.jitm_nonce,
+ 'photon' : jitmL10n.photon_msgs,
+ 'manage' : jitmL10n.manage_msgs,
+ 'stats' : jitmL10n.stats_msgs,
+ 'jitm_stats_url' : jitmL10n.jitm_stats_url,
+ 'enabledModules' : []
+ };
+
+ initEvents();
+
+ });
+
+ ///////////////////////////////////////
+ // FUNCTIONS
+ ///////////////////////////////////////
+
+ function initEvents() {
+
+ var module_slug, success_msg, fail_msg, hide_msg,
+ $body = $( 'body' );
+
+ // On dismiss of JITM admin notice
+ $body.on( 'click', '.jp-jitm .dismiss', function() {
+ var $self = $( this );
+
+ // hide the notice
+ $self.closest( '.jp-jitm' ).hide();
+
+ // ajax request to save dismiss and never show again
+ data.jitmActionToTake = 'dismiss';
+ module_slug = $self.data( 'module' );
+ data.jitmModule = module_slug;
+
+ $.post( jitmL10n.ajaxurl, data, function ( response ) {
+ if ( true === response.success ) {
+ //console.log('successfully dismissed for ever')
+ }
+ });
+ });
+
+ $body.on( 'click', '.jp-jitm .activate', function() {
+
+ var $self = $( this ),
+ $jitm = $self.closest( '.jp-jitm' );
+ $jitm.find( '.button' ).addClass( 'hide' );
+ $jitm.find( '.j-spinner' ).toggleClass( 'hide' );
+ data.jitmActionToTake = 'activate';
+
+ // get the module we're working with using the data-module attribute
+ module_slug = $self.data( 'module' );
+ // Check if there's a custom success message, otherwise use default.
+ success_msg = $self.data( 'module-success' ) ? $self.data( 'module-success' ) : data[module_slug].success;
+ fail_msg = data[module_slug].fail;
+
+ data.jitmModule = module_slug;
+
+ // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
+ $.post( jitmL10n.ajaxurl, data, function ( response ) {
+ // If there's no response, something bad happened
+ if ( true === response.success ) {
+ var $msg = $jitm.find( '.msg' );
+ $msg.html( success_msg );
+ $jitm.find( '.j-spinner' ).add( '#jetpack-wordpressdotcom' ).toggleClass( 'hide' );
+ if ( 'manage' !== data.jitmModule ) {
+ hide_msg = setTimeout( function () {
+ $jitm.hide( 'slow' );
+ }, 5000 );
+ }
+ $jitm.find( '.show-after-enable.hide' ).removeClass( 'hide' );
+ data.enabledModules.push( module_slug );
+ } else {
+ $jitm.html( '<p><span class="icon"></span>' + fail_msg + '</p>' );
+ }
+ });
+
+ });
+
+ $body.on( 'click', '.jp-jitm .launch', function() {
+ data.jitmActionToTake = 'launch';
+ module_slug = $(this).data( 'module' );
+ data.jitmModule = module_slug;
+ // ajax request to save click in stat
+ $.post( jitmL10n.ajaxurl, data );
+ } );
+
+ $body.on( 'click', '#jetpack-wordpressdotcom', function() {
+ //Log user heads to wordpress.com/plugins
+ new Image().src = data.jitm_stats_url;
+ });
+
+ // Display Photon JITM after user started uploading an image.
+ if ( $( '#tmpl-jitm-photon' ).length > 0 ) {
+ wp.Uploader.queue.on( 'add', function ( e ) {
+ if ( -1 === $.inArray( 'photon', data.enabledModules ) ) {
+ if ( 'image' === e.attributes.type ) {
+ var jitmTemplate = wp.template( 'jitm-photon' ),
+ $menu = wp.media.frame.$el.find( '.media-menu' ),
+ $jitm;
+ if ( $menu.length > 0 ) {
+ $jitm = $menu.append( jitmTemplate() ).find( '.jp-jitm' );
+
+ // JITM is visible to user, track it.
+ data.jitmActionToTake = 'viewed';
+ data.jitmModule = $jitm.data( 'track' );
+ $.post( jitmL10n.ajaxurl, data );
+ }
+ } else {
+ $( '.media-menu' ).find( '.jp-jitm' ).remove();
+ }
+ }
+ } );
+ }
+ }
+
+})(jQuery, jitmL10n); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/jetpack-modules.js b/plugins/jetpack/_inc/jetpack-modules.js
index 83cb4475..8ba288dc 100644
--- a/plugins/jetpack/_inc/jetpack-modules.js
+++ b/plugins/jetpack/_inc/jetpack-modules.js
@@ -1,5 +1,5 @@
-( function( window, $, items, models, views, i18n, nonces ) {
+( function( window, $, items, models, views, i18n, modalinfo, nonces ) {
'use strict';
var modules, list_table, handle_module_tag_click, $the_table, $the_filters, $the_search, $jp_frame, $bulk_button, show_modal, hide_modal, set_modal_tab, originPoint;
@@ -41,10 +41,7 @@
$( window ).on( 'keydown', function( e ) {
// If pressing ESC close the modal
if ( 27 === e.keyCode ) {
- $( '.shade, .modal' ).hide();
- $( '.manage-right' ).removeClass( 'show' );
- originPoint.focus();
- $( '.modal' )[0].removeAttribute( 'tabindex' );
+ hide_modal();
}
});
@@ -57,14 +54,26 @@
$( '.modal ').empty().html( wp.template( 'modal' )( items[ module ] ) );
$( '.modal' )[0].setAttribute( 'tabindex', '0' );
$( '.modal' ).focus();
+ $( 'body' ).css( 'overflow', 'hidden' );
};
+ /**
+ * If modalinfo is defined, auto popup the modal
+ */
+ $( document ).ready(function() {
+ if ( modalinfo ) {
+ show_modal( modalinfo );
+ }
+ });
+
hide_modal = function() {
$jp_frame.children( '.modal, .shade' ).hide();
$jp_frame.children( '.modal' ).data( 'current-module', '' );
set_modal_tab( null );
originPoint.focus();
$( '.modal' )[0].removeAttribute( 'tabindex' );
+ $( 'body' ).css( 'overflow', 'auto' );
+ event.preventDefault();
};
set_modal_tab = function( tab ) {
@@ -138,4 +147,4 @@
event.preventDefault();
} );
-} ) ( this, jQuery, window.jetpackModulesData.modules, this.jetpackModules.models, this.jetpackModules.views, window.jetpackModulesData.i18n, window.jetpackModulesData.nonces );
+} ) ( this, jQuery, window.jetpackModulesData.modules, this.jetpackModules.models, this.jetpackModules.views, window.jetpackModulesData.i18n, window.jetpackModulesData.modalinfo, window.jetpackModulesData.nonces );
diff --git a/plugins/jetpack/_inc/jetpack.js b/plugins/jetpack/_inc/jetpack.js
index 0279ee7d..fd3512de 100644
--- a/plugins/jetpack/_inc/jetpack.js
+++ b/plugins/jetpack/_inc/jetpack.js
@@ -63,7 +63,7 @@ jetpack = {
jQuery( '#jp-disconnect a' ).click( function() {
if ( confirm( jetpackL10n.ays_disconnect ) ) {
jQuery( this ).addClass( 'clicked' ).css( {
- 'background-image': 'url( ' + userSettings.url + 'wp-admin/images/wpspin_light.gif )',
+ 'background-image': 'url( ' + userSettings.url + 'wp-includes/images/spinner-2x.gif )',
'background-position': '9px 5px',
'background-size': '16px 16px'
} ).unbind( 'click' ).click( function() { return false; } );
@@ -74,7 +74,7 @@ jetpack = {
jQuery( '#jp-unlink a' ).click( function() {
if ( confirm( jetpackL10n.ays_unlink ) ) {
jQuery( this ).css( {
- 'background-image': 'url( ' + userSettings.url + 'wp-admin/images/wpspin_light.gif )',
+ 'background-image': 'url( ' + userSettings.url + 'wp-includes/images/spinner-2x.gif )',
'background-position': '9px 5px',
'background-size': '16px 16px'
} ).unbind( 'click' ).click( function() { return false; } );
diff --git a/plugins/jetpack/_inc/jp-my-jetpack.js b/plugins/jetpack/_inc/jp-my-jetpack.js
new file mode 100644
index 00000000..4eb093f5
--- /dev/null
+++ b/plugins/jetpack/_inc/jp-my-jetpack.js
@@ -0,0 +1,86 @@
+/* global jpConnection, jQuery */
+
+(function( $, jpConnection ) {
+
+ ///////////////////////////////////////
+ // INIT
+ ///////////////////////////////////////
+
+ var data = {
+ 'jetpackIsActive' : jpConnection.jetpackIsActive,
+ 'isAdmin' : jpConnection.isAdmin,
+ 'otherAdminsLinked' : jpConnection.otherAdminsLinked,
+ 'stats_urls' : jpConnection.my_jetpack_stats_urls,
+ 'masterUser' : jpConnection.masterUser,
+ 'masterUserLink' : jpConnection.masterUser.masterUserLink,
+ 'currentUser' : jpConnection.currentUser
+ };
+
+ $( document ).ready(function () {
+ renderPageTemplate( data );
+
+ // Set someone as master.
+ $( '#change-primary-btn' ).click( function() {
+ $( '#change-primary-btn' ).hide();
+ $( '#user-list' ).show();
+ $( '#save-primary-btn' ).show();
+
+ //Log My Jetpack event "change primary" in MC Stats
+ new Image().src = data.stats_urls.change_primary;
+ });
+
+ // Hide the success message after a little bit
+ setTimeout( function(){
+ jQuery( '.jetpack-message:not( .stay-visible, .jetpack-err )' ).hide( 600 );
+ }, 6000);
+
+ });
+
+ function renderPageTemplate( data ) {
+ $( '#my-jetpack-page-template' ).html( wp.template( 'connection-page' )( data ) );
+ // Save the focused element, then shift focus to the modal window.
+ confirmJetpackDisconnect();
+ }
+
+ /*
+ The function used to display the disconnect confirmation and support buttons
+ */
+ function confirmJetpackDisconnect() {
+ if ( window.location.hash.substr( '#disconnect' ) ) {
+ $( '#jetpack-disconnect-content' ).show();
+ $( '#my-jetpack-content, .my-jetpack-actions' ).hide();
+
+ //Log My Jetpack event "wants to disconnect Jetpack" in MC Stats
+ new Image().src = data.stats_urls.disconnect_site;
+ }
+
+ $( '#jetpack-disconnect' ).click( function() {
+ $( '#jetpack-disconnect-content' ).show();
+ $( '#my-jetpack-content, .my-jetpack-actions' ).hide();
+
+ //Log My Jetpack event "wants to disconnect Jetpack" in MC Stats
+ new Image().src = data.stats_urls.disconnect_site;
+ });
+
+ $( '#cancel-disconnect' ).click( function() {
+ event.preventDefault();
+
+ $( '#jetpack-disconnect-content' ).hide();
+ $( '#my-jetpack-content, .my-jetpack-actions' ).show();
+
+ //Log My Jetpack event "decided not to disconnect Jetpack" in MC Stats
+ new Image().src = data.stats_urls.cancel_disconnect;
+ });
+
+ $( '#jetpack-disconnect-content #support-no-disconnect' ).click( function() {
+ //Log My Jetpack event "get support instead of disconnecting site" in MC Stats
+ new Image().src = data.stats_urls.support_no_disconnect;
+ });
+
+ $( '#jetpack-disconnect-content #confirm-disconnect' ).click( function() {
+ //Log My Jetpack event "confirm the disconnecting of a the site" in MC Stats
+ new Image().src = data.stats_urls.confirm_disconnect;
+ });
+ }
+
+})( jQuery, jpConnection ); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/jp.js b/plugins/jetpack/_inc/jp.js
index afbc01c6..15faad11 100644
--- a/plugins/jetpack/_inc/jp.js
+++ b/plugins/jetpack/_inc/jp.js
@@ -12,20 +12,37 @@
$( document ).ready(function () {
data = {
- 'action' : 'jetpack_admin_ajax',
'jumpstartModules' : jetpackL10n.jumpstart_modules,
'jumpstartModSlug' : jetpackL10n.jumpstart_modules,
'jumpstartNonce' : jetpackL10n.activate_nonce,
'jumpstartStatsURLS' : jetpackL10n.jumpstart_stats_urls,
- 'showJumpstart' : jetpackL10n.show_jumpstart
+ 'nuxAdminStatsURLS' : jetpackL10n.admin_stats_urls,
+ 'showJumpstart' : jetpackL10n.show_jumpstart,
+ 'adminNonce' : jetpackL10n.admin_nonce
};
initEvents();
- loadModules( 'Recommended', 'mod-recommended', '.modules' );
+ loadModules( 'Performance-Security', 'mod-nux', '#nux-performance-security' );
+ loadModules( 'Traffic', 'mod-nux', '#nux-traffic' );
if('1' === data.showJumpstart) {
loadModules( 'Jumpstart', 'mod-jumpstart', '#jp-config-list' );
}
+
+ /*
+ We are listening to see if we need to refresh the data.
+ We'd need to refresh the data only if the page is navigated to
+ via the back or forward browser buttons. We do this so the
+ browser cache isn't out of sync with the real data generated by the
+ AJAX event.
+ */
+ onload = function() {
+ if ( window.location.hash.substr( '#refresh' ) ) {
+ refreshData();
+ }
+ };
+
jumpStartAJAX();
+ adminAJAX();
});
///////////////////////////////////////
@@ -39,6 +56,7 @@
$( '.manage-right' ).removeClass( 'show' );
originPoint.focus();
$( '.modal' )[0].removeAttribute( 'tabindex' );
+ $( 'body' ).css( 'overflow', 'auto' );
return false;
});
@@ -49,15 +67,21 @@
$( '.manage-right' ).removeClass( 'show' );
originPoint.focus();
$( '.modal' )[0].removeAttribute( 'tabindex' );
+ $( 'body' ).css( 'overflow', 'auto' );
}
});
}
function initEvents () {
+ // Only show module table if Jumpstart isn't there
+ if ( ! data.showJumpstart ) {
+ $( '.nux-intro' ).show();
+ }
// Show preconfigured list of features to enable via "Jump-start"
$( '.jp-config-list-btn' ).click(function(){
$( '#jp-config-list' ).toggle();
+ recalculateModuleHeights();
//Log Jump Start event "learn more" in MC Stats
new Image().src = data.jumpstartStatsURLS.learnmore;
@@ -65,7 +89,7 @@
// Hide the successful connection message after a little bit
setTimeout( function(){
- jQuery( '.jetpack-message:not(.stay-visible)' ).hide( 600 );
+ jQuery( '.jetpack-message:not( .stay-visible, .jetpack-err )' ).hide( 600 );
}, 6000);
// Modal events
@@ -84,11 +108,16 @@
}, 100 );
}
};
+
+ // This function will track the number of clicks on the "See the other X Jetpack features"
+ $( '.full-features-btn' ).click( function() {
+ new Image().src = data.nuxAdminStatsURLS.learnmore+'-full-features-btn';
+ });
}
function initModalEvents() {
var $modal = $( '.modal' );
- $( '.module h3, .feature a, .configs a, .more-info' ).on( 'click keypress', function (e) {
+ $( '.module h3, .feature a, .configs a, .more-info, .feat h4' ).on( 'click keypress', function (e) {
// Only show modal on enter when keypress recorded (accessibility)
if ( e.keyCode && 13 !== e.keyCode ) {
return;
@@ -111,6 +140,9 @@
$modal[0].setAttribute( 'tabindex', '0' );
$modal.focus();
+ // Disallow scroll
+ $( 'body' ).css( 'overflow', 'hidden' );
+
closeShadeToggle();
// Modal header links
@@ -165,9 +197,13 @@
}
- // Render modules
+ // Render modules. Don't show active in Jumpstart.
for ( i = 0; i < renderingmodules.length; i++ ) {
- html += wp.template( template )( renderingmodules[i] );
+ if ( 'Jumpstart' === prop && ! renderingmodules[i].activated ) {
+ html += wp.template( template )( renderingmodules[i] );
+ } else if ( 'Jumpstart' !== prop ) {
+ html += wp.template( template )( renderingmodules[i] );
+ }
}
$( location ).append( html );
@@ -200,8 +236,8 @@
}
});
- // Apply new height
- module.css( 'height', tallest + 'px' );
+ // Apply new height plus 20 pixels
+ module.css( 'height', ( parseInt( tallest, 10 ) + 5 ) + 'px' );
}
/*
@@ -219,14 +255,19 @@
$( '#jump-start-area' ).hide( 600 );
data.disableJumpStart = true;
+ data.action = 'jetpack_jumpstart_ajax';
$.post( jetpackL10n.ajaxurl, data, function (response) {
// If there's no response, something bad happened
if ( ! response ) {
//console.log( 'Option "jetpack_dismiss_jumpstart" not updated.' );
}
+
+ window.location.hash = 'refresh';
});
+ $( '.nux-intro' ).show();
+
// Log Jump Start event in MC Stats
new Image().src = data.jumpstartStatsURLS.dismiss;
@@ -235,12 +276,14 @@
// Activate all Jump-start modules
$( '#jump-start' ).click(function () {
+ var module, dataName, configURL, checkBox;
- var module, dataName, configURL;
-
- $( '.spinner' ).show();
+ $( '.jumpstart-spinner' ).show().css( 'display', 'block' );
+ $( '#jump-start' ).hide();
+ $( '.dismiss-jumpstart' ).hide();
data.jumpStartActivate = 'jump-start-activate';
+ data.action = 'jetpack_jumpstart_ajax';
$( '#jp-config-list' ).hide();
@@ -254,23 +297,25 @@
// Only target Jump Start modules
_.each( module, function( mod ) {
- dataName = $( 'div[data-name="' + mod.module_name + '"]' );
+ dataName = $( 'label[for="active-' + mod.module_slug + '"]' + '.plugin-action__label' );
configURL = mod.configure_url;
-
- // Replace inactive content with active, provide config url
- _.find( dataName, function( div ) {
- $( div.children ).find( '.notconfigurable ').hide();
- $( div.children ).find( '.configurable ' ).replaceWith( '<a class="button alignright" data-name="' + mod.module_name + '" title="Configure" href="' + configURL + '">Configure</a>' );
- div.className += ' active';
- });
+ checkBox = $( 'input[id="active-' + mod.module_slug + '"]' );
+
+ $( '#toggle-' + mod.module_slug ).addClass( 'activated' );
+ dataName.html( 'ACTIVE' );
+ $( checkBox ).prop( 'checked', true );
});
- $( '.spinner, .jstart, #jumpstart-cta' ).hide();
- $( '.jumpstart-message, .miguel' ).toggle();
+ $( '.jumpstart-spinner, .jstart, #jumpstart-cta, .manage-cta-inactive' ).hide();
+ $( '.jumpstart-message, .manage-cta-active' ).toggle();
+ $( '#jump-start-area' ).delay( 5000 ).hide( 600 );
// Log Jump Start event in MC Stats
new Image().src = data.jumpstartStatsURLS.jumpstarted;
+ $( '.nux-intro' ).show();
+
+ window.location.hash = 'refresh';
});
return false;
@@ -282,18 +327,107 @@
*/
$( '#jump-start-deactivate' ).click(function () {
- $( '.spinner' ).show();
+ $( '.jumpstart-spinner' ).show();
data.jumpStartDeactivate = 'jump-start-deactivate';
+ data.action = 'jetpack_jumpstart_ajax';
$.post( jetpackL10n.ajaxurl, data, function ( response ) {
//$('#jumpstart-cta').html(response);
$( '#deactivate-success' ).html( response );
- $( '.spinner' ).hide();
+ $( '.jumpstart-spinner' ).hide();
+ window.location.hash = '';
+
});
return false;
});
}
+ /*
+ Handles the module activation ajax actions
+ */
+ function adminAJAX() {
+ $( '.nux-in' ).on( 'keypress click', '.form-toggle', function( e ){
+ if ( e.which !== 13 && e.type !== 'click' ) {
+ return;
+ }
+ var thisElementId = e.target.id,
+ thisLabel = $( 'label[for="' + thisElementId + '"]' + '.plugin-action__label'),
+ index;
+
+ data.action = 'jetpack_admin_ajax';
+ data.thisModuleSlug = thisElementId.replace( 'active-', '' );
+ data.toggleModule = 'nux-toggle-module';
+
+ index = $( '#toggle-' + data.thisModuleSlug ).data( 'index' );
+
+ thisLabel.hide();
+ $( '.module-spinner-' + data.thisModuleSlug ).show();
+
+ $.post( jetpackL10n.ajaxurl, data, function ( response ) {
+ if ( 0 !== response ) {
+
+ // Log NUX Admin event in MC Stats
+ if( true === response.activated ){
+ new Image().src = data.nuxAdminStatsURLS.enabled+','+'enabled-'+data.thisModuleSlug;
+ }else{
+ new Image().src = data.nuxAdminStatsURLS.deactivated+','+'deactivated-'+data.thisModuleSlug;
+ }
+
+ $( '.module-spinner-' + response.module ).hide();
+
+ // This is a hacky way around not showing the config link when activated.
+ response.noConfig = _.indexOf( [ 'photon', 'enhanced-distribution' ], response.module );
+
+ // Preserves the modal index so it can be rendered properly after the data has changed
+ response.index = index;
+
+ $( '#toggle-' + response.module ).replaceWith( wp.template( 'mod-nux' )( response ) );
+
+ // Refreshes the modal element data
+ _.extend( _.findWhere( modules, { module: response.module } ), response );
+
+ // Manual element alteration for Manage, since it's not part of the template
+ if ( 'manage' === data.thisModuleSlug ) {
+ if ( response.activated ) {
+ thisLabel.show().html( 'ACTIVE' );
+ $( '#manage-row' ).addClass( 'activated' );
+ } else {
+ thisLabel.show().html( 'INACTIVE' );
+ $( '#manage-row' ).removeClass( 'activated' );
+ }
+
+ $( '.manage-cta-inactive' ).toggle();
+ $( '.manage-cta-active' ).toggle();
+ return;
+ }
+
+ initModalEvents();
+ window.location.hash = 'refresh';
+ }
+
+ }, 'json' );
+ });
+ }
+
+ /*
+ This function will refresh any data elements that we've
+ changed via AJAX. Necessary when page is visited via back/forward
+ browsing.
+ */
+ function refreshData() {
+ // Clean up
+ $( '#nux-performance-security, #nux-traffic' ).empty();
+ $( '#jump-start-area' ).hide();
+ $( '.nux-intro' ).show();
+
+ data.action = 'jetpack_admin_ajax_refresh';
+ data.refreshData = 'refresh';
+ $.post( jetpackL10n.ajaxurl, data, function ( response ) {
+ modules = _.values( response );
+ loadModules( 'Performance-Security', 'mod-nux', '#nux-performance-security' );
+ loadModules( 'Traffic', 'mod-nux', '#nux-traffic' );
+ }, 'json' );
+ }
})( jQuery, jetpackL10n.modules, jetpackL10n.currentVersion, jetpackL10n );
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
index ff54b29d..ec00730b 100644
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
+++ b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
@@ -38,7 +38,15 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
function add_page_actions( $hook ) {
// Add landing page specific underscore templates
- add_action( "admin_footer-$hook", array( $this, 'js_templates' ) );
+ /**
+ * Filters the js_templates callback value
+ *
+ * @since 3.6.0
+ *
+ * @param array array( $this, 'js_templates' ) js_templates callback.
+ * @param string $hook Specific admin page.
+ */
+ add_action( "admin_footer-$hook", apply_filters( 'jetpack_landing_page_js_templates_callback', array( $this, 'js_templates' ), $hook ) );
/** This action is documented in class.jetpack.php */
do_action( 'jetpack_admin_menu', $hook );
@@ -115,9 +123,8 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
$module_name[] = $val['module_name'];
}
}
- $jumpstart_module_list = implode( $module_name, ', ' );
- return $jumpstart_module_list;
+ return $module_name;
}
function jetpack_menu_order( $menu_order ) {
@@ -194,7 +201,7 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
?>
<div id="message" class="jetpack-message">
<div class="squeezer">
- <h4><?php echo wp_kses( $message, array( 'strong' => array(), 'a' => array( 'href' => true ), 'br' => true ) ); ?></h4>
+ <h2><?php echo wp_kses( $message, array( 'strong' => array(), 'a' => array( 'href' => true ), 'br' => true ) ); ?></h2>
<?php
/**
* Fires within the displayed message when a feature configuation is updated.
@@ -245,6 +252,24 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
}
+ /*
+ * Build an array of NUX admin stats urls.
+ * requires the build URL args passed as an array
+ *
+ * @param array $nux_admin_stats
+ * @return (array) of built stats urls
+ */
+ function build_nux_admin_stats_urls( $nux_admin_stats ) {
+ $nux_admin_urls = array();
+
+ foreach ( $nux_admin_stats as $value) {
+ $nux_admin_urls[ $value ] = Jetpack::build_stats_url( array( 'x_jetpack-nux' => $value ) );
+ }
+
+ return $nux_admin_urls;
+
+ }
+
function page_admin_scripts() {
// Enqueue jp.js and localize it
wp_enqueue_script( 'jetpack-js', plugins_url( '_inc/jp.js', JETPACK__PLUGIN_FILE ),
@@ -264,7 +289,9 @@ class Jetpack_Landing_Page extends Jetpack_Admin_Page {
'jumpstart_modules' => $this->jumpstart_module_tag( 'Jumpstart' ),
'show_jumpstart' => $this->jetpack_show_jumpstart(),
'activate_nonce' => wp_create_nonce( 'jetpack-jumpstart-nonce' ),
+ 'admin_nonce' => wp_create_nonce( 'jetpack-admin-nonce' ),
'jumpstart_stats_urls' => $this->build_jumpstart_stats_urls( array( 'dismiss', 'jumpstarted', 'learnmore', 'viewed', 'manual' ) ),
+ 'admin_stats_urls' => $this->build_nux_admin_stats_urls( array( 'enabled', 'deactivated', 'learnmore' ) ),
'site_url_manage' => Jetpack::build_raw_urls( get_site_url() ),
)
);
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-my-jetpack-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-my-jetpack-page.php
new file mode 100644
index 00000000..512b71a5
--- /dev/null
+++ b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-my-jetpack-page.php
@@ -0,0 +1,187 @@
+<?php
+include_once( 'class.jetpack-admin-page.php' );
+include_once( JETPACK__PLUGIN_DIR . 'class.jetpack-modules-list-table.php' );
+
+// Builds the My Jetpack page
+class Jetpack_My_Jetpack_Page extends Jetpack_Admin_Page {
+ // Show the settings page only when Jetpack is connected or in dev mode
+ protected $dont_show_if_not_active = true;
+ function add_page_actions( $hook ) {} // There are no page specific actions to attach to the menu
+
+ // Adds the My Jetpack page, but hides it from the submenu
+ function get_page_hook() {
+ return add_submenu_page( null, __( 'My Jetpack', 'jetpack' ), __( 'My Jetpack', 'jetpack' ), 'jetpack_connect_user', 'my_jetpack', array( $this, 'render' ) );
+ }
+
+ // Renders the view file
+ function page_render() {
+ Jetpack::init()->load_view( 'admin/my-jetpack-page.php' );
+
+ //My Jetpack view tracking, send to MC Stats
+ Jetpack::init()->stat( 'admin', 'my-jetpack' );
+ Jetpack::init()->do_stats( 'server_side' );
+
+ }
+
+ /*
+ * Handle the change in master user
+ */
+ function jetpack_my_jetpack_change_user() {
+ if ( ! isset( $_POST['_my_jetpack_nonce'] ) || ! wp_verify_nonce( $_POST['_my_jetpack_nonce'], 'jetpack_change_primary_user' ) ) {
+ wp_die( __( 'Failed permissions, please try again.', 'jetpack' ) );
+ exit;
+ }
+
+ if ( isset( $_POST['jetpack-new-master'] ) ) {
+ $old_master_user = Jetpack_Options::get_option( 'master_user' );
+ $new_master_user = $_POST['jetpack-new-master'];
+ $user_token = Jetpack_Data::get_access_token( $new_master_user );
+ $is_user_connected = $user_token && ! is_wp_error( $user_token );
+ if ( current_user_can( 'manage_options' ) && $is_user_connected ) {
+ Jetpack::log( 'switch_master_user', array( 'old_master' => $old_master_user, 'new_master' => $new_master_user ) );
+ Jetpack_Options::update_option( 'master_user', $new_master_user );
+ Jetpack::state( 'message', 'switch_master' );
+
+ //My Jetpack primary user successfully changed, send to MC Stats
+ Jetpack::init()->stat( 'admin', 'change-primary-successful' );
+ Jetpack::init()->do_stats( 'server_side' );
+
+ // Change the blog owner dotcom side
+ $this->wpcom_switch_blog_owner( $new_master_user );
+ }
+ }
+ }
+
+ /*
+ * Tell wpcom that the master user has switched
+ * so we can update the 'wpcom_blog_owner'
+ */
+ function wpcom_switch_blog_owner( $new_master ) {
+ $request = array(
+ 'new_blog_owner' => $new_master
+ );
+
+ // Tell wpcom about the change
+ Jetpack::load_xml_rpc_client();
+ $xml = new Jetpack_IXR_Client( array(
+ 'user_id' => get_current_user_id(),
+ ) );
+
+ $xml->query( 'jetpack.switchBlogOwner', $request );
+ }
+
+ /*
+ * Checks to see if there are any other users available to become primary
+ * Users must both:
+ * - Be linked to wpcom
+ * - Be an admin
+ *
+ * @return bool
+ */
+ function jetpack_are_other_users_linked_and_admin() {
+ // If only one admin
+ $all_users = count_users();
+ if ( 2 > $all_users['avail_roles']['administrator'] ) {
+ return false;
+ }
+
+ $users = get_users();
+ $available = array();
+ // If no one else is linked to dotcom
+ foreach ( $users as $user ) {
+ if ( isset( $user->caps['administrator'] ) && Jetpack::is_user_connected( $user->ID ) ) {
+ $available[] = $user->ID;
+ }
+ }
+
+ if ( 2 > count( $available ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /*
+ * All the data we'll need about the Master User
+ * for the My Jetpack page template
+ *
+ * @return array
+ */
+ function jetpack_master_user_data() {
+ // If the master user has disappeared, none of this is useful.
+ // @todo throw up a warning and offer a solution
+ $master = Jetpack_Options::get_option( 'master_user' );
+ if ( ! get_user_by( 'id', $master ) ) {
+ return false;
+ }
+
+ $master_user = get_userdata( $master );
+ $master_user_data_com = Jetpack::get_connected_user_data( $master_user->ID );
+ $gravatar = sprintf( '<a href="%s">%s</a>', get_edit_user_link( $master_user->ID ), get_avatar( $master_user->ID, 40 ) );
+
+ $master_user_data = array(
+ 'masterUser' => $master_user,
+ 'masterDataCom' => $master_user_data_com,
+ 'gravatar' => $gravatar,
+ );
+
+ return $master_user_data;
+ }
+
+ /*
+ * All the data we'll need about the Current User
+ *
+ * @return array
+ */
+ function jetpack_current_user_data() {
+ global $current_user;
+ $is_master_user = $current_user->ID == Jetpack_Options::get_option( 'master_user' );
+ $dotcom_data = Jetpack::get_connected_user_data();
+
+ $current_user_data = array(
+ 'isUserConnected' => Jetpack::is_user_connected( $current_user->ID ),
+ 'isMasterUser' => $is_master_user,
+ 'adminUsername' => $current_user->user_login,
+ 'userComData' => $dotcom_data,
+ 'gravatar' => sprintf( '<a href="%s">%s</a>', get_edit_user_link( $current_user->ID ), get_avatar( $current_user->ID, 40 ) ),
+ );
+
+ return $current_user_data;
+ }
+
+
+ /*
+ * Build an array of My Jetpack stats urls.
+ * requires the build URL args passed as an array
+ *
+ * @param array $my_jetpack_stats
+ * @return (array) of built stats urls
+ */
+ function build_my_jetpack_stats_urls( $my_jetpack_stats ) {
+ $my_jetpack_urls = array();
+
+ foreach ( $my_jetpack_stats as $value ) {
+ $my_jetpack_urls[ $value ] = Jetpack::build_stats_url( array( 'x_jetpack-admin' => $value ) );
+ }
+
+ return $my_jetpack_urls;
+
+ }
+
+ // Load up admin scripts
+ function page_admin_scripts() {
+ wp_enqueue_script( 'jp-connection-js', plugins_url( '_inc/jp-my-jetpack.js', JETPACK__PLUGIN_FILE ), array( 'jquery', 'wp-util' ), JETPACK__VERSION . 'yep' );
+
+ wp_localize_script( 'jp-connection-js', 'jpConnection',
+ array(
+ 'jetpackIsActive' => Jetpack::is_active(),
+ 'isAdmin' => current_user_can( 'jetpack_manage_modules' ),
+ 'otherAdminsLinked' => $this->jetpack_are_other_users_linked_and_admin(),
+ 'masterUser' => $this->jetpack_master_user_data(),
+ 'currentUser' => $this->jetpack_current_user_data(),
+ 'my_jetpack_stats_urls' => $this->build_my_jetpack_stats_urls( array( 'change_primary', 'disconnect_site', 'confirm_disconnect', 'support_no_disconnect', 'cancel_disconnect' ) ),
+ 'alertText' => __( 'You must link another admin account before switching primary account holders.', 'jetpack' ),
+ )
+ );
+ }
+}
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php
index 0204aaf6..fa45db76 100644
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php
+++ b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php
@@ -19,7 +19,7 @@ class Jetpack_Settings_Page extends Jetpack_Admin_Page {
$list_table = new Jetpack_Modules_List_Table;
?>
<div class="clouds-sm"></div>
- <?php /** This action is documented in class.jetpack.php */
+ <?php /** This action is already documented in views/admin/admin-page.php */
do_action( 'jetpack_notices' ) ?>
<div class="page-content configure">
<div class="frame top hide-if-no-js">
diff --git a/plugins/jetpack/_inc/lib/markdown/extra.php b/plugins/jetpack/_inc/lib/markdown/extra.php
index 562acef8..4f52171f 100644
--- a/plugins/jetpack/_inc/lib/markdown/extra.php
+++ b/plugins/jetpack/_inc/lib/markdown/extra.php
@@ -72,34 +72,34 @@ class Markdown_Parser {
### Configuration Variables ###
# Change to ">" for HTML output.
- var $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX;
- var $tab_width = MARKDOWN_TAB_WIDTH;
+ public $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX;
+ public $tab_width = MARKDOWN_TAB_WIDTH;
# Change to `true` to disallow markup or entities.
- var $no_markup = false;
- var $no_entities = false;
+ public $no_markup = false;
+ public $no_entities = false;
# Predefined urls and titles for reference links and images.
- var $predef_urls = array();
- var $predef_titles = array();
+ public $predef_urls = array();
+ public $predef_titles = array();
### Parser Implementation ###
# Regex to match balanced [brackets].
# Needed to insert a maximum bracked depth while converting to PHP.
- var $nested_brackets_depth = 6;
- var $nested_brackets_re;
+ public $nested_brackets_depth = 6;
+ public $nested_brackets_re;
- var $nested_url_parenthesis_depth = 4;
- var $nested_url_parenthesis_re;
+ public $nested_url_parenthesis_depth = 4;
+ public $nested_url_parenthesis_re;
# Table of hash values for escaped characters:
- var $escape_chars = '\`*_{}[]()>#+-.!';
- var $escape_chars_re;
+ public $escape_chars = '\`*_{}[]()>#+-.!';
+ public $escape_chars_re;
- function Markdown_Parser() {
+ function __construct() {
#
# Constructor function. Initialize appropriate member variables.
#
@@ -124,12 +124,12 @@ class Markdown_Parser {
# Internal hashes used during transformation.
- var $urls = array();
- var $titles = array();
- var $html_hashes = array();
+ public $urls = array();
+ public $titles = array();
+ public $html_hashes = array();
# Status flag to avoid invalid nesting.
- var $in_anchor = false;
+ public $in_anchor = false;
function setup() {
@@ -195,7 +195,7 @@ class Markdown_Parser {
return $text . "\n";
}
- var $document_gamut = array(
+ public $document_gamut = array(
# Strip link definitions, store in hashes.
"stripLinkDefinitions" => 20,
@@ -423,7 +423,7 @@ class Markdown_Parser {
}
- var $block_gamut = array(
+ public $block_gamut = array(
#
# These are all the transformations that form block-level
# tags like paragraphs, headers, and list items.
@@ -485,7 +485,7 @@ class Markdown_Parser {
}
- var $span_gamut = array(
+ public $span_gamut = array(
#
# These are all the transformations that occur *within* block-level
# tags like paragraphs, headers, and list items.
@@ -888,7 +888,7 @@ class Markdown_Parser {
return "\n". $result ."\n\n";
}
- var $list_level = 0;
+ public $list_level = 0;
function processListItems($list_str, $marker_any_re) {
#
@@ -1002,22 +1002,22 @@ class Markdown_Parser {
}
- var $em_relist = array(
+ public $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?!_)',
);
- var $strong_relist = array(
+ public $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?!_)',
);
- var $em_strong_relist = array(
+ public $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?!_)',
);
- var $em_strong_prepared_relist;
+ public $em_strong_prepared_relist;
function prepareItalicsAndBold() {
#
@@ -1483,7 +1483,7 @@ class Markdown_Parser {
# String length function for detab. `_initDetab` will create a function to
# hanlde UTF-8 if the default function does not exist.
- var $utf8_strlen = 'mb_strlen';
+ public $utf8_strlen = 'mb_strlen';
function detab($text) {
#
@@ -1552,29 +1552,29 @@ class MarkdownExtra_Parser extends Markdown_Parser {
### Configuration Variables ###
# Prefix for footnote ids.
- var $fn_id_prefix = "";
+ public $fn_id_prefix = "";
# Optional title attribute for footnote links and backlinks.
- var $fn_link_title = MARKDOWN_FN_LINK_TITLE;
- var $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
+ public $fn_link_title = MARKDOWN_FN_LINK_TITLE;
+ public $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
# Optional class attribute for footnote links and backlinks.
- var $fn_link_class = MARKDOWN_FN_LINK_CLASS;
- var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
+ public $fn_link_class = MARKDOWN_FN_LINK_CLASS;
+ public $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
# Optional class prefix for fenced code block.
- var $code_class_prefix = MARKDOWN_CODE_CLASS_PREFIX;
+ public $code_class_prefix = MARKDOWN_CODE_CLASS_PREFIX;
# Class attribute for code blocks goes on the `code` tag;
# setting this to true will put attributes on the `pre` tag instead.
- var $code_attr_on_pre = MARKDOWN_CODE_ATTR_ON_PRE;
+ public $code_attr_on_pre = MARKDOWN_CODE_ATTR_ON_PRE;
# Predefined abbreviations.
- var $predef_abbr = array();
+ public $predef_abbr = array();
### Parser Implementation ###
- function MarkdownExtra_Parser() {
+ function __construct() {
#
# Constructor function. Initialize the parser object.
#
@@ -1600,20 +1600,20 @@ class MarkdownExtra_Parser extends Markdown_Parser {
"doAbbreviations" => 70,
);
- parent::Markdown_Parser();
+ parent::__construct();
}
# Extra variables used during extra transformations.
- var $footnotes = array();
- var $footnotes_ordered = array();
- var $footnotes_ref_count = array();
- var $footnotes_numbers = array();
- var $abbr_desciptions = array();
- var $abbr_word_re = '';
+ public $footnotes = array();
+ public $footnotes_ordered = array();
+ public $footnotes_ref_count = array();
+ public $footnotes_numbers = array();
+ public $abbr_desciptions = array();
+ public $abbr_word_re = '';
# Give the current footnote number.
- var $footnote_counter = 1;
+ public $footnote_counter = 1;
function setup() {
@@ -1656,9 +1656,9 @@ class MarkdownExtra_Parser extends Markdown_Parser {
### Extra Attribute Parser ###
# Expression to use to catch attributes (includes the braces)
- var $id_class_attr_catch_re = '\{((?:[ ]*[#.][-_:a-zA-Z0-9]+){1,})[ ]*\}';
+ public $id_class_attr_catch_re = '\{((?:[ ]*[#.][-_:a-zA-Z0-9]+){1,})[ ]*\}';
# Expression to use when parsing in a context when no capture is desired
- var $id_class_attr_nocatch_re = '\{(?:[ ]*[#.][-_:a-zA-Z0-9]+){1,}[ ]*\}';
+ public $id_class_attr_nocatch_re = '\{(?:[ ]*[#.][-_:a-zA-Z0-9]+){1,}[ ]*\}';
function doExtraAttributes($tag_name, $attr) {
#
@@ -1744,20 +1744,20 @@ class MarkdownExtra_Parser extends Markdown_Parser {
### HTML Block Parser ###
# Tags that are always treated as block tags:
- var $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption';
+ public $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption';
# Tags treated as block tags only if the opening tag is alone on its line:
- var $context_block_tags_re = 'script|noscript|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
+ public $context_block_tags_re = 'script|noscript|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
# Tags where markdown="1" default to span mode:
- var $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
+ public $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
# Tags which must not have their contents modified, no matter where
# they appear:
- var $clean_tags_re = 'script|math|svg';
+ public $clean_tags_re = 'script|math|svg';
# Tags that do not need to be closed.
- var $auto_close_tags_re = 'hr|img|param|source|track';
+ public $auto_close_tags_re = 'hr|img|param|source|track';
function hashHTMLBlocks($text) {
@@ -2835,17 +2835,17 @@ class MarkdownExtra_Parser extends Markdown_Parser {
# Redefining emphasis markers so that emphasis by underscore does not
# work in the middle of a word.
#
- var $em_relist = array(
+ public $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![\.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
);
- var $strong_relist = array(
+ public $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![\.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
);
- var $em_strong_relist = array(
+ public $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![\.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
diff --git a/plugins/jetpack/_inc/lib/markdown/gfm.php b/plugins/jetpack/_inc/lib/markdown/gfm.php
index 450742b2..6cd208af 100644
--- a/plugins/jetpack/_inc/lib/markdown/gfm.php
+++ b/plugins/jetpack/_inc/lib/markdown/gfm.php
@@ -64,7 +64,7 @@ class WPCom_GHF_Markdown_Parser extends MarkdownExtra_Parser {
$this->preserve_latex = function_exists( 'latex_markup' );
$this->strip_paras = function_exists( 'wpautop' );
- parent::MarkdownExtra_Parser();
+ parent::__construct();
}
/**
@@ -148,6 +148,7 @@ class WPCom_GHF_Markdown_Parser extends MarkdownExtra_Parser {
public function do_codeblock_preserve( $matches ) {
$block = stripslashes( $matches[3] );
$block = esc_html( $block );
+ $block = str_replace( '\\', '\\\\', $block );
$open = $matches[1] . $matches[2] . "\n";
return $open . $block . $matches[4];
}
@@ -264,10 +265,10 @@ class WPCom_GHF_Markdown_Parser extends MarkdownExtra_Parser {
*/
protected function get_shortcode_regex() {
$pattern = get_shortcode_regex();
-
+
// don't match markdown link anchors that could be mistaken for shortcodes.
- $pattern .= '(?!\()';
-
+ $pattern .= '(?!\()';
+
return "/$pattern/s";
}
diff --git a/plugins/jetpack/_inc/lib/markdown/test.php b/plugins/jetpack/_inc/lib/markdown/test.php
deleted file mode 100644
index 8a0b08be..00000000
--- a/plugins/jetpack/_inc/lib/markdown/test.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-require 'extra.php';
-require 'gfm.php';
-$parser = new WPCom_GHF_Markdown_Parser;
-
-$text1 = <<<EOD
-I am just back\slashing up a *storm* \*mofo*.
-
-EOD;
-
-$text = 'Just rockin in the *free* world
-
-```html
-<html lang="en">
-</html>
-```
-';
-#echo $text;
-echo $parser->transform( $text );
-echo "\n\n\n";
-#echo $parser->hashBlock( '<pre>foobar</pre>' );
-
-
-$foo = <<<EOD
-Here is a *list* with things:
-
-* some `code` is better than others
-* **my** code is better than *yours*
-* the best code is that which need not be written
-
-Selah.
-EOD;
diff --git a/plugins/jetpack/_inc/lib/tonesque.php b/plugins/jetpack/_inc/lib/tonesque.php
index 2a17a741..8f867a1f 100644
--- a/plugins/jetpack/_inc/lib/tonesque.php
+++ b/plugins/jetpack/_inc/lib/tonesque.php
@@ -25,6 +25,8 @@ class Tonesque {
/**
* Allows any image URL to be passed in for $this->image_url.
*
+ * @module theme-tools
+ *
* @since 2.5.0
*
* @param string $image_url The URL to any image
diff --git a/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php b/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php
new file mode 100644
index 00000000..09880bf4
--- /dev/null
+++ b/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php
@@ -0,0 +1,168 @@
+<?php
+
+/**
+ * Jetpack_Tracks_Client
+ * @autounit nosara tracks-client
+ *
+ * Send Tracks events on behalf of a user
+ *
+ * Example Usage:
+```php
+ require( dirname(__FILE__).'path/to/tracks/class.tracks-client' );
+
+ $result = Jetpack_Tracks_Client::record_event( array(
+ '_en' => $event_name, // required
+ '_ui' => $user_id, // required unless _ul is provided
+ '_ul' => $user_login, // required unless _ui is provided
+
+ // Optional, but recommended
+ '_ts' => $ts_in_ms, // Default: now
+ '_via_ip' => $client_ip, // we use it for geo, etc.
+
+ // Possibly useful to set some context for the event
+ '_via_ua' => $client_user_agent,
+ '_via_url' => $client_url,
+ '_via_ref' => $client_referrer,
+
+ // For user-targeted tests
+ 'abtest_name' => $abtest_name,
+ 'abtest_variation' => $abtest_variation,
+
+ // Your application-specific properties
+ 'custom_property' => $some_value,
+ ) );
+
+ if ( is_wp_error( $result ) ) {
+ // Handle the error in your app
+ }
+```
+ */
+
+require_once( dirname(__FILE__).'/class.tracks-client.php' );
+
+class Jetpack_Tracks_Client {
+ const PIXEL = 'http://pixel.wp.com/t.gif';
+ const BROWSER_TYPE = 'php-agent';
+ const USER_AGENT_SLUG = 'tracks-client';
+ const VERSION = '0.3';
+
+ /**
+ * record_event
+ * @param mixed $event Event object to send to Tracks. An array will be cast to object. Required.
+ * Properties are included directly in the pixel query string after light validation.
+ * @return mixed True on success, WP_Error on failure
+ */
+ static function record_event( $event ) {
+ if ( ! $event instanceof Jetpack_Tracks_Event ) {
+ $event = new Jetpack_Tracks_Event( $event );
+ }
+ if ( is_wp_error( $event ) ) {
+ return $event;
+ }
+
+ $pixel = $event->build_pixel_url( $event );
+
+ if ( ! $pixel ) {
+ return new WP_Error( 'invalid_pixel', 'cannot generate tracks pixel for given input', 400 );
+ }
+
+ return self::record_pixel( $pixel );
+ }
+
+ /**
+ * Synchronously request the pixel
+ */
+ static function record_pixel( $pixel ) {
+ // Add the Request Timestamp and URL terminator just before the HTTP request.
+ $pixel .= '&_rt=' . self::build_timestamp() . '&_=_';
+
+ $response = wp_remote_get( $pixel, array(
+ 'blocking' => true, // The default, but being explicit here :)
+ 'timeout' => 1,
+ 'redirection' => 2,
+ 'httpversion' => '1.1',
+ 'user-agent' => self::get_user_agent(),
+ ) );
+
+ if ( is_wp_error( $response ) ) {
+ return $response;
+ }
+
+ $code = isset( $response['response']['code'] ) ? $response['response']['code'] : 0;
+
+ if ( $code !== 200 ) {
+ return new WP_Error( 'request_failed', 'Tracks pixel request failed', $code );
+ }
+
+ return true;
+ }
+
+ static function get_user_agent() {
+ return Jetpack_Tracks_Client::USER_AGENT_SLUG . '-v' . Jetpack_Tracks_Client::VERSION;
+ }
+
+ /**
+ * Build an event and return its tracking URL
+ * @deprecated Call the `build_pixel_url` method on a Jetpack_Tracks_Event object instead.
+ * @param array $event Event keys and values
+ * @return string URL of a tracking pixel
+ */
+ static function build_pixel_url( $event ) {
+ $_event = new Jetpack_Tracks_Event( $event );
+ return $_event->build_pixel_url();
+ }
+
+ /**
+ * Validate input for a tracks event.
+ * @deprecated Instantiate a Jetpack_Tracks_Event object instead
+ * @param array $event Event keys and values
+ * @return mixed Validated keys and values or WP_Error on failure
+ */
+ private static function validate_and_sanitize( $event ) {
+ $_event = new Jetpack_Tracks_Event( $event );
+ if ( is_wp_error( $_event ) ) {
+ return $_event;
+ }
+ return get_object_vars( $_event );
+ }
+
+ // Milliseconds since 1970-01-01
+ static function build_timestamp() {
+ $ts = round( microtime( true ) * 1000 );
+ return number_format( $ts, 0, '', '' );
+ }
+
+ /**
+ * Grabs the user's anon id from cookies, or generates and sets a new one
+ *
+ * @return string An anon id for the user
+ */
+ static function get_anon_id() {
+ static $anon_id = null;
+
+ if ( ! isset( $anon_id ) ) {
+
+ // Did the browser send us a cookie?
+ if ( isset( $_COOKIE[ 'tk_ai' ] ) && preg_match( '#^[A-Za-z0-9+/=]{24}$#', $_COOKIE[ 'tk_ai' ] ) ) {
+ $anon_id = $_COOKIE[ 'tk_ai' ];
+ } else {
+
+ $binary = '';
+
+ // Generate a new anonId and try to save it in the browser's cookies
+ // Note that base64-encoding an 18 character string generates a 24-character anon id
+ for ( $i = 0; $i < 18; ++$i ) {
+ $binary .= chr( mt_rand( 0, 255 ) );
+ }
+
+ $anon_id = 'jetpack:' . base64_encode( $binary );
+
+ if ( ! headers_sent() ) {
+ setcookie( 'tk_ai', $anon_id );
+ }
+ }
+ }
+
+ return $anon_id;
+ }
+}
diff --git a/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php b/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php
new file mode 100644
index 00000000..fb86e0ba
--- /dev/null
+++ b/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * @autounit nosara tracks-client
+ *
+ * Example Usage:
+```php
+ require_once( dirname(__FILE__) . 'path/to/tracks/class.tracks-event' );
+
+ $event = new Jetpack_Tracks_Event( array(
+ '_en' => $event_name, // required
+ '_ui' => $user_id, // required unless _ul is provided
+ '_ul' => $user_login, // required unless _ui is provided
+
+ // Optional, but recommended
+ '_via_ip' => $client_ip, // for geo, etc.
+
+ // Possibly useful to set some context for the event
+ '_via_ua' => $client_user_agent,
+ '_via_url' => $client_url,
+ '_via_ref' => $client_referrer,
+
+ // For user-targeted tests
+ 'abtest_name' => $abtest_name,
+ 'abtest_variation' => $abtest_variation,
+
+ // Your application-specific properties
+ 'custom_property' => $some_value,
+ ) );
+
+ if ( is_wp_error( $event->error ) ) {
+ // Handle the error in your app
+ }
+
+ $bump_and_redirect_pixel = $event->build_signed_pixel_url();
+```
+ */
+
+require_once( dirname(__FILE__) . '/class.tracks-client.php' );
+
+class Jetpack_Tracks_Event {
+ const EVENT_NAME_REGEX = '/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/';
+ const PROP_NAME_REGEX = '/^[a-z_][a-z0-9_]*$/';
+ public $error;
+
+ function __construct( $event ) {
+ $_event = self::validate_and_sanitize( $event );
+ if ( is_wp_error( $_event ) ) {
+ $this->error = $_event;
+ return;
+ }
+
+ foreach( $_event as $key => $value ) {
+ $this->{$key} = $value;
+ }
+ }
+
+ function record() {
+ return Jetpack_Tracks_Client::record_event( $this );
+ }
+
+ /**
+ * Annotate the event with all relevant info.
+ * @param mixed $event Object or (flat) array
+ * @return mixed The transformed event array or WP_Error on failure.
+ */
+ static function validate_and_sanitize( $event ) {
+ $event = (object) $event;
+
+ // Required
+ if ( ! $event->_en ) {
+ return new WP_Error( 'invalid_event', 'A valid event must be specified via `_en`', 400 );
+ }
+
+ // delete non-routable addresses otherwise geoip will discard the record entirely
+ if ( property_exists( $event, '_via_ip' ) && preg_match( '/^192\.168|^10\./', $event->_via_ip ) ) {
+ unset($event->_via_ip);
+ }
+
+ $validated = array(
+ 'browser_type' => Jetpack_Tracks_Client::BROWSER_TYPE,
+ '_aua' => Jetpack_Tracks_Client::get_user_agent(),
+ );
+
+ $_event = (object) array_merge( (array) $event, $validated );
+
+ // If you want to blacklist property names, do it here.
+
+ // Make sure we have an event timestamp.
+ if ( ! isset( $_event->_ts ) ) {
+ $_event->_ts = Jetpack_Tracks_Client::build_timestamp();
+ }
+
+ return $_event;
+ }
+
+ /**
+ * Build a pixel URL that will send a Tracks event when fired.
+ * On error, returns an empty string ('').
+ *
+ * @return string A pixel URL or empty string ('') if there were invalid args.
+ */
+ function build_pixel_url() {
+ if ( $this->error ) {
+ return '';
+ }
+
+ $args = get_object_vars( $this );
+
+ // Request Timestamp and URL Terminator must be added just before the HTTP request or not at all.
+ unset( $args['_rt'] );
+ unset( $args['_'] );
+
+ $validated = self::validate_and_sanitize( $args );
+
+ if ( is_wp_error( $validated ) )
+ return '';
+
+ return Jetpack_Tracks_Client::PIXEL . '?' . http_build_query( $validated );
+ }
+
+ static function event_name_is_valid( $name ) {
+ return preg_match( Jetpack_Tracks_Event::EVENT_NAME_REGEX, $name );
+ }
+
+ static function prop_name_is_valid( $name ) {
+ return preg_match( Jetpack_Tracks_Event::PROP_NAME_REGEX, $name );
+ }
+
+ static function scrutinize_event_names( $event ) {
+ if ( ! Jetpack_Tracks_Event::event_name_is_valid( $event->_en ) ) {
+ return;
+ }
+
+ $whitelisted_key_names = array(
+ 'anonId',
+ 'Browser_Type',
+ );
+
+ foreach ( array_keys( (array) $event ) as $key ) {
+ if ( in_array( $key, $whitelisted_key_names ) ) {
+ continue;
+ }
+ if ( ! Jetpack_Tracks_Event::prop_name_is_valid( $key ) ) {
+ return;
+ }
+ }
+ }
+}
diff --git a/plugins/jetpack/_inc/lib/tracks/client.php b/plugins/jetpack/_inc/lib/tracks/client.php
new file mode 100644
index 00000000..cb471c60
--- /dev/null
+++ b/plugins/jetpack/_inc/lib/tracks/client.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * PHP Tracks Client
+ * @autounit nosara tracks-client
+ * Example Usage:
+ *
+```php
+ include( plugin_dir_path( __FILE__ ) . 'lib/tracks/client.php');
+ $result = jetpack_tracks_record_event( $user, $event_name, $properties );
+
+ if ( is_wp_error( $result ) ) {
+ // Handle the error in your app
+ }
+```
+ */
+
+// Load the client classes
+require_once( dirname(__FILE__) . '/class.tracks-event.php' );
+require_once( dirname(__FILE__) . '/class.tracks-client.php' );
+
+// Now, let's export a sprinkling of syntactic sugar!
+
+/**
+ * Procedurally (vs. Object-oriented), track an event object (or flat array)
+ * NOTE: Use this only when the simpler jetpack_tracks_record_event() function won't work for you.
+ * @param \Jetpack_Tracks_Event $event The event object.
+ * @return \Jetpack_Tracks_Event|\WP_Error
+ */
+function jetpack_tracks_record_event_raw( $event ) {
+ return Jetpack_Tracks_Client::record_event( $event );
+}
+
+/**
+ * Procedurally build a Tracks Event Object.
+ * NOTE: Use this only when the simpler jetpack_tracks_record_event() function won't work for you.
+ * @param $identity WP_user object
+ * @param string $event_name The name of the event
+ * @param array $properties Custom properties to send with the event
+ * @param int $event_timestamp_millis The time in millis since 1970-01-01 00:00:00 when the event occurred
+ * @return \Jetpack_Tracks_Event|\WP_Error
+ */
+function jetpack_tracks_build_event_obj( $user, $event_name, $properties = array(), $event_timestamp_millis = false ) {
+
+ $identity = jetpack_tracks_get_identity( $user->ID );
+
+ $properties['user_lang'] = $user->get( 'WPLANG' );
+
+ $blog_details = array(
+ 'blog_lang' => isset( $properties['blog_lang'] ) ? $properties['blog_lang'] : get_bloginfo( 'language' )
+ );
+
+ $timestamp = ( $event_timestamp_millis !== false ) ? $event_timestamp_millis : round( microtime( true ) * 1000 );
+ $timestamp_string = is_string( $timestamp ) ? $timestamp : number_format( $timestamp, 0, '', '' );
+
+ return new Jetpack_Tracks_Event( array_merge( $blog_details, (array) $properties, $identity, array(
+ '_en' => $event_name,
+ '_ts' => $timestamp_string
+ ) ) );
+}
+
+/*
+ * Get the identity to send to tracks.
+ *
+ * @param int $user_id The user id of the local user
+ * @return array $identity
+ */
+function jetpack_tracks_get_identity( $user_id ) {
+
+ // Meta is set, and user is still connected. Use WPCOM ID
+ $wpcom_id = get_user_meta( $user_id, 'jetpack_tracks_wpcom_id', true );
+ if ( $wpcom_id && Jetpack::is_user_connected( $user_id ) ) {
+ return array(
+ '_ut' => 'wpcom:user_id',
+ '_ui' => $wpcom_id
+ );
+ }
+
+ // User is connected, but no meta is set yet. Use WPCOM ID and set meta.
+ if ( Jetpack::is_user_connected( $user_id ) ) {
+ $wpcom_user_data = Jetpack::get_connected_user_data( $user_id );
+ add_user_meta( $user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'], true );
+
+ return array(
+ '_ut' => 'wpcom:user_id',
+ '_ui' => $wpcom_user_data['ID']
+ );
+ }
+
+ // User isn't linked at all. Fall back to anonymous ID.
+ $anon_id = get_user_meta( $user_id, 'jetpack_tracks_anon_id', true );
+ if ( ! $anon_id ) {
+ $anon_id = Jetpack_Tracks_Client::get_anon_id();
+ add_user_meta( $user_id, 'jetpack_tracks_anon_id', $anon_id, false );
+ }
+
+ if ( ! isset( $_COOKIE[ 'tk_ai' ] ) && ! headers_sent() ) {
+ setcookie( 'tk_ai', $anon_id );
+ }
+
+ return array(
+ '_ut' => 'anon',
+ '_ui' => $anon_id
+ );
+
+}
+
+/**
+ * Record an event in Tracks - this is the preferred way to record events from PHP.
+ *
+ * @param mixed $identity username, user_id, or WP_user object
+ * @param string $event_name The name of the event
+ * @param array $properties Custom properties to send with the event
+ * @param int $event_timestamp_millis The time in millis since 1970-01-01 00:00:00 when the event occurred
+ * @return bool true for success | \WP_Error if the event pixel could not be fired
+ */
+function jetpack_tracks_record_event( $user, $event_name, $properties = array(), $event_timestamp_millis = false ) {
+ $event_obj = jetpack_tracks_build_event_obj( $user, $event_name, $properties, $event_timestamp_millis );
+
+ if ( is_wp_error( $event_obj->error ) ) {
+ return $event_obj->error;
+ }
+
+ return $event_obj->record();
+}
diff --git a/plugins/jetpack/changelog.txt b/plugins/jetpack/changelog.txt
new file mode 100644
index 00000000..a19f9555
--- /dev/null
+++ b/plugins/jetpack/changelog.txt
@@ -0,0 +1,1405 @@
+== Changelog ==
+= 3.7.2 =
+Release date: September 29th, 2015
+
+* Bug Fix: REST API: Fixed an error when saving drafts and publishing posts
+
+= 3.7.1 =
+Release date: September 28th, 2015
+
+* Enhancement: General: Added inline documentation for various filters and functions
+* Enhancement: General: Added custom capabilities for module management on multi-site installs
+* Enhancement: General: Cleaned up old changelog entries from readme
+* Enhancement: General: Cleaned up unused i18n textdomains
+* Enhancement: General: Updated the new settings page to look better in various translations
+* Enhancement: REST API: Added new endpoints to manage users
+* Enhancement: Sharing: Updated the Google logo
+* Bug Fix: Carousel: Page scroll no longer disappears after closing the carousel
+* Bug Fix: Contact Form: Fields are sent and displayed in the correct order
+* Bug Fix: Contact Form: No longer showing a notice on AJAX actions in feedback lists
+* Bug Fix: Contact Form: Made using more than two notification emails possible
+* Bug Fix: Contact Form: Mitigate a potential stored XSS vulnerability. Thanks to Marc-Alexandre Montpas (Sucuri)
+* Bug Fix: General: Mitigate a potential information disclosure. Thanks to Jaime Delgado Horna
+* Bug Fix: General: Fixed a locale error in the notifications popout
+* Bug Fix: General: Fixed a possible fatal error in the client area
+* Bug Fix: General: Fixed compatibility issues with certain use cases
+* Bug Fix: General: Disabled connection warnings for multisites with domain mapping
+* Bug Fix: General: Updated translations for correct link display in admin notices
+* Bug Fix: REST API: Fixed a fatal error in one of the endpoints
+* Bug Fix: Sharing: Fixed OpenGraph tags for Instagram embeds
+* Bug Fix: Sharing: Fixed compatibility issues with bbPress
+* Bug Fix: Widget Visibility: Fixed a fatal error in case of a missing tag
+
+= 3.7.0 =
+Release date: September 9th, 2015
+
+Feature Enhancements:
+
+* New admin page interface to easily configure Jetpack
+* Added staging site support for testing a connected Jetpack site
+
+Additional changes:
+
+* Enhancement: CLI: Added a possibility to change all options with confirmation for some of them
+* Enhancement: Gallery: Added filters to allow new gallery types to be declared
+* Enhancement: General: Added inline documentation for actions, filters, etc.
+* Enhancement: General: Changed class variable declarations keyword from var to public
+* Enhancement: General: Made the Settings page module toggle buttons more accessible
+* Enhancement: General: The admin bar now loads new notifications popout
+* Enhancement: General: Renamed some modules to avoid redundant prefixes
+* Enhancement: General: Switched to the WordPress Core's spinner image
+* Enhancement: General: Updated the bot list
+* Enhancement: Manage: Added the ability to activate a network-wide plugin on a single site from WordPress.com
+* Enhancement: Photon: Added a way to check image URLs against custom domains
+* Enhancement: Photon: Added prompts on the media upload page telling the user about Photon
+* Enhancement: Publicize: Added width and height values to OpenGraph tags for default images
+* Enhancement: Related Posts: Added a filter to allow disabling nofollow
+* Enhancement: REST API: Added new API endpoints to extend API functionality
+* Enhancement: REST API: Added new fields to existing API endpoints
+* Enhancement: Sharing: Added a possibility to opt-out of sharing for a single post
+* Enhancement: Sharing: Added bbPress support
+* Enhancement: Sharing: Added more configuration to the Likes modal
+* Enhancement: Sharing: Made the reddit button open a new tab
+* Enhancement: Sharing: Removed unused files
+* Enhancement: Shortcodes: Added auto embed option inside comments
+* Enhancement: Shortcodes: Added autohide parameter to the YouTube shortcode
+* Enhancement: Subscriptions: added an action that triggers at the end of the subscription process
+* Enhancement: VideoPress: Videos are now embedded using a new player
+* Enhancement: Widget Visibility: Added parent page logic
+* Enhancement: Widget Visibility: Added support for split terms
+* Enhancement: Widgets: Added actions to the Social Media widget
+* Enhancement: Widgets: Switched the Display Posts widget to the new API version
+* Bug Fix: General: Fixed scrolling to top after modal window closing
+* Bug Fix: Infinite Scroll: Added a check for cases when output buffering is disabled
+* Bug Fix: Infinite Scroll: Added translation to the copyright message
+* Bug Fix: Manage: Fixed automatic update synchronization on WordPress multisite network admin
+* Bug Fix: Manage: Redirects back to WordPress.com are allowed from the customizer view
+* Bug Fix: Media: Fixed duplicate images bug in the Media Extractor
+* Bug Fix: Publicize: Made it possible to remove previously set message
+* Bug Fix: Sharing: Added a thumbnail image to OpenGraph tags on pages with DailyMotion embeds
+* Bug Fix: Sharing: Fixed Twitter Cards tags escaping
+* Bug Fix: Sharing: Made OpenGraph tags for title and description use proper punctuation
+* Bug Fix: Sharing: Made sure Likes can be disabled on the front page
+* Bug Fix: Shortcodes: Fixed Facebook embeds by placing the scipt in the footer
+* Bug Fix: Shortcodes: Fixed PollDaddy shortcode issues over SSL connections
+* Bug Fix: Shortcodes: Made responsive video wrappers only wrap video embeds
+* Bug Fix: Shortcodes: Made SoundCloud accept percents for dimensions
+* Bug Fix: Social Links: Fixed a possible conflict with another class
+* Bug Fix: Stats: Made sure the Stats URL is always escaped properly
+
+= 3.6.1 =
+Release Date: July 24, 2015
+
+* Enhancement: Fully compatible with upcoming WordPress 4.3
+* Enhancement: Site Icon: Start to deprecate Site Icon in favor of Core's version (if available)
+* Bug Fix: Subscriptions: You can now use more than one Subscription form on a single page
+* Bug Fix: Quieted PHP notices and warnings with the JSON API, Display Posts Widget and Gallery Widget (slideshow mode)
+* Bug Fix: Correct permissions check for connection panel
+* Hardening: Increase permissions checks
+
+= 3.6 =
+Release Date: July 6th, 2015
+Release Post: http://jetpack.me/2015/07/06/jetpack-3-6-updated-social-widgets-jetpack-cli-and-more/
+
+Feature Enhancements:
+
+* CLI: Add a number of Jetpack CLI improvements: see http://jetpack.me/support/jetpack-cli
+* New Jetpack admin page for connection management
+* New Social Media Icons widget
+* FB Like Box: A visual refresh of the Facebook likebox widget
+* Protect: When your IP is blocked, use a math captcha as a fallback instead of a complete block
+
+Additional changes:
+
+* Enhancement: Custom CSS: Add more Flexbox support and other enhancements
+* Enhancement: Extra Sidebar Widgets: Top Posts Widget: Choose what Post Types to display
+* Enhancement: General: Save on some requests! print CSS inline when there isn't much of it
+* Enhancement: Likes: Likes can now be shown on all post types
+* Enhancement: Minileven: Add Featured Image to Gallery Post Format and Pages
+* Enhancement: Mobile Theme: Add div wrapping View Mobile Site link to allow for easier CSS customizations
+* Enhancement: Omnisearch: Link to edit post in titles
+* Enhancement: Protect: Learn Trusted Headers locally and cache blocks properly
+* Enhancement: REST API: Add locale support
+* Enhancement: Sharing: Retire StumbleUpon
+* Enhancement: Sharing: Upgrade to reCAPTCHA 2.0 for Email Sharing
+* Enhancement: Shortcode Embeds: Add Mesh oembed support
+* Enhancement: Shortcode Embeds: New Wufoo Shortcode from WordPress.com
+* Enhancement: Shortcode Embeds: Mixcloud: handle accented characters in URLs
+* Enhancement: Site Logo: Adding itemprops to support logo schema.
+* Enhancement: Slideshow Gallery: New parameters *size* and *autostart*
+* Enhancement: Slideshow Gallery: Use more reliable CSS for resizing instead of js
+* Enhancement: Stats: No longer track stats for preview pages
+* Enhancement: Tiled Gallery: Improve the shapes and distributions of shapes in the Tiled Gallery, based on observations for its usage.
+* Enhancement: Protect: Whitelist for multisite globally and locally
+* Enhancement: Sharing: LinkedIn always uses https for share counts. (saved extra http request)
+* Bug Fix: Carousel: Jetpack Carousel now supports HTML5 gallery
+* Bug Fix: Extra Sidebar Widgets: Choose Images button works in accessibility mode
+* Bug Fix: General: Fix: Cannot remove hooks from filter 'jetpack_get_available_modules'
+* Bug Fix: Infinite Scroll: Check that search terms exist before matching against post title. fixes #2075
+* Bug Fix: Likes: Never double show on search results
+* Bug Fix: Notifications: Notifications didn't load on wp-admin/network pages
+* Bug Fix: Sharing: Fix Facebook share button not showing for Australian & Canadian locale
+* Bug Fix: Shortcode Embed: Slideshare Shortcode now fixed
+* Bug Fix: SSO: Hide login no matter what when using the filter to do so
+* Bug Fix: Subs Widget: Don't hide email input if submit failed
+* Bug Fix: Tiled Gallery: Show columns setting for Thumbnail Grid when Tiled Mosaic galleries are the default
+* Bug Fix: Twitter Cards: Remove deprecated card types
+
+= 3.5.3 =
+Release Date: May 6th, 2015
+
+* Security Hardening: Remove Genericons example.html file.
+
+= 3.5.2 =
+Release Date: May 5th, 2015
+
+* Bug Fix: Sharing: Changes Facebook share count endpoint
+
+
+= 3.5.1 =
+Release Date: May 5th, 2015
+
+* Enhancement: Sharing: Changes Facebook share count method per Facebook API change
+* Enhancement: General: Remove .po files to reduce plugin size
+* Bug Fix: General: Remove identity crisis notification
+* Bug Fix: Subscriptions: Correct required input validation
+* Security hardening
+
+= 3.5 =
+Release Date: April 23rd, 2015
+Release Post: http://jetpack.me/2016/04/23/jetpack-3-5-menu-management/
+
+Jetpack 3.5 introduces the ability to manage your site's menus directly from WordPress.com and several bug fixes and enhancements. This upgrade is recommended for all users.
+
+* Enhancement: General: Change security reporting to use a transient instead of option to reduce backup load
+* Enhancement: General: Improve module search
+* Enhancement: JSON API: Allow users to manage menus through WordPress.com
+* Enhancement: Sharing: Reduce spam through email sharing
+* Bug Fix: Custom CSS: Improve recall of CSS revisions
+* Bug Fix: Extra Sidebar Widgets: Change class name for Contact Info widget
+* Bug Fix: Extra Sidebar Widgets: Fix errors when adding widgets via the customizer
+* Bug Fix: Extra Sidebar Widgets: Fix PHP notices in RSS widget
+* Bug Fix: General: Fix redirect loop on activation
+* Bug Fix: General: Styling fixes
+* Bug Fix: Protect: Add IP translation fallback when inet_pton is not available
+* Bug Fix: Protect: Always allow login from local IDs
+* Bug Fix: Protect: Sanitize displayed IP after block
+* Bug Fix: Publicize: Prevent generating Facebook profile links for app-scoped user IDs
+* Bug Fix: Subscriptions: Improve error handling
+* Bug Fix: Theme Tools: Include breadcrumb code
+* Misc: Extra Sidebar Widgets: Remove Readmill Widget
+
+= 3.4.3 =
+Release Date: April 20th, 2015
+
+* Security hardening.
+
+= 3.4.2 =
+Release Date: April 19th, 2015
+
+* Bug Fix: Contact info widget namespacing
+* Bug Fix: Javascript errors on wp-admin due to stats display code
+* Bug Fix: Potential fatal error from improperly called function
+* Bug Fix: Potential fatal error when protect servers are unreachable for WordPress Multisite
+
+= 3.4.1 =
+Release Date: March 19th, 2015
+
+* Bug Fix: General: Modules not displaying properly in non-English installs
+* Bug Fix: Manage: Some installs showing a transient fatal error
+* Bug Fix: Protect: Protect module not auto-activating for users who upgrade
+* Bug Fix: Omnisearch: Some installs not properly reporting WP version number, causing Omnisearch error
+* Bug Fix: Stats: Top posts/pages widget not loading
+* Bug Fix: Contact Info Widget: Fix conflict with Avada theme
+
+= 3.4 =
+Release Date: March 18th, 2015
+
+Release Post: http://jetpack.me/2015/03/17/jetpack-3-4-protect-secure-and-simplify/
+
+* Enhancement : Config Settings: provide a notification for users that update features settings
+* Enhancement : Config Settings: provide a notification for users that update features settings
+* Enhancement : Contact Form: Use the predefined $title variable in the anchor tag in grunion contact form button
+* Enhancement : Contact Form: Use the predefined $title variable in the anchor tag in the button on admin
+* Enhancement : Custom Content Type: Add all Custom Post Types to Omnisearch
+* Enhancement : Custom Content Type: Add option to add Testimonial Custom Content Type in admin
+* Enhancement : Custom Content Type: bring consistency between the portfolio and testimonial shared codebase
+* Enhancement : Custom Content Type: code cleanup
+* Enhancement : Custom Content Type: register namespaced 'jetpack_portfolio' shortcode/use a prefix for shortcode for Portfolio
+* Enhancement : Custom Content Type: set shortcode image size to 'large' and add jetpack_portfolio_thumbnail_size filter to allow themes to set their own size for Portfolio
+* Enhancement : Custom Content Type: testimonial shortcode enhancement
+* Enhancement : Extra Sidebar Widgets: Add subscription widget wildcard
+* Enhancement : Extra Sidebar Widgets: Likes and Sharing Shortcodes
+* Enhancement : Extra Sidebar Widgets: Minor fixes to Facebook widget plugin for SSL
+* Enhancement : Fix/update jetpack version
+* Enhancement : General: Add DNS Prefetching
+* Enhancement : General: Add Jetpack admin dashboard widget
+* Enhancement : GlotPress: Update GP_Locales and GP_Locale classes
+* Enhancement : Improved control over Nova Theme Menu output markup
+* Enhancement : Infinite Scroll: Adds a `button` wrapper for the infinity handle.
+* Enhancement : Infinite Scroll: Check for response.html before using indexOf
+* Enhancement : Integrate BruteProtect for protection against Brute Force attacks
+* Enhancement : JSON API Manage: Added Mock Jetpack Option to Sync options that don't have to live in the Database
+* Enhancement : JSON API: Add/empty trash days option to sync
+* Enhancement : Jump Start: Add "Jump Start" interface for new users
+* Enhancement : Manage: Add "modified_before" and "modified_after" parameters to /sites/%s/posts/ via JSON API
+* Enhancement : Mobile Theme: Add filter for choosing mobile theme menu
+* Enhancement : Notifications: Changes to load the new notifications client.
+* Enhancement : Protect: Add a filter so that user can add thier own bots
+* Enhancement : Protect: Add security reporting
+* Enhancement : Protect: Add/whitelist endpoints via JSON API for Jetpack Protect
+* Enhancement : Publicize: update connection confirmation message
+* Enhancement : Sharing: Add custom service name as a class
+* Enhancement : Sharing: display name of custom service in link title
+* Enhancement : Sharing: Remove default post types for showing share links
+* Enhancement : Sharing: use Jetpack version number when enqueing sharing.js
+* Enhancement : Shortcodes Team Partnerships: Backport fixes from SoundCloud 2.3.1 through 3.0.2
+* Enhancement : Shortlinks: use HTTPS when possible
+* Enhancement : Stats: Make loading of stats async
+* Enhancement : Subscriptions: Added settings field for comment sub text
+* Enhancement : Subscriptions: Hide Form After Submit
+* Enhancement : Subscriptions: remove label from widget title
+* Enhancement : Subscriptions: Update subscriptions.php
+* Bug Fix : Contact form: Increase CSS specificity for Contact Forms in widgets
+* Bug Fix : Custom Content Type: Testimonial Custom Content Type: use core `WP_Customize_Image_Control` instead of custom...
+* Bug Fix : Extra Sidebar Widgets: add missing & to if statement for widget visibility
+* Bug Fix : Extra Sidebar Widgets: Don't require height/width values in the Twitter Timeline widget
+* Bug Fix : Extra Sidebar Widgets: Upload images from the customizer/Extra Sidebar Widgets Tiled Galleries for Gallery Widget
+* Bug Fix : General: Fix bug that was preventing modules from displaying properly
+* Bug Fix : Manage: When calling /sites/%s/posts/ include all attachments not just the first five via JSON API
+* Bug Fix : Mobile Theme: Minileven; Start after DOM ready
+* Bug Fix : Sharing: Open sharing in same window
+* Bug Fix : Stats language
+* Bug Fix : Subscritpions: fix invalid field when no email address
+
+
+= 3.3.2 =
+Release Date: February 19th, 2015
+
+* Enhancement: Updated translation files.
+* Enhancement: Heartbeat: Correctly stat new datasets.
+* Bug Fix: Widget Visibility: Correct some caching of visibility results that may get evaluated too soon.
+* Bug Fix: Contact Form: Hardening.
+* Bug Fix: Photon: Make sure our gallery filter can parse array inputs as well as the default html.
+
+= 3.3.1 =
+Release Date: February 11th, 2015
+
+* Bug Fix: JSON API: Minor versioning data.
+* Bug Fix: Markdown: Re-run KSES after processing to account for syntax changes.
+* Bug Fix: Media Extractor: Don't call a gallery a gallery if it hasn't got any pictures!
+* Bug Fix: Module Management: Handle a core api change for folks running trunk.
+* Bug Fix: Related Posts: CSS -- better clear rows.
+* Bug Fix: Sharing: Including sharing account on Pinterest unofficial buttons as well.
+* Bug Fix: Sharing: Properly version external assets by Jetpack release version.
+* Bug Fix: Shortcodes: Soundcloud: Backport API compatibility fixes.
+* Bug Fix: Shortcodes: Flickr: Tidy up our regex url pattern matching.
+* Bug Fix: Subscriptions: Don't add 'Email Address' as the value -- we have placeholders!
+* Bug Fix: Widgets: Gallery Widget: Allow folks to upload images from the widget area in the customizer.
+
+= 3.3 =
+Release Date: December 15th, 2014
+Release Post: http://jetpack.me/2014/12/16/jetpack-3-3-a-single-home-for-all-your-wordpress-sites/
+
+* Enhancement: Adds responsive video support to BuddyPress.
+* Enhancement: Custom Content Types: Added 'order' and 'orderby' options to portfolio shortcode.
+* Enhancement: Display notice when Jetpack Development Mode is on.
+* Enhancement: General: Update compatibility with Twenty Fifteen.
+* Enhancement: Image URL can now be overwritten with the `jetpack_images_fit_image_url_override` filter after dimensions are set by Photon.
+* Enhancement: JSON API: Add Endpoint for trigger Plugin Autoupdates.
+* Enhancement: JSON API: General Improvements. Documentation on http://developer.wordpress.com/
+* Enhancement: Likes: Updated the code to accept arbitrary CPTs.
+* Enhancement: Related Posts: Allow filter by `post_format`.
+* Enhancement: Sharing: add new `jetpack_sharing_counts` filter for option to turn off sharing counts.
+* Enhancement: Sharing: Use the Site Logo Theme Tool and the Site Icon as fallbacks for image tags.
+* Enhancement: Shortcodes: Made the code more readable by using output buffers instead of string concatenation.
+* Enhancement: Site Logo: Add alias functions to provide backward compatibility for themes expecting the old function calls.
+* Enhancement: Slideshow: Add title and alt text to images.
+* Enhancement: Subscription Form: Do not display the logged in user's email address by default.
+* Enhancement: Top Posts Widget: Refactor to allow conditional loading of the css.
+* Enhancement: Top Posts: Add `jetpack_top_posts_widget_count` filter to control number of displayed posts.
+* Bug Fix: Change subscribe_text from `p` to `div` so that it can contain block-level elements.
+* Bug Fix: Fonts: Change path to look for the svg in the right directory.
+* Bug Fix: Increase CSS specificity for Contact Forms in widgets.
+* Bug Fix: JSON API: Plugins Update: Make sure the plugin doesn't get deactivated.
+* Bug Fix: Likes: Fixes issues where likes don't load, load master iframe after scripts are loaded.
+* Bug Fix: Notes Module: Avoid a PHP Notice in cli scripts when the request doesn't contain a User-Agent header.
+* Bug Fix: Nova Menu CPT: fix notice when we have no taxonomies.
+* Bug Fix: Nova Menus: Use current instance to maintain object context.
+* Bug Fix: Related Posts: Add filter for `_enabled_for_request()`.
+* Bug Fix: Sharing: Prevent duplicate @ in shared Tweets.
+* Bug Fix: Site Logo: `get_site_logo()` now properly returns the site logo ID when provided in the `$show` argument.
+* Bug Fix: Site Logo: Correct evaluation of the Display Header Text in Customizer preview.
+
+= 3.2.1 =
+Release Date: November 14th, 2014
+
+* Enhancement: Updated translation files.
+* Enhancement: JSON API: More object vars passed back to some queries. Documentation on http://developer.wordpress.com/
+* Bug Fix: JSON API: Pass back correct author in `me/posts` data.
+* Bug Fix: JSON API: Don't check if a post is freshly pressed on remote Jetpack sites where the function doesn't exist.
+* Bug Fix: Site Logo: Add backward-compatible template tags to match the standalone release.
+* Bug Fix: Don't use __DIR__ -- it's 5.3+ only, and WordPress supports back to 5.2.
+* Bug Fix: Retool how we remove the source styles when using the concatenated version.
+* Bug Fix: Shortcodes: TED: Correct default language code from `eng` to `en`.
+* Bug Fix: Gallery Widget: Add a default background color.
+* Bug Fix: Subscription Notifications: Remove the label.
+* Bug Fix: Sharing: enqueue Genericons on static front page as well if selected.
+
+= 3.2 =
+Release Date: October 29, 2014
+Release Post: http://jetpack.me/2014/11/03/jetpack-3-2/
+
+* Enhancement: Speed Improvements (woohoo!).
+* Enhancement: Add site icons: an avatar for your blog.
+* Enhancement: Improvements to API endpoints.
+* Enhancement: Add oEmbed sources (Twitter, SoundCloud, Instagram, DailyMotion, Vine).
+* Enhancement: Add indicators to make it easier to see which modules are active.
+* Enhancement: Improve debug tool.
+* Enhancement: Add new 'Site Logos' code to theme tools, for themes that opt in to support it.
+* Enhancement: Improved caching for related posts.
+* Enhancement: Added "Remember Me" functionality to Single Sign On.
+* Enhancement: Improved accessibility.
+* Enhancement: Added additional filters to Widget Visibility.
+* Bug Fix: Fixed PHP Notice errors for Likes, Widget Visibility.
+* Bug Fix: Improvements to the testimonials CPT.
+* Bug Fix: Improved RTL on VideoPress admin.
+* Bug Fix: Removed Google+ Authorship module (discontinued by Google).
+* Bug Fix: Fixed use of deprecated function in mobile theme.
+* Bug Fix: Various fixes to Tiled Galleries.
+* Bug Fix: Various fixes to Contact Form.
+* Bug Fix: Various fixes to oEmbed.
+* Bug Fix: Various fixes to Single Sign On.
+* Bug Fix: Fixed styles in ShareDaddy.
+* Bug Fix: Better match protocols (http/https) to the site.
+
+
+= 3.1.1 =
+Release Date: August 7, 2014
+
+* Enhancement: Update translation files for strings that had been submitted/approved since release.
+* Bug Fix: Social Links: Add a function check to better degrade if Publicize isn't around.
+* Bug Fix: Open Graph: Add WordPress SEO back to the blacklist, until they update how they opt us out.
+* Bug Fix: Asset Minification: Add another caveat ( empty $plugin ) to short out on.
+* Bug Fix: Deprecated Hooks: Fixing our expectations where something that should be an array occasionally wasn't.
+* Bug Fix: Custom CSS: Add extra whitelist rule for -o-keyframe rules.
+
+= 3.1 =
+Release Date: July 31, 2014
+Release Post: http://jetpack.me/2014/07/31/jetpack-3-1-portfolio-custom-post-types-a-new-logo-and-much-more/
+
+* Enhancement: New Custom Content Types module.
+* Enhancement: New Jetpack Logo.
+* Enhancement: New optional JSON API endpoints for viewing updates and managing plugins and themes.
+* Enhancement: New Custom Post Type: Portfolio!
+* Enhancement: Rearranged buttons on the modules modals for easier management.
+* Enhancement: Jetpack Settings have improved keyboard accessibility.
+* Enhancement: Improved RTL support for After the Deadline, Carousel, Contact Form, Comics CPT, Custom CSS, Omnisearch, Publicize, Related Posts, Slideshow short code, Tiled Gallery, Widget-Visibility and Widgets Gallery.
+* Enhancement: Contact Form: Add an "Empty Spam" option.
+* Enhancement: i18n: Change the priority of where plugin_textdomain is hooked so that the plugins can better translate Jetpack.
+* Enhancement: Monitor: Displays how often the site is checked for downtime.
+* Enhancement: Shortcode: Added Mixcloud shortcode and oEmbed support.
+* Enhancement: Social Links: Improved handling of customizer hooks in non-admin context.
+* Enhancement: Stats: The smiley image is gone by default.
+* Enhancement: Stats: Added link to the configure page for stats so that the stats settings page is easier to find.
+* Enhancement: Theme Tools: Added the responsive videos to theme tools so that themes can support responsive videos more easily.
+* Update: Updated Genericons to version 3.1, new icons for website, ellipsis, foursquare, x-post, sitemap, hierarchy and paintbrush.
+* Bug Fix: Contact Form: Prefix function to avoid conflicts with other plugins.
+* Bug Fix: Custom CSS: Admin UI has a responsive layout.
+* Bug Fix: Custom CSS: Custom $content_width value doesn't overwrite theme's $content_width.
+* Bug Fix: Contact Form: Feedback link takes you to the form page.
+* Bug Fix: Carousel: Confirms an avatar is returned by get_avatar before displaying.
+* Bug Fix: Featured Content: Don't remove setting validation.
+* Bug Fix: Infinite Scroll: Google Universal Analytics support added.
+* Bug Fix: Multisite: Add message when updating multisite settings.
+* Bug Fix: Photon: Photon will no longer upscale images larger than the original size.
+* Bug Fix: Photon: Check that the image exists before rewriting the image URL to utilize Photon.
+* Bug Fix: Sharing: Pinterest adds attribute to display share count.
+* Bug Fix: Sharing: Respect an empty sharing title.
+* Bug Fix: Sharing: Share buttons now appear in the bbPress forms.
+* Bug Fix: Sharing: Support for multiple meta html tag og:image values.
+* Bug Fix: Single Sign On: Logout allows override of forcing Single Sign On.
+* Bug Fix: Single Sign On: Remove the lost password link on auto-forward logout.
+* Bug Fix: Social Links: Do not use anonymous function for compatibility with PHP 5.2.
+* Bug Fix: Tiled Galleries: Update jQuery mouseover caption effect to reduce flickering.
+* Bug Fix: Widgets Visibility: Works better in the customizer admin view.
+
+= 3.0.2 =
+Release Date: June 17, 2014
+
+* Enhancement: General: Make module categories filter more visible when active.
+* Enhancement: General: Updated translation files with more strings added since the last release.
+* Enhancement: General: Allow deep-linking to the Contact Support form.
+* Bug Fix: General: RTL Jetpack Admin UI looks better.
+* Bug Fix: General: Fixed PHP warning when bulk deactivating modules.
+* Bug Fix: General: Removed an unnecessary description.
+* Bug Fix: General: Resolved an SSL error on Jetpack Admin UI.
+* Bug Fix: General: Fix error comparing signatures when the WordPress installation is using site_url filters (applied mostly to WPEngine sites).
+* Bug Fix: General: Resolved PHP strict error on the mobile menu.
+* Bug Fix: General: Fix timing of conditional checks, so that calling developer mode via a plugin works again.
+* Bug Fix: General: Main page categories tab now properly translates module names.
+* Bug Fix: Related Posts: Fix a typo, the "more info" link now works.
+* Bug Fix: Likes: Improve button styling.
+* Bug Fix: Likes: Remove unused UI for Reblog settings on social settings page.
+* Bug Fix: Contact Form: Updated to no longer use a deprecated Akismet function.
+* Bug Fix: Contact Form: Sends email to the administrator that is not marked as spam again.
+* Bug Fix: Open Graph: Resolved PHP warning on open graph gallery pages when the gallery is empty.
+
+= 3.0.1 =
+Release Date: May 22, 2014
+
+* Bug Fix: AtD: A wpcom-only function got synced by mistake and caused a few errors. Fixed.
+* Bug Fix: Post By Email: Add static keyword to a function.
+* Bug Fix: ShareDaddy: In the admin-side configuration of sharing links, we used a Path icon instead of Pinterest. Oops!
+* Bug Fix: ShareDaddy: We inadvertently appended `via @jetpack` to some twitter shares. This is no longer the case.
+* Bug Fix: Related Posts: Tidying up and relocation of the `resync` button formerly on the more info modal.
+* Bug Fix: Infinite Scroll: Work better with core's MediaElement.js
+* Bug Fix: Heartbeat: Undeclared variable fixed.
+
+= 3.0 =
+Release Date: May 20, 2014
+Release Post: http://jetpack.me/2014/05/20/jetpack-3-0/
+
+* New User Interface for managing modules and settings
+* New Module: Verfication Tools
+* Enhancement: New look for the Sharing module
+* Enhancement: Multiple improvements on which Twitter handle a Twitter card will display
+* Enhancement: Add option to hide Google+ Authorship banner while still receiving the benefits
+* Enhancement: Many Infinite Scroll enhancements to improve performance
+* Enhancement: Infinite Scroll will use your CPT's display name instead of "Older Posts"
+* Enhancement: JSON API added /media/new endpoint
+* Enhancement: Added filter to assign new default image for Open Graph tags
+* Enhancement: New [jetpack-related-posts] shortcode to add Related Posts to page instead of default placement
+* Enhancement: Added SSO option to turn off login form completely, to use WordPress.com login exclusively
+* Enhancement: The [googlemaps] shortcode allows for Google Maps Engine
+* Enhancement: YouTube shortcode allows HD playback
+* Enhancement: Smoother, Faster Tiled Galleries!
+* Enhancement: New languages! Use Jetpack in Irish, Fulah, and Tigrinya
+* Bug Fix: Use your browser's Back and Forward buttons when naviagating a Carousel
+* Bug Fix: Various Related Posts fixes and improvements for added flexibility
+* Bug Fix: WordPress 3.9: Restores ability to edit Contact Forms
+* Bug Fix: WordPress 3.9: Restores Gallery Widget compatability
+* Bug Fix: Ensure Markdown is kept when Bulk Editing posts
+* Bug Fix: Improved Jetpack's Multisite Network Admin page for networks with a large number of sites
+* Bug Fix: Ensure Sharing settings persist when Bulk Editing a post
+* Bug Fix: Various other shortcode improvements
+
+= 2.9.3 =
+Release Date: April 10, 2014
+
+* Important security update. CVE-2014-0173
+
+= 2.9.2 =
+Release Date: March 17, 2014
+
+* Bug Fix: Publicize: When publishing from a mobile app or third-party client, Publicize now works again.
+
+= 2.9.1 =
+Release Date: March 6, 2014
+
+* Bug Fix: After the Deadline: Fix a Javascript glitch that could prevent publishing of posts.
+* Bug Fix: SSO: Disable the implementation of an option that had been removed before release. This would have only been an issue if a site administrator had enabled the module during an early beta of 2.9.
+
+= 2.9 =
+Release Date: February 26, 2014
+Release Post: http://jetpack.me/2014/02/26/jetpack-2-9/
+
+* Added Multisite network functionality
+* New Module: Related Posts
+* Enhancement: Single Sign On
+* Enhancement: Mixcloud shortcode and oEmbed
+* Enhancement: Gist shortcode and oEmbed
+* Enhancement: Modify Facebook Like Box widget to support new Facebook parameters
+* Enhancement: Rolled the Push Notifications module into the Notes module
+* Enhancement: Update kses with Markdown
+* Enhancement: Adding keyboard accessibility to sharing buttons config page
+* Enhancement: Pull WordPress testing bits from the new official git mirror at WordPress.org
+* Bug Fix: Widget Visibility
+* Bug Fix: Revisions box in Custom CSS
+* Bug Fix: Fix several bugs in the WordPress Posts Widget so that it correctly updates
+* Bug Fix: Limit Login Attempts no longer generates false positives from xmlrpc.
+* Bug Fix: Clear max_posts transient on theme switch.
+* Bug Fix: Lower priority of sync to allow all CPTs to be registered.
+* Bug Fix: Contact form fields emailed in correct order.
+
+* Other bugfixes and enhancements at https://github.com/Automattic/jetpack/commits/2.9
+
+= 2.8 =
+Release Date: January 31, 2014
+Release Post: http://jetpack.me/2014/01/31/jetpack-2-8-introducing-markdown-and-improving-monitor/
+
+* New Module: Markdown
+* Module Update: Jetpack Monitor
+* Enhancement: Infinite Scroll: Keep track of $current_day between requests so the_date() works well.
+* Enhancement: Embeds: New filter to turn off embeds in comments.
+* Enhancement: Contact Form: Add placeholder support.
+* Enhancement: Widget: Gravatar Profile: Added filters to allow users to customize headings and fixed output of personal links.
+* Enhancement: Facebook OG Tags: Add `published_time`, `modified_time`, and `author` if the post type supports it.
+* Enhancement: Sharing: Display buttons on CPT archive pages.
+* Enhancement: Sharing: Add `get_share_title` function and filter.
+* Enhancement: Sharing: Add filter `sharing_display_link`.
+* Enhancement: Twitter Timeline: Flesh out tweet limit option.
+* Enhancement: Social Links: Add Google+ to the list of supported services.
+* Enhancement: Stats: Improve dashboard styles in 3.8.
+* Enhancement: Stats: No longer use Quantcast.
+* Enhancement: Top Posts: Add `jetpack_top_posts_days` filter.
+* Enhancement: AtD: Add TinyMCE 4 compatibility for its pending arrival in WordPress 3.9
+* Enhancement: Genericons: Update to v3.0.3
+* Enhancement: Tiled Galleries: Add alt attributes to images.
+* Enhancement: Shortcode: YouTube: Accept protocol-relative URLs.
+* Enhancement: Shortcode: Slideshow: Add white background option.
+* Enhancement: Shortcode: YouTube: Add support for the two closed-caption arguments.
+* Enhancement: Shortcode: Vimeo: Update the regex to support the new embed code.
+* Enhancement: Shortcode: Google Maps: Update the regex to handle new format for embeds.
+* Enhancement: Likes: Avoid a PHP Notice when $_POST['post_type'] is not set in meta_box_save.
+* Enhancement: Smush images to save on file size.
+* Enhancement: Publicize: Enable opt-in publicizing of custom post types.
+* Bug Fix: Random Redirect: Further namespace to avoid conflicts.
+* Bug Fix: Twitter Timeline: Resolve undefined index notice.
+* Bug Fix: Featured Content: Add extra class_exists() check to be extra careful.
+* Bug Fix: Facebook OG Tags: Change OG type of Home and Front Page to 'website'
+* Bug Fix: Widget Visibility: Add support for old-style single use widgets.
+* Bug Fix: Google Authorship: Support apostrophe in author names.
+* Bug Fix: Media Extractor: Assorted graceful failure caveats.
+* Bug Fix: Carousel: 'Link to None' bug fixed.
+* Bug Fix: Embeds: Bandcamp: Switch escaping function for album and track IDs to handle (int)s greater than PHP_INT_MAX
+* Bug Fix: Some plugins trying to catch brute-force attacks mistakenly flagged the Jetpack connection as one.
+
+= 2.7 =
+Release Date: December 11, 2013
+Release Post: http://jetpack.me/2013/12/11/jetpack-2-7-publicize/
+
+* Enhancement: Google+ Publicize
+* Enhancement: Add Cloudup as an oEmbed provider
+* Enhancement: Subscriptions: Add subscribe_field_id filter to allow updated ids when using multiple widgets
+* Enhancement: Infinite Scroll: TwentyFourteen Support
+* Bug Fix: Contact Form: Fix warning when form is called outside the loop
+* Bug Fix: Featured Content: Moving Settings to Customizer, provide option to set default tag as fallback, specify all supported post-types rather than just additional ones. Description Updates
+* Bug Fix: Featured Content: Compat with 'additional_post_types' theme support argument. Comment updates
+* Bug Fix: Featured Content: Make sure $term is an object before we treat it as one
+* Bug Fix: GlotPress: Merge with latest GlotPress
+* Bug Fix: Infinite Scroll: prevent Undefined index notice that can cause IS to fail when user has WP_DEBUG set to true
+* Bug Fix: Infinite Scroll: Improved compatibility with Carousel, Tiled Galleries, VideoPress, and the `[audio]` and `[video]` shortcodes
+* Bug Fix: Likes: Stop manually including version.php and trust the global. Some whitespace fixes, and if it's an attachment, follow the post_status of the parent post
+* Bug Fix: Mobile Theme: Display password field for Gallery format protected posts
+* Bug Fix: Sharing: Add new translation width for share button, and Google Plus icons
+* Bug Fix: Shortcodes: Support Ineternational Google domains for maps
+* Bug Fix: Shortcodes: Facebook Embeds: Register alternate permalink.php URL for posts
+* Bug Fix: Subscriptions: Moved inline styles from widget email input to separate css file
+* Bug Fix: Theme Tools: Fix glitch where random-redirect.php also showed as a plugin being deleted if you were deleting Jetpack
+* Bug Fix: Misc: Internationalization & RTL updates
+* Bug Fix: Misc: Prevent collisions with 'Facebook Featured Image & OG Meta Tags' plugin
+
+= 2.6.1 =
+Release Date: December 3, 2013
+
+* Bug Fix: minor styling fix in pre- and post-MP6/3.8 UI changes.
+* Bug Fix: Stats: spinner gif url fix when the user is viewing it over https.
+* Bug Fix: Stats: Switch to esc_html from htmlspecialchars in error message -- better to be native
+* Bug Fix: Media Extractor: some hosts don't compile unicode for preg_match_all, so we temporarily removed the block that depended on it.
+* Bug Fix: Media Extractor: Add in some error handling for malformed URLs.
+* Bug Fix: Twitter Cards: treat single-image galleries as a photo-type.
+* Bug Fix: Update conflicting plugins for OG tags and Twitter Cards.
+* Bug Fix: Correct max supported version number -- had been 3.6, update to 3.7.1
+
+= 2.6 =
+Release Date: November 28, 2013
+Release Post: http://jetpack.me/2013/11/26/new-release-jetpack-2-6/
+
+* Enhancement: WPCC / now called [SSO](http://jetpack.me/support/sso/): refactored.
+* Enhancement: Monitor: new module which will notify you if your site goes down(http://jetpack.me/support/monitor/).
+* Enhancement: Custom CSS: replace Ace editor with Codemirror.
+* Enhancement: Widgets: new “Display Posts” widget.
+* Enhancement: WP-CLI: add commands to disconnect a site and manage modules.
+* Enhancement: Contact Form: new filters, `grunion_contact_form_field_html` and `grunion_should_send_email`.
+* Enhancement: Custom Post Types: new restaurant post type.
+* Enhancement: Genericons: update to version 3.0.2.
+* Enhancement: Infinite Scroll: many improvements and fixes.
+* Enhancement: Likes: performance improvements.
+* Enhancement: MP6: Jetpack icons are now compatible with WordPress 3.8.
+* Enhancement: Open Graph: better descriptions, fallback images, and media extraction from video posts.
+* Enhancement: Publicize: new background token tests for connected publicize services and display problems on settings sharing and add new post.
+* Enhancement: Shortcodes: updated Bandcamp shortcode to support the `tracklist` and `minimal` attributes, as well as more `artwork` attribute values.
+* Enhancement: Shortlinks: add Custom Post Type support.
+* Enhancement: Subscriptions: add more ways to customize the subscriptions widget.
+* Enhancement: Twitter Cards: better media management and card type detection, and better handling of conflicts with other Twitter Cards plugins.
+* Enhancement: better handling of conflicts with other plugins.
+* Bug Fix: After the Deadline: add a typeof check for `tinyMCEPreInit.mceInit` to prevent js errors.
+* Bug Fix: Carousel: speed improvements and several bugfixes.
+* Bug Fix: Contact Form: remove nonce creating issues with caching plugins.
+* Bug Fix: Custom Post Types: Testimonials: return if featured image is empty so it can be removed after it’s been set.
+* Bug Fix: Featured Content: add additional post type support through the `additional_post_types` argument.
+* Bug Fix: Google Authorship: support apostrophes in Google+ profiles.
+* Bug Fix: Google Authorship: use a regexp Instead of using `mb_convert_encoding`, which doesn’t enjoy universal support.
+* Bug Fix: Heartbeat: ensure that it never triggers more than once per week.
+* Bug Fix: JSON API: add new `?meta=` parameter that allows you to expand the data found in the `meta->links` responses.
+* Bug Fix: JSON API: add new `is_private` response to the sites endpoint and `global_ID` response to the reader and post endpoints.
+* Bug Fix: Mobile Theme: allow small images to display inline.
+* Bug Fix: Mobile Theme: fix fatal errors for missing `minileven_header` function.
+* Bug Fix: Photon: fix errors when an image is not uploaded properly.
+* Bug Fix: Shortcodes: improvements to Archives, Google+, Presentations, Vine and Youtube.
+* Bug Fix: Tiled Galleries: improve display of panoramic images and fix errors when an image is not uploaded properly.
+
+= 2.5 =
+Release Date: September 19, 2013
+Release Post: http://jetpack.me/2013/09/19/jetpack-2-5/
+
+* Enhancement: Connect your Google+ profile and WordPress site to prove authorship of posts.
+* Enhancement: Improved sharing buttons display.
+* Enhancement: Comment on your posts using Google+ to signin.
+* Enhancement: Embed Google+ posts into your posts.
+* Enhancement: Added event logging capabilities for debugging
+* Enhancement: LaTeX is now available in dev mode
+* Enhancement: Introduced gallery widget
+* Enhancement: Added new module: VideoPress
+* Enhancement: Updated identity crisis checker
+* Enhancement: Tiled Gallery widget added
+* Enhancement: Google +1 button changed to Google+ Share button, to avoid confusion
+* Enhancement: Added check to ensure Google+ authorship accounts have disconnected properly
+* Enhancement: Updated identity crisis checker
+* Enhancement: Tiled Gallery widget added
+* Enhancement: Google +1 button changed to Google+ Share button, to avoid confusion
+* Enhancement: Added the ability to embed Facebook posts
+* Bug Fix: Redirect issue with G+ authorship when WordPress is not in the root directory
+* Enhancement: Better security if carousel to prevent self-XSS
+* Enhancement: Better handling of cookies for subsites on multisite installs
+* Bug Fix: Check for post in G+ authorship before accessing it
+
+= 2.4.2 =
+Release Date: September 5, 2013
+
+* Enhancement: Converted to module headers to detect Auto-Activating modules.
+* Enhancement: WPCC: Added 'Close' link to deactivate WPCC in the admin nag.
+* Enhancement: JSON API: Add User Nicename to the user data.
+* Bug Fix: Contact Form: Stopped using a short tag.
+* Bug Fix: Changed CSS selector to catch MP6 stylings.
+* Bug Fix: Dropped __FILE__ references in class.jetpack.php in favor of JETPACK__PLUGIN_DIR constant, now code that deactivates the plugin from the connect nag works again.
+* Bug Fix: Random Redirect: Add random-redirect to the plugins overriden list, in case someone is using Matt's Random Redirect plugin.
+* Bug Fix: Tiled Gallery: Revert r757178 relating to tiled gallery defaults.
+* Bug Fix: Return false, not zero, if $GLOBALS['content_width'] isn't defined.
+* Bug Fix: WPCC: Don't call wp_login_url() in the constructor -- if someone is running a custom login page, that can break things if their plugin runs get_permalink as a filter before init.
+* Bug Fix: Tiled Gallery: Add fallback if post_parent == 0 due to infinite_scroll_load_other_plugins_scripts.
+* Bug Fix: Custom CSS: Set the ACE gutter z-index to 1.
+* Bug Fix: Custom Post Types: Switch from wp_redirect() to wp_safe_redirect().
+* Bug Fix: Likes: Set overflow:hidden; on the likes adminbar item.
+* Bug Fix: Mobile Theme: Migrate where/when the custom header stuff is included.
+* Bug Fix: Slideshow Shortcode: Add a height of 410px.
+
+= 2.4.1 =
+Release Date: September 4, 2013
+
+* Enhancement: Don't auto-activate WPCC.
+
+= 2.4 =
+Release Date: August 30, 2013
+Release Post: http://jetpack.me/2013/09/04/jetpack-2-4-widget-visibility-and-wpcc-and-more/
+
+* Enhancement: WordPress.com Connect (WPCC): New Module.
+* Enhancement: Widget Visibility: New Module.
+* Enhancement: Shortcode: Addition of new Twitter Timeline shortcode.
+* Enhancement: Shortcode: Addition of new Presentation shortcode.
+* Enhancement: Shortcode: Addition of new Vine shortcode.
+* Enhancement: Custom Post Types: CPTs are available.
+* Enhancement: Subscriptions: Add 'jetpack_is_post_mailable' filter.
+* Enhancement: OpenGraph: Add Twitter Cards meta tags as well.
+* Enhancement: Custom CSS: Update lessc and scssc preprocessors to 0.4.0 and 0.0.7 respectively.
+* Enhancement: Omnisearch: Add Media results.
+* Enhancement: Likes: Use a protocol-agnostic iframe, instead of forced HTTPS.
+* Enhancement: Top Posts: Increase post limit.
+* Enhancement: Publicize: Updated JS and UI.
+* Enhancement: Photon: New filter to let site admins/owners enable photon for HTTPS urls.
+* Enhancement: New jetpack_get_available_modules filter.
+* Enhancement: Subscriptions: Antispam measures.
+* Bug Fix: Add inline style to keep plugins/themes from inadvertently hiding the Connect box.
+* Bug Fix: Custom CSS: Respect the new wp_revisions_to_keep filter.
+* Bug Fix: Photon: Only hook jetpack_photon_url into the filter if the user has Photon active.
+* Bug Fix: Heartbeat: Used wrong object, occasinally fatal-erroring out for the cron.
+* Bug Fix: Add an empty debug.php file to the /modules/ folder, to solve some update issues where it never got deleted.
+
+= 2.3.5 =
+Release Date: August 12, 2013
+
+* Enhancement: Added Path support to Publicize.
+
+= 2.3.4 =
+Release Date: August 6, 2013
+
+* Bug Fix: Correct when output occurs with CSV export for feedback.
+* Bug Fix: Tidy up the Heartbeat API.
+* Enhancement: User Agent: Improve detecting of bots.
+* Enhancement: Genericons: Make sure we're pulling the freshest version from genericons.com on each release.
+* Enhancement: JSON API: Open up replies/new endpoints so that users can comment on blogs that are not in their access token.
+* Enhancement: Photon: Apply to `get_post_gallery()` function as well.
+* Enhancement: Tiled Galleries: Add a default bottom margin to be more robust out of the box.
+* Translations: Adding in fresher translation files.
+* Deprecation: Removing the retinization code for 3.4, as it was included in WordPress trunk from 3.5 onwards.
+
+= 2.3.3 =
+Release Date: July 26, 2013
+
+* Bug Fix: We were inadvertently overwriting cron schedules with our Jetpack heartbeat. This should now be fixed.
+* Enhancement: New Facebook Sharing icons.
+* Enhancement: Minor update to the Minileven stylesheet.
+
+= 2.3.2 =
+Release Date: July 25, 2013
+
+* Bug Fix: Fixed an issue where Facebook Pages were not available when connecting a Publicize account.
+* Bug Fix: For some web hosts, fixed an issue where 'Jetpack ID' error would occur consistently on connecting to WordPress.com.
+* Enhancement: Adding some new stats and heartbeat checking to Jetpack.
+
+= 2.3.1 =
+Release Date: July 2, 2013
+
+* Enhancement: Social Links: Retooling the class for better consistency and performance behind the scenes.
+* Enhancement: Omnisearch: Make it easier to search Custom Post Types. No longer need to extend the class, if all you want is a basic display. Just call `new Jetpack_Omnisearch_Posts( 'cpt' );`
+* Enhancement: Sharing Buttons: LinkedIn: Use the official button's sharing link on the Jetpack implementation for a more consistent sharing experience and produce better results on LinkedIn's end.
+* Enhancement: Debug / Connection: Better logic in determining whether the server can use SSL to connect to WPCOM servers.
+* Enhancement: Sharing: Twitter: Calculate the size of the Tweet based on the short URL rather than the full URL size.
+* Enhancement: Debug: More readable and understandable messages.
+* Enhancement: Likes: Including some MP6 styles.
+* Enhancement: Comments: Add new core classes to comment form. See http://core.trac.wordpress.org/changeset/24525
+* Bug Fix: Omnisearch: Don't load everything initially, run the providers off admin_init, and then issue an action for folks to hook into.
+* Bug Fix: Omnisearch: Modify some child class functions to match the parent's parameters and avoid strict notices in newer versions of PHP.
+* Bug Fix: Omnisearch: Hide the search form in the module description if the current user can't use it.
+* Bug Fix: Comment Form: Use edit_pages, not edit_page (fixes glitch in previous beta, never publicly released).
+* Bug Fix: Twitter Timeline Widget: Additional testing of values and casting to default if they are nonconforming.
+* Bug Fix: Sharing: Pinterest: Make the button wider if there's a count to avoid overlapping with others.
+* Bug Fix: Post By Email: Change configuration_redirect to static.
+* Bug Fix: Likes: Don't call configuration_redirect as a static, do it as a method.
+* Bug Fix: Add some further security measures to module activation.
+
+= 2.3 =
+Release Date: June 19, 2013
+Release Post: http://jetpack.me/2013/06/19/jetpack-2-3/
+
+* Enhancement: Omnisearch: Search once, get results from everything! Omnisearch is a single search box that lets you search many different things
+* Enhancement: Debugger: this module helps you debug connection issues right from your dashboard, and contact the Jetpack support team if needed
+* Enhancement: Social Links: this module is a canonical source, based on Publicize, that themes can use to let users specify where social icons should link to
+* Enhancement: It’s now easier to find out if a module is active or note, thanks to the new Jetpack::is_module_active()
+* Enhancement: Contact Form: You are now able to customize the submit button text thanks to the submit_button_text parameter
+* Enhancement: Comments: We've added a filter to let users customize the Comment Reply label, and users can now also customize the prompt on the comment form again.
+* Enhancement: Mobile Theme: Add genericons.css and registering it so it’s easily accessible to other modules that may want it
+* Enhancement: Tiled Galleries: You can now customize the captions, thanks to the jetpack_slideshow_slide_caption filter
+* Enhancement: Widgets: Twitter Timeline: Add the noscrollbar option
+* Enhancement: Widgets: Facebook Like Box Widget: add a show_border attribute
+* Enhancement: Widgets: FB Like Box: let Jetpack users override the iframe background color set in an inline style attribute by using the jetpack_fb_likebox_bg filter
+* Bug Fix: Carousel: Fix a bug where double-clicking a gallery thumbnail broke the carousel functionality
+* Bug Fix: Comments: Change “must-log-in” to class from ID
+* Bug Fix: Contact Form: Make the Add Contact Form link a button, ala Add Media in core
+* Bug Fix: Contact Form: Fix encoding of field labels
+* Bug Fix: Contact Form: Remove references to missing images
+* Bug Fix: Fix 2 XSS vulnerabilities
+* Bug Fix: JSON API: Minor fixes for bbPress compatibility
+* Bug Fix: JSON API: Fix metadata bugs
+* Bug Fix: JSON API: Add a new hook that is fired when a post is posted using the API
+* Bug Fix: JSON API: Prefork/REST: update path normalizer to accept versions other than 1
+* Bug Fix: JSON API: Remove extra parenthesis in CSS
+* Bug Fix: Custom CSS: Move content width filters higher up so that they’re active for all users, not just logged-in admins.
+* Bug Fix: Custom CSS: All CSS properties that accept images as values need to be allowed to be declared multiple times so that cross-browser gradients work
+* Bug Fix: Infinite Scroll: Allow themes to define a custom function to render the IS footer
+* Bug Fix: Infinite Scroll: Fix up Twenty Thirteen styles for RTL and small viewports.
+* Bug Fix: Likes: Fix ‘Call to undefined function’
+* Bug Fix: Likes: Add scrolling no to iframe to make sure that like button in admin bar does not show scrollbars
+* Bug Fix: Likes: Remove setInterval( JetpackLikesWidgetQueueHandler, 250 ) call that was causing heavy CPU load
+* Bug Fix: Mobile Theme: Remove unused variable & function call
+* Bug Fix: Publicize: Fix LinkedIn profile URL generation
+* Bug Fix: Publicize: Better refresh handling for services such as LinkedIn and Facebook
+* Bug Fix: Shortcodes: Audio shortcode: Treat src as element 0. Fixes audio shortcodes created by wp_embed_register_handler when an audio url is on a line by itself
+* Bug Fix: Bandcamp: Updates to the Bandcamp shortcode
+* Bug Fix: Stats: Fix missing function get_editable_roles on non-admin page loads
+* Bug Fix: Widgets: Twitter Timeline: Fix HTML links in admin; set default values for width/height; change some of the sanitization functions
+* Bug Fix: Widgets: Top Posts Widget: Exclude attachments
+* Bug Fix: Widgets: Top Posts Widget: fix data validation for number of posts
+* Bug Fix: Fix PHP warnings non-static method called dynamically
+* Bug Fix: Fixed an issue in image extraction from HTML content
+* Bug Fix: Open Graph: Change default minimum size for og:image too 200×200
+* Note: The old Twitter widget was removed in favour of Twitter Timeline widget
+* Note: Add is_module_active() to make it easier to detect what is and what isn’t
+* Note: Compressing images via lossless methods
+* Note: Tidying up jetpack’s CSS
+* Note: Set the max DB version for our retina overrides that were meant to stop for WordPress 3.5
+* Note: Updating spin.js to the current version, and shifting to the canonical jquery.spin.js library
+* Note: Adding Jetpack_Options class, and abstracting out options functions to it
+
+= 2.2.5 =
+Release Date: May 1, 2013
+
+* Enhancement: Stats: Counting of registered users' views can now be enabled for specific roles
+* Bug Fix: Security tightening for metadata support in the REST API
+* Bug Fix: Update the method for checking Twitter Timeline widget_id and update coding standards
+* Bug Fix: Custom CSS: Allow the content width setting to be larger than the theme's content width
+* Bug Fix: Custom CSS: Fix possible missing argument warning.
+
+= 2.2.4 =
+Release Date: April 26, 2013
+
+* Bug Fix: JSON API compat file include was not assigning a variable correctly, thus throwing errors. This has been resolved.
+
+= 2.2.3 =
+Release Date: April 26, 2013
+
+* Enhancement: Comments - Add the reply-title H3 to the comment form so that themes or user CSS can style it
+* Enhancement: Custom CSS - Support for the CSS @viewport
+* Enhancement: JSON API - Support for i_like, is_following, and is_reblogged
+* Enhancement: JSON API: Custom Post Type Support
+* Enhancement: JSON API: Meta Data Support
+* Enhancement: JSON API: Bundled Support for bbPress
+* Enhancement: JSON API: Additions of following, reblog, and like status for post endpoints.
+* Enhancement: Shortcodes - Add Bandcamp shortcode
+* Enhancement: Tiled Galleries - Add code to get blog_id
+* Bug Fix: Carousel - Support relative image paths incase a plugin is filtering attachment URLs to be relative instead of absolute
+* Bug Fix: Carousel - Add likes widget to images / Respect comment settings for name/email
+* Bug Fix: Carousel - Make name and email optional if the setting in the admin area says they are
+* Bug Fix: Contact Form - Bug fixes, including a fix for WP-CLI
+* Bug Fix: Contact Form - Remove deprecated .live calls, delegate lazily to jQuery(document) since it's all in an iframe modal
+* Bug Fix: Contact Form - RTL styles
+* Bug Fix: Contact Form - Better handle MP6 icons
+* Bug Fix: Custom CSS - array_shift() took a variable by reference, so avoid passing it the result of a function
+* Bug Fix: Custom CSS - Allow case-insensitive CSS properties (<a href="http://wordpress.org/support/topic/two-issues-with-jetpack-css-module?replies=9">ref</a>)
+* Bug Fix: Infinite Scroll - Maintain main query's `post__not_in` values when querying posts for IS
+* Bug Fix: Infinite Scroll - Ensure that IS's `pre_get_posts` method isn't applied in the admin. Also fixes an incorrect use of `add_filter()` where `add_action()` was meant. Fixes #1696-plugins
+* Bug Fix: Infinite Scroll - CSS update - IS footer was too large in Firefox
+* Bug Fix: Infinite Scroll - Add bundled support for Twenty Thirteen default theme
+* Bug Fix: Infinite Scroll - Include posts table's prefix when modifying the SQL WordPress generates to retrieve posts for Infinite Scroll
+* Bug Fix: JSON API - Use wp_set_comment_status to change the comment status, to make sure actions are run where needed
+* Bug Fix: Likes - Update style and logic for matching id's
+* Bug Fix: Mobile Theme - Ensure that <code>minileven_actual_current_theme()</code> is child-theme compatible + other updates
+* Bug Fix: Mobile Theme - Update method for finding currently active theme.
+* Bug Fix: Notifications - Remove the postmessage.js enqueue since this feature solely supports native postMessage
+* Bug Fix: Notifications - Clean up script enqueues and use core versions of underscore and backbone on wpcom as fallbacks
+* Bug Fix: Notifications - Enqueue v2 scripts and style
+* Bug Fix: Notifications - Prefix module-specific scripts and style to prevent collision
+* Bug Fix: Notifications - Include lang and dir attributes on #wpnt-notes-panel so the notifications iframe can use these to display correctly
+* Bug Fix: Open Graph: Use the profile OG type instead of author. Add tags for first/last names
+* Bug Fix: Publicize - Remove the Yahoo! service because they stopped supporting that API entirely
+* Bug Fix: Publicize - fix fatal errors caused by using a method on a non-object. Props @ipstenu
+* Bug Fix: Sharing - Adding 2x graphics for Pocket sharing service
+* Bug Fix: Sharing - Bug fixes, and a new filter
+* Bug Fix: Shortcodes - Audio: make sure that the Jetpack audion shortcode does not override the 3.6 core audio shortcode. Also, we need to filter the old Jetpack-style shortcode to properly set the params for the Core audio shortcode.
+* Bug Fix: Shortcodes - Audio: Re-enable the flash player
+* Bug Fix: Shortcodes - Slideshow: RTL styling update
+* Bug Fix: Tiled Galleries - Fix IE8 display bug where it doesn't honor inline CSS for width on images
+* Bug Fix: Tiled Galleries - Remove depreacted hover call, use mouseenter mouseleave instead
+* Enhancement: Twitter Timeline Widget: New JavaScript based widget. Old one will discontinue May 7th.
+
+= 2.2.2 =
+Release Date: April 5, 2013
+
+* Enhancement: Mobile Theme: Add controls for custom CSS.
+* Enhancement: Sharing: Add Pocket to the available services.
+* Bug Fix: Custom CSS: Update the method for generating content width setting.
+* Bug Fix: JSON API: Security updates.
+* Bug Fix: Likes: Add settings for email notifications and misc style updates.
+* Bug Fix: Notifications: Add the post types to sync after init.
+* Bug Fix: Publicize: RTL styling.
+* Bug Fix: Shortcodes: security fixes and function prefixing.
+* Bug Fix: Widgets: Update wording on the Top Posts widget for clarity.
+* Bug Fix: Jetpack Post Images security fixes.
+
+= 2.2.1 =
+Release Date: March 28, 2013
+
+* Enhancement: Development Mode: Define the `JETPACK_DEV_DEBUG` constant to `true` to enable an offline mode for localhost development. Only modules that don't require a WordPress.com connection can be enabled in this mode.
+* Enhancement: Likes: Added the number of likes to the wp-admin/edit.php screens.
+* Enhancement: Mobile Theme - design refresh
+* Enhancement: Shortcodes - Add a filter to the shortcode loading section so that a plugin can override what Jetpack loads for shortcodes
+* Enhancement: Widgets - Filter Jetpack's widgets so that a plugin can control which widgets get loaded
+* Bug Fix: Comments - Add in a wrapper div with id='commentform'
+* Bug Fix: Contact Form - Added date field with datepicker
+* Bug Fix: Contact Form - Allowed non-text widgets to use contact forms by running their output through the widget_text filter
+* Bug Fix: Custom CSS - Allowing color values to be defined multiple times
+* Bug Fix: Custom CSS - Dynamically loading the correct CSS/LESS/SCSS mode for the CSS editor if the user changes the preprocessor
+* Bug Fix: Custom CSS - Using the unminified worker CSS
+* Bug Fix: Custom CSS - Added rule: reminder about using .custom-background on body selector
+* Bug Fix: Custom CSS - Modified rule: Removed portion of overqualification rule that deems 'a.foo' overqualified if there are no other 'a' rules
+* Bug Fix: Custom CSS - Ensuring that the editor and the textarea behind it are using the same font so that the cursor appears in the correct location
+* Bug Fix: Custom CSS - Fix a bug that caused some sites to always ignore the base theme's CSS when in preview mode
+* Bug Fix: Custom CSS - Run stripslashes() before passing CSS to save()
+* Bug Fix: Custom CSS - Moving inline CSS and JavaScript into external files
+* Bug Fix: Infinite Scroll - Use the `is_main_query()` function and query method
+* Bug Fix: Infinite Scroll - Remove unused styles and an unnecessary margin setting
+* Bug Fix: Infinite Scroll - Allow the query used with IS to be filtered, so IS can be applied to a new query within a page template
+* Bug Fix: JSON API - Catch the 'User cannot view password protected post' error from can_view_post and bypass it for likes actions if the user has the password entered
+* Bug Fix: Likes - Bump cache buster, Don't show likes for password protected posts
+* Bug Fix: Notifications - Remove a redundant span closing tag
+* Bug Fix: Photon - If an image is already served from Photon but the anchor tag that surrounds it hasn't had its `href` value rewritten to use Photon, do so. Accounts for WP galleries whose individual items are linked to the original image files
+* Bug Fix: Publicize - Allows GLOBAL_CAP to be filtered, Adds an AYS to connection deletion, UI improvement for MP6 (and in general)
+* Bug Fix: Sharedaddy - Fire the sharing redirect earlier for increased plugin compatibility
+* Bug Fix: Stats - Move the display:none CSS output to wp_head so it gets written inside the HEAD tag if the option to hide the stats smilie is active
+* Bug Fix: Tiled Galleries - A more descriptive name for the default gallery type
+* Bug Fix: Tiled Galleries - Hide the Columns setting for gallery types that don't support it
+* Bug Fix: Run the admin_menu action late so that plugins hooking into it get a chance to run
+* Bug Fix: Prophylactic strict equality check
+
+= 2.2 =
+Release Date: February 26, 2013
+Release Post: http://jetpack.me/2013/02/26/jetpack-2-2-likes/
+
+* Enhancement: Likes: Allow your readers to show their appreciation of your posts.
+* Enhancement: Shortcodes: SoundCloud: Update to version 2.3 of the SoundCloud plugin (HTML5 default player, various fixes).
+* Enhancement: Shortcodes: Subscriptions: Add a shortcode to enable placement of a subscription signup form in a post or page.
+* Enhancement: Sharedaddy: Allow selecting multiple images from a post using the Pinterest share button.
+* Enhancement: Contact Form: Allow feedbacks to be marked spam in bulk.
+* Enhancement: Widgets: Readmill Widget: Give your visitors a link to send your book to their Readmill library.
+* Note: Notifications: Discontinue support for Internet Explorer 7 and below.
+* Bug Fix: JSON API: Fix authorization problems that some users were experiencing.
+* Bug Fix: JSON API: Sticky posts were not being sorted correctly in /posts requests.
+* Bug Fix: Stats: sync stats_options so server has roles array needed for view_stats cap check.
+* Bug Fix: Infinite Scroll: Display improvements.
+* Bug Fix: Infinite Scroll: WordPress compatibility fixes.
+* Bug Fix: Photon: Only rewrite iamge urls if the URL is compatible with Photon.
+* Bug Fix: Photon: Account for registered image sizes with one or more dimesions set to zero.
+* Bug Fix: Subscriptions: Make HTML markup more valid.
+* Bug Fix: Subscriptions: Fixed notices displayed in debug mode.
+* Bug Fix: Custom CSS: CSS warnings and errors should now work in environments where JavaScript is concatenated or otherwise modified before being served.
+* Bug Fix: Hovercards: WordPress compatibility fixes.
+* Bug Fix: Improved image handling for the Sharing and Publicize modules.
+* Bug Fix: Carousel: Display and Scrollbar fixes.
+* Bug Fix: Tiled Galleries: Restrict images in tiled galleries from being set larger than their containers.
+* Bug Fix: Widgets: Gravatar Profile: CSS fixes.
+* Bug Fix: Publicize: Strip HTML comments from the data we send to the third party services.
+* Bug Fix: Notifications: Dropped support for IE7 and below in the notifications menu.
+* Bug Fix: Custom CSS Editor: Allow custom themes to save CSS more easily.
+* Bug Fix: Infinite Scroll: Waits until the DOM is ready before loading the scrolling code.
+* Bug Fix: Mobile Theme: If the user has disabled the custom header text color, show the default black header text color.
+* Bug Fix: Mobile Theme: Fix for the "View Full Site" link.
+* Bug Fix: Mobile Theme: Use a filter to modify the output of wp_title().
+* Bug Fix: Publicize: Twitter: Re-enable character count turning red when more than 140 characters are typed.
+
+= 2.1.2 =
+Release Date: February 5, 2013
+
+* Enhancement: Infinite Scroll: Introduce filters for Infinite Scroll.
+* Enhancement: Shortcodes: TED shortcode.
+* Bug Fix: Carousel: Make sure to use large image sizes.
+* Bug Fix: Carousel: Clicking the back button in your browser after exiting a carousel gallery brings you back to the gallery.
+* Bug Fix: Carousel: Fix a scrollbar issue.
+* Bug Fix: Comments: Move the get_avatar() function out of the base class.
+* Bug Fix: Contact Form: Prevent the form from displaying i18n characters.
+* Bug Fix: Contact Form: Remove the !important CSS rule.
+* Bug Fix: Infinite Scroll: Main query arguments are not respected when using default permalink.
+* Bug Fix: JSON API: Trap 'wp_die' for new comments and image uploads.
+* Bug Fix: JSON API: Use a better array key for the user_ID.
+* Bug Fix: JSON API: Make the class instantiable only once, but multi-use.
+* Bug Fix: JSON API: Fix lookup of pages by page slug.
+* Bug Fix: JSON API: Updates for post likes.
+* Bug Fix: Mobile Theme: Remove Android download link for BB10 and Playbook.
+* Bug Fix: Open Graph: Stop using Loop functions to get post data for meta tags.
+* Bug Fix: Photon: Suppress and check for warnings when pasing_url and using it.
+* Bug Fix: Photon: Ensure full image size can be used.
+* Bug Fix: Photon: Resolve Photon / YouTube embed conflict.
+* Bug Fix: Photon: Fix dimension parsing from URLs.
+* Bug Fix: Photon: Make sure that width/height atts are greater than zero.
+* Bug Fix: Sharedaddy: Layout fixes for share buttons.
+* Bug Fix: Sharedaddy: Always send Facebook a language locale.
+* Bug Fix: Sharedaddy: Don't look up share counts for empty URLs.
+* Bug Fix: Shortcodes: Ensure that images don't overflow their containers in the slideshow shortcode.
+* Bug Fix: Shortcodes: only enqueue jquery if archive supports Infinite Scroll in the Audio Shortcode.
+* Bug Fix: Tiled Galleries: Use a more specific class for gallery item size to avoid conflicts.
+* Bug Fix: Tiled Galleries: Fixing scrolling issue when tapping on a Tiled Gallery on Android.
+* Bug Fix: Widgets: Gravatar profile widget typo.
+* Bug Fix: Widgets: Add (Jetpack) to widget titles.
+* Bug Fix: Widgets: Twitter wasn't wrapping links in the t.co shortener.
+* Bug Fix: Widgets: Facebook Likebox updates to handling the language locale.
+* Bug Fix: Widgets: Top Posts: Fixed a WP_DEBUG notice.
+* Bug Fix: Widgets: Gravatar Profile Widget: transient names must be less than 45 characters long.
+* Bug Fix: typo in delete_post_action function.
+* Bug Fix: Load rendered LaTeX image on same protocol as its page.
+
+
+= 2.1.1 =
+Release Date: January 5, 2013
+
+* Bug Fix: Fix for an error appearing for blogs updating from Jetpack 1.9.2 or earlier to 2.1.
+
+= 2.1 =
+Release Date: January 4, 2013
+Release Post: http://jetpack.me/2013/01/04/galleries/
+
+* Enhancement: Tiled Galleries: Show off your photos with cool mosaic galleries.
+* Enhancement: Slideshow gallery type: Display any gallery as a slideshow.
+* Enhancement: Custom CSS: Allow zoom property.
+* Enhancement: Stats: Show WordPress.com subscribers in stats.
+* Bug Fix: Fix errors shown after connecting Jetpack to WordPress.com.
+* Bug Fix: Photon: Fix bug causing errors to be shown in some posts.
+* Bug Fix: Photon: Convert all images in posts when Photon is active.
+* Bug Fix: Infinite Scroll: Improved compatibility with the other modules.
+* Bug Fix: Custom CSS: Updated editor to fix missing file errors.
+* Bug Fix: Publicize: Don't show the Facebook profile option if this is a Page-only account.
+* Bug Fix: Photon: A fix for photos appearing shrunken if they didn't load quickly enough.
+* Bug Fix: Sharing: A compatibility fix for posts that only have partial featured image data.
+* Bug Fix: Publicize/Sharing: For sites without a static homepage, don't set the OpenGraph url value to the first post permalink.
+* Bug Fix: Mobile Theme: Better compatibility with the customizer on mobile devices.
+* Bug Fix: Sharing: Don't show sharing options on front page if that option is turned off.
+* Bug Fix: Contact Form: Fix PHP warning shown when adding a Contact Form in WordPress 3.5.
+* Bug Fix: Photon: Handle images with relative paths.
+* Bug Fix: Contact Form: Fix compatibility with the Shortcode Embeds module.
+
+
+= 2.0.4 =
+Release Date: December 14, 2012
+
+* Bug Fix: Open Graph: Correct a bug that prevents Jetpack from being activated if the SharePress plugin isn't installed.
+
+= 2.0.3 =
+Release Date: December 14, 2012
+
+* Enhancement: Infinite Scroll: support [VideoPress](http://wordpress.org/extend/plugins/video/) plugin.
+* Enhancement: Photon: Apply to all images retrieved from the Media Library.
+* Enhancement: Photon: Retina image support.
+* Enhancement: Custom CSS: Refined editor interface.
+* Enhancement: Custom CSS: Support [Sass](http://sass-lang.com/) and [LESS](http://lesscss.org/) with built-in preprocessors.
+* Enhancement: Open Graph: Better checks for other plugins that may be loading Open Graph tags to prevent Jetpack from doubling meta tag output.
+* Bug Fix: Infinite Scroll: Respect relative image dimensions.
+* Bug Fix: Photon: Detect custom-cropped images and use those with Photon, rather than trying to use the original.
+* Bug Fix: Custom CSS: Fix for bug preventing @import from working with url()-style URLs.
+
+= 2.0.2 =
+Release Date: November 21, 2012
+
+* Bug Fix: Remove an erroneous PHP short open tag with the full tag to correct fatal errors under certain PHP configurations.
+
+= 2.0.1 =
+Release Date: November 21, 2012
+
+* Enhancement: Photon: Support for the [Lazy Load](http://wordpress.org/extend/plugins/lazy-load/) plugin.
+* Bug Fix: Photon: Fix warped images with un- or under-specified dimensions.
+* Bug Fix: Photon: Fix warped images with pre-photonized URLs; don't try to photonize them twice.
+* Bug Fix: Infinite Scroll: Check a child theme's parent theme for infinite scroll support.
+* Bug Fix: Infinite Scroll: Correct a bug with archives that resulted in posts appearing on archives that they didn't belong on.
+* Bug Fix: Publicize: Send the correct shortlink to Twitter (et al.) if your site uses a shortener other than wp.me.
+* Bug Fix: Sharing: Improved theme compatibility for the Google+ button.
+* Bug Fix: Notifications: Use locally-installed Javascript libraries if available.
+
+= 2.0 =
+Release Date: November 8, 2012
+Release Post: http://jetpack.me/2012/11/08/jetpack-2-0-publicize-to-facebook-twitter-linkedin-tumblr-post-by-email-photon-infinite-scroll/
+
+* Enhancement: Publicize: Connect your site to popular social networks and automatically share new posts with your friends.
+* Enhancement: Post By Email: Publish posts to your blog directly from your personal email account.
+* Enhancement: Photon: Images served through the global WordPress.com cloud.
+* Enhancement: Infinite Scroll: Better/faster browsing by pulling the next set of posts into view automatically when the reader approaches the bottom of the page.
+* Enhancement: Open Graph: Provides more detailed information about your posts to social networks.
+* Enhancement: JSON API: New parameters for creating and viewing posts.
+* Enhancement: Improved compatibility for the upcoming WordPress 3.5.
+* Bug Fix: Sharing: When you set your sharing buttons to use icon, text, or icon + text mode, the Google+ button will display accordingly.
+* Bug Fix: Gravatar Profile Widget: Allow basic HTML to be displayed.
+* Bug Fix: Twitter Widget: Error handling fixes.
+* Bug Fix: Sharing: Improved theme compatibility
+* Bug Fix: JSON API: Fixed error when creating some posts in some versions of PHP.
+
+= 1.9.2 =
+Release Date: October 29, 2012
+
+* Bug Fix: Only sync options on upgrade once.
+
+= 1.9.1 =
+* Enhancement: Notifications feature is enabled for logged-out users when the module is active & the toolbar is shown by another plugin.
+* Bug Fix: Use proper CDN addresses to avoid SSL cert issues.
+* Bug Fix: Prioritize syncing comments over deleting comments on WordPress.com. Fixes comment notifications marked as spam appearing to be trashed.
+
+= 1.9 =
+Release Date: October 26, 2012
+Release Post: http://jetpack.me/2012/10/26/jetpack-1-9-toolbar-notifications/
+
+* Enhancement: Notifications: Display Notifications in the toolbar and support reply/moderation of comment notifications.
+* Enhancement: Mobile Push Notifications: Added support for mobile push notifications of new comments for users that linked their accounts to WordPress.com accounts.
+* Enhancement: JSON API: Allows applications to send API requests via WordPress.com (see [the docs](http://developer.wordpress.com/docs/api/) )
+* Enhancement: Sync: Modules (that require the data) sync full Post/Comment to ensure consistent data on WP.com (eg Stats)
+* Enhancement: Sync: Improve syncing of site options to WP.com
+* Enhancement: Sync: Sync attachment parents to WP.com
+* Enhancement: Sync: Add signing of WP.com user ids for Jetpack Comments
+* Enhancement: Sync: Mark and obfuscate private posts.
+* Enhancement: Privacy: Default disable enhanced-distribution and json-api modules if site appears to be private.
+* Enhancement: Custom CSS: allow applying Custom CSS to mobile theme.
+* Enhancement: Sharing: On HTTPS pageloads, load as much of the sharing embeds as possible from HTTPS URLs.
+* Enhancement: Contact Form: Overhaul of the contact form code to fix incompatibilites with other plugins.
+* Bug Fix: Only allow users with manage_options permission to enable/disable modules
+* Bug Fix: Custom CSS: allow '/' in media query units; e.g. (-o-min-device-pixel-ratio: 3/2)
+* Bug Fix: Custom CSS: leave comments alone in CSS when editing but minify on the frontend
+* Bug Fix: Sharing: Keep "more" pane open so Google+ Button isn't obscured
+* Bug Fix: Carousel: Make sure the original size is used, even when it is exceedingly large.
+* Bug Fix: Exclude iPad from Twitter on iPhone mobile browsing
+* Bug Fix: Sync: On .org user role changes synchronize the change to .com
+* Bug Fix: Contact Form: Fix a bug where some web hosts would reject mail from the contact form due to email address spoofing.
+
+= 1.8.3 =
+Release Date: October 23, 2012
+
+* Bug Fix: Subscriptions: Fix a bug where subscriptions were not being sent from the blog.
+* Bug Fix: Twitter: Fix a bug where the Twitter username was being saved as blank.
+* Bug Fix: Fix a bug where Contact Form notification emails were not being sent.
+
+= 1.8.2 =
+Release Date: October 4, 2012
+
+* Bug Fix: Subscriptions: Fix a bug where subscriptions were not sent for posts and comments written by some authors.
+* Bug Fix: Widgets: Fix CSS that was uglifying some themes (like P2).
+* Bug Fix: Widgets: Improve Top Posts and Pages styling.
+* Bug Fix: Custom CSS: Make the default "Welcome" message translatable.
+* Bug Fix: Fix Lithuanian translation.
+
+= 1.8.1 =
+Release Date: September 28, 2012
+
+* Bug Fix: Stats: Fixed a bug preventing some users from viewing stats.
+* Bug Fix: Mobile Theme: Fixed some disabled toolbar buttons.
+* Bug Fix: Top Posts widget: Fixed a bug preventing the usage of the Top Posts widget.
+* Bug Fix: Mobile Theme: Fixed a bug that broke some sites when the Subscriptions module was not enabled and the Mobile Theme module was enabled.
+* Bug Fix: Mobile Theme: Made mobile app promos in the Mobile Theme footer opt-in.
+* Bug Fix: Twitter Widget: A fix to prevent malware warnings.
+* Bug Fix: Mobile Theme: Fixed a bug that caused errors for some users with custom header images.
+
+= 1.8 =
+Release Date: September 27, 2012
+Release Post: http://jetpack.me/2012/09/27/jetpack-1-8-mobile-theme/
+
+* Enhancement: Mobile Theme: Automatically serve a slimmed down version of your site to users on mobile devices.
+* Enhancement: Multiuser: Allow multiple users to link their accounts to WordPress.com accounts.
+* Enhancement: Custom CSS: Added support for object-fit, object-position, transition, and filter properties.
+* Enhancement: Twitter Widget: Added Follow button
+* Enhancement: Widgets: Added Top Posts and Pages widget
+* Enhancement: Mobile Push Notifications: Added support for mobile push notifications on new comments.
+* Enhancement: VideoPress: Shortcodes now support the HD option, for default HD playback.
+* Bug Fix: Twitter Widget: Fixed tweet permalinks in the Twitter widget
+* Bug Fix: Custom CSS: @import rules and external images are no longer stripped out of custom CSS
+* Bug Fix: Custom CSS: Fixed warnings and notices displayed in debug mode
+* Bug Fix: Sharing: Fixed double-encoding of image URLs
+* Bug Fix: Sharing: Fix Google +1 button HTML validation issues (again :))
+* Bug Fix: Gravatar Profile Widget: Reduce size of header margins
+
+= 1.7 =
+Release Date: August 23, 2012
+Release Post: http://jetpack.me/2012/08/23/jetpack-1-7-custom-css/
+
+* Enhancement: CSS Editor: Customize your site's design without modifying your theme.
+* Enhancement: Comments: Submit the comment within the iframe. No more full page load to jetpack.wordpress.com.
+* Enhancement: Sharing: Share counts for Twitter, Facebook, LinkedIn
+* Enhancement: Sharing: Improve styling
+* Enhancement: Sharing: Add support for ReCaptcha
+* Enhancement: Sharing: Better extensability through filters
+* Enhancement: Widgets: Twitter: Attempt to reduce errors by storing a long lasting copy of the data. Thanks, kareldonk :)
+* Regression Fix: Sharing: Properly store and display the sharing label option's default value.
+* Bug Fix: Contact Form: remove worse-than-useless nonce.
+* Bug Fix: Subscriptions: remove worse-than-useless nonce.
+* Bug Fix: Sharing: Don't show sharing buttons twice on attachment pages.
+* Bug Fix: Sharing: Increase width of Spanish Like button for Facebook.
+* Bug Fix: Sharing: Use the correct URL to the throbber.
+* Bug Fix: Stats: Fix notice about undefined variable $alt
+* Bug Fix: Subscriptions: Make Subscriptions module obey the settings of the Settngs -> Discussion checkboxes for Follow Blog/Comments
+* Bug Fix: Shortcodes: VideoPress: Compatibility with the latest version of VideoPress
+* Bug Fix: Shortcodes: Audio: Include JS File for HTML5 audio player
+* Bug Fix: Hovercards: Improve cache handling.
+* Bug Fix: Widgets: Gravatar Profle: Correctly display service icons in edge cases.
+* Bug Fix: Widgets: Gravatar Profle: Prevent ugly "flash" of too-large image when page first loads on some sites
+* Bug Fix: Carousel: CSS Compatibility with more themes.
+
+= 1.6.1 =
+Release Date: August 4, 2012
+
+* Bug Fix: Prevent Fatal error under certain conditions in sharing module
+* Bug Fix: Add cachebuster to sharing.css
+* Bug Fix: Disable via for Twitter until more robust code is in place
+
+= 1.6 =
+Release Date: August 2, 2012
+Release Post: http://jetpack.me/2012/08/02/jetpack-1-6-retina-and-pinterest/
+
+* Enhancement: Carousel: Better image resolution selection based on available width/height.
+* Enhancement: Carousel: Load image caption, metadata, comments, et alii when a slide is clicked to switch to instead of waiting.
+* Enhancement: Carousel: Added a "Comment" button and handling to scroll to and focus on comment textarea.
+* Enhancement: Widgets: Facebook Likebox now supports a height parameter and a better width parameter.
+* Enhancement: Widgets: Better feedback when widgets are not set up properly.
+* Enhancement: Shortcodes: Google Maps shortcode now supports percentages in the width.
+* Enhancement: Shortcodes: Update Polldaddy shortcode for more efficient Javascript libraries.
+* Enhancement: Shortcodes: Youtube shortcode now has playlist support.
+* Enhancement: Add Gravatar Profile widget.
+* Enhancement: Update Sharedaddy to latest version, including Pinterest support.
+* Enhancement: Retinize Jetpack and much of WordPress.
+* Bug Fix: Shortcodes: Fix Audio shortcode color parameter and rename encoding function.
+* Bug Fix: Shortcodes: Don't output HTML 5 version of the Audio shortcode because of a bug with Google Reader.
+* Bug Fix: Jetpack Comments: Don't overlead the addComments object if it doesn't exist. Fixes spacing issue with comment form.
+* Bug Fix: Contact Form: If send_to_editor() exists, use it. Fixes an IE9 text area issue.
+
+= 1.5 =
+Release Date: July 31, 2012
+
+* Enhancement: Add Gallery Carousel feature
+* Note: the Carousel module bundles http://fgnass.github.com/spin.js/ (MIT license)
+
+= 1.4.2 =
+Release Date: June 20, 2012
+
+* Bug Fix: Jetpack Comments: Add alternative Javascript event listener for Internet 8 users.
+* Enhancement: Remove more PHP 4 backwards-compatible code (WordPress andJetpack only support PHP 5).
+* Enhancement: Remove more WordPress 3.1 and under backwards-compatible code.
+
+= 1.4.1 =
+Release Date: June 15, 2012
+
+* Bug Fix: Jetpack Comments / Subscriptions: Add checkboxes and logic control for the Subscription checkboxes.
+
+= 1.4 =
+Release Date: June 14, 2012
+
+* Enhancement: Add Jetpack Comments feature.
+* Bug Fix: Sharing: Make the sharing_label translatable.
+* Bug Fix: Sharing: Fixed the file type on the LinkedIn graphic.
+* Bug Fix: Sharing: Fixes for the Faceboox Like button language locales.
+* Bug Fix: Sharing: Updates for the "more" button when used with touch screen devices.
+* Bug Fix: Sharing: Properly scope the More button so that multiple More buttons on a page behave properly.
+* Bug Fix: Shortcodes: Update the YouTube and Audio shortcodes to better handle spaces in the URLs.
+* Bug Fix: Shortcodes: Make the YouTube shortcode respect embed settings in Settings -> Media when appropriate.
+* Bug Fix: Shortcodes: Removed the Slide.com shortcode; Slide.com no longer exists.
+* Bug Fix: Shortcodes: Match both http and https links in the [googlemaps] shortcode.
+* Bug Fix: After the Deadline: Code clean up and removal of inconsistencies.
+
+= 1.3.4 =
+Release Date: May 24, 2012
+
+* Bug Fix: Revert changes to the top level menu that are causing problems.
+
+= 1.3.3 =
+Release Date: May 22, 2012
+
+* Bug Fix: Fix notices caused by last update
+
+= 1.3.2 =
+Release Date: May 22, 2012
+
+* Bug Fix: Fix Jetpack menu so that Akismet and VaultPress submenus show up.
+
+= 1.3.1 =
+Release Date: May 22, 2012
+
+* Enhancement: Add a new widget, the Facebook Likebox
+* Bug Fix: Sharing: Sharing buttons can now be used on custom post types.
+* Bug Fix: Contact Forms: Make Contact Forms widget shortcode less aggressive about the shortcodes it converts.
+* Bug Fix: Ensure contact forms are parsed correctly in text widgets.
+* Bug Fix: Connection notices now only appear on the Dashboard and plugin page.
+* Bug Fix: Connection notices are now dismissable if Jetpack is not network activated.
+* Bug Fix: Subscriptions: Fix an issue that was causing errors with new BuddyPress forum posts.
+
+= 1.3 =
+Release Date: April 25, 2012
+Release Post: http://jetpack.me/2012/04/24/jetpack-1-3-released-contact-forms/
+
+* Enhancement: Add Contact Forms feature. Formerly Grunion Contact Forms.
+* Bug Fix: Tweak YouTube autoembedder to catch more YouTube URLs.
+* Bug Fix: Correctly load the Sharing CSS files.
+
+= 1.2.4 =
+Release Date: April 6, 2012
+
+* Bug Fix: Fix rare bug with static front pages
+
+= 1.2.3 =
+Release Date: April 5, 2012
+
+* Enhancement: Twitter Widget: Expand t.co URLs
+* Bug Fix: Various PHP Notices.
+* Bug Fix: WordPress Deprecated `add_contextual_help()` notices
+* Bug Fix: Don't display unimportant DB errors when processing Jetpack nonces
+* Bug Fix: Correctly sync data during certain MultiSite cases.
+* Bug Fix: Stats: Allow sparkline img to load even when there is a DB upgrade.
+* Bug Fix: Stats: Replace "loading title" with post title regardless of type and status.
+* Bug Fix: Stats: Avoid edge case infinite redirect for `show_on_front=page` sites where the `home_url()` conatins uppercase letters.
+* Bug Fix: Subscriptions: Don't send subscriptions if the feature is turned off in Jetpack.
+* Bug Fix: Subscriptions: Fix pagination of subscribers.
+* Bug Fix: Subscriptions: Sync data about categories/tags as well to improve subscription emails.
+* Bug Fix: Subscriptions: Better styling for the subscription success message.
+* Bug Fix: Shortcodes: Support for multiple Google Maps in one post. Support for all Google Maps URLs.
+* Bug Fix: Shortcodes: Improved support for youtu.be URLs
+* Bug Fix: Shortcodes: Improved Vimeo embeds.
+* Bug Fix: Sharing: Switch to the 20px version of Google's +1 button for consistency.
+* Bug Fix: Sharing: Fix Google +1 button HTML validation issues.
+* Bug Fix: Sharing: Disable sharing buttons during preview.
+* Bug Fix: Spelling and Grammar: Properly handle proofreading settings.
+* Bug Fix: Spelling and Grammar: Don't prevent post save when proofreading service is unavailable.
+
+= 1.2.2 =
+Release Date: December 6, 2011
+
+* Bug Fix: Ensure expected modules get reactivated correctly during upgrade.
+* Bug Fix: Don't send subscription request during spam comment submission.
+* Bug Fix: Increased theme compatibility for subscriptions.
+* Bug Fix: Remove reference to unused background image.
+
+= 1.2.1 =
+Release Date: November 18, 2011
+
+* Bug Fix: Ensure Site Stats menu item is accessible.
+* Bug Fix: Fixed errors displayed during some upgrades.
+* Bug Fix: Fix inaccurate new modules "bubble" in menu for some upgrades.
+* Bug Fix: Fix VaultPress detection.
+* Bug Fix: Fix link to http://jetpack.me/faq/
+
+= 1.2 =
+Release Date: November 17, 2011
+Release Post: http://jetpack.me/2011/11/17/announcing-jetpack-1-2/
+
+* Enhancement: Add Subscriptions: Subscribe to site's posts and posts' comments.
+* Enhancement: Add Google Maps shortcode.
+* Enhancement: Add Image Widget.
+* Enhancement: Add RSS Links Widget.
+* Enhancement: Stats: More responsive stats dashboard.
+* Enhancement: Shortcodes: Google Maps, VideoPress
+* Enhancement: Sharing: Google+, LinkedIn
+* Enhancement: Enhanced Distribution: Added Jetpack blogs to http://en.wordpress.com/firehose/
+* Bug Fix: Spelling and Grammar: WordPress 3.3 compatibility.
+* Bug Fix: Translatable module names/descriptinos.
+* Bug Fix: Correctly detect host's ability to make outgoing HTTPS requests.
+
+= 1.1.3 =
+Release Date: July 19, 2011
+
+* Bug Fix: Increase compatibility with WordPress 3.2's new `wp_remote_request()` API.
+* Bug Fix: Increase compatibility with Admin Bar.
+* Bug Fix: Stats: Improved performance when creating new posts.
+* Bug Fix: Twitter Widget: Fix PHP Notice.
+* Bug Fix: Sharedaddy: Fix PHP Warning.
+* Enhancement: AtD: Add spellcheck button to Distraction Free Writing screen.
+* Translations: Added: Bosnian, Danish, German, Finnish, Galician, Croatian, Indonesian, Macedonian, Norwegian (Bokmål), Russian, Slovak, Serbian, Swedish
+* Translations: Updated: Spanish, French, Italian, Japanese, Brazilian Portuguese, Portuguese
+
+= 1.1.2 =
+Release Date: July 6, 2011
+
+* Bug Fix: Note, store, and keep fresh the time difference between the Jetpack site's host and the Jetpack servers at WordPress.com. Should fix all "timestamp is too old" errors.
+* Bug Fix: Improve experience on hosts capable of making outgoing HTTPS requests but incapable of verifying SSL certificates. Fixes some "register_http_request_failed", "error setting certificate verify locations", and "error:14090086:lib(20):func(144):reason(134)" errors.
+* Bug Fix: Better fallback when WordPress.com is experiencing problems.
+* Bug Fix: It's Jetpack, not JetPack :)
+* Bug Fix: Remove PHP Warnings/Notices.
+* Bug Fix: AtD: JS based XSS bug. Props markjaquith.
+* Bug Fix: AtD: Prevent stored configuration options from becoming corrupted.
+* Bug Fix: Stats: Prevent missing old stats for some blogs.
+* Bug Fix: Twitter Widget: Fix formatting of dates/times in PHP4.
+* Bug Fix: Twitter Widget: Cache the response from Twitter to prevent "Twitter did not respond. Please wait a few minutes and refresh this page." errors.
+* Enhancement: Slightly improved RTL experience. Jetpack 1.2 should include a much better fix.
+* Enhancement: Sharedaddy: Improve localization for Facebook Like button.
+* Enhancement: Gravatar Hovercards: Improved experience for Windows browsers.
+
+= 1.1.1 =
+Release Date: March 19, 2011
+* Bug Fix: Improve experience on hosts capable of making outgoing HTTPS requests but incapable of verifying SSL certificates. Fixes most "Your Jetpack has a glitch. Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)." errors.
+* Bug Fix: Sharedaddy: Fatal error under PHP4. Disable on PHP4 hosts.
+* Bug Fix: Stats: Fatal error under PHP4. Rewrite to be PHP4 compatible.
+* Bug Fix: Stats: Fatal error on some sites modifying/removing core WordPress user roles. Add sanity check.
+* Bug Fix: Stats: Replace debug output with error message in dashboard widget.
+* Bug Fix: Stats: Rework hook priorities so that stats views are always counted even if a plugin (such as Paginated Comments) bails early on template_redirect.
+* Bug Fix: Identify the module that connot be activated to fatal error during single module activation.
+* Bug Fix: `glob()` is not always available. Use `opendir()`, `readdir()`, `closedir()`.
+* Bug Fix: Send permalink options to Stats Server for improved per post permalink calculation.
+* Bug Fix: Do not hide Screen Options and Help links during Jetpack call to connect.
+* Bug Fix: Improve readablitiy of text.
+* Bug Fix: AtD: Correctly store/display options.
+* Enhancement: Output more informative error messages.
+* Enhancement: Improve CSS styling.
+* Enhancement: Stats: Query all post types and statuses when getting posts for stats reports.
+* Enhancement: Improve performance of LaTeX URLs be using cookieless CDN.
+
+= 1.1 =
+Release Date: March 9, 2011
+
+* Initial release
diff --git a/plugins/jetpack/class.jetpack-admin.php b/plugins/jetpack/class.jetpack-admin.php
index c9dfb463..6e46ee38 100644
--- a/plugins/jetpack/class.jetpack-admin.php
+++ b/plugins/jetpack/class.jetpack-admin.php
@@ -30,10 +30,19 @@ class Jetpack_Admin {
jetpack_require_lib( 'admin-pages/class.jetpack-settings-page' );
$this->settings_page = new Jetpack_Settings_Page;
+ jetpack_require_lib( 'admin-pages/class.jetpack-my-jetpack-page' );
+ $this->my_jetpack_page = new Jetpack_My_Jetpack_Page;
+
+ if ( isset( $_POST['jetpack-set-master-user'] ) ) {
+ add_action( 'init', array( $this->my_jetpack_page, 'jetpack_my_jetpack_change_user' ) );
+ }
+
// Add hooks for admin menus
add_action( 'admin_menu', array( $this->landing_page, 'add_actions' ), 998 );
add_action( 'jetpack_admin_menu', array( $this, 'admin_menu_debugger' ) );
add_action( 'jetpack_admin_menu', array( $this->settings_page, 'add_actions' ) );
+ add_action( 'jetpack_admin_menu', array( $this->my_jetpack_page, 'add_actions' ) );
+
// Add redirect to current page for activation/deactivation of modules
add_action( 'jetpack_pre_activate_module', array( $this, 'fix_redirect' ), 10, 2 );
@@ -65,6 +74,14 @@ class Jetpack_Admin {
$jetpack_active = Jetpack::is_active() || Jetpack::is_development_mode();
foreach ( $available_modules as $module ) {
if ( $module_array = $this->jetpack->get_module( $module ) ) {
+ /**
+ * Filters each module's short description.
+ *
+ * @since 3.0.0
+ *
+ * @param string $module_array['description'] Module description.
+ * @param string $module Module slug.
+ */
$short_desc = apply_filters( 'jetpack_short_module_description', $module_array['description'], $module );
// Fix: correct multibyte strings truncate with checking for mbstring extension
$short_desc_trunc = ( function_exists( 'mb_strlen' ) )
@@ -84,16 +101,24 @@ class Jetpack_Admin {
$module_array['configure_url'] = Jetpack::module_configuration_url( $module );
ob_start();
+ /**
+ * Allow the display of a "Learn More" button.
+ * The dynamic part of the action, $module, is the module slug.
+ *
+ * @since 3.0.0
+ */
do_action( 'jetpack_learn_more_button_' . $module );
$module_array['learn_more_button'] = ob_get_clean();
ob_start();
- if ( Jetpack::is_active() && has_action( 'jetpack_module_more_info_connected_' . $module ) ) {
- do_action( 'jetpack_module_more_info_connected_' . $module );
- } else {
- do_action( 'jetpack_module_more_info_' . $module );
- }
-
+ /**
+ * Allow the display of information text when Jetpack is connected to WordPress.com.
+ * The dynamic part of the action, $module, is the module slug.
+ *
+ * @since 3.0.0
+ */
+ do_action( 'jetpack_module_more_info_' . $module );
+
/**
* Filter the long description of a module.
*
@@ -108,7 +133,7 @@ class Jetpack_Admin {
/**
* Filter the search terms for a module
*
- * Search terms are be typically added to a module in module-info.php.
+ * Search terms are typically added to the module headers, under "Additional Search Queries".
*
* Use syntax:
* function jetpack_$module_search_terms( $terms ) {
@@ -118,13 +143,25 @@ class Jetpack_Admin {
* add_filter( 'jetpack_search_terms_$module', 'jetpack_$module_search_terms' );
*
* @since 3.5.0
- * @param string The search terms (comma separated)
+ *
+ * @param string The search terms (comma separated).
*/
- echo apply_filters( 'jetpack_search_terms_' . $module, '' );
+ echo apply_filters( 'jetpack_search_terms_' . $module, $module_array['additional_search_queries'] );
$module_array['search_terms'] = ob_get_clean();
$module_array['configurable'] = false;
- if ( current_user_can( 'manage_options' ) && apply_filters( 'jetpack_module_configurable_' . $module, false ) ) {
+ if (
+ current_user_can( 'manage_options' ) &&
+ /**
+ * Allow the display of a configuration link in the Jetpack Settings screen.
+ *
+ * @since 3.0.0
+ *
+ * @param string $module Module name.
+ * @param bool false Should the Configure module link be displayed? Default to false.
+ */
+ apply_filters( 'jetpack_module_configurable_' . $module, false )
+ ) {
$module_array['configurable'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( Jetpack::module_configuration_url( $module ) ), __( 'Configure', 'jetpack' ) );
}
@@ -146,14 +183,14 @@ class Jetpack_Admin {
return false;
/**
- * We never want to show VaultPress as activate-able through Jetpack.
+ * We never want to show VaultPress as activatable through Jetpack.
*/
if ( 'vaultpress' === $module['module'] ) {
return false;
}
if ( Jetpack::is_development_mode() ) {
- return ! ( $module['requires_connection'] && ! Jetpack::is_active() );
+ return ! ( $module['requires_connection'] );
} else {
return Jetpack::is_active();
}
diff --git a/plugins/jetpack/class.jetpack-autoupdate.php b/plugins/jetpack/class.jetpack-autoupdate.php
index e702679b..0041726c 100644
--- a/plugins/jetpack/class.jetpack-autoupdate.php
+++ b/plugins/jetpack/class.jetpack-autoupdate.php
@@ -6,17 +6,16 @@
*/
class Jetpack_Autoupdate {
- public $updates_allowed;
- public $jetpack;
- public $autoupdate_results;
- public $is_updating = false;
+ private $results = array();
- public $autoupdate_expected = array(
- 'plugin'=> array(),
+ private $expected = array();
+
+ private $success = array(
+ 'plugin' => array(),
'theme' => array(),
);
- public $log = array(
+ private $failed = array(
'plugin' => array(),
'theme' => array(),
);
@@ -31,46 +30,33 @@ class Jetpack_Autoupdate {
}
private function __construct() {
- $this->updates_allowed = Jetpack::is_module_active( 'manage' );
-
- // Only run automatic updates if a user as opted in by activating the manage module.
- if ( $this->updates_allowed ) {
+ if ( Jetpack::is_module_active( 'manage' ) ) {
add_filter( 'auto_update_plugin', array( $this, 'autoupdate_plugin' ), 10, 2 );
add_filter( 'auto_update_theme', array( $this, 'autoupdate_theme' ), 10, 2 );
add_filter( 'auto_update_core', array( $this, 'autoupdate_core' ), 10, 2 );
- add_action( 'automatic_updates_complete', array( $this, 'automatic_updates_complete' ), 10, 1 );
- add_action( 'shutdown', array( $this, 'log_results' ) );
+ add_action( 'automatic_updates_complete', array( $this, 'automatic_updates_complete' ), 999, 1 );
}
-
- // Anytime WordPress saves update data, we'll want to update our Jetpack option as well.
- if ( is_main_site() ) {
- add_action( 'set_site_transient_update_plugins', array( $this, 'save_update_data' ) );
- add_action( 'set_site_transient_update_themes', array( $this, 'save_update_data' ) );
- add_action( 'set_site_transient_update_core', array( $this, 'save_update_data' ) );
- }
-
}
- function autoupdate_plugin( $update, $item ) {
+ public function autoupdate_plugin( $update, $item ) {
$autoupdate_plugin_list = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
if ( in_array( $item->plugin, $autoupdate_plugin_list ) ) {
- $this->expect( $item->plugin );
+ $this->expect( $item->plugin, 'plugin' );
return true;
}
-
return $update;
}
- function autoupdate_theme( $update, $item ) {
+ public function autoupdate_theme( $update, $item ) {
$autoupdate_theme_list = Jetpack_Options::get_option( 'autoupdate_themes', array() );
if ( in_array( $item->theme , $autoupdate_theme_list) ) {
- $this->expect( $item->theme, $type = 'theme' );
+ $this->expect( $item->theme, 'theme' );
return true;
}
return $update;
}
- function autoupdate_core( $update, $item ) {
+ public function autoupdate_core( $update, $item ) {
$autoupdate_core = Jetpack_Options::get_option( 'autoupdate_core', false );
if ( $autoupdate_core ) {
return $autoupdate_core;
@@ -79,139 +65,108 @@ class Jetpack_Autoupdate {
}
/**
- * Stores the an item identifier to the autoupdate_expected array.
+ * Stores the an item identifier to the expected array.
*
* @param string $item Example: 'jetpack/jetpack.php' for type 'plugin' or 'twentyfifteen' for type 'theme'
* @param string $type 'plugin' or 'theme'
*/
- function expect( $item, $type='plugin' ) {
- $this->is_updating = true;
- $this->autoupdate_expected[ $type ][] = $item;
+ private function expect( $item, $type ) {
+ if ( ! isset( $this->expected[ $type ] ) ) {
+ $this->expected[ $type ] = array();
+ }
+ $this->expected[ $type ][] = $item;
}
/**
- * Calculates available updates and saves them to a Jetpack Option
- * Update data is saved in the following schema:
+ * On completion of an automatic update, let's store the results.
*
- * array (
- * 'plugins' => (int) number of plugin updates available
- * 'themes' => (int) number of theme updates available
- * 'wordpress' => (int) number of wordpress core updates available
- * 'translations' => (int) number of translation updates available
- * 'total' => (int) total of all available updates
- * 'wp_version' => (string) the current version of WordPress that is running
- * 'wp_update_version' => (string) the latest available version of WordPress, only present if a WordPress update is needed
- * 'site_is_version_controlled' => (bool) is the site under version control
- * )
+ * @param $results - Sent by WP_Automatic_Updater after it completes an autoupdate action. Results may be empty.
*/
- function save_update_data() {
- global $wp_version;
-
- $update_data = wp_get_update_data();
-
- // Stores the individual update counts as well as the total count.
- if ( isset( $update_data['counts'] ) ) {
- $updates = $update_data['counts'];
+ public function automatic_updates_complete( $results ) {
+ if ( empty( $this->expected ) ) {
+ return;
}
+ $this->results = empty( $results ) ? self::get_possible_failures() : $results;
- // Stores the current version of WordPress.
- $updates['wp_version'] = $wp_version;
-
- // If we need to update WordPress core, let's find the latest version number.
- if ( ! empty( $updates['wordpress'] ) ) {
- $cur = get_preferred_from_update_core();
- if ( isset( $cur->response ) && 'upgrade' === $cur->response ) {
- $updates['wp_update_version'] = $cur->current;
- }
- }
+ add_action( 'shutdown', array( $this, 'bump_stats' ) );
- $updates['site_is_version_controlled'] = (bool) $this->is_version_controlled();
- Jetpack_Options::update_option( 'updates', $updates );
- }
+ Jetpack::init();
- /**
- * Finds out if a site is using a version control system.
- * We'll store that information as a transient with a 24 expiration.
- * We only need to check once per day.
- *
- * @return string ( '1' | '0' )
- */
- function is_version_controlled() {
- $is_version_controlled = get_transient( 'jetpack_site_is_vcs' );
-
- if ( false === $is_version_controlled ) {
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
- $updater = new WP_Automatic_Updater();
- $is_version_controlled = strval( $updater->is_vcs_checkout( $context = ABSPATH ) );
- // transients should not be empty
- if ( empty( $is_version_controlled ) ) {
- $is_version_controlled = '0';
- }
- set_transient( 'jetpack_site_is_vcs', $is_version_controlled, DAY_IN_SECONDS );
+ $items_to_log = array( 'plugin', 'theme' );
+ foreach( $items_to_log as $items ) {
+ $this->log_items( $items );
}
- return $is_version_controlled;
+ Jetpack::log( 'autoupdates', $this->get_log() );
}
- /**
- * On completion of an automatic update, let's store the results.
- *
- * @param $results - Sent by WP_Automatic_Updater after it completes an autoupdate action. Results may be empty.
- */
- function automatic_updates_complete( $results ) {
- $this->autoupdate_results = $results;
+ public function get_log() {
+ return array(
+ 'results' => $this->results,
+ 'failed' => $this->failed,
+ 'success' => $this->success
+ );
}
/**
- * On shutdown, let's check to see if we've preformed an automatic update.
- * If so, let's compare the expected results to the actual results, and log our findings.
+ * Iterates through expected items ( plugins or themes ) and compares them to actual results.
*
- * Results are logged locally via Jetpack::log(), and globally via Jetpack::do_stats()
+ * @param $items 'plugin' or 'theme'
*/
- function log_results() {
+ private function log_items( $items ) {
- if ( $this->is_updating ) {
+ if ( ! isset( $this->expected[ $items ] ) ) {
+ return;
+ }
- $this->jetpack = Jetpack::init();
- $items_to_log = array( 'plugin', 'theme' );
+ $item_results = $this->get_successful_updates( $items );
- foreach( $items_to_log as $items ) {
- $this->log_items( $items );
+ if ( is_array( $this->expected[ $items ] ) ) {
+ foreach( $this->expected[ $items ] as $item ) {
+ if ( in_array( $item, $item_results ) ) {
+ $this->success[ $items ][] = $item;
+ } else {
+ $this->failed[ $items ][] = $item;
+ }
}
-
- $this->jetpack->do_stats( 'server_side' );
- $this->jetpack->log( 'autoupdates', $this->log );
}
}
- /**
- * Iterates through expected items ( plugins or themes ) and compares them to actual results.
- *
- * @param $items 'plugin' or 'theme'
- */
- function log_items( $items ) {
- $items_updated = 0;
- $items_failed = 0;
- $item_results = $this->get_successful_updates( $items );
-
- foreach( $this->autoupdate_expected[ $items ] as $item ) {
- if ( in_array( $item, $item_results ) ) {
- $items_updated++;
- $this->log[ $items ][ $item ] = true;
- } else {
- $items_failed++;
- $this->log[ $items ][ $item ] = new WP_Error( "$items-fail", $this->get_error_message( $item, $type = $items ) );
- }
+ public function bump_stats() {
+ $instance = Jetpack::init();
+ $log = array();
+ // Bump numbers
+ if ( ! empty( $this->success['plugin'] ) ) {
+ $instance->stat( 'autoupdates/plugin-success', count( $this->success['plugin'] ) );
+ $log['plugins_success'] = $this->success['plugin'];
+ }
+
+ if ( ! empty( $this->failed['plugin'] ) ) {
+ $instance->stat( 'autoupdates/plugin-fail', count( $this->failed['plugin'] ) );
+ $log['plugins_failed'] = $this->failed['plugin'];
}
- if ( $items_updated ) {
- $this->jetpack->stat( "autoupdates/$items-success", $items_updated );
+ if ( ! empty( $this->success['theme'] ) ) {
+ $instance->stat( 'autoupdates/theme-success', count( $this->success['theme'] ) );
+ $log['themes_success'] = $this->success['theme'];
}
- if ( $items_failed ) {
- $this->jetpack->stat( "autoupdates/$items-fail", $items_failed );
+ if ( ! empty( $this->failed['theme'] ) ) {
+ $instance->stat( 'autoupdates/theme-fail', count( $this->failed['theme'] ) );
+ $log['themes_failed'] = $this->failed['theme'];
}
+ $instance->do_stats( 'server_side' );
+
+ // Send a more detailed log to logstash
+ if ( ! empty( $log ) ) {
+ Jetpack::load_xml_rpc_client();
+ $xml = new Jetpack_IXR_Client( array(
+ 'user_id' => get_current_user_id()
+ ) );
+ $log['blog_id'] = Jetpack_Options::get_option( 'id' );
+ $xml->query( 'jetpack.debug_autoupdate', $log );
+ }
}
/**
@@ -221,20 +176,20 @@ class Jetpack_Autoupdate {
*
* @return array
*/
- private function get_successful_updates( $type = 'plugin' ) {
+ private function get_successful_updates( $type ) {
$successful_updates = array();
- if ( ! isset( $this->autoupdate_results[ $type ] ) ) {
+ if ( ! isset( $this->results[ $type ] ) ) {
return $successful_updates;
}
- foreach( $this->autoupdate_results[ $type ] as $result ) {
+ foreach( $this->results[ $type ] as $result ) {
if ( $result->result ) {
switch( $type ) {
case 'theme':
$successful_updates[] = $result->item->theme;
break;
- default:
+ case 'plugin':
$successful_updates[] = $result->item->plugin;
}
}
@@ -243,32 +198,49 @@ class Jetpack_Autoupdate {
return $successful_updates;
}
- /**
- * Cycles through results generated by WP_Automatic_Updater to find the messages for the given item and item type.
- *
- * @param $item Example: 'jetpack/jetpack.php' for type 'plugin' or 'twentyfifteen' for type 'theme'
- * @param string $type 'plugin' or 'theme'
- *
- * @return bool|string
- */
- private function get_error_message( $item, $type = 'plugin' ) {
- if ( ! isset( $this->autoupdate_results[ $type ] ) ) {
- return false;
+ static function get_possible_failures() {
+ $result = array();
+ // Lets check some reasons why it might not be working as expected
+ include_once( ABSPATH . '/wp-admin/includes/admin.php' );
+ include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' );
+ $upgrader = new WP_Automatic_Updater;
+
+ if ( $upgrader->is_disabled() ) {
+ $result[] = 'autoupdates-disabled';
}
- foreach( $this->autoupdate_results[ $type ] as $result ) {
- switch( $type ) {
- case 'theme':
- $id = $result->item->theme;
- break;
- default:
- $id = $result->item->plugin;
- }
- if ( $id == $item && isset( $result->messages ) ) {
- return implode( ', ', $result->messages );
- }
+ if ( ! is_main_site() ) {
+ $result[] = 'is-not-main-site';
+ }
+ if ( ! is_main_network() ) {
+ $result[] = 'is-not-main-network';
+ }
+ if ( $upgrader->is_vcs_checkout( ABSPATH ) ) {
+ $result[] = 'site-on-vcs';
+ }
+ if ( $upgrader->is_vcs_checkout( WP_PLUGIN_DIR ) ) {
+ $result[] = 'plugin-directory-on-vcs';
+ }
+ if ( $upgrader->is_vcs_checkout( WP_CONTENT_DIR ) ) {
+ $result[] = 'content-directory-on-vcs';
+ }
+ $lock = get_option( 'auto_updater.lock' );
+ if ( $lock > ( time() - HOUR_IN_SECONDS ) ) {
+ $result[] = 'lock-is-set';
+ }
+ $skin = new Automatic_Upgrader_Skin;
+ include_once( ABSPATH . 'wp-admin/includes/file.php' );
+ include_once( ABSPATH . 'wp-admin/includes/template.php' );
+ if ( ! $skin->request_filesystem_credentials( false, ABSPATH, false ) ) {
+ $result[] = 'no-system-write-access';
+ }
+ if ( ! $skin->request_filesystem_credentials( false, WP_PLUGIN_DIR, false ) ) {
+ $result[] = 'no-plugin-directory-write-access';
+ }
+ if ( ! $skin->request_filesystem_credentials( false, WP_CONTENT_DIR, false ) ) {
+ $result[] = 'no-wp-content-directory-write-access';
}
- return false;
+ return $result;
}
}
-Jetpack_Autoupdate::init(); \ No newline at end of file
+Jetpack_Autoupdate::init();
diff --git a/plugins/jetpack/class.jetpack-cli.php b/plugins/jetpack/class.jetpack-cli.php
index 5fd75d24..d84f39ca 100644
--- a/plugins/jetpack/class.jetpack-cli.php
+++ b/plugins/jetpack/class.jetpack-cli.php
@@ -7,26 +7,82 @@ WP_CLI::add_command( 'jetpack', 'Jetpack_CLI' );
*/
class Jetpack_CLI extends WP_CLI_Command {
+ // Aesthetics
+ public $green_open = "\033[32m";
+ public $red_open = "\033[31m";
+ public $yellow_open = "\033[33m";
+ public $color_close = "\033[0m";
+
/**
* Get Jetpack Details
*
* ## OPTIONS
*
- * None. Simply returns details about whether or not your blog
- * is connected, its Jetpack version, and WordPress.com blog_id.
+ * empty: Leave it empty for basic stats
+ *
+ * full: View full stats. It's the data from the heartbeat
*
* ## EXAMPLES
*
* wp jetpack status
+ * wp jetpack status full
*
*/
public function status( $args, $assoc_args ) {
- if ( Jetpack::is_active() ) {
+ if ( ! Jetpack::is_active() ) {
+ WP_CLI::error( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
+ }
+
+ if ( isset( $args[0] ) && 'full' !== $args[0] ) {
+ WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $args[0] ) );
+ }
+
+ /*
+ * Are they asking for all data?
+ *
+ * Loop through heartbeat data and organize by priority.
+ */
+ $all_data = ( isset( $args[0] ) && 'full' == $args[0] ) ? 'full' : false;
+ if ( $all_data ) {
+ WP_CLI::success( __( 'Jetpack is currently connected to WordPress.com', 'jetpack' ) );
+ WP_CLI::line( sprintf( __( "The Jetpack Version is %s", 'jetpack' ), JETPACK__VERSION ) );
+ WP_CLI::line( sprintf( __( "The WordPress.com blog_id is %d", 'jetpack' ), Jetpack_Options::get_option( 'id' ) ) );
+
+ // Heartbeat data
+ WP_CLI::line( "\n" . __( 'Additional data: ', 'jetpack' ) );
+
+ // Get the filtered heartbeat data.
+ // Filtered so we can color/list by severity
+ $stats = Jetpack::jetpack_check_heartbeat_data();
+
+ // Display red flags first
+ foreach ( $stats['bad'] as $stat => $value ) {
+ printf( "$this->red_open%-'.16s %s $this->color_close\n", $stat, $value );
+ }
+
+ // Display caution warnings next
+ foreach ( $stats['caution'] as $stat => $value ) {
+ printf( "$this->yellow_open%-'.16s %s $this->color_close\n", $stat, $value );
+ }
+
+ // The rest of the results are good!
+ foreach ( $stats['good'] as $stat => $value ) {
+
+ // Modules should get special spacing for aestetics
+ if ( strpos( $stat, 'odule-' ) ) {
+ printf( "%-'.30s %s\n", $stat, $value );
+ usleep( 4000 ); // For dramatic effect lolz
+ continue;
+ }
+ printf( "%-'.16s %s\n", $stat, $value );
+ usleep( 4000 ); // For dramatic effect lolz
+ }
+ } else {
+ // Just the basics
WP_CLI::success( __( 'Jetpack is currently connected to WordPress.com', 'jetpack' ) );
WP_CLI::line( sprintf( __( 'The Jetpack Version is %s', 'jetpack' ), JETPACK__VERSION ) );
WP_CLI::line( sprintf( __( 'The WordPress.com blog_id is %d', 'jetpack' ), Jetpack_Options::get_option( 'id' ) ) );
- } else {
- WP_CLI::line( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
+ WP_CLI::line( "\n" . _x( "View full status with 'wp jetpack status full'", '"wp jetpack status full" is a command - do not translate', 'jetpack' ) );
}
}
@@ -50,7 +106,7 @@ class Jetpack_CLI extends WP_CLI_Command {
* wp jetpack disconnect user username
* wp jetpack disconnect user email@domain.com
*
- * @synopsis blog|[user <user_id>]
+ * @synopsis <blog|user> [<user_identifier>]
*/
public function disconnect( $args, $assoc_args ) {
if ( ! Jetpack::is_active() ) {
@@ -79,7 +135,7 @@ class Jetpack_CLI extends WP_CLI_Command {
WP_CLI::error( __( 'Please specify a valid user.', 'jetpack' ) );
}
} else {
- WP_CLI::error( __( 'Please specify a user.', 'jetpack' ) );
+ WP_CLI::error( __( 'Please specify a user by either ID, username, or email.', 'jetpack' ) );
}
}
@@ -104,17 +160,91 @@ class Jetpack_CLI extends WP_CLI_Command {
}
/**
- * Manage Jetpack Modules
+ * Reset Jetpack options and settings to default
*
* ## OPTIONS
*
- * list: View all available modules, and their status.
+ * modules: Resets modules to default state ( get_default_modules() )
*
- * activate <module_slug>: Activate a module.
+ * options: Resets all Jetpack options except:
+ * - All private options (Blog token, user token, etc...)
+ * - id (The Client ID/WP.com Blog ID of this site)
+ * - master_user
+ * - version
+ * - activated
*
- * deactivate <module_slug>: Deactivate a module.
+ * ## EXAMPLES
*
- * toggle <module_slug>: Toggle a module on or off.
+ * wp jetpack reset options
+ * wp jetpack reset modules
+ *
+ * @synopsis <modules|options>
+ */
+ public function reset( $args, $assoc_args ) {
+ $action = isset( $args[0] ) ? $args[0] : 'prompt';
+ if ( ! in_array( $action, array( 'options', 'modules' ) ) ) {
+ WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
+ }
+
+ // Are you sure?
+ jetpack_cli_are_you_sure();
+
+ switch ( $action ) {
+ case 'options':
+ $options_to_reset = Jetpack::get_jetpack_options_for_reset();
+
+ // Reset the Jetpack options
+ _e( "Resetting Jetpack Options...\n", "jetpack" );
+ sleep(1); // Take a breath
+ foreach ( $options_to_reset['jp_options'] as $option_to_reset ) {
+ Jetpack_Options::delete_option( $option_to_reset );
+ usleep( 100000 );
+ WP_CLI::success( sprintf( __( '%s option reset', 'jetpack' ), $option_to_reset ) );
+ }
+
+ // Reset the WP options
+ _e( "Resetting the jetpack options stored in wp_options...\n", "jetpack" );
+ usleep( 500000 ); // Take a breath
+ foreach ( $options_to_reset['wp_options'] as $option_to_reset ) {
+ delete_option( $option_to_reset );
+ usleep( 100000 );
+ WP_CLI::success( sprintf( __( '%s option reset', 'jetpack' ), $option_to_reset ) );
+ }
+
+ // Reset to default modules
+ _e( "Resetting default modules...\n", "jetpack" );
+ usleep( 500000 ); // Take a breath
+ $default_modules = Jetpack::get_default_modules();
+ Jetpack_Options::update_option( 'active_modules', $default_modules );
+ WP_CLI::success( __( 'Modules reset to default.', 'jetpack' ) );
+
+ // Jumpstart option is special
+ Jetpack_Options::update_option( 'jumpstart', 'new_connection' );
+ WP_CLI::success( __( 'jumpstart option reset', 'jetpack' ) );
+ break;
+ case 'modules':
+ $default_modules = Jetpack::get_default_modules();
+ Jetpack_Options::update_option( 'active_modules', $default_modules );
+ WP_CLI::success( __( 'Modules reset to default.', 'jetpack' ) );
+ break;
+ case 'prompt':
+ WP_CLI::error( __( 'Please specify if you would like to reset your options, or modules', 'jetpack' ) );
+ break;
+ }
+ }
+
+ /**
+ * Manage Jetpack Modules
+ *
+ * ## OPTIONS
+ *
+ * list : View all available modules, and their status.
+ * activate all : Activate all modules
+ * deactivate all: Deactivate all modules
+ *
+ * activate <module_slug> : Activate a module.
+ * deactivate <module_slug> : Deactivate a module.
+ * toggle <module_slug> : Toggle a module on or off.
*
* ## EXAMPLES
*
@@ -123,35 +253,47 @@ class Jetpack_CLI extends WP_CLI_Command {
* wp jetpack module deactivate stats
* wp jetpack module toggle stats
*
- * @synopsis [list|activate|deactivate|toggle [<module_name>]]
+ * wp jetpack module activate all
+ * wp jetpack module deactivate all
+ *
+ * @synopsis <list|activate|deactivate|toggle> [<module_name>]
*/
public function module( $args, $assoc_args ) {
$action = isset( $args[0] ) ? $args[0] : 'list';
if ( ! in_array( $action, array( 'list', 'activate', 'deactivate', 'toggle' ) ) ) {
WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
}
-
if ( in_array( $action, array( 'activate', 'deactivate', 'toggle' ) ) ) {
if ( isset( $args[1] ) ) {
$module_slug = $args[1];
- if ( ! Jetpack::is_module( $module_slug ) ) {
+ if ( 'all' !== $module_slug && ! Jetpack::is_module( $module_slug ) ) {
WP_CLI::error( sprintf( __( '%s is not a valid module.', 'jetpack' ), $module_slug ) );
}
if ( 'toggle' == $action ) {
$action = Jetpack::is_module_active( $module_slug ) ? 'deactivate' : 'activate';
}
+ // Bulk actions
+ if ( 'all' == $args[1] ) {
+ $action = ( 'deactivate' == $action ) ? 'deactivate_all' : 'activate_all';
+ }
+ // VaultPress needs to be handled elsewhere.
+ if ( in_array( $action, array( 'activate', 'deactivate', 'toggle' ) ) && 'vaultpress' == $args[1] ) {
+ WP_CLI::error( sprintf( _x( 'Please visit %s to configure your VaultPress subscription.', '%s is a website', 'jetpack' ), esc_url( 'https://vaultpress.com/jetpack/' ) ) );
+ }
} else {
WP_CLI::line( __( 'Please specify a valid module.', 'jetpack' ) );
$action = 'list';
}
}
-
switch ( $action ) {
case 'list':
WP_CLI::line( __( 'Available Modules:', 'jetpack' ) );
$modules = Jetpack::get_available_modules();
sort( $modules );
foreach( $modules as $module_slug ) {
+ if ( 'vaultpress' == $module_slug ) {
+ continue;
+ }
$active = Jetpack::is_module_active( $module_slug ) ? __( 'Active', 'jetpack' ) : __( 'Inactive', 'jetpack' );
WP_CLI::line( "\t" . str_pad( $module_slug, 24 ) . $active );
}
@@ -159,19 +301,299 @@ class Jetpack_CLI extends WP_CLI_Command {
case 'activate':
$module = Jetpack::get_module( $module_slug );
Jetpack::log( 'activate', $module_slug );
- Jetpack::activate_module( $module_slug, false );
+ Jetpack::activate_module( $module_slug, false, false );
WP_CLI::success( sprintf( __( '%s has been activated.', 'jetpack' ), $module['name'] ) );
break;
+ case 'activate_all':
+ $modules = Jetpack::get_available_modules();
+ Jetpack_Options::update_option( 'active_modules', $modules );
+ WP_CLI::success( __( 'All modules activated!', 'jetpack' ) );
+ break;
case 'deactivate':
$module = Jetpack::get_module( $module_slug );
Jetpack::log( 'deactivate', $module_slug );
Jetpack::deactivate_module( $module_slug );
WP_CLI::success( sprintf( __( '%s has been deactivated.', 'jetpack' ), $module['name'] ) );
break;
+ case 'deactivate_all':
+ Jetpack_Options::update_option( 'active_modules', '' );
+ WP_CLI::success( __( 'All modules deactivated!', 'jetpack' ) );
+ break;
case 'toggle':
// Will never happen, should have been handled above and changed to activate or deactivate.
break;
}
}
+ /**
+ * Manage Protect Settings
+ *
+ * ## OPTIONS
+ *
+ * whitelist: Whitelist an IP address. You can also read or clear the whitelist.
+ *
+ *
+ * ## EXAMPLES
+ *
+ * wp jetpack protect whitelist <ip address>
+ * wp jetpack protect whitelist list
+ * wp jetpack protect whitelist clear
+ *
+ * @synopsis <whitelist> [<ip|ip_low-ip_high|list|clear>]
+ */
+ public function protect( $args, $assoc_args ) {
+ $action = isset( $args[0] ) ? $args[0] : 'prompt';
+ if ( ! in_array( $action, array( 'whitelist' ) ) ) {
+ WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
+ }
+ // Check if module is active
+ if ( ! Jetpack::is_module_active( __FUNCTION__ ) ) {
+ WP_CLI::error( sprintf( _x( '%s is not active. You can activate it with "wp jetpack module activate %s"', '"wp jetpack module activate" is a command - do not translate', 'jetpack' ), __FUNCTION__, __FUNCTION__ ) );
+ }
+ if ( in_array( $action, array( 'whitelist' ) ) ) {
+ if ( isset( $args[1] ) ) {
+ $action = 'whitelist';
+ } else {
+ $action = 'prompt';
+ }
+ }
+ switch ( $action ) {
+ case 'whitelist':
+ $whitelist = array();
+ $new_ip = $args[1];
+ $current_whitelist = get_site_option( 'jetpack_protect_whitelist' );
+
+ // Build array of IPs that are already whitelisted.
+ // Re-build manually instead of using jetpack_protect_format_whitelist() so we can easily get
+ // low & high range params for jetpack_protect_ip_address_is_in_range();
+ foreach( $current_whitelist as $whitelisted ) {
+
+ // IP ranges
+ if ( $whitelisted->range ) {
+
+ // Is it already whitelisted?
+ if ( jetpack_protect_ip_address_is_in_range( $new_ip, $whitelisted->range_low, $whitelisted->range_high ) ) {
+ WP_CLI::error( sprintf( __( "%s has already been whitelisted", 'jetpack' ), $new_ip ) );
+ break;
+ }
+ $whitelist[] = $whitelisted->range_low . " - " . $whitelisted->range_high;
+
+ } else { // Individual IPs
+
+ // Check if the IP is already whitelisted (single IP only)
+ if ( $new_ip == $whitelisted->ip_address ) {
+ WP_CLI::error( sprintf( __( "%s has already been whitelisted", 'jetpack' ), $new_ip ) );
+ break;
+ }
+ $whitelist[] = $whitelisted->ip_address;
+
+ }
+ }
+
+ /*
+ * List the whitelist
+ * Done here because it's easier to read the $whitelist array after it's been rebuilt
+ */
+ if ( isset( $args[1] ) && 'list' == $args[1] ) {
+ if ( ! empty( $whitelist ) ) {
+ WP_CLI::success( __( 'Here are your whitelisted IPs:', 'jetpack' ) );
+ foreach ( $whitelist as $ip ) {
+ WP_CLI::line( "\t" . str_pad( $ip, 24 ) ) ;
+ }
+ } else {
+ WP_CLI::line( __( 'Whitelist is empty.', "jetpack" ) ) ;
+ }
+ break;
+ }
+
+ /*
+ * Clear the whitelist
+ */
+ if ( isset( $args[1] ) && 'clear' == $args[1] ) {
+ if ( ! empty( $whitelist ) ) {
+ $whitelist = array();
+ jetpack_protect_save_whitelist( $whitelist );
+ WP_CLI::success( __( 'Cleared all whitelisted IPs', 'jetpack' ) );
+ } else {
+ WP_CLI::line( __( 'Whitelist is empty.', "jetpack" ) ) ;
+ }
+ break;
+ }
+
+ // Append new IP to whitelist array
+ array_push( $whitelist, $new_ip );
+
+ // Save whitelist if there are no errors
+ $result = jetpack_protect_save_whitelist( $whitelist );
+ if ( is_wp_error( $result ) ) {
+ WP_CLI::error( __( $result, 'jetpack' ) );
+ }
+
+ WP_CLI::success( sprintf( __( '%s has been whitelisted.', 'jetpack' ), $new_ip ) );
+ break;
+ case 'prompt':
+ WP_CLI::error(
+ __( 'No command found.', 'jetpack' ) . "\n" .
+ __( 'Please enter the IP address you want to whitelist.', 'jetpack' ) . "\n" .
+ _x( 'You can save a range of IPs {low_range}-{high_range}. No spaces allowed. (example: 1.1.1.1-2.2.2.2)', 'Instructions on how to whitelist IP ranges - low_range/high_range should be translated.', 'jetpack' ) . "\n" .
+ _x( "You can also 'list' or 'clear' the whitelist.", "'list' and 'clear' are commands and should not be translated", 'jetpack' ) . "\n"
+ );
+ break;
+ }
+ }
+
+ /**
+ * Manage Jetpack Options
+ *
+ * ## OPTIONS
+ *
+ * list : List all jetpack options and their values
+ * delete : Delete an option
+ * - can only delete options that are white listed.
+ * update : update an option
+ * - can only update option strings
+ * get : get the value of an option
+ *
+ * ## EXAMPLES
+ *
+ * wp jetpack options list
+ * wp jetpack options get <option_name>
+ * wp jetpack options delete <option_name>
+ * wp jetpack options update <option_name> [<option_value>]
+ *
+ * @synopsis <list|get|delete|update> [<option_name>] [<option_value>]
+ */
+ public function options( $args, $assoc_args ) {
+ $action = isset( $args[0] ) ? $args[0] : 'list';
+ $safe_to_modify = Jetpack::get_jetpack_options_for_reset();
+
+ // Jumpstart is special
+ array_push( $safe_to_modify, 'jumpstart' );
+
+ // Is the option flagged as unsafe?
+ $flagged = ! in_array( $args[1], $safe_to_modify );
+
+ if ( ! in_array( $action, array( 'list', 'get', 'delete', 'update' ) ) ) {
+ WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
+ }
+
+ if ( isset( $args[0] ) ) {
+ if ( 'get' == $args[0] && isset( $args[1] ) ) {
+ $action = 'get';
+ } else if ( 'delete' == $args[0] && isset( $args[1] ) ) {
+ $action = 'delete';
+ } else if ( 'update' == $args[0] && isset( $args[1] ) ) {
+ $action = 'update';
+ } else {
+ $action = 'list';
+ }
+ }
+
+ // Bail if the option isn't found
+ $option = isset( $args[1] ) ? Jetpack_Options::get_option( $args[1] ) : false;
+ if ( isset( $args[1] ) && ! $option && 'update' !== $args[0] ) {
+ WP_CLI::error( __( 'Option not found or is empty. Use "list" to list option names', 'jetpack' ) );
+ }
+
+ // Let's print_r the option if it's an array
+ // Used in the 'get' and 'list' actions
+ $option = is_array( $option ) ? print_r( $option ) : $option;
+
+ switch ( $action ) {
+ case 'get':
+ WP_CLI::success( "\t" . $option );
+ break;
+ case 'delete':
+ jetpack_cli_are_you_sure( $flagged );
+
+ Jetpack_Options::delete_option( $args[1] );
+ WP_CLI::success( sprintf( __( 'Deleted option: %s', 'jetpack' ), $args[1] ) );
+ break;
+ case 'update':
+ jetpack_cli_are_you_sure( $flagged );
+
+ // Updating arrays would get pretty tricky...
+ $value = Jetpack_Options::get_option( $args[1] );
+ if ( $value && is_array( $value ) ) {
+ WP_CLI::error( __( 'Sorry, no updating arrays at this time', 'jetpack' ) );
+ }
+
+ Jetpack_Options::update_option( $args[1], $args[2] );
+ WP_CLI::success( sprintf( _x( 'Updated option: %s to "%s"', 'Updating an option from "this" to "that".', 'jetpack' ), $args[1], $args[2] ) );
+ break;
+ case 'list':
+ $options_compact = Jetpack_Options::get_option_names();
+ $options_non_compact = Jetpack_Options::get_option_names( 'non_compact' );
+ $options_private = Jetpack_Options::get_option_names( 'private' );
+ $options = array_merge( $options_compact, $options_non_compact, $options_private );
+
+ // Table headers
+ WP_CLI::line( "\t" . str_pad( __( 'Option', 'jetpack' ), 30 ) . __( 'Value', 'jetpack' ) );
+
+ // List out the options and their values
+ // Tell them if the value is empty or not
+ // Tell them if it's an array
+ foreach ( $options as $option ) {
+ $value = Jetpack_Options::get_option( $option );
+ if ( ! $value ) {
+ WP_CLI::line( "\t" . str_pad( $option, 30 ) . 'Empty' );
+ continue;
+ }
+
+ if ( ! is_array( $value ) ) {
+ WP_CLI::line( "\t" . str_pad( $option, 30 ) . $value );
+ } else if ( is_array( $value ) ) {
+ WP_CLI::line( "\t" . str_pad( $option, 30 ) . 'Array - Use "get <option>" to read option array.' );
+ }
+ }
+ $option_text = '{' . _x( 'option', 'a variable command that a user can write, provided in the printed instructions', 'jetpack' ) . '}';
+ $value_text = '{' . _x( 'value', 'the value that they want to update the option to', 'jetpack' ) . '}';
+
+ WP_CLI::success(
+ _x( "Above are your options. You may 'get', 'delete', and 'update' them.", "'get', 'delete', and 'update' are commands - do not translate.", 'jetpack' ) . "\n" .
+ str_pad( 'wp jetpack options get', 26 ) . $option_text . "\n" .
+ str_pad( 'wp jetpack options delete', 26 ) . $option_text . "\n" .
+ str_pad( 'wp jetpack options update', 26 ) . "$option_text $value_text" . "\n" .
+ _x( "Type 'wp jetpack options' for more info.", "'wp jetpack options' is a command - do not translate.", 'jetpack' ) . "\n"
+ );
+ break;
+ }
+ }
}
+
+/*
+ * Standard "ask for permission to continue" function.
+ * If action cancelled, ask if they need help.
+ *
+ * Written outside of the class so it's not listed as an executable command w/ 'wp jetpack'
+ *
+ * @param $flagged bool false = normal option | true = flagged by get_jetpack_options_for_reset()
+ * @param $error_msg string (optional)
+ */
+function jetpack_cli_are_you_sure( $flagged = false, $error_msg = false ) {
+ $cli = new Jetpack_CLI();
+
+ // Default cancellation message
+ if ( ! $error_msg ) {
+ $error_msg =
+ __( 'Action cancelled. Have a question?', 'jetpack' )
+ . ' '
+ . $cli->green_open
+ . 'jetpack.me/support'
+ . $cli->color_close;
+ }
+
+ if ( ! $flagged ) {
+ $prompt_message = __( 'Are you sure? This cannot be undone. Type "yes" to continue:', '"yes" is a command. Do not translate that.', 'jetpack' );
+ } else {
+ /* translators: Don't translate the word yes here. */
+ $prompt_message = __( 'Are you sure? Modifying this option may disrupt your Jetpack connection. Type "yes" to continue.', 'jetpack' );
+ }
+
+ WP_CLI::line( $prompt_message );
+ $handle = fopen( "php://stdin", "r" );
+ $line = fgets( $handle );
+ if ( 'yes' != trim( $line ) ){
+ WP_CLI::error( $error_msg );
+ }
+} \ No newline at end of file
diff --git a/plugins/jetpack/class.jetpack-client-server.php b/plugins/jetpack/class.jetpack-client-server.php
index d0ddf087..63a678d8 100644
--- a/plugins/jetpack/class.jetpack-client-server.php
+++ b/plugins/jetpack/class.jetpack-client-server.php
@@ -5,14 +5,38 @@
* Client Server = API Methods the Plugin must respond to
*/
class Jetpack_Client_Server {
+
function authorize() {
$data = stripslashes_deep( $_GET );
- $args = array();
$redirect = isset( $data['redirect'] ) ? esc_url_raw( (string) $data['redirect'] ) : '';
- do {
+ $jetpack_unique_connection = Jetpack_Options::get_option( 'unique_connection' );
+ // Checking if site has been active/connected previously before recording unique connection
+ if ( ! $jetpack_unique_connection ) {
+ // jetpack_unique_connection option has never been set
+ $jetpack_unique_connection = array(
+ 'connected' => 0,
+ 'disconnected' => 0,
+ 'version' => '3.6.1'
+ );
+
+ update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
+
+ //track unique connection
$jetpack = Jetpack::init();
+
+ $jetpack->stat( 'connections', 'unique-connection' );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ // increment number of times connected
+ $jetpack_unique_connection['connected'] += 1;
+ Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
+
+ do {
+ $jetpack = $this->get_jetpack();
$role = $jetpack->translate_current_user_to_role();
+
if ( !$role ) {
Jetpack::state( 'error', 'no_role' );
break;
@@ -24,7 +48,7 @@ class Jetpack_Client_Server {
break;
}
- check_admin_referer( "jetpack-authorize_{$role}_{$redirect}" );
+ $this->check_admin_referer( "jetpack-authorize_{$role}_{$redirect}" );
if ( !empty( $data['error'] ) ) {
Jetpack::state( 'error', $data['error'] );
@@ -92,6 +116,7 @@ class Jetpack_Client_Server {
}
// Sync all registers options and constants
+ /** This action is documented in class.jetpack.php */
do_action( 'jetpack_sync_all_registered_options' );
// Start nonce cleaner
@@ -100,12 +125,12 @@ class Jetpack_Client_Server {
} while ( false );
if ( wp_validate_redirect( $redirect ) ) {
- wp_safe_redirect( $redirect );
+ $this->wp_safe_redirect( $redirect );
} else {
- wp_safe_redirect( Jetpack::admin_url() );
+ $this->wp_safe_redirect( Jetpack::admin_url() );
}
- exit;
+ $this->do_exit();
}
public static function deactivate_plugin( $probable_file, $probable_title ) {
@@ -132,7 +157,7 @@ class Jetpack_Client_Server {
* @return object|WP_Error
*/
function get_token( $data ) {
- $jetpack = Jetpack::init();
+ $jetpack = $this->get_jetpack();
$role = $jetpack->translate_current_user_to_role();
if ( !$role ) {
@@ -209,9 +234,33 @@ class Jetpack_Client_Server {
if ( !$cap = $jetpack->translate_role_to_cap( $role ) )
return new Jetpack_Error( 'scope', 'No Cap', $code );
- if ( !current_user_can( $cap ) )
+ if ( ! current_user_can( $cap ) )
return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
+ /**
+ * Fires after user has successfully received an auth token.
+ *
+ * @since 3.9.0
+ */
+ do_action( 'jetpack_user_authorized' );
+
return (string) $json->access_token;
}
+
+ public function get_jetpack() {
+ return Jetpack::init();
+ }
+
+ public function check_admin_referer( $action ) {
+ return check_admin_referer( $action );
+ }
+
+ public function wp_safe_redirect( $redirect ) {
+ return wp_safe_redirect( $redirect );
+ }
+
+ public function do_exit() {
+ exit;
+ }
+
}
diff --git a/plugins/jetpack/class.jetpack-client.php b/plugins/jetpack/class.jetpack-client.php
index 669ccba7..df1c4c07 100644
--- a/plugins/jetpack/class.jetpack-client.php
+++ b/plugins/jetpack/class.jetpack-client.php
@@ -1,6 +1,9 @@
<?php
class Jetpack_Client {
+ const WPCOM_JSON_API_HOST = 'public-api.wordpress.com';
+ const WPCOM_JSON_API_VERSION = '1.1';
+
/**
* Makes an authorized remote request using Jetpack_Signature
*
@@ -51,7 +54,7 @@ class Jetpack_Client {
$jetpack_signature = new Jetpack_Signature( $token->secret, $time_diff );
$timestamp = time() + $time_diff;
-
+
if( function_exists( 'wp_generate_password' ) ) {
$nonce = wp_generate_password( 10, false );
} else {
@@ -131,6 +134,21 @@ class Jetpack_Client {
* @return array|WP_Error WP HTTP response on success
*/
public static function _wp_remote_request( $url, $args, $set_fallback = false ) {
+ /**
+ * SSL verification (`sslverify`) for the JetpackClient remote request
+ * defaults to off, use this filter to force it on.
+ *
+ * Return `true` to ENABLE SSL verification, return `false`
+ * to DISABLE SSL verification.
+ *
+ * @since 3.6.0
+ *
+ * @param bool Whether to force `sslverify` or not.
+ */
+ if ( apply_filters( 'jetpack_client_verify_ssl_certs', false ) ) {
+ return wp_remote_request( $url, $args );
+ }
+
$fallback = Jetpack_Options::get_option( 'fallback_no_verify_ssl_certs' );
if ( false === $fallback ) {
Jetpack_Options::update_option( 'fallback_no_verify_ssl_certs', 0 );
@@ -216,4 +234,49 @@ class Jetpack_Client {
}
}
}
+
+ /**
+ * Query the WordPress.com REST API using the blog token
+ *
+ * @param string $path
+ * @param string $version
+ * @param array $args
+ * @param string $body
+ * @return array|WP_Error $response Data.
+ */
+ static function wpcom_json_api_request_as_blog( $path, $version = self::WPCOM_JSON_API_VERSION, $args = array(), $body = null ) {
+ $filtered_args = array_intersect_key( $args, array(
+ 'method' => 'string',
+ 'timeout' => 'int',
+ 'redirection' => 'int',
+ ) );
+
+ /**
+ * Determines whether Jetpack can send outbound https requests to the WPCOM api.
+ *
+ * @since 3.6.0
+ *
+ * @param bool $proto Defaults to true.
+ */
+ $proto = apply_filters( 'jetpack_can_make_outbound_https', true ) ? 'https' : 'http';
+
+ // unprecedingslashit
+ $_path = preg_replace( '/^\//', '', $path );
+
+ // Use GET by default whereas `remote_request` uses POST
+ if ( isset( $filtered_args['method'] ) && strtoupper( $filtered_args['method'] === 'POST' ) ) {
+ $request_method = 'POST';
+ } else {
+ $request_method = 'GET';
+ }
+
+ $validated_args = array_merge( $filtered_args, array(
+ 'url' => sprintf( '%s://%s/rest/v%s/%s', $proto, self::WPCOM_JSON_API_HOST, $version, $_path ),
+ 'blog_id' => (int) Jetpack_Options::get_option( 'id' ),
+ 'method' => $request_method,
+ ) );
+
+ return Jetpack_Client::remote_request( $validated_args, $body );
+ }
+
}
diff --git a/plugins/jetpack/class.jetpack-data.php b/plugins/jetpack/class.jetpack-data.php
index 30d6e5b2..727bd059 100644
--- a/plugins/jetpack/class.jetpack-data.php
+++ b/plugins/jetpack/class.jetpack-data.php
@@ -39,4 +39,87 @@ class Jetpack_Data {
'external_user_id' => (int) $user_id,
);
}
+
+ /**
+ * This function mirrors Jetpack_Data::is_usable_domain() in the WPCOM codebase.
+ *
+ * @param $domain
+ * @param array $extra
+ *
+ * @return bool|WP_Error
+ */
+ public static function is_usable_domain( $domain, $extra = array() ) {
+
+ // If it's empty, just fail out.
+ if ( ! $domain ) {
+ return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
+ }
+
+ // None of the explicit localhosts.
+ $forbidden_domains = array(
+ 'wordpress.com',
+ 'localhost',
+ 'localhost.localdomain',
+ '127.0.0.1',
+ 'local.wordpress.dev', // VVV
+ 'local.wordpress-trunk.dev', // VVV
+ 'src.wordpress-develop.dev', // VVV
+ 'build.wordpress-develop.dev', // VVV
+ );
+ if ( in_array( $domain, $forbidden_domains ) ) {
+ return new WP_Error( 'fail_domain_forbidden', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is in the forbidden array.', 'jetpack' ), $domain ) );
+ }
+
+ // No .dev or .local domains
+ if ( preg_match( '#\.(dev|local)$#i', $domain ) ) {
+ return new WP_Error( 'fail_domain_tld', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it uses an invalid top level domain.', 'jetpack' ), $domain ) );
+ }
+
+ // No WPCOM subdomains
+ if ( preg_match( '#\.wordpress\.com$#i', $domain ) ) {
+ return new WP_Error( 'fail_subdomain_wpcom', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is a subdomain of WordPress.com.', 'jetpack' ), $domain ) );
+ }
+
+ // If PHP was compiled without support for the Filter module (very edge case)
+ if ( ! function_exists( 'filter_var' ) ) {
+ // Just pass back true for now, and let wpcom sort it out.
+ return true;
+ }
+
+ // Check the IP to make sure it's pingable.
+ $ip = gethostbyname( $domain );
+
+ // Doing this again as I was getting some false positives when gethostbyname() flaked out and returned the domain.
+ $ip = filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ? $ip : gethostbyname( $ip );
+
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE | FILTER_FLAG_IPV4 ) && ! self::php_bug_66229_check( $ip ) ) {
+ return new WP_Error( 'fail_domain_bad_ip_range', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as its IP `%2$s` is either invalid, or in a reserved or private range.', 'jetpack' ), $domain, $ip ) );
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if the IP address passed in should not be in a reserved range, even if PHP says that it is.
+ * See: https://bugs.php.net/bug.php?id=66229 and https://github.com/php/php-src/commit/d1314893fd1325ca6aa0831101896e31135a2658
+ *
+ * This function mirrors Jetpack_Data::php_bug_66229_check() in the WPCOM codebase.
+ */
+ public static function php_bug_66229_check( $ip ) {
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
+ return false;
+ }
+
+ $ip_arr = array_map( 'intval', explode( '.', $ip ) );
+
+ if ( 128 == $ip_arr[0] && 0 == $ip_arr[1] ) {
+ return true;
+ }
+
+ if ( 191 == $ip_arr[0] && 255 == $ip_arr[1] ) {
+ return true;
+ }
+
+ return false;
+ }
}
diff --git a/plugins/jetpack/class.jetpack-debugger.php b/plugins/jetpack/class.jetpack-debugger.php
index d9cf878d..7b0d0f54 100644
--- a/plugins/jetpack/class.jetpack-debugger.php
+++ b/plugins/jetpack/class.jetpack-debugger.php
@@ -14,17 +14,15 @@ class Jetpack_Debugger {
}
}
- public static function jetpack_increase_timeout($time) {
- $time = 30; //seconds
- return $time;
+ public static function jetpack_increase_timeout() {
+ return 30; // seconds
}
public static function jetpack_debug_display_handler() {
if ( ! current_user_can( 'manage_options' ) )
wp_die( esc_html__('You do not have sufficient permissions to access this page.', 'jetpack' ) );
- global $current_user;
- get_currentuserinfo();
+ $current_user = wp_get_current_user();
$user_id = get_current_user_id();
$user_tokens = Jetpack_Options::get_option( 'user_tokens' );
@@ -57,6 +55,37 @@ class Jetpack_Debugger {
$debug_info .= "\r\n" . esc_html( "JETPACK__PLUGIN_DIR: " . JETPACK__PLUGIN_DIR );
$debug_info .= "\r\n" . esc_html( "SITE_URL: " . site_url() );
$debug_info .= "\r\n" . esc_html( "HOME_URL: " . home_url() );
+ $debug_info .= "\r\n" . esc_html( "SERVER_PORT: " . $_SERVER['SERVER_PORT'] );
+
+
+ foreach ( array (
+ 'GD_PHP_HANDLER',
+ 'HTTP_AKAMAI_ORIGIN_HOP',
+ 'HTTP_CF_CONNECTING_IP',
+ 'HTTP_CLIENT_IP',
+ 'HTTP_FASTLY_CLIENT_IP',
+ 'HTTP_FORWARDED',
+ 'HTTP_FORWARDED_FOR',
+ 'HTTP_INCAP_CLIENT_IP',
+ 'HTTP_TRUE_CLIENT_IP',
+ 'HTTP_X_CLIENTIP',
+ 'HTTP_X_CLUSTER_CLIENT_IP',
+ 'HTTP_X_FORWARDED',
+ 'HTTP_X_FORWARDED_FOR',
+ 'HTTP_X_IP_TRAIL',
+ 'HTTP_X_REAL_IP',
+ 'HTTP_X_VARNISH',
+ 'REMOTE_ADDR'
+ ) as $header ) {
+ if( isset( $_SERVER[$header] ) ) {
+ $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": " . $_SERVER[$header] );
+ } else {
+ $debug_info .= "\r\n" . esc_html( 'IP HEADER: '.$header . ": Not Set" );
+ }
+ }
+
+
+ $debug_info .= "\r\n" . esc_html( "PROTECT_TRUSTED_HEADER: " . json_encode(get_site_option( 'trusted_ip_header' )));
$debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
$debug_raw_info = '';
@@ -139,7 +168,19 @@ class Jetpack_Debugger {
<ol>
<li><b><em><?php esc_html_e( 'A known issue.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Some themes and plugins have <a href="%1$s">known conflicts</a> with Jetpack – check the <a href="%2$s">list</a>. (You can also browse the <a href="%3$s">Jetpack support pages</a> or <a href="%4$s">Jetpack support forum</a> to see if others have experienced and solved the problem.)', 'jetpack' ), 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/getting-started-with-jetpack/known-issues/', 'http://jetpack.me/support/', 'http://wordpress.org/support/plugin/jetpack' ); ?></li>
<li><b><em><?php esc_html_e( 'An incompatible plugin.', 'jetpack' ); ?></em></b> <?php esc_html_e( "Find out by disabling all plugins except Jetpack. If the problem persists, it's not a plugin issue. If the problem is solved, turn your plugins on one by one until the problem pops up again – there's the culprit! Let us know, and we'll try to help.", 'jetpack' ); ?></li>
- <li><b><em><?php esc_html_e( 'A theme conflict.', 'jetpack' ); ?></em></b> <?php esc_html_e( "If your problem isn't known or caused by a plugin, try activating Twenty Twelve (the default WordPress theme). If this solves the problem, something in your theme is probably broken – let the theme's author know.", 'jetpack' ); ?></li>
+ <li>
+ <b><em><?php esc_html_e( 'A theme conflict.', 'jetpack' ); ?></em></b>
+ <?php
+ $default_theme = wp_get_theme( WP_DEFAULT_THEME );
+
+ if ( $default_theme->exists() ) {
+ echo esc_html( sprintf( __( "If your problem isn't known or caused by a plugin, try activating %s (the default WordPress theme).", 'jetpack' ), $default_theme->get( 'Name' ) ) );
+ } else {
+ esc_html_e( "If your problem isn't known or caused by a plugin, try activating the default WordPress theme.", 'jetpack' );
+ }
+ ?>
+ <?php esc_html_e( "If this solves the problem, something in your theme is probably broken – let the theme's author know.", 'jetpack' ); ?>
+ </li>
<li><b><em><?php esc_html_e( 'A problem with your XMLRPC file.', 'jetpack' ); ?></em></b> <?php echo sprintf( __( 'Load your <a href="%s">XMLRPC file</a>. It should say “XML-RPC server accepts POST requests only.” on a line by itself.', 'jetpack' ), site_url( 'xmlrpc.php' ) ); ?>
<ul>
<li>- <?php esc_html_e( "If it's not by itself, a theme or plugin is displaying extra characters. Try steps 2 and 3.", 'jetpack' ); ?></li>
@@ -171,7 +212,22 @@ class Jetpack_Debugger {
<input type="hidden" name="contact_form" id="contact_form" value="1">
<input type="hidden" name="blog_url" id="blog_url" value="<?php echo esc_attr( site_url() ); ?>">
- <input type="hidden" name="subject" id="subject" value="from: <?php echo esc_attr( site_url() ); ?> Jetpack contact form">
+ <?php
+ $subject_line = sprintf(
+ /* translators: %s is the URL of the site */
+ _x( 'from: %s Jetpack contact form', 'Support request email subject line', 'jetpack' ),
+ esc_attr( site_url() )
+ );
+
+ if ( Jetpack::is_development_version() ) {
+ $subject_line = 'BETA ' . $subject_line;
+ }
+
+ $subject_line_input = printf(
+ '<input type="hidden" name="subject" id="subject" value="%s"">',
+ $subject_line
+ );
+ ?>
<div class="formbox">
<label for="message" class="h"><?php esc_html_e( 'Please describe the problem you are having.', 'jetpack' ); ?></label>
<textarea name="message" cols="40" rows="7" id="did"></textarea>
diff --git a/plugins/jetpack/class.jetpack-heartbeat.php b/plugins/jetpack/class.jetpack-heartbeat.php
index 744a3a08..2c1fa4f2 100644
--- a/plugins/jetpack/class.jetpack-heartbeat.php
+++ b/plugins/jetpack/class.jetpack-heartbeat.php
@@ -91,6 +91,11 @@ class Jetpack_Heartbeat {
$jetpack->do_stats( 'server_side' );
+ /**
+ * Fires when we synchronize all registered options on heartbeat.
+ *
+ * @since 3.3.0
+ */
do_action( 'jetpack_heartbeat' );
}
@@ -105,12 +110,15 @@ class Jetpack_Heartbeat {
$return["{$prefix}php-branch"] = floatval( PHP_VERSION );
$return["{$prefix}public"] = Jetpack_Options::get_option( 'public' );
$return["{$prefix}ssl"] = Jetpack::permit_ssl();
+ $return["{$prefix}is-https"] = is_ssl() ? 'https' : 'http';
$return["{$prefix}language"] = get_bloginfo( 'language' );
$return["{$prefix}charset"] = get_bloginfo( 'charset' );
$return["{$prefix}is-multisite"] = is_multisite() ? 'multisite' : 'singlesite';
$return["{$prefix}identitycrisis"] = Jetpack::check_identity_crisis( 1 ) ? 'yes' : 'no';
$return["{$prefix}plugins"] = implode( ',', Jetpack::get_active_plugins() );
+ $return["{$prefix}single-user-site"]= Jetpack::is_single_user_site();
+
$return["{$prefix}manage-enabled"] = Jetpack::is_module_active( 'manage' );
// is-multi-network can have three values, `single-site`, `single-network`, and `multi-network`
diff --git a/plugins/jetpack/class.jetpack-ixr-client.php b/plugins/jetpack/class.jetpack-ixr-client.php
index 7eefee5f..a3d67a34 100644
--- a/plugins/jetpack/class.jetpack-ixr-client.php
+++ b/plugins/jetpack/class.jetpack-ixr-client.php
@@ -1,5 +1,7 @@
<?php
+require_once( ABSPATH . WPINC . '/class-IXR.php' );
+
/**
* IXR_Client
*
@@ -8,9 +10,9 @@
*
*/
class Jetpack_IXR_Client extends IXR_Client {
- var $jetpack_args = null;
+ public $jetpack_args = null;
- function Jetpack_IXR_Client( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
+ function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
$defaults = array(
'url' => Jetpack::xmlrpc_api_url(),
'user_id' => 0,
@@ -29,10 +31,6 @@ class Jetpack_IXR_Client extends IXR_Client {
$request = new IXR_Request( $method, $args );
$xml = trim( $request->getXml() );
- $headers = array(
- 'Content-Type' => 'text/xml',
- );
-
$response = Jetpack_Client::remote_request( $this->jetpack_args, $xml );
if ( is_wp_error( $response ) ) {
@@ -97,10 +95,10 @@ class Jetpack_IXR_Client extends IXR_Client {
* @since 1.5
*/
class Jetpack_IXR_ClientMulticall extends Jetpack_IXR_Client {
- var $calls = array();
+ public $calls = array();
- function Jetpack_IXR_ClientMulticall( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
- parent::Jetpack_IXR_Client( $args, $path, $port, $timeout );
+ function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
+ parent::__construct( $args, $path, $port, $timeout );
}
function addCall() {
diff --git a/plugins/jetpack/class.jetpack-jitm.php b/plugins/jetpack/class.jetpack-jitm.php
new file mode 100644
index 00000000..a4760400
--- /dev/null
+++ b/plugins/jetpack/class.jetpack-jitm.php
@@ -0,0 +1,426 @@
+<?php
+
+/**
+ * Jetpack just in time messaging through out the admin
+ *
+ * @since 3.7.0
+ */
+class Jetpack_JITM {
+
+ /**
+ * @var Jetpack_JITM
+ **/
+ private static $instance = null;
+
+ /**
+ * Get user dismissed messages.
+ *
+ * @var array
+ */
+ private static $jetpack_hide_jitm = null;
+
+ /**
+ * Whether plugin auto updates are allowed in this WordPress installation or not.
+ *
+ * @var bool
+ */
+ private static $auto_updates_allowed = false;
+
+ static function init() {
+ if ( is_null( self::$instance ) ) {
+ self::$instance = new Jetpack_JITM;
+ }
+
+ return self::$instance;
+ }
+
+ private function __construct() {
+ if ( ! Jetpack::is_active() || self::is_jitm_dismissed() ) {
+ return;
+ }
+ add_action( 'current_screen', array( $this, 'prepare_jitms' ) );
+ }
+
+ /**
+ * Prepare actions according to screen and post type.
+ *
+ * @since 3.8.2
+ *
+ * @uses Jetpack_Autoupdate::get_possible_failures()
+ *
+ * @param object $screen
+ */
+ function prepare_jitms( $screen ) {
+ if ( ! current_user_can( 'jetpack_manage_modules' ) ) {
+ return;
+ }
+ global $pagenow;
+
+ // Only show auto update JITM if auto updates are allowed in this installation
+ $possible_reasons_for_failure = Jetpack_Autoupdate::get_possible_failures();
+ self::$auto_updates_allowed = empty( $possible_reasons_for_failure );
+ $photon_inactive = ! Jetpack::is_module_active( 'photon' );
+
+ if ( 'media-new.php' == $pagenow && $photon_inactive ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ add_action( 'post-plupload-upload-ui', array( $this, 'photon_msg' ) );
+ }
+ elseif ( 'post-new.php' == $pagenow ) {
+ $calypso_supported_post_types = in_array( $screen->post_type, array( 'post', 'page' ) );
+ if ( $calypso_supported_post_types || $photon_inactive ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ }
+ if ( $calypso_supported_post_types ) {
+ add_action( 'admin_notices', array( $this, 'editor_msg' ) );
+ }
+ if ( $photon_inactive ) {
+ add_action( 'print_media_templates', array( $this, 'photon_tmpl' ) );
+ }
+ }
+ elseif ( 'post.php' == $pagenow ) {
+ $user_published = isset( $_GET['message'] ) && 6 == $_GET['message'];
+ if ( $user_published || $photon_inactive ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ }
+ if ( $user_published ) {
+ add_action( 'edit_form_top', array( $this, 'stats_msg' ) );
+ }
+ if ( $photon_inactive ) {
+ add_action( 'print_media_templates', array( $this, 'photon_tmpl' ) );
+ }
+ }
+ elseif ( self::$auto_updates_allowed ) {
+ if ( 'update-core.php' == $pagenow && ! Jetpack::is_module_active( 'manage' ) ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ add_action( 'admin_notices', array( $this, 'manage_msg' ) );
+ }
+ elseif ( 'plugins.php' == $pagenow ) {
+ if ( ( isset( $_GET['activate'] ) && 'true' === $_GET['activate'] ) || ( isset( $_GET['activate-multi'] ) && 'true' === $_GET['activate-multi'] ) ) {
+ add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
+ add_action( 'pre_current_active_plugins', array( $this, 'manage_pi_msg' ) );
+ } else {
+
+ // Save plugins that are activated. This is used when one or more plugins are activated to know
+ // what was activated and use it in Jetpack_JITM::manage_pi_msg() before deleting the option.
+ $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
+ $action = $wp_list_table->current_action();
+ if ( $action && ( 'activate' == $action || 'activate-selected' == $action ) ) {
+ update_option( 'jetpack_temp_active_plugins_before', get_option( 'active_plugins', array() ) );
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * Present Manage just in time activation msg on update-core.php
+ *
+ */
+ function manage_msg() {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ ?>
+ <div class="jp-jitm">
+ <a href="#" data-module="manage" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Reduce security risks with automated plugin updates.', 'jetpack' ); ?>
+ </p>
+
+ <p>
+ <img class="j-spinner hide" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="<?php echo esc_attr__( 'Loading...', 'jetpack' ); ?>" /><a href="#" data-module="manage" class="activate button <?php if ( Jetpack::is_module_active( 'manage' ) ) {
+ echo 'hide';
+ } ?>"><?php esc_html_e( 'Activate Now', 'jetpack' ); ?></a><a href="<?php echo esc_url( 'https://wordpress.com/plugins/' . $normalized_site_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Go to WordPress.com to try these features', 'jetpack' ); ?>" id="jetpack-wordpressdotcom" class="button button-jetpack <?php if ( ! Jetpack::is_module_active( 'manage' ) ) {
+ echo 'hide';
+ } ?>"><?php esc_html_e( 'Go to WordPress.com', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'manage-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ /*
+ * Present Photon just in time activation msg
+ *
+ */
+ function photon_msg() {
+ ?>
+ <div class="jp-jitm">
+ <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Speed up your photos and save bandwidth costs by using a free content delivery network.', 'jetpack' ); ?>
+ </p>
+
+ <p>
+ <img class="j-spinner hide" style="margin-top: 13px;" width="17" height="17" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="<?php echo esc_attr__( 'Loading...', 'jetpack' ); ?>" /><a href="#" data-module="photon" class="activate button button-jetpack"><?php esc_html_e( 'Activate Photon', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'photon-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ /**
+ * Display Photon JITM template in Media Library after user uploads an image.
+ *
+ * @since 3.9.0
+ */
+ function photon_tmpl() {
+ ?>
+ <script id="tmpl-jitm-photon" type="text/html">
+ <div class="jp-jitm" data-track="photon-modal">
+ <a href="#" data-module="photon" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Let Jetpack deliver your images optimized and faster than ever.', 'jetpack' ); ?>
+ </p>
+
+ <p>
+ <img class="j-spinner hide" style="margin-top: 13px;" width="17" height="17" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="<?php echo esc_attr__( 'Loading...', 'jetpack' ); ?>" /><a href="#" data-module="photon" class="activate button button-jetpack"><?php esc_html_e( 'Activate Photon', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ </script>
+ <?php
+ }
+
+ /**
+ * Display message prompting user to enable auto-updates in WordPress.com.
+ *
+ * @since 3.8.2
+ */
+ function manage_pi_msg() {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ $manage_active = Jetpack::is_module_active( 'manage' );
+
+ // Check if plugin has auto update already enabled in WordPress.com and don't show JITM in such case.
+ $active_before = get_option( 'jetpack_temp_active_plugins_before', array() );
+ delete_option( 'jetpack_temp_active_plugins_before' );
+ $active_now = get_option( 'active_plugins', array() );
+ $activated = array_diff( $active_now, $active_before );
+ $auto_update_plugin_list = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
+ $plugin_auto_update_disabled = false;
+ foreach ( $activated as $plugin ) {
+ if ( ! in_array( $plugin, $auto_update_plugin_list ) ) {
+
+ // Plugin doesn't have auto updates enabled in WordPress.com yet.
+ $plugin_auto_update_disabled = true;
+
+ // We don't need to continue checking, it's ok to show JITM for this plugin.
+ break;
+ }
+ }
+
+ // Check if the activated plugin is in the WordPress.org repository
+ $plugin_can_auto_update = false;
+ $plugin_updates = get_site_transient( 'update_plugins' );
+ if ( false === $plugin_updates ) {
+
+ // If update_plugins doesn't exist, display message anyway
+ $plugin_can_auto_update = true;
+ } else {
+ $plugin_updates = array_merge( $plugin_updates->response, $plugin_updates->no_update );
+ foreach ( $activated as $plugin ) {
+ if ( isset( $plugin_updates[ $plugin ] ) ) {
+
+ // There's at least one plugin set cleared for auto updates
+ $plugin_can_auto_update = true;
+
+ // We don't need to continue checking, it's ok to show JITM for this round.
+ break;
+ }
+ }
+ }
+
+ if ( ! $manage_active && $plugin_auto_update_disabled && $plugin_can_auto_update && self::$auto_updates_allowed ) :
+ ?>
+ <div class="jp-jitm">
+ <a href="#" data-module="manage-pi" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <?php if ( ! $manage_active ) : ?>
+ <p class="msg">
+ <?php esc_html_e( 'Save time with automated plugin updates.', 'jetpack' ); ?>
+ </p>
+ <p>
+ <img class="j-spinner hide" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="<?php echo esc_attr__( 'Loading...', 'jetpack' ); ?>" /><a href="#" data-module="manage" data-module-success="<?php esc_attr_e( 'Success!', 'jetpack' ); ?>" class="activate button"><?php esc_html_e( 'Activate remote management', 'jetpack' ); ?></a>
+ </p>
+ <?php elseif ( $manage_active ) : ?>
+ <p>
+ <?php esc_html_e( 'Save time with auto updates on WordPress.com', 'jetpack' ); ?>
+ </p>
+ <?php endif; // manage inactive
+ ?>
+ <p class="show-after-enable <?php echo $manage_active ? '' : 'hide'; ?>">
+ <a href="<?php echo esc_url( 'https://wordpress.com/plugins/' . $normalized_site_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Go to WordPress.com to enable auto-updates for plugins', 'jetpack' ); ?>" data-module="manage-pi" class="button button-jetpack launch show-after-enable"><?php if ( ! $manage_active ) : ?><?php esc_html_e( 'Enable auto-updates on WordPress.com', 'jetpack' ); ?><?php elseif ( $manage_active ) : ?><?php esc_html_e( 'Enable auto-updates', 'jetpack' ); ?><?php endif; // manage inactive ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'manage-pi-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ endif; // manage inactive
+ }
+
+ /**
+ * Display message in editor prompting user to compose entry in WordPress.com.
+ *
+ * @since 3.8.2
+ */
+ function editor_msg() {
+ global $typenow;
+ if ( current_user_can( 'manage_options' ) ) {
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ $editor_dismissed = isset( self::$jetpack_hide_jitm['editor'] );
+ if ( ! $editor_dismissed ) :
+ ?>
+ <div class="jp-jitm">
+ <a href="#" data-module="editor" class="dismiss"><span class="genericon genericon-close"></span></a>
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Try the brand new editor.', 'jetpack' ); ?>
+ </p>
+ <p>
+ <a href="<?php echo esc_url( 'https://wordpress.com/' . $typenow . '/' . $normalized_site_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Write on WordPress.com', 'jetpack' ); ?>" data-module="editor" class="button button-jetpack launch show-after-enable"><?php esc_html_e( 'Write on WordPress.com', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'editor-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ endif; // manage or editor inactive
+ }
+ }
+
+ /**
+ * Display message in editor prompting user to enable stats.
+ *
+ * @since 3.9.0
+ */
+ function stats_msg() {
+ $stats_active = Jetpack::is_module_active( 'stats' );
+ $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
+ ?>
+ <div class="jp-jitm">
+ <a href="#" data-module="stats" class="dismiss"><span class="genericon genericon-close"></span></a>
+
+ <div class="jp-emblem">
+ <?php echo self::get_jp_emblem(); ?>
+ </div>
+ <p class="msg">
+ <?php esc_html_e( 'Track detailed stats on this post and the rest of your site.', 'jetpack' ); ?>
+ </p>
+ <?php if ( ! $stats_active ) : ?>
+ <p>
+ <img class="j-spinner hide" src="<?php echo esc_url( includes_url( 'images/spinner-2x.gif' ) ); ?>" alt="<?php echo esc_attr__( 'Loading...', 'jetpack' ); ?>" /><a href="#" data-module="stats" data-module-success="<?php esc_attr_e( 'Success! Jetpack Stats is now activated.', 'jetpack' ); ?>" class="activate button"><?php esc_html_e( 'Enable Jetpack Stats', 'jetpack' ); ?></a>
+ </p>
+ <?php endif; // stats inactive
+ ?>
+ <p class="show-after-enable <?php echo $stats_active ? '' : 'hide'; ?>">
+ <a href="<?php echo esc_url( 'https://wordpress.com/stats/insights/' . $normalized_site_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Go to WordPress.com', 'jetpack' ); ?>" data-module="stats" class="button button-jetpack launch show-after-enable"><?php esc_html_e( 'Go to WordPress.com', 'jetpack' ); ?></a>
+ </p>
+ </div>
+ <?php
+ //jitm is being viewed, track it
+ $jetpack = Jetpack::init();
+ $jetpack->stat( 'jitm', 'post-stats-viewed-' . JETPACK__VERSION );
+ $jetpack->do_stats( 'server_side' );
+ }
+
+ /*
+ * Function to enqueue jitm css and js
+ */
+ function jitm_enqueue_files( $hook ) {
+
+ $wp_styles = new WP_Styles();
+ $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
+ wp_enqueue_style( 'jetpack-jitm-css', plugins_url( "css/jetpack-admin-jitm{$min}.css", JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION . '-201243242' );
+ $wp_styles->add_data( 'jetpack-jitm-css', 'rtl', true );
+
+ //Build stats url for tracking manage button
+ $jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => 'wordpresstools' ) );
+
+ // Enqueue javascript to handle jitm notice events
+ wp_enqueue_script( 'jetpack-jitm-js', plugins_url( '_inc/jetpack-jitm.js', JETPACK__PLUGIN_FILE ),
+ array( 'jquery' ), JETPACK__VERSION, true );
+ wp_localize_script(
+ 'jetpack-jitm-js',
+ 'jitmL10n',
+ array(
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
+ 'jitm_nonce' => wp_create_nonce( 'jetpack-jitm-nonce' ),
+ 'photon_msgs' => array(
+ 'success' => esc_html__( 'Success! Photon is now actively optimizing and serving your images for free.', 'jetpack' ),
+ 'fail' => esc_html__( 'We are sorry but unfortunately Photon did not activate.', 'jetpack' )
+ ),
+ 'manage_msgs' => array(
+ 'success' => esc_html__( 'Success! WordPress.com tools are now active.', 'jetpack' ),
+ 'fail' => esc_html__( 'We are sorry but unfortunately Manage did not activate.', 'jetpack' )
+ ),
+ 'stats_msgs' => array(
+ 'success' => esc_html__( 'Success! Stats are now active.', 'jetpack' ),
+ 'fail' => esc_html__( 'We are sorry but unfortunately Stats did not activate.', 'jetpack' )
+ ),
+ 'jitm_stats_url' => $jitm_stats_url
+ )
+ );
+ }
+
+ /**
+ * Check if a JITM was dismissed or not. Currently, dismissing one JITM will dismiss all of them.
+ *
+ * @since 3.8.2
+ *
+ * @return bool
+ */
+ function is_jitm_dismissed() {
+ if ( is_null( self::$jetpack_hide_jitm ) ) {
+
+ // The option returns false when nothing was dismissed
+ self::$jetpack_hide_jitm = Jetpack_Options::get_option( 'hide_jitm' );
+ }
+
+ // so if it's not an array, it means no JITM was dismissed
+ return is_array( self::$jetpack_hide_jitm );
+ }
+
+ /**
+ * Return string containing the Jetpack logo.
+ *
+ * @since 3.9.0
+ *
+ * @return string
+ */
+ function get_jp_emblem() {
+ return '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0" y="0" viewBox="0 0 172.9 172.9" enable-background="new 0 0 172.9 172.9" xml:space="preserve"> <path d="M86.4 0C38.7 0 0 38.7 0 86.4c0 47.7 38.7 86.4 86.4 86.4s86.4-38.7 86.4-86.4C172.9 38.7 134.2 0 86.4 0zM83.1 106.6l-27.1-6.9C49 98 45.7 90.1 49.3 84l33.8-58.5V106.6zM124.9 88.9l-33.8 58.5V66.3l27.1 6.9C125.1 74.9 128.4 82.8 124.9 88.9z" /></svg>';
+ }
+}
+/**
+ * Filter to turn off all just in time messages
+ *
+ * @since 3.7.0
+ *
+ * @param bool true Whether to show just in time messages.
+ */
+if ( apply_filters( 'jetpack_just_in_time_msgs', false ) ) {
+ Jetpack_JITM::init();
+} \ No newline at end of file
diff --git a/plugins/jetpack/class.jetpack-modules-list-table.php b/plugins/jetpack/class.jetpack-modules-list-table.php
index fb649f33..941bae75 100644
--- a/plugins/jetpack/class.jetpack-modules-list-table.php
+++ b/plugins/jetpack/class.jetpack-modules-list-table.php
@@ -18,8 +18,16 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
$this->items = $this->all_items = Jetpack_Admin::init()->get_modules();
$this->items = $this->filter_displayed_table_items( $this->items );
+ /**
+ * Filters the list of modules available to be displayed in the Jetpack Settings screen.
+ *
+ * @since 3.0.0
+ *
+ * @param array $this->items Array of Jetpack modules.
+ */
$this->items = apply_filters( 'jetpack_modules_list_table_items', $this->items );
- $this->_column_headers = array( $this->get_columns(), array(), array() );
+ $this->_column_headers = array( $this->get_columns(), array(), array(), 'name' );
+ $modal_info = isset( $_GET['info'] ) ? $_GET['info'] : false;
wp_register_script(
'models.jetpack-modules',
@@ -50,13 +58,23 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
'i18n' => array(
'search_placeholder' => __( 'Search Modules…', 'jetpack' ),
),
+ 'modalinfo' => $this->module_info_check( $modal_info, $this->all_items ),
'nonces' => array(
'bulk' => wp_create_nonce( 'bulk-jetpack_page_jetpack_modules' ),
),
+ 'coreIconAvailable' => Jetpack::jetpack_site_icon_available_in_core(),
) );
wp_enqueue_script( 'jetpack-modules-list-table' );
- add_action( 'admin_footer', array( $this, 'js_templates' ), 9 );
+
+ /**
+ * Filters the js_templates callback value.
+ *
+ * @since 3.6.0
+ *
+ * @param array array( $this, 'js_templates' ) js_templates callback.
+ */
+ add_action( 'admin_footer', apply_filters( 'jetpack_modules_list_table_js_template_callback', array( $this, 'js_templates' ) ), 9 );
}
function js_templates() {
@@ -66,7 +84,20 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
if ( data.items.length ) {
_.each( data.items, function( item, key, list ) {
if ( item === undefined ) return;
- #>
+ if ( jetpackModulesData.coreIconAvailable && 'site-icon' == item.module ) { #>
+ <tr class="jetpack-module deprecated <# if ( ++i % 2 ) { #> alternate<# } #>" id="site-icon-deprecated">
+ <th scope="row" class="check-column">
+ <input type="checkbox" name="modules[]" value="{{{ item.module }}}" disabled />
+ </th>
+ <td class='name column-name'>
+ <span class='info'>{{{ item.name }}}</span>
+ <div class="row-actions">
+ <span class="dep-msg"><?php _ex( 'WordPress now has Site Icon built in!', '"Site Icon" is the feature name.', 'jetpack' ); ?></span>
+ <span class='configure'><a href="<?php esc_html_e( admin_url( 'customize.php?autofocus[control]=site_icon' ), 'jetpack' ); ?>"><?php _e( 'Configure' , 'jetpack' ); ?></a></span>
+ </div>
+ </td>
+ </tr>
+ <# return; } #>
<tr class="jetpack-module <# if ( ++i % 2 ) { #> alternate<# } #><# if ( item.activated ) { #> active<# } #><# if ( ! item.available ) { #> unavailable<# } #>" id="{{{ item.module }}}">
<th scope="row" class="check-column">
<input type="checkbox" name="modules[]" value="{{{ item.module }}}" />
@@ -77,7 +108,7 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
<# if ( item.configurable ) { #>
<span class='configure'>{{{ item.configurable }}}</span>
<# } #>
- <# if ( item.activated && 'vaultpress' !== item.module ) { #>
+ <# if ( item.activated && 'vaultpress' !== item.module && item.available ) { #>
<span class='delete'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=deactivate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.deactivate_nonce }}}"><?php _e( 'Deactivate', 'jetpack' ); ?></a></span>
<# } else if ( item.available ) { #>
<span class='activate'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=activate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.activate_nonce }}}"><?php _e( 'Activate', 'jetpack' ); ?></a></span>
@@ -115,7 +146,7 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
'all' => sprintf( $format, $title, $count, $url, $current ),
);
foreach ( $module_tags_unique as $title => $count ) {
- if( 'Jumpstart' == $title ) {
+ if ( 'Jumpstart' == $title ) {
continue;
}
$key = sanitize_title( $title );
@@ -148,7 +179,11 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
if ( ! is_array( $module ) || empty( $module ) )
return false;
- return ! ( $module['requires_connection'] && ! Jetpack::is_active() );
+ if ( Jetpack::is_development_mode() ) {
+ return ! ( $module['requires_connection'] );
+ } else {
+ return Jetpack::is_active();
+ }
}
static function is_module_displayed( $module ) {
@@ -266,14 +301,13 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
function column_description( $item ) {
ob_start();
+ /** This action is documented in class.jetpack-admin.php */
echo apply_filters( 'jetpack_short_module_description', $item['description'], $item['module'] );
+ /** This action is documented in class.jetpack-admin.php */
do_action( 'jetpack_learn_more_button_' . $item['module'] );
echo '<div id="more-info-' . $item['module'] . '" class="more-info">';
- if ( Jetpack::is_active() && has_action( 'jetpack_module_more_info_connected_' . $item['module'] ) ) {
- do_action( 'jetpack_module_more_info_connected_' . $item['module'] );
- } else {
- do_action( 'jetpack_module_more_info_' . $item['module'] );
- }
+ /** This action is documented in class.jetpack-admin.php */
+ do_action( 'jetpack_module_more_info_' . $item['module'] );
echo '</div>';
return ob_get_clean();
}
@@ -297,6 +331,15 @@ class Jetpack_Modules_List_Table extends WP_List_Table {
}
}
+ //Check if the info parameter provided in the URL corresponds to an actual module
+ function module_info_check( $info = false, $modules ) {
+ if ( false == $info ) {
+ return false;
+ } else if ( array_key_exists( $info, $modules ) ) {
+ return $info;
+ }
+ }
+
/**
* Core switched their `display_tablenav()` method to protected, so we can't access it directly.
* Instead, let's include an access function to make it doable without errors!
diff --git a/plugins/jetpack/class.jetpack-network-sites-list-table.php b/plugins/jetpack/class.jetpack-network-sites-list-table.php
index b8a3bfc5..ad89ed3a 100644
--- a/plugins/jetpack/class.jetpack-network-sites-list-table.php
+++ b/plugins/jetpack/class.jetpack-network-sites-list-table.php
@@ -6,7 +6,7 @@ if( ! class_exists( 'WP_List_Table' ) ) {
class Jetpack_Network_Sites_List_Table extends WP_List_Table {
-
+
public function get_columns() {
// site name, status, username connected under
$columns = array(
@@ -26,10 +26,13 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
$this->process_bulk_action();
// Get sites
- $sites = $jpms->wp_get_sites( array( 'exclude_blogs' => array( 1 ) ) );
-
+ $sites = $jpms->wp_get_sites( array(
+ 'exclude_blogs' => array( 1 ),
+ 'archived' => false,
+ ) );
+
// Setup pagination
- $per_page = 40;
+ $per_page = 25;
$current_page = $this->get_pagenum();
$total_items = count( $sites );
$sites = array_slice( $sites, ( ( $current_page-1 ) * $per_page ), $per_page );
@@ -55,15 +58,15 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
'edit' => '<a href="' . network_admin_url( 'site-info.php?id=' . $item->blog_id ) . '">' . __( 'Edit', 'jetpack' ) . '</a>',
'dashboard' => '<a href="' . get_admin_url( $item->blog_id, '', 'admin' ) . '">Dashboard</a>',
'view' => '<a href="' . get_site_url( $item->blog_id, '', 'admin' ) . '">View</a>',
- 'jetpack-' . $item->blog_id => '<a href="' . $jp_url . '">Jetpack</a>',
+ 'jetpack-' . $item->blog_id => '<a href="' . $jp_url . '">Jetpack</a>',
);
return sprintf('%1$s %2$s', '<strong>' . get_blog_option( $item->blog_id, 'blogname' ) . '</strong>', $this->row_actions($actions) );
}
public function column_blog_path( $item ) {
- return
- '<a href="' .
+ return
+ '<a href="' .
get_site_url( $item->blog_id, '', 'admin' ) .
'">' .
str_replace( array( 'http://', 'https://' ), '', get_site_url( $item->blog_id, '', 'admin' ) ) .
@@ -76,7 +79,7 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
switch_to_blog( $item->blog_id );
if( $jp->is_active() ) {
- // Build url for disconnecting
+ // Build url for disconnecting
$url = $jpms->get_url( array(
'name' => 'subsitedisconnect',
'site_id' => $item->blog_id,
@@ -86,7 +89,7 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
return '<a href="' . $url . '">Disconnect</a>';
}
restore_current_blog();
-
+
// Build URL for connecting
$url = $jpms->get_url( array(
'name' => 'subsiteregister',
@@ -107,7 +110,7 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
function column_cb($item) {
return sprintf(
'<input type="checkbox" name="bulk[]" value="%s" />', $item->blog_id
- );
+ );
}
public function process_bulk_action() {
@@ -123,7 +126,7 @@ class Jetpack_Network_Sites_List_Table extends WP_List_Table {
case 'connect':
foreach( $_POST['bulk'] as $k => $site ) {
$jpms->do_subsiteregister( $site );
- }
+ }
break;
case 'disconnect':
foreach( $_POST['bulk'] as $k => $site ) {
diff --git a/plugins/jetpack/class.jetpack-network.php b/plugins/jetpack/class.jetpack-network.php
index de78edf5..620f939f 100644
--- a/plugins/jetpack/class.jetpack-network.php
+++ b/plugins/jetpack/class.jetpack-network.php
@@ -34,9 +34,9 @@ class Jetpack_Network {
* @var array
*/
private $setting_defaults = array(
- 'auto-connect' => 0,
- 'sub-site-connection-override' => 1,
- // 'manage_auto_activated_modules' => 0,
+ 'auto-connect' => 0,
+ 'sub-site-connection-override' => 1,
+ //'manage_auto_activated_modules' => 0,
);
/**
@@ -45,34 +45,34 @@ class Jetpack_Network {
* @since 2.9
*/
private function __construct() {
- require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); // For the is_plugin... check
+ require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); // For the is_plugin... check
+ require_once( JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php' ); // For managing the global whitelist
/*
* Sanity check to ensure the install is Multisite and we
* are in Network Admin
*/
- if (is_multisite() && is_network_admin()) {
- add_action('network_admin_menu', array($this, 'add_network_admin_menu'));
- add_action('network_admin_edit_jetpack-network-settings', array($this, 'save_network_settings_page'), 10, 0);
+ if ( is_multisite() && is_network_admin() ) {
+ add_action( 'network_admin_menu', array( $this, 'add_network_admin_menu' ) );
+ add_action( 'network_admin_edit_jetpack-network-settings', array( $this, 'save_network_settings_page' ), 10, 0 );
add_filter( 'admin_body_class', array( $this, 'body_class' ) );
- if( isset( $_GET['page'] ) && 'jetpack' == $_GET['page'] ) {
- add_action( 'admin_init', array ( $this, 'jetpack_sites_list' ) );
+ if ( isset( $_GET['page'] ) && 'jetpack' == $_GET['page'] ) {
+ add_action( 'admin_init', array( $this, 'jetpack_sites_list' ) );
}
}
/*
* Things that should only run on multisite
*/
- if( is_multisite() && is_plugin_active_for_network( 'jetpack/jetpack.php' ) ) {
+ if ( is_multisite() && is_plugin_active_for_network( 'jetpack/jetpack.php' ) ) {
add_action( 'wp_before_admin_bar_render', array( $this, 'add_to_menubar' ) );
-
/*
* If admin wants to automagically register new sites set the hook here
*
* This is a hacky way because xmlrpc is not available on wpmu_new_blog
*/
- if( $this->get_option( 'auto-connect' ) == 1 ) {
+ if ( $this->get_option( 'auto-connect' ) == 1 ) {
add_action( 'wpmu_new_blog', array( $this, 'do_automatically_add_new_site' ) );
}
}
@@ -86,27 +86,29 @@ class Jetpack_Network {
* Modules can be set in Network Admin > Jetpack > Settings
*
* @since 2.9
+ *
* @param array $modules
+ *
* @return array
**/
public function set_auto_activated_modules( $modules ) {
return $modules;
-/* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
+ /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
if( 1 == $this->get_option( 'manage_auto_activated_modules' ) ) {
return (array) $this->get_option( 'modules' );
} else {
return $modules;
}
-*/
+ */
}
-
/**
* Registers new sites upon creation
*
* @since 2.9
- * @uses wpmu_new_blog
+ * @uses wpmu_new_blog
+ *
* @param int $blog_id
**/
public function do_automatically_add_new_site( $blog_id ) {
@@ -115,7 +117,7 @@ class Jetpack_Network {
/**
* Adds .network-admin class to the body tag
- * Helps distiguish network admin JP styles from regular site JP styles
+ * Helps distinguish network admin JP styles from regular site JP styles
*
* @since 2.9
*/
@@ -132,7 +134,7 @@ class Jetpack_Network {
* @return Jetpack_Network
*/
public static function init() {
- if (!self::$instance || !is_a(self::$instance, 'Jetpack_Network')) {
+ if ( ! self::$instance || ! is_a( self::$instance, 'Jetpack_Network' ) ) {
self::$instance = new Jetpack_Network;
}
@@ -160,11 +162,14 @@ class Jetpack_Network {
* @since 2.9
**/
public function deactivate() {
- if( !is_network_admin() ) return; // Only fire if in network admin
+ // Only fire if in network admin
+ if ( ! is_network_admin() ) {
+ return;
+ }
$sites = $this->wp_get_sites();
- foreach( $sites as $s ) {
+ foreach ( $sites as $s ) {
switch_to_blog( $s->blog_id );
$active_plugins = get_option( 'active_plugins' );
@@ -174,7 +179,7 @@ class Jetpack_Network {
* individually (before network activation) stay activated
* when the network deactivation occurs
*/
- if( !in_array( 'jetpack/jetpack.php', $active_plugins ) ) {
+ if ( ! in_array( 'jetpack/jetpack.php', $active_plugins ) ) {
Jetpack::disconnect();
}
}
@@ -182,23 +187,24 @@ class Jetpack_Network {
}
/**
- * Adds a link to the Jetpack Network Admin page in the netowrk admin menu bar.
+ * Adds a link to the Jetpack Network Admin page in the network admin menu bar.
*
* @since 2.9
**/
- public function add_to_menubar () {
+ public function add_to_menubar() {
global $wp_admin_bar;
// Don't show for logged out users or single site mode.
- if ( ! is_user_logged_in() || ! is_multisite() )
- return;
-
- $wp_admin_bar->add_node( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-jetpack',
- 'title' => __( 'Jetpack' , 'jetpack' ),
- 'href' => $this->get_url( 'network_admin_page' ),
+ if ( ! is_user_logged_in() || ! is_multisite() ) {
+ return;
+ }
+
+ $wp_admin_bar->add_node( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-jetpack',
+ 'title' => __( 'Jetpack', 'jetpack' ),
+ 'href' => $this->get_url( 'network_admin_page' ),
) );
- }
+ }
/**
* Returns various URL strings. Factory like
@@ -212,40 +218,46 @@ class Jetpack_Network {
* - subsitedisconnect: Pass array( 'name' => 'subsitedisconnect', 'site_id' => SITE_ID )
*
* @since 2.9
+ *
* @param Mixed $args
+ *
* @return String
**/
public function get_url( $args ) {
$url = null; // Default url value
- if( is_string( $args ) )
- $name = $args;
- else
- $name = $args['name'];
-
+ if ( is_string( $args ) ) {
+ $name = $args;
+ } else {
+ $name = $args['name'];
+ }
- switch( $name ) {
- case 'subsiteregister':
- if( !isset( $args['site_id'] ) ) {
- break; // If there is not a site id present we cannot go further
- }
- $url = network_admin_url(
- 'admin.php?page=jetpack&action=subsiteregister&site_id='
- . $args['site_id'] );
- break;
-
- case 'network_admin_page':
- $url = network_admin_url( 'admin.php?page=jetpack' );
- break;
- case 'subsitedisconnect':
- if( !isset( $args['site_id'] ) ) {
- break; // If there is not a site id present we cannot go further
- }
- $url = network_admin_url(
- 'admin.php?page=jetpack&action=subsitedisconnect&site_id='
- . $args['site_id'] );
- break;
+ switch ( $name ) {
+ case 'subsiteregister':
+ if ( ! isset( $args['site_id'] ) ) {
+ break; // If there is not a site id present we cannot go further
+ }
+ $url = network_admin_url(
+ 'admin.php?page=jetpack&action=subsiteregister&site_id='
+ . $args['site_id']
+ );
+ break;
+
+ case 'network_admin_page':
+ $url = network_admin_url( 'admin.php?page=jetpack' );
+ break;
+
+ case 'subsitedisconnect':
+ if ( ! isset( $args['site_id'] ) ) {
+ break; // If there is not a site id present we cannot go further
+ }
+ $url = network_admin_url(
+ 'admin.php?page=jetpack&action=subsitedisconnect&site_id='
+ . $args['site_id']
+ );
+ break;
}
+
return $url;
}
@@ -255,9 +267,9 @@ class Jetpack_Network {
* @since 2.9
*/
public function add_network_admin_menu() {
- add_menu_page( __('Jetpack', 'jetpack'), __('Jetpack', 'jetpack'), 'read', 'jetpack', array($this, 'network_admin_page'), 'div', 3);
- add_submenu_page('jetpack', __('Jetpack Sites', 'jetpack'), __('Sites', 'jetpack'), 'manage_options', 'jetpack', array($this, 'network_admin_page'));
- add_submenu_page('jetpack', __('Settings', 'jetpack'), __('Settings', 'jetpack'), 'read', 'jetpack-settings', array($this, 'render_network_admin_settings_page'));
+ add_menu_page( __( 'Jetpack', 'jetpack' ), __( 'Jetpack', 'jetpack' ), 'jetpack_network_admin_page', 'jetpack', array( $this, 'network_admin_page' ), 'div', 3 );
+ add_submenu_page( 'jetpack', __( 'Jetpack Sites', 'jetpack' ), __( 'Sites', 'jetpack' ), 'jetpack_network_sites_page', 'jetpack', array( $this, 'network_admin_page' ) );
+ add_submenu_page( 'jetpack', __( 'Settings', 'jetpack' ), __( 'Settings', 'jetpack' ), 'jetpack_network_settings_page', 'jetpack-settings', array( $this, 'render_network_admin_settings_page' ) );
/**
* As jetpack_register_genericons is by default fired off a hook,
@@ -267,18 +279,19 @@ class Jetpack_Network {
require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
jetpack_register_genericons();
- if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
+ if ( ! wp_style_is( 'jetpack-icons', 'registered' ) ) {
wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
+ }
add_action( 'admin_enqueue_scripts', array( $this, 'admin_menu_css' ) );
}
- /**
+ /**
* Adds JP menu icon
*
* @since 2.9
**/
- function admin_menu_css() {
+ function admin_menu_css() {
wp_enqueue_style( 'jetpack-icons' );
}
@@ -291,8 +304,8 @@ class Jetpack_Network {
public function jetpack_sites_list() {
Jetpack::init();
- if( isset( $_GET['action'] ) ) {
- switch( $_GET['action'] ) {
+ if ( isset( $_GET['action'] ) ) {
+ switch ( $_GET['action'] ) {
case 'subsiteregister':
/*
* @todo check_admin_referer( 'jetpack-subsite-register' );
@@ -300,19 +313,20 @@ class Jetpack_Network {
Jetpack::log( 'subsiteregister' );
// If !$_GET['site_id'] stop registration and error
- if( !isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
- // Log error to state cookie for display later
- /**
- * @todo Make state messages show on Jetpack NA pages
- **/
- Jetpack::state( 'missing_site_id', 'Site ID must be provided to register a sub-site' );
+ if ( ! isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
+ // Log error to state cookie for display later
+ /**
+ * @todo Make state messages show on Jetpack NA pages
+ **/
+ Jetpack::state( 'missing_site_id', 'Site ID must be provided to register a sub-site' );
break;
}
// Send data to register endpoint and retrieve shadow blog details
$result = $this->do_subsiteregister();
- $url = $this->get_url( 'network_admin_page' );
- if( is_wp_error( $result ) ) {
+ $url = $this->get_url( 'network_admin_page' );
+
+ if ( is_wp_error( $result ) ) {
$url = add_query_arg( 'action', 'connection_failed', $url );
} else {
$url = add_query_arg( 'action', 'connected', $url );
@@ -320,16 +334,18 @@ class Jetpack_Network {
wp_safe_redirect( $url );
break;
+
case 'subsitedisconnect':
Jetpack::log( 'subsitedisconnect' );
- if( !isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
+ if ( ! isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
Jetpack::state( 'missing_site_id', 'Site ID must be provided to disconnect a sub-site' );
break;
}
$this->do_subsitedisconnect();
break;
+
case 'connected':
case 'connection_failed':
add_action( 'jetpack_notices', array( $this, 'show_jetpack_notice' ) );
@@ -339,11 +355,10 @@ class Jetpack_Network {
}
public function show_jetpack_notice() {
-
- if( isset( $_GET['action'] ) && 'connected' == $_GET['action'] ) {
- $notice = 'Blog successfully connected';
- } else if( isset( $_GET['action'] ) && 'connection_failed' == $_GET['action'] ) {
- $notice = 'Blog connection <strong>failed</strong>';
+ if ( isset( $_GET['action'] ) && 'connected' == $_GET['action'] ) {
+ $notice = __( 'Site successfully connected.', 'jetpack' );
+ } else if ( isset( $_GET['action'] ) && 'connection_failed' == $_GET['action'] ) {
+ $notice = __( 'Site connection <strong>failed</strong>', 'jetpack' );
}
Jetpack::init()->load_view( 'admin/network-admin-alert.php', array( 'notice' => $notice ) );
@@ -353,10 +368,13 @@ class Jetpack_Network {
* Disconnect functionality for an individual site
*
* @since 2.9
- * @see Jetpack_Network::jetpack_sites_list()
+ * @see Jetpack_Network::jetpack_sites_list()
*/
public function do_subsitedisconnect( $site_id = null ) {
- $site_id = ( is_null( $site_id ) ) ? $_GET['site_id']: $site_id;
+ if ( ! current_user_can( 'jetpack_disconnect' ) ) {
+ return;
+ }
+ $site_id = ( is_null( $site_id ) ) ? $_GET['site_id'] : $site_id;
switch_to_blog( $site_id );
Jetpack::disconnect();
restore_current_blog();
@@ -366,14 +384,22 @@ class Jetpack_Network {
* Registers a subsite with the Jetpack servers
*
* @since 2.9
- * @todo Break apart into easier to manage chunks that can be unit tested
- * @see Jetpack_Network::jetpack_sites_list();
+ * @todo Break apart into easier to manage chunks that can be unit tested
+ * @see Jetpack_Network::jetpack_sites_list();
*/
public function do_subsiteregister( $site_id = null ) {
+ if ( ! current_user_can( 'jetpack_disconnect' ) ) {
+ return;
+ }
+
+ if ( Jetpack::is_development_mode() ) {
+ return;
+ }
+
$jp = Jetpack::init();
// Figure out what site we are working on
- $site_id = ( is_null( $site_id ) ) ? $_GET['site_id']: $site_id;
+ $site_id = ( is_null( $site_id ) ) ? $_GET['site_id'] : $site_id;
// Build secrets to sent to wpcom for verification
$secrets = $jp->generate_secrets();
@@ -387,20 +413,20 @@ class Jetpack_Network {
/*
* Here we need to switch to the subsite
* For the registration process we really only hijack how it
- * works for an idividual site and pass in some extra data here
+ * works for an individual site and pass in some extra data here
*/
switch_to_blog( $site_id );
// Save the secrets in the subsite so when the wpcom server does a pingback it
// will be able to validate the connection
Jetpack_Options::update_option( 'register',
- $secrets[0] . ':' .$secrets[1]. ':' . $secrets[2]
+ $secrets[0] . ':' . $secrets[1] . ':' . $secrets[2]
);
// Gra info for gmt offset
$gmt_offset = get_option( 'gmt_offset' );
if ( ! $gmt_offset ) {
- $gmt_offset = 0;
+ $gmt_offset = 0;
}
/*
@@ -411,28 +437,29 @@ class Jetpack_Network {
* @todo Find out if sending the stats_id is necessary
*/
$stat_options = get_option( 'stats_options' );
- $stat_id = $stat_options = isset($stats_options['blog_id']) ? $stats_options['blog_id'] : null;
+ $stat_id = $stat_options = isset( $stats_options['blog_id'] ) ? $stats_options['blog_id'] : null;
+
$args = array(
- 'method' => 'POST',
- 'body' => array(
- 'network_url' => $this->get_url( 'network_admin_page' ),
- 'network_wpcom_blog_id' => $network_wpcom_blog_id,
- 'siteurl' => site_url(),
- 'home' => home_url(),
- 'gmt_offset' => $gmt_offset,
- 'timezone_string' => (string) get_option( 'timezone_string' ),
- 'site_name' => (string) get_option( 'blogname' ),
- 'secret_1' => $secrets[0],
- 'secret_2' => $secrets[1],
- 'site_lang' => get_locale(),
- 'timeout' => $timeout,
- 'stats_id' => $stat_id, // Is this still required?
- 'user_id' => get_current_user_id(),
- ),
- 'headers' => array(
- 'Accept' => 'application/json',
- ),
- 'timeout' => $timeout,
+ 'method' => 'POST',
+ 'body' => array(
+ 'network_url' => $this->get_url( 'network_admin_page' ),
+ 'network_wpcom_blog_id' => $network_wpcom_blog_id,
+ 'siteurl' => site_url(),
+ 'home' => home_url(),
+ 'gmt_offset' => $gmt_offset,
+ 'timezone_string' => (string) get_option( 'timezone_string' ),
+ 'site_name' => (string) get_option( 'blogname' ),
+ 'secret_1' => $secrets[0],
+ 'secret_2' => $secrets[1],
+ 'site_lang' => get_locale(),
+ 'timeout' => $timeout,
+ 'stats_id' => $stat_id, // Is this still required?
+ 'user_id' => get_current_user_id(),
+ ),
+ 'headers' => array(
+ 'Accept' => 'application/json',
+ ),
+ 'timeout' => $timeout,
);
// Attempt to retrieve shadow blog details
@@ -450,20 +477,24 @@ class Jetpack_Network {
*/
$valid_response = $jp->validate_remote_register_response( $response );
- if( is_wp_error( $valid_response ) || !$valid_response ) {
+ if ( is_wp_error( $valid_response ) || ! $valid_response ) {
+ restore_current_blog();
return $valid_response;
}
// Grab the response values to work with
$code = wp_remote_retrieve_response_code( $response );
$entity = wp_remote_retrieve_body( $response );
- if ( $entity )
+ if ( $entity ) {
$json = json_decode( $entity );
- else
+ } else {
$json = false;
+ }
- if ( empty( $json->jetpack_secret ) || ! is_string( $json->jetpack_secret ) )
- return new Jetpack_Error( 'jetpack_secret', '', $code );
+ if ( empty( $json->jetpack_secret ) || ! is_string( $json->jetpack_secret ) ) {
+ restore_current_blog();
+ return new Jetpack_Error( 'jetpack_secret', '', $code );
+ }
if ( isset( $json->jetpack_public ) ) {
$jetpack_public = (int) $json->jetpack_public;
@@ -471,13 +502,11 @@ class Jetpack_Network {
$jetpack_public = false;
}
- Jetpack_Options::update_options(
- array(
- 'id' => (int) $json->jetpack_id,
+ Jetpack_Options::update_options( array(
+ 'id' => (int) $json->jetpack_id,
'blog_token' => (string) $json->jetpack_secret,
'public' => $jetpack_public,
- )
- );
+ ) );
/*
* Update the subsiteregister method on wpcom so that it also sends back the
@@ -486,11 +515,7 @@ class Jetpack_Network {
$is_master_user = ! Jetpack::is_active();
Jetpack::update_user_token(
get_current_user_id(),
- sprintf(
- '%s.%d',
- $json->token->secret,
- get_current_user_id()
- ),
+ sprintf( '%s.%d', $json->token->secret, get_current_user_id() ),
$is_master_user
);
@@ -504,46 +529,47 @@ class Jetpack_Network {
* dis/connected to Jetpack
*
* @since 2.9
- * @see Jetpack_Network::jetpack_sites_list()
+ * @see Jetpack_Network::jetpack_sites_list()
*/
function network_admin_page() {
global $current_site;
$this->network_admin_page_header();
- $jp = Jetpack::init();
+ $jp = Jetpack::init();
- // We should be, but ensure we are on the main blog
- switch_to_blog( $current_site->blog_id );
- $main_active = $jp->is_active();
- restore_current_blog();
+ // We should be, but ensure we are on the main blog
+ switch_to_blog( $current_site->blog_id );
+ $main_active = $jp->is_active();
+ restore_current_blog();
- // If we are in dev mode, just show the notice and bail
- if ( Jetpack::is_development_mode() ) {
- Jetpack::show_development_mode_notice();
- return;
- }
+ // If we are in dev mode, just show the notice and bail
+ if ( Jetpack::is_development_mode() ) {
+ Jetpack::show_development_mode_notice();
+ return;
+ }
- /*
- * Ensure the main blog is connected as all other subsite blog
- * connections will feed off this one
- */
- if( !$main_active ) {
- $url = $this->get_url( array(
- 'name' => 'subsiteregister',
- 'site_id' => 1,
- ) );
- $data = array( 'url' => $jp->build_connect_url() );
- Jetpack::init()->load_view( 'admin/must-connect-main-blog.php', $data );
- return;
- }
+ /*
+ * Ensure the main blog is connected as all other subsite blog
+ * connections will feed off this one
+ */
+ if ( ! $main_active ) {
+ $url = $this->get_url( array(
+ 'name' => 'subsiteregister',
+ 'site_id' => 1,
+ ) );
+ $data = array( 'url' => $jp->build_connect_url() );
+ Jetpack::init()->load_view( 'admin/must-connect-main-blog.php', $data );
+
+ return;
+ }
- require_once( 'class.jetpack-network-sites-list-table.php' );
- $myListTable = new Jetpack_Network_Sites_List_Table();
- echo '<div class="wrap"><h2>' . __('Sites', 'jetpack') . '</h2>';
- echo '<form method="post">';
- $myListTable->prepare_items();
- $myListTable->display();
- echo '</form></div>';
+ require_once( 'class.jetpack-network-sites-list-table.php' );
+ $myListTable = new Jetpack_Network_Sites_List_Table();
+ echo '<div class="wrap"><h2>' . __( 'Sites', 'jetpack' ) . '</h2>';
+ echo '<form method="post">';
+ $myListTable->prepare_items();
+ $myListTable->display();
+ echo '</form></div>';
$this->network_admin_page_footer();
}
@@ -556,7 +582,7 @@ class Jetpack_Network {
function network_admin_page_header() {
global $current_user;
- $is_connected = Jetpack::is_active();
+ $is_connected = Jetpack::is_active();
$data = array(
'is_connected' => $is_connected
@@ -580,6 +606,31 @@ class Jetpack_Network {
*/
public function save_network_settings_page() {
+ if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'jetpack-network-settings' ) ) {
+ // no nonce, push back to settings page
+ wp_safe_redirect(
+ add_query_arg(
+ array( 'page' => 'jetpack-settings' ),
+ network_admin_url( 'admin.php' )
+ )
+ );
+ exit();
+ }
+
+ // try to save the Protect whitelist before anything else, since that action can result in errors
+ $whitelist = str_replace( ' ', '', $_POST['global-whitelist'] );
+ $whitelist = explode( PHP_EOL, $whitelist );
+ $result = jetpack_protect_save_whitelist( $whitelist, $global = true );
+ if ( is_wp_error( $result ) ) {
+ wp_safe_redirect(
+ add_query_arg(
+ array( 'page' => 'jetpack-settings', 'error' => 'jetpack_protect_whitelist' ),
+ network_admin_url( 'admin.php' )
+ )
+ );
+ exit();
+ }
+
/*
* Fields
*
@@ -587,31 +638,41 @@ class Jetpack_Network {
* sub-site-connection-override - Allow sub-site admins to (dis)reconnect with their own Jetpack account
*/
$auto_connect = 0;
- if( isset( $_POST['auto-connect'] ) )
+ if ( isset( $_POST['auto-connect'] ) ) {
$auto_connect = 1;
-
+ }
$sub_site_connection_override = 0;
- if( isset( $_POST['sub-site-connection-override'] ) )
+ if ( isset( $_POST['sub-site-connection-override'] ) ) {
$sub_site_connection_override = 1;
-/* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
+ }
+
+ /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
$manage_auto_activated_modules = 0;
- if( isset( $_POST['manage_auto_activated_modules'] ) )
+ if ( isset( $_POST['manage_auto_activated_modules'] ) ) {
$manage_auto_activated_modules = 1;
+ }
$modules = array();
- if( isset( $_POST['modules'] ) )
+ if ( isset( $_POST['modules'] ) ) {
$modules = $_POST['modules'];
-*/
+ }
+ */
+
$data = array(
- 'auto-connect' => $auto_connect,
- 'sub-site-connection-override' => $sub_site_connection_override,
- // 'manage_auto_activated_modules' => $manage_auto_activated_modules,
- // 'modules' => $modules,
+ 'auto-connect' => $auto_connect,
+ 'sub-site-connection-override' => $sub_site_connection_override,
+ //'manage_auto_activated_modules' => $manage_auto_activated_modules,
+ //'modules' => $modules,
);
update_site_option( $this->settings_name, $data );
- wp_safe_redirect(add_query_arg(array('page' => 'jetpack-settings', 'updated' => 'true'), network_admin_url('admin.php')));
+ wp_safe_redirect(
+ add_query_arg(
+ array( 'page' => 'jetpack-settings', 'updated' => 'true' ),
+ network_admin_url( 'admin.php' )
+ )
+ );
exit();
}
@@ -622,20 +683,21 @@ class Jetpack_Network {
$modules = array();
$module_slugs = Jetpack::get_available_modules();
foreach ( $module_slugs as $slug ) {
- $module = Jetpack::get_module( $slug );
+ $module = Jetpack::get_module( $slug );
$module['module'] = $slug;
- $modules[] = $module;
+ $modules[] = $module;
}
usort( $modules, array( 'Jetpack', 'sort_modules' ) );
- if( !isset( $options['modules'] ) ) {
+ if ( ! isset( $options['modules'] ) ) {
$options['modules'] = $modules;
}
$data = array(
'modules' => $modules,
- 'options' => $options
+ 'options' => $options,
+ 'jetpack_protect_whitelist' => jetpack_protect_format_whitelist(),
);
Jetpack::init()->load_view( 'admin/network-settings.php', $data );
@@ -646,13 +708,16 @@ class Jetpack_Network {
* Updates a site wide option
*
* @since 2.9
+ *
* @param string $key
- * @param mixed $value
+ * @param mixed $value
+ *
* @return boolean
**/
public function update_option( $key, $value ) {
- $options = get_site_option( $this->settings_name, $this->setting_defaults );
- $options[$key] = $value;
+ $options = get_site_option( $this->settings_name, $this->setting_defaults );
+ $options[ $key ] = $value;
+
return update_site_option( $this->settings_name, $options );
}
@@ -660,71 +725,78 @@ class Jetpack_Network {
* Retrieves a site wide option
*
* @since 2.9
+ *
* @param string $name - Name of the option in the database
**/
public function get_option( $name ) {
$options = get_site_option( $this->settings_name, $this->setting_defaults );
-
$options = wp_parse_args( $options, $this->setting_defaults );
- if( !isset( $options[$name] ) )
- $options[$name] = null;
+ if ( ! isset( $options[ $name ] ) ) {
+ $options[ $name ] = null;
+ }
- return $options[$name];
+ return $options[ $name ];
}
/**
* Return an array of sites on the specified network. If no network is specified,
* return all sites, regardless of network.
*
- *
* @todo REMOVE THIS FUNCTION! This function is moving to core. Use that one in favor of this. WordPress::wp_get_sites(). http://codex.wordpress.org/Function_Reference/wp_get_sites NOTE, This returns an array instead of stdClass. Be sure to update class.network-sites-list-table.php
* @since 2.9
* @deprecated 2.4.5
+ *
* @param array|string $args Optional. Specify the status of the sites to return.
+ *
* @return array An array of site data
*/
- public function wp_get_sites($args = array()) {
+ public function wp_get_sites( $args = array() ) {
global $wpdb;
- if (wp_is_large_network())
+ if ( wp_is_large_network() ) {
return;
+ }
- $defaults = array('network_id' => $wpdb->siteid);
-
- $args = wp_parse_args($args, $defaults);
-
- $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
+ $defaults = array( 'network_id' => $wpdb->siteid );
+ $args = wp_parse_args( $args, $defaults );
+ $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
- if (isset($args['network_id']) && ( is_array($args['network_id']) || is_numeric($args['network_id']) )) {
- $network_ids = array_map('intval', (array) $args['network_id']);
- $network_ids = implode(',', $network_ids);
+ if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
+ $network_ids = array_map( 'intval', (array) $args['network_id'] );
+ $network_ids = implode( ',', $network_ids );
$query .= "AND site_id IN ($network_ids) ";
}
- if (isset($args['public']))
- $query .= $wpdb->prepare("AND public = %s ", $args['public']);
+ if ( isset( $args['public'] ) ) {
+ $query .= $wpdb->prepare( "AND public = %s ", $args['public'] );
+ }
- if (isset($args['archived']))
- $query .= $wpdb->prepare("AND archived = %s ", $args['archived']);
+ if ( isset( $args['archived'] ) ) {
+ $query .= $wpdb->prepare( "AND archived = %s ", $args['archived'] );
+ }
- if (isset($args['mature']))
- $query .= $wpdb->prepare("AND mature = %s ", $args['mature']);
+ if ( isset( $args['mature'] ) ) {
+ $query .= $wpdb->prepare( "AND mature = %s ", $args['mature'] );
+ }
- if (isset($args['spam']))
- $query .= $wpdb->prepare("AND spam = %s ", $args['spam']);
+ if ( isset( $args['spam'] ) ) {
+ $query .= $wpdb->prepare( "AND spam = %s ", $args['spam'] );
+ }
- if (isset($args['deleted']))
- $query .= $wpdb->prepare("AND deleted = %s ", $args['deleted']);
+ if ( isset( $args['deleted'] ) ) {
+ $query .= $wpdb->prepare( "AND deleted = %s ", $args['deleted'] );
+ }
- if( isset( $args['exclude_blogs'] ) )
+ if ( isset( $args['exclude_blogs'] ) ) {
$query .= "AND blog_id NOT IN (" . implode( ',', $args['exclude_blogs'] ) . ")";
+ }
- $key = 'wp_get_sites:' . md5($query);
+ $key = 'wp_get_sites:' . md5( $query );
- if (!$site_results = wp_cache_get($key, 'site-id-cache')) {
- $site_results = (array) $wpdb->get_results($query);
- wp_cache_set($key, $site_results, 'site-id-cache');
+ if ( ! $site_results = wp_cache_get( $key, 'site-id-cache' ) ) {
+ $site_results = (array) $wpdb->get_results( $query );
+ wp_cache_set( $key, $site_results, 'site-id-cache' );
}
return $site_results;
diff --git a/plugins/jetpack/class.jetpack-options.php b/plugins/jetpack/class.jetpack-options.php
index 7562109d..f9bd7143 100644
--- a/plugins/jetpack/class.jetpack-options.php
+++ b/plugins/jetpack/class.jetpack-options.php
@@ -32,8 +32,11 @@ class Jetpack_Options {
'site_icon_url', // (string) url to the full site icon
'site_icon_id', // (int) Attachment id of the site icon file
'dismissed_manage_banner', // (bool) Dismiss Jetpack manage banner allows the user to dismiss the banner permanently
- 'updates', // (array) information about available updates to plugins, theme, WordPress core, and if site is under version control
+ 'restapi_stats_cache', // (array) Stats Cache data.
+ 'unique_connection', // (array) A flag to determine a unique connection to wordpress.com two values "connected" and "disconnected" with values for how many times each has occured
+ 'protect_whitelist' // (array) IP Address for the Protect module to ignore
);
+
case 'private' :
return array(
'register',
@@ -60,7 +63,8 @@ class Jetpack_Options {
'last_heartbeat', // (int) The timestamp of the last heartbeat that fired.
'last_security_report', // (int) The timestamp of the last security report that was run.
'sync_bulk_reindexing', // (bool) If a bulk reindex is currently underway.
- 'jumpstart' // (string) A flag for whether or not to show the Jump Start. Accepts: new_connection, jumpstart_activated, jetpack_action_taken, jumpstart_dismissed.
+ 'jumpstart', // (string) A flag for whether or not to show the Jump Start. Accepts: new_connection, jumpstart_activated, jetpack_action_taken, jumpstart_dismissed.
+ 'hide_jitm' // (array) A list of just in time messages that we should not show because they have been dismissed by the user
);
}
@@ -130,10 +134,26 @@ class Jetpack_Options {
*
* @param string $name Option name
* @param mixed $value Option value
+ * @param string $autoload If not compact option, allows specifying whether to autoload or not.
*/
- public static function update_option( $name, $value ) {
+ public static function update_option( $name, $value, $autoload = null ) {
+ /**
+ * Fires before Jetpack updates a specific option.
+ *
+ * @since 3.0.0
+ *
+ * @param str $name The name of the option being updated.
+ * @param mixed $value The new value of the option.
+ */
do_action( 'pre_update_jetpack_option_' . $name, $name, $value );
if ( self::is_valid( $name, 'non_compact' ) ) {
+ /**
+ * Allowing update_option to change autoload status only shipped in WordPress v4.2
+ * @link https://github.com/WordPress/WordPress/commit/305cf8b95
+ */
+ if ( version_compare( $GLOBALS['wp_version'], '4.2', '>=' ) ) {
+ return update_option( "jetpack_$name", $value, $autoload );
+ }
return update_option( "jetpack_$name", $value );
}
diff --git a/plugins/jetpack/class.jetpack-post-images.php b/plugins/jetpack/class.jetpack-post-images.php
index b03eb7ba..83df87b1 100644
--- a/plugins/jetpack/class.jetpack-post-images.php
+++ b/plugins/jetpack/class.jetpack-post-images.php
@@ -85,64 +85,28 @@ class Jetpack_PostImages {
$images = array();
$post = get_post( $post_id );
- if ( !empty( $post->post_password ) )
+ if ( ! empty( $post->post_password ) ) {
return $images;
-
- if ( false === has_shortcode( $post->post_content, 'gallery' ) ) {
- return false; // no gallery - bail
}
$permalink = get_permalink( $post->ID );
- // CATS: All your base are belong to us
- $old_post = $GLOBALS['post'];
- $GLOBALS['post'] = $post;
- $old_shortcodes = $GLOBALS['shortcode_tags'];
- $GLOBALS['shortcode_tags'] = array( 'gallery' => $old_shortcodes['gallery'] );
-
- // Find all the galleries
- preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $gallery_matches, PREG_SET_ORDER );
-
- foreach ( $gallery_matches as $gallery_match ) {
- $gallery = do_shortcode_tag( $gallery_match );
-
- // Um... no images in the gallery - bail
- if ( false === $pos = stripos( $gallery, '<img' ) )
- continue;
-
- preg_match_all( '/<img\s+[^>]*src=([\'"])([^\'"]*)\\1/', $gallery, $image_match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE );
+ $gallery_images = get_post_galleries_images( $post->ID, false );
- $a_pos = 0;
- foreach ( $image_match[2] as $src ) {
- list( $raw_src ) = explode( '?', $src[0] ); // pull off any Query string (?w=250)
+ foreach ( $gallery_images as $galleries ) {
+ foreach ( $galleries as $src ) {
+ list( $raw_src ) = explode( '?', $src ); // pull off any Query string (?w=250)
$raw_src = wp_specialchars_decode( $raw_src ); // rawify it
$raw_src = esc_url_raw( $raw_src ); // clean it
-
- $a_pos = strrpos( substr( $gallery, 0, $src[1] ), '<a', $a_pos ); // is there surrounding <a>?
-
- if ( false !== $a_pos && preg_match( '/<a\s+[^>]*href=([\'"])([^\'"]*)\\1/', $gallery, $href_match, 0, $a_pos ) ) {
- $href = wp_specialchars_decode( $href_match[2] );
- $href = esc_url_raw( $href );
- } else {
-