pterotype/inc/activities.php

109 lines
3.1 KiB
PHP
Raw Normal View History

2018-08-29 20:38:10 +00:00
<?php
namespace activities;
function get_activity( $id ) {
global $wpdb;
$activity_json = $wpdb->get_var( $wpdb->prepare(
2018-09-19 15:16:41 +00:00
'SELECT activity FROM pterotype_activitypub_activities WHERE id = %d', $id
2018-08-29 20:38:10 +00:00
) );
if ( is_null( $activity_json ) ) {
return new \WP_Error(
2018-09-19 15:16:41 +00:00
'not_found', __( 'Activity not found', 'pterotype' ), array( 'status' => 404 )
2018-08-29 20:38:10 +00:00
);
}
2018-08-29 21:04:24 +00:00
$activity = json_decode( $activity_json, true );
return $activity;
}
function get_activity_by_activitypub_id( $activitypub_id ) {
global $wpdb;
$activity_json = $wpdb->get_var( $wpdb->prepare(
2018-09-19 15:16:41 +00:00
'SELECT activity FROM pterotype_activitypub_activities WHERE id = %s', $activitypub_id
) );
if ( is_null( $activity_json ) ) {
return new \WP_Error(
2018-09-19 15:16:41 +00:00
'not_found', __( 'Activity not found', 'pterotype' ), array( 'status' => 404 )
);
}
$activity = json_decode( $activity_json, true );
2018-08-29 20:38:10 +00:00
return $activity;
}
2018-09-14 01:52:13 +00:00
function strip_private_fields( $activity ) {
if ( array_key_exists( 'bto', $activity ) ) {
unset( $activity['bto'] );
}
if ( array_key_exists( 'bcc', $activity ) ) {
unset( $activity['bcc'] );
}
return $activity;
}
2018-08-29 20:38:10 +00:00
function persist_activity( $activity ) {
global $wpdb;
if ( !array_key_exists( 'id', $activity ) ) {
return new \WP_Error(
'invalid_activity',
2018-09-19 15:16:41 +00:00
__( 'Activity must have an "id" field', 'pterotype' ),
array( 'status' => 400 )
);
}
$activitypub_id = $activity['id'];
2018-09-19 15:16:41 +00:00
$wpdb->insert( 'pterotype_activitypub_activities', array(
'activitypub_id' => $activitypub_id,
'activity' => wp_json_encode( $activity )
) );
2018-08-29 20:38:10 +00:00
return $activity;
}
2018-09-19 11:56:57 +00:00
function create_local_activity( $activity ) {
global $wpdb;
2018-09-19 15:16:41 +00:00
$res = $wpdb->insert( 'pterotype_activitypub_activities', array(
2018-09-19 11:56:57 +00:00
'activity' => wp_json_encode( $activity )
) );
if ( !$res ) {
return new \WP_Error(
2018-09-19 15:16:41 +00:00
'db_error', __( 'Failed to insert activity row', 'pterotype' )
2018-09-19 11:56:57 +00:00
);
}
$activity_id = $wpdb->insert_id;
2018-09-19 15:16:41 +00:00
$activity_url = get_rest_url( null, sprintf( '/pterotype/v1/activity/%d', $id ) );
2018-09-19 11:56:57 +00:00
$activity['id'] = $activity_url;
$res = $wpdb->replace(
2018-09-19 15:16:41 +00:00
'pterotype_activitypub_activities',
2018-09-19 11:56:57 +00:00
array(
'id' => $activity_id,
'activitypub_id' => $activity_url,
'activity' => $activity
),
array( '%d', '%s', '%s' )
);
if ( !$res ) {
return new \WP_Error(
2018-09-19 15:16:41 +00:00
'db_error', __( 'Failed to hydrate activity id', 'pterotype' )
2018-09-19 11:56:57 +00:00
);
}
return $activity;
}
2018-08-29 20:38:10 +00:00
function create_activities_table() {
global $wpdb;
$wpdb->query(
"
2018-09-19 15:16:41 +00:00
CREATE TABLE IF NOT EXISTS pterotype_activitypub_activities (
2018-08-29 20:38:10 +00:00
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
2018-09-19 12:54:07 +00:00
activitypub_id VARCHAR(255) UNIQUE NOT NULL,
2018-08-29 20:38:10 +00:00
activity TEXT NOT NULL
2018-09-19 12:54:07 +00:00
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
2018-08-29 20:38:10 +00:00
"
);
$wpdb->query(
"
2018-09-19 15:16:41 +00:00
CREATE UNIQUE INDEX ACTIVITIES_ACTIVITYPUB_ID_INDEX
ON pterotype_activitypub_activities (activitypub_id);
"
);
2018-08-29 20:38:10 +00:00
}
?>