wordpress-event-bridge-for-.../includes/class-settings.php
André Menrath ef1248beed
All checks were successful
PHP Code Checker / PHP Code Checker (pull_request) Successful in 55s
PHPUnit / PHPUnit – PHP 7.4 (pull_request) Successful in 1m10s
PHPUnit / PHPUnit – PHP 8.0 (pull_request) Successful in 1m7s
PHPUnit / PHPUnit – PHP 8.1 (pull_request) Successful in 1m6s
PHPUnit / PHPUnit – PHP 8.2 (pull_request) Successful in 1m9s
PHPUnit / PHPUnit – PHP 8.3 (pull_request) Successful in 1m3s
PHPUnit / PHPUnit – PHP 8.4 (pull_request) Successful in 1m9s
wip
2024-12-10 19:34:15 +01:00

197 lines
6 KiB
PHP

<?php
/**
* General settings class.
*
* This file contains the General class definition, which handles the "General" settings
* page for the Event Bridge for ActivityPub Plugin, providing options for configuring various general settings.
*
* @package Event_Bridge_For_ActivityPub
* @since 1.0.0
*/
namespace Event_Bridge_For_ActivityPub;
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
use Activitypub\Activity\Extended_Object\Event;
/**
* Class responsible for the ActivityPui Event Extension related Settings.
*
* Class responsible for the ActivityPui Event Extension related Settings.
*
* @since 1.0.0
*/
class Settings {
const SETTINGS_SLUG = 'event-bridge-for-activitypub';
/**
* The default ActivityPub event category.
*
* @var string
*/
const DEFAULT_EVENT_CATEGORY = 'MEETING';
/**
* Register the settings for the Event Bridge for ActivityPub plugin.
*
* @return void
*/
public static function register_settings(): void {
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_default_event_category',
array(
'type' => 'string',
'description' => \__( 'Define your own custom post template', 'event-bridge-for-activitypub' ),
'show_in_rest' => true,
'default' => self::DEFAULT_EVENT_CATEGORY,
'sanitize_callback' => array( self::class, 'sanitize_mapped_event_category' ),
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_event_category_mappings',
array(
'type' => 'array',
'description' => \__( 'Define your own custom post template', 'event-bridge-for-activitypub' ),
'default' => array(),
'sanitize_callback' => array( self::class, 'sanitize_event_category_mappings' ),
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_initially_activated',
array(
'type' => 'boolean',
'description' => \__( 'Whether the plugin just got activated for the first time.', 'event-bridge-for-activitypub' ),
'default' => 1,
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_summary_type',
array(
'type' => 'string',
'description' => \__( 'Summary type to use for ActivityStreams', 'event-bridge-for-activitypub' ),
'show_in_rest' => true,
'default' => 'preset',
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_custom_summary',
array(
'type' => 'string',
'description' => \__( 'Define your own custom summary template for events', 'event-bridge-for-activitypub' ),
'show_in_rest' => true,
'default' => EVENT_BRIDGE_FOR_ACTIVITYPUB_CUSTOM_SUMMARY,
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_event_sources_active',
array(
'type' => 'boolean',
'show_in_rest' => true,
'description' => \__( 'Whether the event sources feature is activated.', 'event-bridge-for-activitypub' ),
'default' => 0,
)
);
\register_setting(
'event-bridge-for-activitypub',
'event_bridge_for_activitypub_plugin_used_for_event_source_feature',
array(
'type' => 'array',
'description' => \__( 'Define which plugin/integration is used for the event sources feature', 'event-bridge-for-activitypub' ),
'default' => array(),
'sanitize_callback' => array( self::class, 'sanitize_plugin_used_for_event_sources' ),
)
);
\register_setting(
'event-bridge-for-activitypub-event-sources',
'event_bridge_for_activitypub_event_sources',
array(
'type' => 'array',
'description' => \__( 'Dummy setting', 'event-bridge-for-activitypub' ),
'default' => array(),
'sanitize_callback' => 'is_array',
)
);
}
/**
* Sanitize the option which event plugin.
*
* @param string $plugin The setting.
* @return string
*/
public static function sanitize_plugin_used_for_event_sources( $plugin ) {
if ( ! is_string( $plugin ) ) {
return '';
}
$setup = Setup::get_instance();
$active_event_plugins = $setup->get_active_event_plugins();
$valid_options = array();
foreach ( $active_event_plugins as $active_event_plugin ) {
if ( $active_event_plugin->supports_event_sources() ) {
$valid_options[] = $active_event_plugin::class;
}
}
if ( in_array( $plugin, $valid_options, true ) ) {
return $plugin;
}
return '';
}
/**
* Sanitize the target ActivityPub Event category.
*
* @param string $event_category The ActivityPUb event category.
*/
public static function sanitize_mapped_event_category( $event_category ): string {
return self::is_allowed_event_category( $event_category ) ? $event_category : self::DEFAULT_EVENT_CATEGORY;
}
/**
* Sanitization function for the event category mapping setting.
*
* Currently only the default event categories are allowed to be target of a mapping.
*
* @param array $event_category_mappings The settings value.
*
* @return array An array that contains only valid mapping pairs.
*/
public static function sanitize_event_category_mappings( $event_category_mappings ): array {
if ( empty( $event_category_mappings ) ) {
return array();
}
foreach ( $event_category_mappings as $taxonomy_slug => $event_category ) {
if ( ! self::is_allowed_event_category( $event_category ) ) {
unset( $event_category_mappings[ $taxonomy_slug ] );
}
}
return $event_category_mappings;
}
/**
* Checks if the given event category is allowed to be target of a mapping.
*
* @param string $event_category The event category to check.
*
* @return bool True if allowed, false otherwise.
*/
private static function is_allowed_event_category( $event_category ): bool {
$allowed_event_categories = Event::DEFAULT_EVENT_CATEGORIES;
return in_array( $event_category, $allowed_event_categories, true );
}
}