namespace, '/' . $this->rest_base . '/(?P[\d]+)/integrations', array( 'args' => array( 'form_id' => array( 'description' => __( 'Unique identifier for the object', 'weforms' ), 'type' => 'integer', 'sanitize_callback' => 'absint', 'validate_callback' => array( $this, 'is_form_exists' ), 'required' => true, ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item_integrations' ), 'args' => array( 'context' => $this->get_context_param( [ 'default' => 'view' ] ) ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_item_integrations' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), ), ) ); } /** * get item integrations * * @since 1.4.2 * * @param WP_REST_Request $request * * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item_integrations( $request ) { $form_id = $request->get_param( 'form_id' ); $form = weforms()->form->get( $form_id ); $data = $form->get_integrations(); $response = $this->prepare_response_for_collection( $data, $request ); $response = rest_ensure_response( $response ); $response->header( 'X-WP-Total', (int) count( $data['integrations'] ) ); return $response; } /** * [update_item_integrations description] * @param [type] $request [description] * @return [type] [description] */ public function update_item_integrations( $request ) { $wpuf_form_id = $request->get_param('form_id'); $integrations = $request->get_param('integrations'); $integration_list = weforms()->integrations->get_integration_js_settings(); $form = weforms()->form->get( $wpuf_form_id ); $form_integration = $form->get_integrations(); $integrations = array_intersect_key( $integrations, $integration_list ); if ( !class_exists( 'WeForms_Pro' ) ) { $integrations = array_udiff_assoc( $integrations, $integration_list, function( $item, $item_list ) { if( isset( $item_list['pro'] ) && $item_list['pro'] == true ) { return 0; } return $item; } ); } $data = array( 'form_id' => $wpuf_form_id, 'integrations' => $integrations ); $new_form_integrations = array_merge( $data['integrations'], array_diff_key( $form->get_integrations(), $data['integrations'] ) ); update_post_meta( $data['form_id'], 'integrations', $new_form_integrations ); $response_data = array( 'id' => $form->data->ID, 'integrations' => $form->get_integrations() ); $response = rest_ensure_response( $response_data ); $response->set_status( 201 ); $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $form->id ) ) ); return $response; } /** * Get the Form's schema, conforming to JSON Schema * * @return array */ public function get_item_schema() { $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'forms', 'type' => 'object', 'properties' => array( 'form_id' => array( 'description' => __( 'Unique identifier for the object', 'weforms' ), 'type' => 'integer', 'sanitize_callback' => 'absint', 'validate_callback' => array( $this, 'is_form_exists' ), 'context' => array( 'embed', 'view', 'edit' ), 'required' => true, 'readonly' => true, ), "integrations" => array( 'description' => __( '', 'weforms' ), 'type' => 'object', 'context' => [ 'edit' ,'view'], 'required' => false, ), ), ); return $schema; } }