add basic draft of the mapper setting
This commit is contained in:
parent
da3453a069
commit
043e0a3703
5 changed files with 214 additions and 2 deletions
|
@ -20,9 +20,31 @@ abstract class Transformer_Base {
|
|||
* @return string[] An array containing all the supported post types.
|
||||
*/
|
||||
public function get_supported_post_types() {
|
||||
return \get_post_types( ['public' => true], 'names' );
|
||||
return \get_post_types( array( 'public' => true ), 'names' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the plugin that registered the transformer.
|
||||
*
|
||||
* @see Forked from the WordPress elementor plugin.
|
||||
*
|
||||
* @since version_number_transformer_management_placeholder
|
||||
* @return string Plugin name
|
||||
*/
|
||||
private function get_plugin_name_from_transformer_instance( $transformer ) {
|
||||
$class_reflection = new \ReflectionClass( $transformer );
|
||||
|
||||
$plugin_basename = plugin_basename( $class_reflection->getFileName() );
|
||||
|
||||
$plugin_directory = strtok( $plugin_basename, '/' );
|
||||
|
||||
$plugins_data = get_plugins( '/' . $plugin_directory );
|
||||
$plugin_data = array_shift( $plugins_data );
|
||||
|
||||
return $plugin_data['Name'] ?? esc_html__( 'Unknown', 'activitypub' );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the name used for registering the transformer with the ActivityPub plugin.
|
||||
*
|
||||
|
|
|
@ -169,6 +169,50 @@ class Admin {
|
|||
'default' => array( 'post', 'pages' ),
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Flexible activation of post_types together with mapping ActivityPub transformers.
|
||||
*
|
||||
* If a post-type is not mapped to any ActivtiyPub transformer it means it is not activated
|
||||
* for ActivityPub federation.
|
||||
*
|
||||
* @since version_number_transformer_management_placeholder
|
||||
*/
|
||||
register_setting(
|
||||
'activitypub',
|
||||
'activitypub_transformer_mapping',
|
||||
array(
|
||||
'type' => 'array',
|
||||
'default' => array(
|
||||
'post' => 'note',
|
||||
),
|
||||
'show_in_rest' => array(
|
||||
'schema' => array(
|
||||
'type' => 'array',
|
||||
'items' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
),
|
||||
),
|
||||
'sanitize_callback' => function ( $value ) {
|
||||
// Check if $value is an array
|
||||
if (!is_array($value)) {
|
||||
return array();
|
||||
}
|
||||
$value_keys = array_keys( $value );
|
||||
|
||||
$all_public_post_types = \get_post_types( array( 'public' => true ), 'names' );
|
||||
|
||||
// Unset the keys that are missing in $keysToCheck
|
||||
foreach ( array_diff( $value_keys, $all_public_post_types ) as $missing_key ) {
|
||||
unset($value[$missing_key]);
|
||||
}
|
||||
// var_dump($value);
|
||||
return $value;
|
||||
|
||||
}
|
||||
)
|
||||
);
|
||||
\register_setting(
|
||||
'activitypub',
|
||||
'activitypub_blog_user_identifier',
|
||||
|
|
|
@ -169,5 +169,30 @@ class Transformers_Manager {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get available ActivityPub transformers.
|
||||
*
|
||||
* Retrieve the registered widget types list.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @access public
|
||||
*
|
||||
* @param string $widget_name Optional. Widget name. Default is null.
|
||||
*
|
||||
* @return Widget_Base|Widget_Base[]|null Registered widget types.
|
||||
*/
|
||||
public function get_widget_types( $widget_name = null ) {
|
||||
if ( is_null( $this->_widget_types ) ) {
|
||||
$this->init_widgets();
|
||||
}
|
||||
|
||||
if ( null !== $widget_name ) {
|
||||
return isset( $this->_widget_types[ $widget_name ] ) ? $this->_widget_types[ $widget_name ] : null;
|
||||
}
|
||||
|
||||
return $this->_widget_types;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -14,10 +14,10 @@ use function Activitypub\site_supports_blocks;
|
|||
|
||||
/**
|
||||
* WordPress Post Transformer
|
||||
*
|
||||
* The Post Transformer is responsible for transforming a WP_Post object into different othe
|
||||
* Object-Types.
|
||||
*
|
||||
*
|
||||
* Currently supported are:
|
||||
*
|
||||
* - Activitypub\Activity\Base_Object
|
||||
|
|
|
@ -236,6 +236,127 @@
|
|||
|
||||
<?php \do_settings_fields( 'activitypub', 'activity' ); ?>
|
||||
</div>
|
||||
|
||||
<!-- OUR FORK HERE -->
|
||||
<div class="box">
|
||||
<h3><?php \esc_html_e( 'Enable ActivityPub support for post type', 'activitypub' ); ?></h3>
|
||||
|
||||
<table class="form-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<?php \esc_html_e( 'Mapping', 'activitypub' ); ?>
|
||||
</th>
|
||||
<td>
|
||||
<?php \esc_html_e( 'Enable ActivityPub support for a certain post type by selecting one of the available ActivityPub transformers.', 'activitypub' ); ?>
|
||||
|
||||
<?php $all_public_post_types = \get_post_types( array( 'public' => true ), 'objects' );
|
||||
$transformer_mapping = \get_option( 'activitypub_transformer_mapping', array( 'default' => 'note' ) );
|
||||
|
||||
// DUMMY CODE for developing:
|
||||
class Transformer {
|
||||
protected $name;
|
||||
protected $supported_post_types;
|
||||
protected $label;
|
||||
|
||||
public function __construct(string $name, $label, array $supported_post_types) {
|
||||
$this->name = $name;
|
||||
$this->label = $label;
|
||||
$this->supported_post_types = $supported_post_types;
|
||||
}
|
||||
|
||||
public function get_name() {
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function get_label() {
|
||||
return $this->label;
|
||||
}
|
||||
|
||||
public function get_settings_page() {
|
||||
return 'https://event-federation.eu';
|
||||
}
|
||||
|
||||
public function get_info_text() {
|
||||
return 'this is some generic info';
|
||||
}
|
||||
|
||||
public function supports_post_type($post_type) {
|
||||
return in_array($post_type, $this->supported_post_types);
|
||||
}
|
||||
}
|
||||
|
||||
$all_public_post_type_names = array_map(function ($object) {
|
||||
return $object->name;
|
||||
}, $all_public_post_types);
|
||||
|
||||
$transformer1 = new Transformer('default', 'Built-In', $all_public_post_type_names);
|
||||
$transformer2 = new Transformer('tribe', 'The Events Calendar', array('tribe_events'));
|
||||
$transformer3 = new Transformer('generic_event', 'Event', array('tribe_events', 'custom_event'));
|
||||
|
||||
$transformers = array($transformer1, $transformer2, $transformer3);
|
||||
// END OF DUMMY CODE
|
||||
?>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var radioGroups = {};
|
||||
|
||||
var radioButtons = document.querySelectorAll('input[type="radio"]');
|
||||
|
||||
radioButtons.forEach(function (radioButton) {
|
||||
radioButton.addEventListener('click', function () {
|
||||
var name = this.name;
|
||||
|
||||
if (!radioGroups[name]) {
|
||||
radioGroups[name] = this;
|
||||
} else {
|
||||
radioGroups[name].checked = false;
|
||||
radioGroups[name] = this;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<?php
|
||||
// Generate column headers based on transformer objects
|
||||
foreach ($transformers as $transformer) {
|
||||
echo '<th>' . htmlspecialchars($transformer->get_label()) . '</th>';
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
// Generate rows based on post types and transformers
|
||||
foreach ($all_public_post_types as $post_type) {
|
||||
echo '<tr>';
|
||||
echo '<td><strong>' . htmlspecialchars($post_type->label) . '</strong></td>';
|
||||
// Generate radio inputs for each transformer, considering support for the post type
|
||||
foreach ($transformers as $transformer) {
|
||||
$disabled_attribute = $transformer->supports_post_type( $post_type->name ) ? '' : ' disabled';
|
||||
$is_selected = ( is_array( $transformer_mapping ) && isset( $transformer_mapping[ $post_type->name ] ) && $transformer_mapping[ $post_type->name ] === $transformer->get_name() ) ? ' checked ' : '';
|
||||
echo '<td><input type="radio" name="activitypub_transformer_mapping[' . $post_type->name . ']" value="' . $transformer->get_name() . '"' . $is_selected . $disabled_attribute . '></td>';
|
||||
}
|
||||
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- OUR FORK ENDS HERE -->
|
||||
|
||||
<div class="box">
|
||||
<h3><?php \esc_html_e( 'Server', 'activitypub' ); ?></h3>
|
||||
|
|
Loading…
Reference in a new issue