Files
wingedit.pl/wp-content/plugins/copy-delete-posts/copy-delete-posts.php
2026-03-11 15:57:27 +01:00

1161 lines
45 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Plugin Name: Copy & Delete Posts
* Description: The best solution to easily make duplicates of your posts & pages, and delete them in one go.
* Version: 1.5.2
* Text Domain: copy-delete-posts
* Author: Inisev
* Author URI: https://inisev.com
* Plugin URI: https://copy-delete-posts.com
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Exit if accessed directly.
if (!defined('ABSPATH'))
exit;
/** **\
* Opt-in.
* @since 1.1.2
*/
require_once 'analyst/main.php';
analyst_init(array(
'client-id' => 'ovgxe3xq075ladbp',
'client-secret' => 'b4de5ed2ba7be687e233d152ec1e8fd116052ab0',
'base-dir' => __FILE__
));
/** * */
/** **\
* Global variables and constants.
* @since 1.0.0
*/
// Plugin constants
define('CDP_VERSION', '1.5.2');
define('CDP_WP_VERSION', get_bloginfo('version'));
define('CDP_SCRIPT_DEBUG', false);
define('CDP_ROOT_DIR', __DIR__);
define('CDP_ROOT_FILE', __FILE__);
define('CDP_MODULES_DIR', CDP_ROOT_DIR . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR);
$cdp_plug_url = plugins_url('', __FILE__);
// Other only admin stuff
if (is_admin()) {
// Set constant variables for this file
$cdp_dir = dirname(__FILE__);
$cdp_globals = get_option('_cdp_globals');
$cdp_premium = 'copy-delete-posts-premium/copy-delete-posts-premium.php';
// Try to show error while debugging
if (CDP_SCRIPT_DEBUG === true) {
error_reporting(E_ALL);
ini_set('display_errors', 1);
}
}
/** * */
/** **\
* Fired on plugin activation.
* @since 1.0.0
*/
register_activation_hook(__FILE__, function () {
add_option('_cdp_redirect', true);
if (get_option('_cdp_review', false) == false) {
$review = array(
'installed' => time(),
'users' => array()
);
update_option('_cdp_review', $review);
}
do_action('cdp_plugin_setup');
});
/** * */
/** **\
* Fired on plugin deactivation.
* @since 1.0.0
*/
register_deactivation_hook(__FILE__, function () {
if (function_exists('deactivate_plugins')) {
$plugin = 'copy-delete-posts-premium/copy-delete-posts-premium.php';
if (is_plugin_active($plugin))
add_action('update_option_active_plugins', function () {
$plugin = 'copy-delete-posts-premium/copy-delete-posts-premium.php';
deactivate_plugins($plugin);
});
}
});
/** * */
/** **\
* Fired on plugin load and check permissions.
* @since 1.0.0
*/
add_action('plugins_loaded', function () {
do_action('cdp_loaded');
});
/** * */
/** **\
* Fired on any plugin upgrade (in case if it's ours)
* @since 1.0.6
*/
add_action('upgrader_process_complete', function () {
if (get_option('_cdp_review', false) == false) {
$review = array(
'installed' => time(),
'users' => array()
);
update_option('_cdp_review', $review);
}
});
/** * */
/** **\
* Include all menus.
* @since 1.0.0
*/
add_action('cdp_loaded', function () {
if (get_option('_cdp_globals', false) === false) {
do_action('cdp_plugin_setup');
}
// Include footer banner
include_once trailingslashit(__DIR__) . '/banner/misc.php';
// Others
if (cdp_check_permissions(wp_get_current_user()) == false) return;
require_once plugin_dir_path(__FILE__) . 'menu/configuration.php';
require_once plugin_dir_path(__FILE__) . 'menu/tooltips.php';
require_once plugin_dir_path(__FILE__) . 'menu/variables.php';
require_once plugin_dir_path(__FILE__) . 'menu/modal.php';
require_once plugin_dir_path(__FILE__) . 'menu/notifications.php';
require_once plugin_dir_path(__FILE__) . 'post/handler.php';
// Review banner
if (!is_dir(WP_PLUGIN_DIR . '/copy-delete-posts-premium')) {
if (!(class_exists('Inisev\Subs\Inisev_Review') || class_exists('Inisev_Review'))) require_once CDP_ROOT_DIR . '/modules/review/review.php';
$review_banner = new \Inisev\Subs\Inisev_Review(CDP_ROOT_FILE, CDP_ROOT_DIR, 'copy-delete-posts', 'Copy & Delete Posts', 'https://bit.ly/2VeAf2E', 'copy-delete-posts');
}
if (!(class_exists('\Inisev\Subs\New_BB_Banner') || class_exists('Inisev\Subs\New_BB_Banner') || class_exists('New_BB_Banner'))) {
require_once __DIR__ . '/modules/new-bb-banner/misc.php';
new \Inisev\Subs\New_BB_Banner(CDP_ROOT_FILE, CDP_ROOT_DIR, 'copy-delete-posts', 'Copy & Delete Posts', 'copy-delete-posts');
}
});
/** **/
/** **\
* Admin Init
* @since 1.0.0
*/
add_action('admin_init', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
if (get_option('_cdp_redirect', false)) {
delete_option('_cdp_redirect', false);
wp_redirect(admin_url('admin.php?page=copy-delete-posts'));
}
global $cdp_premium;
$cdp_premium_ver_path = WP_PLUGIN_DIR . '/copy-delete-posts-premium/version.txt';
if (defined('CDP_PREMIUM_VERSION') && version_compare(CDP_PREMIUM_VERSION, CDP_VERSION, '!=')) {
update_option('_cdp_mishmash', true);
} else{
delete_option('_cdp_mishmash');
}
if (is_plugin_active($cdp_premium) && !file_exists($cdp_premium_ver_path)) {
if (is_plugin_active($cdp_premium))
deactivate_plugins($cdp_premium, true);
}
});
/** * */
/** **\
* Setup assets.
* @since 1.0.0
*/
add_action('admin_enqueue_scripts', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
if (function_exists('wp_doing_ajax') && wp_doing_ajax())
return;
global $cdp_plug_url;
global $pagenow, $post;
$screen = get_current_screen();
$min = defined('CDP_SCRIPT_DEBUG') && CDP_SCRIPT_DEBUG ? '' : '.min';
$allowed = ['post', 'edit-post', 'toplevel_page_copy-delete-posts', 'edit-page', 'page'];
$at = ($screen->id != 'attachment');
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
if (is_object($post))
$type = $post->post_type;
else
$type = false;
if (isset($g['cdp-menu-in-settings']) && $g['cdp-menu-in-settings'] == 'true') {
?>
<style media="screen">
#toplevel_page_copy-delete-posts { display: none; visibility: hidden; }
</style>
<?php
}
$ver = preg_replace('#[^\pL\pN/-]+#', '', CDP_VERSION);
wp_enqueue_style('cdp-css-global', "{$cdp_plug_url}/assets/css/cdp-global{$min}.css", '', $ver);
wp_enqueue_script('cdp-js-global', "{$cdp_plug_url}/assets/js/cdp-global{$min}.js", ['jquery'], $ver, true);
cdp_load_localize_global_js();
wp_enqueue_style('cdp-css-select', "{$cdp_plug_url}/assets/css/cdp-select{$min}.css", '', $ver);
wp_enqueue_script('cdp-js-select', "{$cdp_plug_url}/assets/js/cdp-select{$min}.js", '', $ver, true);
wp_enqueue_style('cdp-tooltips-css', "{$cdp_plug_url}/assets/css/cdp.tooltip{$min}.css", '', $ver);
wp_enqueue_script('cdp-tooltips', "{$cdp_plug_url}/assets/js/cdp.tooltip{$min}.js", '', $ver, true);
if (method_exists($screen, 'is_block_editor')) {
if (!$screen->is_block_editor() && $pagenow == 'post.php' && $at) {
if (isset($g['cdp-display-edit']) && isset($g['cdp-content-posts']) && isset($g['cdp-content-pages']) && isset($g['cdp-content-custom']) && $g['cdp-display-edit'] == 'true') {
$a = ($type == 'post' && $g['cdp-content-posts'] == 'true');
$b = ($type == 'page' && $g['cdp-content-pages'] == 'true');
$c = ($type != 'post' && $type != 'page' && $g['cdp-content-custom'] == 'true');
if (($a || $b || $c) && $pagenow != 'post-new.php')
wp_enqueue_style('cdp-editor', "{$cdp_plug_url}/assets/css/cdp-editor{$min}.css", '', $ver);
}
}
}
$ver = preg_replace('#[^\pL\pN/-]+#', '', CDP_VERSION);
if ((!$screen || !in_array($screen->id, $allowed)) && !($pagenow == 'edit.php' || $pagenow == 'post.php'))
return;
wp_enqueue_style('cdp-css', "{$cdp_plug_url}/assets/css/cdp{$min}.css", '', $ver);
wp_enqueue_style('cdp-css-user', "{$cdp_plug_url}/assets/css/cdp-user{$min}.css", '', $ver);
wp_enqueue_script('cdp-icPagination', "{$cdp_plug_url}/assets/js/cdp-icPagination{$min}.js", '', $ver);
wp_enqueue_script('cdp', "{$cdp_plug_url}/assets/js/cdp{$min}.js", '', $ver, true);
wp_enqueue_script('cdp-modal', "{$cdp_plug_url}/assets/js/cdp-modal{$min}.js", '', $ver, true);
if (isset($g['cdp-content-custom']) && $g['cdp-content-custom'] == 'true') {
wp_enqueue_script('cdp-bulk', "{$cdp_plug_url}/assets/js/cdp-bulk{$min}.js", '', $ver, true);
$cdpBulkJSArgs = ['strOptCopy' => __('Copy', 'copy-delete-posts')];
wp_localize_script('cdp-bulk', 'cdpBulkJS', $cdpBulkJSArgs);
}
cdp_load_localize_end_js();
}, 1000);
/** * */
/** **\
* Setup assets (not admin).
* @since 1.0.0
*/
add_action('wp_enqueue_scripts', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
if ((function_exists('wp_doing_ajax') && wp_doing_ajax()) || (!(is_single() || is_page())))
return;
global $cdp_plug_url;
$ver = preg_replace('#[^\pL\pN/-]+#', '', CDP_VERSION);
$min = defined('CDP_SCRIPT_DEBUG') && CDP_SCRIPT_DEBUG ? '' : '.min';
wp_enqueue_script('jquery-ui-draggable');
wp_enqueue_script('jquery-ui-droppable');
wp_enqueue_script('jquery-ui-sortable');
wp_enqueue_style('cdp-css-global', "{$cdp_plug_url}/assets/css/cdp-global{$min}.css", '', $ver);
wp_enqueue_script('cdp-js-global', "{$cdp_plug_url}/assets/js/cdp-global{$min}.js", ['jquery'], $ver, true);
wp_enqueue_style('cdp-css', "{$cdp_plug_url}/assets/css/cdp{$min}.css", '', $ver);
wp_enqueue_style('cdp-css-user', "{$cdp_plug_url}/assets/css/cdp-user{$min}.css", '', $ver);
wp_enqueue_script('cdp', "{$cdp_plug_url}/assets/js/cdp{$min}.js", ['jquery'], $ver, true);
wp_enqueue_script('cdp-tooltips', "{$cdp_plug_url}/assets/js/cdp.tooltip{$min}.js", '', $ver, true);
wp_enqueue_style('cdp-tooltips-css', "{$cdp_plug_url}/assets/css/cdp.tooltip{$min}.css", '', $ver);
wp_enqueue_script('cdp-modal', "{$cdp_plug_url}/assets/js/cdp-modal{$min}.js", ['jquery'], $ver, true);
wp_enqueue_script('cdp-js-user', "{$cdp_plug_url}/assets/js/cdp-user{$min}.js", '', $ver, true);
wp_enqueue_style('cdp-css-select', "{$cdp_plug_url}/assets/css/cdp-select{$min}.css", '', $ver);
wp_enqueue_script('cdp-js-select', "{$cdp_plug_url}/assets/js/cdp-select{$min}.js", '', $ver, true);
cdp_load_localize_global_js();
cdp_load_localize_end_js();
});
/** * */
/** **\
* Setup assets (for gutenberg).
* @since 1.0.0
*/
add_action('enqueue_block_editor_assets', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
global $post;
global $cdp_plug_url;
$min = defined('CDP_SCRIPT_DEBUG') && CDP_SCRIPT_DEBUG ? '' : '.min';
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
$ver = preg_replace('#[^\pL\pN/-]+#', '', CDP_VERSION);
if (is_object($post)) {
$type = $post->post_type;
} else {
$type = false;
}
$a = ($type == 'post' && (isset($g['cdp-content-posts']) && $g['cdp-content-posts'] == 'true'));
$b = ($type == 'page' && (isset($g['cdp-content-pages']) && $g['cdp-content-pages'] == 'true'));
$c = ($type != 'post' && $type != 'page' && (isset($g['cdp-content-custom']) && $g['cdp-content-custom'] == 'true'));
if ((isset($g['cdp-display-gutenberg']) && $g['cdp-display-gutenberg'] == 'true') && ($a || $b || $c)) {
wp_enqueue_style('cdp-gutenberg', "{$cdp_plug_url}/assets/css/cdp-gutenberg{$min}.css", '', $ver);
wp_enqueue_script('cdp-js-gutenberg', "{$cdp_plug_url}/assets/js/cdp-gutenberg{$min}.js", ['jquery'], $ver, true);
$cdpGutenbergJSArgs = ['cdpCopy' => __('Copy this', 'copy-delete-posts')];
wp_localize_script('cdp-js-gutenberg', 'cdpGutenbergJS', $cdpGutenbergJSArgs);
}
});
/** * */
/** **\
* Settings and menu initializer.
* @since 1.0.0
*/
add_action('admin_menu', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
// Menu icon
$icon_url = plugin_dir_url(__FILE__) . 'assets/imgs/icon.png';
// Main menu slug
$parentSlug = 'copy-delete-posts';
// Globals
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
// Main menu hook
add_menu_page(__('Copy & Delete Posts', 'copy-delete-posts'), __('<span id="cdp-menu">Copy & Delete Posts</span>', 'copy-delete-posts'), 'read', $parentSlug, 'cdp_configuration', $icon_url, $position = 98);
if (isset($g['cdp-menu-in-settings']) && $g['cdp-menu-in-settings'] == 'true') {
add_submenu_page('tools.php', __('Copy & Delete Posts Menu', 'copy-delete-posts'), __('<span id="cdp-menu">Copy & Delete Posts</span>', 'copy-delete-posts'), 'read', 'copy-delete-posts', 'cdp_configuration', 3);
}
// Remove default submenu by menu
remove_submenu_page($parentSlug, $parentSlug);
});
/** * */
/** **\
* Add cdp scripts and styles to the whitelist of mailpoet.
* @since 1.5.0
*/
add_filter('mailpoet_conflict_resolver_whitelist_style', function ($whitelist) {
// Add your plugin's unique identifier or path to the whitelist
$whitelist[] = 'cdp';
return $whitelist;
});
/** **\
* Add copy option to Quick Actions of Posts.
* @since 1.0.0
*/
add_filter('post_row_actions', function ($actions, $post) {
if (cdp_check_permissions(wp_get_current_user()) == false)
return $actions;
// Get global options and post type
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
$type = $post->post_type;
// If user want to see the copy buton here pass
if (isset($g['cdp-display-posts']) && $g['cdp-display-posts'] == 'true') {
if (($type == 'post' && isset($g['cdp-content-posts']) && $g['cdp-content-posts'] == 'true') || ($type != 'post' && isset($g['cdp-content-custom']) && $g['cdp-content-custom'] == 'true')) {
$actions['cdp_copy'] = "<a href='#'><span class='cdp-copy-button cdp-tooltip-copy' x='" . $type . "' title='" . __('test', 'copy-delete-posts') . "' data-cdp-id='{$post->ID}'>" . __('Copy', 'copy-delete-posts') . "</span></a>";
}
}
return $actions;
}, 10, 2);
/** * */
/** **\
* Add copy option to Quick Actions of Pages.
* @since 1.0.0
*/
add_filter('page_row_actions', function ($actions, $page) {
if (cdp_check_permissions(wp_get_current_user()) == false) {
return $actions;
}
// Get global options and post type
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
$type = $page->post_type;
// If user want to see the copy buton here pass
if (isset($g['cdp-display-posts']) && $g['cdp-display-posts'] == 'true') {
if (($type == 'page' && $g['cdp-content-pages'] == 'true') || ($type != 'page' && $g['cdp-content-custom'] == 'true')) {
$actions['cdp_copy'] = "<a href='#'><span class='cdp-copy-button cdp-tooltip-copy' title='" . __('test', 'copy-delete-posts') . "' data-cdp-id='{$page->ID}'>" . __('Copy', 'copy-delete-posts') . "</span></a>";
}
}
return $actions;
}, 10, 2);
/** * */
/** **\
* Add copy option to Bulk Actions of Posts.
* @since 1.0.0
*/
add_filter('bulk_actions-edit-post', function ($bulk_actions) {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
if (isset($g['cdp-display-bulk']) && $g['cdp-display-bulk'] == 'true' && isset($g['cdp-content-posts']) && $g['cdp-content-posts'] == 'true') {
$bulk_actions['cdp_bulk_copy'] = __('Copy', 'copy-delete-posts');
}
return $bulk_actions;
});
/** * */
/** **\
* Add copy option to Bulk Actions of Pages.
* @since 1.0.0
*/
add_filter('bulk_actions-edit-page', function ($bulk_actions) {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
if (isset($g['cdp-display-bulk']) && $g['cdp-display-bulk'] == 'true' && isset($g['cdp-content-pages']) && $g['cdp-content-pages'] == 'true') {
$bulk_actions['cdp_bulk_copy'] = __('Copy', 'copy-delete-posts');
}
return $bulk_actions;
});
/** * */
/** **\
* Add copy option to admin bar inside preview.
* @since 1.0.0
*/
add_action('admin_bar_menu', function ($admin_bar) {
if (cdp_check_permissions(wp_get_current_user()) == false) {
return;
}
$screen = ((function_exists('get_current_screen') ? get_current_screen() : false));
$screens = ['post', 'page'];
if (!(is_single() || is_page() || (isset($screen) && ($screen != false && in_array($screen->id, $screens))))) {
return;
}
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
global $post;
if (is_object($post)) {
$type = $post->post_type;
} else {
$type = false;
}
$a = ($type == 'post' && (isset($g['cdp-content-posts']) && $g['cdp-content-posts'] == 'true'));
$b = ($type == 'page' && (isset($g['cdp-content-pages']) && $g['cdp-content-pages'] == 'true'));
$c = ($type != 'post' && $type != 'page' && (isset($g['cdp-content-custom']) && $g['cdp-content-custom'] == 'true'));
if (isset($g['cdp-display-admin']) && $g['cdp-display-admin'] == 'false') {
return;
}
global $cdp_plug_url;
if ($a || $b || $c) {
$icon = '<span class="cdp-admin-bar-icon" data-plug-path="' . $cdp_plug_url . '" data-this-id="' . get_the_ID() . '"></span>';
$admin_bar->add_menu(array(
'id' => 'cdp-copy-bar-x',
'parent' => null,
'group' => null,
'title' => $icon . __('Copy this', 'copy-delete-posts'),
'href' => '#',
'meta' => array('class' => 'cdp-admin-bar-copy', 'target' => '_self')
));
}
}, 80);
/** * */
/** **\
* Add notification to admin bar.
* @since 1.0.0
*/
add_action('admin_bar_menu', function ($admin_bar) {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
if (!is_admin())
return;
if (!function_exists('cdp_notifications_menu'))
require_once plugin_dir_path(__FILE__) . 'menu/notifications.php';
if (function_exists('cdp_notifications_menu')) {
$data = cdp_notifications_menu();
$admin_bar->add_menu(array(
'id' => 'wp-admin-copy-and-delete-posts',
'parent' => null,
'group' => null,
'title' => $data['html'],
'href' => '#',
'meta' => array(
'class' => 'cdp-admin-bar-noti menupop' . (($data['in_list'] == 0) ? ' cdp-noti-hide' : ''),
'target' => '_self'
)
));
}
}, 80);
/** * */
/** **\
* This function adds version info.
* @since 1.0.0
*/
add_action('wp_head', function () {
echo '<meta name="cdp-version" content="' . CDP_VERSION . '" />';
});
/** * */
/** **\
* This function adds thickbox modal to preview and view pages.
* @since 1.0.0
*/
add_action('wp_footer', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
if (isset($g['cdp-display-admin']) && $g['cdp-display-admin'] == 'false')
return;
global $cdp_plug_url, $post;
$post_id = false;
if (isset($post->ID))
$post_id = $post->ID;
$screen = ((function_exists('get_current_screen')) ? get_current_screen() : false);
$profiles = get_option('_cdp_profiles');
if (is_single() || is_page()) {
$hx = false;
if (isset($g['cdp-premium-hide-tooltip']) && $g['cdp-premium-hide-tooltip'] == 'true') {
$hx = true;
}
cdp_vars($hx, $cdp_plug_url, $post_id);
cdp_modal($screen, $profiles);
}
});
/** * */
/** **\
* Add prepared HTML for tooltips and other info.
* @since 1.0.0
*/
add_action('admin_init', function () {
add_action('admin_notices', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
global $post, $cdp_plug_url, $cdp_globals, $pagenow;
$post_id = false;
$hasParent = false;
$screen = get_current_screen();
$profiles = get_option('_cdp_profiles', array());
$deny = ['edit-page', 'edit-post'];
$hx = false;
if (!in_array($screen->id, $deny)) {
if (isset($post->ID)) {
$post_id = $post->ID;
$meta = get_post_meta($post->ID, '_cdp_origin');
$site = get_post_meta($post->ID, '_cdp_origin_site');
if ($cdp_globals && isset($cdp_globals['others']) && isset($cdp_globals['others']['cdp-references-post'])) {
if ($cdp_globals['others']['cdp-references-edit'] == 'true') {
if (function_exists('switch_to_blog') && $site)
switch_to_blog($site);
if (isset($meta[0]) && get_post_status($meta[0])) {
$parentTitle = get_the_title($meta[0]);
$link = get_post_permalink($meta[0]);
$hasParent = array(
'title' => $parentTitle,
'link' => $link
);
}
if (function_exists('restore_current_blog') && $site)
restore_current_blog();
}
}
}
}
if ($cdp_globals && isset($cdp_globals['others']) && isset($cdp_globals['others']['cdp-premium-hide-tooltip']) && $cdp_globals['others']['cdp-premium-hide-tooltip'] == 'true') {
$hx = true;
}
if (get_option('_cdp_show_copy', false)) {
echo '<span style="display: none; visibility: hidden;" id="cdp-show-copy-banner" data-value="true"></span>';
delete_option('_cdp_show_copy');
}
if ($pagenow == 'edit.php')
$post_id = false;
cdp_vars($hx, $cdp_plug_url, $post_id, $hasParent, true);
cdp_tooltip_content($profiles);
cdp_modal($screen, $profiles);
}, 12);
}, 10000);
/** * */
/** **\
* Add button in standard editor.
* @since 1.0.0
*/
add_action('post_submitbox_start', function () {
if (cdp_check_permissions(wp_get_current_user()) == false)
return;
$g = get_option('_cdp_globals', array());
if (isset($g['others'])) {
$g = $g['others'];
} else {
$g = cdp_default_global_options();
}
if (isset($g['cdp-display-edit']) && $g['cdp-display-edit'] == 'false') {
return;
}
global $post, $pagenow;
if (is_object($post)) {
$type = $post->post_type;
} else {
$type = false;
}
$a = ($type == 'post' && (isset($g['cdp-content-posts']) && $g['cdp-content-posts'] == 'true'));
$b = ($type == 'page' && (isset($g['cdp-content-pages']) && $g['cdp-content-pages'] == 'true'));
$c = ($type != 'post' && $type != 'page' && (isset($g['cdp-content-custom']) && $g['cdp-content-custom'] == 'true'));
if (($a || $b || $c) && $pagenow != 'post-new.php')
echo '<div id="cdp-copy-btn"><a class="cdp-copy-btn-editor" href="#">' . __('Copy this post', 'copy-delete-posts') . '</a></div>';
});
/** * */
/** **\
* Add hook for cron (deletion).
* @since 1.0.0
*/
add_action('cdp_cron_delete', function ($args = false) {
$ids = $args['ids'];
$trash = $args['trash'];
$site = (isset($args['site'])) ? $args['site'] : '-1';
$tok = $args['token']['token'];
$tsk = $args['token']['tsk'];
if ($args == false)
return;
$cdp_cron = get_option('_cdp_crons');
if (!isset($cdp_cron[$tok]) || !$cdp_cron[$tok])
return;
$auit = $cdp_cron[$tok]['auit'];
$auitd = $cdp_cron[$tok]['auitd'];
$areWePro = areWePro(true, '/handler/crons.php', true);
if ($auit == true && $areWePro && function_exists('cdpp_make_redirect'))
cdpp_make_redirect($ids, $auitd);
if ($trash == true && $areWePro && function_exists('cdpp_crons_trash_post'))
cdpp_crons_trash_post($ids);
else
foreach ($ids as $i => $id)
wp_delete_post($id, true);
$cdp_cron[$tok]['tasks'][$tsk] = current_time('timestamp');
$falsed = false;
$last = false;
$i = 0;
$size = sizeof($cdp_cron[$tok]['tasks']);
foreach ($cdp_cron[$tok]['tasks'] as $otsk => $val) {
if ($val == false)
$falsed = true;
$i++;
if ($i == ($size - 1))
$last = $otsk;
}
if ($tsk == '-0' || $last == $tsk || $falsed == false || $cdp_cron[$tok]['tasks'][$last] != false) {
$cdp_cron[$tok]['done'] = current_time('timestamp');
$cdp_cron[$tok]['data'] = array('formated-date' => date('d M Y, H:i:s'));
if (isset($cdp_cron[$tok]['del_size'])) {
$cdp_cron[$tok]['data']['amount'] = $cdp_cron[$tok]['del_size'];
$cdp_cron[$tok]['data']['text'] = __('Manual Cleanup removed ', 'copy-delete-posts') . $cdp_cron[$tok]['del_size'] . ' post(s).';
}
$cdp_cron[$tok]['shown'] = false;
}
update_option('_cdp_crons', $cdp_cron);
});
/** * */
/** **\
* Check if user is permmited to use this plugin.
* @since 1.0.0
* @param $user = current_user = object
*
* @return boolean
*/
function cdp_check_permissions($user = array()) {
if (!isset($user) || empty($user))
return false;
$access = false;
$access_roles = get_option('_cdp_globals');
if (!isset($access_roles['roles']))
$access_roles = array();
foreach ($user->roles as $role => $name) {
if ($name == 'administrator' || (isset($access_roles['roles'][$name]) && $access_roles['roles'][$name] == 'true')) {
$access = true;
break;
}
}
return $access;
}
/** * */
/** **\
* First run of the plugin setup default options for Default profile
* @since 1.0.0
*/
add_action('cdp_plugin_setup', 'cdp_setup_default_profile');
function cdp_setup_default_profile() {
$current = get_option('_cdp_globals');
$isSetup = get_option('_cdp_default_setup');
if (($current != false && isset($current['default'])) || $isSetup)
return;
$already = array();
$globals = array();
$already['default'] = cdp_default_options();
$globals['others'] = cdp_default_global_options();
$s1 = update_option('_cdp_globals', $globals);
$s2 = update_option('_cdp_profiles', $already);
if ($s1 || $s2)
update_option('_cdp_default_setup', true);
}
/** * */
function cdp_load_localize_global_js() {
$cdpGlobalJSArgs = [
'strDissmisIssue' => __('There was an issue while dismissing banner, please do it next time again.', 'copy-delete-posts'),
'strDissmisRequestIssue' => __('Cannot send dismiss request. Are you connected to the internet?', 'copy-delete-posts'),
'strReviewReview' => __('Thank you very much for the review, this banner will not appear again!', 'copy-delete-posts'),
'strReviewAlready' => __('Thank you very much for the review, this banner will not appear again!', 'copy-delete-posts'),
'strReviewLater' => __('Alright! We will ask you again in 14 days!', 'copy-delete-posts'),
'strReviewDefault' => __('This banner will not appear again, if any feature is missing you can ask for it on our support forum!', 'copy-delete-posts'),
'strTasksCleared' => __('Tasks cleared!', 'copy-delete-posts'),
'strTasksUpdateIssue' => __('We couldn\'t update task list, please try again later or kill tasks individualy.', 'copy-delete-posts'),
'strTasksUpdateIssue2' => __('We couldn\'t update task list, please try again later or kill tasks individualy.', 'copy-delete-posts'),
'strTaskHide' => __('The task has been hidden', 'copy-delete-posts'),
'strTaskHideIssue' => __('There was an error and we couldn\'t hide the task.', 'copy-delete-posts'),
'strTaskHideIssue2' => __('There was an error and we couldn\'t hide the task.', 'copy-delete-posts'),
'strTaskKill' => __('The task has been killed', 'copy-delete-posts'),
'strTaskKillIssue' => __('There was an error and we couldn\'t kill the task.', 'copy-delete-posts'),
'strTaskKillIssue2' => __('There was an error and we couldn\'t kill the task.', 'copy-delete-posts'),
'strCDPInstallSuccess' => __('Plugin has been installed successfully, feel free to check those awesome features!', 'copy-delete-posts'),
'strCDPInfo' => __('Copy & Delete Posts', 'copy-delete-posts'),
'strCDPInfoPremium' => __('Premium', 'copy-delete-posts'),
'strHideBannerNow' => __('It will hide this banner just for now.', 'copy-delete-posts'),
'strErrWithNotif' => __('There was an error with this notification.', 'copy-delete-posts'),
'strCDPInfo2' => __('Copy & Delete Posts', 'copy-delete-posts'),
'ajaxNonce' => wp_create_nonce('copy-delete-posts-ajax')
];
wp_localize_script('cdp-js-global', 'cdpGlobalJS', $cdpGlobalJSArgs);
}
function cdp_load_localize_end_js() {
$cdpJSArgs = [
'strNoItems' => __('No items to show, try with other filters!', 'copy-delete-posts'),
'strIntroSaveIssue' => __('Something went wrong and we couldn\'t save intro settings!', 'copy-delete-posts'),
'strIntroSaveIssue2' => __('Something went wrong and we couldn\'t save intro settings.', 'copy-delete-posts'),
'strIntroUpdateIssue' => __('Something went wrong and we couldn\'t update intro settings try again!', 'copy-delete-posts'),
'strIntroUpdateIssue2' => __('Something went wrong and we couldn\'t update intro settings. Please check console for more info.', 'copy-delete-posts'),
'strSettingsSaved' => __('All your settings were saved!', 'copy-delete-posts'),
'strSettingsSaveIssue' => __('Something went wrong and we couldn\'t save your settings.', 'copy-delete-posts'),
'strSettingsSaveIssue2' => __('Something went wrong and we couldn\'t save your settings. Please check console for more info.', 'copy-delete-posts'),
'strTogglableName' => __('(Name of original)', 'copy-delete-posts'),
'strCopyNumIssue' => __('You need to insert positive number for copies.', 'copy-delete-posts'),
'strCopyPostIssue' => __('Something went wrong and we couldn\'t copy this post please try again!', 'copy-delete-posts'),
'strCopyPostIssueConsInfo' => __('Something went wrong and we couldn\'t copy this post. See dev console for more info.', 'copy-delete-posts'),
'strTooltipBtnIssue' => __('Couldn\'t recognize that button, please try again.', 'copy-delete-posts'),
'strSelectedProfIssue' => __('Unable to recognize selected profile, please try again.', 'copy-delete-posts'),
'strSelectedProfGetIssue' => __('Something went wrong and we couldn\'t get profile settings. Check console for more details', 'copy-delete-posts'),
'strConsLogErr' => __('Copy & Delete Post Error', 'copy-delete-posts'),
'strSelectedProfGetIssue2' => __('Something went wrong and we couldn\'t get profile settings please try again!', 'copy-delete-posts'),
'strCopyInProgress' => __('Copy in progress...', 'copy-delete-posts'),
'strServerDataIssue' => __('There was an error while getting data from server, please try again.', 'copy-delete-posts'),
'strPostListIssue' => __('Something went wrong and we couldn\'t get post list. Please check console for more info.', 'copy-delete-posts'),
'strCheckDuplicatesSearch' => __('Please, check for: which duplicates you are looking for', 'copy-delete-posts'),
'strServerConnectIssue' => __('Cannot connect to the server, premium filters will not be applied.', 'copy-delete-posts'),
'strFilterNotSelected' => __('You did not select any filter.<br>Click <a href="#" class="cdp-show-the-copies">here</a> to show all copies (of the selected post type) made by this plugin.', 'copy-delete-posts'),
'strNoDataForFilter' => __('No posts/pages meeting the current filter conditions.', 'copy-delete-posts'),
'strCheckSteps' => __('Please check that you completed all steps, before this task!', 'copy-delete-posts'),
'strSelectPostToDel' => __('Nothing to do here, please select at least one post to delete.', 'copy-delete-posts'),
'strFieldWrongCount' => __('You have wrong count in throttling field, please fix.', 'copy-delete-posts'),
'strDeletionProcessStarted' => __('Deletion process started, you can close this page now and wait till the process ends!', 'copy-delete-posts'),
'strDeletionTaskStart' => __('Something went wrong and we couldn\'t setup the deletion task.', 'copy-delete-posts'),
'strDeletionTaskEnd' => __(' Please try without throttling.', 'copy-delete-posts'),
'strDeletionTaskConsInfo' => __('Something went wrong and we couldn\'t setup the deletion task. Please check console for more info.', 'copy-delete-posts'),
'strLicenseKeyEmpty' => __('Please enter license key, currently it is empty.', 'copy-delete-posts'),
'strLicenseActiveReloading' => __('License is already active, let us reload the page!', 'copy-delete-posts'),
'strLicenseValidPressBtn' => __('License is valid, press the button again to activate!', 'copy-delete-posts'),
'strUnknownRespRefreshPage' => __('Unknown response, please try refresh the page!', 'copy-delete-posts'),
'strSendRequestIssue' => __('Something went wrong and we couldn\'t send request, please try refresh page and try again.', 'copy-delete-posts'),
'strSendRequestIssue2' => __('Something went wrong and we couldn\'t send request, are you connected to the internet?', 'copy-delete-posts'),
'strIncludingHtml' => __('<b>including</b> empty', 'copy-delete-posts'),
'strIncludingHtml2' => __('only if <u><b>not</b></u> empty', 'copy-delete-posts'),
'strTogglableNameChange' => __('Change it to (Name of original)', 'copy-delete-posts'),
'strTogglableNameChangeBlank' => __('Change it to blank', 'copy-delete-posts'),
'strDeletingPosts' => __('Deleting Posts', 'copy-delete-posts'),
'strAutoCleanPosts' => __('Auto Cleaning-up', 'copy-delete-posts'),
'strKill' => __('Kill', 'copy-delete-posts'),
'strDeletedPosts' => __('Deleted Posts', 'copy-delete-posts'),
'strAutoCleanedPosts' => __('Auto Cleaned-up', 'copy-delete-posts'),
'strHide' => __('Hide', 'copy-delete-posts'),
'strDefCopySettingsStart' => __('Define your copy settings', 'copy-delete-posts'),
'strDefCopySettingsLink' => __('here', 'copy-delete-posts'),
'strCopyToOtherSiteHtml' => __('If youre on a multisite you can copy it to other sites with the Premium Plugin. <a href="https://sellcodes.com/CylMIdJD" target="_blank">Order it now!</a>', 'copy-delete-posts'),
'strPremFeatureHtml' => __('This is a Premium Feature.<br><a href="https://sellcodes.com/CylMIdJD" target="_blank">Check it out and upgrade today</a>,<br>we made it <b>really affordable!</b>', 'copy-delete-posts'),
'strPreOrderHtml' => __('This is a Premium Feature.<br><a href="https://sellcodes.com/CylMIdJD" target="_blank">Check it out and upgrade today</a>,<br>we made it <b>really affordable!</b>', 'copy-delete-posts'),
'strMultisiteCanCopy' => __('If youre on a multisite you can copy it to other sites.', 'copy-delete-posts'),
'strChangeTypeOfCopy' => __('Change the type of this copy <span class="cdp-premium-icon cdp-big-icon"></span>', 'copy-delete-posts'),
'strPostDuplicateOf' => __('This post is a duplicate of', 'copy-delete-posts'),
'strAreYouSure' => __('Are you REALLY sure?', 'copy-delete-posts'),
'strYouAreCrazy' => __('You\'re crazy! Here is the output:', 'copy-delete-posts'),
'strDebugOutputEnd' => __('- END OF THE DEBUG OUTPUT - ', 'copy-delete-posts'),
'copySuccessfull' => __('Copy to clipboard was successfull.', 'copy-delete-posts'),
'copyFailed' => __('Copy to clipboard failed, your browser does not support this function.', 'copy-delete-posts'),
];
wp_localize_script('cdp', 'cdpJS', $cdpJSArgs);
$cdpModalJSArgs = [
'strRowCopyIssue' => __('Please select at least one row to copy.', 'copy-delete-posts'),
'strRowCopyTryAgain' => __('Please select at least one row to copy and try again.', 'copy-delete-posts'),
'strSettCopyIssue' => __('Please select basic settings for this copy.', 'copy-delete-posts'),
'strPostCopyIssue' => __('Something went wrong and we couldn\'t copy this post please try again!', 'copy-delete-posts'),
'strPostCopyIssueConsoleInfo' => __('Something went wrong and we couldn\'t copy this post. See dev console for more info.', 'copy-delete-posts'),
'strRecogBtnIssue' => __('Couldn\'t recognize that button, please try again.', 'copy-delete-posts'),
'strCopyInProgress' => __('Copy in progress...', 'copy-delete-posts'),
];
wp_localize_script('cdp-modal', 'cdpModalJS', $cdpModalJSArgs);
}
/** **\
* Default settings for unset profiles
* @since 1.0.0
*/
function cdp_default_options() {
return array(
'title' => 'true',
'date' => 'false',
'status' => 'false',
'slug' => 'true',
'excerpt' => 'true',
'content' => 'true',
'f_image' => 'true',
'template' => 'true',
'format' => 'true',
'author' => 'true',
'password' => 'true',
'attachments' => 'false',
'children' => 'false',
'comments' => 'false',
'menu_order' => 'true',
'category' => 'true',
'post_tag' => 'true',
'taxonomy' => 'true',
'nav_menu' => 'true',
'link_category' => 'true',
'all_metadata' => 'false',
'names' => array(
'prefix' => '',
'suffix' => '#[Counter]',
'format' => '1',
'custom' => 'm/d/Y',
'display' => 'Default'
),
'usmplugin' => 'false',
'yoast' => 'false',
'woo' => 'false'
);
}
function cdp_default_global_options() {
return array(
'cdp-content-pages' => 'true',
'cdp-content-posts' => 'true',
'cdp-content-custom' => 'true',
'cdp-display-posts' => 'true',
'cdp-display-edit' => 'true',
'cdp-display-admin' => 'true',
'cdp-display-bulk' => 'true',
'cdp-display-gutenberg' => 'true',
'cdp-references-post' => 'false',
'cdp-references-edit' => 'false',
'cdp-premium-import' => 'false',
'cdp-premium-hide-tooltip' => 'false',
'cdp-premium-replace-domain' => 'false',
'cdp-delete-on-uninstall' => 'false',
'cdp-menu-in-settings' => 'false'
);
}
/** * */
/** **\
* Add state info if user want it (the reference to original)
* @since 1.0.0
*/
if (is_admin()) {
if ($cdp_globals && isset($cdp_globals['others']) && isset($cdp_globals['others']['cdp-references-post'])) {
if ($cdp_globals['others']['cdp-references-post'] == 'true')
add_filter('display_post_states', 'cdp_state_post_add', 1, 10);
}
}
function cdp_state_post_add($post_states, $post) {
if (cdp_check_permissions(wp_get_current_user()) == false)
return $post_states;
$meta = get_post_meta($post->ID, '_cdp_origin');
$site = get_post_meta($post->ID, '_cdp_origin_site');
if (function_exists('switch_to_blog') && $site)
switch_to_blog($site);
for ($i = sizeof($meta); $i >= 0; --$i) {
if (isset($meta[($i - 1)]) && get_post_status($meta[$i - 1])) {
$link = get_post_permalink($meta[$i - 1]);
$title = get_the_title($meta[$i - 1]) . " " . "ID: " . $meta[$i - 1];
$post_states['_cdp'] = __('Copy of', 'copy-delete-posts') . " <a class='cdp-tooltip-top' title='$title' href='$link' target='_blank'>" . __('this', 'copy-delete-posts') . "</a> " . __('post', 'copy-delete-posts');
break;
}
}
if (function_exists('restore_current_blog') && $site)
restore_current_blog();
return $post_states;
}
/** * */
/** **\
* Check the premium status and correction
* @since 1.0.0
*/
function areWePro($include = true, $file = '/content/premium.php', $ignore_perms = false) {
if (!$ignore_perms && cdp_check_permissions(wp_get_current_user()) == false)
return false;
// Get WP-Plugin path
$premium_plugin = 'copy-delete-posts-premium/copy-delete-posts-premium.php';
$premium_dir = WP_PLUGIN_DIR . '/' . 'copy-delete-posts-premium';
$pplugin_path = $premium_dir . $file;
$squirrel = 'cdpp_squirrelicense';
$core = '/includes/core.php';
$areWePro = false;
// Load premium content if the plugin is here
if (is_dir($premium_dir) && ((function_exists('is_plugin_active') && is_plugin_active($premium_plugin)) || (!function_exists('is_plugin_active')))) {
// Include cool features
if ($include && file_exists($pplugin_path))
require_once($pplugin_path);
// Is premium function
if (file_exists($pplugin_path))
$areWePro = true;
// Has special functions
if (file_exists($pplugin_path) && file_exists($premium_dir . $core)) {
require_once($premium_dir . $core);
if (function_exists($squirrel))
$areWePro = $squirrel()['p'];
else
$areWePro = false;
} else
$areWePro = false;
}
// Return answer
return $areWePro;
}
/** * */
/** **\
* It adds button on plugin list below plugin
* @since 1.0.0
*/
add_filter('plugin_action_links_' . plugin_basename(__FILE__), function ($links) {
$links['cdp-settings-link'] = '<a href="' . admin_url('/admin.php?page=copy-delete-posts') . '">' . __('Settings', 'copy-delete-posts') . '</a>';
return $links;
});
/** * */
/** **\
* This function fixes Wordpress wp_upload_dir function
* @since 1.0.0
*/
function cdp_fix_upload_paths($data) {
// Check if the base URL matches the format
$needs_fixing = preg_match("/wp-content\/blogs\.dir\/(\d+)\/files/", $data['baseurl'], $uri_part);
if ($needs_fixing) {
$data['url'] = str_replace($uri_part[0], 'files', $data['url']);
$data['baseurl'] = str_replace($uri_part[0], 'files', $data['baseurl']);
}
return $data;
}
/** * */
/** **\
* This function will sanitize whole array with sanitize_text_field by RECURSION
* @since 1.0.0
*/
function cdp_sanitize_array($data = null) {
$array = array();
if (is_array($data) || is_object($data))
foreach ($data as $key => $value) {
$key = ((is_numeric($key)) ? intval($key) : sanitize_text_field($key));
if (is_array($value) || is_object($value))
$array[$key] = cdp_sanitize_array($value);
else
$array[$key] = sanitize_text_field($value);
}
else if (is_string($data))
return sanitize_text_field($data);
else if (is_bool($data))
return $data;
else if (is_null($data))
return 'false';
else {
error_log('Copy & Delete Posts[copy-delete-posts.php:1068]: Unknown AJaX datatype ' . gettype($data));
echo 'error invalid data';
wp_die();
}
return $array;
}
/** **/
/** **\
* Activation of tryOutPlugins module
* @since 1.3.6
*/
add_action('plugins_loaded', function () {
if (!(class_exists('\Inisev\Subs\Inisev_Try_Out_Plugins') || class_exists('Inisev\Subs\Inisev_Try_Out_Plugins') || class_exists('Inisev_Try_Out_Plugins'))) {
require_once __DIR__ . '/modules/tryOutPlugins/tryOutPlugins.php';
$try_out_plugins = new \Inisev\Subs\Inisev_Try_Out_Plugins(__FILE__, __DIR__, 'Duplicate Posts', 'admin.php?page=copy-delete-posts');
}
});
if (!has_action('wp_ajax_tifm_save_decision')) {
add_action('wp_ajax_tifm_save_decision', function () {
// Nonce verification
if (!isset($_POST['nonce']) || !wp_verify_nonce(sanitize_text_field($_POST['nonce']), 'tifm_notice_nonce')) {
wp_send_json_error();
return;
}
if (isset($_POST['decision'])) {
if ($_POST['decision'] == 'true') {
update_option('_tifm_feature_enabled', 'enabled');
delete_option('_tifm_disable_feature_forever', true);
wp_send_json_success();
exit;
} else if ($_POST['decision'] == 'false') {
update_option('_tifm_feature_enabled', 'disabled');
update_option('_tifm_disable_feature_forever', true);
wp_send_json_success();
exit;
} else if ($_POST['decision'] == 'reset') {
delete_option('_tifm_feature_enabled');
delete_option('_tifm_hide_notice_forever');
delete_option('_tifm_disable_feature_forever');
wp_send_json_success();
exit;
}
wp_send_json_error();
exit;
}
});
}
/** **/