<!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" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { 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 #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#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>
<title>[12121] trunk/wp-admin: Undo for posts, pages and media, props caesarsgrunt
 , see #4529</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/12121">12121</a></dd>
<dt>Author</dt> <dd>azaozz</dd>
<dt>Date</dt> <dd>2009-10-28 02:46:08 +0000 (Wed, 28 Oct 2009)</dd>
</dl>

<h3>Log Message</h3>
<pre>Undo for posts, pages and media, props caesarsgrunt, see <a href="http://trac.wordpress.org/ticket/4529">#4529</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadmineditpagesphp">trunk/wp-admin/edit-pages.php</a></li>
<li><a href="#trunkwpadmineditphp">trunk/wp-admin/edit.php</a></li>
<li><a href="#trunkwpadminpagephp">trunk/wp-admin/page.php</a></li>
<li><a href="#trunkwpadminpostphp">trunk/wp-admin/post.php</a></li>
<li><a href="#trunkwpadminuploadphp">trunk/wp-admin/upload.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadmineditpagesphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit-pages.php (12120 => 12121)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit-pages.php        2009-10-27 18:13:42 UTC (rev 12120)
+++ trunk/wp-admin/edit-pages.php        2009-10-28 02:46:08 UTC (rev 12121)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx"> // Handle bulk actions
</span><span class="cx"> if ( isset($_GET['doaction']) || isset($_GET['doaction2']) || isset($_GET['delete_all']) || isset($_GET['delete_all2']) || isset($_GET['bulk_edit']) ) {
</span><span class="cx">         check_admin_referer('bulk-pages');
</span><del>-        $sendback = wp_get_referer();
</del><ins>+        $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer() );
</ins><span class="cx"> 
</span><span class="cx">         if ( strpos($sendback, 'page.php') !== false )
</span><span class="cx">                 $sendback = admin_url('page-new.php');
</span><span class="lines">@@ -24,8 +24,8 @@
</span><span class="cx">                 $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_GET['post_status']);
</span><span class="cx">                 $post_ids = $wpdb-&gt;get_col( $wpdb-&gt;prepare( &quot;SELECT ID FROM $wpdb-&gt;posts WHERE post_type='page' AND post_status = %s&quot;, $post_status ) );
</span><span class="cx">                 $doaction = 'delete';
</span><del>-        } elseif ( ($_GET['action'] != -1 || $_GET['action2'] != -1) &amp;&amp; isset($_GET['post']) ) {
-                $post_ids = array_map( 'intval', (array) $_GET['post'] );
</del><ins>+        } elseif ( ( $_GET['action'] != -1 || $_GET['action2'] != -1 ) &amp;&amp; ( isset($_GET['post']) || isset($_GET['ids']) ) ) {
+                $post_ids = isset($_GET['post']) ? array_map( 'intval', (array) $_GET['post'] ) : explode(',', $_GET['ids']);
</ins><span class="cx">                 $doaction = ($_GET['action'] != -1) ? $_GET['action'] : $_GET['action2'];
</span><span class="cx">         } else {
</span><span class="cx">                 wp_redirect( admin_url('edit-pages.php') );
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx">                                 $trashed++;
</span><span class="cx">                         }
</span><del>-                        $sendback = add_query_arg('trashed', $trashed, $sendback);
</del><ins>+                        $sendback = add_query_arg( array('trashed' =&gt; $trashed, 'ids' =&gt; join(',', $post_ids)), $sendback );
</ins><span class="cx">                         break;
</span><span class="cx">                 case 'untrash':
</span><span class="cx">                         $untrashed = 0;
</span><span class="lines">@@ -163,7 +163,8 @@
</span><span class="cx"> }
</span><span class="cx"> if ( isset($_GET['trashed']) &amp;&amp; (int) $_GET['trashed'] ) {
</span><span class="cx">         printf( _n( 'Page moved to the trash.', '%s pages moved to the trash.', $_GET['trashed'] ), number_format_i18n( $_GET['trashed'] ) );
</span><del>-        echo ' &lt;a href=&quot;' . admin_url('edit-pages.php?post_status=trash') . '&quot;&gt;' . __('View trash') . '&lt;/a&gt; ';
</del><ins>+        $ids = isset($_GET['ids']) ? $_GET['ids'] : 0;
+        echo ' &lt;a href=&quot;' . esc_url( wp_nonce_url( &quot;edit-pages.php?doaction=undo&amp;action=untrash&amp;ids=$ids&quot;, &quot;bulk-pages&quot; ) ) . '&quot;&gt;' . __('Undo?') . '&lt;/a&gt;&lt;br /&gt;';
</ins><span class="cx">         unset($_GET['trashed']);
</span><span class="cx"> }
</span><span class="cx"> if ( isset($_GET['untrashed']) &amp;&amp; (int) $_GET['untrashed'] ) {
</span></span></pre></div>
<a id="trunkwpadmineditphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit.php (12120 => 12121)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit.php        2009-10-27 18:13:42 UTC (rev 12120)
+++ trunk/wp-admin/edit.php        2009-10-28 02:46:08 UTC (rev 12121)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx"> // Handle bulk actions
</span><span class="cx"> if ( isset($_GET['doaction']) || isset($_GET['doaction2']) || isset($_GET['delete_all']) || isset($_GET['delete_all2']) || isset($_GET['bulk_edit']) ) {
</span><span class="cx">         check_admin_referer('bulk-posts');
</span><del>-        $sendback = wp_get_referer();
</del><ins>+        $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer() );
</ins><span class="cx"> 
</span><span class="cx">         if ( strpos($sendback, 'post.php') !== false )
</span><span class="cx">                 $sendback = admin_url('post-new.php');
</span><span class="lines">@@ -32,8 +32,8 @@
</span><span class="cx">                 $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_GET['post_status']);
</span><span class="cx">                 $post_ids = $wpdb-&gt;get_col( $wpdb-&gt;prepare( &quot;SELECT ID FROM $wpdb-&gt;posts WHERE post_type='post' AND post_status = %s&quot;, $post_status ) );
</span><span class="cx">                 $doaction = 'delete';
</span><del>-        } elseif ( ($_GET['action'] != -1 || $_GET['action2'] != -1) &amp;&amp; isset($_GET['post']) ) {
-                $post_ids = array_map( 'intval', (array) $_GET['post'] );
</del><ins>+        } elseif ( ( $_GET['action'] != -1 || $_GET['action2'] != -1 ) &amp;&amp; ( isset($_GET['post']) || isset($_GET['ids']) ) ) {
+                $post_ids = isset($_GET['post']) ? array_map( 'intval', (array) $_GET['post'] ) : explode(',', $_GET['ids']);
</ins><span class="cx">                 $doaction = ($_GET['action'] != -1) ? $_GET['action'] : $_GET['action2'];
</span><span class="cx">         } else {
</span><span class="cx">                 wp_redirect( admin_url('edit.php') );
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> 
</span><span class="cx">                                 $trashed++;
</span><span class="cx">                         }
</span><del>-                        $sendback = add_query_arg('trashed', $trashed, $sendback);
</del><ins>+                        $sendback = add_query_arg( array('trashed' =&gt; $trashed, 'ids' =&gt; join(',', $post_ids)), $sendback );
</ins><span class="cx">                         break;
</span><span class="cx">                 case 'untrash':
</span><span class="cx">                         $untrashed = 0;
</span><span class="lines">@@ -167,7 +167,8 @@
</span><span class="cx"> 
</span><span class="cx"> if ( isset($_GET['trashed']) &amp;&amp; (int) $_GET['trashed'] ) {
</span><span class="cx">         printf( _n( 'Post moved to the trash.', '%s posts moved to the trash.', $_GET['trashed'] ), number_format_i18n( $_GET['trashed'] ) );
</span><del>-        echo ' &lt;a href=&quot;' . admin_url('edit.php?post_status=trash') . '&quot;&gt;' . __('View trash') . '&lt;/a&gt; ';
</del><ins>+        $ids = isset($_GET['ids']) ? $_GET['ids'] : 0;
+        echo ' &lt;a href=&quot;' . esc_url( wp_nonce_url( &quot;edit.php?doaction=undo&amp;action=untrash&amp;ids=$ids&quot;, &quot;bulk-posts&quot; ) ) . '&quot;&gt;' . __('Undo?') . '&lt;/a&gt;&lt;br /&gt;';
</ins><span class="cx">         unset($_GET['trashed']);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadminpagephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/page.php (12120 => 12121)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/page.php        2009-10-27 18:13:42 UTC (rev 12120)
+++ trunk/wp-admin/page.php        2009-10-28 02:46:08 UTC (rev 12121)
</span><span class="lines">@@ -156,11 +156,11 @@
</span><span class="cx">         if ( !wp_trash_post($post_id) )
</span><span class="cx">                 wp_die( __('Error in moving to trash...') );
</span><span class="cx"> 
</span><del>-        $sendback = wp_get_referer();
</del><ins>+        $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer() );
</ins><span class="cx">         if ( strpos($sendback, 'page.php') !== false || strpos($sendback, 'page-new.php') !== false )
</span><del>-                $sendback = admin_url('edit-pages.php?trashed=1');
</del><ins>+                $sendback = admin_url('edit-pages.php?trashed=1&amp;ids='.$post_id);
</ins><span class="cx">         else
</span><del>-                $sendback = add_query_arg('trashed', 1, $sendback);
</del><ins>+                $sendback = add_query_arg( array('trashed' =&gt; 1, ids =&gt; $post_id), $sendback );
</ins><span class="cx"> 
</span><span class="cx">         wp_redirect($sendback);
</span><span class="cx">         exit();
</span></span></pre></div>
<a id="trunkwpadminpostphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/post.php (12120 => 12121)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/post.php        2009-10-27 18:13:42 UTC (rev 12120)
+++ trunk/wp-admin/post.php        2009-10-28 02:46:08 UTC (rev 12121)
</span><span class="lines">@@ -196,11 +196,11 @@
</span><span class="cx">         if ( ! wp_trash_post($post_id) )
</span><span class="cx">                 wp_die( __('Error in moving to trash...') );
</span><span class="cx"> 
</span><del>-        $sendback = wp_get_referer();
</del><ins>+        $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer() );
</ins><span class="cx">         if ( strpos($sendback, 'post.php') !== false || strpos($sendback, 'post-new.php') !== false )
</span><del>-                $sendback = admin_url('edit.php?trashed=1');
</del><ins>+                $sendback = admin_url('edit.php?trashed=1&amp;ids='.$post_id);
</ins><span class="cx">         else
</span><del>-                $sendback = add_query_arg('trashed', 1, $sendback);
</del><ins>+                $sendback = add_query_arg( array('trashed' =&gt; 1, ids =&gt; $post_id), $sendback );
</ins><span class="cx"> 
</span><span class="cx">         wp_redirect($sendback);
</span><span class="cx">         exit();
</span></span></pre></div>
<a id="trunkwpadminuploadphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/upload.php (12120 => 12121)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/upload.php        2009-10-27 18:13:42 UTC (rev 12120)
+++ trunk/wp-admin/upload.php        2009-10-28 02:46:08 UTC (rev 12121)
</span><span class="lines">@@ -73,8 +73,8 @@
</span><span class="cx">         if ( isset($_GET['delete_all']) || isset($_GET['delete_all2']) ) {
</span><span class="cx">                 $post_ids = $wpdb-&gt;get_col( &quot;SELECT ID FROM $wpdb-&gt;posts WHERE post_type='attachment' AND post_status = 'trash'&quot; );
</span><span class="cx">                 $doaction = 'delete';
</span><del>-        } elseif ( ($_GET['action'] != -1 || $_GET['action2'] != -1) &amp;&amp; isset($_GET['media']) ) {
-                $post_ids = $_GET['media'];
</del><ins>+        } elseif ( ( $_GET['action'] != -1 || $_GET['action2'] != -1 ) &amp;&amp; ( isset($_GET['media']) || isset($_GET['ids']) ) ) {
+                $post_ids = isset($_GET['media']) ? $_GET['media'] : explode(',', $_GET['ids']);
</ins><span class="cx">                 $doaction = ($_GET['action'] != -1) ? $_GET['action'] : $_GET['action2'];
</span><span class="cx">         } else
</span><span class="cx">                 wp_redirect($_SERVER['HTTP_REFERER']);
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx">         $location = 'upload.php';
</span><span class="cx">         if ( $referer = wp_get_referer() ) {
</span><span class="cx">                 if ( false !== strpos($referer, 'upload.php') )
</span><del>-                        $location = $referer;
</del><ins>+                        $location = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'message', 'ids'), $referer );
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         switch ( $doaction ) {
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">                                 if ( !wp_trash_post($post_id) )
</span><span class="cx">                                         wp_die( __('Error in moving to trash...') );
</span><span class="cx">                         }
</span><del>-                        $location = add_query_arg('message', 4, $location);
</del><ins>+                        $location = add_query_arg( array( 'message' =&gt; 4, 'ids' =&gt; join(',', $post_ids) ), $location );
</ins><span class="cx">                         break;
</span><span class="cx">                 case 'untrash':
</span><span class="cx">                         foreach( (array) $post_ids as $post_id ) {
</span><span class="lines">@@ -202,7 +202,7 @@
</span><span class="cx"> $messages[1] = __('Media attachment updated.');
</span><span class="cx"> $messages[2] = __('Media permanently deleted.');
</span><span class="cx"> $messages[3] = __('Error saving media attachment.');
</span><del>-$messages[4] = __('Media moved to the trash.') . ' &lt;a href=&quot;' . admin_url('upload.php?status=trash') . '&quot;&gt;' . __('View trash') . '&lt;/a&gt; ';
</del><ins>+$messages[4] = __('Media moved to the trash.') . ' &lt;a href=&quot;' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&amp;action=untrash&amp;ids='.$_GET['ids'], &quot;bulk-media&quot; ) ) . '&quot;&gt;' . __('Undo?') . '&lt;/a&gt;';
</ins><span class="cx"> $messages[5] = __('Media restored from the trash.');
</span><span class="cx"> 
</span><span class="cx"> if ( isset($_GET['message']) &amp;&amp; (int) $_GET['message'] ) {
</span></span></pre>
</div>
</div>

</body>
</html>