Compare commits

..

1 Commits
4.9.8 ... 4.9.5

Author SHA1 Message Date
Aaron Campbell
a4b0b219b2 Tag 4.9.5
Built from https://develop.svn.wordpress.org/tags/4.9.5@42946


git-svn-id: http://core.svn.wordpress.org/tags/4.9.5@42776 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-04-03 22:38:12 +00:00
203 changed files with 14952 additions and 35695 deletions

View File

@@ -18,8 +18,6 @@ if ( !is_multisite() ) {
die();
}
nocache_headers();
if ( is_object( $wp_object_cache ) )
$wp_object_cache->cache_enabled = false;

View File

@@ -11,8 +11,7 @@ require_once( dirname( __FILE__ ) . '/admin.php' );
wp_enqueue_script( 'underscore' );
/* translators: Page title of the About WordPress page in the admin. */
$title = _x( 'About', 'page title' );
$title = __( 'About' );
list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
@@ -28,67 +27,11 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
<a href="about.php" class="nav-tab nav-tab-active"><?php _e( 'What&#8217;s New' ); ?></a>
<a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
<a href="freedoms.php?privacy-notice" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
<a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
</h2>
<div class="changelog point-releases">
<h3><?php _e( 'Maintenance and Security Releases' ); ?></h3>
<p>
<?php
printf(
/* translators: 1: WordPress version number, 2: plural number of bugs. */
_n(
'<strong>Version %1$s</strong> addressed %2$s bug.',
'<strong>Version %1$s</strong> addressed %2$s bugs.',
46
),
'4.9.8',
number_format_i18n( 46 )
);
printf(
/* translators: %s: Codex URL */
__( 'For more information, see <a href="%s">the release notes</a>.' ),
'https://codex.wordpress.org/Version_4.9.8'
);
?>
</p>
<p>
<?php
printf(
/* translators: 1: WordPress version number, 2: plural number of bugs. */
_n(
'<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
'<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.',
17
),
'4.9.7',
number_format_i18n( 17 )
);
?>
<?php
/* translators: %s: Codex URL */
printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.9.7' );
?>
</p>
<p>
<?php
printf(
/* translators: 1: WordPress version number, 2: plural number of bugs. */
_n(
'<strong>Version %1$s</strong> addressed %2$s bug.',
'<strong>Version %1$s</strong> addressed %2$s bugs.',
18
),
'4.9.6',
number_format_i18n( 18 )
);
?>
<?php
/* translators: %s: Codex URL */
printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.9.6' );
?>
</p>
<p>
<?php
printf(

View File

@@ -65,9 +65,6 @@ $core_actions_post = array(
'generate-password', 'save-wporg-username', 'delete-plugin', 'search-plugins',
'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme', 'install-theme',
'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file',
'wp-privacy-export-personal-data',
'wp-privacy-erase-personal-data',
'update-try-gutenberg-panel',
);
// Deprecated

View File

@@ -28,7 +28,7 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
<a href="about.php" class="nav-tab"><?php _e( 'What&#8217;s New' ); ?></a>
<a href="credits.php" class="nav-tab nav-tab-active"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
<a href="freedoms.php?privacy-notice" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
<a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
</h2>
<div class="about-wrap-content">
@@ -52,12 +52,6 @@ if ( ! $credits ) {
echo '<p class="about-description">' . __( 'WordPress is created by a worldwide team of passionate individuals.' ) . "</p>\n";
echo '<p>' . sprintf(
/* translators: %s: https://make.wordpress.org/ */
__( 'Want to see your name in lights on this page? <a href="%s">Get involved in WordPress</a>.' ),
__( 'https://make.wordpress.org/' )
) . '</p>';
foreach ( $credits['groups'] as $group_slug => $group_data ) {
if ( $group_data['name'] ) {
if ( 'Translators' == $group_data['name'] ) {
@@ -107,6 +101,13 @@ foreach ( $credits['groups'] as $group_slug => $group_data ) {
}
?>
<p class="clear"><?php
/* translators: %s: https://make.wordpress.org/ */
printf( __( 'Want to see your name in lights on this page? <a href="%s">Get involved in WordPress</a>.' ),
__( 'https://make.wordpress.org/' )
);
?></p>
</div>
</div>
<?php

View File

@@ -764,7 +764,6 @@ img.emoji {
/* @todo can we combine these into a class or use an existing dashicon one? */
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before,
.tagchecklist .ntdelbutton .remove-tag-icon:before,
#bulk-titles div a:before,
.notice-dismiss:before {
@@ -2982,8 +2981,7 @@ img {
/* Metabox collapse arrow indicators */
.sidebar-name .toggle-indicator:before,
.js .meta-box-sortables .postbox .toggle-indicator:before,
.bulk-action-notice .toggle-indicator:before,
.privacy-text-box .toggle-indicator:before {
.bulk-action-notice .toggle-indicator:before {
content: "\f142";
display: inline-block;
font: normal 20px/1 dashicons;
@@ -2995,8 +2993,7 @@ img {
.js .widgets-holder-wrap.closed .toggle-indicator:before,
.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,
.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,
.privacy-text-box.closed .toggle-indicator:before {
.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before {
content: "\f140";
}

File diff suppressed because one or more lines are too long

View File

@@ -764,7 +764,6 @@ img.emoji {
/* @todo can we combine these into a class or use an existing dashicon one? */
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before,
.tagchecklist .ntdelbutton .remove-tag-icon:before,
#bulk-titles div a:before,
.notice-dismiss:before {
@@ -2982,8 +2981,7 @@ img {
/* Metabox collapse arrow indicators */
.sidebar-name .toggle-indicator:before,
.js .meta-box-sortables .postbox .toggle-indicator:before,
.bulk-action-notice .toggle-indicator:before,
.privacy-text-box .toggle-indicator:before {
.bulk-action-notice .toggle-indicator:before {
content: "\f142";
display: inline-block;
font: normal 20px/1 dashicons;
@@ -2995,8 +2993,7 @@ img {
.js .widgets-holder-wrap.closed .toggle-indicator:before,
.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,
.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,
.privacy-text-box.closed .toggle-indicator:before {
.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before {
content: "\f140";
}

File diff suppressed because one or more lines are too long

View File

@@ -98,8 +98,7 @@
}
/* Welcome Panel */
.welcome-panel,
.try-gutenberg-panel {
.welcome-panel {
position: relative;
overflow: auto;
margin: 16px 0;
@@ -111,8 +110,7 @@
line-height: 2.1em;
}
.welcome-panel h2,
.try-gutenberg-panel h2 {
.welcome-panel h2 {
margin: 0;
font-size: 21px;
font-weight: 400;
@@ -124,43 +122,25 @@
font-size: 16px;
}
.try-gutenberg-panel h3 {
margin: 17px 0 0;
font-size: 16px;
line-height: 1.4;
}
.welcome-panel li,
.try-gutenberg-panel li {
.welcome-panel li {
font-size: 14px;
}
.welcome-panel p,
.try-gutenberg-panel p {
.welcome-panel p {
color: #72777c;
}
.welcome-panel a,
.try-gutenberg-action a {
.welcome-panel a {
text-decoration: none;
}
.welcome-panel .about-description,
.try-gutenberg-panel .about-description {
.welcome-panel .about-description {
font-size: 16px;
margin: 0;
}
.try-gutenberg-panel-content hr {
margin: 20px -23px 0 -23px;
border-top: 1px solid #f3f4f5;
border-bottom: none;
}
.welcome-panel .welcome-panel-close,
.try-gutenberg-panel .try-gutenberg-panel-close {
.welcome-panel .welcome-panel-close {
position: absolute;
z-index: 10;
top: 10px;
left: 10px;
padding: 10px 21px 10px 15px;
@@ -169,8 +149,7 @@
text-decoration: none;
}
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before {
.welcome-panel .welcome-panel-close:before {
position: absolute;
top: 8px;
right: 0;
@@ -185,23 +164,11 @@
white-space: normal;
}
.welcome-panel-content,
.try-gutenberg-panel-content {
margin: 0 13px;
.welcome-panel-content {
margin-right: 13px;
max-width: 1500px;
}
.try-gutenberg-panel img {
margin-top: 23px;
width: calc( 100% - 40px );
border: 1px solid #f3f4f5;
}
.try-gutenberg-panel .install-now.updating-message:before,
.try-gutenberg-panel .install-now.updated-message:before {
margin-top: 11px;
}
.welcome-panel .welcome-panel-column-container {
clear: both;
position: relative;
@@ -213,10 +180,6 @@
float: right;
}
.try-gutenberg-panel .try-gutenberg-panel-column > * {
padding-left: 40px;
}
.ie8 .welcome-panel .welcome-panel-column {
min-width: 230px;
}
@@ -225,27 +188,11 @@
width: 36%;
}
.try-gutenberg-panel .try-gutenberg-panel-column-container {
display: -ms-grid;
display: grid;
-ms-grid-columns: 36% 32% 32%;
grid-template-columns: 36% 32% 32%;
margin-bottom: 13px;
}
.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column) {
display: -ms-grid;
display: grid;
-ms-grid-rows: auto 100px;
grid-template-rows: auto 100px;
}
.welcome-panel-column p.hide-if-no-customize {
margin-top: 10px;
}
.welcome-panel-column p,
.try-gutenberg-panel-column p {
.welcome-panel-column p {
margin-top: 7px;
color: #444;
}
@@ -255,7 +202,7 @@
}
.welcome-panel .welcome-panel-column ul {
margin: 0.8em 0 1em 1em;
margin: 0.8em 0 1em 1em;
}
.welcome-panel .welcome-panel-column li {
@@ -1260,17 +1207,6 @@ a.rsswidget {
}
}
@media screen and (max-width: 1024px) {
.try-gutenberg-panel .try-gutenberg-panel-column-container {
-ms-grid-columns: 50% 50%;
grid-template-columns: 50% 50%;
}
.try-gutenberg-panel .try-gutenberg-panel-image-column {
display: none;
}
}
@media screen and (max-width: 870px) {
.welcome-panel .welcome-panel-column,
.welcome-panel .welcome-panel-column:first-child {
@@ -1279,11 +1215,6 @@ a.rsswidget {
width: 100%;
}
.try-gutenberg-panel .try-gutenberg-panel-column-container {
-ms-grid-columns: 100%;
grid-template-columns: 100%;
}
.welcome-panel .welcome-panel-column li {
display: inline-block;
margin-left: 13px;
@@ -1292,6 +1223,7 @@ a.rsswidget {
.welcome-panel .welcome-panel-column ul {
margin: 0.4em 0 0;
}
}
@media screen and ( max-width: 782px ) {
@@ -1334,8 +1266,7 @@ a.rsswidget {
/* Smartphone */
@media screen and (max-width: 600px) {
/* Keep the close icon from overlapping the Welcome text. */
.welcome-panel .welcome-panel-close,
.try-gutenberg-panel .try-gutenberg-panel-close {
.welcome-panel .welcome-panel-close {
overflow: hidden;
text-indent: 40px;
white-space: nowrap;
@@ -1347,8 +1278,7 @@ a.rsswidget {
}
/* Make the close icon larger for tappability. */
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before {
.welcome-panel .welcome-panel-close:before {
font-size: 20px;
top: 5px;
right: -35px;

File diff suppressed because one or more lines are too long

View File

@@ -98,8 +98,7 @@
}
/* Welcome Panel */
.welcome-panel,
.try-gutenberg-panel {
.welcome-panel {
position: relative;
overflow: auto;
margin: 16px 0;
@@ -111,8 +110,7 @@
line-height: 2.1em;
}
.welcome-panel h2,
.try-gutenberg-panel h2 {
.welcome-panel h2 {
margin: 0;
font-size: 21px;
font-weight: 400;
@@ -124,43 +122,25 @@
font-size: 16px;
}
.try-gutenberg-panel h3 {
margin: 17px 0 0;
font-size: 16px;
line-height: 1.4;
}
.welcome-panel li,
.try-gutenberg-panel li {
.welcome-panel li {
font-size: 14px;
}
.welcome-panel p,
.try-gutenberg-panel p {
.welcome-panel p {
color: #72777c;
}
.welcome-panel a,
.try-gutenberg-action a {
.welcome-panel a {
text-decoration: none;
}
.welcome-panel .about-description,
.try-gutenberg-panel .about-description {
.welcome-panel .about-description {
font-size: 16px;
margin: 0;
}
.try-gutenberg-panel-content hr {
margin: 20px -23px 0 -23px;
border-top: 1px solid #f3f4f5;
border-bottom: none;
}
.welcome-panel .welcome-panel-close,
.try-gutenberg-panel .try-gutenberg-panel-close {
.welcome-panel .welcome-panel-close {
position: absolute;
z-index: 10;
top: 10px;
right: 10px;
padding: 10px 15px 10px 21px;
@@ -169,8 +149,7 @@
text-decoration: none;
}
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before {
.welcome-panel .welcome-panel-close:before {
position: absolute;
top: 8px;
left: 0;
@@ -185,23 +164,11 @@
white-space: normal;
}
.welcome-panel-content,
.try-gutenberg-panel-content {
margin: 0 13px;
.welcome-panel-content {
margin-left: 13px;
max-width: 1500px;
}
.try-gutenberg-panel img {
margin-top: 23px;
width: calc( 100% - 40px );
border: 1px solid #f3f4f5;
}
.try-gutenberg-panel .install-now.updating-message:before,
.try-gutenberg-panel .install-now.updated-message:before {
margin-top: 11px;
}
.welcome-panel .welcome-panel-column-container {
clear: both;
position: relative;
@@ -213,10 +180,6 @@
float: left;
}
.try-gutenberg-panel .try-gutenberg-panel-column > * {
padding-right: 40px;
}
.ie8 .welcome-panel .welcome-panel-column {
min-width: 230px;
}
@@ -225,27 +188,11 @@
width: 36%;
}
.try-gutenberg-panel .try-gutenberg-panel-column-container {
display: -ms-grid;
display: grid;
-ms-grid-columns: 36% 32% 32%;
grid-template-columns: 36% 32% 32%;
margin-bottom: 13px;
}
.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column) {
display: -ms-grid;
display: grid;
-ms-grid-rows: auto 100px;
grid-template-rows: auto 100px;
}
.welcome-panel-column p.hide-if-no-customize {
margin-top: 10px;
}
.welcome-panel-column p,
.try-gutenberg-panel-column p {
.welcome-panel-column p {
margin-top: 7px;
color: #444;
}
@@ -255,7 +202,7 @@
}
.welcome-panel .welcome-panel-column ul {
margin: 0.8em 1em 1em 0;
margin: 0.8em 1em 1em 0;
}
.welcome-panel .welcome-panel-column li {
@@ -1260,17 +1207,6 @@ a.rsswidget {
}
}
@media screen and (max-width: 1024px) {
.try-gutenberg-panel .try-gutenberg-panel-column-container {
-ms-grid-columns: 50% 50%;
grid-template-columns: 50% 50%;
}
.try-gutenberg-panel .try-gutenberg-panel-image-column {
display: none;
}
}
@media screen and (max-width: 870px) {
.welcome-panel .welcome-panel-column,
.welcome-panel .welcome-panel-column:first-child {
@@ -1279,11 +1215,6 @@ a.rsswidget {
width: 100%;
}
.try-gutenberg-panel .try-gutenberg-panel-column-container {
-ms-grid-columns: 100%;
grid-template-columns: 100%;
}
.welcome-panel .welcome-panel-column li {
display: inline-block;
margin-right: 13px;
@@ -1292,6 +1223,7 @@ a.rsswidget {
.welcome-panel .welcome-panel-column ul {
margin: 0.4em 0 0;
}
}
@media screen and ( max-width: 782px ) {
@@ -1334,8 +1266,7 @@ a.rsswidget {
/* Smartphone */
@media screen and (max-width: 600px) {
/* Keep the close icon from overlapping the Welcome text. */
.welcome-panel .welcome-panel-close,
.try-gutenberg-panel .try-gutenberg-panel-close {
.welcome-panel .welcome-panel-close {
overflow: hidden;
text-indent: 40px;
white-space: nowrap;
@@ -1347,8 +1278,7 @@ a.rsswidget {
}
/* Make the close icon larger for tappability. */
.welcome-panel .welcome-panel-close:before,
.try-gutenberg-panel .try-gutenberg-panel-close:before {
.welcome-panel .welcome-panel-close:before {
font-size: 20px;
top: 5px;
left: -35px;

File diff suppressed because one or more lines are too long

View File

@@ -646,93 +646,6 @@ span.wp-media-buttons-icon:before {
margin-bottom: 20px;
}
/* Suggested text for privacy policy */
.wp-privacy-policy-guide {
max-width: 1000px;
}
.privacy-text-box {
width: calc(100% - 260px);
}
.privacy-text-box-toc {
float: left;
width: 250px;
background-color: #fff;
}
.privacy-text-box-toc p {
margin: 0;
padding: 0.7em 1em;
border-bottom: 1px solid #eee;
}
.privacy-text-box-toc ol {
margin-right: 2em;
}
.wp-privacy-policy-guide h3 {
font-size: 1.2em;
margin: 1em 0 0.5em;
}
.privacy-text-section .privacy-text-copy {
float: left;
}
.privacy-text-section {
position: relative;
border-top: 1px solid #e3e3e3;
}
.privacy-text-box-head,
.privacy-text-section.text-removed {
padding-bottom: 12px;
}
.text-removed .policy-text {
font-style: italic;
color: #666;
font-weight: 600;
}
.privacy-text-actions {
height: 32px;
line-height: 32px;
padding-bottom: 6px;
}
.wp-privacy-policy-guide .policy-text h2 {
margin: 1.2em 0 1em;
padding: 0;
}
.suggested-policy-content {
font-style: italic;
}
.privacy-text-section a.return-to-top {
float: left;
margin-left: -250px;
margin-top: 6px;
}
.hide-privacy-policy-tutorial .privacy-policy-tutorial {
visibility: hidden;
}
.wp-suggested-text p {
font-style: italic;
}
.wp-suggested-text p.privacy-policy-tutorial {
font-style: normal;
}
.notice.wp-pp-notice {
margin: 15px 0 3px;
}
/*------------------------------------------------------------------------------
11.1 - Custom Fields
------------------------------------------------------------------------------*/
@@ -1657,19 +1570,4 @@ table.links-table {
.links-table td {
padding: 10px 0;
}
.privacy-text-box {
width: auto;
}
.privacy-text-box-toc {
float: none;
width: auto;
height: 100%;
}
.privacy-text-section a.return-to-top {
float: none;
margin: 0;
}
}

File diff suppressed because one or more lines are too long

View File

@@ -646,93 +646,6 @@ span.wp-media-buttons-icon:before {
margin-bottom: 20px;
}
/* Suggested text for privacy policy */
.wp-privacy-policy-guide {
max-width: 1000px;
}
.privacy-text-box {
width: calc(100% - 260px);
}
.privacy-text-box-toc {
float: right;
width: 250px;
background-color: #fff;
}
.privacy-text-box-toc p {
margin: 0;
padding: 0.7em 1em;
border-bottom: 1px solid #eee;
}
.privacy-text-box-toc ol {
margin-left: 2em;
}
.wp-privacy-policy-guide h3 {
font-size: 1.2em;
margin: 1em 0 0.5em;
}
.privacy-text-section .privacy-text-copy {
float: right;
}
.privacy-text-section {
position: relative;
border-top: 1px solid #e3e3e3;
}
.privacy-text-box-head,
.privacy-text-section.text-removed {
padding-bottom: 12px;
}
.text-removed .policy-text {
font-style: italic;
color: #666;
font-weight: 600;
}
.privacy-text-actions {
height: 32px;
line-height: 32px;
padding-bottom: 6px;
}
.wp-privacy-policy-guide .policy-text h2 {
margin: 1.2em 0 1em;
padding: 0;
}
.suggested-policy-content {
font-style: italic;
}
.privacy-text-section a.return-to-top {
float: right;
margin-right: -250px;
margin-top: 6px;
}
.hide-privacy-policy-tutorial .privacy-policy-tutorial {
visibility: hidden;
}
.wp-suggested-text p {
font-style: italic;
}
.wp-suggested-text p.privacy-policy-tutorial {
font-style: normal;
}
.notice.wp-pp-notice {
margin: 15px 0 3px;
}
/*------------------------------------------------------------------------------
11.1 - Custom Fields
------------------------------------------------------------------------------*/
@@ -1657,19 +1570,4 @@ table.links-table {
.links-table td {
padding: 10px 0;
}
.privacy-text-box {
width: auto;
}
.privacy-text-box-toc {
float: none;
width: auto;
height: 100%;
}
.privacy-text-section a.return-to-top {
float: none;
margin: 0;
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1076,143 +1076,6 @@ table.form-table td .updated p {
clear: both;
}
/*------------------------------------------------------------------------------
Privacy Policy settings screen
------------------------------------------------------------------------------*/
.tools-privacy-policy-page form {
margin-bottom: 1.3em;
}
.tools-privacy-policy-page input.button,
.tools-privacy-policy-page select {
margin-right: 6px;
}
.tools-privacy-edit {
margin: 1.5em 0;
}
.tools-privacy-policy-page span {
line-height: 2em;
}
.privacy_requests .column-email {
width: 40%;
}
.privacy_requests .column-type {
text-align: center;
}
.privacy_requests thead td:first-child,
.privacy_requests tfoot td:first-child {
border-right: 4px solid #fff;
}
.privacy_requests tbody th {
border-right: 4px solid #fff;
background: #fff;
box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
}
.privacy_requests tbody .has-request-results th {
box-shadow: none;
}
.privacy_requests tbody .request-results th .notice {
margin: 0 0 5px;
}
.privacy_requests tbody td {
background: #fff;
box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
}
.privacy_requests tbody .has-request-results td {
box-shadow: none;
}
.privacy_requests .next_steps .button {
height: auto;
line-height: 1.5;
padding: 4px 10px;
word-break: break-all;
white-space: unset;
}
.privacy_requests .status-request-confirmed th,
.privacy_requests .status-request-confirmed td {
background-color: #f7fcfe;
border-right-color: #00a0d2;
}
.privacy_requests .status-request-failed th,
.privacy_requests .status-request-failed td {
background-color: #fef7f1;
border-right-color: #d64d21;
}
.privacy_requests .export_personal_data_failed a {
vertical-align: baseline;
}
.status-label {
font-weight: bold;
}
.status-label.status-request-pending {
font-weight: normal;
font-style: italic;
color: #6c7781;
}
.status-label.status-request-failed {
color: #aa0000;
font-weight: bold;
}
.wp-privacy-request-form {
clear: both;
}
.wp-privacy-request-form-field {
margin: 1.5em 0;
}
.wp-privacy-request-form label {
font-weight: bold;
line-height: 1.5;
padding-bottom: .5em;
display: block;
}
.wp-privacy-request-form input {
line-height: 1.5;
margin: 0;
}
.email-personal-data::before {
display: inline-block;
font: normal 20px/1 dashicons;
margin: 3px -2px 0 5px;
speak: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
vertical-align: top;
}
.email-personal-data--sending::before {
color: #f56e28;
content: "\f463";
-webkit-animation: rotation 2s infinite linear;
animation: rotation 2s infinite linear;
}
.email-personal-data--sent::before {
color: #79ba49;
content: "\f147";
}
/* =Media Queries
-------------------------------------------------------------- */
@@ -1490,34 +1353,6 @@ table.form-table td .updated p {
max-width: 6.25em;
margin: 0;
}
/* Privacy Policy settings screen */
.tools-privacy-policy-page form.wp-create-privacy-page {
margin-bottom: 1em;
}
.tools-privacy-policy-page input#set-page,
.tools-privacy-policy-page select {
margin: 10px 0 0;
}
.tools-privacy-policy-page .wp-create-privacy-page span {
display: block;
margin-bottom: 1em;
}
.tools-privacy-policy-page .wp-create-privacy-page .button {
margin-right: 0;
}
.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) {
display: table-cell;
}
.wp-list-table.privacy_requests.widefat th input,
.wp-list-table.privacy_requests.widefat thead td input {
margin-right: 5px;
}
}
@media only screen and (max-width: 768px) {
@@ -1568,25 +1403,3 @@ table.form-table td .updated p {
margin-left: 0.5em;
}
}
@-webkit-keyframes rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-359deg);
transform: rotate(-359deg);
}
}
@keyframes rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-359deg);
transform: rotate(-359deg);
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1076,143 +1076,6 @@ table.form-table td .updated p {
clear: both;
}
/*------------------------------------------------------------------------------
Privacy Policy settings screen
------------------------------------------------------------------------------*/
.tools-privacy-policy-page form {
margin-bottom: 1.3em;
}
.tools-privacy-policy-page input.button,
.tools-privacy-policy-page select {
margin-left: 6px;
}
.tools-privacy-edit {
margin: 1.5em 0;
}
.tools-privacy-policy-page span {
line-height: 2em;
}
.privacy_requests .column-email {
width: 40%;
}
.privacy_requests .column-type {
text-align: center;
}
.privacy_requests thead td:first-child,
.privacy_requests tfoot td:first-child {
border-left: 4px solid #fff;
}
.privacy_requests tbody th {
border-left: 4px solid #fff;
background: #fff;
box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
}
.privacy_requests tbody .has-request-results th {
box-shadow: none;
}
.privacy_requests tbody .request-results th .notice {
margin: 0 0 5px;
}
.privacy_requests tbody td {
background: #fff;
box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
}
.privacy_requests tbody .has-request-results td {
box-shadow: none;
}
.privacy_requests .next_steps .button {
height: auto;
line-height: 1.5;
padding: 4px 10px;
word-break: break-all;
white-space: unset;
}
.privacy_requests .status-request-confirmed th,
.privacy_requests .status-request-confirmed td {
background-color: #f7fcfe;
border-left-color: #00a0d2;
}
.privacy_requests .status-request-failed th,
.privacy_requests .status-request-failed td {
background-color: #fef7f1;
border-left-color: #d64d21;
}
.privacy_requests .export_personal_data_failed a {
vertical-align: baseline;
}
.status-label {
font-weight: bold;
}
.status-label.status-request-pending {
font-weight: normal;
font-style: italic;
color: #6c7781;
}
.status-label.status-request-failed {
color: #aa0000;
font-weight: bold;
}
.wp-privacy-request-form {
clear: both;
}
.wp-privacy-request-form-field {
margin: 1.5em 0;
}
.wp-privacy-request-form label {
font-weight: bold;
line-height: 1.5;
padding-bottom: .5em;
display: block;
}
.wp-privacy-request-form input {
line-height: 1.5;
margin: 0;
}
.email-personal-data::before {
display: inline-block;
font: normal 20px/1 dashicons;
margin: 3px 5px 0 -2px;
speak: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
vertical-align: top;
}
.email-personal-data--sending::before {
color: #f56e28;
content: "\f463";
-webkit-animation: rotation 2s infinite linear;
animation: rotation 2s infinite linear;
}
.email-personal-data--sent::before {
color: #79ba49;
content: "\f147";
}
/* =Media Queries
-------------------------------------------------------------- */
@@ -1490,34 +1353,6 @@ table.form-table td .updated p {
max-width: 6.25em;
margin: 0;
}
/* Privacy Policy settings screen */
.tools-privacy-policy-page form.wp-create-privacy-page {
margin-bottom: 1em;
}
.tools-privacy-policy-page input#set-page,
.tools-privacy-policy-page select {
margin: 10px 0 0;
}
.tools-privacy-policy-page .wp-create-privacy-page span {
display: block;
margin-bottom: 1em;
}
.tools-privacy-policy-page .wp-create-privacy-page .button {
margin-left: 0;
}
.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) {
display: table-cell;
}
.wp-list-table.privacy_requests.widefat th input,
.wp-list-table.privacy_requests.widefat thead td input {
margin-left: 5px;
}
}
@media only screen and (max-width: 768px) {
@@ -1568,25 +1403,3 @@ table.form-table td .updated p {
margin-right: 0.5em;
}
}
@-webkit-keyframes rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}

File diff suppressed because one or more lines are too long

View File

@@ -49,7 +49,6 @@ p {
}
.login .message,
.login .success,
.login #login_error {
border-right: 4px solid #00a0d2;
padding: 12px;
@@ -59,10 +58,6 @@ p {
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
}
.login .success {
border-right-color: #46b450;
}
.login #login_error {
border-right-color: #dc3232;
}
@@ -199,12 +194,6 @@ p {
color: #124964;
}
.login .privacy-policy-page-link {
text-align: center;
width: 100%;
margin: 5em 0 2em;
}
.login form .input,
.login input[type="text"] {
font-size: 24px;

File diff suppressed because one or more lines are too long

View File

@@ -49,7 +49,6 @@ p {
}
.login .message,
.login .success,
.login #login_error {
border-left: 4px solid #00a0d2;
padding: 12px;
@@ -59,10 +58,6 @@ p {
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
}
.login .success {
border-left-color: #46b450;
}
.login #login_error {
border-left-color: #dc3232;
}
@@ -199,12 +194,6 @@ p {
color: #124964;
}
.login .privacy-policy-page-link {
text-align: center;
width: 100%;
margin: 5em 0 2em;
}
.login form .input,
.login input[type="text"] {
font-size: 24px;

File diff suppressed because one or more lines are too long

View File

@@ -29,11 +29,7 @@ if ( 'approved' === wp_get_comment_status( $comment ) && $comment->comment_post_
<div class="inside">
<div id="comment-link-box">
<strong><?php _ex( 'Permalink:', 'comment' ); ?></strong>
<span id="sample-permalink">
<a href="<?php echo esc_url( $comment_link ); ?>">
<?php echo esc_html( $comment_link ); ?>
</a>
</span>
<span id="sample-permalink"><a href="<?php echo $comment_link; ?>"><?php echo $comment_link; ?></a></span>
</div>
</div>
<?php endif; ?>

View File

@@ -14,9 +14,6 @@ $title = __( 'Freedoms' );
list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
include( ABSPATH . 'wp-admin/admin-header.php' );
$is_privacy_notice = isset( $_GET['privacy-notice'] );
?>
<div class="wrap about-wrap full-width-layout">
@@ -29,21 +26,10 @@ $is_privacy_notice = isset( $_GET['privacy-notice'] );
<h2 class="nav-tab-wrapper wp-clearfix">
<a href="about.php" class="nav-tab"><?php _e( 'What&#8217;s New' ); ?></a>
<a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab<?php if ( ! $is_privacy_notice ) { echo ' nav-tab-active'; } ?>"><?php _e( 'Freedoms' ); ?></a>
<a href="freedoms.php?privacy-notice" class="nav-tab<?php if ( $is_privacy_notice ) { echo ' nav-tab-active'; } ?>"><?php _e( 'Privacy' ); ?></a>
<a href="freedoms.php" class="nav-tab nav-tab-active"><?php _e( 'Freedoms' ); ?></a>
<a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
</h2>
<?php if ( $is_privacy_notice ) : ?>
<div class="about-wrap-content">
<p class="about-description"><?php _e( 'From time to time, your WordPress site may send data to WordPress.org &#8212; including, but not limited to &#8212; the version of WordPress you are using, and a list of installed plugins and themes.' ); ?></p>
<p><?php printf( __( 'This data is used to provide general enhancements to WordPress, which includes helping to protect your site by finding and automatically installing new updates. It is also used to calculate statistics, such as those shown on the <a href="%s">WordPress.org stats page</a>.' ), 'https://wordpress.org/about/stats/' ); ?></p>
<p><?php printf( __( 'We take privacy and transparency very seriously. To learn more about what data we collect, and how we use it, please visit <a href="%s">WordPress.org/about/privacy</a>.' ), 'https://wordpress.org/about/privacy/' ); ?></p>
</div>
<?php else : ?>
<div class="about-wrap-content">
<p class="about-description"><?php printf( __( 'WordPress is Free and open source software, built by a distributed community of mostly volunteer developers from around the world. WordPress comes with some awesome, worldview-changing rights courtesy of its <a href="%s">license</a>, the GPL.' ), 'https://wordpress.org/about/license/' ); ?></p>
@@ -66,6 +52,5 @@ $is_privacy_notice = isset( $_GET['privacy-notice'] );
<p><?php _e( 'Don&#8217;t you wish all software came with these freedoms? So do we! For more information, check out the <a href="https://www.fsf.org/">Free Software Foundation</a>.' ); ?></p>
</div>
<?php endif; ?>
</div>
<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>

View File

@@ -45,11 +45,6 @@ add_action( 'admin_head', 'wp_color_scheme_settings' );
add_action( 'admin_head', 'wp_site_icon' );
add_action( 'admin_head', '_ipad_meta' );
// Privacy tools
add_action( 'admin_menu', '_wp_privacy_hook_requests_page' );
add_action( 'load-tools_page_export_personal_data', '_wp_privacy_requests_screen_options' );
add_action( 'load-tools_page_remove_personal_data', '_wp_privacy_requests_screen_options' );
// Prerendering.
if ( ! is_customize_preview() ) {
add_filter( 'admin_print_styles', 'wp_resource_hints', 1 );
@@ -133,24 +128,3 @@ add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async
add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 );
// Privacy hooks
add_filter( 'wp_privacy_personal_data_erasure_page', 'wp_privacy_process_personal_data_erasure_page', 10, 5 );
add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 7 );
add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10 );
add_action( 'wp_privacy_personal_data_erased', '_wp_privacy_send_erasure_fulfillment_notification', 10 );
// Privacy policy text changes check.
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'text_change_check' ), 100 );
// Show a "postbox" with the text suggestions for a privacy policy.
add_action( 'edit_form_after_title', array( 'WP_Privacy_Policy_Content', 'notice' ) );
// Add the suggested policy text from WordPress.
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'add_suggested_content' ), 1 );
// Update the cached policy info when the policy page is updated.
add_action( 'post_updated', array( 'WP_Privacy_Policy_Content', '_policy_page_updated' ) );
// Append '(Draft)' to draft page titles in the privacy page dropdown.
add_filter( 'list_pages', '_wp_privacy_settings_filter_draft_page_titles', 10, 2 );

View File

@@ -1484,19 +1484,6 @@ function wp_ajax_update_welcome_panel() {
wp_die( 1 );
}
/**
* Ajax handler for updating whether to display the Try Gutenberg panel.
*
* @since 4.9.8
*/
function wp_ajax_update_try_gutenberg_panel() {
check_ajax_referer( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce' );
update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', empty( $_POST['visible'] ) ? 0 : 1 );
wp_die( 1 );
}
/**
* Ajax handler for retrieving menu meta boxes.
*
@@ -2455,7 +2442,7 @@ function wp_ajax_query_attachments() {
$query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array();
$keys = array(
's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type',
'post_parent', 'author', 'post__in', 'post__not_in', 'year', 'monthnum'
'post_parent', 'post__in', 'post__not_in', 'year', 'monthnum'
);
foreach ( get_taxonomies_for_attachments( 'objects' ) as $t ) {
if ( $t->query_var && isset( $query[ $t->query_var ] ) ) {
@@ -4030,402 +4017,3 @@ function wp_ajax_edit_theme_plugin_file() {
) );
}
}
/**
* Ajax handler for exporting a user's personal data.
*
* @since 4.9.6
*/
function wp_ajax_wp_privacy_export_personal_data() {
if ( empty( $_POST['id'] ) ) {
wp_send_json_error( __( 'Missing request ID.' ) );
}
$request_id = (int) $_POST['id'];
if ( $request_id < 1 ) {
wp_send_json_error( __( 'Invalid request ID.' ) );
}
if ( ! current_user_can( 'export_others_personal_data' ) ) {
wp_send_json_error( __( 'Invalid request.' ) );
}
check_ajax_referer( 'wp-privacy-export-personal-data-' . $request_id, 'security' );
// Get the request data.
$request = wp_get_user_request_data( $request_id );
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
wp_send_json_error( __( 'Invalid request type.' ) );
}
$email_address = $request->email;
if ( ! is_email( $email_address ) ) {
wp_send_json_error( __( 'A valid email address must be given.' ) );
}
if ( ! isset( $_POST['exporter'] ) ) {
wp_send_json_error( __( 'Missing exporter index.' ) );
}
$exporter_index = (int) $_POST['exporter'];
if ( ! isset( $_POST['page'] ) ) {
wp_send_json_error( __( 'Missing page index.' ) );
}
$page = (int) $_POST['page'];
$send_as_email = isset( $_POST['sendAsEmail'] ) ? ( 'true' === $_POST['sendAsEmail'] ) : false;
/**
* Filters the array of exporter callbacks.
*
* @since 4.9.6
*
* @param array $args {
* An array of callable exporters of personal data. Default empty array.
*
* @type array {
* Array of personal data exporters.
*
* @type string $callback Callable exporter function that accepts an
* email address and a page and returns an array
* of name => value pairs of personal data.
* @type string $exporter_friendly_name Translated user facing friendly name for the
* exporter.
* }
* }
*/
$exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
if ( ! is_array( $exporters ) ) {
wp_send_json_error( __( 'An exporter has improperly used the registration filter.' ) );
}
// Do we have any registered exporters?
if ( 0 < count( $exporters ) ) {
if ( $exporter_index < 1 ) {
wp_send_json_error( __( 'Exporter index cannot be negative.' ) );
}
if ( $exporter_index > count( $exporters ) ) {
wp_send_json_error( __( 'Exporter index out of range.' ) );
}
if ( $page < 1 ) {
wp_send_json_error( __( 'Page index cannot be less than one.' ) );
}
$exporter_keys = array_keys( $exporters );
$exporter_key = $exporter_keys[ $exporter_index - 1 ];
$exporter = $exporters[ $exporter_key ];
if ( ! is_array( $exporter ) ) {
wp_send_json_error(
/* translators: %s: array index */
sprintf( __( 'Expected an array describing the exporter at index %s.' ), $exporter_key )
);
}
if ( ! array_key_exists( 'exporter_friendly_name', $exporter ) ) {
wp_send_json_error(
/* translators: %s: array index */
sprintf( __( 'Exporter array at index %s does not include a friendly name.' ), $exporter_key )
);
}
if ( ! array_key_exists( 'callback', $exporter ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Exporter does not include a callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
);
}
if ( ! is_callable( $exporter['callback'] ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Exporter callback is not a valid callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
);
}
$callback = $exporter['callback'];
$exporter_friendly_name = $exporter['exporter_friendly_name'];
$response = call_user_func( $callback, $email_address, $page );
if ( is_wp_error( $response ) ) {
wp_send_json_error( $response );
}
if ( ! is_array( $response ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Expected response as an array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
);
}
if ( ! array_key_exists( 'data', $response ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Expected data in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
);
}
if ( ! is_array( $response['data'] ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Expected data array in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
);
}
if ( ! array_key_exists( 'done', $response ) ) {
wp_send_json_error(
/* translators: %s: exporter friendly name */
sprintf( __( 'Expected done (boolean) in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
);
}
} else {
// No exporters, so we're done.
$exporter_key = '';
$response = array(
'data' => array(),
'done' => true,
);
}
/**
* Filters a page of personal data exporter data. Used to build the export report.
*
* Allows the export response to be consumed by destinations in addition to Ajax.
*
* @since 4.9.6
*
* @param array $response The personal data for the given exporter and page.
* @param int $exporter_index The index of the exporter that provided this data.
* @param string $email_address The email address associated with this personal data.
* @param int $page The page for this response.
* @param int $request_id The privacy request post ID associated with this request.
* @param bool $send_as_email Whether the final results of the export should be emailed to the user.
* @param string $exporter_key The key (slug) of the exporter that provided this data.
*/
$response = apply_filters( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key );
if ( is_wp_error( $response ) ) {
wp_send_json_error( $response );
}
wp_send_json_success( $response );
}
/**
* Ajax handler for erasing personal data.
*
* @since 4.9.6
*/
function wp_ajax_wp_privacy_erase_personal_data() {
if ( empty( $_POST['id'] ) ) {
wp_send_json_error( __( 'Missing request ID.' ) );
}
$request_id = (int) $_POST['id'];
if ( $request_id < 1 ) {
wp_send_json_error( __( 'Invalid request ID.' ) );
}
// Both capabilities are required to avoid confusion, see `_wp_personal_data_removal_page()`.
if ( ! current_user_can( 'erase_others_personal_data' ) || ! current_user_can( 'delete_users' ) ) {
wp_send_json_error( __( 'Invalid request.' ) );
}
check_ajax_referer( 'wp-privacy-erase-personal-data-' . $request_id, 'security' );
// Get the request data.
$request = wp_get_user_request_data( $request_id );
if ( ! $request || 'remove_personal_data' !== $request->action_name ) {
wp_send_json_error( __( 'Invalid request ID.' ) );
}
$email_address = $request->email;
if ( ! is_email( $email_address ) ) {
wp_send_json_error( __( 'Invalid email address in request.' ) );
}
if ( ! isset( $_POST['eraser'] ) ) {
wp_send_json_error( __( 'Missing eraser index.' ) );
}
$eraser_index = (int) $_POST['eraser'];
if ( ! isset( $_POST['page'] ) ) {
wp_send_json_error( __( 'Missing page index.' ) );
}
$page = (int) $_POST['page'];
/**
* Filters the array of personal data eraser callbacks.
*
* @since 4.9.6
*
* @param array $args {
* An array of callable erasers of personal data. Default empty array.
*
* @type array {
* Array of personal data exporters.
*
* @type string $callback Callable eraser that accepts an email address and
* a page and returns an array with boolean values for
* whether items were removed or retained and any messages
* from the eraser, as well as if additional pages are
* available.
* @type string $exporter_friendly_name Translated user facing friendly name for the eraser.
* }
* }
*/
$erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
// Do we have any registered erasers?
if ( 0 < count( $erasers ) ) {
if ( $eraser_index < 1 ) {
wp_send_json_error( __( 'Eraser index cannot be less than one.' ) );
}
if ( $eraser_index > count( $erasers ) ) {
wp_send_json_error( __( 'Eraser index is out of range.' ) );
}
if ( $page < 1 ) {
wp_send_json_error( __( 'Page index cannot be less than one.' ) );
}
$eraser_keys = array_keys( $erasers );
$eraser_key = $eraser_keys[ $eraser_index - 1 ];
$eraser = $erasers[ $eraser_key ];
if ( ! is_array( $eraser ) ) {
/* translators: %d: array index */
wp_send_json_error( sprintf( __( 'Expected an array describing the eraser at index %d.' ), $eraser_index ) );
}
if ( ! array_key_exists( 'callback', $eraser ) ) {
/* translators: %d: array index */
wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a callback.' ), $eraser_index ) );
}
if ( ! is_callable( $eraser['callback'] ) ) {
/* translators: %d: array index */
wp_send_json_error( sprintf( __( 'Eraser callback at index %d is not a valid callback.' ), $eraser_index ) );
}
if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) {
/* translators: %d: array index */
wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a friendly name.' ), $eraser_index ) );
}
$callback = $eraser['callback'];
$eraser_friendly_name = $eraser['eraser_friendly_name'];
$response = call_user_func( $callback, $email_address, $page );
if ( is_wp_error( $response ) ) {
wp_send_json_error( $response );
}
if ( ! is_array( $response ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Did not receive array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
if ( ! array_key_exists( 'items_removed', $response ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Expected items_removed key in response array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
if ( ! array_key_exists( 'items_retained', $response ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Expected items_retained key in response array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
if ( ! array_key_exists( 'messages', $response ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Expected messages key in response array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
if ( ! is_array( $response['messages'] ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Expected messages key to reference an array in response array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
if ( ! array_key_exists( 'done', $response ) ) {
wp_send_json_error(
sprintf(
/* translators: 1: eraser friendly name, 2: array index */
__( 'Expected done flag in response array from %1$s eraser (index %2$d).' ),
esc_html( $eraser_friendly_name ),
$eraser_index
)
);
}
} else {
// No erasers, so we're done.
$eraser_key = '';
$response = array(
'items_removed' => false,
'items_retained' => false,
'messages' => array(),
'done' => true,
);
}
/**
* Filters a page of personal data eraser data.
*
* Allows the erasure response to be consumed by destinations in addition to Ajax.
*
* @since 4.9.6
*
* @param array $response The personal data for the given exporter and page.
* @param int $eraser_index The index of the eraser that provided this data.
* @param string $email_address The email address associated with this personal data.
* @param int $page The page for this response.
* @param int $request_id The privacy request post ID associated with this request.
* @param string $eraser_key The key (slug) of the eraser that provided this data.
*/
$response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id, $eraser_key );
if ( is_wp_error( $response ) ) {
wp_send_json_error( $response );
}
wp_send_json_success( $response );
}

View File

@@ -234,6 +234,7 @@ class WP_Community_Events {
*/
public static function get_unsafe_client_ip() {
$client_ip = $netmask = false;
$ip_prefix = '';
// In order of preference, with the best ones for this purpose first.
$address_headers = array(
@@ -264,13 +265,43 @@ class WP_Community_Events {
return false;
}
$anon_ip = wp_privacy_anonymize_ip( $client_ip, true );
// Detect what kind of IP address this is.
$is_ipv6 = substr_count( $client_ip, ':' ) > 1;
$is_ipv4 = ( 3 === substr_count( $client_ip, '.' ) );
if ( '0.0.0.0' === $anon_ip || '::' === $anon_ip ) {
if ( $is_ipv6 && $is_ipv4 ) {
// IPv6 compatibility mode, temporarily strip the IPv6 part, and treat it like IPv4.
$ip_prefix = '::ffff:';
$client_ip = preg_replace( '/^\[?[0-9a-f:]*:/i', '', $client_ip );
$client_ip = str_replace( ']', '', $client_ip );
$is_ipv6 = false;
}
if ( $is_ipv6 ) {
// IPv6 addresses will always be enclosed in [] if there's a port.
$ip_start = 1;
$ip_end = (int) strpos( $client_ip, ']' ) - 1;
$netmask = 'ffff:ffff:ffff:ffff:0000:0000:0000:0000';
// Strip the port (and [] from IPv6 addresses), if they exist.
if ( $ip_end > 0 ) {
$client_ip = substr( $client_ip, $ip_start, $ip_end );
}
// Partially anonymize the IP by reducing it to the corresponding network ID.
if ( function_exists( 'inet_pton' ) && function_exists( 'inet_ntop' ) ) {
$client_ip = inet_ntop( inet_pton( $client_ip ) & inet_pton( $netmask ) );
}
} elseif ( $is_ipv4 ) {
// Strip any port and partially anonymize the IP.
$last_octet_position = strrpos( $client_ip, '.' );
$client_ip = substr( $client_ip, 0, $last_octet_position ) . '.0';
} else {
return false;
}
return $anon_ip;
// Restore the IPv6 prefix to compatibility mode addresses.
return $ip_prefix . $client_ip;
}
/**
@@ -385,33 +416,20 @@ class WP_Community_Events {
}
/**
* Prepares the event list for presentation.
*
* Discards expired events, and makes WordCamps "sticky." Attendees need more
* advanced notice about WordCamps than they do for meetups, so camps should
* appear in the list sooner. If a WordCamp is coming up, the API will "stick"
* it in the response, even if it wouldn't otherwise appear. When that happens,
* the event will be at the end of the list, and will need to be moved into a
* higher position, so that it doesn't get trimmed off.
* Discards expired events, and reduces the remaining list.
*
* @since 4.8.0
* @since 4.9.7 Stick a WordCamp to the final list.
*
* @param array $response_body The response body which contains the events.
* @return array The response body with events trimmed.
*/
protected function trim_events( $response_body ) {
if ( isset( $response_body['events'] ) ) {
$wordcamps = array();
$current_timestamp = current_time( 'timestamp' );
foreach ( $response_body['events'] as $key => $event ) {
/*
* Skip WordCamps, because they might be multi-day events.
* Save a copy so they can be pinned later.
*/
if ( 'wordcamp' === $event['type'] ) {
$wordcamps[] = $event;
// Skip WordCamps, because they might be multi-day events.
if ( 'meetup' !== $event['type'] ) {
continue;
}
@@ -423,13 +441,6 @@ class WP_Community_Events {
}
$response_body['events'] = array_slice( $response_body['events'], 0, 3 );
$trimmed_event_types = wp_list_pluck( $response_body['events'], 'type' );
// Make sure the soonest upcoming WordCamps is pinned in the list.
if ( ! in_array( 'wordcamp', $trimmed_event_types ) && $wordcamps ) {
array_pop( $response_body['events'] );
array_push( $response_body['events'], $wordcamps[0] );
}
}
return $response_body;

View File

@@ -43,7 +43,7 @@ final class WP_Internal_Pointers {
* )
*/
$registered_pointers = array(
'index.php' => 'wp496_privacy',
// None currently
);
// Check if screen related pointer is registered
@@ -66,11 +66,7 @@ final class WP_Internal_Pointers {
* )
*/
$caps_required = array(
'wp496_privacy' => array(
'manage_privacy_options',
'export_others_personal_data',
'erase_others_personal_data',
),
// None currently
);
// Get dismissed pointers
@@ -155,39 +151,6 @@ final class WP_Internal_Pointers {
public static function pointer_wp390_widgets() {}
public static function pointer_wp410_dfw() {}
/**
* Display a pointer for the new privacy tools.
*
* @since 4.9.6
*/
public static function pointer_wp496_privacy() {
$content = '<h3>' . __( 'Personal Data and Privacy' ) . '</h3>';
$content .= '<h4>' . __( 'Personal Data Export and Erasure' ) . '</h4>';
$content .= '<p>' . __( 'New <strong>Tools</strong> have been added to help you with personal data export and erasure requests.' ) . '</p>';
$content .= '<h4>' . __( 'Privacy Policy' ) . '</h4>';
$content .= '<p>' . __( 'Create or select your site&#8217;s privacy policy page under <strong>Settings &gt; Privacy</strong> to keep your users informed and aware.' ) . '</p>';
if ( is_rtl() ) {
$position = array(
'edge' => 'right',
'align' => 'bottom',
);
} else {
$position = array(
'edge' => 'left',
'align' => 'bottom',
);
}
$js_args = array(
'content' => $content,
'position' => $position,
'pointerClass' => 'wp-pointer arrow-bottom',
'pointerWidth' => 420,
);
self::print_js( 'wp496_privacy', '#menu-tools', $js_args );
}
/**
* Prevents new users from seeing existing 'new feature' pointers.
*
@@ -198,6 +161,6 @@ final class WP_Internal_Pointers {
* @param int $user_id User ID.
*/
public static function dismiss_pointers_for_new_users( $user_id ) {
add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp496_privacy' );
add_user_meta( $user_id, 'dismissed_wp_pointers', '' );
}
}

View File

@@ -119,15 +119,8 @@ class WP_Media_List_Table extends WP_List_Table {
$label[0]
);
}
$type_links['detached'] = '<option value="detached"' . ( $this->detached ? ' selected="selected"' : '' ) . '>' . __( 'Unattached' ) . '</option>';
$type_links['mine'] = sprintf(
'<option value="mine"%s>%s</option>',
selected( 'mine' === $filter, true, false ),
_x( 'Mine', 'media items' )
);
if ( $this->is_trash || ( defined( 'MEDIA_TRASH') && MEDIA_TRASH ) ) {
$type_links['trash'] = sprintf(
'<option value="trash"%s>%s</option>',
@@ -135,7 +128,6 @@ class WP_Media_List_Table extends WP_List_Table {
_x( 'Trash', 'attachment filter' )
);
}
return $type_links;
}

View File

@@ -1020,10 +1020,7 @@ final class WP_Screen {
update_user_meta( get_current_user_id(), 'show_welcome_panel', $welcome_checked );
} else {
$welcome_checked = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
if ( '' === $welcome_checked ) {
$welcome_checked = '1';
}
if ( '2' === $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
if ( 2 == $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
$welcome_checked = false;
}
}
@@ -1031,24 +1028,6 @@ final class WP_Screen {
echo '<input type="checkbox" id="wp_welcome_panel-hide"' . checked( (bool) $welcome_checked, true, false ) . ' />';
echo _x( 'Welcome', 'Welcome panel' ) . "</label>\n";
}
if ( 'dashboard' === $this->id && has_action( 'try_gutenberg_panel' ) ) {
if ( isset( $_GET['try_gutenberg'] ) ) {
$try_gutenberg_checked = empty( $_GET['try_gutenberg'] ) ? 0 : 1;
update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', $try_gutenberg_checked );
} else {
$try_gutenberg_checked = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
if ( '' === $try_gutenberg_checked ) {
$try_gutenberg_checked = '1';
}
if ( '2' === $try_gutenberg_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
$try_gutenberg_checked = false;
}
}
echo '<label for="wp_try_gutenberg_panel-hide">';
echo '<input type="checkbox" id="wp_try_gutenberg_panel-hide"' . checked( (bool) $try_gutenberg_checked, true, false ) . ' />';
echo __( 'New Editor' ) . "</label>\n";
}
?>
</fieldset>
<?php

View File

@@ -201,7 +201,6 @@ __('Port-au-Prince', 'continents-cities');
__('Porto Acre', 'continents-cities');
__('Porto Velho', 'continents-cities');
__('Puerto Rico', 'continents-cities');
__('Punta Arenas', 'continents-cities');
__('Rainy River', 'continents-cities');
__('Rankin Inlet', 'continents-cities');
__('Recife', 'continents-cities');
@@ -263,7 +262,6 @@ __('Aqtau', 'continents-cities');
__('Aqtobe', 'continents-cities');
__('Ashgabat', 'continents-cities');
__('Ashkhabad', 'continents-cities');
__('Atyrau', 'continents-cities');
__('Baghdad', 'continents-cities');
__('Bahrain', 'continents-cities');
__('Baku', 'continents-cities');
@@ -284,7 +282,6 @@ __('Dhaka', 'continents-cities');
__('Dili', 'continents-cities');
__('Dubai', 'continents-cities');
__('Dushanbe', 'continents-cities');
__('Famagusta', 'continents-cities');
__('Gaza', 'continents-cities');
__('Harbin', 'continents-cities');
__('Hebron', 'continents-cities');
@@ -350,7 +347,6 @@ __('Ust-Nera', 'continents-cities');
__('Vientiane', 'continents-cities');
__('Vladivostok', 'continents-cities');
__('Yakutsk', 'continents-cities');
__('Yangon', 'continents-cities');
__('Yekaterinburg', 'continents-cities');
__('Yerevan', 'continents-cities');
@@ -475,7 +471,6 @@ __('Rome', 'continents-cities');
__('Samara', 'continents-cities');
__('San Marino', 'continents-cities');
__('Sarajevo', 'continents-cities');
__('Saratov', 'continents-cities');
__('Simferopol', 'continents-cities');
__('Skopje', 'continents-cities');
__('Sofia', 'continents-cities');

View File

@@ -24,18 +24,6 @@ function wp_dashboard_setup() {
/* Register Widgets and Controls */
// Try Gutenberg
// If Gutenberg isn't activated, only show the panel to users who can install and activate it.
$plugins = get_plugins();
if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'install_plugins' ) ) {
remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
}
// If Gutenberg is activated, only show it to users who can use it.
if ( is_plugin_active( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'edit_posts' ) ) {
remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
}
$response = wp_check_browser_version();
if ( $response && $response['upgrade'] ) {
@@ -1631,140 +1619,3 @@ function wp_welcome_panel() {
</div>
<?php
}
/**
* Displays a Try Gutenberg Panel, to introduce people to Gutenberg
*
* @since 4.9.8
*/
function wp_try_gutenberg_panel() {
$plugins = get_plugins();
$action = $url = $classes = '';
$classic_action = $classic_url = $classic_classes = '';
if ( current_user_can( 'install_plugins' ) ) {
if ( empty( $plugins['gutenberg/gutenberg.php'] ) ) {
if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
$action = __( 'Install Gutenberg' );
$url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=gutenberg' ), 'install-plugin_gutenberg' );
$classes = ' install-now';
}
} else if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) ) {
$action = __( 'Activate Gutenberg' );
$url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=gutenberg/gutenberg.php&from=try-gutenberg' ), 'activate-plugin_gutenberg/gutenberg.php' );
$classes = ' activate-now';
}
if ( empty( $plugins['classic-editor/classic-editor.php'] ) ) {
if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
$classic_action = __( 'Install the Classic Editor' );
$classic_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' );
$classic_classes = ' install-now';
}
} else if ( is_plugin_inactive( 'classic-editor/classic-editor.php' ) ) {
$classic_action = __( 'Activate the Classic Editor' );
$classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );
$classic_classes = ' activate-now';
} else {
$classic_action = __( 'The Classic Editor is activated' );
$classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );;
$classic_classes = ' button-disabled install-now updated-message';
}
}
if ( current_user_can( 'edit_posts' ) && is_plugin_active( 'gutenberg/gutenberg.php' ) ) {
$action = __( 'Try Gutenberg' );
$url = admin_url( 'admin.php?page=gutenberg' );
}
?>
<div class="try-gutenberg-panel-content">
<h2><?php _e( 'A new, modern publishing experience is coming soon.' ); ?></h2>
<p class="about-description"><?php _e( "Take your words, media, and layout in new directions with Gutenberg, the WordPress editor we're currently building." ); ?></p>
<hr />
<div class="try-gutenberg-panel-column-container">
<div class="try-gutenberg-panel-column try-gutenberg-panel-image-column">
<picture>
<source srcset="about:blank" media="(max-width: 1024px)">
<img src="https://s.w.org/images/core/gutenberg-screenshot.png?<?php echo date( 'Ymd' ); ?>" alt="<?php esc_attr_e( 'Screenshot from the Gutenberg interface' ); ?>" />
</picture>
</div>
<div class="try-gutenberg-panel-column plugin-card-gutenberg">
<div>
<h3><?php _e( 'Test the new editor today.' ); ?></h3>
<p>
<?php _e( "You can take Gutenberg for a spin (and share your feedback, if youd like) before we officially release it, by installing it as a plugin." ); ?>
<?php
printf(
/* translators: 1: Gutenberg call for testing handbook link, 2: Gutenberg GitHub repository issues link, 3: Gutenberg GitHub repository CONTRIBUTING.md link */
__( 'You can help by <a href="%1$s">testing</a>, <a href="%2$s">filing bugs</a>, or contributing on the <a href="%3$s">GitHub repository</a>.' ),
'https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/',
'https://github.com/WordPress/gutenberg/issues',
'https://github.com/WordPress/gutenberg/blob/master/CONTRIBUTING.md'
);
?>
</p>
</div>
<div class="try-gutenberg-action">
<?php if ( $action ) { ?>
<p><a class="button button-primary button-hero<?php echo $classes; ?>" href="<?php echo esc_url( $url ); ?>" data-name="<?php esc_attr_e( 'Gutenberg' ); ?>" data-slug="gutenberg"><?php echo $action; ?></a></p>
<?php } ?>
<p>
<?php
$learnmore = sprintf(
/* translators: Link to https://wordpress.org/gutenberg/ */
__( '<a href="%s">Learn more about Gutenberg</a>' ),
__( 'https://wordpress.org/gutenberg/' )
);
/**
* Filters the "Learn more" link in the Try Gutenberg panel.
*
* It allows hosts or site owners to change the link, to provide extra
* information about Gutenberg, specific to their service.
*
* WARNING: This filter will only exist in the 4.9.x series, it will not be
* added to WordPress 5.0 and later.
*
* @since 4.9.8
*/
echo apply_filters( 'try_gutenberg_learn_more_link', $learnmore );
?>
</p>
</div>
</div>
<div class="try-gutenberg-panel-column plugin-card-classic-editor">
<div>
<h3><?php _e( 'Not quite ready?' ); ?></h3>
<p>
<?php _e( 'The new editor will be enabled by default in the next major release of WordPress. If youre not sure how compatible your current themes and plugins are, weve got you covered.' ); ?>
<?php
printf(
/* translators: Link to the Classic Editor plugin page */
__( 'Install the <a href="%s">Classic Editor plugin</a> to keep using the current editor until youre ready to make the switch.' ),
__( 'https://wordpress.org/plugins/classic-editor' )
);
?>
</p>
</div>
<?php if ( $classic_action ) { ?>
<div class="try-gutenberg-action">
<p><a class="button button-secondary button-hero<?php echo $classic_classes; ?>" href="<?php echo esc_url( $classic_url ); ?>" data-name="<?php esc_attr_e( 'Classic Editor' ); ?>" data-slug="classic-editor"><?php echo $classic_action; ?></a></p>
</div>
<?php } ?>
</div>
</div>
</div>
<?php
}

View File

@@ -1797,454 +1797,3 @@ function wp_print_request_filesystem_credentials_modal() {
</div>
<?php
}
/**
* Generate a single group for the personal data export report.
*
* @since 4.9.6
*
* @param array $group_data {
* The group data to render.
*
* @type string $group_label The user-facing heading for the group, e.g. 'Comments'.
* @type array $items {
* An array of group items.
*
* @type array $group_item_data {
* An array of name-value pairs for the item.
*
* @type string $name The user-facing name of an item name-value pair, e.g. 'IP Address'.
* @type string $value The user-facing value of an item data pair, e.g. '50.60.70.0'.
* }
* }
* }
* @return string The HTML for this group and its items.
*/
function wp_privacy_generate_personal_data_export_group_html( $group_data ) {
$allowed_tags = array(
'a' => array(
'href' => array(),
'target' => array()
),
'br' => array()
);
$allowed_protocols = array( 'http', 'https' );
$group_html = '';
$group_html .= '<h2>' . esc_html( $group_data['group_label'] ) . '</h2>';
$group_html .= '<div>';
foreach ( (array) $group_data['items'] as $group_item_id => $group_item_data ) {
$group_html .= '<table>';
$group_html .= '<tbody>';
foreach ( (array) $group_item_data as $group_item_datum ) {
$value = $group_item_datum['value'];
// If it looks like a link, make it a link
if ( false === strpos( $value, ' ' ) && ( 0 === strpos( $value, 'http://' ) || 0 === strpos( $value, 'https://' ) ) ) {
$value = '<a href="' . esc_url( $value ) . '">' . esc_html( $value ) . '</a>';
}
$group_html .= '<tr>';
$group_html .= '<th>' . esc_html( $group_item_datum['name'] ) . '</th>';
$group_html .= '<td>' . wp_kses( $value, $allowed_tags, $allowed_protocols ) . '</td>';
$group_html .= '</tr>';
}
$group_html .= '</tbody>';
$group_html .= '</table>';
}
$group_html .= '</div>';
return $group_html;
}
/**
* Generate the personal data export file.
*
* @since 4.9.6
*
* @param int $request_id The export request ID.
*/
function wp_privacy_generate_personal_data_export_file( $request_id ) {
if ( ! class_exists( 'ZipArchive' ) ) {
wp_send_json_error( __( 'Unable to generate export file. ZipArchive not available.' ) );
}
// Get the request data.
$request = wp_get_user_request_data( $request_id );
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
wp_send_json_error( __( 'Invalid request ID when generating export file.' ) );
}
$email_address = $request->email;
if ( ! is_email( $email_address ) ) {
wp_send_json_error( __( 'Invalid email address when generating export file.' ) );
}
// Create the exports folder if needed.
$exports_dir = wp_privacy_exports_dir();
$exports_url = wp_privacy_exports_url();
if ( ! wp_mkdir_p( $exports_dir ) ) {
wp_send_json_error( __( 'Unable to create export folder.' ) );
}
// Protect export folder from browsing.
$index_pathname = $exports_dir . 'index.html';
if ( ! file_exists( $index_pathname ) ) {
$file = fopen( $index_pathname, 'w' );
if ( false === $file ) {
wp_send_json_error( __( 'Unable to protect export folder from browsing.' ) );
}
fwrite( $file, '<!-- Silence is golden. -->' );
fclose( $file );
}
$stripped_email = str_replace( '@', '-at-', $email_address );
$stripped_email = sanitize_title( $stripped_email ); // slugify the email address
$obscura = wp_generate_password( 32, false, false );
$file_basename = 'wp-personal-data-file-' . $stripped_email . '-' . $obscura;
$html_report_filename = $file_basename . '.html';
$html_report_pathname = wp_normalize_path( $exports_dir . $html_report_filename );
$file = fopen( $html_report_pathname, 'w' );
if ( false === $file ) {
wp_send_json_error( __( 'Unable to open export file (HTML report) for writing.' ) );
}
$title = sprintf(
/* translators: %s: user's e-mail address */
__( 'Personal Data Export for %s' ),
$email_address
);
// Open HTML.
fwrite( $file, "<!DOCTYPE html>\n" );
fwrite( $file, "<html>\n" );
// Head.
fwrite( $file, "<head>\n" );
fwrite( $file, "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n" );
fwrite( $file, "<style type='text/css'>" );
fwrite( $file, "body { color: black; font-family: Arial, sans-serif; font-size: 11pt; margin: 15px auto; width: 860px; }" );
fwrite( $file, "table { background: #f0f0f0; border: 1px solid #ddd; margin-bottom: 20px; width: 100%; }" );
fwrite( $file, "th { padding: 5px; text-align: left; width: 20%; }" );
fwrite( $file, "td { padding: 5px; }" );
fwrite( $file, "tr:nth-child(odd) { background-color: #fafafa; }" );
fwrite( $file, "</style>" );
fwrite( $file, "<title>" );
fwrite( $file, esc_html( $title ) );
fwrite( $file, "</title>" );
fwrite( $file, "</head>\n" );
// Body.
fwrite( $file, "<body>\n" );
// Heading.
fwrite( $file, "<h1>" . esc_html__( 'Personal Data Export' ) . "</h1>" );
// And now, all the Groups.
$groups = get_post_meta( $request_id, '_export_data_grouped', true );
// First, build an "About" group on the fly for this report.
$about_group = array(
/* translators: Header for the About section in a personal data export. */
'group_label' => _x( 'About', 'personal data group label' ),
'items' => array(
'about-1' => array(
array(
'name' => _x( 'Report generated for', 'email address' ),
'value' => $email_address,
),
array(
'name' => _x( 'For site', 'website name' ),
'value' => get_bloginfo( 'name' ),
),
array(
'name' => _x( 'At URL', 'website URL' ),
'value' => get_bloginfo( 'url' ),
),
array(
'name' => _x( 'On', 'date/time' ),
'value' => current_time( 'mysql' ),
),
),
),
);
// Merge in the special about group.
$groups = array_merge( array( 'about' => $about_group ), $groups );
// Now, iterate over every group in $groups and have the formatter render it in HTML.
foreach ( (array) $groups as $group_id => $group_data ) {
fwrite( $file, wp_privacy_generate_personal_data_export_group_html( $group_data ) );
}
fwrite( $file, "</body>\n" );
// Close HTML.
fwrite( $file, "</html>\n" );
fclose( $file );
/*
* Now, generate the ZIP.
*
* If an archive has already been generated, then remove it and reuse the
* filename, to avoid breaking any URLs that may have been previously sent
* via email.
*/
$error = false;
$archive_url = get_post_meta( $request_id, '_export_file_url', true );
$archive_pathname = get_post_meta( $request_id, '_export_file_path', true );
if ( empty( $archive_pathname ) || empty( $archive_url ) ) {
$archive_filename = $file_basename . '.zip';
$archive_pathname = $exports_dir . $archive_filename;
$archive_url = $exports_url . $archive_filename;
update_post_meta( $request_id, '_export_file_url', $archive_url );
update_post_meta( $request_id, '_export_file_path', wp_normalize_path( $archive_pathname ) );
}
if ( ! empty( $archive_pathname ) && file_exists( $archive_pathname ) ) {
wp_delete_file( $archive_pathname );
}
$zip = new ZipArchive;
if ( true === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) {
if ( ! $zip->addFile( $html_report_pathname, 'index.html' ) ) {
$error = __( 'Unable to add data to export file.' );
}
$zip->close();
if ( ! $error ) {
/**
* Fires right after all personal data has been written to the export file.
*
* @since 4.9.6
*
* @param string $archive_pathname The full path to the export file on the filesystem.
* @param string $archive_url The URL of the archive file.
* @param string $html_report_pathname The full path to the personal data report on the filesystem.
* @param int $request_id The export request ID.
*/
do_action( 'wp_privacy_personal_data_export_file_created', $archive_pathname, $archive_url, $html_report_pathname, $request_id );
}
} else {
$error = __( 'Unable to open export file (archive) for writing.' );
}
// And remove the HTML file.
unlink( $html_report_pathname );
if ( $error ) {
wp_send_json_error( $error );
}
}
/**
* Send an email to the user with a link to the personal data export file
*
* @since 4.9.6
*
* @param int $request_id The request ID for this personal data export.
* @return true|WP_Error True on success or `WP_Error` on failure.
*/
function wp_privacy_send_personal_data_export_email( $request_id ) {
// Get the request data.
$request = wp_get_user_request_data( $request_id );
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
return new WP_Error( 'invalid', __( 'Invalid request ID when sending personal data export email.' ) );
}
/** This filter is documented in wp-includes/functions.php */
$expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
$expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration );
/* translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are placeholders. */
$email_text = __(
'Howdy,
Your request for an export of personal data has been completed. You may
download your personal data by clicking on the link below. For privacy
and security, we will automatically delete the file on ###EXPIRATION###,
so please download it before then.
###LINK###
Regards,
All at ###SITENAME###
###SITEURL###'
);
/**
* Filters the text of the email sent with a personal data export file.
*
* The following strings have a special meaning and will get replaced dynamically:
* ###EXPIRATION### The date when the URL will be automatically deleted.
* ###LINK### URL of the personal data export file for the user.
* ###SITENAME### The name of the site.
* ###SITEURL### The URL to the site.
*
* @since 4.9.6
*
* @param string $email_text Text in the email.
* @param int $request_id The request ID for this personal data export.
*/
$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id );
$email_address = $request->email;
$export_file_url = get_post_meta( $request_id, '_export_file_url', true );
$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$site_url = home_url();
$content = str_replace( '###EXPIRATION###', $expiration_date, $content );
$content = str_replace( '###LINK###', esc_url_raw( $export_file_url ), $content );
$content = str_replace( '###EMAIL###', $email_address, $content );
$content = str_replace( '###SITENAME###', $site_name, $content );
$content = str_replace( '###SITEURL###', esc_url_raw( $site_url ), $content );
$mail_success = wp_mail(
$email_address,
sprintf(
__( '[%s] Personal Data Export' ),
$site_name
),
$content
);
if ( ! $mail_success ) {
return new WP_Error( 'error', __( 'Unable to send personal data export email.' ) );
}
return true;
}
/**
* Intercept personal data exporter page ajax responses in order to assemble the personal data export file.
* @see wp_privacy_personal_data_export_page
* @since 4.9.6
*
* @param array $response The response from the personal data exporter for the given page.
* @param int $exporter_index The index of the personal data exporter. Begins at 1.
* @param string $email_address The email address of the user whose personal data this is.
* @param int $page The page of personal data for this exporter. Begins at 1.
* @param int $request_id The request ID for this personal data export.
* @param bool $send_as_email Whether the final results of the export should be emailed to the user.
* @param string $exporter_key The slug (key) of the exporter.
* @return array The filtered response.
*/
function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ) {
/* Do some simple checks on the shape of the response from the exporter.
* If the exporter response is malformed, don't attempt to consume it - let it
* pass through to generate a warning to the user by default ajax processing.
*/
if ( ! is_array( $response ) ) {
return $response;
}
if ( ! array_key_exists( 'done', $response ) ) {
return $response;
}
if ( ! array_key_exists( 'data', $response ) ) {
return $response;
}
if ( ! is_array( $response['data'] ) ) {
return $response;
}
// Get the request data.
$request = wp_get_user_request_data( $request_id );
if ( ! $request || 'export_personal_data' !== $request->action_name ) {
wp_send_json_error( __( 'Invalid request ID when merging exporter data.' ) );
}
$export_data = array();
// First exporter, first page? Reset the report data accumulation array.
if ( 1 === $exporter_index && 1 === $page ) {
update_post_meta( $request_id, '_export_data_raw', $export_data );
} else {
$export_data = get_post_meta( $request_id, '_export_data_raw', true );
}
// Now, merge the data from the exporter response into the data we have accumulated already.
$export_data = array_merge( $export_data, $response['data'] );
update_post_meta( $request_id, '_export_data_raw', $export_data );
// If we are not yet on the last page of the last exporter, return now.
/** This filter is documented in wp-admin/includes/ajax-actions.php */
$exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
$is_last_exporter = $exporter_index === count( $exporters );
$exporter_done = $response['done'];
if ( ! $is_last_exporter || ! $exporter_done ) {
return $response;
}
// Last exporter, last page - let's prepare the export file.
// First we need to re-organize the raw data hierarchically in groups and items.
$groups = array();
foreach ( (array) $export_data as $export_datum ) {
$group_id = $export_datum['group_id'];
$group_label = $export_datum['group_label'];
if ( ! array_key_exists( $group_id, $groups ) ) {
$groups[ $group_id ] = array(
'group_label' => $group_label,
'items' => array(),
);
}
$item_id = $export_datum['item_id'];
if ( ! array_key_exists( $item_id, $groups[ $group_id ]['items'] ) ) {
$groups[ $group_id ]['items'][ $item_id ] = array();
}
$old_item_data = $groups[ $group_id ]['items'][ $item_id ];
$merged_item_data = array_merge( $export_datum['data'], $old_item_data );
$groups[ $group_id ]['items'][ $item_id ] = $merged_item_data;
}
// Then save the grouped data into the request.
delete_post_meta( $request_id, '_export_data_raw' );
update_post_meta( $request_id, '_export_data_grouped', $groups );
/**
* Generate the export file from the collected, grouped personal data.
*
* @since 4.9.6
*
* @param int $request_id The export request ID.
*/
do_action( 'wp_privacy_personal_data_export_file', $request_id );
// Clear the grouped data now that it is no longer needed.
delete_post_meta( $request_id, '_export_data_grouped' );
// If the destination is email, send it now.
if ( $send_as_email ) {
$mail_success = wp_privacy_send_personal_data_export_email( $request_id );
if ( is_wp_error( $mail_success ) ) {
wp_send_json_error( $mail_success->get_error_message() );
}
} else {
// Modify the response to include the URL of the export file so the browser can fetch it.
$export_file_url = get_post_meta( $request_id, '_export_file_url', true );
if ( ! empty( $export_file_url ) ) {
$response['url'] = $export_file_url;
}
}
// Update the request to completed state.
_wp_privacy_completed_request( $request_id );
return $response;
}

View File

@@ -194,8 +194,6 @@ function insert_with_markers( $filename, $marker, $insertion ) {
* @since 1.5.0
*
* @global WP_Rewrite $wp_rewrite
*
* @return bool|null True on write success, false on failure. Null in multisite.
*/
function save_mod_rewrite_rules() {
if ( is_multisite() )
@@ -203,11 +201,8 @@ function save_mod_rewrite_rules() {
global $wp_rewrite;
// Ensure get_home_path() is declared.
require_once( ABSPATH . 'wp-admin/includes/file.php' );
$home_path = get_home_path();
$htaccess_file = $home_path . '.htaccess';
$home_path = get_home_path();
$htaccess_file = $home_path.'.htaccess';
/*
* If the file doesn't already exist check for write access to the directory
@@ -231,7 +226,7 @@ function save_mod_rewrite_rules() {
*
* @global WP_Rewrite $wp_rewrite
*
* @return bool|null True on write success, false on failure. Null in multisite.
* @return bool True if web.config was updated successfully
*/
function iis7_save_url_rewrite_rules(){
if ( is_multisite() )
@@ -239,10 +234,7 @@ function iis7_save_url_rewrite_rules(){
global $wp_rewrite;
// Ensure get_home_path() is declared.
require_once( ABSPATH . 'wp-admin/includes/file.php' );
$home_path = get_home_path();
$home_path = get_home_path();
$web_config_file = $home_path . 'web.config';
// Using win_is_writable() instead of is_writable() because of a bug in Windows PHP
@@ -606,8 +598,6 @@ function set_screen_options() {
case 'upload_per_page':
case 'edit_tags_per_page':
case 'plugins_per_page':
case 'export_personal_data_requests_per_page':
case 'remove_personal_data_requests_per_page':
// Network admin
case 'sites_network_per_page':
case 'users_network_per_page':
@@ -1160,7 +1150,7 @@ function update_option_new_admin_email( $old_value, $value ) {
return;
}
$hash = md5( $value . time() . wp_rand() );
$hash = md5( $value . time() . mt_rand() );
$new_admin_email = array(
'hash' => $hash,
'newemail' => $value,
@@ -1223,602 +1213,3 @@ All at ###SITENAME###
restore_previous_locale();
}
}
/**
* Appends '(Draft)' to draft page titles in the privacy page dropdown
* so that unpublished content is obvious.
*
* @since 4.9.8
* @access private
*
* @param string $title Page title.
* @param WP_Post $page Page data object.
*
* @return string Page title.
*/
function _wp_privacy_settings_filter_draft_page_titles( $title, $page ) {
if ( 'draft' === $page->post_status && 'privacy' === get_current_screen()->id ) {
/* translators: %s: Page Title */
$title = sprintf( __( '%s (Draft)' ), $title );
}
return $title;
}
/**
* WP_Privacy_Policy_Content class.
* TODO: move this to a new file.
*
* @since 4.9.6
*/
final class WP_Privacy_Policy_Content {
private static $policy_content = array();
/**
* Constructor
*
* @since 4.9.6
*/
private function __construct() {}
/**
* Add content to the postbox shown when editing the privacy policy.
*
* Plugins and themes should suggest text for inclusion in the site's privacy policy.
* The suggested text should contain information about any functionality that affects user privacy,
* and will be shown in the Suggested Privacy Policy Content postbox.
*
* Intended for use from `wp_add_privacy_policy_content()`.
*
* $since 4.9.6
*
* @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy.
* @param string $policy_text The suggested content for inclusion in the policy.
*/
public static function add( $plugin_name, $policy_text ) {
if ( empty( $plugin_name ) || empty( $policy_text ) ) {
return;
}
$data = array(
'plugin_name' => $plugin_name,
'policy_text' => $policy_text,
);
if ( ! in_array( $data, self::$policy_content, true ) ) {
self::$policy_content[] = $data;
}
}
/**
* Quick check if any privacy info has changed.
*
* @since 4.9.6
*/
public static function text_change_check() {
$policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
// The site doesn't have a privacy policy.
if ( empty( $policy_page_id ) ) {
return false;
}
if ( ! current_user_can( 'edit_post', $policy_page_id ) ) {
return false;
}
$old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
// Updates are not relevant if the user has not reviewed any suggestions yet.
if ( empty( $old ) ) {
return false;
}
$cached = get_option( '_wp_suggested_policy_text_has_changed' );
/*
* When this function is called before `admin_init`, `self::$policy_content`
* has not been populated yet, so use the cached result from the last
* execution instead.
*/
if ( ! did_action( 'admin_init' ) ) {
return 'changed' === $cached;
}
$new = self::$policy_content;
// Remove the extra values added to the meta.
foreach ( $old as $key => $data ) {
if ( ! empty( $data['removed'] ) ) {
unset( $old[ $key ] );
continue;
}
$old[ $key ] = array(
'plugin_name' => $data['plugin_name'],
'policy_text' => $data['policy_text'],
);
}
// Normalize the order of texts, to facilitate comparison.
sort( $old );
sort( $new );
// The == operator (equal, not identical) was used intentionally.
// See http://php.net/manual/en/language.operators.array.php
if ( $new != $old ) {
// A plugin was activated or deactivated, or some policy text has changed.
// Show a notice on the relevant screens to inform the admin.
add_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'policy_text_changed_notice' ) );
$state = 'changed';
} else {
$state = 'not-changed';
}
// Cache the result for use before `admin_init` (see above).
if ( $cached !== $state ) {
update_option( '_wp_suggested_policy_text_has_changed', $state );
}
return 'changed' === $state;
}
/**
* Output a warning when some privacy info has changed.
*
* @since 4.9.6
*/
public static function policy_text_changed_notice() {
global $post;
$screen = get_current_screen()->id;
if ( 'privacy' !== $screen ) {
return;
}
?>
<div class="policy-text-updated notice notice-warning is-dismissible">
<p><?php
printf(
/* translators: %s: Privacy Policy Guide URL */
__( 'The suggested privacy policy text has changed. Please <a href="%s">review the guide</a> and update your privacy policy.' ),
esc_url( admin_url( 'tools.php?wp-privacy-policy-guide=1' ) )
);
?></p>
</div>
<?php
}
/**
* Update the cached policy info when the policy page is updated.
*
* @since 4.9.6
* @access private
*/
public static function _policy_page_updated( $post_id ) {
$policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
if ( ! $policy_page_id || $policy_page_id !== (int) $post_id ) {
return;
}
// Remove updated|removed status.
$old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
$done = array();
$update_cache = false;
foreach ( $old as $old_key => $old_data ) {
if ( ! empty( $old_data['removed'] ) ) {
// Remove the old policy text.
$update_cache = true;
continue;
}
if ( ! empty( $old_data['updated'] ) ) {
// 'updated' is now 'added'.
$done[] = array(
'plugin_name' => $old_data['plugin_name'],
'policy_text' => $old_data['policy_text'],
'added' => $old_data['updated'],
);
$update_cache = true;
} else {
$done[] = $old_data;
}
}
if ( $update_cache ) {
delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
// Update the cache.
foreach ( $done as $data ) {
add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data );
}
}
}
/**
* Check for updated, added or removed privacy policy information from plugins.
*
* Caches the current info in post_meta of the policy page.
*
* @since 4.9.6
*
* @return array The privacy policy text/informtion added by core and plugins.
*/
public static function get_suggested_policy_text() {
$policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
$checked = array();
$time = time();
$update_cache = false;
$new = self::$policy_content;
$old = array();
if ( $policy_page_id ) {
$old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
}
// Check for no-changes and updates.
foreach ( $new as $new_key => $new_data ) {
foreach ( $old as $old_key => $old_data ) {
$found = false;
if ( $new_data['policy_text'] === $old_data['policy_text'] ) {
// Use the new plugin name in case it was changed, translated, etc.
if ( $old_data['plugin_name'] !== $new_data['plugin_name'] ) {
$old_data['plugin_name'] = $new_data['plugin_name'];
$update_cache = true;
}
// A plugin was re-activated.
if ( ! empty( $old_data['removed'] ) ) {
unset( $old_data['removed'] );
$old_data['added'] = $time;
$update_cache = true;
}
$checked[] = $old_data;
$found = true;
} elseif ( $new_data['plugin_name'] === $old_data['plugin_name'] ) {
// The info for the policy was updated.
$checked[] = array(
'plugin_name' => $new_data['plugin_name'],
'policy_text' => $new_data['policy_text'],
'updated' => $time,
);
$found = $update_cache = true;
}
if ( $found ) {
unset( $new[ $new_key ], $old[ $old_key ] );
continue 2;
}
}
}
if ( ! empty( $new ) ) {
// A plugin was activated.
foreach ( $new as $new_data ) {
if ( ! empty( $new_data['plugin_name'] ) && ! empty( $new_data['policy_text'] ) ) {
$new_data['added'] = $time;
$checked[] = $new_data;
}
}
$update_cache = true;
}
if ( ! empty( $old ) ) {
// A plugin was deactivated.
foreach ( $old as $old_data ) {
if ( ! empty( $old_data['plugin_name'] ) && ! empty( $old_data['policy_text'] ) ) {
$data = array(
'plugin_name' => $old_data['plugin_name'],
'policy_text' => $old_data['policy_text'],
'removed' => $time,
);
$checked[] = $data;
}
}
$update_cache = true;
}
if ( $update_cache && $policy_page_id ) {
delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
// Update the cache.
foreach ( $checked as $data ) {
add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data );
}
}
return $checked;
}
/**
* Add a notice with a link to the guide when editing the privacy policy page.
*
* @since 4.9.6
*
* @param $post WP_Post The currently edited post.
*/
public static function notice( $post ) {
if ( ! ( $post instanceof WP_Post ) ) {
return;
}
if ( ! current_user_can( 'manage_privacy_options' ) ) {
return;
}
$policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
if ( ! $policy_page_id || $policy_page_id != $post->ID ) {
return;
}
?>
<div class="notice notice-warning inline wp-pp-notice">
<p>
<?php
/* translators: 1: Privacy Policy guide URL, 2: additional link attributes, 3: accessibility text */
printf(
__( 'Need help putting together your new Privacy Policy page? <a href="%1$s" %2$s>Check out our guide%3$s</a> for recommendations on what content to include, along with policies suggested by your plugins and theme.' ),
admin_url( 'tools.php?wp-privacy-policy-guide=1' ),
'target="_blank"',
sprintf(
'<span class="screen-reader-text"> %s</span>',
/* translators: accessibility text */
__( '(opens in a new tab)' )
)
);
?>
</p>
</div>
<?php
}
/**
* Output the privacy policy guide together with content from the theme and plugins.
*
* @since 4.9.6
*/
public static function privacy_policy_guide() {
$content_array = self::get_suggested_policy_text();
$content = '';
$toc = array( '<li><a href="#wp-privacy-policy-guide-introduction">' . __( 'Introduction' ) . '</a></li>' );
$date_format = __( 'F j, Y' );
$copy = __( 'Copy' );
$return_to_top = '<a href="#" class="return-to-top">' . __( '&uarr; Return to Top' ) . '</a>';
foreach ( $content_array as $section ) {
$class = $meta = $removed = '';
if ( ! empty( $section['removed'] ) ) {
$class = ' text-removed';
$date = date_i18n( $date_format, $section['removed'] );
$meta = sprintf( __( 'Removed %s.' ), $date );
$removed = __( 'You deactivated this plugin on %s and may no longer need this policy.' );
$removed = '<div class="error inline"><p>' . sprintf( $removed, $date ) . '</p></div>';
} elseif ( ! empty( $section['updated'] ) ) {
$class = ' text-updated';
$date = date_i18n( $date_format, $section['updated'] );
$meta = sprintf( __( 'Updated %s.' ), $date );
}
if ( $meta ) {
$meta = '<br><span class="privacy-text-meta">' . $meta . '</span>';
}
$plugin_name = esc_html( $section['plugin_name'] );
$toc_id = 'wp-privacy-policy-guide-' . sanitize_title( $plugin_name );
$toc[] = sprintf( '<li><a href="#%1$s">%2$s</a>' . $meta . '</li>', $toc_id, $plugin_name );
$content .= '<div class="privacy-text-section' . $class . '">';
$content .= '<a id="' . $toc_id . '">&nbsp;</a>';
/* translators: %s: plugin name */
$content .= '<h2>' . sprintf( __( 'Source: %s' ), $plugin_name ) . '</h2>';
$content .= $removed;
$content .= '<div class="policy-text">' . $section['policy_text'] . '</div>';
$content .= $return_to_top;
if ( empty( $section['removed'] ) ) {
$content .= '<div class="privacy-text-actions">';
$content .= '<button type="button" class="privacy-text-copy button">';
$content .= $copy;
$content .= '<span class="screen-reader-text">' . sprintf( __( 'Copy suggested policy text from %s.' ), $plugin_name ) . '</span>';
$content .= '</button>';
$content .= '</div>';
}
$content .= "</div>\n"; // End of .privacy-text-section.
}
if ( count( $toc ) > 2 ) {
?>
<div class="privacy-text-box-toc">
<p><?php _e( 'Table of Contents' ); ?></p>
<ol>
<?php echo implode( "\n", $toc ); ?>
</ol>
</div>
<?php
}
?>
<div class="privacy-text-box">
<div class="privacy-text-box-head">
<a id="wp-privacy-policy-guide-introduction">&nbsp;</a>
<h2><?php _e( 'Introduction' ); ?></h2>
<p><?php _e( 'Hello,' ); ?></p>
<p><?php _e( 'This text template will help you to create your web site&#8217;s privacy policy.' ); ?></p>
<p><?php _e( 'We have suggested the sections you will need. Under each section heading you will find a short summary of what information you should provide, which will help you to get started. Some sections include suggested policy content, others will have to be completed with information from your theme and plugins.' ); ?></p>
<p><?php _e( 'Please edit your privacy policy content, making sure to delete the summaries, and adding any information from your theme and plugins. Once you publish your policy page, remember to add it to your navigation menu.' ); ?></p>
<p><?php _e( 'It is your responsibility to write a comprehensive privacy policy, to make sure it reflects all national and international legal requirements on privacy, and to keep your policy current and accurate.' ); ?></p>
</div>
<div class="privacy-text-box-body">
<?php echo $content; ?>
</div>
</div>
<?php
}
/**
* Return the default suggested privacy policy content.
*
* @since 4.9.6
*
* @param bool $descr Whether to include the descriptions under the section headings. Default false.
* @return string The default policy content.
*/
public static function get_default_content( $descr = false ) {
$suggested_text = $descr ? '<strong class="privacy-policy-tutorial">' . __( 'Suggested text:' ) . ' </strong>' : '';
$content = '';
// Start of the suggested privacy policy text.
$descr && $content .=
'<div class="wp-suggested-text">';
$content .=
'<h2>' . __( 'Who we are' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should note your site URL, as well as the name of the company, organization, or individual behind it, and some accurate contact information.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'The amount of information you may be required to show will vary depending on your local or national business regulations. You may, for example, be required to display a physical address, a registered address, or your company registration number.' ) . '</p>';
$content .=
/* translators: %s Site URL */
'<p>' . $suggested_text . sprintf( __( 'Our website address is: %s.' ), get_bloginfo( 'url', 'display' ) ) . '</p>' .
'<h2>' . __( 'What personal data we collect and why we collect it' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should note what personal data you collect from users and site visitors. This may include personal data, such as name, email address, personal account preferences; transactional data, such as purchase information; and technical data, such as information about cookies.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'You should also note any collection and retention of sensitive personal data, such as data concerning health.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'In addition to listing what personal data you collect, you need to note why you collect it. These explanations must note either the legal basis for your data collection and retention or the active consent the user has given.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'Personal data is not just created by a user&#8217;s interactions with your site. Personal data is also generated from technical processes such as contact forms, comments, cookies, analytics, and third party embeds.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not collect any personal data about visitors, and only collects the data shown on the User Profile screen from registered users. However some of your plugins may collect personal data. You should add the relevant information below.' ) . '</p>';
$content .=
'<h3>' . __( 'Comments' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor&#8217;s IP address and browser user agent string to help spam detection.' ) . '</p>' .
'<p>' . __( 'An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.' ) . '</p>' .
'<h3>' . __( 'Media' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what information may be disclosed by users who can upload media files. All uploaded files are usually publicly accessible.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.' ) . '</p>' .
'<h3>' . __( 'Contact forms' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'By default, WordPress does not include a contact form. If you use a contact form plugin, use this subsection to note what personal data is captured when someone submits a contact form, and how long you keep it. For example, you may note that you keep contact form submissions for a certain period for customer service purposes, but you do not use the information submitted through them for marketing purposes.' ) . '</p>';
$content .=
'<h3>' . __( 'Cookies' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list the cookies your web site uses, including those set by your plugins, social media, and analytics. We have provided the cookies which WordPress installs by default.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.' ) . '</p>' .
'<p>' . __( 'If you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.' ) . '</p>' .
'<p>' . __( 'When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select &quot;Remember Me&quot;, your login will persist for two weeks. If you log out of your account, the login cookies will be removed.' ) . '</p>' .
'<p>' . __( 'If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.' ) . '</p>' .
'<h3>' . __( 'Embedded content from other websites' ) . '</h3>' .
'<p>' . $suggested_text . __( 'Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.' ) . '</p>' .
'<p>' . __( 'These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.' ) . '</p>' .
'<h3>' . __( 'Analytics' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what analytics package you use, how users can opt out of analytics tracking, and a link to your analytics provider&#8217;s privacy policy, if any.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not collect any analytics data. However, many web hosting accounts collect some anonymous analytics data. You may also have installed a WordPress plugin that provides analytics services. In that case, add information from that plugin here.' ) . '</p>';
$content .=
'<h2>' . __( 'Who we share your data with' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should name and list all third party providers with whom you share site data, including partners, cloud-based services, payment processors, and third party service providers, and note what data you share with them and why. Link to their own privacy policies if possible.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not share any personal data with anyone.' ) . '</p>';
$content .=
'<h2>' . __( 'How long we retain your data' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should explain how long you retain personal data collected or processed by the web site. While it is your responsibility to come up with the schedule of how long you keep each dataset for and why you keep it, that information does need to be listed here. For example, you may want to say that you keep contact form entries for six months, analytics records for a year, and customer purchase records for ten years.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.' ) . '</p>' .
'<p>' . __( 'For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.' ) . '</p>' .
'<h2>' . __( 'What rights you have over your data' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what rights your users have over their data and how they can invoke those rights.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.' ) . '</p>' .
'<h2>' . __( 'Where we send your data' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should list all transfers of your site data outside the European Union and describe the means by which that data is safeguarded to European data protection standards. This could include your web hosting, cloud storage, or other third party services.' ) . '</p>' .
'<p class="privacy-policy-tutorial">' . __( 'European data protection law requires data about European residents which is transferred outside the European Union to be safeguarded to the same standards as if the data was in Europe. So in addition to listing where data goes, you should describe how you ensure that these standards are met either by yourself or by your third party providers, whether that is through an agreement such as Privacy Shield, model clauses in your contracts, or binding corporate rules.' ) . '</p>';
$content .=
'<p>' . $suggested_text . __( 'Visitor comments may be checked through an automated spam detection service.' ) . '</p>' .
'<h2>' . __( 'Your contact information' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should provide a contact method for privacy-specific concerns. If you are required to have a Data Protection Officer, list their name and full contact details here as well.' ) . '</p>';
$content .=
'<h2>' . __( 'Additional information' ) . '</h2>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'If you use your site for commercial purposes and you engage in more complex collection or processing of personal data, you should note the following information in your privacy policy in addition to the information we have already discussed.' ) . '</p>';
$content .=
'<h3>' . __( 'How we protect your data' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what measures you have taken to protect your users&#8217; data. This could include technical measures such as encryption; security measures such as two factor authentication; and measures such as staff training in data protection. If you have carried out a Privacy Impact Assessment, you can mention it here too.' ) . '</p>';
$content .=
'<h3>' . __( 'What data breach procedures we have in place' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what procedures you have in place to deal with data breaches, either potential or real, such as internal reporting systems, contact mechanisms, or bug bounties.' ) . '</p>';
$content .=
'<h3>' . __( 'What third parties we receive data from' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'If your web site receives data about users from third parties, including advertisers, this information must be included within the section of your privacy policy dealing with third party data.' ) . '</p>';
$content .=
'<h3>' . __( 'What automated decision making and/or profiling we do with user data' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'If your web site provides a service which includes automated decision making - for example, allowing customers to apply for credit, or aggregating their data into an advertising profile - you must note that this is taking place, and include information about how that information is used, what decisions are made with that aggregated data, and what rights users have over decisions made without human intervention.' ) . '</p>';
$content .=
'<h3>' . __( 'Industry regulatory disclosure requirements' ) . '</h3>';
$descr && $content .=
'<p class="privacy-policy-tutorial">' . __( 'If you are a member of a regulated industry, or if you are subject to additional privacy laws, you may be required to disclose that information here.' ) . '</p>' .
'</div>';
// End of the suggested privacy policy text.
/**
* Filters the default content suggested for inclusion in a privacy policy.
*
* @since 4.9.6
*
* @param $content string The default policy content.
*/
return apply_filters( 'wp_get_default_privacy_policy_content', $content );
}
/**
* Add the suggested privacy policy text to the policy postbox.
*
* @since 4.9.6
*/
public static function add_suggested_content() {
$content = self::get_default_content( true );
wp_add_privacy_policy_content( __( 'WordPress' ), $content );
}
}

View File

@@ -584,20 +584,12 @@ function install_plugin_information() {
<li>
<strong><?php _e( 'Requires WordPress Version:' ); ?></strong>
<?php
/* translators: %s: version number */
/* translators: %s: WordPress version */
printf( __( '%s or higher' ), $api->requires );
?>
</li>
<?php } if ( ! empty( $api->tested ) ) { ?>
<li><strong><?php _e( 'Compatible up to:' ); ?></strong> <?php echo $api->tested; ?></li>
<?php } if ( ! empty( $api->requires_php ) ) { ?>
<li>
<strong><?php _e( 'Requires PHP Version:' ); ?></strong>
<?php
/* translators: %s: version number */
printf( __( '%s or higher' ), $api->requires_php );
?>
</li>
<?php } if ( isset( $api->active_installs ) ) { ?>
<li><strong><?php _e( 'Active Installations:' ); ?></strong> <?php
if ( $api->active_installs >= 1000000 ) {

View File

@@ -1896,55 +1896,3 @@ function plugin_sandbox_scrape( $plugin ) {
wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin );
include( WP_PLUGIN_DIR . '/' . $plugin );
}
/**
* Helper function for adding content to the Privacy Policy Guide.
*
* Plugins and themes should suggest text for inclusion in the site's privacy policy.
* The suggested text should contain information about any functionality that affects user privacy,
* and will be shown on the Privacy Policy Guide screen.
*
* A plugin or theme can use this function multiple times as long as it will help to better present
* the suggested policy content. For example modular plugins such as WooCommerse or Jetpack
* can add or remove suggested content depending on the modules/extensions that are enabled.
* For more information see the Plugin Handbook:
* https://developer.wordpress.org/plugins/privacy/suggesting-text-for-the-site-privacy-policy/.
*
* Intended for use with the `'admin_init'` action.
*
* @since 4.9.6
*
* @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy.
* @param string $policy_text The suggested content for inclusion in the policy.
*/
function wp_add_privacy_policy_content( $plugin_name, $policy_text ) {
if ( ! is_admin() ) {
_doing_it_wrong(
__FUNCTION__,
sprintf(
/* translators: %s: admin_init */
__( 'The suggested privacy policy content should be added only in wp-admin by using the %s (or later) action.' ),
'<code>admin_init</code>'
),
'4.9.7'
);
return;
} elseif ( ! doing_action( 'admin_init' ) && ! did_action( 'admin_init' ) ) {
_doing_it_wrong(
__FUNCTION__,
sprintf(
/* translators: %s: admin_init */
__( 'The suggested privacy policy content should be added by using the %s (or later) action. Please see the inline documentation.' ),
'<code>admin_init</code>'
),
'4.9.7'
);
return;
}
if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
require_once( ABSPATH . 'wp-admin/includes/misc.php' );
}
WP_Privacy_Policy_Content::add( $plugin_name, $policy_text );
}

View File

@@ -1147,10 +1147,6 @@ function wp_edit_attachments_query_vars( $q = false ) {
$q['post_parent'] = 0;
}
if ( isset( $q['mine'] ) || ( isset( $q['attachment-filter'] ) && 'mine' == $q['attachment-filter'] ) ) {
$q['author'] = get_current_user_id();
}
// Filter query clauses to include filenames.
if ( isset( $q['s'] ) ) {
add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );

View File

@@ -516,12 +516,6 @@ function populate_options() {
// 4.4.0
'medium_large_size_w' => 768,
'medium_large_size_h' => 0,
// 4.9.6
'wp_page_for_privacy_policy' => 0,
// 4.9.8
'show_comments_cookies_opt_in' => 0,
);
// 3.3

View File

@@ -337,16 +337,6 @@ function get_inline_data($post) {
if ( post_type_supports( $post->post_type, 'post-formats' ) )
echo '<div class="post_format">' . esc_html( get_post_format( $post->ID ) ) . '</div>';
/**
* Fires after outputting the fields for the inline editor for posts and pages.
*
* @since 4.9.8
*
* @param WP_Post $post The current post object.
* @param WP_Post_Type $post_type_object The current post's post type object.
*/
do_action( 'add_inline_data', $post, $post_type_object );
echo '</div>';
}
@@ -1028,7 +1018,7 @@ function do_meta_boxes( $screen, $context, $object ) {
$hidden = get_hidden_meta_boxes( $screen );
printf( '<div id="%s-sortables" class="meta-box-sortables">', esc_attr( $context ) );
printf('<div id="%s-sortables" class="meta-box-sortables">', htmlspecialchars($context));
// Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
if ( ! $already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) {
@@ -1775,10 +1765,6 @@ function _post_states($post) {
}
}
if ( intval( get_option( 'wp_page_for_privacy_policy' ) ) === $post->ID ) {
$post_states['page_for_privacy_policy'] = __( 'Privacy Policy Page' );
}
/**
* Filters the default post display states used in the posts list table.
*

View File

@@ -252,52 +252,6 @@ As a new WordPress user, you should go to <a href=\"%s\">your dashboard</a> to d
));
$wpdb->insert( $wpdb->postmeta, array( 'post_id' => 2, 'meta_key' => '_wp_page_template', 'meta_value' => 'default' ) );
// Privacy Policy page
if ( is_multisite() ) {
// Disable by default unless the suggested content is provided.
$privacy_policy_content = get_site_option( 'default_privacy_policy_content' );
} else {
if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
include_once( ABSPATH . 'wp-admin/includes/misc.php' );
}
$privacy_policy_content = WP_Privacy_Policy_Content::get_default_content();
}
if ( ! empty( $privacy_policy_content ) ) {
$privacy_policy_guid = get_option( 'home' ) . '/?page_id=3';
$wpdb->insert(
$wpdb->posts, array(
'post_author' => $user_id,
'post_date' => $now,
'post_date_gmt' => $now_gmt,
'post_content' => $privacy_policy_content,
'post_excerpt' => '',
'comment_status' => 'closed',
'post_title' => __( 'Privacy Policy' ),
/* translators: Privacy Policy page slug */
'post_name' => __( 'privacy-policy' ),
'post_modified' => $now,
'post_modified_gmt' => $now_gmt,
'guid' => $privacy_policy_guid,
'post_type' => 'page',
'post_status' => 'draft',
'to_ping' => '',
'pinged' => '',
'post_content_filtered' => '',
)
);
$wpdb->insert(
$wpdb->postmeta, array(
'post_id' => 3,
'meta_key' => '_wp_page_template',
'meta_value' => 'default',
)
);
update_option( 'wp_page_for_privacy_policy', 3 );
}
// Set up default widgets for default theme.
update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) );
update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) );

File diff suppressed because it is too large Load Diff

View File

@@ -103,38 +103,12 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
<div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>
<?php if ( has_action( 'try_gutenberg_panel' ) ) :
$classes = 'try-gutenberg-panel';
$option = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
$hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email !== get_option( 'admin_email' ) );
if ( $hide )
$classes .= ' hidden'; ?>
<div id="try-gutenberg-panel" class="<?php echo esc_attr( $classes ); ?>">
<?php wp_nonce_field( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce', false ); ?>
<a class="try-gutenberg-panel-close" href="<?php echo esc_url( admin_url( '?try_gutenberg=0' ) ); ?>" aria-label="<?php esc_attr_e( 'Dismiss the Try Gutenberg panel' ); ?>"><?php _e( 'Dismiss' ); ?></a>
<?php
/**
* Add content to the Try Gutenberg panel on the admin dashboard.
*
* To remove the Try Gutenberg panel, use remove_action():
*
* remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
*
* @since 4.9.8
*/
do_action( 'try_gutenberg_panel' );
?>
</div>
<?php endif; ?>
<?php if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) :
$classes = 'welcome-panel';
$option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
$hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
$hide = 0 == $option || ( 2 == $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
if ( $hide )
$classes .= ' hidden'; ?>

View File

@@ -9284,8 +9284,8 @@
api.bind( 'change', startAutosaving );
// Make sure TinyMCE dialogs appear above Customizer UI.
$( document ).one( 'tinymce-editor-setup', function() {
if ( window.tinymce.ui.FloatPanel && ( ! window.tinymce.ui.FloatPanel.zIndex || window.tinymce.ui.FloatPanel.zIndex < 500001 ) ) {
$( document ).one( 'wp-before-tinymce-init', function() {
if ( ! window.tinymce.ui.FloatPanel.zIndex || window.tinymce.ui.FloatPanel.zIndex < 500001 ) {
window.tinymce.ui.FloatPanel.zIndex = 500001;
}
} );

File diff suppressed because one or more lines are too long

View File

@@ -31,49 +31,6 @@ jQuery(document).ready( function($) {
updateWelcomePanel( this.checked ? 1 : 0 );
});
var tryGutenbergPanel = $( '#try-gutenberg-panel' ),
tryGutenbergPanelHide = $('#wp_try_gutenberg_panel-hide'),
updateTryGutenbergPanel, installGutenbergSuccess;
updateTryGutenbergPanel = function( visible ) {
$.post( ajaxurl, {
action: 'update-try-gutenberg-panel',
visible: visible,
trygutenbergpanelnonce: $( '#trygutenbergpanelnonce' ).val()
});
};
installGutenbergSuccess = function( response ) {
response.activateUrl += '&from=try-gutenberg';
response.activateLabel = wp.updates.l10n.activatePluginLabel.replace( '%s', response.pluginName );
wp.updates.installPluginSuccess( response );
};
if ( tryGutenbergPanel.hasClass( 'hidden' ) && tryGutenbergPanelHide.prop( 'checked' ) ) {
tryGutenbergPanel.removeClass( 'hidden' );
}
$( '.try-gutenberg-panel-close, .try-gutenberg-panel-dismiss a', tryGutenbergPanel ).click( function( e ) {
e.preventDefault();
tryGutenbergPanel.addClass( 'hidden' );
updateTryGutenbergPanel( 0 );
$('#wp_try_gutenberg_panel-hide').prop( 'checked', false );
});
tryGutenbergPanelHide.click( function() {
tryGutenbergPanel.toggleClass( 'hidden', ! this.checked );
updateTryGutenbergPanel( this.checked ? 1 : 0 );
});
tryGutenbergPanel.on( 'click', '.install-now', function( e ) {
e.preventDefault();
var args = {
slug: $( e.target ).data( 'slug' ),
success: installGutenbergSuccess
};
wp.updates.installPlugin( args );
} );
// These widgets are sometimes populated via ajax
ajaxWidgets = ['dashboard_primary'];

File diff suppressed because one or more lines are too long

View File

@@ -1264,5 +1264,4 @@ jQuery(document).ready( function($) {
update();
} );
} )( jQuery, new wp.utils.WordCounter() );

View File

@@ -585,16 +585,10 @@
$message
.removeClass( 'updating-message' )
.addClass( 'updated-message installed' )
.addClass( 'updated-message installed button-disabled' )
.attr( 'aria-label', wp.updates.l10n.pluginInstalledLabel.replace( '%s', response.pluginName ) )
.text( wp.updates.l10n.pluginInstalled );
if ( $message.hasClass( 'button-primary' ) ) {
$message.addClass( 'button-primary-disabled' );
} else {
$message.addClass( 'button-disabled' );
}
wp.a11y.speak( wp.updates.l10n.installedMsg, 'polite' );
$document.trigger( 'wp-plugin-install-success', response );
@@ -603,11 +597,10 @@
setTimeout( function() {
// Transform the 'Install' button into an 'Activate' button.
$message.removeClass( 'install-now installed button-primary-disabled button-secondary-disabled button-disabled updated-message' )
.addClass( 'activate-now' )
$message.removeClass( 'install-now installed button-disabled updated-message' ).addClass( 'activate-now button-primary' )
.attr( 'href', response.activateUrl )
.attr( 'aria-label', wp.updates.l10n.activatePluginLabel.replace( '%s', response.pluginName ) )
.text( response.activateLabel || wp.updates.l10n.activatePlugin );
.text( wp.updates.l10n.activatePlugin );
}, 1000 );
}
};

File diff suppressed because one or more lines are too long

View File

@@ -15,259 +15,3 @@ jQuery( document ).ready(function( $ ) {
$( '#link_rel' ).val( ( isMe ) ? 'me' : inputs.substr( 0,inputs.length - 1 ) );
});
});
// Privacy request action handling
jQuery( document ).ready( function( $ ) {
var strings = window.privacyToolsL10n || {};
function setActionState( $action, state ) {
$action.children().hide();
$action.children( '.' + state ).show();
}
function clearResultsAfterRow( $requestRow ) {
$requestRow.removeClass( 'has-request-results' );
if ( $requestRow.next().hasClass( 'request-results' ) ) {
$requestRow.next().remove();
}
}
function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) {
var itemList = '',
resultRowClasses = 'request-results';
clearResultsAfterRow( $requestRow );
if ( additionalMessages.length ) {
$.each( additionalMessages, function( index, value ) {
itemList = itemList + '<li>' + value + '</li>';
});
itemList = '<ul>' + itemList + '</ul>';
}
$requestRow.addClass( 'has-request-results' );
if ( $requestRow.hasClass( 'status-request-confirmed' ) ) {
resultRowClasses = resultRowClasses + ' status-request-confirmed';
}
if ( $requestRow.hasClass( 'status-request-failed' ) ) {
resultRowClasses = resultRowClasses + ' status-request-failed';
}
$requestRow.after( function() {
return '<tr class="' + resultRowClasses + '"><th colspan="5">' +
'<div class="notice inline notice-alt ' + classes + '">' +
'<p>' + summaryMessage + '</p>' +
itemList +
'</div>' +
'</td>' +
'</tr>';
});
}
$( '.export-personal-data-handle' ).click( function( event ) {
var $this = $( this ),
$action = $this.parents( '.export-personal-data' ),
$requestRow = $this.parents( 'tr' ),
requestID = $action.data( 'request-id' ),
nonce = $action.data( 'nonce' ),
exportersCount = $action.data( 'exporters-count' ),
sendAsEmail = $action.data( 'send-as-email' ) ? true : false;
event.preventDefault();
event.stopPropagation();
$action.blur();
clearResultsAfterRow( $requestRow );
function onExportDoneSuccess( zipUrl ) {
setActionState( $action, 'export-personal-data-success' );
if ( 'undefined' !== typeof zipUrl ) {
window.location = zipUrl;
} else if ( ! sendAsEmail ) {
onExportFailure( strings.noExportFile );
}
}
function onExportFailure( errorMessage ) {
setActionState( $action, 'export-personal-data-failed' );
if ( errorMessage ) {
appendResultsAfterRow( $requestRow, 'notice-error', strings.exportError, [ errorMessage ] );
}
}
function doNextExport( exporterIndex, pageIndex ) {
$.ajax(
{
url: window.ajaxurl,
data: {
action: 'wp-privacy-export-personal-data',
exporter: exporterIndex,
id: requestID,
page: pageIndex,
security: nonce,
sendAsEmail: sendAsEmail
},
method: 'post'
}
).done( function( response ) {
var responseData = response.data;
if ( ! response.success ) {
// e.g. invalid request ID
onExportFailure( response.data );
return;
}
if ( ! responseData.done ) {
setTimeout( doNextExport( exporterIndex, pageIndex + 1 ) );
} else {
if ( exporterIndex < exportersCount ) {
setTimeout( doNextExport( exporterIndex + 1, 1 ) );
} else {
onExportDoneSuccess( responseData.url );
}
}
}).fail( function( jqxhr, textStatus, error ) {
// e.g. Nonce failure
onExportFailure( error );
});
}
// And now, let's begin
setActionState( $action, 'export-personal-data-processing' );
doNextExport( 1, 1 );
});
$( '.remove-personal-data-handle' ).click( function( event ) {
var $this = $( this ),
$action = $this.parents( '.remove-personal-data' ),
$requestRow = $this.parents( 'tr' ),
requestID = $action.data( 'request-id' ),
nonce = $action.data( 'nonce' ),
erasersCount = $action.data( 'erasers-count' ),
hasRemoved = false,
hasRetained = false,
messages = [];
event.stopPropagation();
$action.blur();
clearResultsAfterRow( $requestRow );
function onErasureDoneSuccess() {
var summaryMessage = strings.noDataFound;
var classes = 'notice-success';
setActionState( $action, 'remove-personal-data-idle' );
if ( false === hasRemoved ) {
if ( false === hasRetained ) {
summaryMessage = strings.noDataFound;
} else {
summaryMessage = strings.noneRemoved;
classes = 'notice-warning';
}
} else {
if ( false === hasRetained ) {
summaryMessage = strings.foundAndRemoved;
} else {
summaryMessage = strings.someNotRemoved;
classes = 'notice-warning';
}
}
appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, messages );
}
function onErasureFailure() {
setActionState( $action, 'remove-personal-data-failed' );
appendResultsAfterRow( $requestRow, 'notice-error', strings.removalError, [] );
}
function doNextErasure( eraserIndex, pageIndex ) {
$.ajax({
url: window.ajaxurl,
data: {
action: 'wp-privacy-erase-personal-data',
eraser: eraserIndex,
id: requestID,
page: pageIndex,
security: nonce
},
method: 'post'
}).done( function( response ) {
var responseData = response.data;
if ( ! response.success ) {
onErasureFailure();
return;
}
if ( responseData.items_removed ) {
hasRemoved = hasRemoved || responseData.items_removed;
}
if ( responseData.items_retained ) {
hasRetained = hasRetained || responseData.items_retained;
}
if ( responseData.messages ) {
messages = messages.concat( responseData.messages );
}
if ( ! responseData.done ) {
setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) );
} else {
if ( eraserIndex < erasersCount ) {
setTimeout( doNextErasure( eraserIndex + 1, 1 ) );
} else {
onErasureDoneSuccess();
}
}
}).fail( function() {
onErasureFailure();
});
}
// And now, let's begin
setActionState( $action, 'remove-personal-data-processing' );
doNextErasure( 1, 1 );
});
});
( function( $ ) {
// Privacy policy page, copy button.
$( document ).on( 'click', function( event ) {
var $target = $( event.target );
var $parent, $container, range;
if ( $target.is( 'button.privacy-text-copy' ) ) {
$parent = $target.parent().parent();
$container = $parent.find( 'div.wp-suggested-text' );
if ( ! $container.length ) {
$container = $parent.find( 'div.policy-text' );
}
if ( $container.length ) {
try {
window.getSelection().removeAllRanges();
range = document.createRange();
$container.addClass( 'hide-privacy-policy-tutorial' );
range.selectNodeContents( $container[0] );
window.getSelection().addRange( range );
document.execCommand( 'copy' );
$container.removeClass( 'hide-privacy-policy-tutorial' );
window.getSelection().removeAllRanges();
} catch ( er ) {}
}
}
});
} ( jQuery ) );

View File

@@ -1 +1 @@
jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})}),jQuery(document).ready(function(a){function b(a,b){a.children().hide(),a.children("."+b).show()}function c(a){a.removeClass("has-request-results"),a.next().hasClass("request-results")&&a.next().remove()}function d(b,d,e,f){var g="",h="request-results";c(b),f.length&&(a.each(f,function(a,b){g=g+"<li>"+b+"</li>"}),g="<ul>"+g+"</ul>"),b.addClass("has-request-results"),b.hasClass("status-request-confirmed")&&(h+=" status-request-confirmed"),b.hasClass("status-request-failed")&&(h+=" status-request-failed"),b.after(function(){return'<tr class="'+h+'"><th colspan="5"><div class="notice inline notice-alt '+d+'"><p>'+e+"</p>"+g+"</div></td></tr>"})}var e=window.privacyToolsL10n||{};a(".export-personal-data-handle").click(function(f){function g(a){b(k,"export-personal-data-success"),"undefined"!=typeof a?window.location=a:p||h(e.noExportFile)}function h(a){b(k,"export-personal-data-failed"),a&&d(l,"notice-error",e.exportError,[a])}function i(b,c){a.ajax({url:window.ajaxurl,data:{action:"wp-privacy-export-personal-data",exporter:b,id:m,page:c,security:n,sendAsEmail:p},method:"post"}).done(function(a){var d=a.data;return a.success?void(d.done?b<o?setTimeout(i(b+1,1)):g(d.url):setTimeout(i(b,c+1))):void h(a.data)}).fail(function(a,b,c){h(c)})}var j=a(this),k=j.parents(".export-personal-data"),l=j.parents("tr"),m=k.data("request-id"),n=k.data("nonce"),o=k.data("exporters-count"),p=!!k.data("send-as-email");f.preventDefault(),f.stopPropagation(),k.blur(),c(l),b(k,"export-personal-data-processing"),i(1,1)}),a(".remove-personal-data-handle").click(function(f){function g(){var a=e.noDataFound,c="notice-success";b(k,"remove-personal-data-idle"),!1===p?!1===q?a=e.noDataFound:(a=e.noneRemoved,c="notice-warning"):!1===q?a=e.foundAndRemoved:(a=e.someNotRemoved,c="notice-warning"),d(l,"notice-success",a,r)}function h(){b(k,"remove-personal-data-failed"),d(l,"notice-error",e.removalError,[])}function i(b,c){a.ajax({url:window.ajaxurl,data:{action:"wp-privacy-erase-personal-data",eraser:b,id:m,page:c,security:n},method:"post"}).done(function(a){var d=a.data;return a.success?(d.items_removed&&(p=p||d.items_removed),d.items_retained&&(q=q||d.items_retained),d.messages&&(r=r.concat(d.messages)),void(d.done?b<o?setTimeout(i(b+1,1)):g():setTimeout(i(b,c+1)))):void h()}).fail(function(){h()})}var j=a(this),k=j.parents(".remove-personal-data"),l=j.parents("tr"),m=k.data("request-id"),n=k.data("nonce"),o=k.data("erasers-count"),p=!1,q=!1,r=[];f.stopPropagation(),k.blur(),c(l),b(k,"remove-personal-data-processing"),i(1,1)})}),function(a){a(document).on("click",function(b){var c,d,e,f=a(b.target);if(f.is("button.privacy-text-copy")&&(c=f.parent().parent(),d=c.find("div.wp-suggested-text"),d.length||(d=c.find("div.policy-text")),d.length))try{window.getSelection().removeAllRanges(),e=document.createRange(),d.addClass("hide-privacy-policy-tutorial"),e.selectNodeContents(d[0]),window.getSelection().addRange(e),document.execCommand("copy"),d.removeClass("hide-privacy-policy-tutorial"),window.getSelection().removeAllRanges()}catch(g){}})}(jQuery);
jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})});

View File

@@ -249,21 +249,13 @@ $menu[75] = array( __('Tools'), 'edit_posts', 'tools.php', '', 'menu-top menu-ic
if ( ! is_multisite() && defined('WP_ALLOW_MULTISITE') && WP_ALLOW_MULTISITE )
$submenu['tools.php'][50] = array(__('Network Setup'), 'setup_network', 'network.php');
$change_notice = '';
if ( current_user_can( 'manage_privacy_options' ) && WP_Privacy_Policy_Content::text_change_check() ) {
$change_notice = ' <span class="update-plugins 1"><span class="plugin-count">' . number_format_i18n( 1 ) . '</span></span>';
}
// translators: %s is the update notification bubble, if updates are available.
$menu[80] = array( sprintf( __( 'Settings %s' ), $change_notice ), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
$submenu['options-general.php'][10] = array( _x( 'General', 'settings screen' ), 'manage_options', 'options-general.php' );
$submenu['options-general.php'][15] = array( __( 'Writing' ), 'manage_options', 'options-writing.php' );
$submenu['options-general.php'][20] = array( __( 'Reading' ), 'manage_options', 'options-reading.php' );
$submenu['options-general.php'][25] = array( __( 'Discussion' ), 'manage_options', 'options-discussion.php' );
$submenu['options-general.php'][30] = array( __( 'Media' ), 'manage_options', 'options-media.php' );
$submenu['options-general.php'][40] = array( __( 'Permalinks' ), 'manage_options', 'options-permalink.php' );
// translators: %s is the update notification bubble, if updates are available.
$submenu['options-general.php'][45] = array( sprintf( __( 'Privacy %s' ), $change_notice ), 'manage_privacy_options', 'privacy.php' );
$menu[80] = array( __('Settings'), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
$submenu['options-general.php'][10] = array(_x('General', 'settings screen'), 'manage_options', 'options-general.php');
$submenu['options-general.php'][15] = array(__('Writing'), 'manage_options', 'options-writing.php');
$submenu['options-general.php'][20] = array(__('Reading'), 'manage_options', 'options-reading.php');
$submenu['options-general.php'][25] = array(__('Discussion'), 'manage_options', 'options-discussion.php');
$submenu['options-general.php'][30] = array(__('Media'), 'manage_options', 'options-media.php');
$submenu['options-general.php'][40] = array(__('Permalinks'), 'manage_options', 'options-permalink.php');
$_wp_last_utility_menu = 80; // The index of the last top-level menu in the utility menu group

View File

@@ -77,13 +77,6 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
); ?>
</label>
<br />
<label for="show_comments_cookies_opt_in">
<input name="show_comments_cookies_opt_in" type="checkbox" id="show_comments_cookies_opt_in" value="1" <?php checked( '1', get_option( 'show_comments_cookies_opt_in' ) ); ?> />
<?php _e( 'Show comments cookies opt-in checkbox.' ); ?>
</label>
<br />
<label for="thread_comments">
<input name="thread_comments" type="checkbox" id="thread_comments" value="1" <?php checked('1', get_option('thread_comments')); ?> />
<?php

View File

@@ -81,70 +81,11 @@ if ( is_multisite() && ! current_user_can( 'manage_network_options' ) && 'update
}
$whitelist_options = array(
'general' => array(
'blogname',
'blogdescription',
'gmt_offset',
'date_format',
'time_format',
'start_of_week',
'timezone_string',
'WPLANG',
'new_admin_email',
),
'discussion' => array(
'default_pingback_flag',
'default_ping_status',
'default_comment_status',
'comments_notify',
'moderation_notify',
'comment_moderation',
'require_name_email',
'comment_whitelist',
'comment_max_links',
'moderation_keys',
'blacklist_keys',
'show_avatars',
'avatar_rating',
'avatar_default',
'close_comments_for_old_posts',
'close_comments_days_old',
'thread_comments',
'thread_comments_depth',
'page_comments',
'comments_per_page',
'default_comments_page',
'comment_order',
'comment_registration',
'show_comments_cookies_opt_in',
),
'media' => array(
'thumbnail_size_w',
'thumbnail_size_h',
'thumbnail_crop',
'medium_size_w',
'medium_size_h',
'large_size_w',
'large_size_h',
'image_default_size',
'image_default_align',
'image_default_link_type',
),
'reading' => array(
'posts_per_page',
'posts_per_rss',
'rss_use_excerpt',
'show_on_front',
'page_on_front',
'page_for_posts',
'blog_public',
),
'writing' => array(
'default_category',
'default_email_category',
'default_link_category',
'default_post_format',
),
'general' => array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string', 'WPLANG', 'new_admin_email' ),
'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ),
'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ),
'writing' => array( 'default_category', 'default_email_category', 'default_link_category', 'default_post_format' )
);
$whitelist_options['misc'] = $whitelist_options['options'] = $whitelist_options['privacy'] = array();

View File

@@ -65,12 +65,6 @@ if ( $action ) {
wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix
} else if ( isset($_GET['from']) && 'press-this' == $_GET['from'] ) {
wp_redirect( self_admin_url( "press-this.php") );
} else if ( isset( $_GET['from'] ) && 'try-gutenberg' == $_GET['from'] ) {
if ( 'gutenberg/gutenberg.php' === $plugin ) {
wp_redirect( self_admin_url( "admin.php?page=gutenberg" ) );
} else {
wp_redirect( self_admin_url() );
}
} else {
wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above
}

View File

@@ -1,6 +1,6 @@
<?php
/**
* Privacy Settings Screen.
* Privacy administration panel.
*
* @package WordPress
* @subpackage Administration
@@ -9,246 +9,34 @@
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
if ( ! current_user_can( 'manage_privacy_options' ) ) {
wp_die( __( 'Sorry, you are not allowed to manage privacy on this site.' ) );
}
$title = __( 'Privacy' );
$action = isset( $_POST['action'] ) ? $_POST['action'] : '';
if ( ! empty( $action ) ) {
check_admin_referer( $action );
if ( 'set-privacy-page' === $action ) {
$privacy_policy_page_id = isset( $_POST['page_for_privacy_policy'] ) ? (int) $_POST['page_for_privacy_policy'] : 0;
update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
$privacy_page_updated_message = __( 'Privacy Policy page updated successfully.' );
if ( $privacy_policy_page_id ) {
/*
* Don't always link to the menu customizer:
*
* - Unpublished pages can't be selected by default.
* - `WP_Customize_Nav_Menus::__construct()` checks the user's capabilities.
* - Themes might not "officially" support menus.
*/
if (
'publish' === get_post_status( $privacy_policy_page_id )
&& current_user_can( 'edit_theme_options' )
&& current_theme_supports( 'menus' )
) {
$privacy_page_updated_message = sprintf(
/* translators: %s: URL to Customizer -> Menus */
__( 'Privacy Policy page updated successfully. Remember to <a href="%s">update your menus</a>!' ),
esc_url( add_query_arg( 'autofocus[panel]', 'nav_menus', admin_url( 'customize.php' ) ) )
);
}
}
add_settings_error(
'page_for_privacy_policy',
'page_for_privacy_policy',
$privacy_page_updated_message,
'updated'
);
} elseif ( 'create-privacy-page' === $action ) {
if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
require_once( ABSPATH . 'wp-admin/includes/misc.php' );
}
$privacy_policy_page_content = WP_Privacy_Policy_Content::get_default_content();
$privacy_policy_page_id = wp_insert_post(
array(
'post_title' => __( 'Privacy Policy' ),
'post_status' => 'draft',
'post_type' => 'page',
'post_content' => $privacy_policy_page_content,
),
true
);
if ( is_wp_error( $privacy_policy_page_id ) ) {
add_settings_error(
'page_for_privacy_policy',
'page_for_privacy_policy',
__( 'Unable to create a Privacy Policy page.' ),
'error'
);
} else {
update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
wp_redirect( admin_url( 'post.php?post=' . $privacy_policy_page_id . '&action=edit' ) );
exit;
}
}
}
// If a Privacy Policy page ID is available, make sure the page actually exists. If not, display an error.
$privacy_policy_page_exists = false;
$privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
if ( ! empty( $privacy_policy_page_id ) ) {
$privacy_policy_page = get_post( $privacy_policy_page_id );
if ( ! $privacy_policy_page instanceof WP_Post ) {
add_settings_error(
'page_for_privacy_policy',
'page_for_privacy_policy',
__( 'The currently selected Privacy Policy page does not exist. Please create or select a new page.' ),
'error'
);
} else {
if ( 'trash' === $privacy_policy_page->post_status ) {
add_settings_error(
'page_for_privacy_policy',
'page_for_privacy_policy',
sprintf(
/* translators: URL to Pages Trash */
__( 'The currently selected Privacy Policy page is in the trash. Please create or select a new Privacy Policy page or <a href="%s">restore the current page</a>.' ),
'edit.php?post_status=trash&post_type=page'
),
'error'
);
} else {
$privacy_policy_page_exists = true;
}
}
}
$title = __( 'Privacy Settings' );
$parent_file = 'options-general.php';
require_once( ABSPATH . 'wp-admin/admin-header.php' );
list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
include( ABSPATH . 'wp-admin/admin-header.php' );
?>
<div class="wrap">
<h1><?php echo $title; ?></h1>
<h2><?php _e( 'Privacy Policy page' ); ?></h2>
<p>
<?php _e( 'As a website owner, you may need to follow national or international privacy laws. For example, you may need to create and display a Privacy Policy.' ); ?>
<?php _e( 'If you already have a Privacy Policy page, please select it below. If not, please create one.' ); ?>
</p>
<p>
<?php _e( 'The new page will include help and suggestions for your Privacy Policy.' ); ?>
<?php _e( 'However, it is your responsibility to use those resources correctly, to provide the information that your Privacy Policy requires, and to keep that information current and accurate.' ); ?>
</p>
<p>
<?php _e( 'After your Privacy Policy page is set, we suggest that you edit it.' ); ?>
<?php _e( 'We would also suggest reviewing your Privacy Policy from time to time, especially after installing or updating any themes or plugins. There may be changes or new suggested information for you to consider adding to your policy.' ); ?>
</p>
<?php
<div class="wrap about-wrap full-width-layout">
if ( $privacy_policy_page_exists ) {
$edit_href = add_query_arg(
array(
'post' => $privacy_policy_page_id,
'action' => 'edit',
),
admin_url( 'post.php' )
);
<h1><?php printf( __( 'Welcome to WordPress %s' ), $display_version ); ?></h1>
$view_href = get_permalink( $privacy_policy_page_id );
<p class="about-text"><?php printf( __( 'Thank you for updating to the latest version! WordPress %s will smooth your design workflow and keep you safe from coding errors.' ), $display_version ); ?></p>
?>
<p class="tools-privacy-edit"><strong>
<?php
<div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div>
if ( 'publish' === get_post_status( $privacy_policy_page_id ) ) {
/* translators: 1: URL to edit page, 2: URL to view page */
printf( __( '<a href="%1$s">Edit</a> or <a href="%2$s">view</a> your Privacy Policy page content.' ), $edit_href, $view_href );
} else {
/* translators: 1: URL to edit page, 2: URL to preview page */
printf( __( '<a href="%1$s">Edit</a> or <a href="%2$s">preview</a> your Privacy Policy page content.' ), $edit_href, $view_href );
}
<h2 class="nav-tab-wrapper wp-clearfix">
<a href="about.php" class="nav-tab"><?php _e( 'What&#8217;s New' ); ?></a>
<a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
<a href="privacy.php" class="nav-tab nav-tab-active"><?php _e( 'Privacy' ); ?></a>
</h2>
?>
</strong></p>
<p>
<?php
<div class="about-wrap-content">
<p class="about-description"><?php _e( 'From time to time, your WordPress site may send data to WordPress.org &#8212; including, but not limited to &#8212; the version of WordPress you are using, and a list of installed plugins and themes.' ); ?></p>
/* translators: 1: Privacy Policy guide URL, 2: additional link attributes, 3: accessibility text */
printf(
__( 'Need help putting together your new Privacy Policy page? <a href="%1$s" %2$s>Check out our guide%3$s</a> for recommendations on what content to include, along with policies suggested by your plugins and theme.' ),
admin_url( 'tools.php?wp-privacy-policy-guide' ),
'',
''
);
<p><?php printf( __( 'This data is used to provide general enhancements to WordPress, which includes helping to protect your site by finding and automatically installing new updates. It is also used to calculate statistics, such as those shown on the <a href="%s">WordPress.org stats page</a>.' ), 'https://wordpress.org/about/stats/' ); ?></p>
?>
</p>
<?php
}
?>
<hr>
<table class="form-table tools-privacy-policy-page">
<tr>
<th scope="row">
<?php
if ( $privacy_policy_page_exists ) {
_e( 'Change your Privacy Policy page' );
} else {
_e( 'Select a Privacy Policy page' );
}
?>
</th>
<td>
<?php
$has_pages = (bool) get_posts( array(
'post_type' => 'page',
'posts_per_page' => 1,
'post_status' => array(
'publish',
'draft',
),
) );
if ( $has_pages ) : ?>
<form method="post" action="">
<label for="page_for_privacy_policy">
<?php _e( 'Select an existing page:' ); ?>
</label>
<input type="hidden" name="action" value="set-privacy-page" />
<?php
wp_dropdown_pages(
array(
'name' => 'page_for_privacy_policy',
'show_option_none' => __( '&mdash; Select &mdash;' ),
'option_none_value' => '0',
'selected' => $privacy_policy_page_id,
'post_status' => array( 'draft', 'publish' ),
)
);
wp_nonce_field( 'set-privacy-page' );
submit_button( __( 'Use This Page' ), 'primary', 'submit', false, array( 'id' => 'set-page' ) );
?>
</form>
<?php endif; ?>
<form class="wp-create-privacy-page" method="post" action="">
<input type="hidden" name="action" value="create-privacy-page" />
<span>
<?php
if ( $has_pages ) {
_e( 'Or:' );
} else {
_e( 'There are no pages.' );
}
?>
</span>
<?php
wp_nonce_field( 'create-privacy-page' );
submit_button( __( 'Create New Page' ), 'primary', 'submit', false, array( 'id' => 'create-page' ) );
?>
</form>
</td>
</tr>
</table>
<p><?php printf( __( 'We take privacy and transparency very seriously. To learn more about what data we collect, and how we use it, please visit <a href="%s">WordPress.org/about/privacy</a>.' ), 'https://wordpress.org/about/privacy/' ); ?></p>
</div>
<?php
include( ABSPATH . 'wp-admin/admin-footer.php' );
</div>
<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>

View File

@@ -9,31 +9,20 @@
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
$is_privacy_guide = ( isset( $_GET['wp-privacy-policy-guide'] ) && current_user_can( 'manage_privacy_options' ) );
$title = __('Tools');
if ( $is_privacy_guide ) {
$title = __( 'Privacy Policy Guide' );
get_current_screen()->add_help_tab( array(
'id' => 'converter',
'title' => __('Categories and Tags Converter'),
'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' .
'<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin &amp; Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>',
) );
// "Borrow" xfn.js for now so we don't have to create new files.
wp_enqueue_script( 'xfn' );
} else {
$title = __('Tools');
get_current_screen()->add_help_tab( array(
'id' => 'converter',
'title' => __('Categories and Tags Converter'),
'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' .
'<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin &amp; Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>',
) );
get_current_screen()->set_help_sidebar(
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="https://codex.wordpress.org/Tools_Screen">Documentation on Tools</a>') . '</p>' .
'<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
);
}
get_current_screen()->set_help_sidebar(
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="https://codex.wordpress.org/Tools_Screen">Documentation on Tools</a>') . '</p>' .
'<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
);
require_once( ABSPATH . 'wp-admin/admin-header.php' );
@@ -41,35 +30,24 @@ require_once( ABSPATH . 'wp-admin/admin-header.php' );
<div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>
<?php
if ( current_user_can( 'import' ) ) :
$cats = get_taxonomy('category');
$tags = get_taxonomy('post_tag');
if ( current_user_can($cats->cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?>
<div class="card">
<h2 class="title"><?php _e( 'Categories and Tags Converter' ) ?></h2>
<p><?php printf( __('If you want to convert your categories to tags (or vice versa), use the <a href="%s">Categories and Tags Converter</a> available from the Import screen.'), 'import.php' ); ?></p>
</div>
<?php
endif;
endif;
if ( $is_privacy_guide ) {
?>
<div class="wp-privacy-policy-guide">
<?php WP_Privacy_Policy_Content::privacy_policy_guide(); ?>
</div>
<?php
} else {
if ( current_user_can( 'import' ) ) :
$cats = get_taxonomy('category');
$tags = get_taxonomy('post_tag');
if ( current_user_can($cats->cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?>
<div class="card">
<h2 class="title"><?php _e( 'Categories and Tags Converter' ) ?></h2>
<p><?php printf( __('If you want to convert your categories to tags (or vice versa), use the <a href="%s">Categories and Tags Converter</a> available from the Import screen.'), 'import.php' ); ?></p>
</div>
<?php
endif;
endif;
/**
* Fires at the end of the Tools Administration screen.
*
* @since 2.8.0
*/
do_action( 'tool_box' );
}
/**
* Fires at the end of the Tools Administration screen.
*
* @since 2.8.0
*/
do_action( 'tool_box' );
?>
</div>
<?php

View File

@@ -33,19 +33,16 @@ if ( is_wp_error( $comment ) ) {
}
$user = wp_get_current_user();
$cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) );
/**
* Perform other actions when comment cookies are set.
*
* @since 3.4.0
* @since 4.9.6 The `$cookies_consent` parameter was added.
*
* @param WP_Comment $comment Comment object.
* @param WP_User $user Comment author's user object. The user may not exist.
* @param boolean $cookies_consent Comment author's consent to store cookies.
* @param WP_Comment $comment Comment object.
* @param WP_User $user User object. The user may not exist.
*/
do_action( 'set_comment_cookies', $comment, $user, $cookies_consent );
do_action( 'set_comment_cookies', $comment, $user );
$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;

View File

@@ -25,14 +25,7 @@
<div id="site-generator">
<?php do_action( 'twentyeleven_credits' ); ?>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyeleven' ) ); ?>" class="imprint" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentyeleven' ); ?>">
<?php printf( __( 'Proudly powered by %s', 'twentyeleven' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyeleven' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentyeleven' ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyeleven' ), 'WordPress' ); ?></a>
</div>
</footer><!-- #colophon -->
</div><!-- #page -->

View File

@@ -1,14 +1,14 @@
# Copyright (C) 2018 the WordPress team
# Copyright (C) 2017 the WordPress team
# This file is distributed under the GNU General Public License v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: Twenty Eleven 2.8\n"
"Project-Id-Version: Twenty Eleven 2.7\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentyeleven\n"
"POT-Creation-Date: 2018-05-17 16:16:30+00:00\n"
"POT-Creation-Date: 2017-11-01 20:27:34+00:00\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,7 +26,7 @@ msgstr ""
#. translators: %1$s: smilie
#: 404.php:46
#: 404.php:36
msgid "Try looking in the monthly archives. %1$s"
msgstr ""
@@ -56,12 +56,12 @@ msgstr ""
msgid "Blog Archives"
msgstr ""
#: archive.php:60 author.php:90 category.php:64 index.php:40 search.php:47
#: tag.php:65
#: archive.php:57 author.php:86 category.php:59 index.php:37 search.php:44
#: tag.php:60
msgid "Nothing Found"
msgstr ""
#: archive.php:64 author.php:94 category.php:68 index.php:44 tag.php:69
#: archive.php:61 author.php:90 category.php:63 index.php:41 tag.php:64
msgid "Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post."
msgstr ""
@@ -69,11 +69,11 @@ msgstr ""
msgid "Author Archives: %s"
msgstr ""
#: author.php:61 content-single.php:70
#: author.php:60 content-single.php:63
msgid "About %s"
msgstr ""
#: category.php:20
#: category.php:19
msgid "Category Archives: %s"
msgstr ""
@@ -81,25 +81,25 @@ msgstr ""
msgid "This post is password protected. Enter the password to view any comments."
msgstr ""
#: comments.php:35
#: comments.php:34
msgid "One thought on &ldquo;%2$s&rdquo;"
msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
msgstr[0] ""
msgstr[1] ""
#: comments.php:43 comments.php:64
#: comments.php:41 comments.php:62
msgid "Comment navigation"
msgstr ""
#: comments.php:44 comments.php:65
#: comments.php:42 comments.php:63
msgid "&larr; Older Comments"
msgstr ""
#: comments.php:45 comments.php:66
#: comments.php:43 comments.php:64
msgid "Newer Comments &rarr;"
msgstr ""
#: comments.php:77
#: comments.php:74
msgid "Comments are closed."
msgstr ""
@@ -126,57 +126,57 @@ msgstr ""
#: content-aside.php:35 content-gallery.php:34 content-image.php:29
#: content-link.php:35 content-quote.php:35 content-status.php:48
#: content.php:41 functions.php:388
#: content.php:41 functions.php:378
msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: content-aside.php:39 content-featured.php:26 content-gallery.php:61
#: content-image.php:33 content-intro.php:21 content-link.php:39
#: content-page.php:21 content-quote.php:39 content-single.php:27
#: content-status.php:52 content.php:45 image.php:119
#: content-aside.php:36 content-featured.php:23 content-gallery.php:52
#: content-image.php:30 content-intro.php:18 content-link.php:36
#: content-page.php:18 content-quote.php:36 content-single.php:24
#: content-status.php:49 content.php:42 image.php:98
msgid "Pages:"
msgstr ""
#: content-aside.php:51 content-gallery.php:103 content-image.php:75
#: content-link.php:51 content-quote.php:81 content-status.php:64
#: content.php:91 showcase.php:214
#: content-aside.php:44 content-gallery.php:85 content-image.php:66
#: content-link.php:44 content-quote.php:69 content-status.php:57
#: content.php:79 showcase.php:202
msgid "Leave a reply"
msgstr ""
#: content-aside.php:51 content-gallery.php:103 content-image.php:75
#: content-link.php:51 content-quote.php:81 content-status.php:64
#: content.php:91 showcase.php:214
#: content-aside.php:44 content-gallery.php:85 content-image.php:66
#: content-link.php:44 content-quote.php:69 content-status.php:57
#: content.php:79 showcase.php:202
msgid "<b>1</b> Reply"
msgstr ""
#: content-aside.php:51 content-gallery.php:103 content-image.php:75
#: content-link.php:51 content-quote.php:81 content-status.php:64
#: content.php:91 showcase.php:214
#: content-aside.php:44 content-gallery.php:85 content-image.php:66
#: content-link.php:44 content-quote.php:69 content-status.php:57
#: content.php:79 showcase.php:202
msgid "<b>%</b> Replies"
msgstr ""
#: content-aside.php:53 content-featured.php:52 content-gallery.php:106
#: content-image.php:79 content-intro.php:26 content-link.php:53
#: content-page.php:28 content-quote.php:84 content-single.php:59
#: content-status.php:66 content.php:94 functions.php:641 functions.php:672
#: image.php:45
#: content-aside.php:46 content-featured.php:45 content-gallery.php:88
#: content-image.php:70 content-intro.php:19 content-link.php:46
#: content-page.php:21 content-quote.php:72 content-single.php:52
#: content-status.php:59 content.php:82 functions.php:612 functions.php:640
#: image.php:41
msgid "Edit"
msgstr ""
#. translators: used between list items, there is a space after the comma
#: content-featured.php:36 content-featured.php:45 content-gallery.php:73
#: content-gallery.php:85 content-image.php:57 content-image.php:66
#: content-quote.php:51 content-quote.php:63 content-single.php:37
#: content-single.php:40 content.php:58 content.php:72
#: content-featured.php:29 content-featured.php:38 content-gallery.php:60
#: content-gallery.php:70 content-image.php:49 content-image.php:58
#: content-quote.php:44 content-quote.php:54 content-single.php:30
#: content-single.php:33 content.php:51 content.php:63
msgid ", "
msgstr ""
#: content-featured.php:38
#: content-featured.php:31
msgid "This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: content-featured.php:40
#: content-featured.php:33
msgid "This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
@@ -184,23 +184,23 @@ msgstr ""
msgid "Gallery"
msgstr ""
#: content-gallery.php:49
#: content-gallery.php:45
msgid "This gallery contains <a %1$s>%2$s photo</a>."
msgid_plural "This gallery contains <a %1$s>%2$s photos</a>."
msgstr[0] ""
msgstr[1] ""
#: content-gallery.php:50 showcase.php:128
#: content-gallery.php:46 showcase.php:121
msgid "Permalink to %s"
msgstr ""
#: content-gallery.php:78 content-image.php:61 content-quote.php:56
#: content.php:63
#: content-gallery.php:64 content-image.php:53 content-quote.php:48
#: content.php:55
msgid "<span class=\"%1$s\">Posted in</span> %2$s"
msgstr ""
#: content-gallery.php:93 content-image.php:70 content-quote.php:71
#: content.php:80
#: content-gallery.php:76 content-image.php:61 content-quote.php:60
#: content.php:69
msgid "<span class=\"%1$s\">Tagged</span> %2$s"
msgstr ""
@@ -208,11 +208,11 @@ msgstr ""
msgid "Image"
msgstr ""
#: content-image.php:44
#: content-image.php:36
msgid "<a href=\"%1$s\" rel=\"bookmark\"><time class=\"entry-date\" datetime=\"%2$s\">%3$s</time></a><span class=\"by-author\"> <span class=\"sep\"> by </span> <span class=\"author vcard\"><a class=\"url fn n\" href=\"%4$s\" title=\"%5$s\" rel=\"author\">%6$s</a></span></span>"
msgstr ""
#: content-image.php:49 functions.php:721
#: content-image.php:41 functions.php:678
msgid "View all posts by %s"
msgstr ""
@@ -224,19 +224,19 @@ msgstr ""
msgid "Quote"
msgstr ""
#: content-single.php:42
#: content-single.php:35
msgid "This entry was posted in %1$s and tagged %2$s by <a href=\"%6$s\">%5$s</a>. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: content-single.php:44
#: content-single.php:37
msgid "This entry was posted in %1$s by <a href=\"%6$s\">%5$s</a>. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: content-single.php:46
#: content-single.php:39
msgid "This entry was posted by <a href=\"%6$s\">%5$s</a>. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: content-single.php:74
#: content-single.php:67
msgid "View all posts by %s <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
@@ -248,175 +248,175 @@ msgstr ""
msgid "Featured"
msgstr ""
#: footer.php:34
#: footer.php:28
msgid "https://wordpress.org/"
msgstr ""
#: footer.php:34
#: footer.php:28
msgid "Semantic Personal Publishing Platform"
msgstr ""
#: footer.php:35
#: footer.php:28
msgid "Proudly powered by %s"
msgstr ""
#: functions.php:96
#: functions.php:95
msgid "Primary Menu"
msgstr ""
#. translators: header image description
#: functions.php:189
#: functions.php:184
msgid "Wheel"
msgstr ""
#. translators: header image description
#: functions.php:195
#: functions.php:190
msgid "Shore"
msgstr ""
#. translators: header image description
#: functions.php:201
#: functions.php:196
msgid "Trolley"
msgstr ""
#. translators: header image description
#: functions.php:207
#: functions.php:202
msgid "Pine Cone"
msgstr ""
#. translators: header image description
#: functions.php:213
#: functions.php:208
msgid "Chessboard"
msgstr ""
#. translators: header image description
#: functions.php:219
#: functions.php:214
msgid "Lanterns"
msgstr ""
#. translators: header image description
#: functions.php:225
#: functions.php:220
msgid "Willow"
msgstr ""
#. translators: header image description
#: functions.php:231
#: functions.php:226
msgid "Hanoi Plant"
msgstr ""
#: functions.php:461
#: functions.php:449
msgid "Main Sidebar"
msgstr ""
#: functions.php:472
#: functions.php:458
msgid "Showcase Sidebar"
msgstr ""
#: functions.php:474
#: functions.php:460
msgid "The sidebar for the optional Showcase Template"
msgstr ""
#: functions.php:484
#: functions.php:468
msgid "Footer Area One"
msgstr ""
#: functions.php:486 functions.php:498 functions.php:510
#: functions.php:470 functions.php:480 functions.php:490
msgid "An optional widget area for your site footer"
msgstr ""
#: functions.php:496
#: functions.php:478
msgid "Footer Area Two"
msgstr ""
#: functions.php:508
#: functions.php:488
msgid "Footer Area Three"
msgstr ""
#: functions.php:534 single.php:21
#: functions.php:512 single.php:18
msgid "Post navigation"
msgstr ""
#: functions.php:535
#: functions.php:513
msgid "<span class=\"meta-nav\">&larr;</span> Older posts"
msgstr ""
#: functions.php:536
#: functions.php:514
msgid "Newer posts <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: functions.php:641
#: functions.php:612
msgid "Pingback:"
msgstr ""
#. translators: 1: comment author, 2: date and time
#: functions.php:660
#: functions.php:629
msgid "%1$s on %2$s <span class=\"says\">said:</span>"
msgstr ""
#. translators: 1: date, 2: time
#: functions.php:667
#: functions.php:635
msgid "%1$s at %2$s"
msgstr ""
#: functions.php:676
#: functions.php:644
msgid "Your comment is awaiting moderation."
msgstr ""
#: functions.php:689
#: functions.php:653
msgid "Reply <span>&darr;</span>"
msgstr ""
#: functions.php:715
#: functions.php:672
msgid "<span class=\"sep\">Posted on </span><a href=\"%1$s\" title=\"%2$s\" rel=\"bookmark\"><time class=\"entry-date\" datetime=\"%3$s\">%4$s</time></a><span class=\"by-author\"> <span class=\"sep\"> by </span> <span class=\"author vcard\"><a class=\"url fn n\" href=\"%5$s\" title=\"%6$s\" rel=\"author\">%7$s</a></span></span>"
msgstr ""
#: header.php:45
#: header.php:43
msgid "Page %s"
msgstr ""
#: header.php:142
#: header.php:133
msgid "Main menu"
msgstr ""
#: header.php:144
#: header.php:135
msgid "Skip to primary content"
msgstr ""
#: header.php:146
#: header.php:137
msgid "Skip to secondary content"
msgstr ""
#: image.php:21
#: image.php:18
msgid "Image navigation"
msgstr ""
#: image.php:22
#: image.php:19
msgid "&larr; Previous"
msgstr ""
#: image.php:23
#: image.php:20
msgid "Next &rarr;"
msgstr ""
#: image.php:34
#: image.php:30
msgid "<span class=\"meta-prep meta-prep-entry-date\">Published </span> <span class=\"entry-date\"><abbr class=\"published\" title=\"%1$s\">%2$s</abbr></span> at <a href=\"%3$s\" title=\"Link to full-size image\">%4$s &times; %5$s</a> in <a href=\"%6$s\" title=\"Return to %7$s\" rel=\"gallery\">%8$s</a>"
msgstr ""
#: inc/theme-options.php:56 inc/theme-options.php:560
#: inc/theme-options.php:56 inc/theme-options.php:542
msgid "Color Scheme"
msgstr ""
#: inc/theme-options.php:62 inc/theme-options.php:582
#: inc/theme-options.php:62 inc/theme-options.php:559
msgid "Link Color"
msgstr ""
@@ -428,107 +428,107 @@ msgstr ""
msgid "Theme Options"
msgstr ""
#: inc/theme-options.php:112
#: inc/theme-options.php:111
msgid "Some themes provide customization options that are grouped together on a Theme Options screen. If you change themes, options may change or disappear, as they are theme-specific. Your current theme, Twenty Eleven, provides the following Theme Options:"
msgstr ""
#: inc/theme-options.php:114
#: inc/theme-options.php:113
msgid "<strong>Color Scheme</strong>: You can choose a color palette of \"Light\" (light background with dark text) or \"Dark\" (dark background with light text) for your site."
msgstr ""
#: inc/theme-options.php:115
#: inc/theme-options.php:114
msgid "<strong>Link Color</strong>: You can choose the color used for text links on your site. You can enter the HTML color or hex code, or you can choose visually by clicking the \"Select a Color\" button to pick from a color wheel."
msgstr ""
#: inc/theme-options.php:116
#: inc/theme-options.php:115
msgid "<strong>Default Layout</strong>: You can choose if you want your site&#8217;s default layout to have a sidebar on the left, the right, or not at all."
msgstr ""
#: inc/theme-options.php:118
#: inc/theme-options.php:117
msgid "Remember to click \"Save Changes\" to save any changes you have made to the theme options."
msgstr ""
#: inc/theme-options.php:120
#: inc/theme-options.php:119
msgid "For more information:"
msgstr ""
#: inc/theme-options.php:121
#: inc/theme-options.php:120
msgid "<a href=\"https://codex.wordpress.org/Appearance_Theme_Options_Screen\" target=\"_blank\">Documentation on Theme Options</a>"
msgstr ""
#: inc/theme-options.php:122
#: inc/theme-options.php:121
msgid "<a href=\"https://wordpress.org/support/\" target=\"_blank\">Support Forums</a>"
msgstr ""
#: inc/theme-options.php:130
#: inc/theme-options.php:128
msgid "Overview"
msgstr ""
#: inc/theme-options.php:152
#: inc/theme-options.php:150
msgid "Light"
msgstr ""
#: inc/theme-options.php:158
#: inc/theme-options.php:156
msgid "Dark"
msgstr ""
#: inc/theme-options.php:183
#: inc/theme-options.php:181
msgid "Content on left"
msgstr ""
#: inc/theme-options.php:188
#: inc/theme-options.php:186
msgid "Content on right"
msgstr ""
#: inc/theme-options.php:193
#: inc/theme-options.php:191
msgid "One-column, no sidebar"
msgstr ""
#: inc/theme-options.php:302
#: inc/theme-options.php:298
msgid "Select a Color"
msgstr ""
#: inc/theme-options.php:305
#: inc/theme-options.php:301
msgid "Default color: %s"
msgstr ""
#: inc/theme-options.php:341
#: inc/theme-options.php:337
msgid "%s Theme Options"
msgstr ""
#: inc/theme-options.php:592
#: inc/theme-options.php:566
msgid "Layout"
msgstr ""
#: inc/widgets.php:22
#: inc/widgets.php:21
msgid "Twenty Eleven Ephemera"
msgstr ""
#: inc/widgets.php:24
#: inc/widgets.php:23
msgid "Use this widget to list your recent Aside, Status, Quote, and Link posts"
msgstr ""
#: inc/widgets.php:72
#: inc/widgets.php:68
msgid "Ephemera"
msgstr ""
#: inc/widgets.php:116 inc/widgets.php:125
#: inc/widgets.php:107 inc/widgets.php:116
msgid "0 <span class=\"reply\">comments &rarr;</span>"
msgstr ""
#: inc/widgets.php:116 inc/widgets.php:125
#: inc/widgets.php:107 inc/widgets.php:116
msgid "1 <span class=\"reply\">comment &rarr;</span>"
msgstr ""
#: inc/widgets.php:116 inc/widgets.php:125
#: inc/widgets.php:107 inc/widgets.php:116
msgid "% <span class=\"reply\">comments &rarr;</span>"
msgstr ""
#: inc/widgets.php:192
#: inc/widgets.php:182
msgid "Title:"
msgstr ""
#: inc/widgets.php:195
#: inc/widgets.php:185
msgid "Number of posts to show:"
msgstr ""
@@ -536,7 +536,7 @@ msgstr ""
msgid "Search Results for: %s"
msgstr ""
#: search.php:51
#: search.php:48
msgid "Sorry, but nothing matched your search criteria. Please try again with some different keywords."
msgstr ""
@@ -544,15 +544,15 @@ msgstr ""
msgid "Search"
msgstr ""
#: showcase.php:83
#: showcase.php:78
msgid "Featured Post"
msgstr ""
#: showcase.php:160
#: showcase.php:151
msgid "Featuring: %s"
msgstr ""
#: showcase.php:170
#: showcase.php:161
msgid "Recent Posts"
msgstr ""
@@ -564,15 +564,15 @@ msgstr ""
msgid "Meta"
msgstr ""
#: single.php:22
#: single.php:19
msgid "<span class=\"meta-nav\">&larr;</span> Previous"
msgstr ""
#: single.php:23
#: single.php:20
msgid "Next <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: tag.php:20
#: tag.php:19
msgid "Tag Archives: %s"
msgstr ""
#. Theme Name of the plugin/theme

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 3.2
Tested up to: WordPress 5.0-trunk
Stable tag: 2.8
Stable tag: 2.7
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, left-sidebar, right-sidebar, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-image-header, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
@@ -22,7 +22,7 @@ For more information about Twenty Eleven please go to https://codex.wordpress.or
== Copyright ==
Twenty Eleven WordPress Theme, Copyright 2011-2018 WordPress.org & Automattic.com
Twenty Eleven WordPress Theme, Copyright 2011-2017 WordPress.org & Automattic.com
Twenty Eleven is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -43,11 +43,6 @@ Source: https://github.com/aFarkas/html5shiv
== Changelog ==
= 2.8 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Eleven_Theme_Changelog#Version_2.8
= 2.7 =
* Released: November 14, 2017

View File

@@ -103,9 +103,6 @@ input#s {
background-position: 97% 6px;
padding: 4px 28px 4px 10px;
}
#respond #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/* Assistive text */
#access a.assistive-text:focus {

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyeleven/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a custom menu, header image, and background -- then go further with available theme options for light or dark color scheme, custom link colors, and three layout choices. Twenty Eleven comes equipped with a Showcase page template that transforms your front page into a showcase to show off your best content, widget support galore (sidebar, three footer areas, and a Showcase page widget area), and a custom "Ephemera" widget to display your Aside, Link, Quote, or Status posts. Included are styles for print and for the admin editor, support for featured images (as custom header images on posts and pages and as large images on featured "sticky" posts), and special styles for six different post formats.
Version: 2.8
Version: 2.7
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, left-sidebar, right-sidebar, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-image-header, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
@@ -2298,9 +2298,6 @@ a.comment-reply-link > span {
#respond p {
font-size: 12px;
}
#respond #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
p.comment-form-comment {
margin: 0;
}
@@ -2355,12 +2352,6 @@ p.comment-form-comment {
color: #555;
font-weight: bold;
}
#site-generator span[role=separator] {
padding: 0 0.25em 0 0.5em
}
#site-generator span[role=separator]::before {
content: '\007c';
}
/* =Responsive Structure

View File

@@ -22,14 +22,7 @@
*/
do_action( 'twentyfifteen_credits' );
?>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>" class="imprint">
<?php printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- .site-footer -->

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 4.1
Tested up to: WordPress 5.0-trunk
Version: 2.0
Version: 1.9
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
@@ -30,7 +30,7 @@ For more information about Twenty Fifteen please go to https://codex.wordpress.o
== Copyright ==
Twenty Fifteen WordPress Theme, Copyright 2014-2018 WordPress.org & Automattic.com
Twenty Fifteen WordPress Theme, Copyright 2014-2017 WordPress.org & Automattic.com
Twenty Fifteen is distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -55,11 +55,6 @@ Source: http://www.genericons.com
== Changelog ==
= 2.0 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.0
= 1.9 =
* Released: November 14, 2017

View File

@@ -400,9 +400,6 @@ img.alignleft {
float: left;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/**
* 11.0 Media Queries

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyfifteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer.
Version: 2.0
Version: 1.9
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
@@ -2406,18 +2406,6 @@ a.post-thumbnail:focus {
top: -3px;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
.comment-form .comment-form-cookies-consent label {
display: inline;
font-size: 12px;
font-size: 1.2rem;
font-weight: normal;
letter-spacing: 0;
text-transform: none;
}
/**
* 13.0 Footer
@@ -2446,13 +2434,6 @@ a.post-thumbnail:focus {
color: #333;
}
.site-info span[role=separator] {
padding: 0 0.25em 0 0.5em;
}
.site-info span[role=separator]::before {
content: '\002f';
}
/**
* 14.0 Media
@@ -3052,7 +3033,6 @@ p > video {
.comment-awaiting-moderation,
.logged-in-as,
.comment-form label,
.comment-form .comment-form-cookies-consent label,
.form-allowed-tags,
.site-info,
.wp-caption-text,
@@ -3682,7 +3662,6 @@ p > video {
.comment-awaiting-moderation,
.logged-in-as,
.comment-form label,
.comment-form .comment-form-cookies-consent label,
.form-allowed-tags,
.site-info,
.wp-caption-text,
@@ -4302,7 +4281,6 @@ p > video {
.comment-awaiting-moderation,
.logged-in-as,
.comment-form label,
.comment-form .comment-form-cookies-consent label,
.form-allowed-tags,
.site-info,
.wp-caption-text,
@@ -4960,7 +4938,6 @@ p > video {
.comment-awaiting-moderation,
.logged-in-as,
.comment-form label,
.comment-form .comment-form-cookies-consent label,
.form-allowed-tags,
.site-info,
.wp-caption-text,
@@ -5502,7 +5479,6 @@ p > video {
.comment-awaiting-moderation,
.logged-in-as,
.comment-form label,
.comment-form .comment-form-cookies-consent label,
.form-allowed-tags,
.site-info,
.wp-caption-text,

View File

@@ -18,14 +18,7 @@
<div class="site-info">
<?php do_action( 'twentyfourteen_credits' ); ?>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfourteen' ) ); ?>" class="imprint">
<?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfourteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #page -->

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 3.6
Tested up to: WordPress 5.0-trunk
Stable tag: 2.2
Stable tag: 2.1
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
@@ -22,7 +22,7 @@ For more information about Twenty Fourteen please go to https://codex.wordpress.
== Copyright ==
Twenty Fourteen WordPress Theme, Copyright 2013-2018 WordPress.org & Automattic.com
Twenty Fourteen WordPress Theme, Copyright 2013-2017 WordPress.org & Automattic.com
Twenty Fourteen is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -50,11 +50,6 @@ Source: http://www.genericons.com
== Changelog ==
= 2.2 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Fourteen_Theme_Changelog#Version_2.2
= 2.1 =
* Released: November 14, 2017

View File

@@ -288,9 +288,6 @@ td {
margin-left: 10px;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/**
* 7.0 Sidebars
@@ -358,14 +355,6 @@ td {
margin: -1px 0 0 18px;
}
/**
* 8.0 Footer
* -----------------------------------------------------------------------------
*/
.site-info span[role=separator] {
padding: 0 0.5em;
}
/**
* 9.0 Featured Content
@@ -866,4 +855,4 @@ td {
margin-left: -18%;
margin-right: auto;
}
}
}

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyfourteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.
Version: 2.2
Version: 2.1
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
@@ -2186,13 +2186,6 @@ a.post-thumbnail:hover {
margin-bottom: 0;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
.comment-form .comment-form-cookies-consent label {
display: inline;
}
/**
* 7.0 Sidebars
@@ -2923,13 +2916,6 @@ a.post-thumbnail:hover {
color: #41a62a;
}
.site-info span[role=separator] {
padding: 0 0.25em 0 0.5em;
}
.site-info span[role=separator]::before {
content: '\002f';
}
/**
* 9.0 Featured Content

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 4.7
Tested up to: WordPress 5.0-trunk
Version: 1.7
Version: 1.5
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: one-column, two-columns, right-sidebar, flexible-header, accessibility-ready, custom-colors, custom-header, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, post-formats, rtl-language-support, sticky-post, theme-options, threaded-comments, translation-ready
@@ -60,16 +60,6 @@ Source: https://unsplash.com/@englr?photo=bIhpiQA009k
== Changelog ==
= 1.7 =
* Released: August 2, 2018
https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.7
= 1.6 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Seventeen_Theme_Changelog#Version_1.6
= 1.5 =
* Released: April 4, 2018

View File

@@ -236,12 +236,12 @@ ol {
counter-reset: item;
}
ol > li {
ol li {
display: block;
position: relative;
}
ol > li:before {
ol li:before {
content: counter(item);
counter-increment: item;
font-weight: 800;
@@ -584,7 +584,7 @@ object {
counter-reset: item;
}
.rtl ol > li:before {
.rtl ol li:before {
left: auto;
right: -1.5em;
}

View File

@@ -199,10 +199,6 @@ input[type="checkbox"] {
text-align: left;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/* Post Formats */
.format-quote blockquote .icon {

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyseventeen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a focus on business sites, it features multiple sections on the front page as well as widgets, navigation and social menus, a logo, and more. Personalize its asymmetrical grid with a custom color scheme and showcase your multimedia content with post formats. Our default theme for 2017 works great in many languages, for any abilities, and on any device.
Version: 1.7
Version: 1.5
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: twentyseventeen
@@ -2378,14 +2378,6 @@ body:not(.twentyseventeen-front-page) .entry-header {
width: 100%;
}
.site-info span[role=separator] {
padding: 0 0.2em 0 0.4em;
}
.site-info span[role=separator]::before {
content: '\002f';
}
/*--------------------------------------------------------------
14.0 Comments
--------------------------------------------------------------*/
@@ -2505,14 +2497,6 @@ body:not(.twentyseventeen-front-page) .entry-header {
text-align: right;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
.comment-form .comment-form-cookies-consent label {
display: inline;
}
/*--------------------------------------------------------------
15.0 Widgets
--------------------------------------------------------------*/

View File

@@ -10,12 +10,5 @@
?>
<div class="site-info">
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyseventeen' ) ); ?>" class="imprint">
<?php printf( __( 'Proudly powered by %s', 'twentyseventeen' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyseventeen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyseventeen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->

View File

@@ -48,14 +48,7 @@
do_action( 'twentysixteen_credits' );
?>
<span class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></span>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentysixteen' ) ); ?>" class="imprint">
<?php printf( __( 'Proudly powered by %s', 'twentysixteen' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentysixteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentysixteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- .site-footer -->
</div><!-- .site-inner -->

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 4.4
Tested up to: WordPress 5.0-trunk
Version: 1.5
Version: 1.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: one-column, two-columns, right-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, flexible-header, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready, blog
@@ -29,7 +29,7 @@ For more information about Twenty Sixteen please go to https://codex.wordpress.o
== Copyright ==
Twenty Sixteen WordPress Theme, Copyright 2014-2018 WordPress.org
Twenty Sixteen WordPress Theme, Copyright 2014-2017 WordPress.org
Twenty Sixteen is distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -56,11 +56,6 @@ Image used in screenshot.png: A photo by Austin Schmid (https://unsplash.com/sch
== Changelog ==
= 1.5 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Sixteen_Theme_Changelog#Version_1.5
= 1.4 =
* Released: November 14, 2017

View File

@@ -98,8 +98,7 @@ textarea,
.site-footer .site-title,
.site-footer .site-title:after,
.widecolumn label,
.widecolumn .mu_register label,
.site-footer span[role=separator] {
.widecolumn .mu_register label {
font-family: Arial, Tahoma, sans-serif;
}
@@ -400,13 +399,16 @@ body:not(.search-results) .entry-summary .alignleft {
float: left;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 0 0 10px;
/**
* 8.4 - Footer
*/
.site-footer .site-title:after {
padding-right: 0.538461538em;
padding-left: 0.307692308em;
}
.comment-form .comment-form-cookies-consent label {
font-family: Arial, Tahoma, sans-serif;
}
/**
* 9.0 - Multisites

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentysixteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Twenty Sixteen is a modernized take on an ever-popular WordPress layout — the horizontal masthead with an optional right sidebar that works perfectly for blogs and websites. It has custom color options with beautiful default color schemes, a harmonious fluid grid using a mobile-first approach, and impeccable polish in every detail. Twenty Sixteen will make your WordPress look beautiful everywhere.
Version: 1.5
Version: 1.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: one-column, two-columns, right-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-images, flexible-header, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready, blog
@@ -2394,16 +2394,6 @@ body.search-no-results .page-header {
top: -5px;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
.comment-form .comment-form-cookies-consent label {
display: inline;
font-family: Merriweather, Georgia, serif;
letter-spacing: 0;
text-transform: none;
}
/**
* 11.5 - Sidebar
@@ -2453,16 +2443,6 @@ body.search-no-results .page-header {
padding: 0 0.307692308em 0 0.538461538em;
}
.site-footer span[role=separator] {
font-family: Montserrat, sans-serif;
opacity: 0.7;
padding: 0 0.307692308em 0 0.538461538em;
}
.site-footer span[role=separator]::before {
content: '\002f';
}
/**
* 12.0 - Media

View File

@@ -27,11 +27,6 @@
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home">
<?php bloginfo( 'name' ); ?>
</a>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '<span role="separator" aria-hidden="true"></span>', '' );
}
?>
</div><!-- #site-info -->
<div id="site-generator">
@@ -42,9 +37,7 @@
* @since Twenty Ten 1.0
*/
do_action( 'twentyten_credits' ); ?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyten' ) ); ?>" class="imprint" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentyten' ); ?>">
<?php printf( __( 'Proudly powered by %s.', 'twentyten' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyten' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentyten' ); ?>"><?php printf( __( 'Proudly powered by %s.', 'twentyten' ), 'WordPress' ); ?></a>
</div><!-- #site-generator -->
</div><!-- #colophon -->

View File

@@ -1,14 +1,14 @@
# Copyright (C) 2018 the WordPress team
# Copyright (C) 2017 the WordPress team
# This file is distributed under the GNU General Public License v2 or later.
msgid ""
msgstr ""
"Project-Id-Version: Twenty Ten 2.5\n"
"Project-Id-Version: Twenty Ten 2.4\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/twentyten\n"
"POT-Creation-Date: 2018-05-17 16:15:31+00:00\n"
"POT-Creation-Date: 2017-11-01 20:17:06+00:00\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,41 +20,41 @@ msgstr ""
msgid "Apologies, but the page you requested could not be found. Perhaps searching will help."
msgstr ""
#: archive.php:35
#: archive.php:34
msgid "Daily Archives: <span>%s</span>"
msgstr ""
#: archive.php:37
#: archive.php:36
msgid "Monthly Archives: <span>%s</span>"
msgstr ""
#: archive.php:37
#: archive.php:36
msgctxt "monthly archives date format"
msgid "F Y"
msgstr ""
#: archive.php:39
#: archive.php:38
msgid "Yearly Archives: <span>%s</span>"
msgstr ""
#: archive.php:39
#: archive.php:38
msgctxt "yearly archives date format"
msgid "Y"
msgstr ""
#: archive.php:41
#: archive.php:40
msgid "Blog Archives"
msgstr ""
#: author.php:29
#: author.php:28
msgid "Author Archives: %s"
msgstr ""
#: author.php:49 loop-single.php:57
#: author.php:47 loop-single.php:46
msgid "About %s"
msgstr ""
#: category.php:17
#: category.php:16
msgid "Category Archives: %s"
msgstr ""
@@ -62,232 +62,232 @@ msgstr ""
msgid "This post is password protected. Enter the password to view any comments."
msgstr ""
#: comments.php:38
#: comments.php:36
msgid "One Response to %2$s"
msgid_plural "%1$s Responses to %2$s"
msgstr[0] ""
msgstr[1] ""
#: comments.php:46 comments.php:66
#: comments.php:42 comments.php:62
msgid "<span class=\"meta-nav\">&larr;</span> Older Comments"
msgstr ""
#: comments.php:47 comments.php:67
#: comments.php:43 comments.php:63
msgid "Newer Comments <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: comments.php:78
#: comments.php:73
msgid "Comments are closed."
msgstr ""
#: footer.php:46
#: footer.php:40
msgid "https://wordpress.org/"
msgstr ""
#: footer.php:46
#: footer.php:40
msgid "Semantic Personal Publishing Platform"
msgstr ""
#: footer.php:47
#: footer.php:40
msgid "Proudly powered by %s."
msgstr ""
#: functions.php:97
#: functions.php:95
msgid "Primary Navigation"
msgstr ""
#. translators: header image description
#: functions.php:171
#: functions.php:165
msgid "Berries"
msgstr ""
#. translators: header image description
#: functions.php:177
#: functions.php:171
msgid "Cherry Blossoms"
msgstr ""
#. translators: header image description
#: functions.php:183
#: functions.php:177
msgid "Concave"
msgstr ""
#. translators: header image description
#: functions.php:189
#: functions.php:183
msgid "Fern"
msgstr ""
#. translators: header image description
#: functions.php:195
#: functions.php:189
msgid "Forest Floor"
msgstr ""
#. translators: header image description
#: functions.php:201
#: functions.php:195
msgid "Inkwell"
msgstr ""
#. translators: header image description
#: functions.php:207
#: functions.php:201
msgid "Path"
msgstr ""
#. translators: header image description
#: functions.php:213
#: functions.php:207
msgid "Sunset"
msgstr ""
#: functions.php:288 loop-attachment.php:151 loop.php:124 loop.php:152
#: functions.php:280 loop-attachment.php:119 loop.php:116 loop.php:144
msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: functions.php:385
#: functions.php:376
msgid "%s <span class=\"says\">says:</span>"
msgstr ""
#: functions.php:388
#: functions.php:379
msgid "Your comment is awaiting moderation."
msgstr ""
#. translators: 1: date, 2: time
#: functions.php:395
#: functions.php:386
msgid "%1$s at %2$s"
msgstr ""
#: functions.php:399 functions.php:425
#: functions.php:386 functions.php:403
msgid "(Edit)"
msgstr ""
#: functions.php:425
#: functions.php:403
msgid "Pingback:"
msgstr ""
#: functions.php:446
#: functions.php:423
msgid "Primary Widget Area"
msgstr ""
#: functions.php:448
#: functions.php:425
msgid "Add widgets here to appear in your sidebar."
msgstr ""
#: functions.php:459
#: functions.php:434
msgid "Secondary Widget Area"
msgstr ""
#: functions.php:461
#: functions.php:436
msgid "An optional secondary widget area, displays below the primary widget area in your sidebar."
msgstr ""
#: functions.php:472
#: functions.php:445
msgid "First Footer Widget Area"
msgstr ""
#: functions.php:474 functions.php:487 functions.php:500 functions.php:513
#: functions.php:447 functions.php:458 functions.php:469 functions.php:480
msgid "An optional widget area for your site footer."
msgstr ""
#: functions.php:485
#: functions.php:456
msgid "Second Footer Widget Area"
msgstr ""
#: functions.php:498
#: functions.php:467
msgid "Third Footer Widget Area"
msgstr ""
#: functions.php:511
#: functions.php:478
msgid "Fourth Footer Widget Area"
msgstr ""
#: functions.php:549
#: functions.php:514
msgid "<span class=\"%1$s\">Posted on</span> %2$s <span class=\"meta-sep\">by</span> %3$s"
msgstr ""
#: functions.php:560 loop-attachment.php:44
#: functions.php:523 loop-attachment.php:36
msgid "View all posts by %s"
msgstr ""
#: functions.php:577
#: functions.php:540
msgid "This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: functions.php:579
#: functions.php:542
msgid "This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: functions.php:581
#: functions.php:544
msgid "Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>."
msgstr ""
#: header.php:35
#: header.php:33
msgid "Page %s"
msgstr ""
#: header.php:110
#: header.php:105
msgid "Skip to content"
msgstr ""
#: loop-attachment.php:25
#: loop-attachment.php:21
msgid "Return to %s"
msgstr ""
#. translators: %s - title of parent post
#: loop-attachment.php:28
#: loop-attachment.php:23
msgid "<span class=\"meta-nav\">&larr;</span> %s"
msgstr ""
#: loop-attachment.php:39
#: loop-attachment.php:32
msgid "<span class=\"%1$s\">By</span> %2$s"
msgstr ""
#: loop-attachment.php:52
#: loop-attachment.php:43
msgid "<span class=\"%1$s\">Published</span> %2$s"
msgstr ""
#: loop-attachment.php:64
#: loop-attachment.php:53
msgid "Full size is %s pixels"
msgstr ""
#: loop-attachment.php:68
#: loop-attachment.php:56
msgid "Link to full-size image"
msgstr ""
#: loop-attachment.php:75 loop-attachment.php:165 loop-page.php:41
#: loop-single.php:70 loop.php:109 loop.php:132 loop.php:181
#: loop-attachment.php:63 loop-attachment.php:126 loop-page.php:30
#: loop-single.php:59 loop.php:101 loop.php:124 loop.php:166
msgid "Edit"
msgstr ""
#: loop-attachment.php:155 loop-page.php:36 loop-single.php:41 loop.php:156
#: loop-attachment.php:120 loop-page.php:29 loop-single.php:34 loop.php:145
msgid "Pages:"
msgstr ""
#: loop-single.php:25 loop-single.php:75
#: loop-single.php:21 loop-single.php:64
msgctxt "Previous post link"
msgid "&larr;"
msgstr ""
#: loop-single.php:26 loop-single.php:76
#: loop-single.php:22 loop-single.php:65
msgctxt "Next post link"
msgid "&rarr;"
msgstr ""
#: loop-single.php:61
#: loop-single.php:50
msgid "View all posts by %s <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
#: loop.php:25 loop.php:194
#: loop.php:25 loop.php:179
msgid "<span class=\"meta-nav\">&larr;</span> Older posts"
msgstr ""
#: loop.php:26 loop.php:195
#: loop.php:26 loop.php:180
msgid "Newer posts <span class=\"meta-nav\">&rarr;</span>"
msgstr ""
@@ -295,55 +295,55 @@ msgstr ""
msgid "Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post."
msgstr ""
#: loop.php:65 loop.php:104
#: loop.php:62 loop.php:96
msgctxt "gallery category slug"
msgid "gallery"
msgstr ""
#: loop.php:89
#: loop.php:83
msgid "This gallery contains <a %1$s>%2$s photo</a>."
msgid_plural "This gallery contains <a %1$s>%2$s photos</a>."
msgstr[0] ""
msgstr[1] ""
#: loop.php:90
#: loop.php:84
msgid "Permalink to %s"
msgstr ""
#: loop.php:102
#: loop.php:94
msgid "View Galleries"
msgstr ""
#: loop.php:102 loop.php:105
#: loop.php:94 loop.php:97
msgid "More Galleries"
msgstr ""
#: loop.php:105
#: loop.php:97
msgid "View posts in the Gallery category"
msgstr ""
#: loop.php:108 loop.php:131 loop.php:180
#: loop.php:100 loop.php:123 loop.php:165
msgid "Leave a comment"
msgstr ""
#: loop.php:108 loop.php:131 loop.php:180
#: loop.php:100 loop.php:123 loop.php:165
msgid "1 Comment"
msgstr ""
#: loop.php:108 loop.php:131 loop.php:180
#: loop.php:100 loop.php:123 loop.php:165
msgid "% Comments"
msgstr ""
#: loop.php:115
#: loop.php:107
msgctxt "asides category slug"
msgid "asides"
msgstr ""
#: loop.php:167
#: loop.php:152
msgid "<span class=\"%1$s\">Posted in</span> %2$s"
msgstr ""
#: loop.php:176
#: loop.php:161
msgid "<span class=\"%1$s\">Tagged</span> %2$s"
msgstr ""
@@ -359,15 +359,15 @@ msgstr ""
msgid "Sorry, but nothing matched your search criteria. Please try again with some different keywords."
msgstr ""
#: sidebar.php:29
#: sidebar.php:28
msgid "Archives"
msgstr ""
#: sidebar.php:36
#: sidebar.php:35
msgid "Meta"
msgstr ""
#: tag.php:17
#: tag.php:16
msgid "Tag Archives: %s"
msgstr ""
#. Theme Name of the plugin/theme

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 3.0
Tested up to: WordPress 5.0-trunk
Stable tag: 2.5
Stable tag: 2.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header
@@ -22,7 +22,7 @@ For more information about Twenty Ten theme please go to https://codex.wordpress
== Copyright ==
Twenty Ten WordPress Theme, Copyright 2010-2018 WordPress.org & Automattic.com
Twenty Ten WordPress Theme, Copyright 2010-2017 WordPress.org & Automattic.com
Twenty Ten is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -37,11 +37,6 @@ GNU General Public License for more details.
== Changelog ==
= 2.5 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Ten_Theme_Changelog#Version_2.5
= 2.4 =
* Released: November 14, 2017

View File

@@ -238,9 +238,6 @@ div.menu li{
.children #respond {
margin: 0 0 0 48px;
}
#respond #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/* =Widget Areas
-------------------------------------------------------------- */

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyten/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Author URI: https://wordpress.org/
Version: 2.5
Version: 2.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header
@@ -1132,10 +1132,6 @@ h3#reply-title {
font-size: 14px;
width: auto;
}
#respond #wp-comment-cookies-consent {
width: auto;
margin: 0 10px 0 0;
}
/* =Widget Areas
@@ -1322,12 +1318,6 @@ img#wpstats {
display: block;
margin: 0 auto 10px;
}
#site-info span[role=separator] {
padding: 0 0.6em 0 0.3em;
}
#site-info span[role=separator]::before {
content: '\007c';
}
/* =Mobile Safari ( iPad, iPhone and iPod Touch )

View File

@@ -16,14 +16,7 @@
<div class="site-info">
<?php do_action( 'twentythirteen_credits' ); ?>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentythirteen' ) ); ?>" class="imprint">
<?php printf( __( 'Proudly powered by %s', 'twentythirteen' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentythirteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentythirteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #page -->

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 3.6
Tested up to: WordPress 5.0-trunk
Stable tag: 2.4
Stable tag: 2.3
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
@@ -22,7 +22,7 @@ For more information about Twenty Thirteen please go to https://codex.wordpress.
== Copyright ==
Twenty Thirteen WordPress Theme, Copyright 2013-2018 WordPress.org & Automattic.com
Twenty Thirteen WordPress Theme, Copyright 2013-2017 WordPress.org & Automattic.com
Twenty Thirteen is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -47,11 +47,6 @@ Source: http://www.genericons.com
== Changelog ==
= 2.4 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Thirteen_Theme_Changelog#Version_2.4
= 2.3 =
* Released: November 14, 2017

View File

@@ -495,10 +495,6 @@ div.nav-menu > ul {
float: right;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
.form-allowed-tags code {
margin-left: auto;
margin-right: 3px;
@@ -571,9 +567,6 @@ div.nav-menu > ul {
margin-right: auto;
}
.site-footer span[role=separator] {
padding: 0 0.5em;
}
/**
* 8.0 Media Queries
@@ -776,4 +769,4 @@ div.nav-menu > ul {
margin-left: 0;
margin-right: auto;
}
}
}

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentythirteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
Version: 2.4
Version: 2.3
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, right-sidebar, custom-header, custom-menu, editor-style, featured-images, footer-widgets, microformats, post-formats, rtl-language-support, sticky-post, translation-ready, accessibility-ready
@@ -2391,10 +2391,6 @@ footer.entry-meta {
width: 100%;
}
.comment-form #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
.form-allowed-tags,
.form-allowed-tags code {
color: #686758;
@@ -2709,13 +2705,6 @@ footer.entry-meta {
margin: -10px auto 0;
}
.site-footer span[role=separator] {
padding: 0 0.25em 0 0.5em;
}
.site-footer span[role=separator]::before {
content: '\002f';
}
/**
* 8.0 Media Queries

View File

@@ -13,14 +13,7 @@
<footer id="colophon" role="contentinfo">
<div class="site-info">
<?php do_action( 'twentytwelve_credits' ); ?>
<?php
if ( function_exists( 'the_privacy_policy_link' ) ) {
the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
}
?>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentytwelve' ) ); ?>" class="imprint" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentytwelve' ); ?>">
<?php printf( __( 'Proudly powered by %s', 'twentytwelve' ), 'WordPress' ); ?>
</a>
<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentytwelve' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentytwelve' ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentytwelve' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #page -->

View File

@@ -2,7 +2,7 @@
Contributors: the WordPress team
Requires at least: WordPress 3.5
Tested up to: WordPress 5.0-trunk
Stable tag: 2.5
Stable tag: 2.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
@@ -22,7 +22,7 @@ For more information about Twenty Twelve please go to https://codex.wordpress.or
== Copyright ==
Twenty Twelve WordPress Theme, Copyright 2012-2018 WordPress.org & Automattic.com
Twenty Twelve WordPress Theme, Copyright 2012-2017 WordPress.org & Automattic.com
Twenty Twelve is Distributed under the terms of the GNU GPL
This program is free software: you can redistribute it and/or modify
@@ -43,11 +43,6 @@ Source: https://github.com/aFarkas/html5shiv
== Changelog ==
= 2.5 =
* Released: May 17, 2018
https://codex.wordpress.org/Twenty_Twelve_Theme_Changelog#Version_2.5
= 2.4 =
* Released: November 14, 2017

View File

@@ -134,9 +134,6 @@ label ~ span.required {
margin: -18px -16px 0 0;
margin: -1.285714286rem -1.142857143rem 0 0;
}
#respond #wp-comment-cookies-consent {
margin: 0 0 0 10px;
}
/* =Front page template styling

View File

@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentytwelve/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: The 2012 theme for WordPress is a fully responsive theme that looks great on any device. Features include a front page template with its own widgets, an optional display font, styling for post formats on both index and single views, and an optional no-sidebar page template. Make it yours with a custom menu, header image, and background.
Version: 2.5
Version: 2.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, one-column, two-columns, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready
@@ -694,12 +694,6 @@ footer[role="contentinfo"] a {
footer[role="contentinfo"] a:hover {
color: #21759b;
}
.site-info span[role=separator] {
padding: 0 0.3em 0 0.6em;
}
.site-info span[role=separator]::before {
content: '\002f';
}
/* =Main content and comment content
@@ -1360,12 +1354,6 @@ a.comment-edit-link:hover {
line-height: 2;
color: #5e5e5e;
}
#respond #wp-comment-cookies-consent {
margin: 0 10px 0 0;
}
#respond .comment-form-cookies-consent label {
display: inline;
}
.required {
color: red;
}

View File

@@ -119,15 +119,6 @@ function map_meta_cap( $cap, $user_id ) {
$caps[] = $post_type->cap->delete_private_posts;
}
}
/*
* Setting the privacy policy page requires `manage_privacy_options`,
* so deleting it should require that too.
*/
if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
$caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
}
break;
// edit_post breaks down to edit_posts, edit_published_posts, or
// edit_others_posts
@@ -189,15 +180,6 @@ function map_meta_cap( $cap, $user_id ) {
$caps[] = $post_type->cap->edit_private_posts;
}
}
/*
* Setting the privacy policy page requires `manage_privacy_options`,
* so editing it should require that too.
*/
if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
$caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
}
break;
case 'read_post':
case 'read_page':
@@ -276,9 +258,46 @@ function map_meta_cap( $cap, $user_id ) {
case 'add_user_meta':
list( $_, $object_type, $_ ) = explode( '_', $cap );
$object_id = (int) $args[0];
$object_subtype = get_object_subtype( $object_type, $object_id );
if ( empty( $object_subtype ) ) {
switch ( $object_type ) {
case 'post':
$post = get_post( $object_id );
if ( ! $post ) {
break;
}
$sub_type = get_post_type( $post );
break;
case 'comment':
$comment = get_comment( $object_id );
if ( ! $comment ) {
break;
}
$sub_type = empty( $comment->comment_type ) ? 'comment' : $comment->comment_type;
break;
case 'term':
$term = get_term( $object_id );
if ( ! $term instanceof WP_Term ) {
break;
}
$sub_type = $term->taxonomy;
break;
case 'user':
$user = get_user_by( 'id', $object_id );
if ( ! $user ) {
break;
}
$sub_type = 'user';
break;
}
if ( empty( $sub_type ) ) {
$caps[] = 'do_not_allow';
break;
}
@@ -287,79 +306,57 @@ function map_meta_cap( $cap, $user_id ) {
$meta_key = isset( $args[1] ) ? $args[1] : false;
if ( $meta_key ) {
$allowed = ! is_protected_meta( $meta_key, $object_type );
$has_filter = has_filter( "auth_{$object_type}_meta_{$meta_key}" ) || has_filter( "auth_{$object_type}_{$sub_type}_meta_{$meta_key}" );
if ( $meta_key && $has_filter ) {
if ( ! empty( $object_subtype ) && has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
/**
* Filters whether the user is allowed to edit meta.
*
* Use the {@see auth_post_$object_type_meta_$meta_key} filter to modify capabilities for
* specific object types. Return true to have the mapped meta caps from edit_{$object_type} apply.
*
* The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
* The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
*
* @since 3.3.0 As 'auth_post_meta_{$meta_key}'.
* @since 4.6.0
*
* @param bool $allowed Whether the user can add the post meta. Default false.
* @param string $meta_key The meta key.
* @param int $post_id Post ID.
* @param int $user_id User ID.
* @param string $cap Capability name.
* @param array $caps User capabilities.
*/
$allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", false, $meta_key, $object_id, $user_id, $cap, $caps );
/**
* Filters whether the user is allowed to edit a specific meta key of a specific object type and subtype.
*
* The dynamic portions of the hook name, `$object_type`, `$meta_key`,
* and `$object_subtype`, refer to the metadata object type (comment, post, term or user),
* the meta key value, and the object subtype respectively.
*
* @since 4.9.8
*
* @param bool $allowed Whether the user can add the object meta. Default false.
* @param string $meta_key The meta key.
* @param int $object_id Object ID.
* @param int $user_id User ID.
* @param string $cap Capability name.
* @param string[] $caps Array of the user's capabilities.
*/
$allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
} else {
/**
* Filters whether the user is allowed to edit a specific meta key of a specific object type.
*
* Return true to have the mapped meta caps from `edit_{$object_type}` apply.
*
* The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
* The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
*
* @since 3.3.0 As `auth_post_meta_{$meta_key}`.
* @since 4.6.0
*
* @param bool $allowed Whether the user can add the object meta. Default false.
* @param string $meta_key The meta key.
* @param int $object_id Object ID.
* @param int $user_id User ID.
* @param string $cap Capability name.
* @param string[] $caps Array of the user's capabilities.
*/
$allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
}
if ( ! empty( $object_subtype ) ) {
/**
* Filters whether the user is allowed to edit meta for specific object types/subtypes.
*
* Return true to have the mapped meta caps from `edit_{$object_type}` apply.
*
* The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
* The dynamic portion of the hook name, `$object_subtype` refers to the object subtype being filtered.
* The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
*
* @since 4.6.0 As `auth_post_{$post_type}_meta_{$meta_key}`.
* @since 4.7.0
* @deprecated 4.9.8 Use `auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}`
*
* @param bool $allowed Whether the user can add the object meta. Default false.
* @param string $meta_key The meta key.
* @param int $object_id Object ID.
* @param int $user_id User ID.
* @param string $cap Capability name.
* @param string[] $caps Array of the user's capabilities.
*/
$allowed = apply_filters_deprecated( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", array( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ), '4.9.8', "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" );
}
/**
* Filters whether the user is allowed to add post meta to a post of a given type.
*
* Use the {@see auth_$object_type_$sub_type_meta_$meta_key} filter to modify capabilities for
* specific object types/subtypes. Return true to have the mapped meta caps from edit_{$object_type} apply.
*
* The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
* The dynamic portion of the hook name, `$sub_type` refers to the object subtype being filtered.
* The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
*
* @since 4.6.0 As 'auth_post_{$post_type}_meta_{$meta_key}'.
* @since 4.7.0
*
* @param bool $allowed Whether the user can add the post meta. Default false.
* @param string $meta_key The meta key.
* @param int $post_id Post ID.
* @param int $user_id User ID.
* @param string $cap Capability name.
* @param array $caps User capabilities.
*/
$allowed = apply_filters( "auth_{$object_type}_{$sub_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
if ( ! $allowed ) {
$caps[] = $cap;
}
} elseif ( $meta_key && is_protected_meta( $meta_key, $object_type ) ) {
$caps[] = $cap;
}
break;
case 'edit_comment':
@@ -542,11 +539,6 @@ function map_meta_cap( $cap, $user_id ) {
$caps[] = 'manage_options';
}
break;
case 'export_others_personal_data':
case 'erase_others_personal_data':
case 'manage_privacy_options':
$caps[] = is_multisite() ? 'manage_network' : 'manage_options';
break;
default:
// Handle meta capabilities for custom post types.
global $post_type_meta_caps;

View File

@@ -313,7 +313,7 @@ final class WP_Customize_Nav_Menus {
// Prepend list of posts with nav_menus_created_posts search results on first page.
$nav_menus_created_posts_setting = $this->manager->get_setting( 'nav_menus_created_posts' );
if ( 1 === $args['pagenum'] && $nav_menus_created_posts_setting && count( $nav_menus_created_posts_setting->value() ) > 0 ) {
if ( 1 === $args['pagenum'] && $nav_menus_created_posts_setting && count( $nav_menus_created_posts_setting ) > 0 ) {
$stub_post_query = new WP_Query( array_merge(
$query,
array(

View File

@@ -278,11 +278,12 @@ final class _WP_Editors {
// Back-compat for the `htmledit_pre` and `richedit_pre` filters
if ( 'html' === $default_editor && has_filter( 'htmledit_pre' ) ) {
/** This filter is documented in wp-includes/deprecated.php */
$content = apply_filters_deprecated( 'htmledit_pre', array( $content ), '4.3.0', 'format_for_editor' );
// TODO: needs _deprecated_filter(), use _deprecated_function() as substitute for now
_deprecated_function( 'add_filter( htmledit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
$content = apply_filters( 'htmledit_pre', $content );
} elseif ( 'tinymce' === $default_editor && has_filter( 'richedit_pre' ) ) {
/** This filter is documented in wp-includes/deprecated.php */
$content = apply_filters_deprecated( 'richedit_pre', array( $content ), '4.3.0', 'format_for_editor' );
_deprecated_function( 'add_filter( richedit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
$content = apply_filters( 'richedit_pre', $content );
}
if ( false !== stripos( $content, 'textarea' ) ) {
@@ -502,6 +503,7 @@ final class _WP_Editors {
}
$ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n";
$ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n";
}
}
}
@@ -1399,16 +1401,8 @@ final class _WP_Editors {
$version = 'ver=' . $tinymce_version;
$baseurl = self::get_baseurl();
$has_custom_theme = false;
foreach ( self::$mce_settings as $init ) {
if ( ! empty( $init['theme_url'] ) ) {
$has_custom_theme = true;
break;
}
}
$compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] )
&& false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $has_custom_theme;
$compressed = $compress_scripts && $concatenate_scripts && isset($_SERVER['HTTP_ACCEPT_ENCODING'])
&& false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
// Load tinymce.js when running from /src, else load wp-tinymce.js.gz (production) or tinymce.min.js (SCRIPT_DEBUG)
$mce_suffix = false !== strpos( get_bloginfo( 'version' ), '-src' ) ? '' : '.min';

View File

@@ -671,8 +671,8 @@ class WP_Term_Query {
$cache_key = "get_terms:$key:$last_changed";
$cache = wp_cache_get( $cache_key, 'terms' );
if ( false !== $cache ) {
if ( 'all' === $_fields || 'all_with_object_id' === $_fields ) {
$cache = $this->populate_terms( $cache );
if ( 'all' === $_fields ) {
$cache = array_map( 'get_term', $cache );
}
$this->terms = $cache;
@@ -804,7 +804,7 @@ class WP_Term_Query {
wp_cache_add( $cache_key, $terms, 'terms', DAY_IN_SECONDS );
if ( 'all' === $_fields || 'all_with_object_id' === $_fields ) {
$terms = $this->populate_terms( $terms );
$terms = array_map( 'get_term', $terms );
}
$this->terms = $terms;
@@ -966,31 +966,4 @@ class WP_Term_Query {
return $wpdb->prepare( '((t.name LIKE %s) OR (t.slug LIKE %s))', $like, $like );
}
/**
* Creates an array of term objects from an array of term IDs.
*
* Also discards invalid term objects.
*
* @since 4.9.8
*
* @param array $term_ids Term IDs.
* @return array
*/
protected function populate_terms( $term_ids ) {
$terms = array();
if ( ! is_array( $term_ids ) ) {
return $terms;
}
foreach ( $term_ids as $key => $term_id ) {
$term = get_term( $term_id );
if ( $term instanceof WP_Term ) {
$terms[ $key ] = $term;
}
}
return $terms;
}
}

View File

@@ -1067,19 +1067,6 @@ final class WP_Theme implements ArrayAccess {
$post_templates = $this->get_post_templates();
$post_templates = isset( $post_templates[ $post_type ] ) ? $post_templates[ $post_type ] : array();
/**
* Filters list of page templates for a theme.
*
* @since 4.9.6
*
* @param string[] $post_templates Array of page templates. Keys are filenames,
* values are translated names.
* @param WP_Theme $this The theme object.
* @param WP_Post|null $post The post being edited, provided for context, or null.
* @param string $post_type Post type to get the templates for.
*/
$post_templates = (array) apply_filters( 'theme_templates', $post_templates, $this, $post, $post_type );
/**
* Filters list of page templates for a theme.
*
@@ -1095,9 +1082,7 @@ final class WP_Theme implements ArrayAccess {
* @param WP_Post|null $post The post being edited, provided for context, or null.
* @param string $post_type Post type to get the templates for.
*/
$post_templates = (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );
return $post_templates;
return (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );
}
/**

Some files were not shown because too many files have changed in this diff Show More