HEX
Server:Apache
System:Linux localhost 5.10.0-14-amd64 #1 SMP Debian 5.10.113-1 (2022-04-29) x86_64
User:enlugo-es (10006)
PHP:7.4.33
Disabled:opcache_get_status
Upload Files
File: /var/www/vhosts/enlugo.es/httpdocs/wp-content/plugins/landing-pages/classes/class.row-actions.php
<?php

/**
 * Class adds row actions to landing-page CPT listing page. Should be moved into class.post-type.landing-pages.php
 * @package LandingPages
 * @subpackage Management
 */

class Landing_Pages_Row_Actions {

    /**
     * Initiate class
     */
    public function __construct() {
        self::load_hooks();
    }

    /**
     * Loads hooks and filters
     */
    public static function load_hooks() {
        /* add admin action to clone post */
        add_action('admin_action_clone_landing_page', array( __CLASS__ , 'clone_landing_page' ) );

        /* adds 'clone' links to posts */
        add_filter('post_row_actions', array( __CLASS__ ,'add_clone_link' ), 10, 2);
        
        /* adds 'clear stats' links to posts */
        add_filter('post_row_actions', array( __CLASS__ ,'add_clear_stats_link' ), 10, 2);
    }

    /**
     * Adds close links to quick actions in a post types listing area
     * @param $actions
     * @param $post
     * @return mixed
     */
    public static function add_clone_link($actions, $post) {

        if ($post->post_type != 'landing-page' ) {
            return $actions;
        }

        $actions['clone'] = '<a href="'.self::get_clone_link( $post->ID ).'" title="'
            . esc_attr(__("Clone this item", 'landing-pages'))
            . '">' .  __('Clone', 'landing-pages') . '</a>';

        return $actions;
    }

    /**
     * Builds the clone action link
     * @param int $id
     * @param bool|true $draft
     */
    public static function get_clone_link( $id = 0 ) {

        if ( !$post = get_post( $id ) ) {
            return;
        }


        $link = add_query_arg( array('action'=>'clone_landing_page' , 'post' => $post->ID ) , admin_url("admin.php"));

        return $link;
    }


    /**
     * Creates cloned landing page and opens it for user
     * @param string $status
     */
    public static function clone_landing_page($status = 'pending') {

        /* Get the original post */
        $id = (isset($_GET['post']) ? intval($_GET['post']) : intval($_POST['post']) );
        $post = get_post($id);

        /* Copy the post and insert it */
        if (!isset($post) || !$post) {
            $post_type_obj = get_post_type_object( $post->post_type );
            wp_die(esc_attr(__('Copy creation failed, could not find original:', 'landing-pages')) . ' ' . $id);
        }

        if (!is_object($post)&&is_numeric($post)) {
            $post = get_post($post);
        }

        $status = $post->post_status;

        /* We don't want to clone revisions */
        if ($post->post_type == 'revision') {
            return;
        }


        $prefix = "Copy of ";
        $suffix = "";
        $status = 'pending';


        $new_post_author = self::get_current_user();


        $new_post = array(
            'menu_order' => $post->menu_order,
            'comment_status' => $post->comment_status,
            'ping_status' => $post->ping_status,
            'post_author' => $new_post_author->ID,
            'post_content' => $post->post_content,
            'post_excerpt' =>  $post->post_excerpt ,
            'post_mime_type' => $post->post_mime_type,
            'post_parent' => $new_post_parent = empty($parent_id)? $post->post_parent : $parent_id,
            'post_password' => $post->post_password,
            'post_status' => $status,
            'post_title' => $prefix.$post->post_title.$suffix,
            'post_type' => $post->post_type,
        );

        $new_post['post_date'] = $new_post_date = $post->post_date;
        $new_post['post_date_gmt'] = get_gmt_from_date($new_post_date);

        $new_post_id = wp_insert_post($new_post);

        $meta_data = self::get_meta($post->ID);
        foreach ($meta_data as $key => $value) {
            update_post_meta($new_post_id, $key, $value);
        }


        wp_redirect(admin_url('edit.php?post_type=' . $post->post_type));

        exit;
    }

    /**
     * Get current user
     * @return OBJECT $user
     */
    public static function get_current_user() {

        if (function_exists('wp_get_current_user')) {
            return wp_get_current_user();
        } else if (function_exists('wp_get_current_user')) {
            global $userdata;
            $userdata = wp_get_current_user();
            return $userdata;
        } else {
            $user_login = $_COOKIE[USER_COOKIE];
            $current_user = $wpdb->get_results("SELECT * FROM $wpdb->users WHERE user_login='$user_login'");
            return $current_user;
        }

    }

    /**
     * Gets meta data of landing page from landing page id
     * @param $post_id
     * @return array
     */
    public static function get_meta($landing_page_id) {


        global $wpdb;
        $data = array();
        $wpdb->query("
            SELECT `meta_key`, `meta_value`
            FROM $wpdb->postmeta
            WHERE `post_id` = $landing_page_id
	    ");
        foreach ($wpdb->last_result as $k => $v) {
            $data[$v->meta_key] = $v->meta_value;
        };
        return $data;
    }
    
    /**
     * Adds clear stats link to quick actions in a post types listing area
     * @param $actions
     * @param $post
     * @return mixed
     */
    public static function add_clear_stats_link($actions, $post) {

        if ($post->post_type != 'landing-page' ) {
            return $actions;
        }
	// .clear_stats is listened to by ajax.clearstats.js
        $actions['clear_the_stats'] = '<a id="'.$post->ID.'" title="'
            . esc_attr(__("Clear the stats?", 'landing-pages'))
            . '"class="clear_stats"'
            . 'style="cursor:pointer;">' .  __('Clear Stats', 'landing-pages') . '</a>';

        return $actions;
    }
}

new Landing_Pages_Row_Actions;