Duplicate Post - Version 3.0.2

Version Description

Small bugfixes: check the changelog for more info

Download this release

Release Info

Developer lopo
Plugin Icon 128x128 Duplicate Post
Version 3.0.2
Comparing to
See all releases

Code changes from version 3.0.1 to 3.0.2

donate.png ADDED
Binary file
duplicate-post-admin.php CHANGED
@@ -68,51 +68,62 @@ function duplicate_post_plugin_upgrade() {
68
  delete_option('duplicate_post_view_user_level');
69
  delete_option('dp_notice');
70
 
71
- /*
72
- * Convert old userlevel option to new capability scheme
73
- */
74
-
75
- // Get old duplicate_post_copy_user_level option
76
- $min_user_level = get_option('duplicate_post_copy_user_level');
77
-
78
- if (!empty($min_user_level)){
79
- // Get default roles
80
- $default_roles = array(
81
- 1 => 'contributor',
82
- 2 => 'author',
83
- 3 => 'editor',
84
- 8 => 'administrator',
85
- );
86
-
87
- // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
88
- foreach ($default_roles as $level => $name){
89
- $role = get_role($name);
90
- if ($role && $min_user_level <= $level)
91
- $role->add_cap( 'copy_posts' );
 
 
 
 
 
 
 
92
  }
93
-
94
- // delete old option
95
- delete_option('duplicate_post_copy_user_level');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
97
-
98
- add_option('duplicate_post_copytitle','1');
99
- add_option('duplicate_post_copydate','0');
100
- add_option('duplicate_post_copystatus','0');
101
- add_option('duplicate_post_copyslug','1');
102
- add_option('duplicate_post_copyexcerpt','1');
103
- add_option('duplicate_post_copycontent','1');
104
- add_option('duplicate_post_copypassword','0');
105
- add_option('duplicate_post_copyattachments','0');
106
- add_option('duplicate_post_copychildren','0');
107
- add_option('duplicate_post_copycomments','0');
108
- add_option('duplicate_post_taxonomies_blacklist',array());
109
- add_option('duplicate_post_blacklist','');
110
- add_option('duplicate_post_types_enabled',array('post', 'page'));
111
- add_option('duplicate_post_show_row','1');
112
- add_option('duplicate_post_show_adminbar','1');
113
- add_option('duplicate_post_show_submitbox','1');
114
-
115
- add_option('duplicate_post_show_notice','1');
116
  }
117
  // Update version number
118
  update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
@@ -124,48 +135,47 @@ if (get_option('duplicate_post_show_row') == 1){
124
  add_filter('page_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
125
  }
126
 
127
- /**
128
- * Shows the update notice
129
- */
130
- function duplicate_post_show_update_notice() {
131
- if(!current_user_can( 'manage_options')) return;
132
- $class = 'notice is-dismissible';
133
- $message = sprintf(__('<strong>Duplicate Post has been greatly redesigned in its options page.</strong> Please <a href="%s">review the settings</a> to make sure it works as you expect.', 'duplicate-post'), site_url('/wp-admin/options-general.php?page=duplicatepost'));
134
- $message .= '<br/>';
135
- $message .= '<a href="http://lopo.it/duplicate-post-plugin">'.__('Donate', 'duplicate-post').' (10¢) </a> | <a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.').'</a>';
136
- echo '<div id="duplicate-post-notice" class="'.$class.'"><p>'.$message.'</p></div>';
137
- echo "<script>
138
- function duplicate_post_dismiss_notice(){
139
- var data = {
140
- 'action': 'duplicate_post_dismiss_notice',
141
- };
142
-
143
- jQuery.post(ajaxurl, data, function(response) {
144
- jQuery('#duplicate-post-notice').hide();
145
- });
146
- }
147
 
148
- jQuery(document).ready(function(){
149
- jQuery('.notice-dismiss').click(function(){
150
- duplicate_post_dismiss_notice();
151
- });
152
- });
153
- </script>";
154
- }
155
  if (get_option('duplicate_post_show_notice') == 1){
156
- add_action( 'admin_notices', 'duplicate_post_show_update_notice' );
157
- }
158
-
159
- add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
160
-
161
- function duplicate_post_dismiss_notice() {
162
- $result = update_option('duplicate_post_show_notice', 0);
163
- return $result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
 
165
- wp_die();
 
 
 
 
 
 
 
166
  }
167
 
168
-
169
  /**
170
  * Add the link to action list for post_row_actions
171
  */
68
  delete_option('duplicate_post_view_user_level');
69
  delete_option('dp_notice');
70
 
71
+ $installed_version_numbers = explode('.', $installed_version);
72
+
73
+ if($installed_version_numbers[0] == 2){ // upgrading from 2.*
74
+ /*
75
+ * Convert old userlevel option to new capability scheme
76
+ */
77
+
78
+ // Get old duplicate_post_copy_user_level option
79
+ $min_user_level = get_option('duplicate_post_copy_user_level');
80
+
81
+ if (!empty($min_user_level)){
82
+ // Get default roles
83
+ $default_roles = array(
84
+ 1 => 'contributor',
85
+ 2 => 'author',
86
+ 3 => 'editor',
87
+ 8 => 'administrator',
88
+ );
89
+
90
+ // Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
91
+ foreach ($default_roles as $level => $name){
92
+ $role = get_role($name);
93
+ if ($role && $min_user_level <= $level)
94
+ $role->add_cap( 'copy_posts' );
95
+ }
96
+
97
+ // delete old option
98
+ delete_option('duplicate_post_copy_user_level');
99
  }
100
+
101
+ add_option('duplicate_post_copytitle','1');
102
+ add_option('duplicate_post_copydate','0');
103
+ add_option('duplicate_post_copystatus','0');
104
+ add_option('duplicate_post_copyslug','1');
105
+ add_option('duplicate_post_copyexcerpt','1');
106
+ add_option('duplicate_post_copycontent','1');
107
+ add_option('duplicate_post_copypassword','0');
108
+ add_option('duplicate_post_copyattachments','0');
109
+ add_option('duplicate_post_copychildren','0');
110
+ add_option('duplicate_post_copycomments','0');
111
+ add_option('duplicate_post_taxonomies_blacklist',array());
112
+ add_option('duplicate_post_blacklist','');
113
+ add_option('duplicate_post_types_enabled',array('post', 'page'));
114
+ add_option('duplicate_post_show_row','1');
115
+ add_option('duplicate_post_show_adminbar','1');
116
+ add_option('duplicate_post_show_submitbox','1');
117
+
118
+ // show notice about new features
119
+ add_option('duplicate_post_show_notice','1');
120
+
121
+ } else if($installed_version_numbers[0] == 3){ // upgrading from 3.*
122
+ // hide notice, we assume people already know of new features
123
+ update_option('duplicate_post_show_notice', 0);
124
  }
125
+
126
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  }
128
  // Update version number
129
  update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
135
  add_filter('page_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
136
  }
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
 
 
 
 
 
 
 
139
  if (get_option('duplicate_post_show_notice') == 1){
140
+ /**
141
+ * Shows the update notice
142
+ */
143
+ function duplicate_post_show_update_notice() {
144
+ if(!current_user_can( 'manage_options')) return;
145
+ $class = 'notice is-dismissible';
146
+ $message = sprintf(__('<strong>Duplicate Post has been greatly redesigned in its options page.</strong> Please <a href="%s">review the settings</a> to make sure it works as you expect.', 'duplicate-post'), admin_url('options-general.php?page=duplicatepost'));
147
+ $message .= '<br/>';
148
+ $message .= '<a href="http://lopo.it/duplicate-post-plugin">'.__('Donate', 'duplicate-post').' (10¢) </a> | <a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.').'</a>';
149
+ echo '<div id="duplicate-post-notice" class="'.$class.'"><p>'.$message.'</p></div>';
150
+ echo "<script>
151
+ function duplicate_post_dismiss_notice(){
152
+ var data = {
153
+ 'action': 'duplicate_post_dismiss_notice',
154
+ };
155
+
156
+ jQuery.post(ajaxurl, data, function(response) {
157
+ jQuery('#duplicate-post-notice').hide();
158
+ });
159
+ }
160
+
161
+ jQuery(document).ready(function(){
162
+ jQuery('.notice-dismiss').click(function(){
163
+ duplicate_post_dismiss_notice();
164
+ });
165
+ });
166
+ </script>";
167
+ }
168
 
169
+ add_action( 'admin_notices', 'duplicate_post_show_update_notice' );
170
+ add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
171
+
172
+ function duplicate_post_dismiss_notice() {
173
+ $result = update_option('duplicate_post_show_notice', 0);
174
+ return $result;
175
+ wp_die();
176
+ }
177
  }
178
 
 
179
  /**
180
  * Add the link to action list for post_row_actions
181
  */
duplicate-post-common.php CHANGED
@@ -114,17 +114,22 @@ function duplicate_post_admin_bar_render() {
114
  'id' => 'new_draft',
115
  'title' => __("Copy to a new draft", 'duplicate-post'),
116
  'href' => duplicate_post_get_clone_post_link( $current_object->ID )
117
- ) );
118
  }
119
  }
120
 
121
  function duplicate_post_add_css() {
122
- wp_enqueue_style ( 'duplicate-post', plugins_url('/duplicate-post.css', __FILE__));
 
 
 
 
 
123
  }
124
 
125
- if (get_option('duplicate_post_show_adminbar') == 1){
126
- add_action( 'wp_before_admin_bar_render', 'duplicate_post_admin_bar_render' );
127
- add_action( 'wp_enqueue_scripts', 'duplicate_post_add_css');
128
  }
129
 
130
  /**
114
  'id' => 'new_draft',
115
  'title' => __("Copy to a new draft", 'duplicate-post'),
116
  'href' => duplicate_post_get_clone_post_link( $current_object->ID )
117
+ ) );
118
  }
119
  }
120
 
121
  function duplicate_post_add_css() {
122
+ $current_object = get_queried_object ();
123
+ if (!empty ( $current_object )){
124
+ if (is_admin_bar_showing () && duplicate_post_is_current_user_allowed_to_copy () && (duplicate_post_is_post_type_enabled ( $current_object->post_type ))) {
125
+ wp_enqueue_style ( 'duplicate-post', plugins_url('/duplicate-post.css', __FILE__));
126
+ }
127
+ }
128
  }
129
 
130
+ if (get_option ( 'duplicate_post_show_adminbar' ) == 1) {
131
+ add_action ( 'wp_before_admin_bar_render', 'duplicate_post_admin_bar_render' );
132
+ add_action ( 'wp_enqueue_scripts', 'duplicate_post_add_css' );
133
  }
134
 
135
  /**
duplicate-post-options.php CHANGED
@@ -74,25 +74,11 @@ function duplicate_post_options() {
74
 
75
  <div
76
  style="margin: 9px 15px 4px 0; padding: 5px; text-align: center; font-weight: bold; float: left;">
77
- <a href="http://lopo.it/duplicate-post-plugin"><?php _e('Visit plugin site'); ?>
78
- </a> - <a
79
- href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post"><?php _e('Translate', 'duplicate-post'); ?>
80
- </a> - <a href="https://wordpress.org/plugins/duplicate-post/faq/"><?php _e('FAQ', 'duplicate-post'); ?>
81
- </a> - <a href="http://lopo.it/duplicate-post-plugin"><?php _e('Donate', 'duplicate-post'); ?>
82
- (10¢) </a>
83
- <form style="display: inline-block; vertical-align: middle;"
84
- action="https://www.paypal.com/cgi-bin/webscr" method="post"
85
- target="_top">
86
- <input type="hidden" name="cmd" value="_s-xclick"> <input
87
- type="hidden" name="encrypted"
88
- value="-----BEGIN PKCS7-----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-----END PKCS7-----
89
- "><input type="image"
90
- src="https://www.paypalobjects.com/en_GB/i/btn/btn_donate_SM.gif"
91
- border="0" name="submit"
92
- alt="PayPal – The safer, easier way to pay online."> <img alt=""
93
- border="0" src="https://www.paypalobjects.com/it_IT/i/scr/pixel.gif"
94
- width="1" height="1">
95
- </form>
96
 
97
 
98
  </div>
@@ -172,6 +158,9 @@ label.taxonomy_private {
172
  a.toggle_link {
173
  font-size: small;
174
  }
 
 
 
175
  </style>
176
 
177
 
@@ -313,7 +302,7 @@ a.toggle_link {
313
  <tr valign="top">
314
  <th scope="row"><?php _e("Enable for these post types", 'duplicate-post'); ?>
315
  </th>
316
- <td><?php $post_types = get_post_types(array('public' => true),'objects');
317
  foreach ($post_types as $post_type_object ) :
318
  if ($post_type_object->name == 'attachment') continue; ?> <label> <input
319
  type="checkbox" name="duplicate_post_types_enabled[]"
74
 
75
  <div
76
  style="margin: 9px 15px 4px 0; padding: 5px; text-align: center; font-weight: bold; float: left;">
77
+ <a href="http://lopo.it/duplicate-post-plugin"><?php _e('Visit plugin site'); ?></a>
78
+ - <a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post"><?php _e('Translate', 'duplicate-post'); ?></a>
79
+ - <a href="https://wordpress.org/plugins/duplicate-post/faq/"><?php _e('FAQ', 'duplicate-post'); ?></a>
80
+ - <a href="http://lopo.it/duplicate-post-plugin"><?php _e('Donate', 'duplicate-post'); ?> (10¢)</a>
81
+ <a href="http://lopo.it/duplicate-post-plugin"><img id="donate-button" src="<?php echo plugins_url( 'donate.png', __FILE__ ); ?>" alt="Donate"/></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
 
84
  </div>
158
  a.toggle_link {
159
  font-size: small;
160
  }
161
+ img#donate-button{
162
+ vertical-align: middle;
163
+ }
164
  </style>
165
 
166
 
302
  <tr valign="top">
303
  <th scope="row"><?php _e("Enable for these post types", 'duplicate-post'); ?>
304
  </th>
305
+ <td><?php $post_types = get_post_types(array('show_ui' => true),'objects');
306
  foreach ($post_types as $post_type_object ) :
307
  if ($post_type_object->name == 'attachment') continue; ?> <label> <input
308
  type="checkbox" name="duplicate_post_types_enabled[]"
duplicate-post.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Duplicate Post
4
  Plugin URI: http://lopo.it/duplicate-post-plugin/
5
  Description: Clone posts and pages.
6
- Version: 3.0.1
7
  Author: Enrico Battocchi
8
  Author URI: http://lopo.it
9
  Text Domain: duplicate-post
@@ -31,7 +31,7 @@ if ( ! defined( 'ABSPATH' ) ) {
31
  }
32
 
33
  // Version of the plugin
34
- define('DUPLICATE_POST_CURRENT_VERSION', '3.0.1' );
35
 
36
 
37
  /**
3
  Plugin Name: Duplicate Post
4
  Plugin URI: http://lopo.it/duplicate-post-plugin/
5
  Description: Clone posts and pages.
6
+ Version: 3.0.2
7
  Author: Enrico Battocchi
8
  Author URI: http://lopo.it
9
  Text Domain: duplicate-post
31
  }
32
 
33
  // Version of the plugin
34
+ define('DUPLICATE_POST_CURRENT_VERSION', '3.0.2' );
35
 
36
 
37
  /**
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://lopo.it/duplicate-post-plugin/
4
  Tags: duplicate post, copy, clone
5
  Requires at least: 3.4
6
  Tested up to: 4.6
7
- Stable tag: 3.0.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -69,7 +69,7 @@ If not, maybe there is some kind of conflict with other plugins: feel free [to w
69
 
70
  = The plugin is not translated in my language! =
71
 
72
- From version 3.0 the plugin's translations are managed by the WordPress.org platform and the plugin si shipped without language files, so first of all update translations under Dashboard->Updates.
73
 
74
  If Duplicate Post is still in English, or if there are some untraslated strings, you can help traslating to your language [here](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.
75
  [Contact me](http://lopo.it/contatti/) if you wish to become an editor for your language.
@@ -90,6 +90,9 @@ There is an open ticket in WordPress Trac, as other plugin developers too are in
90
 
91
  == Upgrade Notice ==
92
 
 
 
 
93
  = 3.0.1 =
94
  Recommended if you have 3.0: fixes the upgrade bug
95
 
@@ -134,6 +137,12 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
134
 
135
  == Changelog ==
136
 
 
 
 
 
 
 
137
  = 3.0.1 =
138
  * Fixes the issues for people upgrading from an older version
139
 
@@ -262,7 +271,7 @@ The parameters are:
262
  * *id*
263
  (integer) (optional) Post ID. Default: Current post ID
264
 
265
- Another available template tag is `duplicate_post_get_original($id, $output)` which returns the original post, either as a post object, an associative array or a numeric array (depending on the $output parameter), jus as [get_post()](http://codex.wordpress.org/Function_Reference/get_post) does.
266
  `duplicate_post_get_original()` relies on the `_dp_original` custom field.
267
 
268
 
@@ -285,7 +294,7 @@ Please refer to the [Plugin API](http://codex.wordpress.org/Plugin_API) for ever
285
 
286
  == Contribute ==
287
 
288
- If you find this useful and you if you want to contribute, there are three ways:
289
 
290
  1. You can [write me](http://lopo.it/contatti/) and submit your bug reports, suggestions and requests for features;
291
  2. If you want to translate it to your language (there are just a few lines of text), you can use the [translation project](https://translate.wordpress.org/projects/wp-plugins/duplicate-post);
4
  Tags: duplicate post, copy, clone
5
  Requires at least: 3.4
6
  Tested up to: 4.6
7
+ Stable tag: 3.0.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
69
 
70
  = The plugin is not translated in my language! =
71
 
72
+ From version 3.0 the plugin's translations are managed by the WordPress.org platform and the plugin is shipped without language files, so first of all update translations under Dashboard->Updates.
73
 
74
  If Duplicate Post is still in English, or if there are some untraslated strings, you can help traslating to your language [here](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.
75
  [Contact me](http://lopo.it/contatti/) if you wish to become an editor for your language.
90
 
91
  == Upgrade Notice ==
92
 
93
+ = 3.0.2 =
94
+ Small bugfixes: check the changelog for more info
95
+
96
  = 3.0.1 =
97
  Recommended if you have 3.0: fixes the upgrade bug
98
 
137
 
138
  == Changelog ==
139
 
140
+ = 3.0.2 =
141
+ * Can now be enabled for every custom post type with visible UI (not just public ones)
142
+ * Admin bar CSS only enqueued when needed
143
+ * New "Donate" button
144
+ * Fixes for minor bugs and typos
145
+
146
  = 3.0.1 =
147
  * Fixes the issues for people upgrading from an older version
148
 
271
  * *id*
272
  (integer) (optional) Post ID. Default: Current post ID
273
 
274
+ Another available template tag is `duplicate_post_get_original($id, $output)` which returns the original post, either as a post object, an associative array or a numeric array (depending on the $output parameter), just as [get_post()](http://codex.wordpress.org/Function_Reference/get_post) does.
275
  `duplicate_post_get_original()` relies on the `_dp_original` custom field.
276
 
277
 
294
 
295
  == Contribute ==
296
 
297
+ If you find this useful and if you want to contribute, there are three ways:
298
 
299
  1. You can [write me](http://lopo.it/contatti/) and submit your bug reports, suggestions and requests for features;
300
  2. If you want to translate it to your language (there are just a few lines of text), you can use the [translation project](https://translate.wordpress.org/projects/wp-plugins/duplicate-post);