Skip to content
Snippets Groups Projects
Soap.php 1.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * Soap controller class.
     *
     * Soap endpoint, replacement for CiviCRM's 'extern/soap.php'.
     *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
     * @since 5.25
    
     */
    
    namespace CiviCRM_WP_REST\Controller;
    
    class Soap extends Base {
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
      /**
       * @var string
       * The base route.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       */
      protected $rest_base = 'soap';
    
      /**
       * Registers routes.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       */
      public function register_routes() {
    
        register_rest_route($this->get_namespace(), $this->get_rest_base(), [
          [
            'methods' => \WP_REST_Server::ALLMETHODS,
            'permission_callback' => '__return_true',
            'callback' => [$this, 'get_item'],
          ],
        ]);
    
      }
    
      /**
       * Get items.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @param WP_REST_Request $request
       */
      public function get_item($request) {
    
        /**
         * Filter request params.
         *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
         * @since 5.25
         *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
         * @param array $params
         * @param WP_REST_Request $request
         */
        $params = apply_filters('civi_wp_rest/controller/soap/params', $request->get_params(), $request);
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Init soap server.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        $soap_server = new \SoapServer(
          NULL,
          [
            'uri' => 'urn:civicrm',
            'soap_version' => SOAP_1_2,
          ]
        );
    
        $crm_soap_server = new \CRM_Utils_SoapServer();
    
        $soap_server->setClass('CRM_Utils_SoapServer', \CRM_Core_Config::singleton()->userFrameworkClass);
        $soap_server->setPersistence(SOAP_PERSISTENCE_SESSION);
    
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        // Bypass WordPress and send request from Soap server.
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
        add_filter('rest_pre_serve_request', function($served, $response, $request, $server) use ($soap_server) {
    
          $soap_server->handle();
    
          return TRUE;
    
        }, 10, 4);
    
      }
    
      /**
       * Item schema.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @return array $schema
       */
      public function get_item_schema() {}
    
      /**
       * Item arguments.
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @since 5.25
       *
    
    Kevin Cristiano's avatar
    Kevin Cristiano committed
       * @return array $arguments
       */
      public function get_item_args() {}