400 ) ); } switch ( $activity['type'] ) { case 'Create': $activity = \activities\create\handle( $actor, $activity ); break; case 'Update': $activity = \activities\update\handle( $actor, $activity ); break; case 'Delete': $activity = \activities\delete\handle( $actor, $activity ); break; case 'Follow': break; case 'Add': break; case 'Remove': break; case 'Like': break; case 'Block': break; case 'Undo': break; default: // handle wrapping object in Create activity break; } if ( is_wp_error( $activity ) ) { return $activity; } else { deliver_activity( $activity ); return persist_activity( $actor, $activity ); } } function deliver_activity( $activity ) { // TODO } function persist_activity( $actor, $activity ) { global $wpdb; $activity = \activities\persist_activity( $activity ); $activity_id = $wpdb->insert_id; $wpdb->insert( 'activitypub_outbox', array( 'actor' => $actor, 'activity_id' => $activity_id, ) ); $response = new \WP_REST_Response(); $response->set_status( 201 ); $response->header( 'Location', $activity['id'] ); return $response; } function create_outbox_table() { global $wpdb; $wpdb->query( " CREATE TABLE IF NOT EXISTS activitypub_outbox ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, actor VARCHAR(128) NOT NULL, activity_id INT UNSIGNED NOT NULL, FOREIGN KEY activity_fk(activity_id) REFERENCES activitypub_activities(id) ); " ); } ?>