| Current File : /home/digitaw/www/wp-content/plugins/simple-history/loggers/class-plugin-duplicate-post-logger.php |
<?php
namespace Simple_History\Loggers;
use Simple_History\Helpers;
/**
* Logger for the Yoast Duplicate Post plugin
* (https://sv.wordpress.org/plugins/duplicate-post/)
*
* @package SimpleHistory
* @since 2.13
*/
class Plugin_Duplicate_Post_Logger extends Logger {
/** @var string Logger slug */
public $slug = 'Plugin_DuplicatePost';
/**
* Return info about this logger
*
* @return array
*/
public function get_info() {
$arr_info = array(
'name' => _x( 'Plugin: Duplicate Posts Logger', 'Logger: Plugin Duplicate Post', 'simple-history' ),
'description' => _x(
'Logs posts and pages cloned using plugin Duplicate Post',
'Logger: Plugin Duplicate Post',
'simple-history'
),
'name_via' => _x( 'Using plugin Yoast Duplicate Post', 'Logger: Plugin Duplicate Post', 'simple-history' ),
'capability' => 'manage_options',
'messages' => array(
'post_duplicated' => _x(
'Cloned "{duplicated_post_title}" to a new post',
'Logger: Plugin Duplicate Post',
'simple-history'
),
),
);
return $arr_info;
}
/**
* @inheritdoc
*/
public function loaded() {
$isPluginActive = Helpers::is_plugin_active( 'duplicate-post/duplicate-post.php' );
if ( ! $isPluginActive ) {
return;
}
// When a copy have been made of a post or page
// the action 'dp_duplicate_page' or 'dp_duplicate_post'
// is fired with args $new_post_id, $post, $status.
// We add actions with priority 20 so we probably run after
// the plugins own.
add_action( 'dp_duplicate_post', array( $this, 'onDpDuplicatePost' ), 100, 3 );
add_action( 'dp_duplicate_page', array( $this, 'onDpDuplicatePost' ), 100, 3 );
}
/**
* A post or page was duplicated
*
* @param int $new_post_id id of new post that was created.
* @param \WP_Post $post old post that a copy was made of.
* @param string $status status of new post.
*/
public function onDpDuplicatePost( $new_post_id, $post, $status ) {
$new_post = get_post( $new_post_id );
$context = array(
'new_post_title' => $new_post->post_title,
'new_post_id' => $new_post->ID,
'duplicated_post_title' => $post->post_title,
'duplicated_post_id' => $post->ID,
);
$this->info_message( 'post_duplicated', $context );
}
/**
* Modify plain output to include link to post
*
* @param object $row Log row.
*/
public function get_log_row_plain_text_output( $row ) {
$context = $row->context;
$new_post_id = $context['new_post_id'] ?? null;
$duplicated_post_id = $context['duplicated_post_id'] ?? null;
$message = $row->message;
// Check if post still is available
// It will return a WP_Post Object if post still is in system
// If post is deleted from trash (not just moved there), then null is returned.
$postDuplicated = get_post( $duplicated_post_id );
$post_is_available = is_a( $postDuplicated, 'WP_Post' );
// Try to get singular name.
$post_type = $postDuplicated->post_type ?? '';
$post_type_obj = get_post_type_object( $post_type );
if ( ! is_null( $post_type_obj ) && ! empty( $post_type_obj->labels->singular_name ) ) {
$context['duplicated_post_post_type_singular_name'] = strtolower(
$post_type_obj->labels->singular_name
);
}
$context['duplicated_post_edit_link'] = get_edit_post_link( $duplicated_post_id );
$context['new_post_edit_link'] = get_edit_post_link( $new_post_id );
// If post is not available any longer then we can't link to it, so keep plain message then
// Also keep plain format if user is not allowed to edit post (edit link is empty).
if ( $post_is_available && $context['duplicated_post_edit_link'] ) {
$message = _x(
'Cloned {duplicated_post_post_type_singular_name} <a href="{duplicated_post_edit_link}">"{duplicated_post_title}"</a> to <a href="{new_post_edit_link}">a new {duplicated_post_post_type_singular_name}</a>',
'Logger: Plugin Duplicate Post',
'simple-history'
);
}
$context['new_post_edit_link'] = isset( $context['new_post_edit_link'] )
? esc_html( $context['new_post_edit_link'] )
: '';
$context['duplicated_post_edit_link'] = isset( $context['duplicated_post_edit_link'] )
? esc_html( $context['duplicated_post_edit_link'] )
: '';
$context['duplicated_post_title'] = isset( $context['duplicated_post_title'] )
? esc_html( $context['duplicated_post_title'] )
: '';
$context['duplicated_post_title'] = isset( $context['duplicated_post_title'] )
? esc_html( $context['duplicated_post_title'] )
: '';
$context['duplicated_post_post_type_singular_name'] = isset(
$context['duplicated_post_post_type_singular_name']
)
? esc_html( $context['duplicated_post_post_type_singular_name'] )
: '';
return helpers::interpolate( $message, $context, $row );
}
}