Verified Commit fb56af60 authored by Kevin Cristiano's avatar Kevin Cristiano 🌎

civicrm release

parent 785ffa71
......@@ -2,7 +2,7 @@
/*
Plugin Name: CiviCRM
Description: CiviCRM - Growing and Sustaining Relationships
Version: 5.23.3
Version: 5.23.4
Author: CiviCRM LLC
Author URI: https://civicrm.org/
Plugin URI: https://docs.civicrm.org/sysadmin/en/latest/install/wordpress/
......@@ -54,7 +54,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
// Set version here: when it changes, will force JS to reload
define( 'CIVICRM_PLUGIN_VERSION', '5.23.3' );
define( 'CIVICRM_PLUGIN_VERSION', '5.23.4' );
// Store reference to this file
if (!defined('CIVICRM_PLUGIN_FILE')) {
......@@ -121,17 +121,6 @@ if ( file_exists( CIVICRM_SETTINGS_PATH ) ) {
// Prevent CiviCRM from rendering its own header
define( 'CIVICRM_UF_HEAD', TRUE );
/**
* Setting this to 'true' will replace all mailing URLs calls to 'extern/url.php'
* and 'extern/open.php' with their REST counterpart 'civicrm/v3/url' and 'civicrm/v3/open'.
*
* Use for test purposes, may affect mailing
* performance, see Plugin->replace_tracking_urls() method.
*/
if ( ! defined( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING' ) ) {
define( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING', false );
}
/**
* Define CiviCRM_For_WordPress Class.
......@@ -523,11 +512,6 @@ class CiviCRM_For_WordPress {
include_once CIVICRM_PLUGIN_DIR . 'includes/civicrm.basepage.php';
$this->basepage = new CiviCRM_For_WordPress_Basepage;
if ( ! class_exists( 'CiviCRM_WP_REST\Autoloader' ) ) {
// Include REST API autoloader class
require_once( CIVICRM_PLUGIN_DIR . 'wp-rest/Autoloader.php' );
}
}
......@@ -652,16 +636,6 @@ class CiviCRM_For_WordPress {
// Register hooks for clean URLs.
$this->register_hooks_clean_urls();
if ( ! class_exists( 'CiviCRM_WP_REST\Plugin' ) ) {
// Set up REST API.
CiviCRM_WP_REST\Autoloader::add_source( $source_path = trailingslashit( CIVICRM_PLUGIN_DIR . 'wp-rest' ) );
// Init REST API.
new CiviCRM_WP_REST\Plugin;
}
}
......
......@@ -38,7 +38,7 @@ class CRM_ACL_Form_WordPress_Permissions extends CRM_Core_Form {
}
foreach ($wp_roles->role_names as $role => $name) {
// Don't show the permissions options for administrator, as they have all permissions
if ( is_multisite() OR $role !== 'administrator') {
if ($role !== 'administrator') {
$roleObj = $wp_roles->get_role($role);
if (!empty($roleObj->capabilities)) {
foreach ($roleObj->capabilities as $ckey => $cname) {
......
{* file to handle db changes in 5.23.4 during upgrade *}
......@@ -838,13 +838,11 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
$contactCreated = 0;
$contactMatching = 0;
// previously used $wpdb - which means WordPress *must* be bootstrapped
$wpUsers = get_users(array(
'blog_id' => get_current_blog_id(),
'number' => -1,
));
global $wpdb;
$wpUserIds = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users");
foreach ($wpUsers as $wpUserData) {
foreach ($wpUserIds as $wpUserId) {
$wpUserData = get_userdata($wpUserId);
$contactCount++;
if ($match = CRM_Core_BAO_UFMatch::synchronizeUFMatch($wpUserData,
$wpUserData->$id,
......
......@@ -38,19 +38,19 @@ class Paths {
->register('civicrm.packages', function () {
return [
'path' => \Civi::paths()->getPath('[civicrm.root]/packages/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/packages/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/packages/', 'absolute'),
];
})
->register('civicrm.vendor', function () {
return [
'path' => \Civi::paths()->getPath('[civicrm.root]/vendor/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/vendor/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/vendor/', 'absolute'),
];
})
->register('civicrm.bower', function () {
return [
'path' => \Civi::paths()->getPath('[civicrm.root]/bower_components/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/bower_components/'),
'url' => \Civi::paths()->getUrl('[civicrm.root]/bower_components/', 'absolute'),
];
})
->register('civicrm.files', function () {
......
<?php
/** @deprecated */
function civicrmVersion( ) {
return array( 'version' => '5.23.3',
return array( 'version' => '5.23.4',
'cms' => 'Wordpress',
'revision' => '' );
}
......
......@@ -15,6 +15,15 @@ Other resources for identifying changes are:
* https://github.com/civicrm/civicrm-joomla
* https://github.com/civicrm/civicrm-wordpress
## CiviCRM 5.23.4
Released March 24, 2020
- **[Synopsis](release-notes/5.23.4.md#synopsis)**
- **[Bugs resolved](release-notes/5.23.4.md#bugs)**
- **[Credits](release-notes/5.23.4.md#credits)**
- **[Feedback](release-notes/5.23.4.md#feedback)**
## CiviCRM 5.23.3
Released March 16, 2020
......
# CiviCRM 5.23.4
Released March 24, 2020.
- **[Synopsis](#synopsis)**
- **[Bugs resolved](#bugs)**
- **[Credits](#credits)**
- **[Feedback](#feedback)**
## <a name="synopsis"></a>Synopsis
| *Does this version...?* | |
|:--------------------------------------------------------------- |:-------:|
| Fix security vulnerabilities? | no |
| Change the database schema? | no |
| Alter the API? | no |
| Require attention to configuration options? | no |
| Fix problems installing or upgrading to a previous version? | no |
| Introduce features? | no |
| **Fix bugs?** | **yes** |
## <a name="bugs"></a>Bugs resolved
**_Various_: Fix malformed URLs when CMS root is a subdirectory ([dev/joomla#26](https://lab.civicrm.org/dev/joomla/issues/26): [#16887](https://github.com/civicrm/civicrm-core/pull/16887))**
## <a name="credits"></a>Credits
This release was developed by the following authors and reviewers:
Tadpole Collective - Kevin Cristiano; Stephen Palmstrom; Squiffle Consulting - Aidan
Saunders; Nicol Wistreich; JMA Consulting - Seamus Lee; howardshand; CiviCRM - Tim Otten;
Andy Burns; Andrew Thompson
## <a name="feedback"></a>Feedback
These release notes are edited by Tim Otten and Andrew Hunt. If you'd like to
provide feedback on them, please login to https://chat.civicrm.org/civicrm and
contact `@agh1`.
......@@ -23945,4 +23945,4 @@ INSERT INTO `civicrm_report_instance`
( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`)
VALUES
( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}');
UPDATE civicrm_domain SET version = '5.23.3';
UPDATE civicrm_domain SET version = '5.23.4';
......@@ -399,7 +399,7 @@ UNLOCK TABLES;
LOCK TABLES `civicrm_domain` WRITE;
/*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */;
INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.23.3',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.23.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
/*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
UNLOCK TABLES;
......@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936::getLoader();
return ComposerAutoloaderInitbcda3b6f641956582e5a0b7f014f9828::getLoader();
......@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936
class ComposerAutoloaderInitbcda3b6f641956582e5a0b7f014f9828
{
private static $loader;
......@@ -19,9 +19,9 @@ class ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitbcda3b6f641956582e5a0b7f014f9828', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitbcda3b6f641956582e5a0b7f014f9828', 'loadClassLoader'));
$includePaths = require __DIR__ . '/include_paths.php';
$includePaths[] = get_include_path();
......@@ -31,7 +31,7 @@ class ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
......@@ -52,19 +52,19 @@ class ComposerAutoloaderInit30ee554012b9f91d6abd374c8efeb936
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$files;
$includeFiles = Composer\Autoload\ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire30ee554012b9f91d6abd374c8efeb936($fileIdentifier, $file);
composerRequirebcda3b6f641956582e5a0b7f014f9828($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire30ee554012b9f91d6abd374c8efeb936($fileIdentifier, $file)
function composerRequirebcda3b6f641956582e5a0b7f014f9828($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
......
......@@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit30ee554012b9f91d6abd374c8efeb936
class ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828
{
public static $files = array (
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
......@@ -476,11 +476,11 @@ class ComposerStaticInit30ee554012b9f91d6abd374c8efeb936
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$prefixesPsr0;
$loader->fallbackDirsPsr0 = ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$fallbackDirsPsr0;
$loader->classMap = ComposerStaticInit30ee554012b9f91d6abd374c8efeb936::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$prefixesPsr0;
$loader->fallbackDirsPsr0 = ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$fallbackDirsPsr0;
$loader->classMap = ComposerStaticInitbcda3b6f641956582e5a0b7f014f9828::$classMap;
}, null, ClassLoader::class);
}
......
<?xml version="1.0" encoding="iso-8859-1" ?>
<version>
<version_no>5.23.3</version_no>
<version_no>5.23.4</version_no>
</version>
# EditorConfig is awesome: https://editorconfig.org
# Not top-most EditorConfig file
root = false
# Tab indentation
[*.php]
indent_style = tab
indent_size = 4
<?php
/**
* Autoloader class.
*
* @since 0.1
*/
namespace CiviCRM_WP_REST;
class Autoloader {
/**
* Instance.
*
* @since 0.1
* @var string
*/
private static $instance = null;
/**
* Namespace.
*
* @since 0.1
* @var string
*/
private $namespace = 'CiviCRM_WP_REST';
/**
* Autoloader directory sources.
*
* @since 0.1
* @var array
*/
private static $source_directories = [];
/**
* Constructor.
*
* @since 0.1
*/
private function __construct() {
$this->register_autoloader();
}
/**
* Creates an instance of this class.
*
* @since 0.1
*/
private static function instance() {
if ( ! self::$instance ) self::$instance = new self;
}
/**
* Adds a directory source.
*
* @since 0.1
* @param string $source The source path
*/
public static function add_source( string $source_path ) {
// make sure we have an instance
self::instance();
if ( ! is_readable( trailingslashit( $source_path ) ) )
return \WP_Error( 'civicrm_wp_rest_error', sprintf( __( 'The source %s is not readable.', 'civicrm' ), $source ) );
self::$source_directories[] = $source_path;
}
/**
* Registers the autoloader.
*
* @since 0.1
* @return bool Wehather the autoloader has been registered or not
*/
private function register_autoloader() {
return spl_autoload_register( [ $this, 'autoload' ] );
}
/**
* Loads the classes.
*
* @since 0.1
* @param string $class_name The class name to load
*/
private function autoload( $class_name ) {
$parts = explode( '\\', $class_name );
if ( $this->namespace !== $parts[0] ) return;
// remove namespace and join class path
$class_path = str_replace( '_', '-', implode( DIRECTORY_SEPARATOR, array_slice( $parts, 1 ) ) );
array_map( function( $source_path ) use ( $class_path ) {
$path = $source_path . $class_path . '.php';
if ( ! file_exists( $path ) ) return;
require $path;
}, static::$source_directories );
}
}
<?php
/**
* CiviCRM Mailing_Hooks class.
*
* @since 0.1
*/
namespace CiviCRM_WP_REST\Civi;
class Mailing_Hooks {
/**
* Mailing Url endpoint.
*
* @since 0.1
* @var string
*/
public $url_endpoint;
/**
* Mailing Open endpoint.
*
* @since 0.1
* @var string
*/
public $open_endpoint;
/**
* The parsed WordPress REST url.
*
* @since 1.0
* @var array
*/
public $parsed_rest_url;
/**
* Constructor.
*
* @since 0.1
*/
public function __construct() {
$this->url_endpoint = rest_url( 'civicrm/v3/url' );
$this->open_endpoint = rest_url( 'civicrm/v3/open' );
$this->parsed_rest_url = parse_url( rest_url() );
}
/**
* Register hooks.
*
* @since 0.1
*/
public function register_hooks() {
add_filter( 'civicrm_alterMailParams', [ $this, 'do_mailing_urls' ], 10, 2 );
add_filter( 'civicrm_alterExternUrl', [ $this, 'alter_mailing_extern_urls' ], 10, 6 );
}
/**
* Replaces the open, and click
* tracking URLs for a mailing (CiviMail)
* with thier REST counterparts.
*
* @uses 'civicrm_alterExternUrl' filter
*
* @param \GuzzleHttp\Psr7\Uri $url
* @param string|null $path
* @param string|null $query
* @param string|null $fragment
* @param bool|null $absolute
* @param bool|null $isSSL
*/
public function alter_mailing_extern_urls( &$url, $path, $query, $fragment, $absolute, $isSSL ) {
if ( $path == 'extern/url' ) {
$url = $url
->withHost( $this->parsed_rest_url['host'] )
->withPath( "{$this->parsed_rest_url['path']}civicrm/v3/url" );
}
if ( $path == 'extern/open' ) {
$url = $url
->withHost( $this->parsed_rest_url['host'] )
->withPath( "{$this->parsed_rest_url['path']}civicrm/v3/open" );
}
}
/**
* Filters the mailing html and replaces calls to 'extern/url.php' and
* 'extern/open.php' with their REST counterparts 'civicrm/v3/url' and 'civicrm/v3/open'.
*
* @uses 'civicrm_alterMailParams'
*
* @since 0.1
* @param array &$params Mail params
* @param string $context The Context
* @return array $params The filtered Mail params
*/
public function do_mailing_urls( &$params, $context ) {
if ( in_array( $context, [ 'civimail', 'flexmailer' ] ) ) {
$params['html'] = $this->is_mail_tracking_url_alterable( $params['html'] )
? $this->replace_html_mailing_tracking_urls( $params['html'] )
: $params['html'];
$params['text'] = $this->is_mail_tracking_url_alterable( $params['text'] )
? $this->replace_text_mailing_tracking_urls( $params['text'] )
: $params['text'];
}
return $params;
}
/**
* Replace html mailing tracking urls.
*
* @since 0.1
* @param string $contnet The mailing content
* @return string $content The mailing content
*/
public function replace_html_mailing_tracking_urls( string $content ) {
$doc = \phpQuery::newDocument( $content );
foreach ( $doc[ '[href*="civicrm/extern/url.php"], [src*="civicrm/extern/open.php"]' ] as $element ) {
$href = pq( $element )->attr( 'href' );
$src = pq( $element )->attr( 'src' );
// replace extern/url
if ( strpos( $href, 'civicrm/extern/url.php' ) ) {
$query_string = strstr( $href, '?' );
pq( $element )->attr( 'href', $this->url_endpoint . $query_string );
}
// replace extern/open
if ( strpos( $src, 'civicrm/extern/open.php' ) ) {
$query_string = strstr( $src, '?' );
pq( $element )->attr( 'src', $this->open_endpoint . $query_string );
}
unset( $href, $src, $query_string );
}
return $doc->html();
}
/**
* Replace text mailing tracking urls.
*
* @since 0.1
* @param string $contnet The mailing content
* @return string $content The mailing content
*/
public function replace_text_mailing_tracking_urls( string $content ) {
// replace extern url
$content = preg_replace( '/http.*civicrm\/extern\/url\.php/i', $this->url_endpoint, $content );
// replace open url
$content = preg_replace( '/http.*civicrm\/extern\/open\.php/i', $this->open_endpoint, $content );
return $content;
}
/**
* Checks whether for a given mail
* content (text or html) the tracking URLs
* are alterable/need to be altered.
*
* @since 0.1
* @param string $content The mail content (text or html)
* @return bool $is_alterable
*/
public function is_mail_tracking_url_alterable( string $content ) {
return strpos( $content, 'civicrm/extern/url.php' ) || strpos( $content, 'civicrm/extern/open.php' );
}
}
<?php
/**
* AuthorizeIPN controller class.
*
* Replacement for CiviCRM's 'extern/authorizeIPN.php'.
*
* @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method
*
* @since 0.1
*/
namespace CiviCRM_WP_REST\Controller;
class AuthorizeIPN extends Base {
/**
* The base route.
*
* @since 0.1
* @var string
*/
protected $rest_base = 'authorizeIPN';
/**
* Registers routes.
*
* @since 0.1
*/
public function register_routes() {
register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
[
'methods' => \WP_REST_Server::ALLMETHODS,
'callback' => [ $this, 'get_item' ]
]
] );
}
/**
* Get items.
*
* @since 0.1
* @param WP_REST_Request $request
*/
public function get_item( $request ) {
/**
* Filter request params.
*
* @since 0.1
* @param array $params
* @param WP_REST_Request $request
*/
$params = apply_filters( 'civi_wp_rest/controller/authorizeIPN/params', $request->get_params(), $request );
$authorize_IPN = new \CRM_Core_Payment_AuthorizeNetIPN( $params );
// log notification
\Civi::log()->alert( 'payment_notification processor_name=AuthNet', $params );
/**
* Filter AuthorizeIPN object.
*
* @param CRM_Core_Payment_AuthorizeNetIPN $authorize_IPN
* @param array $params
* @param WP_REST_Request $request
*/
$authorize_IPN = apply_filters( 'civi_wp_rest/controller/authorizeIPN/instance', $authorize_IPN, $params, $request );
try {
if ( ! method_exists( $authorize_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $authorize_IPN ) )
return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $authorize_IPN ) ) );
$result = $authorize_IPN->main();
} catch ( \CRM_Core_Exception $e ) {
\Civi::log()->error( $e->getMessage() );
\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
return $this->civi_rest_error( $e->getMessage() );
}
return rest_ensure_response( $result );
}
/**
* Checks whether object is an instance of CRM_Core_Payment_AuthorizeNetIPN or CRM_Core_Payment_BaseIPN.
*
* Needed because the instance is being filtered through 'civi_wp_rest/controller/authorizeIPN/instance'.
*
* @since 0.1
* @param CRM_Core_Payment_AuthorizeNetIPN|CRM_Core_Payment_BaseIPN $object
* @return bool
*/
public function instance_of_crm_base_ipn( $object ) {
return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_AuthorizeNetIPN;
}
/**
* Item schema.