fix wpgancio wp MU
This commit is contained in:
@@ -22,11 +22,12 @@ along with (WPGancio). If not, see (https://www.gnu.org/licenses/agpl-3.0.html).
|
|||||||
defined('ABSPATH') or die('Nope, not accessing this');
|
defined('ABSPATH') or die('Nope, not accessing this');
|
||||||
define('WPGANCIO_DIR', plugin_dir_path(__FILE__));
|
define('WPGANCIO_DIR', plugin_dir_path(__FILE__));
|
||||||
require_once(WPGANCIO_DIR . 'settings.php');
|
require_once(WPGANCIO_DIR . 'settings.php');
|
||||||
require_once(WPGANCIO_DIR . 'network_settings.php');
|
|
||||||
require_once(WPGANCIO_DIR . 'wc.php');
|
require_once(WPGANCIO_DIR . 'wc.php');
|
||||||
require_once(WPGANCIO_DIR . 'oauth.php');
|
require_once(WPGANCIO_DIR . 'oauth.php');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What does WPGancio do?
|
* What does WPGancio do?
|
||||||
* This plugin connects a user of a gancio instance to a Wordpress user so that events published
|
* This plugin connects a user of a gancio instance to a Wordpress user so that events published
|
||||||
|
|||||||
@@ -8,16 +8,16 @@ add_action('wp_trash_post', 'wpgancio_delete_post', 15);
|
|||||||
|
|
||||||
function wpgancio_delete_post ($post_id) {
|
function wpgancio_delete_post ($post_id) {
|
||||||
$post = get_post($post_id);
|
$post = get_post($post_id);
|
||||||
$instance_url = get_option('wpgancio_instance_url', get_site_option('wpgancio_instance_url'));
|
|
||||||
|
|
||||||
if ($post->post_type == 'event') {
|
if ($post->post_type == 'event') {
|
||||||
|
$instance_url = get_option('wpgancio_instance_url') ?: get_site_option('wpgancio_instance_url');
|
||||||
$gancio_id = get_post_meta($post_id, 'wpgancio_gancio_id', TRUE);
|
$gancio_id = get_post_meta($post_id, 'wpgancio_gancio_id', TRUE);
|
||||||
if ($gancio_id) {
|
if ($gancio_id) {
|
||||||
$http = _wp_http_get_object();
|
$http = _wp_http_get_object();
|
||||||
$http->request( "${instance_url}/api/event/${gancio_id}", array(
|
$http->request( "${instance_url}/api/event/${gancio_id}", array(
|
||||||
'method' => 'DELETE',
|
'method' => 'DELETE',
|
||||||
'headers' => array (
|
'headers' => array (
|
||||||
'Authorization' => 'Bearer ' . get_option('wpgancio_token', get_site_option('wpgancio_token'))
|
'Authorization' => 'Bearer ' . (get_option('wpgancio_token') ?: get_site_option('wpgancio_token'))
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,16 +42,13 @@ function wpgancio_save_event ($post_id) {
|
|||||||
|
|
||||||
$gancio_id = get_post_meta($post_id, 'wpgancio_gancio_id', TRUE);
|
$gancio_id = get_post_meta($post_id, 'wpgancio_gancio_id', TRUE);
|
||||||
|
|
||||||
// when
|
$start_datetime = eo_get_schedule_start( 'U', $post_id );
|
||||||
$start_datetime = eo_get_the_start( 'U', $post_id );
|
|
||||||
$end_datetime = eo_get_the_end('U', $post_id);
|
|
||||||
|
|
||||||
// get place details
|
// get place details
|
||||||
$venue_id = eo_get_venue($post_id);
|
$venue_id = eo_get_venue($post_id);
|
||||||
$place_name = eo_get_venue_name($venue_id);
|
$place_name = eo_get_venue_name($venue_id);
|
||||||
$place_address = eo_get_venue_address($venue_id);
|
$place_address = eo_get_venue_address($venue_id);
|
||||||
$instance_url = get_option('wpgancio_instance_url', get_site_option('wpgancio_instance_url'));
|
$instance_url = get_option('wpgancio_instance_url') ?: get_site_option('wpgancio_instance_url');
|
||||||
|
|
||||||
|
|
||||||
$body = array (
|
$body = array (
|
||||||
'title' => $event->post_title,
|
'title' => $event->post_title,
|
||||||
@@ -76,22 +73,52 @@ function wpgancio_save_event ($post_id) {
|
|||||||
$response = $http->request( $instance_url . '/api/event', array(
|
$response = $http->request( $instance_url . '/api/event', array(
|
||||||
'method' => 'PUT',
|
'method' => 'PUT',
|
||||||
'headers' => array (
|
'headers' => array (
|
||||||
'Authorization' => 'Bearer ' . get_option('wpgancio_token', get_site_option('wpgancio_token')),
|
'Authorization' => 'Bearer ' . (get_option('wpgancio_token') ?: get_site_option('wpgancio_token')),
|
||||||
'Content-Type' => 'application/json'
|
'Content-Type' => 'application/json'
|
||||||
), 'body' => wp_json_encode($body) ));
|
), 'body' => wp_json_encode($body) ));
|
||||||
} else { // or create
|
} else { // or create
|
||||||
$response = wp_remote_post($instance_url . '/api/event', array(
|
$response = wp_remote_post($instance_url . '/api/event', array(
|
||||||
'headers' => array (
|
'headers' => array (
|
||||||
'Authorization' => 'Bearer ' . get_option('wpgancio_token', get_site_option('wpgancio_token')),
|
'Authorization' => 'Bearer ' . (get_option('wpgancio_token') ?: get_site_option('wpgancio_token')),
|
||||||
'Content-Type' => 'application/json'
|
'Content-Type' => 'application/json'
|
||||||
), 'body' => wp_json_encode($body) ));
|
), 'body' => wp_json_encode($body) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_wp_error( $response ) ) {
|
if (is_wp_error($response)) {
|
||||||
$error_message = $response->get_error_message();
|
$error_message = $response->get_error_message();
|
||||||
echo "<div class='error notice'><p>" . esc_html($error_message) . "</p></div>";
|
set_transient("wpgancio_error_", esc_html($error_message), 45);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wp_remote_retrieve_response_code($response) != 200) {
|
||||||
|
set_transient("wpgancio_error_{$post_id}", wp_remote_retrieve_body($response), 45);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$data = json_decode(wp_remote_retrieve_body($response));
|
$data = json_decode(wp_remote_retrieve_body($response));
|
||||||
|
|
||||||
|
$event_url = $instance_url . '/event/' . ($data->slug ? $data->slug : $data->id);
|
||||||
|
set_transient("wpgancio_message_{$post_id}", "Event updated. <a href='{$event_url}'>{$event_url}</a>");
|
||||||
update_post_meta($post_id, 'wpgancio_gancio_id', intval($data->id));
|
update_post_meta($post_id, 'wpgancio_gancio_id', intval($data->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_action( 'admin_notices', 'wpgancio_error_message' );
|
||||||
|
function wpgancio_error_message () {
|
||||||
|
global $post_id;
|
||||||
|
if ( $error = get_transient( "wpgancio_error_{$post_id}" ) ) { ?>
|
||||||
|
<div class="error">
|
||||||
|
<p>[WPGancio] <?php echo $error; ?></p>
|
||||||
|
</div><?php
|
||||||
|
delete_transient("wpgancio_error_{$post_id}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $message = get_transient( "wpgancio_message_{$post_id}" ) ) { ?>
|
||||||
|
<div class="notice success">
|
||||||
|
<p>[WPGancio] <?php echo $message; ?></p>
|
||||||
|
</div><?php
|
||||||
|
delete_transient("wpgancio_message_{$post_id}");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Donate link: https://gancio.org
|
|||||||
Tags: events, gancio, fediverse, AP, activity pub
|
Tags: events, gancio, fediverse, AP, activity pub
|
||||||
Requires at least: 4.7
|
Requires at least: 4.7
|
||||||
Tested up to: 6.0
|
Tested up to: 6.0
|
||||||
Stable tag: 1.5
|
Stable tag: 1.6
|
||||||
Requires PHP: 7.0
|
Requires PHP: 7.0
|
||||||
License: AGPLv3 or later
|
License: AGPLv3 or later
|
||||||
License URI: https://www.gnu.org/licenses/agpl-3.0.html
|
License URI: https://www.gnu.org/licenses/agpl-3.0.html
|
||||||
@@ -18,6 +18,9 @@ for this to work an event manager plugin is required, only [Event Organiser](htt
|
|||||||
|
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
= 1.6 =
|
||||||
|
* Support MU installation
|
||||||
|
|
||||||
= 1.4 =
|
= 1.4 =
|
||||||
use `WP_GANCIO_DEFAULT_INSTANCEURL` as default instance url
|
use `WP_GANCIO_DEFAULT_INSTANCEURL` as default instance url
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ defined( 'ABSPATH' ) or die( 'Nope, not accessing this' );
|
|||||||
// https://codex.wordpress.org/Settings_API
|
// https://codex.wordpress.org/Settings_API
|
||||||
|
|
||||||
// Fires as an admin screen or script is being initialized. Register out settings
|
// Fires as an admin screen or script is being initialized. Register out settings
|
||||||
if (is_network_admin()) {
|
|
||||||
add_action('network_admin_menu', 'wpgancio_settings_init');
|
add_action('network_admin_menu', 'wpgancio_settings_init');
|
||||||
} else {
|
|
||||||
add_action('admin_menu', 'wpgancio_settings_init');
|
add_action('admin_menu', 'wpgancio_settings_init');
|
||||||
}
|
|
||||||
|
|
||||||
add_action('add_meta_boxes_event', 'wpgancio_remove_meta_boxes', 10, 2);
|
add_action('add_meta_boxes_event', 'wpgancio_remove_meta_boxes', 10, 2);
|
||||||
function wpgancio_remove_meta_boxes () {
|
function wpgancio_remove_meta_boxes () {
|
||||||
@@ -16,6 +13,24 @@ function wpgancio_remove_meta_boxes () {
|
|||||||
|
|
||||||
function wpgancio_settings_init() {
|
function wpgancio_settings_init() {
|
||||||
|
|
||||||
|
|
||||||
|
if (!is_network_admin()) {
|
||||||
|
add_options_page(
|
||||||
|
'Gancio',
|
||||||
|
'Gancio',
|
||||||
|
'manage_options',
|
||||||
|
'wpgancio',
|
||||||
|
'wpgancio_options_page_html');
|
||||||
|
} else {
|
||||||
|
add_submenu_page(
|
||||||
|
'settings.php',
|
||||||
|
'Gancio',
|
||||||
|
'Gancio',
|
||||||
|
'manage_network_options',
|
||||||
|
'wpgancio',
|
||||||
|
'wpgancio_network_options_page_html');
|
||||||
|
}
|
||||||
|
|
||||||
// register a new settings page
|
// register a new settings page
|
||||||
add_settings_section('wpgancio_settings', __('Settings'), false, 'wpgancio');
|
add_settings_section('wpgancio_settings', __('Settings'), false, 'wpgancio');
|
||||||
|
|
||||||
@@ -34,33 +49,65 @@ function wpgancio_settings_init() {
|
|||||||
|
|
||||||
|
|
||||||
add_action( 'update_option_wpgancio_instance_url', 'wpgancio_update_options', 15, 2);
|
add_action( 'update_option_wpgancio_instance_url', 'wpgancio_update_options', 15, 2);
|
||||||
|
add_action( 'update_site_option_wpgancio_instance_url', 'wpgancio_update_options', 15, 2);
|
||||||
function wpgancio_update_options ($old_value, $instance_url) {
|
function wpgancio_update_options ($old_value, $instance_url) {
|
||||||
if (!is_network_admin()) {
|
if (!is_network_admin()) {
|
||||||
$redirect_uri = admin_url('options-general.php?page=wpgancio');
|
$redirect_uri = admin_url('options-general.php?page=wpgancio');
|
||||||
|
$client_id = get_option('wpgancio_client_id');
|
||||||
} else {
|
} else {
|
||||||
$redirect_uri = network_admin_url('settings.php?page=wpgancio');
|
$redirect_uri = network_admin_url('settings.php?page=wpgancio');
|
||||||
|
$client_id = get_site_option('wpgancio_client_id');
|
||||||
}
|
}
|
||||||
$query = join('&', array(
|
|
||||||
'response_type=code',
|
|
||||||
'redirect_uri=' . esc_url($redirect_uri),
|
|
||||||
'scope=event:write',
|
|
||||||
'client_id=' . get_option('wpgancio_client_id'),
|
|
||||||
));
|
|
||||||
|
|
||||||
wp_redirect("${instance_url}/oauth/authorize?${query}");
|
wp_redirect(add_query_arg(array(
|
||||||
|
"response_type" => "code",
|
||||||
|
"redirect_uri" => $redirect_uri,
|
||||||
|
"scope" => "event:write",
|
||||||
|
"client_id" => $client_id ), "${instance_url}/oauth/authorize"));
|
||||||
// return $instance_url;
|
// return $instance_url;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
add_action( 'network_admin_edit_wpgancio_instance_url', 'wpgancio_instance_url_save_settings' );
|
||||||
|
|
||||||
|
function wpgancio_instance_url_save_settings(){
|
||||||
|
|
||||||
|
// check_admin_referer( 'misha-validate' ); // Nonce security check
|
||||||
|
|
||||||
|
if (isset($_POST['wpgancio_instance_url'])) {
|
||||||
|
update_site_option( 'wpgancio_instance_url', $_POST['wpgancio_instance_url'] );
|
||||||
|
} else {
|
||||||
|
delete_site_option( 'wpgancio_instance_url');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wp_redirect( add_query_arg( array(
|
||||||
|
'page' => 'wpgancio',
|
||||||
|
'updated' => true ), network_admin_url('settings.php?page=wpgancio')
|
||||||
|
));
|
||||||
|
|
||||||
|
exit;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Fires before the administration menu loads in the admin, add our options page
|
// Fires before the administration menu loads in the admin, add our options page
|
||||||
add_action('admin_menu', 'wpgancio_options_page');
|
|
||||||
|
|
||||||
function wpgancio_instance_url_validate ($instance_url) {
|
function wpgancio_instance_url_validate ($instance_url) {
|
||||||
|
|
||||||
$old_instance_url = get_option('wpgancio_instance_url');
|
|
||||||
if ($instance_url === $old_instance_url) {
|
if (!is_network_admin()) {
|
||||||
return $instance_url;
|
$old_instance_url = get_option('wpgancio_instance_url');
|
||||||
|
if ($instance_url === $old_instance_url) {
|
||||||
|
return $instance_url;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$old_instance_url = get_site_option('wpgancio_instance_url');
|
||||||
|
if ($instance_url === $old_instance_url) {
|
||||||
|
return $instance_url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_network_admin()) {
|
if (!is_network_admin()) {
|
||||||
@@ -96,16 +143,7 @@ function wpgancio_instance_url_validate ($instance_url) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function wpgancio_options_page() {
|
|
||||||
// add top level menu page
|
|
||||||
add_options_page(
|
|
||||||
'Gancio',
|
|
||||||
'Gancio',
|
|
||||||
'manage_options',
|
|
||||||
'wpgancio',
|
|
||||||
'wpgancio_options_page_html'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// instance url field cb
|
// instance url field cb
|
||||||
// field callbacks can accept an $args parameter, which is an array.
|
// field callbacks can accept an $args parameter, which is an array.
|
||||||
@@ -129,9 +167,7 @@ function wpgancio_instance_url_cb( $args ) {
|
|||||||
value="<?php echo esc_attr($instance_url); ?>"
|
value="<?php echo esc_attr($instance_url); ?>"
|
||||||
name="wpgancio_instance_url">
|
name="wpgancio_instance_url">
|
||||||
|
|
||||||
<p class="description">
|
<p class="description">Instance URL you want to publish events to.</p>
|
||||||
<?php esc_html( 'Insert your gancio instance URL', 'wpgancio' ); ?>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
@@ -162,7 +198,7 @@ function wpgancio_options_page_html() {
|
|||||||
if (is_wp_error($response)) {
|
if (is_wp_error($response)) {
|
||||||
add_settings_error('wpgancio_messages', 'wpgancio_messages', $response->get_error_message());
|
add_settings_error('wpgancio_messages', 'wpgancio_messages', $response->get_error_message());
|
||||||
settings_errors('wpgancio_messages');
|
settings_errors('wpgancio_messages');
|
||||||
} elseif ($response['response']['code'] == 500) {
|
} elseif ($response['response']['code'] != 200) {
|
||||||
add_settings_error('wpgancio_messages', 'wpgancio_messages', wp_remote_retrieve_body($response));
|
add_settings_error('wpgancio_messages', 'wpgancio_messages', wp_remote_retrieve_body($response));
|
||||||
settings_errors('wpgancio_messages');
|
settings_errors('wpgancio_messages');
|
||||||
} else {
|
} else {
|
||||||
@@ -173,15 +209,56 @@ function wpgancio_options_page_html() {
|
|||||||
settings_errors('wpgancio_messages');
|
settings_errors('wpgancio_messages');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wpgancio_general_options_page_html();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function wpgancio_network_options_page_html() {
|
||||||
|
// check user capabilities
|
||||||
|
if (! current_user_can('manage_site_options')) { return; }
|
||||||
|
|
||||||
|
// show error/update messages
|
||||||
|
$code = sanitize_key(isset($_GET['code']) ? $_GET['code'] : '');
|
||||||
|
if ( $code ) {
|
||||||
|
update_site_option('wpgancio_code', $code);
|
||||||
|
$instance_url = get_site_option('wpgancio_instance_url');
|
||||||
|
|
||||||
|
$response = wp_remote_post($instance_url . "/oauth/token", array(
|
||||||
|
'body' => array(
|
||||||
|
'client_id' => get_site_option('wpgancio_client_id'),
|
||||||
|
'client_secret' => get_site_option('wpgancio_client_secret'),
|
||||||
|
'scope' => 'event:write',
|
||||||
|
'grant_type' => 'authorization_code',
|
||||||
|
'code' => $code
|
||||||
|
)));
|
||||||
|
|
||||||
|
if (is_wp_error($response)) {
|
||||||
|
add_settings_error('wpgancio_messages', 'wpgancio_messages', $response->get_error_message());
|
||||||
|
settings_errors('wpgancio_messages');
|
||||||
|
} elseif (wp_remote_retrieve_response_code($response) != 200) {
|
||||||
|
add_settings_error('wpgancio_messages', 'wpgancio_messages', wp_remote_retrieve_body($response));
|
||||||
|
settings_errors('wpgancio_messages');
|
||||||
|
} else {
|
||||||
|
$data = json_decode(wp_remote_retrieve_body($response), true);
|
||||||
|
update_site_option('wpgancio_token', sanitize_key($data['access_token']));
|
||||||
|
update_site_option('wpgancio_refresh', sanitize_key($data['refresh_token']));
|
||||||
|
add_settings_error('wpgancio_messages', 'wpgancio_messages', 'Association completed!', 'success');
|
||||||
|
settings_errors('wpgancio_messages');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wpgancio_general_options_page_html();
|
||||||
|
}
|
||||||
|
|
||||||
|
function wpgancio_general_options_page_html () {
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
|
|
||||||
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
|
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
|
||||||
<form action="options.php" method="post">
|
<?php if (!is_network_admin()) { ?>
|
||||||
<?php
|
<form action="options.php" method="post">
|
||||||
|
<?php } else { ?>
|
||||||
|
<form action="edit.php?action=wpgancio_instance_url" method="post">
|
||||||
|
<?php }
|
||||||
|
|
||||||
// output security fields for the registered setting "wpgancio"
|
// output security fields for the registered setting "wpgancio"
|
||||||
settings_fields('wpgancio');
|
settings_fields('wpgancio');
|
||||||
|
|||||||
Reference in New Issue
Block a user