wordpress-activitypub-event.../includes/admin/class-event-plugin-admin-notices.php
André Menrath 8aa90b1005 Refactoring the plugin structure.
Reviewed-on: #19
Co-authored-by: André Menrath <andre.menrath@posteo.de>
Co-committed-by: André Menrath <andre.menrath@posteo.de>
2024-07-05 13:29:13 +02:00

93 lines
3.1 KiB
PHP

<?php
/**
* Class responsible for Event Plugin related admin notices.
*
* Notices for guiding to proper configuration of ActivityPub with event plugins.
*
* @package Activitypub_Event_Extensions
* @since 1.0.0
*/
namespace Activitypub_Event_Extensions\Admin;
/**
* Class responsible for Event Plugin related admin notices.
*
* Notices for guiding to proper configuration of ActivityPub with event plugins.
*
* @since 1.0.0
*/
class Event_Plugin_Admin_Notices {
/**
* Information about the event plugin.
*
* @var array
*/
protected $event_plugin;
/**
* Adds admin notices to an active supported event plugin.
*
* @param array $event_plugin Information about the activate event plugin.
*/
public function __construct( $event_plugin ) {
$this->event_plugin = $event_plugin;
if ( $this->event_post_type_is_not_activitypub_enabled() ) {
add_action( 'admin_notices', array( $this, 'admin_notice_activitypub_not_enabled_for_post_type' ), 10, 1 );
}
}
/**
* Check if ActivityPub is enabled for the custom post type of the event plugin.
*
* @return bool
*/
private function event_post_type_is_not_activitypub_enabled() {
return ! in_array( $this->event_plugin['post_type'], get_option( 'activitypub_support_post_types', array() ), true );
}
/**
* Display the admin notices for the plugins.
*/
public function admin_notice_activitypub_not_enabled_for_post_type() {
// Get the current page.
$screen = get_current_screen();
// Check if we are on a edit page for the event, or on the settings page of the event plugin.
$is_event_plugins_edit_page = 'edit' === $screen->base && $this->event_plugin['post_type'] === $screen->post_type;
$is_event_plugins_settings_page = $this->event_plugin['settings_page_id'] === $screen->id;
if ( $is_event_plugins_edit_page || $is_event_plugins_settings_page ) {
$this->do_admin_notice_post_type_not_activitypub_enabled( $this->event_plugin['plugin_file'] );
}
}
/**
* Print admin notice that the current post type is not enabled in the ActivityPub plugin.
*
* @param string $event_plugin_file The event plugin file path.
*/
private function do_admin_notice_post_type_not_activitypub_enabled( $event_plugin_file ) {
$event_plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $event_plugin_file );
$activitypub_plugin_data = get_plugin_data( ACTIVITYPUB_PLUGIN_FILE );
$notice = sprintf(
/* translators: 1: the name of the event plugin a admin notice is shown. 2: The name of the ActivityPub plugin. */
_x(
'You have installed the <i>%1$s</i> plugin, but the event post type of the plugin <i>%2$s</i> is <b>not enabled</b> in the <a href="%3$s">%1$s settings</a>.',
'admin notice',
'activitypub-event-extensions'
),
esc_html( $activitypub_plugin_data['Name'] ),
esc_html( $event_plugin_data['Name'] ),
admin_url( 'options-general.php?page=activitypub&tab=settings' )
);
$allowed_html = array(
'a' => array(
'href' => true,
'title' => true,
),
'b' => array(),
'i' => array(),
);
echo '<div class="notice notice-warning is-dismissible"><p>' . \wp_kses( $notice, $allowed_html ) . '</p></div>';
}
}