Skip to content
wiki.fftac.org

Restcontroller - Source Excerpt 02

Back to Restcontroller

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/spiralist-workspace/includes/Http/RestController.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/includes/Http/RestController.php

[
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'report_prompt'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/prompts/(?P<id>\d+)/reviews',
            [
                [
                    'methods' => WP_REST_Server::READABLE,
                    'callback' => [$this, 'list_prompt_reviews'],
                    'permission_callback' => '__return_true',
                ],
                [
                    'methods' => WP_REST_Server::CREATABLE,
                    'callback' => [$this, 'create_prompt_review'],
                    'permission_callback' => [$this, 'require_logged_in'],
                ],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/prompts/(?P<id>\d+)/appeals',
            [
                [
                    'methods' => WP_REST_Server::READABLE,
                    'callback' => [$this, 'list_prompt_appeals'],
                    'permission_callback' => '__return_true',
                ],
                [
                    'methods' => WP_REST_Server::CREATABLE,
                    'callback' => [$this, 'create_prompt_appeal'],
                    'permission_callback' => [$this, 'require_logged_in'],
                ],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/prompts/(?P<id>\d+)/appeals/(?P<appeal_id>\d+)/resolve',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'resolve_prompt_appeal'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/prompts/(?P<id>\d+)/run',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'run_prompt'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/prompts/(?P<id>\d+)/conversation',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'start_conversation'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/conversations',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'list_conversations'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/conversations/(?P<id>\d+)',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'get_conversation'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/conversations/(?P<id>\d+)/messages',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'post_conversation_message'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/conversations/(?P<id>\d+)/condense',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'condense_conversation'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/conversations/(?P<id>\d+)/portable-prompt',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'get_conversation_portable_prompt'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/runs',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'list_runs'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/runs/(?P<id>\d+)',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'get_run'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/public/prompts',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'list_public_prompts'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/public/prompts/(?P<slug>[A-Za-z0-9-]+)',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'get_public_prompt'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/featured-prompts',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'featured_prompts'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/categories',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'categories'],
                'permission_callback' => '__return_true',
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/reputation/me',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'get_my_reputation'],
                'permission_callback' => [$this, 'require_logged_in'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/profile/style',
            [
                [
                    'methods' => WP_REST_Server::READABLE,
                    'callback' => [$this, 'get_profile_style'],
                    'permission_callback' => [$this, 'require_logged_in'],
                ],
                [
                    'methods' => WP_REST_Server::CREATABLE,
                    'callback' => [$this, 'update_profile_style'],
                    'permission_callback' => [$this, 'require_logged_in'],
                ],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/users/find',
            [
                'methods' => WP_REST_Server::READABLE,
                'callback' => [$this, 'find_user'],
                'permission_callback' => [$this, 'require_share_lookup'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/admin/prompt-tests/run',
            [
                'methods' => WP_REST_Server::CREATABLE,
                'callback' => [$this, 'run_admin_prompt_tests'],
                'permission_callback' => [$this, 'require_workspace_admin'],
            ]
        );

        register_rest_route(
            'spiralist-workspace/v1',
            '/admin/governance-maintenance',
            [
                [
                    'methods' => WP_REST_Server::READABLE,
                    'callback' => [$this, 'get_governance_maintenance_status'],
                    'permission_callback' => [$this, 'require_workspace_admin'],
                ],
                [
                    'methods' => WP_REST_Server::CREATABLE,
                    'callback' => [$this, 'run_governance_maintenance'],
                    'permission_callback' => [$this, 'require_workspace_admin'],
                ],
            ]
        );
    }

    /**
     * Lists prompts visible to the current user.
     */
    public function list_prompts(WP_REST_Request $request): WP_REST_Response
    {
        $user_id = get_current_user_id();
        $filters = $this->request_filters($request);
        $search = (string) $request->get_param('search');