2026-02-05 17:08:59 +03:00

211 lines
5.7 KiB
PHP

<?php
/**
* Module Logs Site connector class.
*
* @package MainWP\Dashboard
* @version 4.5.1
*/
namespace MainWP\Dashboard\Module\Log;
use MainWP\Dashboard\MainWP_Utility;
defined( 'ABSPATH' ) || exit;
/**
* Class Connector_Posts
*
* @package MainWP\Dashboard
*/
class Connector_Posts extends Log_Connector {
/**
* Connector slug
*
* @var string
*/
public $name = 'posts';
/**
* Actions registered for this connector
*
* @var array
*/
public $actions = array(
'mainwp_post_created',
'mainwp_post_action',
);
/**
* Return translated connector label
*
* @return string Translated connector label
*/
public function get_label() {
return esc_html__( 'Posts', 'mainwp' );
}
/**
* Return translated action labels
*
* @return array Action label translations
*/
public function get_action_labels() {
return array(
'published' => esc_html__( 'Published', 'mainwp' ),
'updated' => esc_html__( 'Updated', 'mainwp' ),
'created' => esc_html__( 'Created', 'mainwp' ),
'trashed' => esc_html__( 'Trashed', 'mainwp' ),
'untrashed' => esc_html__( 'Restored', 'mainwp' ),
'deleted' => esc_html__( 'Deleted', 'mainwp' ),
);
}
/**
* Return translated context labels
*
* @return array Context label translations
*/
public function get_context_labels() {
global $wp_post_types;
$post_types = wp_filter_object_list( $wp_post_types, array(), null, 'label' );
add_action( 'registered_post_type', array( $this, 'registered_post_type' ), 10, 2 );
return $post_types;
}
/**
* Catch registration of post_types after initial loading, to cache its labels
*
* @action registered_post_type
*
* @param string $post_type Post type slug.
* @param array $args Arguments used to register the post type.
*/
public function registered_post_type( $post_type, $args ) {
unset( $args );
$post_type_obj = get_post_type_object( $post_type );
$label = $post_type_obj->label;
Log_Manager::instance()->connectors->term_labels['logs_context'][ $post_type ] = $label;
}
/**
* Log create post.
*
* @action mainwp_post_created
*
* @param mixed $website website.
* @param string $post_action post action.
* @param array $data post data array.
*/
public function callback_mainwp_post_created( $website, $post_action, $data ) {
if ( empty( $website ) || ! is_array( $data ) || empty( $data['post_title'] ) ) {
return;
}
$action = '';
if ( 'newpost' === $post_action ) {
$action = 'created';
if ( ! empty( $data['is_editing'] ) ) {
$action = 'updated';
}
}
if ( empty( $action ) ) {
return;
}
// translators: Placeholders refer to a post title.
$message = esc_html_x(
'%1$s',
'1: Post title',
'mainwp'
);
$default = array(
'post_title' => '',
'singular_name' => '',
);
$args = MainWP_Utility::right_array_merge( $default, $data );
$default_other = array(
'post_date' => '',
'post_date_gmt' => '',
'new_uptime_status' => '',
'old_status' => '',
'post_id' => '',
);
$other = MainWP_Utility::right_array_merge( $default_other, $data );
$args['extra_info'] = wp_json_encode( $other );
$state = 1;
$this->log(
$message,
$args,
$website->id,
$data['post_type'],
$action,
$state
);
}
/**
* Log all post status changes ( creating / updating / trashing )
*
* @action mainwp_post_action
*
* @param object $website website.
* @param string $post_action post action.
* @param array $data post data array.
*/
public function callback_mainwp_post_action( $website, $post_action, $data ) {
if ( empty( $website ) || ! is_array( $data ) || empty( $data['post_title'] ) ) {
return;
}
$action = '';
// translators: Placeholders refer to a post title, and a post type singular name (e.g. "Hello World", "Post").
$message = esc_html_x(
'%1$s',
'1: Post title 2: singular name',
'mainwp'
);
if ( 'publish' === $post_action ) {
$action = 'published';
} elseif ( 'update' === $post_action ) {
$action = 'updated';
} elseif ( 'unpublish' === $post_action ) {
$action = 'unpublished';
} elseif ( 'trash' === $post_action ) {
$action = 'trashed';
} elseif ( 'delete' === $post_action ) {
$action = 'deleted';
} elseif ( 'restore' === $post_action ) {
$action = 'restored';
} else {
return;
}
$default = array(
'post_title' => '',
'singular_name' => '',
'post_date' => '',
'post_date_gmt' => '',
'new_uptime_status' => '',
'old_status' => '',
);
$args = MainWP_Utility::right_array_merge( $default, $data );
$state = 1;
$this->log(
$message,
$args,
$website->id,
$data['post_type'],
$action,
$state
);
}
}