<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[26144] trunk/src: Merge the new dashboard design into core.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/26144">26144</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2013-11-13 22:08:47 +0000 (Wed, 13 Nov 2013)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge the new dashboard design into core.
Merges https://github.com/growthdesigner/wp-dash.
props lessbloat, joen, helen, dbernar1, kraftbj, ryelle, tillkruess, grapplerulrich, markjaquith.
see <a href="http://core.trac.wordpress.org/ticket/25824">#25824</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadmincsscolorsfreshcss">trunk/src/wp-admin/css/colors-fresh.css</a></li>
<li><a href="#trunksrcwpadmincssiecss">trunk/src/wp-admin/css/ie.css</a></li>
<li><a href="#trunksrcwpadmincsswpadmincss">trunk/src/wp-admin/css/wp-admin.css</a></li>
<li><a href="#trunksrcwpadminincludesajaxactionsphp">trunk/src/wp-admin/includes/ajax-actions.php</a></li>
<li><a href="#trunksrcwpadminincludesdashboardphp">trunk/src/wp-admin/includes/dashboard.php</a></li>
<li><a href="#trunksrcwpadminincludesdeprecatedphp">trunk/src/wp-admin/includes/deprecated.php</a></li>
<li><a href="#trunksrcwpadminindexphp">trunk/src/wp-admin/index.php</a></li>
<li><a href="#trunksrcwpadminjsdashboardjs">trunk/src/wp-admin/js/dashboard.js</a></li>
<li><a href="#trunksrcwpadminjsplugininstalljs">trunk/src/wp-admin/js/plugin-install.js</a></li>
<li><a href="#trunksrcwpadminpostphp">trunk/src/wp-admin/post.php</a></li>
<li><a href="#trunksrcwpincludesdefaultwidgetsphp">trunk/src/wp-includes/default-widgets.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadmincsscolorsfreshcss"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/css/colors-fresh.css (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/css/colors-fresh.css 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/css/colors-fresh.css 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -126,13 +126,7 @@
</span><span class="cx"> border-right-color: #eee;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_right_now .t,
-#dashboard_right_now .b {
- color: #777;
-}
-
</del><span class="cx"> #the-comment-list .comment-item p.row-actions,
</span><del>-#dashboard_recent_comments .subsubsub,
</del><span class="cx"> .plugins .row-actions-visible,
</span><span class="cx"> .row-actions {
</span><span class="cx"> color: #ddd;
</span><span class="lines">@@ -552,8 +546,7 @@
</span><span class="cx"> color: #2ea2cc;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item,
-#dashboard-widgets #dashboard_quick_press form p.submit {
</del><ins>+#the-comment-list .comment-item {
</ins><span class="cx"> border: none;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -580,9 +573,6 @@
</span><span class="cx"> table.widefat span.delete a,
</span><span class="cx"> table.widefat span.trash a,
</span><span class="cx"> table.widefat span.spam a,
</span><del>-#dashboard_recent_comments .delete a,
-#dashboard_recent_comments .trash a,
-#dashboard_recent_comments .spam a,
</del><span class="cx"> .plugins a.delete,
</span><span class="cx"> #all-plugins-table .plugins a.delete,
</span><span class="cx"> #search-plugins-table .plugins a.delete,
</span><span class="lines">@@ -596,9 +586,6 @@
</span><span class="cx"> table.widefat span.delete a:hover,
</span><span class="cx"> table.widefat span.trash a:hover,
</span><span class="cx"> table.widefat span.spam a:hover,
</span><del>-#dashboard_recent_comments .delete a:hover,
-#dashboard_recent_comments .trash a:hover,
-#dashboard_recent_comments .spam a:hover,
</del><span class="cx"> .plugins a.delete:hover,
</span><span class="cx"> #all-plugins-table .plugins a.delete:hover,
</span><span class="cx"> #search-plugins-table .plugins a.delete:hover,
</span><span class="lines">@@ -771,10 +758,6 @@
</span><span class="cx"> border-color: #666;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_secondary div.dashboard-widget-content ul li a {
- background-color: #f9f9f9;
-}
-
</del><span class="cx"> input.readonly, textarea.readonly {
</span><span class="cx"> background-color: #ddd;
</span><span class="cx"> }
</span><span class="lines">@@ -929,20 +912,14 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #the-comment-list .unapproved th,
</span><del>-#the-comment-list .unapproved td,
-#dashboard_recent_comments #the-comment-list .unapproved {
</del><ins>+#the-comment-list .unapproved td {
</ins><span class="cx"> background-color: #fefaf7;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .unapproved th.check-column,
-#dashboard_recent_comments #the-comment-list .unapproved {
</del><ins>+#the-comment-list .unapproved th.check-column {
</ins><span class="cx"> border-left: 4px solid #d54e21;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_recent_comments #the-comment-list .unapproved .avatar {
- margin-left: -4px;
-}
-
</del><span class="cx"> #the-comment-list .approve a {
</span><span class="cx"> color: #006505;
</span><span class="cx"> }
</span><span class="lines">@@ -1038,8 +1015,7 @@
</span><span class="cx">
</span><span class="cx"> .postbox h3,
</span><span class="cx"> #namediv h3,
</span><del>-#submitdiv h3,
-#dashboard_recent_comments .comment {
</del><ins>+#submitdiv h3 {
</ins><span class="cx"> color: #555;
</span><span class="cx"> border-bottom: 1px solid #eeeeee;
</span><span class="cx"> }
</span><span class="lines">@@ -1144,11 +1120,11 @@
</span><span class="cx"> color: #333;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#screen-meta-links a:focus {
- border-color: #aaa;
- color: #333;
- -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15);
- box-shadow: 0 2px 3px rgba(0,0,0,0.15);
</del><ins>+#screen-meta-links a:focus {
+ border-color: #aaa;
+ color: #333;
+ -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15);
+ box-shadow: 0 2px 3px rgba(0,0,0,0.15);
</ins><span class="cx"> }
</span><span class="cx"> /* end screen options and help tabs */
</span><span class="cx">
</span><span class="lines">@@ -1165,10 +1141,7 @@
</span><span class="cx"> .widget-control-remove:hover,
</span><span class="cx"> table.widefat .delete a:hover,
</span><span class="cx"> table.widefat .trash a:hover,
</span><del>-table.widefat .spam a:hover,
-#dashboard_recent_comments .delete a:hover,
-#dashboard_recent_comments .trash a:hover
-#dashboard_recent_comments .spam a:hover {
</del><ins>+table.widefat .spam a:hover {
</ins><span class="cx"> color: #f00;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2197,13 +2170,7 @@
</span><span class="cx"> border-right: 4px solid #d54e21;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-.rtl #the-comment-list .unapproved th.check-column,
-.rtl #dashboard_recent_comments #the-comment-list .unapproved {
</del><ins>+.rtl #the-comment-list .unapproved th.check-column {
</ins><span class="cx"> border-left: none;
</span><span class="cx"> border-right: 4px solid #d54e21;
</span><span class="cx"> }
</span><del>-
-.rtl #dashboard_recent_comments #the-comment-list .unapproved .avatar {
- margin-left: 10px;
- margin-right: -4px;
-}
</del></span></pre></div>
<a id="trunksrcwpadmincssiecss"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/css/ie.css (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/css/ie.css 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/css/ie.css 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -141,10 +141,6 @@
</span><span class="cx"> overflow: visible;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard-widgets #dashboard_quick_press form p.submit #publish {
- float: none;
-}
-
</del><span class="cx"> #dashboard-widgets h3 a {
</span><span class="cx"> height: 14px;
</span><span class="cx"> line-height: 14px;
</span></span></pre></div>
<a id="trunksrcwpadmincsswpadmincss"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/css/wp-admin.css (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/css/wp-admin.css 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/css/wp-admin.css 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -904,7 +904,6 @@
</span><span class="cx">
</span><span class="cx"> div.sidebar-name h3,
</span><span class="cx"> #menu-management .nav-tab,
</span><del>-#dashboard_plugins h5,
</del><span class="cx"> a.rsswidget,
</span><span class="cx"> #dashboard_right_now td.b,
</span><span class="cx"> #dashboard-widgets h4,
</span><span class="lines">@@ -1527,8 +1526,8 @@
</span><span class="cx"> margin: 0 20px 0 0;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#screen-meta-links a {
- padding: 3px 6px 3px 16px;
</del><ins>+#screen-meta-links a {
+ padding: 3px 6px 3px 16px;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #screen-meta-links a:focus {
</span><span class="lines">@@ -2439,6 +2438,18 @@
</span><span class="cx"> min-height: 250px;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#dashboard-widgets .postbox-container {
+ width: 25%;
+}
+
+#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container {
+ border: none !important;
+}
+
+#dashboard-widgets-wrap {
+ overflow: hidden;
+}
+
</ins><span class="cx"> /* one column on the dash */
</span><span class="cx"> @media only screen and (max-width: 799px) {
</span><span class="cx"> #wpbody-content #dashboard-widgets .postbox-container {
</span><span class="lines">@@ -2453,7 +2464,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /* two columns on the dash, but keep the setting if one is selected */
</span><del>-@media only screen and (min-width: 800px) and (max-width: 1200px) {
</del><ins>+@media only screen and (min-width: 800px) and (max-width: 1399px) {
</ins><span class="cx"> #wpbody-content #dashboard-widgets .postbox-container {
</span><span class="cx"> width: 49.5%;
</span><span class="cx"> }
</span><span class="lines">@@ -2494,6 +2505,28 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+/* three columns on the dash */
+@media only screen and (min-width: 1400px) and (max-width: 1800px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 33.5%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-1 {
+ width: 33%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-3,
+ #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: right;
+ }
+
+ #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+}
+
</ins><span class="cx"> /* one column on the post write/edit screen */
</span><span class="cx"> @media only screen and (max-width: 850px) {
</span><span class="cx"> #poststuff {
</span><span class="lines">@@ -2633,20 +2666,6 @@
</span><span class="cx"> margin: 0 8px;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_recent_comments div.undo {
- margin: 0 -12px;
- padding: 6px 12px;
- font-size: 11px;
-}
-
-#dashboard_recent_comments div.undo .avatar {
- float: left;
-}
-
-#dashboard_recent_comments div.undo div {
- min-height: 20px;
-}
-
</del><span class="cx"> #the-comment-list td.comment p.comment-author {
</span><span class="cx"> margin-top: 0;
</span><span class="cx"> margin-left: 0;
</span><span class="lines">@@ -2834,6 +2853,491 @@
</span><span class="cx"> list-style-type: none;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+/* Dashboard WordPress news */
+
+#dashboard_rss .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#dashboard_rss .widget-loading,
+#dashboard_rss .dashboard-widget-control-form {
+ padding: 12px 12px 0;
+}
+
+body #dashboard-widgets .postbox form .submit {
+ margin: 0;
+}
+
+.dashboard-widget-control-form {
+ overflow: hidden;
+}
+
+.dashboard-widget-control-form p {
+ margin-top: 0;
+}
+
+.rssSummary {
+ color: #999;
+ margin-top: 4px;
+}
+
+.rss-widget {
+ border-bottom: 1px solid #eee;
+ font-size: 13px;
+ padding: 8px 12px 12px;
+}
+
+.rss-widget:last-child {
+ border-bottom: none;
+ padding-bottom: 0;
+}
+
+.rss-widget a {
+ font-weight: normal;
+}
+
+.rss-widget span,
+.rss-widget span.rss-date {
+ color: #bbb;
+}
+
+.rss-widget span.rss-date {
+ margin-left: 12px;
+}
+
+.rss-widget ul li {
+ margin-bottom: 8px;
+}
+
+/* Dashboard right now */
+
+#dash-right-now ul {
+ margin: 0;
+ overflow: hidden;
+}
+
+#dash-right-now li {
+ width: 50%;
+ float: left;
+ margin-bottom: 10px;
+}
+
+#dash-right-now .inside {
+ margin-bottom: 0;
+ overflow: hidden;
+ padding: 0;
+}
+
+#dash-right-now .main {
+ padding: 0 12px;
+}
+
+#dash-right-now .main p {
+ margin: 0;
+}
+
+.mu-storage {
+ overflow: hidden;
+}
+
+/* Dashboard right now - Colors */
+
+#dash-right-now li a:before {
+ color: #888;
+}
+
+#dash-right-now .sub {
+ color: #bfbbbb;
+ background: #f5f5f5;
+ border-top-color: #dedede;
+ padding: 12px 12px 6px 12px;
+ border-top: 1px solid;
+}
+
+#dash-right-now .sub h4 {
+ color: #555;
+}
+
+#dash-right-now .sub p {
+ margin: 0 0 .5em;
+ font-size: 11px;
+}
+
+#dash-right-now .warning a:before {
+ color: #d54e21;
+}
+
+/* Dashboard right now - Icons */
+#dash-right-now li a:before {
+ content: '\f159';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ float: left;
+ margin: 0 5px 0 0;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dash-right-now .page-count a:before {
+ content: '\f105';
+}
+
+#dash-right-now .post-count a:before {
+ content: '\f109';
+}
+
+#dash-right-now .comment-count a:before {
+ content: '\f101';
+}
+
+#dash-right-now .comment-mod-count a:before {
+ content: '\f125';
+}
+
+#dash-right-now .storage-count a:before {
+ content: '\f104';
+}
+
+#dash-right-now .storage-count.warning a:before {
+ content: '\f153';
+}
+
+/* Dashboard Quick Draft */
+
+#dashboard_quick_draft div.updated {
+ margin-bottom: 10px;
+ border: 1px solid #eee;
+ border-width: 1px 1px 1px 0;
+}
+
+#dashboard_quick_draft form {
+ padding: 0 12px 1px 12px;
+ overflow: hidden;
+}
+
+#dashboard_quick_draft .drafts,
+#dashboard_quick_draft .easy-blogging {
+ padding: 8px 12px 0;
+}
+
+#dashboard-widgets .postbox .inside {
+ margin: 10px 0;
+ padding: 0;
+}
+
+/* Dashboard Quick Draft - Form styling */
+
+input#save-post {
+ float: right;
+}
+
+form.initial-form label.prompt {
+ font-style: italic;
+}
+
+form.initial-form input#title {
+ height: 3em;
+}
+
+form.initial-form.quickpress-open label.prompt {
+ font-style: normal;
+}
+
+form.initial-form.quickpress-open input#title {
+ height: auto;
+}
+
+#dashboard_quick_draft input,
+#dashboard_quick_draft textarea {
+ box-sizing: border-box;
+ -moz-box-sizing:border-box;
+ -webkit-box-sizing:border-box;
+ margin: 0;
+}
+
+#dashboard_quick_draft textarea {
+ resize: vertical;
+}
+
+#dashboard-widgets .postbox form .submit {
+ margin: -39px 0;
+ float: right;
+}
+
+#description-wrap {
+ margin-top: 12px;
+}
+
+#title-wrap #title-prompt-text,
+.textarea-wrap #content-prompt-text {
+ color: #BBB;
+}
+
+#title-wrap #title-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.initial-form #description-wrap,
+.initial-form p.submit {
+ display: none;
+}
+
+.input-text-wrap,
+.textarea-wrap {
+ position: relative;
+}
+
+.input-text-wrap .prompt,
+.textarea-wrap .prompt {
+ position: absolute;
+}
+
+.textarea-wrap #content-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.textarea-wrap textarea#content {
+ margin: 0 0 8px;
+ padding: 6px 7px;
+}
+
+/* Dashboard Quick Draft - Drafts list */
+
+#dashboard_quick_draft .drafts {
+ border-top: 1px solid #eee;
+ margin-top: 12px;
+}
+
+#dashboard_quick_draft .drafts abbr {
+ border: none;
+}
+
+#dashboard_quick_draft .drafts h4 {
+ margin: 0 0 8px 0;
+ font-weight: normal;
+}
+
+#dashboard_quick_draft .drafts .view-all {
+ float: right;
+ margin-top: 0;
+}
+
+#dashboard_rss a.rsswidget {
+ font-weight: normal;
+}
+
+#draft-list {
+ margin: 0;
+}
+
+#draft-list li {
+ margin-bottom: 1em;
+}
+#draft-list li time {
+ color: #bbb;
+}
+
+#draft-list p {
+ margin: 0;
+}
+
+#draft-list .draft-title {
+ overflow: hidden;
+}
+
+#draft-list .draft-title a,
+#draft-list .draft-title time {
+ float: left;
+ margin: 0 5px 0 0;
+}
+
+/* Dashboard activity widget */
+
+#dashboard-widgets #dashboard_activity h4 {
+ margin: 0 0 8px 12px;
+ font-weight: normal;
+}
+
+#dashboard-widgets #dashboard_activity h4.comment-meta {
+ margin: 0;
+}
+
+#dashboard_activity h4.comment-meta {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ margin-bottom: 4px;
+}
+
+#dashboard_activity ul {
+ padding: 0 12px;
+}
+
+#dashboard_activity .comment-meta span.approve:before {
+ content: '\f227';
+ font: 20px/.5 "dashicons";
+ margin-left: 12px;
+ vertical-align: middle;
+ position: relative;
+ top: -1px;
+ margin-right: 2px;
+}
+
+#dashboard_activity .inside {
+ padding: 0;
+ margin: 0;
+}
+
+#dashboard_activity .no-activity {
+ overflow: hidden;
+ padding: 0 12px 12px;
+ text-align: center;
+}
+
+#dashboard_activity .no-activity p {
+ color: #999;
+ font-size: 16px;
+}
+
+#dashboard_activity .no-activity .smiley {
+ margin-top: 0;
+}
+
+#dashboard_activity .no-activity .smiley:before {
+ content: '\f328';
+ font: normal 120px/1 'dashicons';
+ speak: none;
+ display: block;
+ margin: 0 5px 0 0;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dashboard_activity .subsubsub {
+ float: none;
+ border-top: 1px solid #eeeeee;
+ margin-top: 0;
+ padding: 8px 12px 0 12px;
+}
+
+#future-posts .show-more,
+#published-posts .show-more {
+ float: right;
+}
+
+#future-posts ul,
+#published-posts ul {
+ clear: both;
+ margin-bottom: 0;
+}
+
+#future-posts li,
+#published-posts li {
+ overflow: hidden;
+ margin-bottom: 8px;
+}
+
+#future-posts ul span,
+#published-posts ul span {
+ color: #bbb;
+ float: left;
+ margin-right: 8px;
+ min-width: 150px;
+}
+
+.activity-block {
+ border-bottom: 1px solid #eee;
+ overflow: hidden;
+ padding: 8px 0 0;
+}
+
+.activity-block:last-child {
+ border-bottom: none;
+}
+
+.activity-block .subsubsub li {
+ color: #ddd;
+}
+
+/* Dashboard activity widget - Comments */
+
+#the-comment-list tr.undo, #the-comment-list div.undo {
+ background: none;
+ padding: 6px 0;
+}
+
+#the-comment-list .alternate,
+#the-comment-list .alt {
+ background: none;
+}
+
+#the-comment-list .comment {
+ background: #f5f5f5;
+ padding: 12px;
+ position: relative;
+ border-top: 1px solid #eeeeee;
+}
+
+#the-comment-list img {
+ position: absolute;
+ left: 13px;
+ top: 13px;
+}
+
+#the-comment-list .dashboard-comment-wrap {
+ padding-left: 63px;
+}
+
+#the-comment-list .dashboard-comment-wrap blockquote {
+ margin: 1em 0;
+}
+
+#the-comment-list .comment-item h4 {
+ font-size: 13px;
+ color: #999;
+}
+
+#the-comment-list .comment-item p.row-actions {
+ margin: 4px 0 0 0;
+}
+
+#the-comment-list .comment-item:first-child {
+ border-top: 1px solid #eeeeee;
+}
+
+#the-comment-list .unapproved {
+ background: #f7fcfe;
+}
+
+#the-comment-list .unapproved:before {
+ content: "";
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ background: #d54e21;
+ width: 4px;
+}
+
+/* Browse happy box */
+
+#dashboard-widgets #dashboard_browser_nag.postbox .inside {
+ margin: 10px;
+}
+
</ins><span class="cx"> @media screen and (max-width: 870px) {
</span><span class="cx"> .welcome-panel .welcome-panel-column,
</span><span class="cx"> .welcome-panel .welcome-panel-column:first-child {
</span><span class="lines">@@ -7752,122 +8256,51 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /* Recent Comments */
</span><del>-#dashboard_recent_comments h3 {
- margin-bottom: 0;
-}
</del><span class="cx">
</span><del>-#dashboard_recent_comments .inside {
- margin-top: 0;
-}
-
-#dashboard_recent_comments .comment-meta .approve {
- font-family: "Open Sans", sans-serif;
- font-size: 13px;
- line-height: 1;
- margin: 0 10px;
-}
-
-#dashboard_recent_comments .subsubsub {
- float: none;
- white-space: normal;
-}
-
-#the-comment-list {
</del><ins>+#latest-comments #the-comment-list {
</ins><span class="cx"> position: relative;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item {
</del><ins>+#activity-widget #latest-comments #the-comment-list .comment-item {
</ins><span class="cx"> padding: 1em 12px;
</span><del>- border-top: 1px solid;
</del><ins>+ border-top: 1px solid #eee;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .pingback {
</del><ins>+#latest-comments #the-comment-list .pingback {
</ins><span class="cx"> padding-left: 12px !important;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item,
-#the-comment-list #replyrow {
- margin: 0 -12px;
-}
-
-#the-comment-list .comment-item:first-child {
</del><ins>+#latest-comments #the-comment-list .comment-item:first-child {
</ins><span class="cx"> border-top: none;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item .avatar {
- float: left;
- margin: 0 10px 5px 0;
-}
-
-#the-comment-list .comment-item h4 {
</del><ins>+#latest-comments #the-comment-list .comment-item h4 {
</ins><span class="cx"> line-height: 1.5em;
</span><span class="cx"> margin-top: 0;
</span><span class="cx"> color: #999;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item h4 cite {
</del><ins>+#latest-comments #the-comment-list .comment-item h4 cite {
</ins><span class="cx"> font-style: normal;
</span><span class="cx"> font-weight: normal;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#the-comment-list .comment-item blockquote,
-#the-comment-list .comment-item blockquote p {
</del><ins>+#latest-comments #the-comment-list .comment-item blockquote,
+#latest-comments #the-comment-list .comment-item blockquote p {
</ins><span class="cx"> margin: 0;
</span><span class="cx"> padding: 0;
</span><span class="cx"> display: inline;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_recent_comments #the-comment-list .trackback blockquote,
-#dashboard_recent_comments #the-comment-list .pingback blockquote {
- display: block;
-}
-
-#the-comment-list .comment-item p.row-actions {
</del><ins>+#latest-comments #the-comment-list .comment-item p.row-actions {
</ins><span class="cx"> margin: 3px 0 0;
</span><span class="cx"> padding: 0;
</span><span class="cx"> font-size: 13px;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-/* QuickPress */
-#header-logo {
- display: none;
-}
</del><ins>+/* QuickDraft */
</ins><span class="cx">
</span><del>-#site-heading:before {
- top: 3px;
- position: relative;
- display: inline-block;
- font: normal 18px/1 'dashicons';
- speak: none;
- color: #727272;
- content: '\f120';
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.no-js #dashboard_quick_press {
- display: none;
-}
-
-#dashboard_quick_press .easy-blogging {
- padding: 0 8px;
- text-align: left;
-}
-
-#dashboard_quick_press .input-text-wrap {
- position: relative;
-}
-
-#dashboard_quick_press .prompt {
- color: #bbb;
- position: absolute;
-}
-
-#dashboard_quick_press div.updated {
- padding: 0 5px;
-}
-
-#title-wrap label,
-#tags-input-wrap label {
</del><ins>+#title-wrap label {
</ins><span class="cx"> cursor: text;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -7878,90 +8311,11 @@
</span><span class="cx"> outline: none;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#tags-input-wrap #tags-input {
- outline: none;
- padding: 3px 6px;
-}
-
</del><span class="cx"> #title-wrap #title-prompt-text {
</span><del>- font-size: 1.3em;
- padding: 5px 8px;
-}
-
-#tags-input-wrap #tags-input-prompt-text {
</del><span class="cx"> font-size: 1em;
</span><span class="cx"> padding: 5px 8px;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#dashboard_quick_press .input-text-wrap,
-#dashboard_quick_press .textarea-wrap {
- margin: 0 0 .7em 0;
-}
-
-#dashboard_quick_press .input-text-wrap {
- margin-right: 1px;
-}
-
-#dashboard_quick_press .textarea-wrap {
- margin-left: 1px;
-}
-
-#dashboard_quick_press .wp-media-buttons {
- margin: 0 0 2px 1px;
- padding: 0;
-}
-
-#dashboard_quick_press .wp-media-buttons a {
- color: #777;
- margin-bottom: 0;
-}
-
-#dashboard-widgets #dashboard_quick_press form p.submit input {
- float: left;
-}
-
-#dashboard-widgets #dashboard_quick_press form p.submit #save-post {
- margin: 0 0.7em 0 1px;
-}
-
-#dashboard-widgets #dashboard_quick_press form p.submit #publish {
- float: right;
-}
-
-#dashboard-widgets #dashboard_quick_press form p.submit .spinner {
- vertical-align: middle;
- margin: 4px 6px 0 0;
-}
-
-/* Recent Drafts */
-#dashboard_recent_drafts ul,
-#dashboard_recent_drafts p {
- margin: 0;
- padding: 0;
- word-wrap: break-word;
-}
-
-#dashboard_recent_drafts ul {
- list-style: none;
-}
-
-#dashboard_recent_drafts ul li {
- margin-bottom: 1em;
-}
-
-#dashboard_recent_drafts h4 {
- line-height: 1.7em;
- word-wrap: break-word;
-}
-
-#dashboard_recent_drafts h4 abbr {
- font-weight: normal;
- font-family: "Open Sans", sans-serif;
- font-size: 12px;
- color: #999;
- margin-left: 3px;
-}
-
</del><span class="cx"> /* Feeds */
</span><span class="cx"> .rss-widget ul {
</span><span class="cx"> margin: 0;
</span><span class="lines">@@ -7997,33 +8351,6 @@
</span><span class="cx"> content: '\2014';
</span><span class="cx"> }
</span><span class="cx">
</span><del>-/* Plugins */
-#dashboard_plugins h4 {
- line-height: 1.7em;
-}
-
-#dashboard_plugins h5 {
- font-weight: normal;
- font-size: 13px;
- margin: 0;
- display: inline;
- line-height: 1.4em;
-}
-
-#dashboard_plugins h5 a {
- line-height: 1.4em;
-}
-
-#dashboard_plugins .inside span {
- font-size: 12px;
- padding-left: 5px;
-}
-
-#dashboard_plugins p {
- margin: 0.3em 0 1.4em;
- line-height: 1.4em;
-}
-
</del><span class="cx"> .dashboard-comment-wrap {
</span><span class="cx"> overflow: hidden;
</span><span class="cx"> word-wrap: break-word;
</span></span></pre></div>
<a id="trunksrcwpadminincludesajaxactionsphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/includes/ajax-actions.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/includes/ajax-actions.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/includes/ajax-actions.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -234,18 +234,9 @@
</span><span class="cx"> require_once ABSPATH . 'wp-admin/includes/dashboard.php';
</span><span class="cx">
</span><span class="cx"> switch ( $_GET['widget'] ) {
</span><del>- case 'dashboard_incoming_links' :
- wp_dashboard_incoming_links();
</del><ins>+ case 'dashboard_rss' :
+ wp_dashboard_rss();
</ins><span class="cx"> break;
</span><del>- case 'dashboard_primary' :
- wp_dashboard_primary();
- break;
- case 'dashboard_secondary' :
- wp_dashboard_secondary();
- break;
- case 'dashboard_plugins' :
- wp_dashboard_plugins();
- break;
</del><span class="cx"> }
</span><span class="cx"> wp_die();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunksrcwpadminincludesdashboardphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/includes/dashboard.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/includes/dashboard.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/includes/dashboard.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -37,81 +37,21 @@
</span><span class="cx">
</span><span class="cx"> // Right Now
</span><span class="cx"> if ( is_blog_admin() && current_user_can('edit_posts') )
</span><del>- wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' );
</del><ins>+ add_meta_box( 'dash-right-now', 'Site Content', 'dashboard_new_right_now', 'dashboard', 'normal', 'high' );
</ins><span class="cx">
</span><span class="cx"> if ( is_network_admin() )
</span><span class="cx"> wp_add_dashboard_widget( 'network_dashboard_right_now', __( 'Right Now' ), 'wp_network_dashboard_right_now' );
</span><span class="cx">
</span><del>- // Recent Comments Widget
- if ( is_blog_admin() && current_user_can('moderate_comments') ) {
- if ( !isset( $widget_options['dashboard_recent_comments'] ) || !isset( $widget_options['dashboard_recent_comments']['items'] ) ) {
- $update = true;
- $widget_options['dashboard_recent_comments'] = array(
- 'items' => 5,
- );
- }
- $recent_comments_title = __( 'Recent Comments' );
- wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments', 'wp_dashboard_recent_comments_control' );
- }
</del><ins>+ // Activity Widget
+ add_meta_box( 'dashboard_activity', __( 'Activity' ), 'wp_dashboard_activity', 'dashboard', 'normal', 'high' );
</ins><span class="cx">
</span><del>- // Incoming Links Widget
- if ( is_blog_admin() && current_user_can('publish_posts') ) {
- if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) {
- $update = true;
- $num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
- $widget_options['dashboard_incoming_links'] = array(
- 'home' => get_option('home'),
- 'link' => apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
- 'url' => isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters( 'dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url'] ) : apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&ie=utf-8&num=' . $num_items . '&output=rss&partner=wordpress&q=link:' . trailingslashit( get_option('home') ) ),
- 'items' => $num_items,
- 'show_date' => isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false
- );
- }
- wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' );
- }
-
- // WP Plugins Widget
- if ( ( ! is_multisite() && is_blog_admin() && current_user_can( 'install_plugins' ) ) || ( is_network_admin() && current_user_can( 'manage_network_plugins' ) && current_user_can( 'install_plugins' ) ) )
- wp_add_dashboard_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_plugins' );
-
</del><span class="cx"> // QuickPress Widget
</span><del>- if ( is_blog_admin() && current_user_can('edit_posts') )
- wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' );
</del><ins>+ if ( is_blog_admin() && current_user_can( 'edit_posts' ) )
+ add_meta_box( 'dashboard_quick_draft', __( 'Quick Draft' ), 'wp_dashboard_quick_draft', 'dashboard', 'side', 'high' );
</ins><span class="cx">
</span><del>- // Recent Drafts
- if ( is_blog_admin() && current_user_can('edit_posts') )
- wp_add_dashboard_widget( 'dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts' );
</del><ins>+ // WordPress News
+ add_meta_box( 'dashboard_rss', __( 'WordPress News' ), 'wp_dashboard_rss', 'dashboard', 'side', 'low' );
</ins><span class="cx">
</span><del>- // Primary feed (Dev Blog) Widget
- if ( !isset( $widget_options['dashboard_primary'] ) ) {
- $update = true;
- $widget_options['dashboard_primary'] = array(
- 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ),
- 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ),
- 'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ),
- 'items' => 2,
- 'show_summary' => 1,
- 'show_author' => 0,
- 'show_date' => 1,
- );
- }
- wp_add_dashboard_widget( 'dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_primary', 'wp_dashboard_primary_control' );
-
- // Secondary Feed (Planet) Widget
- if ( !isset( $widget_options['dashboard_secondary'] ) ) {
- $update = true;
- $widget_options['dashboard_secondary'] = array(
- 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ),
- 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ),
- 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ),
- 'items' => 5,
- 'show_summary' => 0,
- 'show_author' => 0,
- 'show_date' => 0,
- );
- }
- wp_add_dashboard_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control' );
-
</del><span class="cx"> // Hook to register new widgets
</span><span class="cx"> // Filter widget order
</span><span class="cx"> if ( is_network_admin() ) {
</span><span class="lines">@@ -165,9 +105,9 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if ( is_blog_admin () )
</span><del>- $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary');
</del><ins>+ $side_widgets = array('dashboard_quick_draft');
</ins><span class="cx"> else if (is_network_admin() )
</span><del>- $side_widgets = array('dashboard_primary', 'dashboard_secondary');
</del><ins>+ $side_widgets = array();
</ins><span class="cx"> else
</span><span class="cx"> $side_widgets = array();
</span><span class="cx">
</span><span class="lines">@@ -224,191 +164,68 @@
</span><span class="cx">
</span><span class="cx"> /* Dashboard Widgets */
</span><span class="cx">
</span><del>-function wp_dashboard_right_now() {
- global $wp_registered_sidebars;
-
- $num_posts = wp_count_posts( 'post' );
- $num_pages = wp_count_posts( 'page' );
-
- $num_cats = wp_count_terms('category');
-
- $num_tags = wp_count_terms('post_tag');
-
- $num_comm = wp_count_comments();
-
- echo "\n\t".'<div class="table table_content">';
- echo "\n\t".'<p class="sub">' . __('Content') . '</p>'."\n\t".'<table>';
- echo "\n\t".'<tr class="first">';
-
- // Posts
- $num = number_format_i18n( $num_posts->publish );
- $text = _n( 'Post', 'Posts', intval($num_posts->publish) );
- if ( current_user_can( 'edit_posts' ) ) {
- $num = "<a href='edit.php'>$num</a>";
- $text = "<a href='edit.php'>$text</a>";
- }
- echo '<td class="first b b-posts">' . $num . '</td>';
- echo '<td class="t posts">' . $text . '</td>';
-
- echo '</tr><tr>';
- /* TODO: Show status breakdown on hover
- if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can
- $post_type_texts[] = '<a href="edit-pages.php">'.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).'</a>';
- }
- if ( $can_edit_posts && !empty($num_posts->draft) ) {
- $post_type_texts[] = '<a href="edit.php?post_status=draft">'.sprintf( _n( '%s draft', '%s drafts', $num_posts->draft ), number_format_i18n( $num_posts->draft ) ).'</a>';
- }
- if ( $can_edit_posts && !empty($num_posts->future) ) {
- $post_type_texts[] = '<a href="edit.php?post_status=future">'.sprintf( _n( '%s scheduled post', '%s scheduled posts', $num_posts->future ), number_format_i18n( $num_posts->future ) ).'</a>';
- }
- if ( current_user_can('publish_posts') && !empty($num_posts->pending) ) {
- $pending_text = sprintf( _n( 'There is <a href="%1$s">%2$s post</a> pending your review.', 'There are <a href="%1$s">%2$s posts</a> pending your review.', $num_posts->pending ), 'edit.php?post_status=pending', number_format_i18n( $num_posts->pending ) );
- } else {
- $pending_text = '';
- }
- */
-
- // Pages
- $num = number_format_i18n( $num_pages->publish );
- $text = _n( 'Page', 'Pages', $num_pages->publish );
- if ( current_user_can( 'edit_pages' ) ) {
- $num = "<a href='edit.php?post_type=page'>$num</a>";
- $text = "<a href='edit.php?post_type=page'>$text</a>";
- }
- echo '<td class="first b b_pages">' . $num . '</td>';
- echo '<td class="t pages">' . $text . '</td>';
-
- echo '</tr><tr>';
-
- // Categories
- $num = number_format_i18n( $num_cats );
- $text = _n( 'Category', 'Categories', $num_cats );
- if ( current_user_can( 'manage_categories' ) ) {
- $num = "<a href='edit-tags.php?taxonomy=category'>$num</a>";
- $text = "<a href='edit-tags.php?taxonomy=category'>$text</a>";
- }
- echo '<td class="first b b-cats">' . $num . '</td>';
- echo '<td class="t cats">' . $text . '</td>';
-
- echo '</tr><tr>';
-
- // Tags
- $num = number_format_i18n( $num_tags );
- $text = _n( 'Tag', 'Tags', $num_tags );
- if ( current_user_can( 'manage_categories' ) ) {
- $num = "<a href='edit-tags.php'>$num</a>";
- $text = "<a href='edit-tags.php'>$text</a>";
- }
- echo '<td class="first b b-tags">' . $num . '</td>';
- echo '<td class="t tags">' . $text . '</td>';
-
- echo "</tr>";
- do_action('right_now_content_table_end');
- echo "\n\t</table>\n\t</div>";
-
- echo "\n\t".'<div class="table table_discussion">';
- echo "\n\t".'<p class="sub">' . __('Discussion') . '</p>'."\n\t".'<table>';
- echo "\n\t".'<tr class="first">';
-
- // Total Comments
- $num = '<span class="total-count">' . number_format_i18n($num_comm->total_comments) . '</span>';
- $text = _n( 'Comment', 'Comments', $num_comm->total_comments );
- if ( current_user_can( 'moderate_comments' ) ) {
- $num = '<a href="edit-comments.php">' . $num . '</a>';
- $text = '<a href="edit-comments.php">' . $text . '</a>';
- }
- echo '<td class="b b-comments">' . $num . '</td>';
- echo '<td class="last t comments">' . $text . '</td>';
-
- echo '</tr><tr>';
-
- // Approved Comments
- $num = '<span class="approved-count">' . number_format_i18n($num_comm->approved) . '</span>';
- $text = _nx( 'Approved', 'Approved', $num_comm->approved, 'Right Now' );
- if ( current_user_can( 'moderate_comments' ) ) {
- $num = "<a href='edit-comments.php?comment_status=approved'>$num</a>";
- $text = "<a class='approved' href='edit-comments.php?comment_status=approved'>$text</a>";
- }
- echo '<td class="b b_approved">' . $num . '</td>';
- echo '<td class="last t">' . $text . '</td>';
-
- echo "</tr>\n\t<tr>";
-
- // Pending Comments
- $num = '<span class="pending-count">' . number_format_i18n($num_comm->moderated) . '</span>';
- $text = _n( 'Pending', 'Pending', $num_comm->moderated );
- if ( current_user_can( 'moderate_comments' ) ) {
- $num = "<a href='edit-comments.php?comment_status=moderated'>$num</a>";
- $text = "<a class='waiting' href='edit-comments.php?comment_status=moderated'>$text</a>";
- }
- echo '<td class="b b-waiting">' . $num . '</td>';
- echo '<td class="last t">' . $text . '</td>';
-
- echo "</tr>\n\t<tr>";
-
- // Spam Comments
- $num = number_format_i18n($num_comm->spam);
- $text = _nx( 'Spam', 'Spam', $num_comm->spam, 'comment' );
- if ( current_user_can( 'moderate_comments' ) ) {
- $num = "<a href='edit-comments.php?comment_status=spam'><span class='spam-count'>$num</span></a>";
- $text = "<a class='spam' href='edit-comments.php?comment_status=spam'>$text</a>";
- }
- echo '<td class="b b-spam">' . $num . '</td>';
- echo '<td class="last t">' . $text . '</td>';
-
- echo "</tr>";
- do_action('right_now_table_end');
- do_action('right_now_discussion_table_end');
- echo "\n\t</table>\n\t</div>";
-
- echo "\n\t".'<div class="versions">';
</del><ins>+function dashboard_new_right_now() {
</ins><span class="cx"> $theme = wp_get_theme();
</span><del>-
- echo "\n\t<p>";
-
- if ( $theme->errors() ) {
- if ( ! is_multisite() || is_super_admin() )
- echo '<span class="error-message">' . sprintf( __( 'ERROR: %s' ), $theme->errors()->get_error_message() ) . '</span>';
- } elseif ( ! empty($wp_registered_sidebars) ) {
- $sidebars_widgets = wp_get_sidebars_widgets();
- $num_widgets = 0;
- foreach ( (array) $sidebars_widgets as $k => $v ) {
- if ( 'wp_inactive_widgets' == $k || 'orphaned_widgets' == substr( $k, 0, 16 ) )
- continue;
- if ( is_array($v) )
- $num_widgets = $num_widgets + count($v);
</del><ins>+ if ( current_user_can( 'switch_themes' ) )
+ $theme_name = sprintf( '<a href="themes.php">%1$s</a>', $theme->display('Name') );
+ else
+ $theme_name = $theme->display('Name');
+?>
+ <div class="main">
+ <ul>
+ <?php
+ do_action( 'rightnow_list_start' );
+ // Using show_in_nav_menus as my arg for grabbing what post types should show, is there better?
+ $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
+ $post_types = (array) apply_filters( 'rightnow_post_types', $post_types );
+ foreach ( $post_types as $post_type => $post_type_obj ){
+ $num_posts = wp_count_posts( $post_type );
+ if ( $num_posts && $num_posts->publish ) {
+ printf(
+ '<li class="%1$s-count"><a href="edit.php?post_type=%1$s">%2$s %3$s</a></li>',
+ $post_type,
+ number_format_i18n( $num_posts->publish ),
+ $post_type_obj->label
+ );
</ins><span class="cx"> }
</span><del>- $num = number_format_i18n( $num_widgets );
-
- $switch_themes = $theme->display('Name');
- if ( current_user_can( 'switch_themes') )
- $switch_themes = '<a href="themes.php">' . $switch_themes . '</a>';
- if ( current_user_can( 'edit_theme_options' ) ) {
- printf(_n('Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php">%2$s Widget</a></span>', 'Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php">%2$s Widgets</a></span>', $num_widgets), $switch_themes, $num);
- } else {
- printf(_n('Theme <span class="b">%1$s</span> with <span class="b">%2$s Widget</span>', 'Theme <span class="b">%1$s</span> with <span class="b">%2$s Widgets</span>', $num_widgets), $switch_themes, $num);
</del><ins>+ }
+ // Comments
+ $num_comm = wp_count_comments();
+ if ( $num_comm && $num_comm->total_comments ) {
+ $text = _n( 'comment', 'comments', $num_comm->total_comments );
+ printf(
+ '<li class="comment-count"><a href="edit-comments.php">%1$s %2$s</a></li>',
+ number_format_i18n( $num_comm->total_comments ),
+ $text
+ );
+ if ( $num_comm->moderated ) {
+ $text = _n( 'in moderation', 'in moderation', $num_comm->total_comments );
+ printf(
+ '<li class="comment-mod-count"><a href="edit-comments.php?comment_status=moderated">%1$s %2$s</a></li>',
+ number_format_i18n( $num_comm->moderated ),
+ $text
+ );
</ins><span class="cx"> }
</span><del>- } else {
- if ( current_user_can( 'switch_themes' ) )
- printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $theme->display('Name') );
- else
- printf( __('Theme <span class="b">%1$s</span>'), $theme->display('Name') );
</del><span class="cx"> }
</span><del>- echo '</p>';
</del><ins>+ do_action( 'rightnow_list_end' );
+ ?>
+ </ul>
+ <p><?php printf( __( 'WordPress %1$s running %2$s theme.' ), get_bloginfo( 'version', 'display' ), $theme_name ); ?></p>
+ </div>
</ins><span class="cx">
</span><del>- // Check if search engines are asked not to index this site.
- if ( !is_network_admin() && !is_user_admin() && current_user_can('manage_options') && '1' != get_option('blog_public') ) {
- $title = apply_filters('privacy_on_link_title', __('Your site is asking search engines not to index its content') );
- $content = apply_filters('privacy_on_link_text', __('Search Engines Discouraged') );
-
- echo "<p><a href='options-reading.php' title='$title'>$content</a></p>";
- }
-
- update_right_now_message();
-
- echo "\n\t".'<br class="clear" /></div>';
</del><ins>+ <?php
+ // activity_box_end has a core action, but only prints content when multisite.
+ // Using an output buffer is the only way to really check if anything's displayed here.
+ ob_start();
</ins><span class="cx"> do_action( 'rightnow_end' );
</span><span class="cx"> do_action( 'activity_box_end' );
</span><ins>+ $actions = ob_get_clean();
+
+ if ( !empty( $actions ) ) : ?>
+ <div class="sub">
+ <?php echo $actions; ?>
+ </div>
+ <?php endif;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> function wp_network_dashboard_right_now() {
</span><span class="lines">@@ -458,42 +275,23 @@
</span><span class="cx"> do_action( 'mu_activity_box_end' );
</span><span class="cx"> }
</span><span class="cx">
</span><del>-function wp_dashboard_quick_press() {
</del><ins>+/**
+ * The Quick Draft widget display and creation of drafts
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function wp_dashboard_quick_draft( $error_msg=false ) {
</ins><span class="cx"> global $post_ID;
</span><span class="cx">
</span><del>- $drafts = false;
- if ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['action'] ) && 0 === strpos( $_POST['action'], 'post-quickpress' ) && (int) $_POST['post_ID'] ) {
- $view = get_permalink( $_POST['post_ID'] );
- $edit = esc_url( get_edit_post_link( $_POST['post_ID'] ) );
- if ( 'post-quickpress-publish' == $_POST['action'] ) {
- if ( current_user_can('publish_posts') )
- printf( '<div class="updated"><p>' . __( 'Post published. <a href="%s">View post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( $view ), $edit );
- else
- printf( '<div class="updated"><p>' . __( 'Post submitted. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
- } else {
- printf( '<div class="updated"><p>' . __( 'Draft saved. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
- $drafts_query = new WP_Query( array(
- 'post_type' => 'post',
- 'post_status' => 'draft',
- 'author' => $GLOBALS['current_user']->ID,
- 'posts_per_page' => 1,
- 'orderby' => 'modified',
- 'order' => 'DESC'
- ) );
-
- if ( $drafts_query->posts )
- $drafts =& $drafts_query->posts;
- }
- printf('<p class="easy-blogging">' . __('You can also try %s, easy blogging from anywhere on the Web.') . '</p>', '<a href="' . esc_url( admin_url( 'tools.php' ) ) . '">' . __('Press This') . '</a>' );
- $_REQUEST = array(); // hack for get_default_post_to_edit()
- }
-
</del><span class="cx"> /* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */
</span><span class="cx"> $last_post_id = (int) get_user_option( 'dashboard_quick_press_last_post_id' ); // Get the last post_ID
</span><span class="cx"> if ( $last_post_id ) {
</span><span class="cx"> $post = get_post( $last_post_id );
</span><span class="cx"> if ( empty( $post ) || $post->post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore
</span><del>- $post = get_default_post_to_edit('post', true);
</del><ins>+ $post = get_default_post_to_edit( 'post', true );
</ins><span class="cx"> update_user_option( get_current_user_id(), 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID
</span><span class="cx"> } else {
</span><span class="cx"> $post->post_title = ''; // Remove the auto draft title
</span><span class="lines">@@ -508,152 +306,96 @@
</span><span class="cx">
</span><span class="cx"> $post_ID = (int) $post->ID;
</span><span class="cx">
</span><del>- $media_settings = array(
- 'id' => $post->ID,
- 'nonce' => wp_create_nonce( 'update-post_' . $post->ID ),
- );
-
- if ( current_theme_supports( 'post-thumbnails', $post->post_type ) && post_type_supports( $post->post_type, 'thumbnail' ) ) {
- $featured_image_id = get_post_meta( $post->ID, '_thumbnail_id', true );
- $media_settings['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
- }
</del><ins>+ do_action( 'dashboard_quickdraft_beginning', $post );
</ins><span class="cx"> ?>
</span><span class="cx">
</span><del>- <form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press">
- <div class="input-text-wrap" id="title-wrap">
- <label class="screen-reader-text prompt" for="title" id="title-prompt-text"><?php _e( 'Enter title here' ); ?></label>
- <input type="text" name="post_title" id="title" autocomplete="off" value="<?php echo esc_attr( $post->post_title ); ?>" />
- </div>
</del><ins>+ <form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press" class="initial-form">
</ins><span class="cx">
</span><del>- <?php if ( current_user_can( 'upload_files' ) ) : ?>
- <div id="wp-content-wrap" class="wp-editor-wrap hide-if-no-js wp-media-buttons">
- <?php do_action( 'media_buttons', 'content' ); ?>
- </div>
</del><ins>+ <?php if ($error_msg) : ?>
+ <div class="error"><?php _e( $error_msg ); ?></div>
</ins><span class="cx"> <?php endif; ?>
</span><span class="cx">
</span><del>- <div class="textarea-wrap">
- <label class="screen-reader-text" for="content"><?php _e( 'Content' ); ?></label>
- <textarea name="content" id="content" class="mceEditor" rows="3" cols="15"><?php echo esc_textarea( $post->post_content ); ?></textarea>
</del><ins>+ <div class="input-text-wrap" id="title-wrap">
+ <label class="screen-reader-text prompt" for="title" id="title-prompt-text"><?php _e( "What's on your mind?" ); ?></label>
+ <input type="text" name="post_title" id="title" autocomplete="off" />
</ins><span class="cx"> </div>
</span><span class="cx">
</span><del>- <script type="text/javascript">
- edCanvas = document.getElementById('content');
- edInsertContent = null;
- <?php if ( $_POST ) : ?>
- wp.media.editor.remove('content');
- wp.media.view.settings.post = <?php echo json_encode( $media_settings ); // big juicy hack. ?>;
- wp.media.editor.add('content');
- <?php endif; ?>
- </script>
-
- <div class="input-text-wrap" id="tags-input-wrap">
- <label class="screen-reader-text prompt" for="tags-input" id="tags-input-prompt-text"><?php _e( 'Tags (separate with commas)' ); ?></label>
- <input type="text" name="tags_input" id="tags-input" value="<?php echo get_tags_to_edit( $post->ID ); ?>" />
</del><ins>+ <div class="textarea-wrap" id="description-wrap">
+ <label class="screen-reader-text prompt" for="content" id="content-prompt-text"><?php _e( 'Enter a description' ); ?></label>
+ <textarea name="content" id="content" class="mceEditor" rows="3" cols="15"></textarea>
</ins><span class="cx"> </div>
</span><span class="cx">
</span><span class="cx"> <p class="submit">
</span><del>- <span id="publishing-action">
- <input type="submit" name="publish" id="publish" accesskey="p" class="button-primary" value="<?php current_user_can('publish_posts') ? esc_attr_e('Publish') : esc_attr_e('Submit for Review'); ?>" />
- <span class="spinner"></span>
- </span>
- <input type="hidden" name="action" id="quickpost-action" value="post-quickpress-save" />
</del><ins>+ <input type="hidden" name="action" id="quickpost-action" value="post-quickdraft-save" />
</ins><span class="cx"> <input type="hidden" name="post_ID" value="<?php echo $post_ID; ?>" />
</span><span class="cx"> <input type="hidden" name="post_type" value="post" />
</span><del>- <?php wp_nonce_field('add-post'); ?>
- <?php submit_button( __( 'Save Draft' ), 'button', 'save', false, array( 'id' => 'save-post' ) ); ?>
- <input type="reset" value="<?php esc_attr_e( 'Reset' ); ?>" class="button" />
</del><ins>+ <?php wp_nonce_field( 'add-post' ); ?>
+ <?php submit_button( __( 'Save Draft' ), 'primary', 'save', false, array( 'id' => 'save-post' ) ); ?>
</ins><span class="cx"> <br class="clear" />
</span><span class="cx"> </p>
</span><span class="cx">
</span><span class="cx"> </form>
</span><span class="cx">
</span><span class="cx"> <?php
</span><del>- if ( $drafts )
- wp_dashboard_recent_drafts( $drafts );
</del><ins>+ wp_dashboard_recent_quickdrafts();
+
+ do_action( 'dashboard_quickdraft_end' );
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function wp_dashboard_recent_drafts( $drafts = false ) {
- if ( !$drafts ) {
- $drafts_query = new WP_Query( array(
- 'post_type' => 'post',
- 'post_status' => 'draft',
- 'author' => $GLOBALS['current_user']->ID,
- 'posts_per_page' => 5,
- 'orderby' => 'modified',
- 'order' => 'DESC'
- ) );
- $drafts =& $drafts_query->posts;
- }
</del><ins>+/**
+ * Show `Recent Drafts` below Quick Draft form
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function wp_dashboard_recent_quickdrafts() {
</ins><span class="cx">
</span><ins>+ $query_args = array(
+ 'post_type' => 'post',
+ 'post_status' => 'draft',
+ 'author' => $GLOBALS['current_user']->ID,
+ 'posts_per_page' => 4,
+ 'orderby' => 'modified',
+ 'order' => 'DESC'
+ );
+ $query_args = apply_filters( 'dash_recent_quickdrafts_query_args', $query_args );
+ $drafts_query = new WP_Query( $query_args );
+ $drafts =& $drafts_query->posts;
+
+
</ins><span class="cx"> if ( $drafts && is_array( $drafts ) ) {
</span><span class="cx"> $list = array();
</span><ins>+ $draft_count = 0;
</ins><span class="cx"> foreach ( $drafts as $draft ) {
</span><ins>+ if ( 3 == $draft_count )
+ break;
+
+ $draft_count++;
+
</ins><span class="cx"> $url = get_edit_post_link( $draft->ID );
</span><span class="cx"> $title = _draft_or_post_title( $draft->ID );
</span><del>- $item = "<h4><a href='$url' title='" . sprintf( __( 'Edit “%s”' ), esc_attr( $title ) ) . "'>" . esc_html($title) . "</a> <abbr title='" . get_the_time(__('Y/m/d g:i:s A'), $draft) . "'>" . get_the_time( get_option( 'date_format' ), $draft ) . '</abbr></h4>';
</del><ins>+ $item = '<div class="draft-title"><a href="' . $url . '" title="' . sprintf( __( 'Edit “%s”' ), esc_attr( $title ) ) . '">' . esc_html( $title ) . '</a> <time datetime="' . get_the_time( 'c', $draft) . '">' . get_the_time( get_option( 'date_format' ), $draft ) . '</time></div>';
</ins><span class="cx"> if ( $the_content = wp_trim_words( $draft->post_content, 10 ) )
</span><span class="cx"> $item .= '<p>' . $the_content . '</p>';
</span><span class="cx"> $list[] = $item;
</span><span class="cx"> }
</span><ins>+
+ do_action( 'dashboard_quickdraft_drafts_list', $drafts );
</ins><span class="cx"> ?>
</span><del>- <ul>
- <li><?php echo join( "</li>\n<li>", $list ); ?></li>
- </ul>
- <p class="textright"><a href="edit.php?post_status=draft" ><?php _e('View all'); ?></a></p>
-<?php
- } else {
- _e('There are no drafts at the moment');
- }
</del><ins>+ <div class="drafts">
+ <?php if ( 3 < count($drafts) ) { ?>
+ <p class="view-all"><a href="edit.php?post_status=draft" ><?php _e( 'View all' ); ?></a></p>
+ <?php } ?>
+ <h4><?php _e('Drafts'); ?></h4>
+ <ul id="draft-list">
+ <li><?php echo join( "</li>\n<li>", $list ); ?></li>
+ </ul>
+ </div>
+<?php }
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-/**
- * Display recent comments dashboard widget content.
- *
- * @since 2.5.0
- */
-function wp_dashboard_recent_comments() {
- global $wpdb;
-
- // Select all comment types and filter out spam later for better query performance.
- $comments = array();
- $start = 0;
-
- $widgets = get_option( 'dashboard_widget_options' );
- $total_items = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] )
- ? absint( $widgets['dashboard_recent_comments']['items'] ) : 5;
-
- $comments_query = array( 'number' => $total_items * 5, 'offset' => 0 );
- if ( ! current_user_can( 'edit_posts' ) )
- $comments_query['status'] = 'approve';
-
- while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) {
- foreach ( $possible as $comment ) {
- if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) )
- continue;
- $comments[] = $comment;
- if ( count( $comments ) == $total_items )
- break 2;
- }
- $comments_query['offset'] += $comments_query['number'];
- $comments_query['number'] = $total_items * 10;
- }
-
- if ( $comments ) {
- echo '<div id="the-comment-list" data-wp-lists="list:comment">';
- foreach ( $comments as $comment )
- _wp_dashboard_recent_comments_row( $comment );
- echo '</div>';
-
- if ( current_user_can('edit_posts') )
- _get_list_table('WP_Comments_List_Table')->views();
-
- wp_comment_reply( -1, false, 'dashboard', false );
- wp_comment_trashnotice();
- } else {
- echo '<p>' . __( 'No comments yet.' ) . '</p>';
- }
-}
-
</del><span class="cx"> function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) {
</span><span class="cx"> $GLOBALS['comment'] =& $comment;
</span><span class="cx">
</span><span class="lines">@@ -748,261 +490,190 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span><del>- * The recent comments dashboard widget control.
</del><ins>+ * callback function for `Activity` widget
</ins><span class="cx"> *
</span><del>- * @since 3.0.0
</del><ins>+ *
+ *
+ * @since 3.8.0
+ *
</ins><span class="cx"> */
</span><del>-function wp_dashboard_recent_comments_control() {
- if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
- $widget_options = array();
</del><ins>+function wp_dashboard_activity() {
</ins><span class="cx">
</span><del>- if ( !isset($widget_options['dashboard_recent_comments']) )
- $widget_options['dashboard_recent_comments'] = array();
</del><ins>+ echo '<div id="activity-widget">';
</ins><span class="cx">
</span><del>- if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-recent-comments']) ) {
- $number = absint( $_POST['widget-recent-comments']['items'] );
- $widget_options['dashboard_recent_comments']['items'] = $number;
- update_option( 'dashboard_widget_options', $widget_options );
</del><ins>+ do_action( 'dashboard_activity_beginning' );
+
+ $future_posts = dashboard_show_published_posts( array(
+ 'display' => 2,
+ 'max' => 5,
+ 'status' => 'future',
+ 'order' => 'ASC',
+ 'title' => __( 'Publishing Soon' ),
+ 'id' => 'future-posts',
+ ) );
+ $recent_posts = dashboard_show_published_posts( array(
+ 'display' => 2,
+ 'max' => 5,
+ 'status' => 'publish',
+ 'order' => 'DESC',
+ 'title' => __( 'Recently Published' ),
+ 'id' => 'published-posts',
+ ) );
+
+ do_action( 'dashboard_activity_middle' );
+
+ $recent_comments = dashboard_comments();
+
+ if ( !$future_posts && !$recent_posts && !$recent_comments ) {
+ echo '<div class="no-activity">';
+ echo '<p class="smiley"></p>';
+ echo '<p>' . __( 'No activity yet!' ) . '</p>';
+ echo '</div>';
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- $number = isset( $widget_options['dashboard_recent_comments']['items'] ) ? (int) $widget_options['dashboard_recent_comments']['items'] : '';
</del><ins>+ do_action( 'dashboard_activity_end' );
</ins><span class="cx">
</span><del>- echo '<p><label for="comments-number">' . __('Number of comments to show:') . '</label>';
- echo '<input id="comments-number" name="widget-recent-comments[items]" type="text" value="' . $number . '" size="3" /></p>';
</del><ins>+ echo '</div>';
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function wp_dashboard_incoming_links() {
- wp_dashboard_cached_rss_widget( 'dashboard_incoming_links', 'wp_dashboard_incoming_links_output' );
-}
-
</del><span class="cx"> /**
</span><del>- * Display incoming links dashboard widget content.
</del><ins>+ * Generates `Publishing Soon` and `Recently Published` sections
</ins><span class="cx"> *
</span><del>- * @since 2.5.0
</del><ins>+ *
+ *
+ * @since 3.8.0
+ *
</ins><span class="cx"> */
</span><del>-function wp_dashboard_incoming_links_output() {
- $widgets = get_option( 'dashboard_widget_options' );
- @extract( @$widgets['dashboard_incoming_links'], EXTR_SKIP );
- $rss = fetch_feed( $url );
</del><ins>+function dashboard_show_published_posts( $args ) {
</ins><span class="cx">
</span><del>- if ( is_wp_error($rss) ) {
- if ( is_admin() || current_user_can('manage_options') ) {
- echo '<p>';
- printf(__('<strong>RSS Error</strong>: %s'), $rss->get_error_message());
- echo '</p>';
- }
- return;
- }
</del><ins>+ $query_args = array(
+ 'post_type' => 'post',
+ 'post_status' => $args['status'],
+ 'orderby' => 'date',
+ 'order' => $args['order'],
+ 'posts_per_page' => intval( $args['max'] ),
+ 'no_found_rows' => true,
+ 'cache_results' => false
+ );
+ $query_args = apply_filters( 'dash_show_published_posts_query_args', $query_args );
+ $posts = new WP_Query( $query_args );
</ins><span class="cx">
</span><del>- if ( !$rss->get_item_quantity() ) {
- echo '<p>' . __('This dashboard widget queries <a href="http://blogsearch.google.com/">Google Blog Search</a> so that when another blog links to your site it will show up here. It has found no incoming links… yet. It’s okay — there is no rush.') . "</p>\n";
- $rss->__destruct();
- unset($rss);
- return;
- }
</del><ins>+ if ( $posts->have_posts() ) {
</ins><span class="cx">
</span><del>- echo "<ul>\n";
</del><ins>+ echo '<div id="' . $args['id'] . '" class="activity-block">';
</ins><span class="cx">
</span><del>- if ( !isset($items) )
- $items = 10;
</del><ins>+ if ( $posts->post_count > $args['display'] ) {
+ echo '<small class="show-more"><a href="#">' . sprintf( __( 'See %s more…'), $posts->post_count - intval( $args['display'] ) ) . '</a></small>';
+ }
</ins><span class="cx">
</span><del>- foreach ( $rss->get_items(0, $items) as $item ) {
- $publisher = '';
- $site_link = '';
- $link = '';
- $content = '';
- $date = '';
- $link = esc_url( strip_tags( $item->get_link() ) );
</del><ins>+ echo '<h4>' . $args['title'] . '</h4>';
</ins><span class="cx">
</span><del>- $author = $item->get_author();
- if ( $author ) {
- $site_link = esc_url( strip_tags( $author->get_link() ) );
</del><ins>+ echo '<ul>';
</ins><span class="cx">
</span><del>- if ( !$publisher = esc_html( strip_tags( $author->get_name() ) ) )
- $publisher = __( 'Somebody' );
- } else {
- $publisher = __( 'Somebody' );
</del><ins>+ $i = 0;
+ while ( $posts->have_posts() ) {
+ $posts->the_post();
+ printf(
+ '<li%s><span>%s, %s</span> <a href="%s">%s</a></li>',
+ ( $i >= intval ( $args['display'] ) ? ' class="hidden"' : '' ),
+ dashboard_relative_date( get_the_time( 'U' ) ),
+ get_the_time(),
+ get_edit_post_link(),
+ get_the_title()
+ );
+ $i++;
</ins><span class="cx"> }
</span><del>- if ( $site_link )
- $publisher = "<a href='$site_link'>$publisher</a>";
- else
- $publisher = "<strong>$publisher</strong>";
</del><span class="cx">
</span><del>- $content = $item->get_content();
- $content = wp_html_excerpt( $content, 50, ' …' );
</del><ins>+ echo '</ul>';
+ echo '</div>';
</ins><span class="cx">
</span><del>- if ( $link )
- /* translators: incoming links feed, %1$s is other person, %3$s is content */
- $text = __( '%1$s linked here <a href="%2$s">saying</a>, "%3$s"' );
- else
- /* translators: incoming links feed, %1$s is other person, %3$s is content */
- $text = __( '%1$s linked here saying, "%3$s"' );
-
- if ( !empty( $show_date ) ) {
- if ( $link )
- /* translators: incoming links feed, %1$s is other person, %3$s is content, %4$s is the date */
- $text = __( '%1$s linked here <a href="%2$s">saying</a>, "%3$s" on %4$s' );
- else
- /* translators: incoming links feed, %1$s is other person, %3$s is content, %4$s is the date */
- $text = __( '%1$s linked here saying, "%3$s" on %4$s' );
- $date = esc_html( strip_tags( $item->get_date() ) );
- $date = strtotime( $date );
- $date = gmdate( get_option( 'date_format' ), $date );
- }
-
- echo "\t<li>" . sprintf( $text, $publisher, $link, $content, $date ) . "</li>\n";
</del><ins>+ } else {
+ return false;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- echo "</ul>\n";
- $rss->__destruct();
- unset($rss);
-}
</del><ins>+ wp_reset_postdata();
</ins><span class="cx">
</span><del>-function wp_dashboard_incoming_links_control() {
- wp_dashboard_rss_control( 'dashboard_incoming_links', array( 'title' => false, 'show_summary' => false, 'show_author' => false ) );
</del><ins>+ return true;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-function wp_dashboard_primary() {
- wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_rss_output' );
-}
-
-function wp_dashboard_primary_control() {
- wp_dashboard_rss_control( 'dashboard_primary' );
-}
-
</del><span class="cx"> /**
</span><del>- * Display primary dashboard RSS widget feed.
</del><ins>+ * Show `Comments` section
</ins><span class="cx"> *
</span><del>- * @since 2.5.0
</del><span class="cx"> *
</span><del>- * @param string $widget_id
- */
-function wp_dashboard_rss_output( $widget_id ) {
- $widgets = get_option( 'dashboard_widget_options' );
- echo '<div class="rss-widget">';
- wp_widget_rss_output( $widgets[$widget_id] );
- echo "</div>";
-}
-
-function wp_dashboard_secondary() {
- wp_dashboard_cached_rss_widget( 'dashboard_secondary', 'wp_dashboard_secondary_output' );
-}
-
-function wp_dashboard_secondary_control() {
- wp_dashboard_rss_control( 'dashboard_secondary' );
-}
-
-/**
- * Display secondary dashboard RSS widget feed.
</del><span class="cx"> *
</span><del>- * @since 2.5.0
</del><ins>+ * @since 3.8.0
</ins><span class="cx"> *
</span><del>- * @return unknown
</del><span class="cx"> */
</span><del>-function wp_dashboard_secondary_output() {
- $widgets = get_option( 'dashboard_widget_options' );
- @extract( @$widgets['dashboard_secondary'], EXTR_SKIP );
- $rss = @fetch_feed( $url );
</del><ins>+function dashboard_comments( $total_items = 5 ) {
+ global $wpdb;
</ins><span class="cx">
</span><del>- if ( is_wp_error($rss) ) {
- if ( is_admin() || current_user_can('manage_options') ) {
- echo '<div class="rss-widget"><p>';
- printf(__('<strong>RSS Error</strong>: %s'), $rss->get_error_message());
- echo '</p></div>';
- }
- } elseif ( !$rss->get_item_quantity() ) {
- $rss->__destruct();
- unset($rss);
- return false;
- } else {
- echo '<div class="rss-widget">';
- wp_widget_rss_output( $rss, $widgets['dashboard_secondary'] );
- echo '</div>';
- $rss->__destruct();
- unset($rss);
- }
-}
</del><ins>+ // Select all comment types and filter out spam later for better query performance.
+ $comments = array();
+ $start = 0;
</ins><span class="cx">
</span><del>-function wp_dashboard_plugins() {
- wp_dashboard_cached_rss_widget( 'dashboard_plugins', 'wp_dashboard_plugins_output', array(
- 'http://wordpress.org/plugins/rss/browse/popular/',
- 'http://wordpress.org/plugins/rss/browse/new/'
- ) );
-}
</del><ins>+ $comments_query = array(
+ 'number' => $total_items * 5,
+ 'offset' => 0
+ );
+ if ( ! current_user_can( 'edit_posts' ) )
+ $comments_query['status'] = 'approve';
</ins><span class="cx">
</span><del>-/**
- * Display plugins most popular, newest plugins, and recently updated widget text.
- *
- * @since 2.5.0
- */
-function wp_dashboard_plugins_output() {
- $popular = fetch_feed( 'http://wordpress.org/plugins/rss/browse/popular/' );
- $new = fetch_feed( 'http://wordpress.org/plugins/rss/browse/new/' );
-
- if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) {
- $plugin_slugs = array_keys( get_plugins() );
- set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS );
</del><ins>+ while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) {
+ foreach ( $possible as $comment ) {
+ if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) )
+ continue;
+ $comments[] = $comment;
+ if ( count( $comments ) == $total_items )
+ break 2;
+ }
+ $comments_query['offset'] += $comments_query['number'];
+ $comments_query['number'] = $total_items * 10;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins') ) as $feed => $label ) {
- if ( is_wp_error($$feed) || !$$feed->get_item_quantity() )
- continue;
</del><span class="cx">
</span><del>- $items = $$feed->get_items(0, 5);
</del><span class="cx">
</span><del>- // Pick a random, non-installed plugin
- while ( true ) {
- // Abort this foreach loop iteration if there's no plugins left of this type
- if ( 0 == count($items) )
- continue 2;
</del><ins>+ if ( $comments ) {
+ echo '<div id="latest-comments" class="activity-block">';
+ echo '<h4>' . __( 'Comments' ) . '</h4>';
</ins><span class="cx">
</span><del>- $item_key = array_rand($items);
- $item = $items[$item_key];
</del><ins>+ echo '<div id="the-comment-list" data-wp-lists="list:comment">';
+ foreach ( $comments as $comment )
+ _wp_dashboard_recent_comments_row( $comment );
+ echo '</div>';
</ins><span class="cx">
</span><del>- list($link, $frag) = explode( '#', $item->get_link() );
</del><ins>+ if ( current_user_can('edit_posts') )
+ _get_list_table('WP_Comments_List_Table')->views();
</ins><span class="cx">
</span><del>- $link = esc_url($link);
- if ( preg_match( '|/([^/]+?)/?$|', $link, $matches ) )
- $slug = $matches[1];
- else {
- unset( $items[$item_key] );
- continue;
- }
</del><ins>+ wp_comment_reply( -1, false, 'dashboard', false );
+ wp_comment_trashnotice();
</ins><span class="cx">
</span><del>- // Is this random plugin's slug already installed? If so, try again.
- reset( $plugin_slugs );
- foreach ( $plugin_slugs as $plugin_slug ) {
- if ( $slug == substr( $plugin_slug, 0, strlen( $slug ) ) ) {
- unset( $items[$item_key] );
- continue 2;
- }
- }
</del><ins>+ echo '</div>';
+ } else {
+ return false;
+ }
+ return true;
+}
</ins><span class="cx">
</span><del>- // If we get to this point, then the random plugin isn't installed and we can stop the while().
- break;
- }
</del><ins>+/**
+ * return relative date for given timestamp
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function dashboard_relative_date( $time ) {
</ins><span class="cx">
</span><del>- // Eliminate some common badly formed plugin descriptions
- while ( ( null !== $item_key = array_rand($items) ) && false !== strpos( $items[$item_key]->get_description(), 'Plugin Name:' ) )
- unset($items[$item_key]);
</del><ins>+ $diff = floor( ( $time - time() ) / DAY_IN_SECONDS );
</ins><span class="cx">
</span><del>- if ( !isset($items[$item_key]) )
- continue;
</del><ins>+ if ( $diff == 0 )
+ return __( 'Today' );
</ins><span class="cx">
</span><del>- $title = esc_html( $item->get_title() );
</del><ins>+ if ( $diff == 1 )
+ return __( 'Tomorrow' );
</ins><span class="cx">
</span><del>- $description = esc_html( strip_tags(@html_entity_decode($item->get_description(), ENT_QUOTES, get_option('blog_charset'))) );
</del><ins>+ return date( 'M jS', $time);
</ins><span class="cx">
</span><del>- $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) .
- '&TB_iframe=true&width=600&height=800';
-
- echo "<h4>$label</h4>\n";
- echo "<h5><a href='$link'>$title</a></h5> <span>(<a href='$ilink' class='thickbox' title='$title'>" . __( 'Install' ) . "</a>)</span>\n";
- echo "<p>$description</p>\n";
-
- $$feed->__destruct();
- unset($$feed);
- }
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span><span class="lines">@@ -1074,47 +745,187 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span><del>- * The RSS dashboard widget control.
</del><ins>+ * Returns default WordPress News feeds
</ins><span class="cx"> *
</span><del>- * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data
- * from RSS-type widgets.
</del><span class="cx"> *
</span><del>- * @since 2.5.0
</del><span class="cx"> *
</span><del>- * @param string $widget_id
- * @param array $form_inputs
</del><ins>+ * @since 3.8.0
+ *
</ins><span class="cx"> */
</span><del>-function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) {
- if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
</del><ins>+function wp_dashboard_default_feeds() {
+ return array(
+ 'news' => array(
+ 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ),
+ 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ),
+ 'title' => '',
+ 'items' => 1,
+ 'show_summary' => 1,
+ 'show_author' => 0,
+ 'show_date' => 1,
+ ),
+ 'planet' => array(
+ 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ),
+ 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ),
+ 'title' => '',
+ 'items' => 3,
+ 'show_summary' => 0,
+ 'show_author' => 0,
+ 'show_date' => 0,
+ ),
+ 'plugins' => array(
+ 'link' => '',
+ 'url' => array(
+ 'popular' => 'http://wordpress.org/plugins/rss/browse/popular/'
+ ),
+ 'title' => '',
+ 'items' => 1,
+ 'show_summary' => 0,
+ 'show_author' => 0,
+ 'show_date' => 0,
+ )
+ );
+}
+
+/**
+ * Check for cached feeds
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function wp_dashboard_rss() {
+ $default_feeds = wp_dashboard_default_feeds();
+
+ $widget_options = get_option( 'dashboard_widget_options' );
+
+ if ( !$widget_options || !is_array($widget_options) )
</ins><span class="cx"> $widget_options = array();
</span><span class="cx">
</span><del>- if ( !isset($widget_options[$widget_id]) )
- $widget_options[$widget_id] = array();
</del><ins>+ //if ( ! isset( $widget_options['dashboard_rss'] ) ) {
+ $widget_options['dashboard_rss'] = $default_feeds;
+ update_option( 'dashboard_widget_options', $widget_options );
+ //}
</ins><span class="cx">
</span><del>- $number = 1; // Hack to use wp_widget_rss_form()
- $widget_options[$widget_id]['number'] = $number;
</del><ins>+ foreach( $default_feeds as $key => $value ) {
+ $default_urls[] = $value['url'];
+ }
</ins><span class="cx">
</span><del>- if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) {
- $_POST['widget-rss'][$number] = wp_unslash( $_POST['widget-rss'][$number] );
- $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] );
- $widget_options[$widget_id]['number'] = $number;
- // title is optional. If black, fill it if possible
- if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) {
- $rss = fetch_feed($widget_options[$widget_id]['url']);
- if ( is_wp_error($rss) ) {
- $widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed'));
- } else {
- $widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title()));
- $rss->__destruct();
- unset($rss);
</del><ins>+ $cache_key = 'dash_' . md5( 'dashboard_rss' );
+ delete_transient( $cache_key );
+
+ do_action( 'dashboard_news_beginning' );
+
+ wp_dashboard_cached_rss_widget( 'dashboard_rss', 'wp_dashboard_news_output', $default_urls );
+
+ do_action( 'dashboard_news_end' );
+}
+
+/**
+ * Display news feeds
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function wp_dashboard_news_output() {
+ $widgets = get_option( 'dashboard_widget_options' );
+
+ foreach( $widgets['dashboard_rss'] as $type => $args ) {
+ $args['type'] = $type;
+ echo '<div class="rss-widget">';
+ wp_widget_news_output( $args['url'], $args );
+ echo "</div>";
+ }
+}
+
+/**
+ * Generate code for each news feed
+ *
+ *
+ *
+ * @since 3.8.0
+ *
+ */
+function wp_widget_news_output( $rss, $args = array() ) {
+
+ // Regular RSS feeds
+ if ( isset( $args['type'] ) && 'plugins' != $args['type'] )
+ return wp_widget_rss_output( $rss, $args );
+
+ // Plugin feeds plus link to install them
+ if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) {
+ $popular = fetch_feed( $args['url']['popular'] );
+
+ if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) {
+ $plugin_slugs = array_keys( get_plugins() );
+ set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS );
+ }
+
+ echo '<ul>';
+
+ foreach ( array(
+ 'popular' => __( 'Popular Plugin' )
+ ) as $feed => $label ) {
+ if ( is_wp_error($$feed) || !$$feed->get_item_quantity() )
+ continue;
+
+ $items = $$feed->get_items(0, 5);
+
+ // Pick a random, non-installed plugin
+ while ( true ) {
+ // Abort this foreach loop iteration if there's no plugins left of this type
+ if ( 0 == count($items) )
+ continue 2;
+
+ $item_key = array_rand($items);
+ $item = $items[$item_key];
+
+ list($link, $frag) = explode( '#', $item->get_link() );
+
+ $link = esc_url($link);
+ if ( preg_match( '|/([^/]+?)/?$|', $link, $matches ) )
+ $slug = $matches[1];
+ else {
+ unset( $items[$item_key] );
+ continue;
+ }
+
+ // Is this random plugin's slug already installed? If so, try again.
+ reset( $plugin_slugs );
+ foreach ( $plugin_slugs as $plugin_slug ) {
+ if ( $slug == substr( $plugin_slug, 0, strlen( $slug ) ) ) {
+ unset( $items[$item_key] );
+ continue 2;
+ }
+ }
+
+ // If we get to this point, then the random plugin isn't installed and we can stop the while().
+ break;
</ins><span class="cx"> }
</span><ins>+
+ // Eliminate some common badly formed plugin descriptions
+ while ( ( null !== $item_key = array_rand($items) ) && false !== strpos( $items[$item_key]->get_description(), 'Plugin Name:' ) )
+ unset($items[$item_key]);
+
+ if ( !isset($items[$item_key]) )
+ continue;
+
+ $title = esc_html( $item->get_title() );
+
+ $description = esc_html( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) ) ) );
+
+ $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) . '&TB_iframe=true&width=600&height=800';
+
+ echo "<li class='dashboard-news-plugin'><span>$label:</span> <a href='$link' class='dashboard-news-plugin-link'>$title</a></h5> <span>(<a href='$ilink' class='thickbox' title='$title'>" . __( 'Install' ) . "</a>)</span></li>";
+
+ $$feed->__destruct();
+ unset( $$feed );
</ins><span class="cx"> }
</span><del>- update_option( 'dashboard_widget_options', $widget_options );
- $cache_key = 'dash_' . md5( $widget_id );
- delete_transient( $cache_key );
</del><ins>+
+ echo '</ul>';
</ins><span class="cx"> }
</span><del>-
- wp_widget_rss_form( $widget_options[$widget_id], $form_inputs );
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span><span class="lines">@@ -1127,7 +938,7 @@
</span><span class="cx"> * @return bool True if not multisite, user can't upload files, or the space check option is disabled.
</span><span class="cx"> */
</span><span class="cx"> function wp_dashboard_quota() {
</span><del>- if ( !is_multisite() || !current_user_can('upload_files') || get_site_option( 'upload_space_check_disabled' ) )
</del><ins>+ if ( !is_multisite() || !current_user_can( 'upload_files' ) || get_site_option( 'upload_space_check_disabled' ) )
</ins><span class="cx"> return true;
</span><span class="cx">
</span><span class="cx"> $quota = get_space_allowed();
</span><span class="lines">@@ -1137,29 +948,34 @@
</span><span class="cx"> $percentused = '100';
</span><span class="cx"> else
</span><span class="cx"> $percentused = ( $used / $quota ) * 100;
</span><del>- $used_color = ( $percentused >= 70 ) ? ' spam' : '';
</del><ins>+ $used_class = ( $percentused >= 70 ) ? ' warning' : '';
</ins><span class="cx"> $used = round( $used, 2 );
</span><span class="cx"> $percentused = number_format( $percentused );
</span><span class="cx">
</span><span class="cx"> ?>
</span><del>- <p class="sub musub"><?php _e( 'Storage Space' ); ?></p>
- <div class="table table_content musubtable">
- <table>
- <tr class="first">
- <td class="first b b-posts"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB</a>' ), esc_url( admin_url( 'upload.php' ) ), number_format_i18n( $quota ) ); ?></td>
- <td class="t posts"><?php _e( 'Space Allowed' ); ?></td>
- </tr>
- </table>
</del><ins>+ <h4 class="mu-storage"><?php _e( 'Storage Space' ); ?></h4>
+ <div class="mu-storage">
+ <ul>
+ <li class="storage-count">
+ <?php printf(
+ '<a href="%1$s" title="%3$s">%2$sMB %4$s</a>',
+ esc_url( admin_url( 'upload.php' ) ),
+ number_format_i18n( $quota ),
+ __( 'Manage Uploads' ),
+ __( 'Space Allowed' )
+ ); ?>
+ </li><li class="storage-count <?php echo $used_class; ?>">
+ <?php printf(
+ '<a href="%1$s" title="%4$s" class="musublink">%2$sMB (%3$s%%) %5$s</a>',
+ esc_url( admin_url( 'upload.php' ) ),
+ number_format_i18n( $used, 2 ),
+ $percentused,
+ __( 'Manage Uploads' ),
+ __( 'Space Used' )
+ ); ?>
+ </li>
+ </ul>
</ins><span class="cx"> </div>
</span><del>- <div class="table table_discussion musubtable">
- <table>
- <tr class="first">
- <td class="b b-comments"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB (%3$s%%)</a>' ), esc_url( admin_url( 'upload.php' ) ), number_format_i18n( $used, 2 ), $percentused ); ?></td>
- <td class="last t comments<?php echo $used_color;?>"><?php _e( 'Space Used' );?></td>
- </tr>
- </table>
- </div>
- <br class="clear" />
</del><span class="cx"> <?php
</span><span class="cx"> }
</span><span class="cx"> add_action( 'activity_box_end', 'wp_dashboard_quota' );
</span></span></pre></div>
<a id="trunksrcwpadminincludesdeprecatedphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/includes/deprecated.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/includes/deprecated.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/includes/deprecated.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -730,7 +730,7 @@
</span><span class="cx"> */
</span><span class="cx"> function wp_dashboard_quick_press_output() {
</span><span class="cx"> _deprecated_function( __FUNCTION__, '3.2', 'wp_dashboard_quick_press()' );
</span><del>- wp_dashboard_quick_press();
</del><ins>+ wp_dashboard_quick_draft();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span></span></pre></div>
<a id="trunksrcwpadminindexphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/index.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/index.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/index.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -29,11 +29,6 @@
</span><span class="cx"> $title = __('Dashboard');
</span><span class="cx"> $parent_file = 'index.php';
</span><span class="cx">
</span><del>-if ( is_user_admin() )
- add_screen_option('layout_columns', array('max' => 4, 'default' => 1) );
-else
- add_screen_option('layout_columns', array('max' => 4, 'default' => 2) );
-
</del><span class="cx"> $help = '<p>' . __( 'Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab in the upper corner.' ) . '</p>';
</span><span class="cx">
</span><span class="cx"> // Not using chaining here, so as to be parseable by PHP4.
</span><span class="lines">@@ -47,47 +42,42 @@
</span><span class="cx">
</span><span class="cx"> // Help tabs
</span><span class="cx">
</span><del>-$help = '<p>' . __('The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.') . '</p>';
-$help .= '<p>' . __('Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.') . '</p>';
</del><ins>+$help = '<p>' . __( 'The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.' ) . '</p>';
+$help .= '<p>' . __( 'Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.' ) . '</p>';
</ins><span class="cx">
</span><span class="cx"> $screen->add_help_tab( array(
</span><span class="cx"> 'id' => 'help-navigation',
</span><del>- 'title' => __('Navigation'),
</del><ins>+ 'title' => __( 'Navigation' ),
</ins><span class="cx"> 'content' => $help,
</span><span class="cx"> ) );
</span><span class="cx">
</span><del>-$help = '<p>' . __('You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.') . '</p>';
-$help .= '<p>' . __('<strong>Screen Options</strong> - Use the Screen Options tab to choose which Dashboard boxes to show, and how many columns to display.') . '</p>';
-$help .= '<p>' . __('<strong>Drag and Drop</strong> - To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.') . '</p>';
-$help .= '<p>' . __('<strong>Box Controls</strong> - Click the title bar of the box to expand or collapse it. In addition, some boxes have configurable content, and will show a “Configure” link in the title bar if you hover over it.') . '</p>';
</del><ins>+$help = '<p>' . __( 'You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.' ) . '</p>';
+$help .= '<p>' . __( '<strong>Screen Options</strong> - Use the Screen Options tab to choose which Dashboard boxes to show.' ) . '</p>';
+$help .= '<p>' . __( '<strong>Drag and Drop</strong> - To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.' ) . '</p>';
+$help .= '<p>' . __( '<strong>Box Controls</strong> - Click the title bar of the box to expand or collapse it. In addition, some boxes have configurable content, and will show a “Configure” link in the title bar if you hover over it.' ) . '</p>';
</ins><span class="cx">
</span><span class="cx"> $screen->add_help_tab( array(
</span><span class="cx"> 'id' => 'help-layout',
</span><del>- 'title' => __('Layout'),
</del><ins>+ 'title' => __( 'Layout' ),
</ins><span class="cx"> 'content' => $help,
</span><span class="cx"> ) );
</span><span class="cx">
</span><del>-$help = '<p>' . __('The boxes on your Dashboard screen are:') . '</p>';
</del><ins>+$help = '<p>' . __( 'The boxes on your Dashboard screen are:' ) . '</p>';
</ins><span class="cx"> if ( current_user_can( 'edit_posts' ) )
</span><del>- $help .= '<p>' . __('<strong>Right Now</strong> - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.') . '</p>';
-if ( current_user_can( 'moderate_comments' ) )
- $help .= '<p>' . __('<strong>Recent Comments</strong> - Shows the most recent comments on your posts (configurable, up to 30) and allows you to moderate them.') . '</p>';
-if ( current_user_can( 'publish_posts' ) )
- $help .= '<p>' . __('<strong>Incoming Links</strong> - Shows links to your site found by Google Blog Search.') . '</p>';
-if ( current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
- $help .= '<p>' . __('<strong>QuickPress</strong> - Allows you to create a new post and either publish it or save it as a draft.') . '</p>';
- $help .= '<p>' . __('<strong>Recent Drafts</strong> - Displays links to the 5 most recent draft posts you’ve started.') . '</p>';
-}
-$help .= '<p>' . __('<strong>WordPress Blog</strong> - Latest news from the official WordPress project.') . '</p>';
-$help .= '<p>' . __('<strong>Other WordPress News</strong> - Shows the <a href="http://planet.wordpress.org" target="_blank">WordPress Planet</a> feed. You can configure it to show a different feed of your choosing.') . '</p>';
</del><ins>+ $help .= '<p>' . __( '<strong>Site Content</strong> - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.' ) . '</p>';
+$help .= '<p>' . __( '<strong>Activity</strong> - Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them.' ) . '</p>';
+if ( is_blog_admin() && current_user_can( 'edit_posts' ) )
+ $help .= '<p>' . __( "<strong>Quick Draft</strong> - Allows you to create a new post and save it as a draft. Also displays links to the 5 most recent draft posts you've started." ) . '</p>';
</ins><span class="cx"> if ( ! is_multisite() && current_user_can( 'install_plugins' ) )
</span><del>- $help .= '<p>' . __('<strong>Plugins</strong> - Features the most popular, newest, and recently updated plugins from the WordPress.org Plugin Directory.') . '</p>';
</del><ins>+ $help .= '<p>' . __( '<strong>WordPress News</strong> - Latest news from the official WordPress project, the <a href="http://planet.wordpress.org/">WordPress Planet</a>, and popular and recent plugins.' ) . '</p>';
+else
+ $help .= '<p>' . __( '<strong>WordPress News</strong> - Latest news from the official WordPress project, the <a href="http://planet.wordpress.org/">WordPress Planet</a>.' ) . '</p>';
</ins><span class="cx"> if ( current_user_can( 'edit_theme_options' ) )
</span><del>- $help .= '<p>' . __('<strong>Welcome</strong> - Shows links for some of the most common tasks when setting up a new site.') . '</p>';
</del><ins>+ $help .= '<p>' . __( '<strong>Welcome</strong> - Shows links for some of the most common tasks when setting up a new site.' ) . '</p>';
</ins><span class="cx">
</span><span class="cx"> $screen->add_help_tab( array(
</span><span class="cx"> 'id' => 'help-content',
</span><del>- 'title' => __('Content'),
</del><ins>+ 'title' => __( 'Content' ),
</ins><span class="cx"> 'content' => $help,
</span><span class="cx"> ) );
</span><span class="cx">
</span><span class="lines">@@ -99,16 +89,16 @@
</span><span class="cx"> '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
</span><span class="cx"> );
</span><span class="cx">
</span><del>-include (ABSPATH . 'wp-admin/admin-header.php');
</del><ins>+include ( ABSPATH . 'wp-admin/admin-header.php' );
</ins><span class="cx">
</span><del>-$today = current_time('mysql', 1);
</del><ins>+$today = current_time( 'mysql', 1 );
</ins><span class="cx"> ?>
</span><span class="cx">
</span><span class="cx"> <div class="wrap">
</span><del>-<?php screen_icon(); ?>
-<h2><?php echo esc_html( $title ); ?></h2>
</del><ins>+ <?php screen_icon(); ?>
+ <h2><?php echo esc_html( $title ); ?></h2>
</ins><span class="cx">
</span><del>-<?php if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) :
</del><ins>+ <?php if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) :
</ins><span class="cx"> $classes = 'welcome-panel';
</span><span class="cx">
</span><span class="cx"> $option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
</span><span class="lines">@@ -117,8 +107,8 @@
</span><span class="cx"> if ( $hide )
</span><span class="cx"> $classes .= ' hidden'; ?>
</span><span class="cx">
</span><del>- <div id="welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
- <?php wp_nonce_field( 'welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
</del><ins>+ <div id="welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
+ <?php wp_nonce_field( 'welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
</ins><span class="cx"> <a class="welcome-panel-close" href="<?php echo esc_url( admin_url( '?welcome=0' ) ); ?>"><?php _e( 'Dismiss' ); ?></a>
</span><span class="cx"> <?php
</span><span class="cx"> /**
</span><span class="lines">@@ -132,15 +122,12 @@
</span><span class="cx"> do_action( 'welcome_panel' );
</span><span class="cx"> ?>
</span><span class="cx"> </div>
</span><del>-<?php endif; ?>
</del><ins>+ <?php endif; ?>
</ins><span class="cx">
</span><del>-<div id="dashboard-widgets-wrap">
</del><ins>+ <div id="dashboard-widgets-wrap">
+ <?php wp_dashboard(); ?>
+ </div><!-- dashboard-widgets-wrap -->
</ins><span class="cx">
</span><del>-<?php wp_dashboard(); ?>
-
-<div class="clear"></div>
-</div><!-- dashboard-widgets-wrap -->
-
</del><span class="cx"> </div><!-- wrap -->
</span><span class="cx">
</span><del>-<?php require(ABSPATH . 'wp-admin/admin-footer.php'); ?>
</del><ins>+<?php require( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpadminjsdashboardjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/js/dashboard.js (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/js/dashboard.js 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/js/dashboard.js 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -29,10 +29,7 @@
</span><span class="cx">
</span><span class="cx"> // These widgets are sometimes populated via ajax
</span><span class="cx"> ajaxWidgets = [
</span><del>- 'dashboard_incoming_links',
- 'dashboard_primary',
- 'dashboard_secondary',
- 'dashboard_plugins'
</del><ins>+ 'dashboard_rss'
</ins><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> ajaxPopulateWidgets = function(el) {
</span><span class="lines">@@ -66,28 +63,32 @@
</span><span class="cx"> quickPressLoad = function() {
</span><span class="cx"> var act = $('#quickpost-action'), t;
</span><span class="cx"> t = $('#quick-press').submit( function() {
</span><del>- $('#dashboard_quick_press #publishing-action .spinner').show();
</del><ins>+ $('#dashboard_quick_draft #publishing-action .spinner').show();
</ins><span class="cx"> $('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop('disabled', true);
</span><span class="cx">
</span><del>- if ( 'post' == act.val() ) {
- act.val( 'post-quickpress-publish' );
</del><ins>+ $.post( t.attr( 'action' ), t.serializeArray(), function( data ) {
+ // Replace the form, and prepend the published post.
+ $('#dashboard_quick_draft .inside').html( data );
+ $('#quick-press').removeClass('initial-form');
+ quickPressLoad();
+ highlightLatestPost();
+ $('#title').focus();
+ });
+
+ function highlightLatestPost () {
+ var latestPost = $('#draft-list li').first();
+ latestPost.css('background', '#fffbe5');
+ setTimeout(function () {
+ latestPost.css('background', 'none');
+ }, 1000);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- $('#dashboard_quick_press div.inside').load( t.attr( 'action' ), t.serializeArray(), function() {
- $('#dashboard_quick_press #publishing-action .spinner').hide();
- $('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop('disabled', false);
- $('#dashboard_quick_press ul').next('p').remove();
- $('#dashboard_quick_press ul').find('li').each( function() {
- $('#dashboard_recent_drafts ul').prepend( this );
- } ).end().remove();
- quickPressLoad();
- } );
</del><span class="cx"> return false;
</span><span class="cx"> } );
</span><span class="cx">
</span><span class="cx"> $('#publish').click( function() { act.val( 'post-quickpress-publish' ); } );
</span><span class="cx">
</span><del>- $('#title, #tags-input').each( function() {
</del><ins>+ $('#title, #tags-input, #content').each( function() {
</ins><span class="cx"> var input = $(this), prompt = $('#' + this.id + '-prompt-text');
</span><span class="cx">
</span><span class="cx"> if ( '' === this.value )
</span><span class="lines">@@ -109,9 +110,39 @@
</span><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> $('#quick-press').on( 'click focusin', function() {
</span><ins>+ $(this).addClass("quickpress-open");
+ $("#description-wrap, p.submit").slideDown(200);
</ins><span class="cx"> wpActiveEditor = 'content';
</span><span class="cx"> });
</span><span class="cx"> };
</span><span class="cx"> quickPressLoad();
</span><span class="cx">
</span><ins>+ // Activity Widget
+ $( '.show-more a' ).on( 'click', function(e) {
+ $( this ).fadeOut().closest('.activity-block').find( 'li.hidden' ).fadeIn().removeClass( 'hidden' );
+ e.preventDefault();
+ })
+
+ // Dashboard columns
+ jQuery(document).ready(function ($) {
+ // Update main column count on load
+ updateColumnCount();
+ });
+
+ jQuery(window).resize( _.debounce( function(){
+ updateColumnCount();
+ }, 30) );
+
+ function updateColumnCount() {
+ var cols = 1,
+ windowWidth = parseInt(jQuery(window).width());
+ if (799 < windowWidth && 1299 > windowWidth)
+ cols = 2;
+ if (1300 < windowWidth && 1799 > windowWidth)
+ cols = 3;
+ if (1800 < windowWidth)
+ cols = 4;
+ jQuery('.metabox-holder').attr('class', jQuery('.metabox-holder').attr('class').replace(/columns-\d+/, 'columns-' + cols));
+ }
+
</ins><span class="cx"> } );
</span></span></pre></div>
<a id="trunksrcwpadminjsplugininstalljs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/js/plugin-install.js (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/js/plugin-install.js 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/js/plugin-install.js 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx">
</span><span class="cx"> $(window).resize(function(){ tb_position(); });
</span><span class="cx">
</span><del>- $('#dashboard_plugins, .plugins').on( 'click', 'a.thickbox', function() {
</del><ins>+ $('.plugins').on( 'click', 'a.thickbox', function() {
</ins><span class="cx"> tb_click.call(this);
</span><span class="cx">
</span><span class="cx"> $('#TB_title').css({'background-color':'#222','color':'#cfcfcf'});
</span></span></pre></div>
<a id="trunksrcwpadminpostphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-admin/post.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-admin/post.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-admin/post.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -66,8 +66,6 @@
</span><span class="cx"> $location = add_query_arg( 'message', 3, wp_get_referer() );
</span><span class="cx"> $location = explode('#', $location);
</span><span class="cx"> $location = $location[0] . '#postcustom';
</span><del>- } elseif ( 'post-quickpress-save-cont' == $_POST['action'] ) {
- $location = "post.php?action=edit&post=$post_id&message=7";
</del><span class="cx"> } else {
</span><span class="cx"> $location = add_query_arg( 'message', 4, get_edit_post_link( $post_id, 'url' ) );
</span><span class="cx"> }
</span><span class="lines">@@ -96,31 +94,41 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> switch($action) {
</span><ins>+case 'post-quickdraft-save':
+ // Check nonce and capabilities
+ $nonce = $_REQUEST['_wpnonce'];
+ $error_msg = false;
+ if ( ! wp_verify_nonce( $nonce, 'add-post' ) )
+ $error_msg = 'Unable to submit this form, please refresh and try again.';
+
+ if ( ! current_user_can( 'edit_posts' ) )
+ $error_msg = "Oops, you don't have access to add new drafts.";
+
+ if ( $error_msg )
+ return wp_dashboard_quick_draft( $error_msg );
+
+ $post = get_post( $_REQUEST['post_ID'] );
+ check_admin_referer( 'add-' . $post->post_type );
+ edit_post();
+ // output the quickdraft dashboard widget
+ require_once(ABSPATH . 'wp-admin/includes/dashboard.php');
+ wp_dashboard_quick_draft();
+ exit;
+ break;
+
</ins><span class="cx"> case 'postajaxpost':
</span><span class="cx"> case 'post':
</span><del>-case 'post-quickpress-publish':
-case 'post-quickpress-save':
- check_admin_referer('add-' . $post_type);
</del><ins>+ // Check nonce and capabilities
+ $nonce = $_REQUEST['_wpnonce'];
+ $error_msg = false;
+ if ( ! wp_verify_nonce( $nonce, 'add-post' ) )
+ $error_msg = 'Unable to submit this form, please refresh and try again.';
</ins><span class="cx">
</span><del>- if ( 'post-quickpress-publish' == $action )
- $_POST['publish'] = 'publish'; // tell write_post() to publish
</del><ins>+ if ( ! current_user_can( 'edit_posts' ) )
+ $error_msg = "Oops, you don't have access to add new drafts.";
</ins><span class="cx">
</span><del>- if ( 'post-quickpress-publish' == $action || 'post-quickpress-save' == $action ) {
- $_POST['comment_status'] = get_option('default_comment_status');
- $_POST['ping_status'] = get_option('default_ping_status');
- $post_id = edit_post();
- } else {
- $post_id = 'postajaxpost' == $action ? edit_post() : write_post();
- }
</del><ins>+ $post_id = 'postajaxpost' == $action ? edit_post() : write_post();
</ins><span class="cx">
</span><del>- if ( 0 === strpos( $action, 'post-quickpress' ) ) {
- $_POST['post_ID'] = $post_id;
- // output the quickpress dashboard widget
- require_once(ABSPATH . 'wp-admin/includes/dashboard.php');
- wp_dashboard_quick_press();
- exit;
- }
-
</del><span class="cx"> redirect_post($post_id);
</span><span class="cx"> exit();
</span><span class="cx"> break;
</span></span></pre></div>
<a id="trunksrcwpincludesdefaultwidgetsphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/default-widgets.php (26143 => 26144)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/default-widgets.php 2013-11-13 21:44:04 UTC (rev 26143)
+++ trunk/src/wp-includes/default-widgets.php 2013-11-13 22:08:47 UTC (rev 26144)
</span><span class="lines">@@ -904,7 +904,7 @@
</span><span class="cx"> if ( $link == '' ) {
</span><span class="cx"> echo "<li>$title{$date}{$summary}{$author}</li>";
</span><span class="cx"> } else {
</span><del>- echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}{$summary}{$author}</li>";
</del><ins>+ echo "<li><div class='rss-title-row'><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}</div>{$summary}{$author}</li>";
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> echo '</ul>';
</span></span></pre>
</div>
</div>
</body>
</html>