PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 7.8.3
Admin and Site Enhancements (ASE) v7.8.3
9.1.1 9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-content-duplication.php
admin-site-enhancements / classes Last commit date
class-activation.php 1 year ago class-admin-menu-organizer.php 1 year ago class-auto-publish-posts-with-missed-schedule.php 1 year ago class-avif-upload.php 1 year ago class-captcha-protection.php 1 year ago class-change-login-url.php 1 year ago class-cleanup-admin-bar.php 1 year ago class-common-methods.php 1 year ago class-content-duplication.php 1 year ago class-content-order.php 1 year ago class-custom-admin-footer-text.php 1 year ago class-custom-body-class.php 1 year ago class-custom-css.php 1 year ago class-custom-nav-menu-items-in-new-tab.php 1 year ago class-deactivation.php 1 year ago class-disable-comments.php 1 year ago class-disable-dashboard-widgets.php 1 year ago class-disable-feeds.php 1 year ago class-disable-gutenberg.php 1 year ago class-disable-rest-api.php 1 year ago class-disable-smaller-components.php 1 year ago class-disable-updates.php 1 year ago class-disable-xml-rpc.php 1 year ago class-display-system-summary.php 1 year ago class-email-address-obfuscator.php 1 year ago class-email-delivery.php 1 year ago class-enhance-list-tables.php 1 year ago class-external-permalinks.php 1 year ago class-heartbeat-control.php 1 year ago class-hide-admin-bar.php 1 year ago class-hide-admin-notices.php 1 year ago class-image-sizes-panel.php 1 year ago class-image-upload-control.php 1 year ago class-insert-head-body-footer-code.php 1 year ago class-last-login-column.php 1 year ago class-limit-login-attempts.php 1 year ago class-login-id-type.php 1 year ago class-login-logout-menu.php 1 year ago class-maintenance-mode.php 1 year ago class-manage-ads-appads-txt.php 1 year ago class-manage-robots-txt.php 1 year ago class-media-replacement.php 1 year ago class-multiple-user-roles.php 1 year ago class-obfuscate-author-slugs.php 1 year ago class-open-external-links-in-new-tab.php 1 year ago class-password-protection.php 1 year ago class-redirect-after-login.php 1 year ago class-redirect-after-logout.php 1 year ago class-redirect-fourofour.php 1 year ago class-registration-date-column.php 1 year ago class-revisions-control.php 1 year ago class-search-engines-visibility.php 1 year ago class-settings-fields-render.php 1 year ago class-settings-sanitization.php 1 year ago class-settings-sections-fields.php 1 year ago class-show-custom-taxonomy-filters.php 1 year ago class-site-identity-on-login-page.php 1 year ago class-svg-upload.php 1 year ago class-various-admin-ui-enhancements.php 1 year ago class-view-admin-as-role.php 1 year ago class-wider-admin-menu.php 1 year ago class-wp-config-transformer.php 1 year ago
class-content-duplication.php
221 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 use WP_Admin_Bar;
6 use WC_Admin_Duplicate_Product;
7 /**
8 * Class for Content Duplication module
9 *
10 * @since 6.9.5
11 */
12 class Content_Duplication {
13 /**
14 * Enable duplication of pages, posts and custom posts
15 *
16 * @since 1.0.0
17 */
18 public function duplicate_content() {
19 $allow_duplication = false;
20 if ( current_user_can( 'edit_posts' ) ) {
21 $allow_duplication = true;
22 }
23 $original_post_id = intval( sanitize_text_field( $_REQUEST['post'] ) );
24 $nonce = sanitize_text_field( $_REQUEST['nonce'] );
25 if ( wp_verify_nonce( $nonce, 'asenha-duplicate-' . $original_post_id ) && $allow_duplication ) {
26 $original_post = get_post( $original_post_id );
27 $post_type = $original_post->post_type;
28 $common_methods = new Common_Methods();
29 $is_woocommerce_active = $common_methods->is_woocommerce_active();
30 if ( 'product' != $post_type || 'product' == $post_type && !$is_woocommerce_active ) {
31 // Set some attributes for the duplicate post
32 $new_post_title_suffix = __( 'DUPLICATE', 'admin-site-enhancements' );
33 $new_post_status = 'draft';
34 $current_user = wp_get_current_user();
35 $new_post_author_id = $current_user->ID;
36 // Create the duplicate post and store the ID
37 $args = array(
38 'comment_status' => $original_post->comment_status,
39 'ping_status' => $original_post->ping_status,
40 'post_author' => $new_post_author_id,
41 'post_content' => str_replace( '\\', "\\\\", $original_post->post_content ),
42 'post_excerpt' => $original_post->post_excerpt,
43 'post_parent' => $original_post->post_parent,
44 'post_password' => $original_post->post_password,
45 'post_status' => $new_post_status,
46 'post_title' => $original_post->post_title . ' (' . $new_post_title_suffix . ')',
47 'post_type' => $original_post->post_type,
48 'to_ping' => $original_post->to_ping,
49 'menu_order' => $original_post->menu_order,
50 );
51 $new_post_id = wp_insert_post( $args );
52 // Copy over the taxonomies
53 $original_taxonomies = get_object_taxonomies( $original_post->post_type );
54 if ( !empty( $original_taxonomies ) && is_array( $original_taxonomies ) ) {
55 foreach ( $original_taxonomies as $taxonomy ) {
56 $original_post_terms = wp_get_object_terms( $original_post_id, $taxonomy, array(
57 'fields' => 'slugs',
58 ) );
59 wp_set_object_terms(
60 $new_post_id,
61 $original_post_terms,
62 $taxonomy,
63 false
64 );
65 }
66 }
67 $excluded_post_meta_keys = array();
68 // Copy over the post meta
69 $original_post_metas = get_post_meta( $original_post_id );
70 // all meta keys and the corresponding values
71 if ( !empty( $original_post_metas ) ) {
72 foreach ( $original_post_metas as $meta_key => $meta_values ) {
73 if ( !in_array( $meta_key, $excluded_post_meta_keys ) ) {
74 // Only copy over post meta that are not ASE custom fields. We will handle that later.
75 foreach ( $meta_values as $meta_value ) {
76 update_post_meta( $new_post_id, $meta_key, wp_slash( maybe_unserialize( $meta_value ) ) );
77 }
78 }
79 }
80 }
81 }
82 $options = get_option( ASENHA_SLUG_U, array() );
83 $duplication_redirect_destination = ( isset( $options['duplication_redirect_destination'] ) ? $options['duplication_redirect_destination'] : 'edit' );
84 switch ( $duplication_redirect_destination ) {
85 case 'edit':
86 // Redirect to edit screen of the duplicate post
87 wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
88 break;
89 case 'list':
90 // Redirect to list table of the corresponding post type of original post
91 if ( 'post' == $post_type ) {
92 wp_redirect( admin_url( 'edit.php' ) );
93 } else {
94 wp_redirect( admin_url( 'edit.php?post_type=' . $post_type ) );
95 }
96 break;
97 }
98 } else {
99 wp_die( 'You do not have permission to perform this action.' );
100 }
101 }
102
103 /**
104 * Add row action link to perform duplication in page/post list tables
105 *
106 * @since 1.0.0
107 */
108 public function add_duplication_action_link( $actions, $post ) {
109 $duplication_link_locations = $this->get_duplication_link_locations();
110 $allow_duplication = $this->is_user_allowed_to_duplicate_content();
111 $post_type = $post->post_type;
112 $post_type_is_duplicable = $this->is_post_type_duplicable( $post_type );
113 if ( $allow_duplication && $post_type_is_duplicable ) {
114 // Not WooCommerce product
115 if ( in_array( 'post-action', $duplication_link_locations ) ) {
116 $actions['asenha-duplicate'] = '<a href="admin.php?action=duplicate_content&amp;post=' . $post->ID . '&amp;nonce=' . wp_create_nonce( 'asenha-duplicate-' . $post->ID ) . '" title="' . __( 'Duplicate this as draft', 'admin-site-enhancements' ) . '">' . __( 'Duplicate', 'admin-site-enhancements' ) . '</a>';
117 }
118 }
119 return $actions;
120 }
121
122 /**
123 * Add admin bar duplicate link
124 *
125 * @since 6.3.0
126 */
127 public function add_admin_bar_duplication_link( WP_Admin_Bar $wp_admin_bar ) {
128 $duplication_link_locations = $this->get_duplication_link_locations();
129 $allow_duplication = $this->is_user_allowed_to_duplicate_content();
130 global $pagenow, $typenow, $post;
131 $inapplicable_post_types = array('attachment');
132 $post_type_is_duplicable = $this->is_post_type_duplicable( $typenow );
133 if ( $allow_duplication && $post_type_is_duplicable ) {
134 if ( 'post.php' == $pagenow && !in_array( $typenow, $inapplicable_post_types ) || is_singular() ) {
135 if ( in_array( 'admin-bar', $duplication_link_locations ) ) {
136 if ( is_object( $post ) ) {
137 $common_methods = new Common_Methods();
138 $post_type_singular_label = $common_methods->get_post_type_singular_label( $post );
139 if ( property_exists( $post, 'ID' ) ) {
140 $wp_admin_bar->add_menu( array(
141 'id' => 'duplicate-content',
142 'parent' => null,
143 'group' => null,
144 'title' => sprintf(
145 /* translators: %s is the singular label for the post type */
146 __( 'Duplicate %s', 'admin-site-enhancements' ),
147 $post_type_singular_label
148 ),
149 'href' => admin_url( 'admin.php?action=duplicate_content&amp;post=' . $post->ID . '&amp;nonce=' . wp_create_nonce( 'asenha-duplicate-' . $post->ID ) ),
150 ) );
151 }
152 }
153 }
154 }
155 }
156 }
157
158 /**
159 * Check at which locations duplication link should enabled
160 *
161 * @since 6.9.3
162 */
163 public function get_duplication_link_locations() {
164 $options = get_option( ASENHA_SLUG_U, array() );
165 $duplication_link_locations = array('post-action', 'admin-bar');
166 return $duplication_link_locations;
167 }
168
169 /**
170 * Check if a user role is allowed to duplicate content
171 *
172 * @since 6.9.3
173 */
174 public function is_user_allowed_to_duplicate_content() {
175 $allow_duplication = false;
176 if ( current_user_can( 'edit_posts' ) ) {
177 $allow_duplication = true;
178 }
179 return $allow_duplication;
180 }
181
182 /**
183 * Check if the post type can be duplicated
184 *
185 * @since 6.9.7
186 */
187 public function is_post_type_duplicable( $post_type ) {
188 global $asenha_public_post_types;
189 $common_methods = new Common_Methods();
190 $is_woocommerce_active = $common_methods->is_woocommerce_active();
191 $options = get_option( ASENHA_SLUG_U, array() );
192 $enable_duplication_on_post_types_type = 'only-on';
193 $asenha_public_post_types_slugs = array();
194 if ( is_array( $asenha_public_post_types ) ) {
195 foreach ( $asenha_public_post_types as $post_type_slug => $post_type_label ) {
196 // e.g. $post_type_slug is post,
197 $asenha_public_post_types_slugs[] = $post_type_slug;
198 }
199 }
200 $enable_duplication_on_post_types = ( isset( $options['enable_duplication_on_post_types'] ) ? $options['enable_duplication_on_post_types'] : array() );
201 $post_types_for_enable_duplication = array();
202 if ( !empty( $enable_duplication_on_post_types ) && count( $enable_duplication_on_post_types ) > 0 ) {
203 foreach ( $enable_duplication_on_post_types as $post_type_slug => $is_duplication_enabled ) {
204 if ( $is_duplication_enabled ) {
205 $post_types_for_enable_duplication[] = $post_type_slug;
206 }
207 }
208 } else {
209 $post_types_for_enable_duplication = $asenha_public_post_types_slugs;
210 }
211 if ( 'only-on' == $enable_duplication_on_post_types_type && in_array( $post_type, $post_types_for_enable_duplication ) || 'except-on' == $enable_duplication_on_post_types_type && !in_array( $post_type, $post_types_for_enable_duplication ) ) {
212 if ( 'product' != $post_type || 'product' == $post_type && !$is_woocommerce_active ) {
213 return true;
214 }
215 } else {
216 return false;
217 }
218 }
219
220 }
221